EnglishРусский  

   ..

   sp.tbl

   sp.txt

   spt.txt

   tblget.g

   xml.g

   xmlfuncs.g

   xmluser.g

The project is closed! You can look at a new scripting language. It is available on GitHub.
Also, try our open source cross-platform automation software.

Ads

Installer and installation software
Commercial and Freeware installers.

source\lib\xml\xmlfuncs.g
  1 extern{ func f_endtagname }
  2 //*****************************************************************************
  3 
  4 //1-начало сущности & ;
  5 func f_begent
  6 {  
  7    if !X_curtext->xtext.txtype && 
  8       X_curtext->xtext.txaddr_code != X_ia 
  9    {  //Сохраняем текст
 10       X_curtext->xtext.txlen = X_ia - X_curtext->xtext.txaddr_code
 11       X_curtext->xtext.txtype = $TX_TEXT
 12    }
 13    if X_curtext->xtext.txtype 
 14    {      
 15       //Заготовка текста      
 16       if ++X_ncurtext == X_maxtext
 17       {         
 18          X_maxtext += (X_n = X_maxtext * 3 / 10)
 19          X_x->xml.texts.expand(X_n)
 20       }      
 21       X_curtext = &X_x->xml.texts[X_ncurtext]
 22    }      
 23    X_curnameoff = X_ia + 1       
 24 }
 25 
 26 //2-конец сущ
 27 func f_endent
 28 {
 29    //Сохраняем текст-сущность   
 30    X_sname.clear()
 31    X_curtext->xtext.txaddr_code = &X_x->xml.hentities[ X_sname.append( X_curnameoff, X_ia - X_curnameoff )]       
 32    X_curtext->xtext.txtype = $TX_ENTITY  
 33    //Заготовка текста    
 34    if ++X_ncurtext == X_maxtext
 35    {    
 36       X_maxtext += (X_n = X_maxtext * 3 / 10)
 37       X_x->xml.texts.expand(X_n)
 38    }  
 39    X_curtext = &X_x->xml.texts[X_ncurtext]
 40    X_curtext->xtext.txaddr_code = X_ia + 1
 41 }
 42 
 43 //3-конец числ сущ
 44 func f_endentnum
 45 {
 46    //Сохраняем текст-код   
 47    X_sname.clear()   
 48    X_curtext->xtext.txaddr_code = X_sname.append( ++X_curnameoff, X_ia - X_curnameoff ).int()
 49    X_curtext->xtext.txtype = $TX_SYMBOL
 50    //Заготовка текста
 51    if ++X_ncurtext == X_maxtext
 52    {      
 53       X_maxtext += (X_n = X_maxtext * 3 / 10)
 54       X_x->xml.texts.expand(X_n)
 55    }   
 56    X_curtext = &X_x->xml.texts[X_ncurtext]
 57    X_curtext->xtext.txaddr_code = X_ia + 1
 58 } 
 59 
 60 //4-конец шест сущ
 61 func f_endenthex
 62 {
 63    //Сохраняем текст-код
 64    X_sname.clear()
 65    X_sname.appendch( '0' )   
 66    X_curtext->xtext.txaddr_code =  X_sname.append( ++X_curnameoff, X_ia - X_curnameoff ).int()
 67    X_curtext->xtext.txtype = $TX_SYMBOL
 68    //Заготовка текста
 69    if ++X_ncurtext == X_maxtext
 70    {      
 71       X_maxtext += (X_n = X_maxtext * 3 / 10)
 72       X_x->xml.texts.expand(X_n)
 73    }   
 74    X_curtext = &X_x->xml.texts[X_ncurtext]
 75    X_curtext->xtext.txaddr_code = X_ia + 1
 76 }
 77 
 78 //*****************************************************************************
 79 
 80 //5-начало значения атрибута
 81 func f_begatrval
 82 {
 83    //Запоминаем начало текста      
 84    X_curtext->xtext.txtype = 0
 85    X_curtext->xtext.txaddr_code = X_ia + 1   
 86 }
 87 
 88 //6-конец значения атрибута
 89 func f_endatrval
 90 {
 91    if !X_curtext->xtext.txtype && 
 92       X_curtext->xtext.txaddr_code != X_ia
 93    {  //Сохраняем текст
 94       X_curtext->xtext.txlen = X_ia - X_curtext->xtext.txaddr_code
 95       X_curtext->xtext.txtype = $TX_TEXT
 96    }
 97    if X_curtext->xtext.txtype 
 98    {
 99       //Заготовка текста
100       if ++X_ncurtext == X_maxtext
101       {         
102          X_maxtext += (X_n = X_maxtext * 3 / 10)
103          X_x->xml.texts.expand(X_n)
104       }      
105       X_curtext = &X_x->xml.texts[X_ncurtext]
106    }
107    
108    X_x->xml.attribs[X_ncurattrib-1].attend = X_ncurtext   
109 }
110 
111 //*****************************************************************************
112 
113 //7-начало <? ?>, начало наименования
114 func f_begquest
115 {   
116    if !X_curtext->xtext.txtype && 
117       X_curtext->xtext.txaddr_code != X_ia - 1
118    {  //Сохраняем текст
119       X_curtext->xtext.txlen = X_ia - X_curtext->xtext.txaddr_code - 1
120       X_curtext->xtext.txtype = $TX_TEXT
121    }
122    if X_curtext->xtext.txtype 
123    {  //Заготовка текста     
124       if ++X_ncurtext == X_maxtext
125       {         
126          X_maxtext += (X_n = X_maxtext * 3 / 10)
127          X_x->xml.texts.expand(X_n)
128       }      
129       X_curtext = &X_x->xml.texts[X_ncurtext]      
130    }   
131    if X_curtag->xmlitem.tgstart != X_ncurtext
132    {  //Сохраняем элемент-текст      
133       X_curtag->xmlitem.tgtype = $TG_TEXT
134       X_curtag->xmlitem.tgend = X_ncurtext
135       X_curtag->xmlitem.nnext = ++X_ncurtag
136       X_curtag->xmlitem.nparent = X_nparenttag
137       //Заготовка нового элемента      
138       if X_ncurtag == X_maxtag
139       {         
140          X_maxtag += (X_n = X_maxtag * 3 / 10)
141          X_x->xml.tags.expand(X_n)
142       }
143       X_curtag = &X_x->xml.tags[X_ncurtag]
144    }
145    //Предварительное описание элемента <?
146    X_curtag->xmlitem.tgtype = $TG_QUEST
147    X_curtag->xmlitem.tgstart = X_ncurattrib
148    X_curtag->xmlitem.nchild = 0
149    X_curtag->xmlitem.nparent = X_nparenttag   
150    X_curnameoff = X_ia + 1  
151 }
152 
153 //8-конец <? ?>
154 func f_endquest
155 {   
156    if !X_curtag->xmlitem.tgid
157    {
158       f_endtagname()
159    }
160    //Сохранение элемента <? 
161    X_curtag->xmlitem.tgend = X_ncurattrib 
162    X_curtag->xmlitem.nnext = ++X_ncurtag
163    
164    //Заготовка элемента
165    if X_ncurtag == X_maxtag
166    {      
167       X_maxtag += (X_n = X_maxtag * 3 / 10)
168       X_x->xml.tags.expand(X_n)
169    }   
170    //Предварительное описание элемента-текста
171    X_curtag = &X_x->xml.tags[X_ncurtag]
172    X_curtag->xmlitem.tgtype = 0   
173    X_curtag->xmlitem.tgstart = X_ncurtext   
174    X_curtag->xmlitem.nparent = X_nparenttag  
175    X_curtext->xtext.txaddr_code = X_ia + 1 
176    
177 }
178 
179 //*****************************************************************************
180 
181 //9-конец наименования
182 func f_endtagname
183 {  
184    X_sname.clear()         
185    //Сохранение имени
186    X_n = &X_x->xml.hnames[ X_sname.append( X_curnameoff, X_ia - X_curnameoff ) ]
187    if !X_n->uint 
188    {
189       X_n->uint = *X_x->xml.names      
190       X_x->xml.names.expand(1) 
191       X_x->xml.names[X_n->uint] = X_sname           
192    }
193    X_curtag->xmlitem.tgid = X_n->uint
194 }
195 
196 //*****************************************************************************
197 
198 //10-начало имени атрибута
199 func f_begatr
200 {     
201    X_curnameoff = X_ia  
202 } 
203 
204 //11-конец имени атрибута
205 func f_endatr
206 {     
207    X_sname.clear()   
208    //Сохранение имени    
209    X_n = &X_x->xml.hnames[ X_sname.append( X_curnameoff, X_ia - X_curnameoff ) ]
210    if !X_n->uint 
211    {
212       X_n->uint = *X_x->xml.names      
213       X_x->xml.names.expand(1) 
214       X_x->xml.names[X_n->uint] = X_sname           
215    }
216    //Сохранение атрибута
217    X_curattrib->xattrib.attid = X_n->uint   
218    X_curattrib->xattrib.attstart = X_ncurtext
219    //Заготовка атрибута
220    if ++X_ncurattrib == X_maxattrib
221    {      
222       X_maxattrib += (X_n = X_maxattrib * 3 / 10)
223       X_x->xml.attribs.expand(X_n)
224    }   
225    X_curattrib = &X_x->xml.attribs[X_ncurattrib]   
226 }
227 
228 //*****************************************************************************
229 
230 //12-начало <
231 func f_begtag
232 {  
233    if !X_curtext->xtext.txtype && 
234       X_curtext->xtext.txaddr_code != X_ia - 1
235    {  //Сохраняем текст      
236       X_curtext->xtext.txlen = X_ia - X_curtext->xtext.txaddr_code - 1
237       X_curtext->xtext.txtype = $TX_TEXT
238    }
239    if X_curtext->xtext.txtype 
240    {  
241       //Заготовка текста
242       if ++X_ncurtext == X_maxtext
243       {         
244          X_maxtext += (X_n = X_maxtext * 3 / 10)
245          X_x->xml.texts.expand(X_n)
246       }      
247       X_curtext = &X_x->xml.texts[X_ncurtext]      
248    }
249    if X_curtag->xmlitem.tgstart != X_ncurtext
250    {  //Сохраняем элемент текст
251       X_curtag->xmlitem.tgtype = $TG_TEXT
252       X_curtag->xmlitem.tgend = X_ncurtext
253       X_curtag->xmlitem.nnext = ++X_ncurtag
254       //Заготовка элемента
255       if X_ncurtag == X_maxtag
256       {         
257          X_maxtag += (X_n = X_maxtag * 3 / 10)
258          X_x->xml.tags.expand(X_n)
259       }
260       X_curtag = &X_x->xml.tags[X_ncurtag]
261    }     
262    //Предварительное описание элемента-тэга
263    X_curtag->xmlitem.tgtype = $TG_TAG
264    X_curtag->xmlitem.tgstart = X_ncurattrib
265    X_curtag->xmlitem.nparent = X_nparenttag   
266    X_curnameoff = X_ia
267    //print( "< 2\n" ) 
268 }
269 
270 //13-конец >, конец наименования если не было
271 func f_endtag
272 {  
273    if !X_curtag->xmlitem.tgid : f_endtagname()
274       
275    X_curtag->xmlitem.tgend = X_ncurattrib
276    //Запоминаем текущий тэг в стэке     
277    if X_nstack == X_maxstack
278    {
279       X_stacktags.expand( 100 )
280    } 
281    X_stacktags[X_nstack++] = X_ncurtag
282    X_stacktags[X_nstack++] = X_nparenttag
283    X_nparenttag = X_ncurtag++
284    
285    //Заготовка элемента  
286    if X_ncurtag == X_maxtag
287    {      
288       X_maxtag += (X_n = X_maxtag * 3 / 10)
289       X_x->xml.tags.expand(X_n)
290    }   
291    X_curtag = &X_x->xml.tags[X_ncurtag]
292    //Предварительное описание элемента текста
293    X_curtag->xmlitem.tgtype = 0   
294    X_curtag->xmlitem.tgstart = X_ncurtext   
295    X_curtag->xmlitem.nparent = X_nparenttag   
296    X_curtext->xtext.txaddr_code = X_ia + 1      
297 }
298 
299 //14-конец /> конец наименования если не было)
300 func f_endtagend
301 {   
302    if !X_curtag->xmlitem.tgid: f_endtagname()
303    
304    //Сохранение элемента тэга
305    X_curtag->xmlitem.tgtype = $TG_NOCHILD
306    X_curtag->xmlitem.tgend = X_ncurattrib   
307    X_curtag->xmlitem.nnext = ++X_ncurtag   
308    //Заготовка элемента   
309    if X_ncurtag == X_maxtag
310    {  
311       X_maxtag += (X_n = X_maxtag * 3 / 10)
312       X_x->xml.tags.expand(X_n)
313    }
314    X_curtag = &X_x->xml.tags[X_ncurtag]
315    //Предвариельное описание элемента текста
316    X_curtag->xmlitem.tgtype = 0
317    X_curtag->xmlitem.tgstart = X_ncurtext
318    X_curtag->xmlitem.nparent = X_nparenttag
319    X_curtext->xtext.txaddr_code = X_ia + 1   
320 }
321 
322 //*****************************************************************************
323 
324 //15-начало </ начало наименования
325 func f_begendtag
326 {
327    if !X_curtext->xtext.txtype && 
328       X_curtext->xtext.txaddr_code != X_ia - 1
329    {  //Сохраняем текст      
330       X_curtext->xtext.txlen = X_ia - X_curtext->xtext.txaddr_code - 1
331       X_curtext->xtext.txtype = $TX_TEXT       
332    }
333    if X_curtext->xtext.txtype 
334    {  //Заготовка текста
335       if ++X_ncurtext == X_maxtext
336       {         
337          X_maxtext += (X_n = X_maxtext * 3 / 10)
338          X_x->xml.texts.expand(X_n)
339       }      
340       X_curtext = &X_x->xml.texts[X_ncurtext]               
341    }
342    if X_curtag->xmlitem.tgstart != X_ncurtext
343    {  //Сохраняем элемент текст   
344       X_curtag->xmlitem.tgtype = $TG_TEXT
345       X_curtag->xmlitem.tgend = X_ncurtext   
346       X_curtag->xmlitem.nnext = ++X_ncurtag         
347       //Заготовка элемента
348       if X_ncurtag == X_maxtag
349       {         
350          X_maxtag += (X_n = X_maxtag * 3 / 10)
351          X_x->xml.tags.expand(X_n)
352       }
353       X_curtag = &X_x->xml.tags[X_ncurtag]          
354    }   
355    if X_nstack 
356    {  //Вытаскиваем последний элемент из стэка
357       X_nparenttag = X_stacktags[--X_nstack]      
358       X_tparenttag = &X_x->xml.tags[X_n = X_stacktags[--X_nstack]]            
359       if X_n != X_ncurtag - 1      
360       {       
361          X_tparenttag->xmlitem.nchild = X_n + 1
362          X_x->xml.tags[X_ncurtag-1].nnext = 0
363          if X_n != X_curtag - 2 : X_x->xml.tags[X_ncurtag-2].nnext = 0                  
364          //print( "next4=\(0) \(X_ncurtag-1) \(X_n)\n" )         
365       }
366       X_tparenttag->xmlitem.nnext = X_ncurtag
367    } 
368    else
369    {
370       X_x->xml.err = 2
371    }   
372 }
373 
374 //16-конец </ > 
375 func f_begendtagend
376 {  
377    //Предварительное описание элемента текста
378    X_curtag->xmlitem.tgtype = 0
379    X_curtag->xmlitem.tgstart = X_ncurtext
380    X_curtag->xmlitem.nparent = X_nparenttag   
381    X_curtext->xtext.txaddr_code = X_ia + 1
382 }
383 
384 //*****************************************************************************
385 
386 //17-начало <![CDATA[ ]]>
387 func f_begcdata
388 {     
389    if !X_curtext->xtext.txtype && 
390       X_curtext->xtext.txaddr_code != X_ia - 8
391    {  //Заканчиваем текст
392       X_curtext->xtext.txlen = X_ia - X_curtext->xtext.txaddr_code - 8
393       X_curtext->xtext.txtype = $TX_TEXT
394    }
395    if X_curtext->xtext.txtype 
396    {      
397       //Добавляем заготовку элемента  
398       if ++X_ncurtext == X_maxtext
399       {         
400          X_maxtext += (X_n = X_maxtext * 3 / 10)
401          X_x->xml.texts.expand(X_n)
402       }    
403       X_curtext = &X_x->xml.texts[X_ncurtext]
404    }   
405    X_curtext->xtext.txaddr_code = X_ia + 1 
406 }
407 
408 //18-конец <![CDATA[ ]]>
409 func f_endcdata
410 {
411    //Заканчиваем текущий текст  
412    X_curtext->xtext.txlen = X_ia - X_curtext->xtext.txaddr_code
413    X_curtext->xtext.txtype = $TX_TEXT   
414    //Добавляем заготовку текста   
415    if ++X_ncurtext == X_maxtext
416    {      
417       X_maxtext += (X_n = X_maxtext * 3 / 10)
418       X_x->xml.texts.expand(X_n)
419    }   
420    X_curtext = &X_x->xml.texts[X_ncurtext]   
421    X_curtext->xtext.txaddr_code = X_ia + 1
422 }
423 
424 //*****************************************************************************
425 
426 func f_error
427 {
428    X_x->xml.err = 1
429    //print( "ERROR \X_n" )
430 }
431