fb-doc  0.4.0
FreeBASIC documentation tool
fbdoc_doxyfile.bas
Go to the documentation of this file.
1 
12 
13 #INCLUDE ONCE "fbdoc_doxyfile.bi"
14 
15 
16 #DEFINE PULL_TAG(_N_) IF LEN(d->Tags(_N_)) THEN Tags(_N_) = MKI(aa) & d->Tag(_N_)
17 
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
19 
20 
34 CONSTRUCTOR DoxyUDT(BYREF Fnam AS STRING)
35  VAR fnr = FREEFILE
36  IF OPEN(Fnam FOR INPUT AS fnr) THEN Errr = "error (couldn't open)" : EXIT CONSTRUCTOR
37 
38  Length = LOF(fnr)
39  Buffer = ALLOCATE(Length + 1)
40  IF 0 = Buffer THEN Errr = "error (out of memory)" : CLOSE #fnr : Length = 0 : EXIT CONSTRUCTOR
41 
42  VAR bytes_red = 0
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
46  END IF
47 
48  CLOSE #fnr
49  Buffer[bytes_red] = 0
50  Doxy = CAST(ZSTRING PTR, Buffer)
51 
52  VAR aa = INSTR(*Doxy, "@INCLUDE"), a = aa, t = ""
53  WHILE a
54  a += 9
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)
63  PULL_TAG(INPUT_TAG)
64  PULL_TAG(RECURSIVE)
65  PULL_TAG(OUTPUT_DIRECTORY)
66  PULL_TAG(HTML_OUTPUT)
67  PULL_TAG(HTML_FILE_EXTENSION)
68  PULL_TAG(CREATE_SUBDIRS)
69  PULL_TAG(LATEX_OUTPUT)
70  PULL_TAG(XML_OUTPUT)
71  DELETE d
72  a = INSTR(e + 1, *Doxy, "@INCLUDE")
73  WEND
74 
75  GET_TAG(GENERATE_HTML)
76  GET_TAG(SOURCE_BROWSER)
77  GET_TAG(GENERATE_LATEX)
78  GET_TAG(LATEX_SOURCE_CODE)
79  GET_TAG(GENERATE_XML)
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
82  GET_TAG(RECURSIVE)
83  GET_TAG(OUTPUT_DIRECTORY)
84  GET_TAG(HTML_OUTPUT)
85  GET_TAG(HTML_FILE_EXTENSION)
86  GET_TAG(CREATE_SUBDIRS)
87  GET_TAG(LATEX_OUTPUT)
88  GET_TAG(XML_OUTPUT)
89 END CONSTRUCTOR
90 
91 
96 DESTRUCTOR DoxyUDT()
97  IF Buffer THEN DEALLOCATE(Buffer)
98 END DESTRUCTOR
99 
100 
101 
111 PROPERTY DoxyUDT.Tag(BYVAL I AS INTEGER) AS STRING
112  RETURN MID(Tags(I), LEN(INTEGER) + 1)
113 END PROPERTY
114 
115 
116 
132 FUNCTION DoxyUDT.Search(BYREF Su AS STRING, BYREF Po AS INTEGER) AS STRING
133  VAR i = Length - 1 _
134  , l = 0 _
135  , p = 0 _
136  , lsu = LEN(Su)
137  Po = 0
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
147  END SELECT
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
150  NEXT
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\\")
154 END FUNCTION
155 
156