16 #DEFINE PULL_TAG(_N_)
IF LEN(d->Tags(_N_))
THEN Tags(_N_) =
MKI(aa) & d->Tag(_N_)
18 #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
34 CONSTRUCTOR DoxyUDT(
BYREF Fnam
AS STRING)
36 IF OPEN(Fnam
FOR INPUT AS fnr)
THEN Errr =
"error (couldn't open)" :
EXIT CONSTRUCTOR
39 Buffer =
ALLOCATE(Length + 1)
40 IF 0 = Buffer
THEN Errr =
"error (out of memory)" :
CLOSE #fnr : Length = 0 :
EXIT CONSTRUCTOR
43 GET #fnr, 1, *Buffer, Length, bytes_red
44 IF Length <> bytes_red
THEN
45 Errr =
"read error (read " & bytes_red &
" of " & Length &
" bytes)" :
CLOSE #fnr : Length = 0 :
EXIT CONSTRUCTOR
50 Doxy =
CAST(
ZSTRING PTR, Buffer)
52 VAR aa =
INSTR(*Doxy,
"@INCLUDE"), a = aa, t =
""
55 VAR e =
INSTR(a, *Doxy, !
"\n")
56 VAR d =
NEW DoxyUDT(
TRIM(
MID(*Doxy, a, e - a),
ANY !
"= \v\t\\"))
57 PULL_TAG(GENERATE_HTML)
58 PULL_TAG(SOURCE_BROWSER)
59 PULL_TAG(GENERATE_LATEX)
60 PULL_TAG(LATEX_SOURCE_CODE)
61 PULL_TAG(GENERATE_XML)
62 PULL_TAG(XML_PROGRAMLISTING)
65 PULL_TAG(OUTPUT_DIRECTORY)
67 PULL_TAG(HTML_FILE_EXTENSION)
68 PULL_TAG(CREATE_SUBDIRS)
69 PULL_TAG(LATEX_OUTPUT)
72 a =
INSTR(e + 1, *Doxy,
"@INCLUDE")
75 GET_TAG(GENERATE_HTML)
76 GET_TAG(SOURCE_BROWSER)
77 GET_TAG(GENERATE_LATEX)
78 GET_TAG(LATEX_SOURCE_CODE)
80 GET_TAG(XML_PROGRAMLISTING)
81 t =
Search(
"INPUT", a) :
IF LEN(t)
ANDALSO a >
CVI(
LEFT(Tags(INPUT_TAG),
LEN(
INTEGER)))
THEN Tags(INPUT_TAG) =
MKI(a) & t
83 GET_TAG(OUTPUT_DIRECTORY)
85 GET_TAG(HTML_FILE_EXTENSION)
86 GET_TAG(CREATE_SUBDIRS)
97 IF Buffer
THEN DEALLOCATE(Buffer)
112 RETURN MID(Tags(I),
LEN(
INTEGER) + 1)
132 FUNCTION DoxyUDT.Search(
BYREF Su
AS STRING,
BYREF Po
AS INTEGER)
AS STRING
138 FOR i = i
TO 0 STEP -1
139 SELECT CASE AS CONST Doxy[i]
140 CASE ASC(!
"\n") :
IF 0 = l
THEN Po = 0 : p = i :
CONTINUE FOR
141 CASE ASC(!
"\r"),
ASC(!
"\t"),
ASC(!
"\v"),
ASC(
" ")
142 IF 0 = l
THEN CONTINUE FOR
143 CASE ASC(
"=") : Po = i :
CONTINUE FOR
144 CASE ASC(
"A")
TO ASC(
"Z"),
ASC(
"a")
TO ASC(
"z"),
ASC(
"0")
TO ASC(
"9"),
ASC(
"_"),
ASC(
"@")
145 l +=
IIF(Po, 1, 0) :
CONTINUE FOR
146 CASE ELSE :
CONTINUE FOR
148 IF l = lsu
ANDALSO MID(*Doxy, i + 2, lsu) = Su
THEN EXIT FOR
149 l = 0 : Po = 0 :
IF Doxy[i] =
ASC(!
"\n")
THEN p = i
151 IF Po = 0
ORELSE l = 0
THEN RETURN ""
152 IF i < 0
ANDALSO (l <> lsu
ORELSE MID(*Doxy, i + 2, lsu) <> Su)
THEN RETURN ""
153 RETURN TRIM(
MID(*Doxy, Po + 2, p - Po - 1),
ANY !
" \t\v\\")