/* General notes:
- - The syntax analysis doesn't handle the contents of the line values
- or their encoding; this is done in the semantic analysis.
+ - The syntax analysis doesn't handle the contents of the line values;
+ this is done in the semantic analysis.
*/
int compat_enabled = 1;
int gedcom_high_level_debug = 0;
int compatibility = 0;
-MECHANISM error_mechanism=IMMED_FAIL;
-char string_buf[MAXGEDCLINELEN*4+1];
-char *string_buf_ptr;
+MECHANISM error_mechanism = IMMED_FAIL;
+
+char line_item_buf[MAXGEDCLINELEN * UTF_FACTOR + 1];
+char *line_item_buf_ptr;
enum _COMPAT {
C_FTREE = 0x01
%}
%union {
- char *string;
int number;
+ char *string;
}
%token_table
/* HEAD.SOUR */
head_sour_sect : OPEN DELIM TAG_SOUR mand_line_item
{ set_compatibility($4);
- gedcom_debug_print("===Source: '%s'\n", $4);
+ gedcom_debug_print("===Source: '%s', '%s'\n",
+ $4, $3);
START(SOUR)
}
head_sour_subs
;
line_item : anychar { size_t i;
- CLEAR_BUFFER(string_buf);
- string_buf_ptr = string_buf;
+ CLEAR_BUFFER(line_item_buf);
+ line_item_buf_ptr = line_item_buf;
/* The following also takes care of '@@' */
if (!strncmp($1, "@@", 3))
- *string_buf_ptr++ = '@';
+ *line_item_buf_ptr++ = '@';
else
for (i=0; i < strlen($1); i++)
- *string_buf_ptr++ = $1[i];
- $$ = string_buf;
+ *line_item_buf_ptr++ = $1[i];
+ $$ = line_item_buf;
}
- | ESCAPE { CLEAR_BUFFER(string_buf);
- string_buf_ptr = string_buf;
+ | ESCAPE { CLEAR_BUFFER(line_item_buf);
+ line_item_buf_ptr = line_item_buf;
/* For now, ignore escapes */
- $$ = string_buf;
+ $$ = line_item_buf;
}
| line_item anychar
- { if (strlen(string_buf) >= MAXGEDCLINELEN) {
- gedcom_error("Line too long");
- YYERROR;
- }
- else {
- size_t i;
- /* The following also takes care of '@@' */
- if (!strncmp($2, "@@", 3))
- *string_buf_ptr++ = '@';
- else
- for (i=0; i < strlen($2); i++)
- *string_buf_ptr++ = $2[i];
- $$ = string_buf;
- }
+ { size_t i;
+ /* The following also takes care of '@@' */
+ if (!strncmp($2, "@@", 3))
+ *line_item_buf_ptr++ = '@';
+ else
+ for (i=0; i < strlen($2); i++)
+ *line_item_buf_ptr++ = $2[i];
+ $$ = line_item_buf;
}
| line_item ESCAPE
{ /* For now, ignore escapes */
- $$ = string_buf;
+ $$ = line_item_buf;
}
;
/* Functions that handle the counting of subtags */
int* count_arrays[MAXGEDCLEVEL+1];
-char tag_stack[MAXGEDCLEVEL+1][MAXSTDTAGLENGTH+1];
+char tag_stack[MAXGEDCLEVEL+1][MAXSTDTAGLEN+1];
void push_countarray()
{
void set_parenttag(char* tag)
{
- strncpy(tag_stack[count_level], tag, MAXSTDTAGLENGTH+1);
+ strncpy(tag_stack[count_level], tag, MAXSTDTAGLEN+1);
}
char* get_parenttag()