EnglishРусский  

   ..

   bnf.g

   default.g

   standard.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.

  1 /******************************************************************************
  2 *
  3 * Copyright (C) 2006, The Gentee Group. All rights reserved. 
  4 * This file is part of the Gentee open source project - http://www.gentee.com. 
  5 * 
  6 * THIS FILE IS PROVIDED UNDER THE TERMS OF THE GENTEE LICENSE ("AGREEMENT"). 
  7 * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE CONSTITUTES RECIPIENTS 
  8 * ACCEPTANCE OF THE AGREEMENT.
  9 *
 10 * ID: standard 17.11.06 0.0.A.
 11 *
 12 * Author: Alexey Krivonogov ( gentee )
 13 *
 14 ******************************************************************************/
 15 
 16 include : $"..\..\..\..\example\src2html\src2html.g"
 17 
 18 global
 19 {
 20    uint _gtimenu // gtitem in menu for searchroot
 21    uint _childmenu  // The first owner in childs
 22 }
 23 
 24 /*-----------------------------------------------------------------------------
 25 *
 26 * ID:  15.03.2007 1.0
 27 * 
 28 * Summary: Получить ссылку на страницу.  
 29 *  
 30 -----------------------------------------------------------------------------*/
 31 
 32 text a( arrstr params )
 33 \{
 34    str atext link
 35    uint gti 
 36    
 37    if !*params : return
 38    
 39    link = params[0]
 40       
 41    gti as _gtp.find( link )
 42    if >i
 43    { 
 44       _gtp.geturl( gti, link )
 45       gti.getsubitem( "urlname", atext )
 46       if !*atext : gti.getsubitem( "title", atext )
 47    }
 48       
 49    if *params > 1 && *params[1] : atext = params[1]
 50 
 51    if !*atext
 52    {
 53       atext = link
 54       if "http:".eqlenign( atext ) : atext.del( 0, 7 )
 55    }
 56    @"<a href = \"\( link )\">\( atext )</a>"
 57 }\!
 58 
 59 text content( gtitem gti )
 60 \{
 61    str  content title
 62    arrstr  prg
 63 
 64    gti.getsubitem( "content", content )
 65    gti.getsubitem( "pagetitle", title )
 66    if !*title : gti.getsubitem( "title", title )
 67 
 68    @"#h1( '\(title )')\l"
 69    if gti.find( "nop" )
 70    {
 71       @content
 72    }
 73    else
 74    {
 75       @"<p>"
 76       prg.load( content, 0 )
 77       foreach curp, prg
 78       {
 79          if !*curp : @"</p><p>\l"
 80          else : @"\(curp)\l" 
 81       }
 82       @"</p>"
 83    }
 84 //   @content      
 85 }\!
 86 
 87 
 88 method uint gtpub.searchmenu( gtitem gmenu, str name )
 89 {
 90    if gmenu.name %== name : return &gmenu
 91    
 92    foreach curmenu, gmenu
 93    {
 94       uint ret
 95       if ret = this.searchmenu( curmenu->gtitem, name ) : return ret 
 96    }
 97    return 0
 98 }
 99 
100 text ulcont( gtitem root )
101 <ul><p>\{
102    foreach cur, root
103    {
104       cur as gtitem
105       arrstr  pars
106       str     link
107       
108       if cur.find("nourl")
109       {
110          uint gtdis
111          str  stemp
112          
113          gtdis as _gtp.find( cur.name )
114          if >dis : gtdis.getsubitem( "title", stemp )
115          else : stemp = cur.name
116          link = "<span class=\"text\">\(stemp)</span>"
117       }
118       else
119       {
120          pars += cur.name
121          link@a( pars )
122       } 
123       @"<li>\( link )"
124       if cur.haschild() : @ulcont( cur )
125       @"</li>\l"
126    }
127 }</p></ul>\!
128 
129 text contents( arrstr param )
130 \{
131    uint root
132    
133    root as _gtp.searchmenu( _gtp.find( "menu"), param[0] )->gtitem
134    
135    @"<p>#h2( '#lng/tcont#' )"   
136    @ulcont( root )
137    @"</p>"
138 }\!
139 
140 text adesc( arrstr params )
141 \{
142    uint gti 
143    
144    if !*params : return
145   
146    gti as _gtp.find( params[0] )
147    if >i
148    { 
149       str stemp
150       gti.getsubitem( "desc", stemp )
151       @stemp
152    }
153 }\!
154 
155 text desc( arrstr params )
156 \{
157    uint gti 
158    
159    if !*params : return
160   
161    gti as _gtp.find( params[0] )
162    if >i
163    { 
164       str stemp
165       gti.getsubitem( "desc", stemp )
166       @stemp
167    }
168 }\!
169 
170 text doclist( arrstr param )
171 #tblparam[\{
172    arrstr items
173    
174    items.loadtrim( param[0] )
175    foreach cur, items
176    {
177       str title desc link
178       uint gti
179       
180       gti as _gtp.find( cur )
181       if >i
182       { 
183 //         _gtp.geturl( gti, link )
184 //         gti.getsubitem( "urlname", title )
185 //         if !*title : gti.getsubitem( "title", title )
186          gti.getsubitem( "desc", desc )
187          @"#a( \( cur ))|\(desc)\l "
188       }
189       
190    }   
191 }]\!
192 
193 text dwnfile( arrstr param )
194 \{
195    finfo fi
196    datetime dt
197    str   date atext name filename = "#dwnpath#\\\(param[0])"
198    
199    _gtp.get( "lng/date", date )
200    _gtp.process( filename )
201    if !getfileinfo( filename, fi )
202    {
203       print("File \( filename ) has not been found!\n")
204    } 
205    name.fnameext( filename )
206    ftimetodatetime( fi.lastwrite, dt, 0)
207    getdateformat( dt, date, atext )
208     
209    @"<strong><a href = '/download/\(name)'>\(name)</></>|\(fi.sizelo)|\(atext)|\(param[1])"      
210 
211 }\!
212 
213 text form( arrstr params )
214 \{
215    str url
216    uint gti
217    
218    gti as _gtp.find( params[0] )
219    if >i : _gtp.geturl( gti, url )
220 }
221 <form class="form1" enctype="multipart/form-data" action="\( url )"  method="post">\!
222 
223 text formcombo( arrstr params )
224 \{  arrstr items
225  
226    if *params < 3 : return
227    @"<h6>\( params[0] )</h6><SELECT NAME=\"\( params[1] )\" SIZE=1 class=\"combobox\">"
228    items.loadtrim( params[2] )
229    foreach curi, items
230    {
231       arrstr subi
232       curi.split( subi, '|', $SPLIT_NOSYS | $SPLIT_FIRST )
233       @"<option value='\(subi[0])'>\( subi[1] )</option>"
234    }
235    @"</select>"
236 }\!
237 
238 text formend( arrstr params )
239 <br><input type="submit" value="\( params[0] )" class="button">
240 \{
241    if *params > 1
242    {
243       @"<input type=\"reset\" value=\"\( params[1])\" class=\"button\">"
244    }
245 }</form>\!
246 
247 text formradio( arrstr params )
248 \{  arrstr items
249  
250    if *params < 3 : return
251    @"<h6>\( params[0] )</h6>"
252    items.loadtrim( params[2] )
253    foreach curi, items
254    {
255       arrstr subi
256       curi.split( subi, '|', $SPLIT_NOSYS | $SPLIT_FIRST )
257       @"<input type=\"radio\" name=\"\(params[1])\" value=\"\(subi[0])\"> \( subi[1] )</input><br>"
258    }
259 }\!
260 
261 text curlang( arrstr params )
262 \{
263     @_gtp.lang
264 }\!
265 
266 text mainmenu( gtitem gti )
267 <div class="menu-box">
268 	<span class="mainmenu">
269 \{
270    uint imenu
271    
272    imenu as _gtp.find("menu")
273    foreach curmenu, imenu
274    {
275       str  name
276       uint mgti
277       arrstr  astr
278       
279       curmenu as gtitem
280       astr += curmenu.name
281       
282       _gtp.geturlname( curmenu.name, name )
283       
284       if _gtp.searchmenu( curmenu, gti.name )
285       {
286          @"<div class=\"menu-act\">\( name )</div>"
287       }
288       else : @a( astr )
289    }         
290 }      
291 	</span>
292 </div>\!
293 
294 method gtitem gtpub.searchroot( gtitem gti, str name attrib )
295 {
296    if gti.name %== name
297    { 
298       _gtimenu = >i
299       return 0xFFFFFFFF->gtitem
300    } 
301    foreach curmenu, gti
302    {
303       uint ret
304       
305       curmenu as gtitem
306       ret as this.searchroot( curmenu, name, attrib )
307       if ret
308       {
309          if &ret == 0xFFFFFFFF
310          {
311             if gti.find( attrib ) : return gti
312             else : return ret        
313          }
314          else : return ret 
315       }      
316    }
317    return 0->gtitem   
318 }
319 
320 text grainmenu( gtitem gti )
321 \{
322    uint rootmenu
323   
324    rootmenu as _gtp.searchroot( _gtp.find("menu"), gti.name, "grain" )
325    if !&rootmenu || &rootmenu == 0xFFFFFFFF : return
326 }<div class="box submenu">\{
327    uint   owner 
328    int    i
329    arrstr st
330    
331    owner as _gtimenu->gtitem
332    
333    do
334    {
335       owner as owner.parent()
336       if !owner.find("nourl")
337       {
338          st += owner.name
339       }
340    } while &owner != &rootmenu  
341    
342    for i = *st - 1, i >= 0, i--
343    {
344       str class
345       arrstr param
346       if i == *st - 1 && i : class = "class=\"first\""
347       elif !i : class = "class=\"last\""
348 //      url@a( param += st[i] )
349       @"<span \(class)>"
350       @a( param += st[i] )
351       @"</span>"          
352    }  
353 //   navgenerate( rootmenu, 0, gti.name, stemp )
354 //   @stemp
355 //				<span class="first"><a href="#">Документация</a></span><span><a href="#">Описание языка</a></span><span class="last"><a href="#">Макросы</a></span>
356 }</div>
357 \!
358 
359 text linklist( arrstr params )
360 #h2( \( params[0] ) )
361 <p><ul>
362 \{
363    arrstr items
364    
365    params[1].split( items, '|', $SPLIT_NOSYS )
366    foreach cur, items
367    {
368       @"<li>#a( \( cur ) )</li>\l"
369    }
370 }</ul></p>\!
371 
372 func str navgenerate( gtitem gti, uint level, str name ret )
373 {
374    str stemp
375    
376    if gti.haschild() && ( !level || name != "childs" ) && 
377       ( !_childmenu || _childmenu == >i || level != 1 )
378    {
379       arrstr astr
380 
381       if level
382       {            
383          if gti.name %== name
384          {
385             _gtp.geturlname( name, stemp )
386             ret@"<div class=\"lvl l\(level) act  show\">
387 							<p class=\"act\"><!--span onclick=\"hideShow(2)\" id=\"2\"> – </span-->   \( stemp )</p>
388 							<div class=\"lvl l\( level + 1 ) show\" ><!-- id=\"2_1\" -->
389 								<ul>"
390          }
391          else
392          {
393             astr += gti.name
394             if gti.find("nourl")
395             {
396                uint gtdis
397                gtdis as _gtp.find( gti.name )
398                if >dis : gtdis.getsubitem( "title", stemp )
399                else : stemp@gti.name
400             }
401             else : stemp@a( astr )
402             ret@"<div class=\"lvl l\(level)\">
403 					<p><!--span onclick=\"hideShow(3)\" id = \"3\" > – </span-->   \( stemp )</p>
404 						<div class=\"lvl l\(level + 1) show\"><!-- id=\"3_1\"-->
405                   <ul>"
406          }            
407       }
408 //      print("Childs \(gti.name) = \(level) \(name)\n")            
409       foreach curmenu, gti
410       {
411          navgenerate( curmenu->gtitem, level + 1, name, ret )
412       }
413       if level
414       {
415          ret@"</ul></div></div>"
416       }
417    }
418    else 
419    {
420 //      print( "\(gti.name) \(level) \n")
421       if gti.name %== name
422       {
423          _gtp.geturlname( name, stemp )
424          if level == 1
425          {      
426             ret @ "<div class=\"lvl l\(level) act\"><p class=\"act\">   \( stemp )</p></div>"
427          }
428          else : ret @ "<li class=\"act\">\( stemp )</li>"
429       }
430       else
431       {
432          arrstr astr
433             
434          if gti.find("nourl")
435          {
436             uint gtdis
437             gtdis as _gtp.find( gti.name )
438             if >dis : gtdis.getsubitem( "title", stemp )
439             else : stemp@gti.name
440          }
441          else
442          {
443             astr += gti.name 
444             stemp@a( astr )
445          }
446          if level == 1
447          {         
448             ret @ "<div class=\"lvl l\(level)\"><p>   \(stemp)</p></div>"
449          }
450          else : ret @ "<li>\(stemp)</li>" 
451       }
452    }
453    return ret
454 }
455 
456 text navmenu( gtitem gti )
457 \{
458    uint rootmenu parent
459    str  name
460 
461    _gtimenu = 0
462    _childmenu = 0
463    name = gti.name
464    rootmenu as _gtp.searchroot( _gtp.find("menu"), name, "nav" )
465       
466    if _gtimenu && _gtimenu->gtitem.find( "childs" ) 
467    {
468       name = "childs"
469       rootmenu as _gtimenu->gtitem
470 //      return
471    }
472    elif !&rootmenu || &rootmenu == 0xFFFFFFFF : return
473 }<div class="left-menu">\{
474    str stemp
475    if rootmenu.find( "childs" ) && &rootmenu != _gtimenu 
476    {
477       _childmenu = _gtimenu
478       while &_childmenu->gtitem.parent() != &rootmenu   
479       {
480          _childmenu = &_childmenu->gtitem.parent()
481       }
482 //      print(" \( &rootmenu ) Child = \( _childmenu ) \(name) \( _childmenu->gtitem.name )\n")    
483    }
484    navgenerate( rootmenu, 0, name, stemp )
485    @stemp 
486 /*   foreach curmenu, imenu
487    {
488       str  name
489       uint mgti
490       arrstr  astr
491       
492       curmenu as gtitem
493    }*/         
494 }
495 </div>\!
496 
497 text related( str param )
498 \{
499    uint gti gtis
500 
501    gti as _gtp.find("common/\( param )/require" )
502    if >i
503    {
504       @"<p>#h2(#lng/require#)#tblparam[ \( gti.value ) ]</p>"
505    }
506    
507    gti as _gtp.find("common/\( param )/related" )
508    if style[0] != 'H'
509    {
510       gtis as _gtp.find("common/\( param )/source" )
511    }
512    if >i && gtis
513    {
514       @"<table border=0 width=100%><tr><td>"
515    }
516    if >i
517    {
518       @"<p>#linklist( #lng/related#, \( gti.value ))</p>"
519    }
520    if >i && gtis : @"</td><td>"
521    if gtis
522    {
523       @"<p>#h2( '#lng/source#' )<p><ul>"
524    
525       arrstr items
526    
527       gtis->gtitem.value.split( items, '|', $SPLIT_NOSYS )
528       foreach cur, items
529       {
530          str val anchor
531          uint off
532          
533          off = cur.findch('#')
534          if off < *cur
535          {
536             anchor.substr( cur, off, *cur - off )
537             cur.setlen( off )
538          }
539          val.replacech( cur, '.', "_" ) += ".htm"
540          @"<li>#a( /source/\(val)\(anchor), \(cur) )</li>\l"
541       }
542       @"</ul></p></p>"
543    }
544    if >i && gtis
545    {
546       @"</td></tr></table>"
547    }
548 }\!
549 
550 text sp( arrstr param )
551 \{
552    uint i
553    fornum i, uint( param[0] ) + 1
554    {
555       @" "
556    }
557 }\!
558 
559 text srcg( arrstr params )
560 \{
561    str  out stemp
562    
563    _gtp.process( params[0] )   
564 //   stemp.replacech( params[0], '<', "<" )
565 //   out.replacech( stemp, '>', ">" )
566    out@src2html( params[0], $S2H_GENTEE )
567 }
568 <pre><code>\( out )</code></pre>
569 \!
570 
571 text ex( arrstr params )
572 \{
573    uint example
574    
575    example as _gtp.find( params[0] )
576    if &example
577    {
578       params[0] = example->gtitem.value
579       @srcg( params ) 
580    }
581 }\!
582 
583 text srchtml( arrstr params )
584 \{
585    str  out stemp
586    
587    _gtp.process( params[0] )   
588    stemp.replacech( params[0], '<', "<" )
589    out.replacech( stemp, '>', ">" )
590 }
591 <pre><code><strong>\( out )</strong></code></pre>
592 \!
593 
594 text srctxt( arrstr params )
595 \{
596    str  out stemp
597    
598    _gtp.process( params[0] )   
599    stemp.replacech( params[0], '<', "<" )
600    out.replacech( stemp, '>', ">" )
601 }
602 <pre><code><strong>\( out )</strong></code></pre>
603 \!
604 
605 text tblborder( arrstr param )
606 \{
607    uint i, cols, width = 100
608    arrstr lines items
609    
610    if *param > 1 : width = uint( param[1] )
611 
612    lines.loadtrim( param[0] )
613    
614    @"<table cellpadding=\"0\" rules=\"cols\" class=\"table1\" width=\( width )%>"
615    lines[0].split( items, '|', $SPLIT_NOSYS )
616    cols = *items      
617    @"<col span=\( cols ) width=\"20%\">"
618    fornum i, *lines
619    {
620       str class
621       
622       if !i : class = "class=\"tablehead\""
623       elif i == 1 : class = "class=\"after-tablehead\""
624       @"<tr \(class)>"
625       lines[i].split( items, '|', $SPLIT_NOSYS )
626       if *items == 1
627       {
628           @"<td colspan = \(cols)><span>\(items[0])</span></td>"  
629       }
630       else
631       {
632          foreach curi, items
633          {
634             @"<td><span>\(curi)</span></td>"
635          }
636       }
637       @"</tr>"
638    }
639    @"</table>"
640 }\!
641 
642 text tblparam( arrstr param )
643 \{
644    uint i, cols, width = 100
645    uint colw = 30
646    arrstr lines items
647    
648    if *param > 1 : width = uint( param[1] )
649    if *param > 2 : colw = uint( param[2] )
650 
651    lines.loadtrim( param[0] )
652    
653    @"<table cellpadding=\"0\" class=\"table3\" width=\( width )%>"
654    @"<col width=\"\(colw)%\">"
655    fornum i, *lines
656    {
657       str class
658       
659       if !i : class = "class=\"first-row\""
660       elif i == *lines - 1 : class = "class=\"last-row\""
661       @"<tr \(class)>"
662       lines[i].split( items, '|', $SPLIT_NOSYS )
663       if *items == 1 : items += " "
664        _gtp.process( items[0] )
665        _gtp.process( items[1] )
666       @"<td class=\"first-col\"><span>\(items[0])</span></td>"
667       @"<td class=\"last-col\"><span>\(items[1])</span></td>"
668       @"</tr>"
669    }
670    @"</table>"
671 }\!
672 
673 text tbllines( arrstr param )
674 \{
675    uint i
676    arrstr lines
677    
678    subfunc trout( uint num )
679    {
680       uint k
681       arrstr items
682       
683       _gtp.process( lines[ num ] )
684       lines[ num ].split( items, '|', $SPLIT_NOSYS )
685 		@"<td class=\"first-col\"><span>\( items[0] )</span></td>\l"
686       
687       fornum k = 1, *items - 1
688       {
689          @"<td><span>\( items[k] )</span></td>\l"   
690       }
691       @"<td class=\"last-col\"><span>\( items[ *items - 1 ] )</span></td>\l"
692    }
693    
694    lines.loadtrim( param[0] )
695    
696    @"<div class=\"box-no-bord\"><table cellpadding=\"0\" class=\"table2\">
697 <tr class=\"tablehead\">\l"
698    trout( 0 )
699    @"</tr>\l"
700    fornum i = 1, *lines
701    {
702       if !*lines[i] : continue
703       @"<tr class=\"\(?( i & 1, "ne-chet", "chet" ))\">\l"
704       trout( i )  
705       @"</tr>\l"
706    }
707    @"</table></div>"
708 }\!
709 
710 text apilist( arrstr param )
711 \{
712    arrstr items
713    uint   i
714 
715    subfunc trout( str sname )
716    {
717       str  desc
718       uint gti
719       
720       gti as _gtp.find( sname )
721       if !>i : return
722 
723       gti.getsubitem( "desc", desc )
724       @"<td class=\"first-col\"><span class=\"api\">#a(\( sname ))</span></td>\l"
725       @"<td class=\"last-col\"><span>\( desc )</span></td>\l"
726    }
727    
728    items.loadtrim( param[0] )
729 
730    @"<div class=\"box-no-bord\"><table cellpadding=\"0\" class=\"table2\">"
731    fornum i = 0, *items
732    {
733       @"<tr class=\"\(?( i & 1, "ne-chet", "chet" ))\">\l"
734       trout( items[i] )  
735       @"</tr>\l"
736    }
737    @"</table></div>"
738 }\!
739 
740 text urltext( arrstr params )
741 \{
742    arrstr links
743    
744    links.loadtrim( params[0] )
745    foreach curlink, links
746    {
747       arrstr items
748       
749       curlink.split( items, ',', $SPLIT_FIRST | $SPLIT_NOSYS )
750       if *items == 2
751       {
752          @"#h4( #a[\(items[0])])<p>\(items[1])</p>"
753       }
754    }
755 }\!
756 
757 text header( gtitem gti, str langlink )
758 	<div class="header">
759 		<span class="logo"> </span>
760    	<noindex><span class="search">
761 \{
762 if _gtp.find("langlist")
763 {
764    foreach curl, _gtp.find("langlist")
765    {  
766       str name
767       curl as gtitem
768           
769       curl.get( "name", name )
770 	   @"<span class=\"lang\">"
771       if curl.name %== _gtp.lang : @name
772       elif *langlink
773       {
774          @"<a href=\"\(curl.value)\(langlink)\">\( name )</a>"
775       }
776       else
777       {   
778          str link
779          _gtp.geturl( gti, link )
780          @"<a href=\"\(curl.value)\(link)\">\( name )</a>"
781       }
782       @"</span>"
783    }
784 }
785 }
786 			<!-- form action="" method=get>
787 				<input type="text" class="inp" name="search">
788 				<input type="submit" value="Search"  class="sub" name="submit">
789             </form -->
790 		</span></noindex>
791 		<span class="head-fon"> </span>
792 		<br style="clear:right">
793       \@mainmenu( gti )
794 	</div>
795 \!
796 
797 text ul( arrstr params )
798 <ul>
799 \{
800    arrstr links
801    
802    links.loadtrim( params[0] )
803    foreach curlink, links
804    {
805       @"<li><span class=\"text\">\(curlink)</span></li>\l"
806    }
807 }</ul>\!
808 
809 include : "bnf.g"