From ce2feef7f63e17157ce92ac833e4bce5efcd7e4f Mon Sep 17 00:00:00 2001 From: Alex Baines Date: Mon, 6 Mar 2017 13:06:22 +0000 Subject: [PATCH] fix marker after ref bug + handle dos newlines --- hmmlib/hmmlib.l | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/hmmlib/hmmlib.l b/hmmlib/hmmlib.l index fae3858..0ab5344 100644 --- a/hmmlib/hmmlib.l +++ b/hmmlib/hmmlib.l @@ -53,13 +53,14 @@ %option extra-type="HMML_ParseState*" %option noyywrap -S [\t ]* +S [\t \r]* ATTR_SIMPLE [^\" \]\t\r\n][^ \]\t\r\n]* ATTR_ALNUM [0-9a-zA-Z][0-9a-zA-Z_]* ATTR_QUOTED \"([^\n\"\\]|\\.)*\" TAG_VIDEO_OPEN \[video TIMECODE \[[0-9]{1,2}(:[0-5][0-9]){1,2}\] BAD_TIMECODE \[[0-9]{1,2}(:[6-9][0-9]){1,2}\] +TEXT_BREAK [^\\:@~\[\]\r\n\t ] LB \[ RB \] @@ -80,7 +81,7 @@ RB \] %% <> { HMML_ERR("Unexpected EOF, video close tag not found."); } -\n { yyextra->line++; } +\r\n|\n { yyextra->line++; } {TAG_VIDEO_OPEN} { BEGIN(VIDEO); } . { HMML_ERR("Missing video tag."); } @@ -113,19 +114,19 @@ RB \] {LB} { yyless(0); BEGIN(TEXT); } . { HMML_ERR("Unknown character '%c' after timecode.", *yytext); } -[^\\:@~\]\n\[ ]+ { memcpy(sb_add(yyextra->an.text, yyleng), yytext, yyleng); } -\\. { CHECKESCAPE(yytext[1]); memcpy(sb_add(yyextra->an.text, yyleng-1), yytext+1, yyleng-1); } -[ ]: { sb_push(yyextra->an.text, ' '); M_(CATEGORY, TEXT); BEGIN(MARKER); } -[ ]@ { sb_push(yyextra->an.text, ' '); M_(MEMBER , TEXT); BEGIN(MARKER); } -[ ]~ { sb_push(yyextra->an.text, ' '); M_(PROJECT , TEXT); BEGIN(MARKER); } -{LB}: { M_(CATEGORY, MARKER_XTRA); BEGIN(MARKER); } -{LB}@ { M_(MEMBER , MARKER_XTRA); BEGIN(MARKER); } -{LB}~ { M_(PROJECT , MARKER_XTRA); BEGIN(MARKER); } -\] { BEGIN(AFTERTEXT); } -{LB}ref { yyextra->ref.offset = sb_count(yyextra->an.text); BEGIN(REF); } +{TEXT_BREAK}+ { memcpy(sb_add(yyextra->an.text, yyleng), yytext, yyleng); } +\\. { CHECKESCAPE(yytext[1]); memcpy(sb_add(yyextra->an.text, yyleng-1), yytext+1, yyleng-1); } +[ \r\t]+: { sb_push(yyextra->an.text, ' '); M_(CATEGORY, TEXT); BEGIN(MARKER); } +[ \r\t]+@ { sb_push(yyextra->an.text, ' '); M_(MEMBER , TEXT); BEGIN(MARKER); } +[ \r\t]+~ { sb_push(yyextra->an.text, ' '); M_(PROJECT , TEXT); BEGIN(MARKER); } +{LB}: { M_(CATEGORY, MARKER_XTRA); BEGIN(MARKER); } +{LB}@ { M_(MEMBER , MARKER_XTRA); BEGIN(MARKER); } +{LB}~ { M_(PROJECT , MARKER_XTRA); BEGIN(MARKER); } +\] { BEGIN(AFTERTEXT); } +{LB}ref { yyextra->ref.offset = sb_count(yyextra->an.text); BEGIN(REF); } {LB} -{S}{S} { sb_push(yyextra->an.text, ' '); } -. { sb_push(yyextra->an.text, *yytext); } +[ \r\t]{1,2} { sb_push(yyextra->an.text, ' '); } +. { sb_push(yyextra->an.text, *yytext); } {ATTR_ALNUM} { M_ADD(yytext , yyleng ); BEGIN(yyextra->mnext); }; {ATTR_QUOTED} { M_ADD(yytext+1, yyleng-2); BEGIN(yyextra->mnext); }; @@ -135,7 +136,7 @@ RB \] \] { BEGIN(TEXT); } . -[\t ] +{S} site{S}= { yyextra->attr = R_(site); BEGIN(R_ATTR); } page{S}= { yyextra->attr = R_(page); BEGIN(R_ATTR); } url{S}= { yyextra->attr = R_(url); BEGIN(R_ATTR); }