fb-doc  0.4.0
FreeBASIC documentation tool
fbdoc_emit_doxy.bas
Go to the documentation of this file.
1 
33 
34 #INCLUDE ONCE "fbdoc_options.bi"
35 #INCLUDE ONCE "fbdoc_version.bi"
36 
37 
38 CONST _
39  DOXY_START = NL & "/'* ", _
40  DOXY_END = NL _
41  & NL & TOFIX _
42  & NL _
43  & NL & "\since " & TOFIX _
44  & COMM_END
45 
46 
47 
56 SUB doxy_entryListPara CDECL(BYVAL P AS Parser PTR)
57  WITH *P '&Parser* P;
58  IF .NamTok THEN Code(NL & "\param " & .SubStr(.NamTok) & " " & TOFIX)
59  END WITH
60 END SUB
61 
62 
63 
72 SUB doxy_func_ CDECL(BYVAL P AS Parser PTR)
73  WITH *P '&Parser* P;
74  VAR a = .StaTok[1], b = .ParTok, t = .TypTok
75  emit_source(P, .StaTok[1])
76  Code( DOXY_START & "\fn ")
77  OPT->CreateFunction(P)
78  Code(NL & "\brief " & TOFIX)
79  IF b THEN .ParTok = b : .parseListPara(@doxy_entryListPara())
80  IF t THEN Code(NL & "\returns " & TOFIX)
81  Code(DOXY_END)
82  .SrcBgn = a
83  END WITH
84 END SUB
85 
86 
87 
95 SUB doxy_decl_ CDECL(BYVAL P AS Parser PTR)
96  WITH *P '&Parser* P;
97  IF 0 = .ListCount THEN
98  emit_source(P, .StaTok[1])
99  Code(DOXY_START)
100 
101  IF .FunTok THEN Code("\fn ") _
102  ELSE Code("\var ")
103 
104  SELECT CASE AS CONST *.StaTok
105  CASE .TOK_CONS, .TOK_STAT, .TOK_COMM, .TOK_EXRN
106  IF OPT->Types = OPT->C_STYLE THEN Code(LCASE(.SubStr(.StaTok)) & " ") _
107  ELSE Code( .SubStr(.StaTok) & "_")
108  CASE .TOK_TYPE : Code("typedef ")
109  IF 0 = .FunTok ANDALSO .TypTok > .NamTok THEN Code("struct ")
110  END SELECT
111  END IF
112 
113  IF .FunTok THEN
114  VAR a = .SrcBgn, b = .ParTok, t = .TypTok
115  OPT->CreateFunction(P)
116  Code(NL & "\brief " & TOFIX)
117  IF b THEN .ParTok = b : .parseListPara(@doxy_entryListPara())
118  IF t THEN Code(NL & "\returns: " & TOFIX)
119  Code(DOXY_END)
120  .SrcBgn = a
121  Code("'' " & PROJ_NAME & "-hint: consider to document the functions body instead." & NL)
122  ELSEIF .TypTok THEN
123  OPT->CreateVariable(P)
124  Code(NL & "\brief " & TOFIX & DOXY_END)
125  ELSE
126  IF 0 = .ListCount THEN Code("VAR ")
127  Code(.SubStr(.NamTok))
128  IF .IniTok THEN CreateIni(P)
129  Code(NL & "\brief " & TOFIX _
130  & DOXY_END)
131  END IF
132  END WITH
133 END SUB
134 
135 
136 
144 SUB doxy_defi_ CDECL(BYVAL P AS Parser PTR)
145  WITH *P '&Parser* P;
146  emit_source(P, .StaTok[1])
147  Code( DOXY_START & "\def " & .SubStr(.NamTok) & _
148  NL & "\brief " & TOFIX & _
149  DOXY_END)
150  END WITH
151 END SUB
152 
153 
154 
162 SUB doxy_emitBlockNames CDECL(BYVAL P AS Parser PTR)
163  WITH *P '&Parser* P;
164  SELECT CASE AS CONST *.Tk1
165  CASE .TOK_PRIV, .TOK_PROT ': .SrcBgn = 0 ' !!! ToDo: hide private?
166  CASE .TOK_PUBL ': .SrcBgn = 1
167  CASE .TOK_CLAS, .TOK_TYPE, .TOK_UNIO
169  CASE .TOK_ENUM
171  CASE ELSE : IF 0 = .NamTok THEN EXIT SUB
172  Code(NL & "\var " & .BlockNam & "::" & .SubStr(.NamTok) & " " & TOFIX & _
173  NL & "\brief " & TOFIX)
174  END SELECT
175  END WITH
176 END SUB
177 
178 
179 
187 SUB doxy_Block CDECL(BYVAL P AS Parser PTR)
188  WITH *P '&Parser* P;
189  emit_source(P, .StaTok[1])
190  SELECT CASE AS CONST *.Tk1
191  CASE .TOK_ENUM
192  Code( DOXY_START & "\enum " & .BlockNam & _
193  NL & "\brief " & TOFIX _
194  & DOXY_END)
196  CASE .TOK_UNIO
197  Code( DOXY_START & "\union " & .BlockNam & _
198  NL & "\brief " & TOFIX _
199  & DOXY_END)
201  CASE ELSE
202  IF OPT->Types = OPT->FB_STYLE _
203  THEN Code(DOXY_START & "\class ") _
204  ELSE Code(DOXY_START & "\struct ")
205  Code( .BlockNam & _
206  NL & "\brief " & TOFIX _
207  & DOXY_END)
209  END SELECT
210  Code(NL & COMM_END)
211  END WITH
212 END SUB
213 
214 
215 
223 SUB doxy_empty CDECL(BYVAL P AS Parser PTR)
224  WITH *P '&Parser* P;
225  Code( DOXY_START & "\file " & TOFIX & _
226  NL & "\brief " & TOFIX & _
227  DOXY_END)
228  END WITH
229 END SUB
230 
231 
232 
233 
240 SUB init_doxy(BYVAL Emi AS EmitterIF PTR)
241  WITH *Emi
242  .Error_ = @emit_error() ' we use the standard error emitter here
243 
244  .Func_ = @doxy_func_()
245  .Decl_ = @doxy_decl_()
246  .Defi_ = @doxy_defi_()
247  .Enum_ = @doxy_Block()
248  .Unio_ = @doxy_Block()
249  .Clas_ = @doxy_Block()
250  .Init_ = @geany_init() ' ... and the Geany init / exit functions
251  .Exit_ = @geany_exit()
252  .Empty_ = @doxy_empty()
253  END WITH
254 END SUB
255 
256