EnglishРусский  

   ..

   htmlfromcode.g

   main.g

Ads

Perfect Automation tool
All-In-One: Script editor, Launcher, Scheduler, Keyboard & Mouse Recorder. Try now!

CreateInstall
Freeware and commercial installers.

Cell Phone Batteries
Batteries Plus offers batteries for laptop, camcorder, cell phone, camera.

Gentee needs your help!
How to advertise with us
 
laptop battery

source\example\converthtml\htmlfromcode.g
  1 /******************************************************************************
  2 *
  3 * Copyright (C) 2004-2006, The Gentee Group. All rights reserved. 
  4 * This file is part of the Gentee open source project.
  5 * http://www.gentee.com
  6 * 
  7 * THIS FILE IS PROVIDED UNDER THE TERMS OF THE GENTEE LICENSE ("AGREEMENT"). 
  8 * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE CONSTITUTES RECIPIENTS 
  9 * ACCEPTANCE OF THE AGREEMENT.
 10 *
 11 * ID: htmlfromcode 31.10.06
 12 *
 13 * Author: Aleksandr Antypenko ( santy )
 14 *
 15 * Summary: Function converting from gentee code to the html 
 16 *
 17 ******************************************************************************/
 18 
 19 define
 20 {
 21    DOCTYPE = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Final//EN\">"
 22    REST = "<body>\n<!-- Generated with ge2html by Alex Antypenko -->\n<code>\n<pre>\n"
 23    HEADER = "\$DOCTYPE$ <html>\n \$REST"
 24    CSS_FILE = ".comment  {color:#cc9999;}\n .keyword  {color:#000000;font-weight: bold;}\n .builtin  {color:#006600;font-weight: bold;}\n .string  {color:#00A033;}\n .syschar {color:#993333;}\n .operchar {color:#330033;}\n .bracket3 {color:#0000FF;}\n .numlines {color:#000000;}\n .number {color:#009999;}\n .type {color:#0000FF;}"
 25    HEADER_CSS = "\$DOCTYPE$\n<html>\n<head>\n<style>\n<!-- \n \$CSS_FILE$ \n-->\n</style>\n</head>\n\$REST$"
 26    HEADER_CSS_FILE = "\$DOCTYPE$\n<html>\n<head>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"genteecode.css\">\n</head>\n\$REST$"
 27    FOOTER = "\n</pre>\n</code>\n</body>\n</html>"
 28    END_TAGS = "</font>"
 29    END_TAGS_CSS = "</span>"
 30 
 31 } 
 32 
 33 include
 34 {
 35    $"..\..\lib\lex\lex.g"
 36    "lexfgentee.g"
 37 } 
 38 
 39 global
 40 {
 41    arr tags of str = %{
 42       "",      // normal
 43       "<font color=\"#cc9999\">",      // comment
 44       "<font color=\"#000000\">",      // keyword 
 45       "<font color=\"#006600\">",      // builtin #FF00FF - ping
 46       "<font color=\"#00A033\">",      // string
 47       "<font color=\"#993333\">",      // syschar
 48       "<font color=\"#330033\">",      // operchar
 49       "<font color=\"#0000FF\">",      // bracket #3
 50       "<font color=\"#000000\">",      // numLines
 51       "<font color=\"#009999\">",      // Number
 52       "<font color=\"#00ccff\">"       // type       
 53    } 
 54    arr tags_css of str = %{
 55       "",      // normal, nothing needed
 56       "<span class=comment>",      // comment
 57       "<span class=keyword>",      // keyword
 58       "<span class=builtin>",      // builtin
 59       "<span class=string>",       // string
 60       "<span class=syschar>",      // syschar
 61       "<span class=operchar>",     // bracket #2
 62       "<span class=bracket3>",     // bracket #3
 63       "<span class=numlines>",     // numLines
 64       "<span class=number>",       // number
 65       "<span class=type>"          // type      
 66    } 
 67 }
 68  
 69 /*-----------------------------------------------------------------------------
 70 *
 71 * ID: num2str 31.10.06 <version>
 72 * 
 73 * Summary: Convert number lines to the string type
 74 *
 75 * Parameters: 
 76 *           uint number   -  number of lines
 77 *				
 78 * Return :
 79 *        str - converted string
 80 *        
 81 -----------------------------------------------------------------------------*/
 82 func str num2str < result >( uint number )
 83 {
 84    str tmpStr ;
 85    int2str( tmpStr, "%d", number ) ;
 86    result = tmpStr.fillspacer( 5 ) ;
 87 } 
 88 /*-----------------------------------------------------------------------------
 89 *
 90 * ID: detag 31.10.06 <version>
 91 * 
 92 * Summary: Change "<" or ">" symbols on "<" ;">","
 93 *
 94 * Parameters: 
 95 *           str stringInfo    -  string for converting
 96 *				
 97 * Return :
 98 *        str - converted string
 99 *        
100 -----------------------------------------------------------------------------*/
101 func str detag < result >( str stringInfo )
102 {
103    str strResult
104    uint i
105    for i = 0, i <= *stringInfo-1, ++i
106    {
107       str strTmp
108       if( stringInfo [ i ] == 0x3C ) : strResult += "<"
109       elif( stringInfo [ i ] == 0x3E ) : strResult += ">"
110       elif (stringInfo [ i ] == 0x22)  : strResult += """
111       else 
112       {
113         strResult += char2str(strTmp,stringInfo [ i ])
114         strTmp.clear()
115       }
116    } 
117    result = strResult
118 } 
119 
120 /*------------------------------------------------------------------------------
121 * ID: htmlcodegentee 31.10.06 <version>
122 * 
123 * Summary: Convert gentee code to the html
124 
125 *   Function formatfile - 
126 *     
127 *   Parameters: 
128 *           str namefile    -  name of input file
129 *	    str OutToFile   -  buffer for converting html code
130 *				
131 *   Return :
132 *        1 - converting buffer
133 *
134 ------------------------------------------------------------------------------*/
135 func int htmlcodegentee( str namefile, str outToFile )
136 {
137    str inBuffer, strOutFile, strLine, stemp
138    arrout outArr
139    uint lex, off, i
140    uint igt   // The current gtitem   
141    uint startPos, sMainValue, countMult = 0
142    byte bNewLine = 1, inBlock = 0, bDot = 0, bDugky = 0
143    uint countLines = 1 ;
144 
145    outArr.isize = sizeof( lexitem )
146    if !( fileexist( namefile ) )
147    {
148       print( "File not found \n" )
149       return 0 ;
150    } 
151    inBuffer.read( namefile )
152    lex = lex_init( 0, lexfgentee.ptr( ) )
153    gentee_lex( inBuffer -> buf, lex, outArr )
154    //print("------------------------ddd--\n") 
155    //
156    off = outArr.data.ptr( )
157    str stemp1
158    fornum i = 0, * outArr
159    {
160       uint li
161 
162       li as off -> lexitem
163 
164       stemp1.clear( )
165 
166       //print( "type=\( hex2stru( "", li.ltype ) ) pos = \( li.pos ) len=\( li.len ) \( hex2stru( "", li.value ) ) \n" )
167       if( li.ltype == $FG_NAME )
168       {
169          uint uKod
170          if( li.value == $KEY_INCLUDE || li.value == $KEY_FUNC || li.value == $KEY_GLOBAL
171              || li.value == $KEY_DEFINE || li.value == $KEY_IMPORT || li.value == $KEY_METHOD
172              || li.value == $KEY_OPERATOR || li.value == $KEY_TYPE || li.value == $KEY_IFDEF 
173 			    || li.value == $KEY_EXTERN)
174          {
175             startPos = * strLine
176             sMainValue = li.value
177             bNewLine = 0
178             strLine.fillspacer( startPos )
179             strLine += tags_css [ 8 ] + num2str( countLines ) + $END_TAGS_CSS + "" + tags_css [ 2 ] +stemp.substr( inBuffer, li.pos, li.len ) + $END_TAGS_CSS
180          } 
181          elif ( li.value == $KEY_ARR || li.value == $KEY_BUF || li.value == $KEY_BYTE || li.value == $KEY_DOUBLE ||
182               li.value == $KEY_FLOAT || li.value == $KEY_HASH || li.value == $KEY_INT || li.value == $KEY_LONG ||
183               li.value == $KEY_SHORT || li.value == $KEY_STR || li.value == $KEY_UBYTE || li.value == $KEY_UINT ||
184               li.value == $KEY_ULONG || li.value == $KEY_USHORT )
185          {
186             uKod = 10
187             if( bNewLine ) : strLine += tags_css [ 8 ] + num2str( countLines ) + $END_TAGS_CSS + tags_css [ uKod ] + stemp.substr( inBuffer, li.pos, li.len ) + $END_TAGS_CSS ; bNewLine = 0
188             else : strLine += tags_css [ uKod ] + stemp.substr( inBuffer, li.pos, li.len ) + $END_TAGS_CSS
189          }
190          elif ( li.value == $KEY_AS || li.value == $KEY_BREAK || li.value == $KEY_CASE || li.value == $KEY_CONTINUE ||
191               li.value == $KEY_DEFAULT || li.value == $KEY_DO || li.value == $KEY_ELIF || li.value == $KEY_ELSE ||
192               li.value == $KEY_FOR || li.value == $KEY_FOREACH || li.value == $KEY_GOTO || li.value == $KEY_IF ||
193               li.value == $KEY_LABEL || li.value == $KEY_OF || li.value == $KEY_RETURN  || li.value == $KEY_SWITCH ||
194 			     li.value == $KEY_SUBFUNC || li.value == $KEY_WHILE || li.value == $KEY_FORNUM)
195          {
196             uKod = 3
197             if( bNewLine ) : strLine += tags_css [ 8 ] + num2str( countLines ) + $END_TAGS_CSS + tags_css [ uKod ] + stemp.substr( inBuffer, li.pos, li.len ) + $END_TAGS_CSS ; bNewLine = 0
198             else : strLine += tags_css [ uKod ] + "<B>"+stemp.substr( inBuffer, li.pos, li.len ) + "</B>"+$END_TAGS_CSS
199          }
200          else
201          {
202             if( bNewLine ) : strLine += tags_css [ 8 ] + num2str( countLines ) + $END_TAGS_CSS + stemp.substr( inBuffer, li.pos, li.len ); bNewLine = 0
203             else : strLine += stemp.substr( inBuffer, li.pos, li.len )
204          } 
205       } 
206       elif( li.ltype == $FG_STRING || li.ltype == $FG_MACROSTR )
207       {
208          if( bNewLine ) : strLine += tags_css [ 8 ] + num2str( countLines ) + $END_TAGS_CSS + tags_css [ 4 ] + detag( stemp.substr( inBuffer, li.pos, li.len ) ) + $END_TAGS_CSS ; bNewLine = 0
209          else : strLine += tags_css [ 4 ] + detag( stemp.substr( inBuffer, li.pos, li.len ) ) + $END_TAGS_CSS
210       }
211       elif( li.ltype == $FG_BINARY)
212       {
213          if( bNewLine ) : strLine += tags_css [ 8 ] + num2str( countLines ) + $END_TAGS_CSS + tags_css [ 7 ] + stemp.substr( inBuffer, li.pos, li.len )  + $END_TAGS_CSS ; bNewLine = 0
214          else : strLine += tags_css [ 7 ] + stemp.substr( inBuffer, li.pos, li.len ) + $END_TAGS_CSS
215       }
216       elif( li.ltype == $FG_COMMENT )
217       {
218          //strLine += stemp.substr( inBuffer, li.pos, li.len )
219          str commentBuf = stemp.substr( inBuffer, li.pos, li.len )
220          arr commentArr of str ;
221          commentBuf.lines( commentArr, 0 )
222          //uint cur
223          foreach cur, commentArr
224          {
225             strLine += tags_css [ 8 ] + num2str( countLines ++ ) + $END_TAGS_CSS + tags_css [ 1 ] + cur + $END_TAGS_CSS
226          } 
227          strLine += "\n"
228          //if (bNewLine) : bNewLine=0
229       } 
230       elif( li.ltype == $FG_LINECOMMENT )
231       {
232          if( bNewLine )
233          {
234             strLine += tags_css [ 8 ] + num2str( countLines ) + $END_TAGS_CSS + tags_css [ 1 ] + stemp.substr( inBuffer, li.pos, li.len ) + $END_TAGS_CSS
235             bNewLine = 0
236          } 
237          else : strLine += tags_css [ 1 ] + stemp.substr( inBuffer, li.pos, li.len ) + $END_TAGS_CSS
238       } 
239       elif( li.ltype == $FG_SPACE || li.ltype == $FG_TAB )
240       {
241          //off += sizeof( lexitem )
242          if( bNewLine )
243          {
244             strLine += tags_css [ 8 ] + num2str( countLines ) + $END_TAGS_CSS + "" + stemp.substr( inBuffer, li.pos, li.len )
245             bNewLine = 0
246          } 
247          else : strLine += stemp.substr( inBuffer, li.pos, li.len )
248          //continue
249       } 
250       elif( li.ltype == $FG_NUMBER || li.ltype == $FG_MACRO )
251       {
252          if( bNewLine )
253          {
254             bNewLine = 0
255             strLine += tags_css [ 8 ] + num2str( countLines ) + $END_TAGS_CSS + tags_css [ 9 ] + stemp.substr( inBuffer, li.pos, li.len ) + $END_TAGS_CSS
256          } 
257          else : strLine += tags_css [ 9 ] + stemp.substr( inBuffer, li.pos, li.len ) + $END_TAGS_CSS
258       } 
259       elif( li.ltype == $FG_OPERCHAR )
260       {
261          if( bNewLine )
262          {
263             strLine += tags_css [ 8 ] + num2str( countLines ) + $END_TAGS_CSS + tags_css [ 6 ] + stemp.substr( inBuffer, li.pos, li.len ) + $END_TAGS_CSS
264             bNewLine = 0
265          } 
266          else : strLine += tags_css [ 5 ] + stemp.substr( inBuffer, li.pos, li.len ) + $END_TAGS_CSS
267       } 
268       elif( li.ltype == $FG_UNKNOWN )
269       {
270          if( bNewLine ) : strLine += tags_css [ 8 ] + num2str( countLines ) + $END_TAGS_CSS + stemp.substr( inBuffer, li.pos, li.len );bNewLine=0
271          else : strLine += stemp.substr( inBuffer, li.pos, li.len )
272       } 
273       elif( li.ltype == $FG_SYSCHAR )
274       {
275          str cTmp = ""
276          if( li.value == 0x29 ) : cTmp = ""
277          if( bNewLine ) : strLine += tags_css [ 8 ] + num2str( countLines ) + $END_TAGS_CSS + tags_css [ 5 ] + stemp.substr( inBuffer, li.pos, li.len ) + $END_TAGS_CSS ; bNewLine = 0
278          else : strLine += cTmp + tags_css [ 5 ] + stemp.substr( inBuffer, li.pos, li.len ) + $END_TAGS_CSS
279       } 
280       elif( li.ltype == $FG_LINE )
281       {
282          //strLine += stemp.substr( inBuffer, li.pos, li.len )
283          if( bNewLine ) : strLine += tags_css [ 8 ] + num2str( countLines ) + $END_TAGS_CSS + "" + stemp.substr( inBuffer, li.pos, li.len )
284          else : strLine += stemp.substr( inBuffer, li.pos, li.len )
285 
286          strOutFile += strLine
287          //print(strLine+"----111111 \n")
288          bNewLine = 1
289          countLines ++ ;
290          strLine.clear( )
291       } 
292       stemp.clear( )
293       off += sizeof( lexitem )
294    } 
295    outToFile = strOutFile
296    lex_delete( lex )
297    return 1
298 } 
299 
300 
301 func uint process_file( str namefile )
302 {
303    uint loadFile, writeFile
304    str strtoFile, outData, snewfile
305 
306    strtoFile += $HEADER_CSS
307    if( ! htmlcodegentee( namefile, outData ) ) : return 0 ;
308    strtoFile += outData + $FOOTER
309    snewfile.fsetext( namefile, "html" )
310    if !( writeFile = open( snewfile, $OP_CREATE ) ) : return 0
311    strtoFile.write( writeFile )
312    close( writeFile )
313    return 1
314 } 
Edit