diff --git a/srt.go b/srt.go
index e0f0002..74fe153 100644
--- a/srt.go
+++ b/srt.go
@@ -113,9 +113,10 @@ func ReadFromSRT(i io.Reader) (o *Subtitles, err error) {
o.Items = append(o.Items, s)
} else {
// Add text
- if l := parseTextSrt(line); len(l.Items) > 0 {
- s.Lines = append(s.Lines, l)
- }
+ s.Lines = append(s.Lines, parseTextSrt(line))
+ // if l := parseTextSrt(line); len(l.Items) > 0 {
+ // s.Lines = append(s.Lines, l)
+ // }
}
}
return
diff --git a/srt_test.go b/srt_test.go
index f44fbbd..be630ee 100644
--- a/srt_test.go
+++ b/srt_test.go
@@ -46,3 +46,22 @@ func TestSRTMissingSequence(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, string(c), w.String())
}
+
+func TestSRTStyled(t *testing.T) {
+ // Open
+ s, err := astisub.OpenFile("./testdata/example-styled-in.srt")
+ assert.NoError(t, err)
+ assertStyledSubtitleItems(t, s)
+
+ // No subtitles to write
+ w := &bytes.Buffer{}
+ err = astisub.Subtitles{}.WriteToSRT(w)
+ assert.EqualError(t, err, astisub.ErrNoSubtitlesToWrite.Error())
+
+ // Write
+ c, err := ioutil.ReadFile("./testdata/example-styled-out.srt")
+ assert.NoError(t, err)
+ err = s.WriteToSRT(w)
+ assert.NoError(t, err)
+ assert.Equal(t, string(c), w.String())
+}
diff --git a/subtitles_test.go b/subtitles_test.go
index a8012ba..6f06706 100644
--- a/subtitles_test.go
+++ b/subtitles_test.go
@@ -40,6 +40,51 @@ func assertSubtitleItems(t *testing.T, i *astisub.Subtitles) {
assert.Equal(t, "electronic melody)", i.Items[5].Lines[1].String())
}
+func assertStyledSubtitleItems(t *testing.T, i *astisub.Subtitles) {
+ assert.Len(t, i.Items, 6)
+ assert.Equal(t, 17*time.Second+985*time.Millisecond, i.Items[0].StartAt)
+ assert.Equal(t, 20*time.Second+521*time.Millisecond, i.Items[0].EndAt)
+ assert.Equal(t, "[instrumental music]", i.Items[0].Lines[0].String())
+ assert.Equal(t, "#00ff00", *i.Items[0].Lines[0].Items[0].InlineStyle.SRTColor)
+ assert.True(t, i.Items[0].Lines[0].Items[0].InlineStyle.SRTBold)
+ assert.False(t, i.Items[0].Lines[0].Items[0].InlineStyle.SRTItalics)
+ assert.False(t, i.Items[0].Lines[0].Items[0].InlineStyle.SRTUnderline)
+ assert.Equal(t, 47*time.Second+115*time.Millisecond, i.Items[1].StartAt)
+ assert.Equal(t, 48*time.Second+282*time.Millisecond, i.Items[1].EndAt)
+ assert.Equal(t, "[ticks]", i.Items[1].Lines[0].String())
+ assert.Equal(t, "#ffffff", *i.Items[1].Lines[0].Items[0].InlineStyle.SRTColor)
+ assert.False(t, i.Items[1].Lines[0].Items[0].InlineStyle.SRTBold)
+ assert.False(t, i.Items[1].Lines[0].Items[0].InlineStyle.SRTItalics)
+ assert.False(t, i.Items[1].Lines[0].Items[0].InlineStyle.SRTUnderline)
+ assert.Equal(t, 58*time.Second+192*time.Millisecond, i.Items[2].StartAt)
+ assert.Equal(t, 59*time.Second+727*time.Millisecond, i.Items[2].EndAt)
+ assert.Equal(t, "[instrumental music]", i.Items[2].Lines[0].String())
+ assert.Equal(t, "#00ff00", *i.Items[2].Lines[0].Items[0].InlineStyle.SRTColor)
+ assert.False(t, i.Items[2].Lines[0].Items[0].InlineStyle.SRTBold)
+ assert.False(t, i.Items[2].Lines[0].Items[0].InlineStyle.SRTItalics)
+ assert.False(t, i.Items[2].Lines[0].Items[0].InlineStyle.SRTUnderline)
+ assert.Equal(t, 1*time.Minute+1*time.Second+662*time.Millisecond, i.Items[3].StartAt)
+ assert.Equal(t, 1*time.Minute+3*time.Second+63*time.Millisecond, i.Items[3].EndAt)
+ assert.Equal(t, "[dog barking]", i.Items[3].Lines[0].String())
+ assert.Nil(t, i.Items[3].Lines[0].Items[0].InlineStyle.SRTColor)
+ assert.True(t, i.Items[3].Lines[0].Items[0].InlineStyle.SRTBold)
+ assert.False(t, i.Items[3].Lines[0].Items[0].InlineStyle.SRTItalics)
+ assert.True(t, i.Items[3].Lines[0].Items[0].InlineStyle.SRTUnderline)
+ assert.Equal(t, 1*time.Minute+26*time.Second+787*time.Millisecond, i.Items[4].StartAt)
+ assert.Equal(t, 1*time.Minute+29*time.Second+523*time.Millisecond, i.Items[4].EndAt)
+ assert.Equal(t, "[beeping]", i.Items[4].Lines[0].String())
+ assert.Nil(t, i.Items[4].Lines[0].Items[0].InlineStyle)
+ assert.Equal(t, 1*time.Minute+29*time.Second+590*time.Millisecond, i.Items[5].StartAt)
+ assert.Equal(t, 1*time.Minute+31*time.Second+992*time.Millisecond, i.Items[5].EndAt)
+ assert.Equal(t, "[automated]", i.Items[5].Lines[0].String())
+ assert.Nil(t, i.Items[5].Lines[0].Items[0].InlineStyle)
+ assert.Equal(t, "'The time is 7:35.'", i.Items[5].Lines[1].String())
+ assert.Nil(t, i.Items[5].Lines[1].Items[0].InlineStyle.SRTColor)
+ assert.False(t, i.Items[5].Lines[1].Items[0].InlineStyle.SRTBold)
+ assert.True(t, i.Items[5].Lines[1].Items[0].InlineStyle.SRTItalics)
+ assert.False(t, i.Items[5].Lines[1].Items[0].InlineStyle.SRTUnderline)
+}
+
func mockSubtitles() *astisub.Subtitles {
return &astisub.Subtitles{Items: []*astisub.Item{{EndAt: 3 * time.Second, StartAt: time.Second, Lines: []astisub.Line{{Items: []astisub.LineItem{{Text: "subtitle-1"}}}}}, {EndAt: 7 * time.Second, StartAt: 3 * time.Second, Lines: []astisub.Line{{Items: []astisub.LineItem{{Text: "subtitle-2"}}}}}}}
}
diff --git a/testdata/example-styled-in.srt b/testdata/example-styled-in.srt
new file mode 100644
index 0000000..e938314
--- /dev/null
+++ b/testdata/example-styled-in.srt
@@ -0,0 +1,24 @@
+1
+00:00:17,985 --> 00:00:20,521
+[instrumental music]
+
+2
+00:00:47,115 --> 00:00:48,282
+[ticks]
+
+3
+00:00:58,192 --> 00:00:59,727
+[instrumental music]
+
+4
+00:01:01,662 --> 00:01:03,063
+[dog barking]
+
+5
+00:01:26,787 --> 00:01:29,523
+[beeping]
+
+6
+00:01:29,590 --> 00:01:31,992
+[automated]
+'The time is 7:35.'
diff --git a/testdata/example-styled-out.srt b/testdata/example-styled-out.srt
new file mode 100644
index 0000000..8439545
--- /dev/null
+++ b/testdata/example-styled-out.srt
@@ -0,0 +1,24 @@
+1
+00:00:17,985 --> 00:00:20,521
+[instrumental music]
+
+2
+00:00:47,115 --> 00:00:48,282
+[ticks]
+
+3
+00:00:58,192 --> 00:00:59,727
+[instrumental music]
+
+4
+00:01:01,662 --> 00:01:03,063
+[dog barking]
+
+5
+00:01:26,787 --> 00:01:29,523
+[beeping]
+
+6
+00:01:29,590 --> 00:01:31,992
+[automated]
+'The time is 7:35.'