%{
#include "gedcom.h"
+#include "multilex.h"
int count_level = 0;
int fail = 0;
int gedcom_high_level_debug = 0;
int compatibility = 0;
MECHANISM error_mechanism=IMMED_FAIL;
-char string_buf[MAXGEDCLINELEN+1];
+char string_buf[MAXGEDCLINELEN*4+1];
char *string_buf_ptr;
enum _COMPAT {
| DELIM line_item { }
;
-line_item : anychar { CLEAR_BUFFER(string_buf);
+line_item : anychar { size_t i;
+ CLEAR_BUFFER(string_buf);
string_buf_ptr = string_buf;
/* The following also takes care of '@@' */
- *string_buf_ptr++ = $1[0];
+ if (!strncmp($1, "@@", 3))
+ *string_buf_ptr++ = '@';
+ else
+ for (i=0; i < strlen($1); i++)
+ *string_buf_ptr++ = $1[i];
$$ = string_buf;
}
| ESCAPE { CLEAR_BUFFER(string_buf);
YYERROR;
}
else {
+ size_t i;
/* The following also takes care of '@@' */
- *string_buf_ptr++ = $2[0];
+ if (!strncmp($2, "@@", 3))
+ *string_buf_ptr++ = '@';
+ else
+ for (i=0; i < strlen($2); i++)
+ *string_buf_ptr++ = $2[i];
$$ = string_buf;
}
}
{
return (compat_flags & compatibility);
}
+