vlc | branch: master | Francois Cartegnie <[email protected]> | Sat Jan 7 13:21:07 2017 +0100| [cb1c9c81eae5fccc62ee2dcceb2fed800f3f0877] | committer: Francois Cartegnie
codec: ttml: add space attribute handling for newlines > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=cb1c9c81eae5fccc62ee2dcceb2fed800f3f0877 --- modules/codec/ttml/substtml.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/modules/codec/ttml/substtml.c b/modules/codec/ttml/substtml.c index 316cd1d..b2bf575 100644 --- a/modules/codec/ttml/substtml.c +++ b/modules/codec/ttml/substtml.c @@ -52,6 +52,7 @@ typedef struct int i_margin_percent_v; int i_direction; bool b_direction_set; + bool b_preserve_space; } ttml_style_t; typedef struct @@ -307,6 +308,10 @@ static void FillTTMLStyle( const char *psz_attr, const char *psz_val, p_ttml_style->b_direction_set = true; } } + else if( !strcasecmp( "xml:space", psz_attr ) ) + { + p_ttml_style->b_preserve_space = !strcmp( "preserve", psz_val ); + } else FillTextStyle( psz_attr, psz_val, p_ttml_style->font_style ); } @@ -482,6 +487,14 @@ static void BIDIConvert( text_segment_t *p_segment, int i_direction ) } } +static void StripSpacing( text_segment_t *p_segment ) +{ + /* Newlines must be replaced */ + char *p = p_segment->psz_text; + while( (p = strchr( p, '\n' )) ) + *p = ' '; +} + static text_segment_t * ConvertNodesToSegments( ttml_context_t *p_ctx, const tt_node_t *p_node, bool b_has_prev_text, ttml_style_t **pp_ret_ttml_style ) { @@ -506,6 +519,8 @@ static text_segment_t * ConvertNodesToSegments( ttml_context_t *p_ctx, const tt_ ttml_style_t *s = InheritTTMLStyles( p_ctx, p_child->p_parent ); (*pp_last)->style = s->font_style; s->font_style = NULL; + if( !s->b_preserve_space ) + StripSpacing( *pp_last ); if( s->b_direction_set ) BIDIConvert( *pp_last, s->i_direction ); /* FIXME: This is carried from broken prev code feat _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
