Files
harbour-core/harbour/examples/hbdoc2/tmplates.prg
Viktor Szakats 45a114e471 2010-06-03 18:17 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* tests/testsha1.prg
  * tests/longdev.prg
  * tests/clsccast.prg
  * tests/cmphello.prg
  * tests/clsicast.prg
  * tests/testop.prg
  * tests/clsscast.prg
  * tests/objarr.prg
  * tests/rddtest/rddmktst.prg
  * tests/rddtest/adscl52.prg
  * tests/rddtest/adscl53.prg
  * tests/rddtest/ntxcl52.prg
  * tests/rddtest/ntxcl53.prg
  * tests/rddtest/cdxcl52.prg
  * tests/rddtest/rddtst.prg
  * tests/rddtest/cdxcl53.prg
  * tests/transtst.prg
  * tests/output.prg
  * tests/ac_test2.prg
  * tests/clsscope.prg
  * tests/dosshell.prg
  * tests/sbartest.prg
  * tests/speedold.prg
  * tests/sdf_test.prg
  * tests/wcecon.prg
  * tests/debugtst.prg
  * tests/testdyn.c
  * tests/multiarg.prg
  * tests/fornext.prg
  * tests/hbinline.prg
  * tests/foreach2.prg
  * tests/objasign.prg
  * tests/scroll.prg
  * tests/inherit.prg
  * tests/rto_get.prg
  * tests/boxtst2.prg
  * tests/inkeytst.prg
  * tests/overload.prg
  * tests/cpinfo.prg
  * tests/gtwin.prg
  * tests/mt/mttest08.prg
  * tests/mt/mttest09.prg
  * tests/mt/mttest01.prg
  * tests/mt/mttest10.prg
  * tests/mt/mttest02.prg
  * tests/mt/mttest11.prg
  * tests/mt/mttest03.prg
  * tests/mt/mttest12.prg
  * tests/mt/mttest04.prg
  * tests/mt/mttest05.prg
  * tests/mt/mttest06.prg
  * tests/mt/mttest07.prg
  * tests/speedtst.prg
  * tests/testsha2.prg
  * tests/hsxtest.prg
  * tests/arrayidx.prg
  * tests/clsnv.prg
  * tests/rto_tb.prg
  * tests/gtchars.prg
  * tests/disptest.prg
  * tests/funcarr.prg
  * tests/testhtml.prg
  * tests/readhrb.prg
  * tests/tstcolor.prg
  * tests/gtxfnt.prg
  * tests/devtest.prg
  * tests/aliaslck.prg
  * tests/stripem.prg
  * tests/dynobj.prg
  * tests/tb1.prg
  * tests/round.prg
  * tests/longstr.prg
  * tests/testdyn.prg
  * tests/testdyn1.prg
  * tests/delimtst.prg
  * tests/tstdspac.prg
  * tests/version.prg
  * tests/setkeys.prg
  * tests/gtcolors.prg
  * tests/destruct.prg
  * tests/seconds.prg
  * tests/gtkeys.prg
  * tests/usrrdd/exarr.prg
  * doc/en/diskspac.txt
  * doc/en/string.txt
  * doc/en/rdd.txt
  * doc/en/hashes.txt
  * doc/en/hb_apigt.txt
  * doc/en/rddord.txt
  * doc/en/hb_api.txt
  * doc/en/hb_date.txt
  * doc/en/math.txt
  * doc/en/hb_vm.txt
  * doc/en/treport.txt
  * doc/en/terminal.txt
  * doc/en/hb_apiln.txt
  * doc/en/dir.txt
  * doc/en/command.txt
  * doc/en/rddmisc.txt
  * doc/en/errsys.txt
  * doc/en/nation.txt
  * doc/en/var.txt
  * doc/en/dbstrux.txt
  * doc/en/datetime.txt
  * doc/en/memo.txt
  * doc/en/tgetlist.txt
  * doc/en/tlabel.txt
  * doc/en/1stread.txt
  * doc/en/hb_set.txt
  * doc/en/hb_compa.txt
  * doc/en/hb_apier.txt
  * doc/en/hbinet.txt
  * doc/en/hb_macro.txt
  * doc/en/array.txt
  * doc/en/hb_apiit.txt
  * doc/en/rdddb.txt
  * doc/en/dbsdf.txt
  * doc/en/hvm.txt
  * doc/en/input.txt
  * doc/en/dbdelim.txt
  * doc/en/browse.txt
  * doc/en/menu.txt
  * doc/en/hb_apird.txt
  * doc/en/hb_apifs.txt
  * doc/en/file.txt
  * doc/en/lang.txt
  * doc/en/objfunc.txt
  * doc/en/eval.txt
  * doc/en/binnum.txt
  * doc/en/tclass.txt
  * doc/en/misc.txt
  * doc/en/set.txt
  * doc/en/readme.txt
  * doc/man/harbour.1
  * doc/man/hbmk2.1
  * doc/man/hbpp.1
  * doc/man/hbtest.1
  * doc/man/hbrun.1
  * examples/hbextern/hbextern.prg
  * examples/pp/pp.c
  * examples/pp/hbpragma.c
  * examples/pp/hbppcore.c
  * examples/pp/hbppcomp.c
  * examples/pp/hbpptbl.c
  * examples/pp/hbppdef.h
  * examples/superlib/hbsuper.prg
  * examples/hbsqlit2/hbsqlit2.ch
  * examples/misc/mankala.prg
  * examples/misc/guess.prg
  * examples/rddado/adordd.prg
  * examples/rddado/adordd.ch
  * examples/hbapollo/apollo.ch
  * examples/hbapollo/apollo.c
  * examples/hbapollo/apollo1.prg
  * examples/hbdoc2/gentpl.prg
  * examples/hbdoc2/gentxt.prg
  * examples/hbdoc2/tmplates.prg
  * examples/hbdoc2/genxml.prg
  * examples/hbdoc2/genhtml.prg
  * examples/hbdoc2/hbdoc2.prg
  * examples/hbdoc2/hbdoc2.ch
  * examples/guestbk/guestbk.prg
  * examples/httpsrv/uhttpd.ini
  * examples/httpsrv/uhttpd.prg
  * examples/httpsrv/cookie.prg
  * examples/httpsrv/cgifunc.prg
  * examples/httpsrv/session.prg
  * examples/terminal/trm_cli.prg
  * examples/terminal/terminal.prg
  * examples/terminal/trm_srv.prg
  * examples/terminal/trm_app.prg
  * examples/hbbtree/hb_btree.h
  * examples/hbbtree/hb_btree.ch
  * examples/hbbtree/hb_btree.c
  * examples/hbbtree/tbtree.prg
  * examples/hscript/hscript.prg
  * examples/hscript/dir.hs
  * examples/hscript/multiply.hs
  * examples/hscript/ugly.hs
  * examples/hscript/hello.hs
  * examples/gtwvw/hbole.h
  * examples/gtwvw/wvwdraw.c
  * examples/gtwvw/wvwmenu.c
  * examples/gtwvw/gtwvw.c
  * examples/gtwvw/wvwstbar.c
  * examples/gtwvw/wvwcheck.c
  * examples/gtwvw/wvwfuncs.c
  * examples/gtwvw/wvwpush.c
  * examples/gtwvw/wvwedit.c
  * examples/gtwvw/wvwtbar.c
  * examples/gtwvw/hbgtwvw.h
    * Deleted 'www.' from harbour-project.org website name.
      (www.harbour-project.org -> harbour-project.org)
2010-06-03 16:23:36 +00:00

560 lines
19 KiB
Plaintext
Raw Blame History

/*
* $Id$
*/
/*
* Harbour Project source code:
* Document generator, templates
*
* Copyright 2009 April White <april users.sourceforge.net>
* www - http://harbour-project.org
*
* Portions of this project are based on hbdoc
* Copyright 1999-2003 Luiz Rafael Culik <culikr@uol.com.br>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
#include "hbdoc2.ch"
/*
#xcommand TEXT TO VAR <var> => #pragma __stream|<var>:=%s
#xcommand TEXT INTO <v> => #pragma __text|<v>+=%s+HB_OSNewLine();<v>:=""
text into p_hsTemplates
this is line 1
this is line 2
endtext
? asc(substr(p_hsTemplates, -2))
?
*/
#include "hbclass.ch"
/* a class that will hold one entry */
CLASS Entry
EXPORTED:
CLASSDATA Fields AS ARRAY INIT { ;
{ "DOC", "Doc" }, ;
{ "TEMPLATE", "Template" }, ;
{ "NAME", "" }, ;
{ "CATEGORY", "Category" }, ;
{ "SUBCATEGORY", "Sub category" }, ;
{ "ONELINER", "" },;
{ "SYNTAX", "Syntax" },;
{ "ARGUMENTS", "Argument(s)" },;
{ "RETURNS", "Returns" },;
{ "DESCRIPTION", "Description" },;
{ "DATALINK", "Data link" },;
{ "DATANOLINK", "Data no link" },;
{ "METHODSLINK", "Methods link" },;
{ "METHODSNOLINK","Methods no link" },;
{ "EXAMPLES", "Example(s)" },;
{ "TESTS", "Test(s)" },;
{ "STATUS", "Status" },; /* p_aStatus is the constraint list */
{ "COMPLIANCE", "Compliance" },; /* p_aCompliance is the constraint list */
{ "PLATFORMS", "Platform(s)" },; /* p_aPlatforms is the constraint list */
{ "FILES", "File(s)" },;
{ "SEEALSO", "See also" }, ;
{ "END", "End" } ;
}
#define S TPL_START
#define E TPL_END
#define T TPL_TEMPLATE
#define R TPL_REQUIRED
#define O TPL_OPTIONAL
#define P TPL_PREFORMATTED
#define U TPL_OUTPUT
#define x 0
// this is best viewed with a fixed-width font
// the columns of this array correspond to the elements of Fields
CLASSDATA Templates AS ARRAY INIT { ;
{ "Template" , { S, T, x+U, x, O, x+U, x+U, x+U, x+U, x+U, x+U, x+U, x+U, x+U, x +U, x +U, x+U, x+U, x+U, x+U, x+U, E } }, ;
{ "Document" , { S, T, R+U, R, O+U, O+U, x+U, x+U, x+U, R+U, x+U, x+U, x+U, x+U, x +U, x +U, x+U, x+U, O+U, O+U, O+U, E } }, ;
{ "Function" , { S, T, R+U, R, R, O+U, O+U, O+U, O+U, O+U, x+U, x+U, x+U, x+U, P+O+U, P+O+U, O+U, O+U, O+U, O+U, O+U, E } }, ;
{ "C Function" , { S, T, R+U, R, R, O+U, O+U, O+U, O+U, O+U, x+U, x+U, x+U, x+U, P+O+U, P+O+U, O+U, O+U, O+U, O+U, O+U, E } }, ;
{ "Procedure" , { S, T, R+U, R, R, O+U, O+U, O+U, x, O+U, x+U, x+U, x+U, x+U, P+O+U, P+O+U, O+U, O+U, O+U, O+U, O+U, E } }, ;
{ "Command" , { S, T, R+U, R, R, O+U, R+U, R+U, x+U, R+U, x+U, x+U, x+U, x+U, P+O+U, P+O+U, O+U, O+U, O+U, O+U, O+U, E } }, ;
{ "Class" , { S, T, R+U, R, R, O+U, R+U, R+U, R+U, R+U, O+U, O+U, O+U, O+U, P+O+U, P+O+U, O+U, O+U, O+U, O+U, O+U, E } }, ;
{ "Class method" , { S, T, R+U, R, R, O+U, R+U, R+U, R+U, R+U, x+U, x+U, x+U, x+U, P+O+U, x +U, x+U, x+U, x+U, x+U, O+U, E } }, ;
{ "Class data" , { S, T, R+U, R, R, O+U, R+U, x+U, x+U, R+U, x+U, x+U, x+U, x+U, P+O+U, x +U, x+U, x+U, x+U, x+U, O+U, E } }, ;
{ "Run time error", { S, T, R+U, R, x, O+U, x+U, x+U, x+U, R+U, x+U, x+U, x+U, x+U, P+O+U, x +U, x+U, O+U, x+U, x+U, O+U, E } }, ;
}
#undef S
#undef E
#undef T
#undef R
#undef O
#undef P
#undef U
#undef x
METHOD New( cType ) CONSTRUCTOR
METHOD IsField( c, nType )
METHOD IsTemplate( cType )
METHOD SetTemplate( cTemplate )
METHOD IsConstraint( cSectionName, cSection )
METHOD IsComplete( cIncompleteFielsList )
METHOD IsPreformatted( cField )
METHOD IsRequired( cField )
METHOD IsOptional( cField )
METHOD IsOutput( cField )
METHOD FieldName( cField )
METHOD CategoryIndex( cCategory )
METHOD SubcategoryIndex( cCategory, cSubcategory )
DATA Group AS ARRAY
DATA filename AS STRING
DATA type_ AS STRING
DATA sourcefile_ AS STRING
DATA sourcefileversion_ AS STRING
DATA uid_ AS STRING
CLASSDATA uid__ AS INTEGER INIT 0
ENDCLASS
METHOD New( cType ) CLASS Entry
::uid_ = HB_NTOS( ++::uid__ )
IF .NOT. __ObjHasData( self, self:Fields[ 1 ][ 1 ] )
AEval( self:Fields, {|a| __objAddData( self, a[ 1 ] ) } )
ENDIF
IF cType != NIL
self:Group := self:Templates[ HB_AScan( self:Templates, {|a| UPPER( a[ 1 ] ) == UPPER( cType ) } ) ][ 2 ]
ENDIF
RETURN self
METHOD IsField( c, nType ) CLASS Entry
LOCAL idx
LOCAL lResult
IF ( lResult := ( idx := HB_AScan( self:Fields, {|a| UPPER( a[ 1 ] ) == UPPER( c ) } ) ) > 0 )
IF self:Group[ idx ] == 0
lResult := .F.
ELSEIF nType != NIL .AND. HB_BitAnd( self:Group[ idx ], nType ) != nType
lResult := .F.
ELSE
ENDIF
ENDIF
RETURN lResult
METHOD IsTemplate( cType ) CLASS Entry
RETURN HB_AScan( self:Templates, {|a| UPPER( a[ 1 ] ) == UPPER( cType ) } ) > 0
METHOD SetTemplate( cTemplate ) CLASS Entry
LOCAL aData := Array( Len( self:Fields ) )
LOCAL idx
self:Group := self:Templates[ HB_AScan( self:Templates, {|a| UPPER( a[ 1 ] ) == UPPER( cTemplate ) } ) ][ 2 ]
FOR idx := 1 TO Len( aData )
IF self:Fields[ idx ][ 1 ] == "TEMPLATE"
aData[ idx ] := { self:Fields[ idx ][ 1 ], cTemplate }
ELSE
aData[ idx ] := { self:Fields[ idx ][ 1 ], IIf( self:Group[ idx ] == TPL_REQUIRED, NIL, "" ) }
ENDIF
NEXT
__ObjSetValueList( self, aData )
RETURN self
METHOD IsConstraint( cSectionName, cSection ) CLASS Entry
LOCAL lResult
LOCAL idx := HB_AScan( self:Fields, {|a| a[ 1 ] == cSectionName } )
IF HB_BitAnd( self:Group[ idx ], HB_BitAnd( TPL_REQUIRED, TPL_OPTIONAL ) ) == 0
lResult := .T.
ELSEIF Type( "p_a" + cSectionName ) == "A"
lResult := HB_AScan( &( "p_a" + cSectionName ), cSection ) .OR. ;
HB_AScan( &( "p_a" + cSectionName ), Parse( ( cSection ), "," ) )
ELSE
lResult := .T.
ENDIF
RETURN lResult
METHOD IsComplete( cIncompleteFielsList ) CLASS Entry
LOCAL lResult := .T.
LOCAL idx
cIncompleteFielsList := ""
FOR idx := 1 TO Len( self:Fields )
IF HB_BitAnd( self:Group[ idx ], TPL_REQUIRED ) != 0 .AND. Empty( self:&( self:Fields[ idx ][ 1 ] ) )
cIncompleteFielsList += "," + self:Fields[ idx ][ 1 ]
lResult := .F.
ENDIF
NEXT
cIncompleteFielsList := SUBSTR( cIncompleteFielsList, 2 )
RETURN lResult
METHOD IsPreformatted( cField ) CLASS Entry
RETURN HB_BitAnd( self:Group[ HB_AScan( self:Fields, {|a| a[ 1 ] == cField } ) ], TPL_PREFORMATTED ) != 0
METHOD IsRequired( cField ) CLASS Entry
RETURN HB_BitAnd( self:Group[ HB_AScan( self:Fields, {|a| a[ 1 ] == cField } ) ], TPL_REQUIRED ) != 0
METHOD IsOptional( cField ) CLASS Entry
RETURN HB_BitAnd( self:Group[ HB_AScan( self:Fields, {|a| a[ 1 ] == cField } ) ], TPL_OPTIONAL ) != 0
METHOD IsOutput( cField ) CLASS Entry
RETURN HB_BitAnd( self:Group[ HB_AScan( self:Fields, {|a| a[ 1 ] == cField } ) ], TPL_OUTPUT ) != 0
METHOD FieldName( cField ) CLASS Entry
RETURN self:Fields[ HB_AScan( self:Fields, {|a| a[ 1 ] == cField } ) ][ 2 ]
METHOD CategoryIndex( cCategory ) CLASS Entry
RETURN HB_AScan( p_aCategories, {|a| a[ 1 ] == cCategory } )
METHOD SubcategoryIndex( cCategory, cSubcategory ) CLASS Entry
RETURN HB_AScan( p_aCategories[ ::CategoryIndex( cCategory ) ][ 2 ], cSubcategory, , , .T. )
//~ RETURN HB_AScan( p_aCategories[ ::CategoryIndex( cCategory ) ][ 2 ], {|c| c == cSubcategory } )
INIT PROCEDURE Templates()
LOCAL idx
LOCAL aSubCategories := { ;
"Application", ;
"Array", ;
"Classes", ;
"Conversion", ;
"Database", ;
"Date/Time", ;
"Environment", ;
"Error", ;
"Events", ;
"Execute and execution", ; /* replace w/ "Environment"? */
"Extend", ;
"FileSys", ;
"Fixed memory", ;
"Garbage collector", ;
"Hash table", ;
"Idle states", ;
"INET", ;
"Internal", ;
"Item", ;
"Language and Nation", ;
"Legacy", ;
"Macro", ;
"Math", ;
"Objects", ;
"Printer", ;
"RDD", ;
"Strings", ;
"Terminal", ;
"Undocumented", ;
"User interface", ;
"Variable management", ;
"Virtual machine", ;
}
PUBLIC p_aCategories := { ;
{ "Document", { "License", "Compiler", "" } }, ;
{ "API", AClone( aSubCategories ) }, ;
{ "C level API", AClone( aSubCategories ) }, ;
{ "C level API compatability", AClone( aSubCategories ) }, ;
{ "Class", { ;
"", ;
"Access", ;
"Assign", ;
"Constructor", ;
"Data", ;
"Definition", ;
"Destructor", ;
"Method", ;
"Var", ;
} }, ;
{ "Command", AClone( aSubCategories ) }, ;
/* { "Compile time errors", { {} } }, */ ;
{ "Run time errors", { "" } }, ;
}
FOR idx := 1 TO Len( p_aCategories )
IF .NOT. Empty( p_aCategories[ idx ] )
AAdd( p_aCategories[ idx ], Array( Len( p_aCategories[ idx ][ 2 ] ) ) ) // holder array of sub-category entries
AAdd( p_aCategories[ idx ], "" ) // holder for sub-category file name
ENDIF
NEXT
PUBLIC p_aCompliance := { ;
{ "", "" }, ;
{ "C", "This is CA-Cl*pper v5.2 compliant" }, ;
{ "C(array)", "This is CA-Cl*pper v5.2 compliant except that arrays in Harbour can have an unlimited number of elements" }, ;
{ "C(menu)", "This is CA-Cl*pper v5.2 compliant except that menus (internally arrays) in Harbour can have an unlimited number of elements" }, ;
{ "C(arrayblock)", "Codeblock calling frequency and order differs from CA-Cl*pper, since Harbour uses a different (faster) sorting algorithm (quicksort)" }, ;
{ "C52S", "? verbage: This is an CA-Cl*pper v5.2 compliant and is only visible if source was compiled with the HB_C52_STRICT flag" }, ;
{ "C52U", "This is an undocumented CA-Cl*pper v5.2 function and is only visible if source was compiled with the HB_C52_UNDOC flag" }, ;
{ "C53", "This is CA-Cl*pper v5.3 compliant and is only visible if source was compiled with the HB_COMPAT_C53 flag" }, ;
{ "H", "This is Harbour specific" }, ;
{ "NA", "Not applicable" } ;
}
PUBLIC p_aPlatforms := { ;
{ "", "" }, ;
{ "All", "This is available on all platforms" }, ;
{ "All(64K)", "This is available on all platforms though some platforms have a string length limit of 64KB" }, ;
{ "All(GT)", "This part of the GT API and supported only by some platforms." }, ;
{ "All(LFN)", "This is available on all platforms." + HB_OSNewLine() + ;
"If long file names are available Harbour will use/display the first 15 characters " +;
"else Harbour will use/display a 8.3 file name consistent with CA-Cl*pper" }, ;
{ "Linux(GT)", "Under Linux the number of columns avaliable depends of the current Terminal screen size." }, ;
{ "OS2(GT)", "Under OS/2 the number of columns avaliable depends of the current Terminal screen size." }, ;
{ "Win(GT)", "Under Windows, the return value of MAXROW() function is only affected if called after an SETMODE() function" }, ;
{ "BSD", "This is available on the BSD platform" }, ;
{ "DARWIN", "This is available on the DARWIN platform" }, ;
{ "DOS", "This is available on the MS-DOS platform" }, ;
{ "HPUX", "This is available on the HPUX platform" }, ;
{ "LINUX", "This is available on the LINUX platform" }, ;
{ "OS2", "This is available on the OS/2 platform" }, ;
{ "SUNOS", "This is available on the SUNOS platform" }, ;
{ "Unix", "This is available on the Unix platform(s)" }, ;
{ "Win", "This is available on the MS-Windows platform(s)" }, ;
{ "Win32", "This is available on the MS-Windows (32-bit) platform(s)" }, ;
{ "Win64", "This is available on the MS-Windows (64-bit) platform(s)" }, ;
{ "WinCE", "This is available on the MS-Windows-CE platform" } ;
}
PUBLIC p_aStatus := { ;
{ "", "" }, ;
{ "R", "Ready" }, ;
{ "S", "Started" }, ;
{ "N", "Not started" } ;
}
PUBLIC p_aConversionList := { ;
38, "amp", ;
34, "quot", ;
60, "lt", ;
62, "gt", ;
129, "#129", ;
130, "#130", ;
131, "#131", ;
132, "#132", ;
133, "#133", ;
134, "#134", ;
135, "#135", ;
136, "#136", ;
137, "#137", ;
138, "#138", ;
139, "#139", ;
140, "#140", ;
141, "#141", ;
142, "#142", ;
143, "#143", ;
144, "#144", ;
145, "#145", ;
146, "#146", ;
147, "#147", ;
148, "#148", ;
149, "#149", ;
150, "#150", ;
151, "#151", ;
152, "#152", ;
153, "#153", ;
154, "#154", ;
155, "#155", ;
156, "#156", ;
157, "#157", ;
158, "#158", ;
159, "#159", ;
160, "nbsp", ;
161, "iexcl", ;
162, "#162", ;
163, "#163", ;
164, "#164", ;
165, "#165", ;
166, "#166", ;
167, "#167", ;
168, "#168", ;
169, "#169", ;
170, "ordf", ;
171, "#171", ;
172, "#172", ;
173, "#173", ;
174, "#174", ;
175, "#175", ;
176, "#176", ;
177, "#177", ;
178, "#178", ;
179, "#179", ;
180, "#180", ;
181, "#181", ;
182, "#182", ;
183, "#183", ;
184, "#184", ;
185, "#185", ;
186, "ordm", ;
187, "#187", ;
188, "#188", ;
189, "#189", ;
190, "#190", ;
191, "iquest", ;
192, "Agrave", ;
193, "Aacute", ;
194, "Acirc", ;
195, "Atilde", ;
196, "Auml", ;
197, "Aring", ;
198, "AElig", ;
199, "Ccedil", ;
200, "Egrave", ;
201, "Eacute", ;
202, "Ecirc", ;
203, "Euml", ;
204, "Igrave", ;
205, "Iacute", ;
206, "Icirc", ;
207, "Iuml", ;
208, "ETH", ;
209, "Ntilde", ;
210, "Ograve", ;
211, "Oacute", ;
212, "Ocirc", ;
213, "Otilde", ;
214, "Ouml", ;
215, "<22>", ;
216, "Oslash", ;
217, "Ugrave", ;
218, "Uacute", ;
219, "Ucirc", ;
220, "Uuml", ;
221, "Yacute", ;
222, "THORN", ;
223, "szlig", ;
224, "#224", ;
225, "aacute", ;
226, "<22>", ;
227, "atilde", ;
228, "auml", ;
229, "aring", ;
230, "aelig", ;
231, "<22>", ;
232, "<22>", ;
233, "<22>", ;
234, "<22>", ;
235, "<22>", ;
236, "igrave", ;
237, "iacute", ;
238, "<22>", ;
239, "<22>", ;
240, "eth", ;
241, "ntilde", ;
242, "ograve", ;
243, "oacute", ;
244, "<22>", ;
245, "otilde", ;
246, "ouml", ;
247, "<22>", ;
248, "oslash", ;
249, "<22>", ;
250, "uacute", ;
251, "<22>", ;
252, "<22>", ;
253, "yacute", ;
254, "thorn", ;
255, "yuml;" ;
}
RETURN
PROCEDURE ShowTemplatesHelp( cTemplate )
LOCAL o := Entry():New()
LOCAL idxTemplates, nFrom := 1, nTo := Len( o:Templates )
LOCAL cDelimiter := p_hsSwitches[ "DELIMITER" ]
LOCAL idx
IF .NOT. Empty( cTemplate ) .AND. cTemplate != "Template"
IF o:IsTemplate( cTemplate )
nFrom := nTo := HB_AScan( o:Templates, {|a| UPPER( a[ 1 ] ) == UPPER( cTemplate ) } )
ELSE
ShowHelp( "Unknown template '" + cTemplate + "'" )
RETURN
ENDIF
ENDIF
FOR idxTemplates := nFrom TO nTo
IF .NOT. Empty( o:Templates[ idxTemplates ] ) .AND. ;
.NOT. Empty( o:Templates[ idxTemplates ][ 1 ] ) .AND. ;
o:Templates[ idxTemplates ][ 1 ] != "Template"
//~ IF nFrom != nTo
//~ ShowSubHelp( o:Templates[ idxTemplates ][ 1 ], 1, 0 )
//~ ENDIF
o:SetTemplate( o:Templates[ idxTemplates ][ 1 ] )
FOR idx := 1 TO Len( o:Fields )
IF o:Group[ idx ] != 0
ShowSubHelp( IIf( idx == 1, "/", " " ) + "* " + cDelimiter + o:Fields[ idx ][ 1 ] + cDelimiter, 1, 0 )
IF o:Fields[ idx ][ 1 ] == "TEMPLATE"
ShowSubHelp( " * " + o:Template, 1, 0 )
ELSEIF o:Group[ idx ] != TPL_START .AND. o:Group[ idx ] != TPL_END .AND. .T.
ShowSubHelp( " * " + IIf( o:IsRequired( o:Fields[ idx ][ 1 ] ), "<required>", "<optional>" ), 1, 0 )
ENDIF
ENDIF
NEXT
ShowSubHelp( " */", 1, 0 )
ShowSubHelp( "", 1, 0 )
ENDIF
NEXT
RETURN
PROCEDURE ShowComplianceHelp()
LOCAL idx
FOR idx := 1 TO Len( p_aCompliance )
ShowSubHelp( p_aCompliance[ idx ][ 1 ], 1, 0, idx )
ShowSubHelp( Decode( "COMPLIANCE", NIL, p_aCompliance[ idx ][ 1 ] ), 1, 6, idx )
ShowSubHelp( "", 1, 0 )
NEXT
PROCEDURE ShowPlatformsHelp
LOCAL idx
FOR idx := 1 TO Len( p_aPlatforms )
ShowSubHelp( p_aPlatforms[ idx ][ 1 ], 1, 0, idx )
ShowSubHelp( Decode( "PLATFORMS", NIL, p_aPlatforms[ idx ][ 1 ] ), 1, 6, idx )
ShowSubHelp( "", 1, 0 )
NEXT