-/* This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
-
- (C) 2001 by The Genes Development Team
- Original author: Peter Verthez (Peter.Verthez@advalvas.be)
-*/
+/* Common lexer code.
+ Copyright (C) 2001, 2002 The Genes Development Team
+ This file is part of the Gedcom parser library.
+ Contributed by Peter Verthez <Peter.Verthez@advalvas.be>, 2001.
+
+ The Gedcom parser library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The Gedcom parser library is distributed in the hope that it will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the Gedcom parser library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
/* $Id$ */
/* $Name$ */
int gedcom_lex();
+void message_handler(Gedcom_msg_type type, char *msg)
+{
+ fprintf(stderr, "(%d) %s\n", type, msg);
+}
+
int test_loop(ENCODING enc, char* code)
{
int tok, res;
init_encodings();
set_encoding_width(enc);
+ gedcom_set_message_handler(message_handler);
res = open_conv_to_internal(code);
if (!res) {
gedcom_error("Unable to open conversion context: %s",
case DELIM: printf("DELIM "); break;
case ANYCHAR: printf("%s ", gedcom_lval.string); break;
case POINTER: printf("POINTER(%s) ", gedcom_lval.string); break;
- case USERTAG: printf("USERTAG(%s) ", gedcom_lval.string); break;
- default: printf("TAG(%s) ", gedcom_lval.string); break;
+ case USERTAG: printf("USERTAG(%s) ", gedcom_lval.tag.string); break;
+ default: printf("TAG(%s) ", gedcom_lval.tag.string); break;
}
tok = gedcom_lex();
}
{ if (line_len != (size_t)-1) { \
line_len += strlen(yytext); \
if (line_len > MAXGEDCLINELEN * encoding_width) { \
- gedcom_error("Line too long, max %d characters", \
+ gedcom_error(_("Line too long, max %d characters allowed"), \
MAXGEDCLINELEN); \
line_len = (size_t)-1; \
return BADTOKEN; \
#define MKTAGACTION(THETAG) \
{ CHECK_LINE_LEN; \
- gedcom_lval.string = TO_INTERNAL(yytext, tag_buf); \
+ gedcom_lval.tag.string = TO_INTERNAL(yytext, tag_buf); \
+ gedcom_lval.tag.value = TAG_##THETAG; \
BEGIN(NORMAL); \
return TAG_##THETAG; \
}
#define ACTION_0_DIGITS \
- { gedcom_error ("Level number with leading zero"); \
+ { gedcom_error (_("Level number with leading zero not allowed")); \
return BADTOKEN; \
}
{ int level = atoi(TO_INTERNAL(yytext, str_buf)); \
CHECK_LINE_LEN; \
if ((level < 0) || (level > MAXGEDCLEVEL)) { \
- gedcom_error ("Level number out of range [0..%d]", \
+ gedcom_error (_("Level number out of range [0..%d]"), \
MAXGEDCLEVEL); \
return BADTOKEN; \
} \
} \
else { \
/* should never happen (error to GEDCOM spec) */ \
- gedcom_error ("GEDCOM level number is %d higher than " \
- "previous", \
+ gedcom_error (_("GEDCOM level number is %d higher than previous"), \
level_diff); \
return BADTOKEN; \
} \
#define ACTION_ALPHANUM \
{ if (strlen(yytext) > MAXGEDCTAGLEN * encoding_width) { \
- gedcom_error("Tag '%s' too long, max %d characters", \
+ gedcom_error(_("Tag '%s' too long, max %d characters allowed"), \
yytext, MAXGEDCTAGLEN); \
return BADTOKEN; \
} \
CHECK_LINE_LEN; \
- gedcom_lval.string = TO_INTERNAL(yytext, tag_buf); \
+ gedcom_lval.tag.string = TO_INTERNAL(yytext, tag_buf); \
+ gedcom_lval.tag.value = USERTAG; \
BEGIN(NORMAL); \
return USERTAG; \
}
#define ACTION_POINTER \
{ CHECK_LINE_LEN; \
if (strlen(yytext) > MAXGEDCPTRLEN * encoding_width) { \
- gedcom_error("Pointer '%s' too long, max %d characters", \
+ gedcom_error(_("Pointer '%s' too long, max %d characters allowed"), \
yytext, MAXGEDCPTRLEN); \
return BADTOKEN; \
} \
#define ACTION_UNEXPECTED \
- { gedcom_error("Unexpected character: '%s' (0x%02x)", \
+ { gedcom_error(_("Unexpected character: '%s' (0x%02x)"), \
yytext, yytext[0]); \
return BADTOKEN; \
}