diff --git a/stl.go b/stl.go index d38ecee..2b673da 100644 --- a/stl.go +++ b/stl.go @@ -10,9 +10,9 @@ import ( "strings" "time" - "github.com/asticode/go-astitools/byte" - "github.com/asticode/go-astitools/map" - "github.com/asticode/go-astitools/ptr" + astibyte "github.com/asticode/go-astitools/byte" + astimap "github.com/asticode/go-astitools/map" + astiptr "github.com/asticode/go-astitools/ptr" "github.com/pkg/errors" "golang.org/x/text/unicode/norm" ) @@ -188,10 +188,12 @@ func ReadFromSTL(i io.Reader) (o *Subtitles, err error) { // Update metadata // TODO Add more STL fields to metadata o.Metadata = &Metadata{ - Framerate: g.framerate, - Language: stlLanguageMapping.B(g.languageCode).(string), - STLPublisher: g.publisher, - Title: g.originalProgramTitle, + Framerate: g.framerate, + Language: stlLanguageMapping.B(g.languageCode).(string), + STLMaximumNumberOfDisplayableCharactersInAnyTextRow: astiptr.Int(g.maximumNumberOfDisplayableCharactersInAnyTextRow), + STLMaximumNumberOfDisplayableRows: astiptr.Int(g.maximumNumberOfDisplayableRows), + STLPublisher: g.publisher, + Title: g.originalProgramTitle, } // Parse Text and Timing Information (TTI) blocks. @@ -308,6 +310,12 @@ func newGSIBlock(s Subtitles) (g *gsiBlock) { g.framerate = s.Metadata.Framerate g.languageCode = stlLanguageMapping.A(s.Metadata.Language).(string) g.originalProgramTitle = s.Metadata.Title + if s.Metadata.STLMaximumNumberOfDisplayableCharactersInAnyTextRow != nil { + g.maximumNumberOfDisplayableCharactersInAnyTextRow = *s.Metadata.STLMaximumNumberOfDisplayableCharactersInAnyTextRow + } + if s.Metadata.STLMaximumNumberOfDisplayableRows != nil { + g.maximumNumberOfDisplayableRows = *s.Metadata.STLMaximumNumberOfDisplayableRows + } g.publisher = s.Metadata.STLPublisher } diff --git a/stl_test.go b/stl_test.go index b605be0..303ada9 100644 --- a/stl_test.go +++ b/stl_test.go @@ -8,6 +8,7 @@ import ( "time" "github.com/asticode/go-astisub" + astiptr "github.com/asticode/go-astitools/ptr" "github.com/stretchr/testify/assert" ) @@ -23,7 +24,7 @@ func TestSTL(t *testing.T) { assert.NoError(t, err) assertSubtitleItems(t, s) // Metadata - assert.Equal(t, &astisub.Metadata{Framerate: 25, Language: astisub.LanguageFrench, STLPublisher: "Copyright test", Title: "Title test"}, s.Metadata) + assert.Equal(t, &astisub.Metadata{Framerate: 25, Language: astisub.LanguageFrench, STLMaximumNumberOfDisplayableCharactersInAnyTextRow: astiptr.Int(40), STLMaximumNumberOfDisplayableRows: astiptr.Int(23), STLPublisher: "Copyright test", Title: "Title test"}, s.Metadata) // No subtitles to write w := &bytes.Buffer{} diff --git a/subtitles.go b/subtitles.go index 882453b..9c55f7e 100644 --- a/subtitles.go +++ b/subtitles.go @@ -249,25 +249,27 @@ func (sa *StyleAttributes) propagateWebVTTAttributes() {} // Metadata represents metadata // TODO Merge attributes type Metadata struct { - Comments []string - Framerate int - Language string - SSACollisions string - SSAOriginalEditing string - SSAOriginalScript string - SSAOriginalTiming string - SSAOriginalTranslation string - SSAPlayDepth *int - SSAPlayResX, SSAPlayResY *int - SSAScriptType string - SSAScriptUpdatedBy string - SSASynchPoint string - SSATimer *float64 - SSAUpdateDetails string - SSAWrapStyle string - STLPublisher string - Title string - TTMLCopyright string + Comments []string + Framerate int + Language string + SSACollisions string + SSAOriginalEditing string + SSAOriginalScript string + SSAOriginalTiming string + SSAOriginalTranslation string + SSAPlayDepth *int + SSAPlayResX, SSAPlayResY *int + SSAScriptType string + SSAScriptUpdatedBy string + SSASynchPoint string + SSATimer *float64 + SSAUpdateDetails string + SSAWrapStyle string + STLMaximumNumberOfDisplayableCharactersInAnyTextRow *int + STLMaximumNumberOfDisplayableRows *int + STLPublisher string + Title string + TTMLCopyright string } // Region represents a subtitle's region