1 /* This program is free software; you can redistribute it and/or modify *
2 * it under the terms of the GNU General Public License as published by *
3 * the Free Software Foundation; either version 2 of the License, or *
4 * (at your option) any later version. *
6 (C) 2001 by The Genes Development Team
7 Original author: Peter Verthez (Peter.Verthez@advalvas.be)
14 #include "gedcom.tab.h"
31 otherchar [\x21-\x22\x24-\x2F\x3A-\x3F\x5B-\x5E\x60\x7B-\x7E\x80-\xFE]
32 terminator \x0D|\x0A|\x0D\x0A|\x0A\x0D
34 any_char {alpha}|{digit}|{otherchar}|{delim}|{hash}|{literal_at}
35 any_but_delim {alpha}|{digit}|{otherchar}|{hash}|{literal_at}
36 non_at {alpha}|{digit}|{otherchar}|{delim}|{hash}
37 alphanum {alpha}|{digit}
38 gen_delim {delim}|{tab}
41 pointer @{alphanum}{non_at}+@
44 static int current_level=-1;
45 static int level_diff=MAXGEDCLEVEL;
57 #include "gedcom_lex_common.c"
63 <INITIAL>{gen_delim}* /* ignore leading whitespace (also tabs) */
65 <INITIAL>0{digit}+ ACTION_0_DIGITS
67 <INITIAL>{digit}+ ACTION_DIGITS
69 <EXPECT_TAG>ABBR MKTAGACTION(ABBR)
70 <EXPECT_TAG>ADDR MKTAGACTION(ADDR)
71 <EXPECT_TAG>ADR1 MKTAGACTION(ADR1)
72 <EXPECT_TAG>ADR2 MKTAGACTION(ADR2)
73 <EXPECT_TAG>ADOP MKTAGACTION(ADOP)
74 <EXPECT_TAG>AFN MKTAGACTION(AFN)
75 <EXPECT_TAG>AGE MKTAGACTION(AGE)
76 <EXPECT_TAG>AGNC MKTAGACTION(AGNC)
77 <EXPECT_TAG>ALIA MKTAGACTION(ALIA)
78 <EXPECT_TAG>ANCE MKTAGACTION(ANCE)
79 <EXPECT_TAG>ANCI MKTAGACTION(ANCI)
80 <EXPECT_TAG>ANUL MKTAGACTION(ANUL)
81 <EXPECT_TAG>ASSO MKTAGACTION(ASSO)
82 <EXPECT_TAG>AUTH MKTAGACTION(AUTH)
83 <EXPECT_TAG>BAPL MKTAGACTION(BAPL)
84 <EXPECT_TAG>BAPM MKTAGACTION(BAPM)
85 <EXPECT_TAG>BARM MKTAGACTION(BARM)
86 <EXPECT_TAG>BASM MKTAGACTION(BASM)
87 <EXPECT_TAG>BIRT MKTAGACTION(BIRT)
88 <EXPECT_TAG>BLES MKTAGACTION(BLES)
89 <EXPECT_TAG>BLOB MKTAGACTION(BLOB)
90 <EXPECT_TAG>BURI MKTAGACTION(BURI)
91 <EXPECT_TAG>CALN MKTAGACTION(CALN)
92 <EXPECT_TAG>CAST MKTAGACTION(CAST)
93 <EXPECT_TAG>CAUS MKTAGACTION(CAUS)
94 <EXPECT_TAG>CENS MKTAGACTION(CENS)
95 <EXPECT_TAG>CHAN MKTAGACTION(CHAN)
96 <EXPECT_TAG>CHAR MKTAGACTION(CHAR)
97 <EXPECT_TAG>CHIL MKTAGACTION(CHIL)
98 <EXPECT_TAG>CHR MKTAGACTION(CHR)
99 <EXPECT_TAG>CHRA MKTAGACTION(CHRA)
100 <EXPECT_TAG>CITY MKTAGACTION(CITY)
101 <EXPECT_TAG>CONC MKTAGACTION(CONC)
102 <EXPECT_TAG>CONF MKTAGACTION(CONF)
103 <EXPECT_TAG>CONL MKTAGACTION(CONL)
104 <EXPECT_TAG>CONT MKTAGACTION(CONT)
105 <EXPECT_TAG>COPR MKTAGACTION(COPR)
106 <EXPECT_TAG>CORP MKTAGACTION(CORP)
107 <EXPECT_TAG>CREM MKTAGACTION(CREM)
108 <EXPECT_TAG>CTRY MKTAGACTION(CTRY)
109 <EXPECT_TAG>DATA MKTAGACTION(DATA)
110 <EXPECT_TAG>DATE MKTAGACTION(DATE)
111 <EXPECT_TAG>DEAT MKTAGACTION(DEAT)
112 <EXPECT_TAG>DESC MKTAGACTION(DESC)
113 <EXPECT_TAG>DESI MKTAGACTION(DESI)
114 <EXPECT_TAG>DEST MKTAGACTION(DEST)
115 <EXPECT_TAG>DIV MKTAGACTION(DIV)
116 <EXPECT_TAG>DIVF MKTAGACTION(DIVF)
117 <EXPECT_TAG>DSCR MKTAGACTION(DSCR)
118 <EXPECT_TAG>EDUC MKTAGACTION(EDUC)
119 <EXPECT_TAG>EMIG MKTAGACTION(EMIG)
120 <EXPECT_TAG>ENDL MKTAGACTION(ENDL)
121 <EXPECT_TAG>ENGA MKTAGACTION(ENGA)
122 <EXPECT_TAG>EVEN MKTAGACTION(EVEN)
123 <EXPECT_TAG>FAM MKTAGACTION(FAM)
124 <EXPECT_TAG>FAMC MKTAGACTION(FAMC)
125 <EXPECT_TAG>FAMF MKTAGACTION(FAMF)
126 <EXPECT_TAG>FAMS MKTAGACTION(FAMS)
127 <EXPECT_TAG>FCOM MKTAGACTION(FCOM)
128 <EXPECT_TAG>FILE MKTAGACTION(FILE)
129 <EXPECT_TAG>FORM MKTAGACTION(FORM)
130 <EXPECT_TAG>GEDC MKTAGACTION(GEDC)
131 <EXPECT_TAG>GIVN MKTAGACTION(GIVN)
132 <EXPECT_TAG>GRAD MKTAGACTION(GRAD)
133 <EXPECT_TAG>HEAD MKTAGACTION(HEAD)
134 <EXPECT_TAG>HUSB MKTAGACTION(HUSB)
135 <EXPECT_TAG>IDNO MKTAGACTION(IDNO)
136 <EXPECT_TAG>IMMI MKTAGACTION(IMMI)
137 <EXPECT_TAG>INDI MKTAGACTION(INDI)
138 <EXPECT_TAG>LANG MKTAGACTION(LANG)
139 <EXPECT_TAG>LEGA MKTAGACTION(LEGA)
140 <EXPECT_TAG>MARB MKTAGACTION(MARB)
141 <EXPECT_TAG>MARC MKTAGACTION(MARC)
142 <EXPECT_TAG>MARL MKTAGACTION(MARL)
143 <EXPECT_TAG>MARR MKTAGACTION(MARR)
144 <EXPECT_TAG>MARS MKTAGACTION(MARS)
145 <EXPECT_TAG>MEDI MKTAGACTION(MEDI)
146 <EXPECT_TAG>NAME MKTAGACTION(NAME)
147 <EXPECT_TAG>NATI MKTAGACTION(NATI)
148 <EXPECT_TAG>NATU MKTAGACTION(NATU)
149 <EXPECT_TAG>NCHI MKTAGACTION(NCHI)
150 <EXPECT_TAG>NICK MKTAGACTION(NICK)
151 <EXPECT_TAG>NMR MKTAGACTION(NMR)
152 <EXPECT_TAG>NOTE MKTAGACTION(NOTE)
153 <EXPECT_TAG>NPFX MKTAGACTION(NPFX)
154 <EXPECT_TAG>NSFX MKTAGACTION(NSFX)
155 <EXPECT_TAG>OBJE MKTAGACTION(OBJE)
156 <EXPECT_TAG>OCCU MKTAGACTION(OCCU)
157 <EXPECT_TAG>ORDI MKTAGACTION(ORDI)
158 <EXPECT_TAG>ORDN MKTAGACTION(ORDN)
159 <EXPECT_TAG>PAGE MKTAGACTION(PAGE)
160 <EXPECT_TAG>PEDI MKTAGACTION(PEDI)
161 <EXPECT_TAG>PHON MKTAGACTION(PHON)
162 <EXPECT_TAG>PLAC MKTAGACTION(PLAC)
163 <EXPECT_TAG>POST MKTAGACTION(POST)
164 <EXPECT_TAG>PROB MKTAGACTION(PROB)
165 <EXPECT_TAG>PROP MKTAGACTION(PROP)
166 <EXPECT_TAG>PUBL MKTAGACTION(PUBL)
167 <EXPECT_TAG>QUAY MKTAGACTION(QUAY)
168 <EXPECT_TAG>REFN MKTAGACTION(REFN)
169 <EXPECT_TAG>RELA MKTAGACTION(RELA)
170 <EXPECT_TAG>RELI MKTAGACTION(RELI)
171 <EXPECT_TAG>REPO MKTAGACTION(REPO)
172 <EXPECT_TAG>RESI MKTAGACTION(RESI)
173 <EXPECT_TAG>RESN MKTAGACTION(RESN)
174 <EXPECT_TAG>RETI MKTAGACTION(RETI)
175 <EXPECT_TAG>RFN MKTAGACTION(RFN)
176 <EXPECT_TAG>RIN MKTAGACTION(RIN)
177 <EXPECT_TAG>ROLE MKTAGACTION(ROLE)
178 <EXPECT_TAG>SEX MKTAGACTION(SEX)
179 <EXPECT_TAG>SLGC MKTAGACTION(SLGC)
180 <EXPECT_TAG>SLGS MKTAGACTION(SLGS)
181 <EXPECT_TAG>SOUR MKTAGACTION(SOUR)
182 <EXPECT_TAG>SPFX MKTAGACTION(SPFX)
183 <EXPECT_TAG>SSN MKTAGACTION(SSN)
184 <EXPECT_TAG>STAE MKTAGACTION(STAE)
185 <EXPECT_TAG>STAT MKTAGACTION(STAT)
186 <EXPECT_TAG>SUBM MKTAGACTION(SUBM)
187 <EXPECT_TAG>SUBN MKTAGACTION(SUBN)
188 <EXPECT_TAG>SURN MKTAGACTION(SURN)
189 <EXPECT_TAG>TEMP MKTAGACTION(TEMP)
190 <EXPECT_TAG>TEXT MKTAGACTION(TEXT)
191 <EXPECT_TAG>TIME MKTAGACTION(TIME)
192 <EXPECT_TAG>TITL MKTAGACTION(TITL)
193 <EXPECT_TAG>TRLR MKTAGACTION(TRLR)
194 <EXPECT_TAG>TYPE MKTAGACTION(TYPE)
195 <EXPECT_TAG>VERS MKTAGACTION(VERS)
196 <EXPECT_TAG>WIFE MKTAGACTION(WIFE)
197 <EXPECT_TAG>WILL MKTAGACTION(WILL)
199 <EXPECT_TAG>{alphanum}+ ACTION_ALPHANUM
203 {any_but_delim} ACTION_ANY
205 {escape}/{non_at} ACTION_ESCAPE
207 {pointer} ACTION_POINTER
209 {gen_delim}*{terminator} ACTION_TERMINATOR
227 set_encoding_width(ONE_BYTE);
228 res = open_conv_to_internal("ASCII");
230 gedcom_error("Unable to open conversion context: %s",
234 tok = gedcom_1byte_lex();
237 case BADTOKEN: printf("BADTOKEN "); break;
238 case OPEN: printf("OPEN(%d) ", gedcom_lval.level); break;
239 case CLOSE: printf("CLOSE "); break;
240 case ESCAPE: printf("ESCAPE(%s) ", gedcom_lval.string); break;
241 case DELIM: printf("DELIM "); break;
242 case ANYCHAR: printf("%s ", gedcom_lval.string); break;
243 case POINTER: printf("POINTER(%s) ", gedcom_lval.pointer); break;
244 case USERTAG: printf("USERTAG(%s) ", gedcom_lval.tag); break;
245 default: printf("TAG(%s) ", gedcom_lval.tag); break;
247 tok = gedcom_1byte_lex();
250 close_conv_to_internal();