dlugolecki.net.pl
Dziennik
Polecane
Software
projects
/
gedcom-parse.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added gedcom_init() to external interface.
[gedcom-parse.git]
/
gedcom
/
gedcom_lex_common.c
diff --git
a/gedcom/gedcom_lex_common.c
b/gedcom/gedcom_lex_common.c
index f9fa955d5216a3240377ba3b39625d7038963bce..6f7a1d3ca15252879dee6aa4259a55795727ad74 100644
(file)
--- a/
gedcom/gedcom_lex_common.c
+++ b/
gedcom/gedcom_lex_common.c
@@
-1,5
+1,5
@@
/* Common lexer code.
/* Common lexer code.
- Copyright (C) 2001 The Genes Development Team
+ 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.
This file is part of the Gedcom parser library.
Contributed by Peter Verthez <Peter.Verthez@advalvas.be>, 2001.
@@
-46,11
+46,17
@@
int line_no = 1;
int gedcom_lex();
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);
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",
res = open_conv_to_internal(code);
if (!res) {
gedcom_error("Unable to open conversion context: %s",
@@
-67,8
+73,8
@@
int test_loop(ENCODING enc, char* code)
case DELIM: printf("DELIM "); break;
case ANYCHAR: printf("%s ", gedcom_lval.string); break;
case POINTER: printf("POINTER(%s) ", gedcom_lval.string); break;
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();
}
}
tok = gedcom_lex();
}
@@
-91,7
+97,7
@@
int test_loop(ENCODING enc, char* code)
{ if (line_len != (size_t)-1) { \
line_len += strlen(yytext); \
if (line_len > MAXGEDCLINELEN * encoding_width) { \
{ 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; \
MAXGEDCLINELEN); \
line_len = (size_t)-1; \
return BADTOKEN; \
@@
-101,7
+107,8
@@
int test_loop(ENCODING enc, char* code)
#define MKTAGACTION(THETAG) \
{ CHECK_LINE_LEN; \
#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; \
}
BEGIN(NORMAL); \
return TAG_##THETAG; \
}
@@
-164,7
+171,7
@@
int test_loop(ENCODING enc, char* code)
#define ACTION_0_DIGITS \
#define ACTION_0_DIGITS \
- { gedcom_error (
"Level number with leading zero");
\
+ { gedcom_error (
_("Level number with leading zero not allowed"));
\
return BADTOKEN; \
}
return BADTOKEN; \
}
@@
-173,7
+180,7
@@
int test_loop(ENCODING enc, char* code)
{ int level = atoi(TO_INTERNAL(yytext, str_buf)); \
CHECK_LINE_LEN; \
if ((level < 0) || (level > MAXGEDCLEVEL)) { \
{ 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; \
} \
MAXGEDCLEVEL); \
return BADTOKEN; \
} \
@@
-191,8
+198,7
@@
int test_loop(ENCODING enc, char* code)
} \
else { \
/* should never happen (error to GEDCOM spec) */ \
} \
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; \
} \
level_diff); \
return BADTOKEN; \
} \
@@
-201,12
+207,13
@@
int test_loop(ENCODING enc, char* code)
#define ACTION_ALPHANUM \
{ if (strlen(yytext) > MAXGEDCTAGLEN * encoding_width) { \
#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; \
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; \
}
BEGIN(NORMAL); \
return USERTAG; \
}
@@
-243,7
+250,7
@@
int test_loop(ENCODING enc, char* code)
#define ACTION_POINTER \
{ CHECK_LINE_LEN; \
if (strlen(yytext) > MAXGEDCPTRLEN * encoding_width) { \
#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; \
} \
yytext, MAXGEDCPTRLEN); \
return BADTOKEN; \
} \
@@
-277,17
+284,21
@@
int test_loop(ENCODING enc, char* code)
return CLOSE; \
} \
else { \
return CLOSE; \
} \
else { \
+ char* ptr; int size; \
/* Reset our state */ \
current_level = -1; \
level_diff = MAXGEDCLEVEL; \
/* ... then terminate lex */ \
yyterminate(); \
/* Reset our state */ \
current_level = -1; \
level_diff = MAXGEDCLEVEL; \
/* ... then terminate lex */ \
yyterminate(); \
+ /* Get rid of f*cking compiler warning from lex generated code */ \
+ /* yyterminate does return(), so program will never come here */ \
+ yy_flex_realloc(ptr, size); \
} \
}
#define ACTION_UNEXPECTED \
} \
}
#define ACTION_UNEXPECTED \
- { gedcom_error(
"Unexpected character: '%s' (0x%02x)",
\
+ { gedcom_error(
_("Unexpected character: '%s' (0x%02x)"),
\
yytext, yytext[0]); \
return BADTOKEN; \
}
yytext, yytext[0]); \
return BADTOKEN; \
}