19 #DEFINE GET_TAG(_N_) t =
Search(#_N_, a) :
IF LEN(t)
ANDALSO a >
CVI(
LEFT(Tags(_N_),
LEN(
INTEGER)))
THEN Tags(_N_) =
MKI(a) & t
35 CONSTRUCTOR DoxyUDT(
BYREF Fnam
AS STRING)
36 MSG_LINE(
"Doxyfile " & Fnam)
38 IF OPEN(Fnam
FOR INPUT AS fnr)
THEN Errr =
"error (couldn't open)" :
EXIT CONSTRUCTOR
41 Buffer =
ALLOCATE(Length + 1)
42 IF 0 = Buffer
THEN Errr =
"error (out of memory)" :
CLOSE #fnr : Length = 0 :
EXIT CONSTRUCTOR
45 GET #fnr, 1, *Buffer, Length, bytes_red
46 IF Length <> bytes_red
THEN
47 Errr =
"read error (read " & bytes_red &
" of " & Length &
" bytes)" :
CLOSE #fnr : Length = 0 :
EXIT CONSTRUCTOR
52 Doxy =
CAST(
ZSTRING PTR, Buffer)
54 VAR aa =
INSTR(*Doxy,
"@INCLUDE"), a = aa, t =
""
57 VAR e =
INSTR(a, *Doxy, !
"\n")
58 VAR d =
NEW DoxyUDT(
TRIM(
MID(*Doxy, a, e - a),
ANY !
"= \v\t\\"))
59 FOR i
AS long = 0
TO ubound(d->Tags)
60 IF LEN(d->Tags(i))
THEN Tags(i) =
MKI(a) & d->Tag(i)
63 a =
INSTR(e + 1, *Doxy,
"@INCLUDE")
66 GET_TAG(GENERATE_HTML)
67 GET_TAG(SOURCE_BROWSER)
68 GET_TAG(STRIP_CODE_COMMENTS)
69 GET_TAG(GENERATE_LATEX)
70 GET_TAG(LATEX_SOURCE_CODE)
72 GET_TAG(XML_PROGRAMLISTING)
73 t =
Search(
"INPUT", a) :
IF LEN(t)
ANDALSO a >
CVI(
LEFT(Tags(INPUT_TAG),
LEN(
INTEGER)))
THEN Tags(INPUT_TAG) =
MKI(a) & t
75 GET_TAG(OUTPUT_DIRECTORY)
77 GET_TAG(HTML_FILE_EXTENSION)
78 GET_TAG(CREATE_SUBDIRS)
89 IF Buffer
THEN DEALLOCATE(Buffer)
104 RETURN MID(Tags(I),
LEN(
INTEGER) + 1)
119 SELECT CASE UCASE(
MID(Tags(I),
LEN(
INTEGER) + 1))
120 CASE "YES",
"Y",
"TRUE" :
RETURN 1
121 END SELECT :
RETURN 0
141 FUNCTION DoxyUDT.Search(
BYREF Su
AS STRING,
BYREF Po
AS INTEGER)
AS STRING
147 FOR i = i
TO 0 STEP -1
148 SELECT CASE AS CONST Doxy[i]
149 CASE ASC(!
"\n") :
IF 0 = l
THEN Po = 0 : p = i :
CONTINUE FOR
150 CASE ASC(!
"\r"),
ASC(!
"\t"),
ASC(!
"\v"),
ASC(
" ")
151 IF 0 = l
THEN CONTINUE FOR
152 CASE ASC(
"=") : Po = i :
CONTINUE FOR
153 CASE ASC(
"A")
TO ASC(
"Z"),
ASC(
"a")
TO ASC(
"z"),
ASC(
"0")
TO ASC(
"9"),
ASC(
"_"),
ASC(
"@")
154 l +=
IIF(Po, 1, 0) :
CONTINUE FOR
155 CASE ELSE :
CONTINUE FOR
157 IF l = lsu
ANDALSO MID(*Doxy, i + 2, lsu) = Su
THEN EXIT FOR
158 l = 0 : Po = 0 :
IF Doxy[i] =
ASC(!
"\n")
THEN p = i
160 IF Po = 0
ORELSE l = 0
THEN RETURN ""
161 IF i < 0
ANDALSO (l <> lsu
ORELSE MID(*Doxy, i + 2, lsu) <> Su)
THEN RETURN ""
162 RETURN TRIM(
MID(*Doxy, Po + 2, p - Po - 1),
ANY !
" \t\v\\")