X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gedcom%2Fgedcom_1byte.lex;h=05cda4038bf4768d0dbca48a9cfd506c314e114f;hb=3a3f7c5589b2e265306385da92727592e168e442;hp=938a97c476ed63b396be602ae07d56a03ec298e0;hpb=617db8c6fc5e647c2daf45754a98f6792c15db03;p=gedcom-parse.git diff --git a/gedcom/gedcom_1byte.lex b/gedcom/gedcom_1byte.lex index 938a97c..05cda40 100644 --- a/gedcom/gedcom_1byte.lex +++ b/gedcom/gedcom_1byte.lex @@ -221,6 +221,39 @@ ACTION_BEFORE_REGEXPS #define LEX_SECTION 3 /* include only a specific part of the following file */ #include "gedcom_lex_common.c" +int gedcom_check_token(const char* str, ParseState state, int check_token) +{ + int result = 0; + int token; + YY_BUFFER_STATE buffer; + + yy_delete_buffer(YY_CURRENT_BUFFER); + buffer = yy_scan_string(str); + + if (state == STATE_NORMAL) + BEGIN(NORMAL); + else if (state == STATE_INITIAL) + BEGIN(INITIAL); + else if (state == STATE_EXPECT_TAG) + BEGIN(EXPECT_TAG); + + /* Input is UTF-8 coming from the application, so bypass iconv */ + dummy_conv = 1; + token = yylex(); + if (token != check_token) + result = 1; + + if (token != 0) { + token = yylex(); + if (token != 0) + result = 1; + } + dummy_conv = 0; + + yy_delete_buffer(buffer); + return result; +} + #ifdef LEXER_TEST int gedcom_lex() {