# HG changeset patch # User alex # Date 1025347198 0 # Node ID 4e543bd6cc0a7f57527b3ca6b925a3c511ca6be5 # Parent 85b2fffb8bd9129436b1c43c6ced3201722117d4 support for SSA v4 by Dirk diff -r 85b2fffb8bd9 -r 4e543bd6cc0a subreader.c --- a/subreader.c Sat Jun 29 05:32:35 2002 +0000 +++ b/subreader.c Sat Jun 29 10:39:58 2002 +0000 @@ -376,6 +376,19 @@ } subtitle *sub_read_line_ssa(FILE *fd,subtitle *current) { +/* + * Sub Station Alpha v4 (and v2?) scripts have 9 commas before subtitle + * other Sub Station Alpha scripts have only 8 commas before subtitle + * Reading the "ScriptType:" field is not reliable since many scripts appear + * w/o it + * + * http://www.scriptclub.org is a good place to find more examples + * http://www.eswat.demon.co.uk is where the SSA specs can be found + */ + int comma; + static int max_comma = 32; /* let's use 32 for the case that the */ + /* amount of commas increase with newer SSA versions */ + int hour1, min1, sec1, hunsec1, hour2, min2, sec2, hunsec2, nothing; int num; @@ -392,10 +405,19 @@ &hour1, &min1, &sec1, &hunsec1, &hour2, &min2, &sec2, &hunsec2, line3) < 9); - line2=strstr(line3,",,"); - if (!line2) return NULL; - line2 ++; - line2 ++; + + line2=strchr(line3, ','); + + for (comma = 4; comma < max_comma; comma ++) + { + tmp = line2; + if(!(tmp=strchr(++tmp, ','))) break; + if(*(++tmp) == ' ') break; + /* a space after a comma means we're already in a sentence */ + line2 = tmp; + } + + if(comma < max_comma)max_comma = comma; current->lines=0;num=0; current->start = 360000*hour1 + 6000*min1 + 100*sec1 + hunsec1;