annotate dmd/ddoc/Sections.d @ 153:560eaedcb7a2

added lots of ddoc code, still needs much care added helpers functions in ddoc.Util
author trass3r
date Wed, 15 Sep 2010 04:18:46 +0200
parents 78bf0fe43974
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
1 module dmd.ddoc.Sections;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
2
114
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 0
diff changeset
3 import dmd.common;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
4 import dmd.ddoc.DocComment;
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
5 import dmd.ddoc.Util;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
6 import dmd.Array;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
7 import dmd.Scope;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
8 import dmd.Dsymbol;
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
9 import dmd.HdrGenState;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
10 import dmd.OutBuffer;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
11
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
12 //!
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
13 alias Vector!Section Sections;
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
14
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
15 //!
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
16 class Section
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
17 {
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
18 string name;
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
19 string body_;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
20
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
21 int nooutput;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
22
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
23 void write(DocComment dc, Scope sc, Dsymbol s, OutBuffer buf)
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
24 {
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
25 if (name.length)
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
26 {
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
27 static string[] table = [
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
28 "AUTHORS", "BUGS", "COPYRIGHT", "DATE",
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
29 "DEPRECATED", "EXAMPLES", "HISTORY", "LICENSE",
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
30 "RETURNS", "SEE_ALSO", "STANDARDS", "THROWS",
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
31 "VERSION"
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
32 ];
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
33
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
34 for (uint i = 0; i < table.length; i++)
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
35 {
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
36 if (icmp(table[i], name) == 0)
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
37 {
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
38 buf.printf("$(DDOC_%s ", table[i]);
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
39 goto L1;
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
40 }
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
41 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
42
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
43 buf.writestring("$(DDOC_SECTION ");
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
44 // Replace _ characters with spaces
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
45 buf.writestring("$(DDOC_SECTION_H ");
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
46 size_t o = buf.offset;
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
47 for (size_t u = 0; u < name.length; u++)
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
48 {
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
49 char c = name[u];
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
50 buf.writeByte((c == '_') ? ' ' : c);
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
51 }
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
52 escapeStrayParenthesis(buf, o, s.loc);
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
53 buf.writestring(":)\n");
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
54 }
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
55 else
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
56 {
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
57 buf.writestring("$(DDOC_DESCRIPTION ");
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
58 }
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
59 L1:
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
60 uint o = buf.offset;
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
61 buf.write(body_, body_.length);
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
62 escapeStrayParenthesis(buf, o, s.loc);
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
63 highlightText(sc, s, buf, o);
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
64 buf.writestring(")\n");
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
65 }
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
66 }
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
67
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
68 //!
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
69 class ParamSection : Section
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
70 {
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
71 override void write(DocComment dc, Scope sc, Dsymbol s, OutBuffer buf)
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
72 {
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
73 size_t i = 0;
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
74 string p = body_;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
75
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
76 size_t tempstart, templen;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
77
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
78 size_t namestart, namelen = 0; // !=0 if line continuation
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
79
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
80 size_t textstart, textlen;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
81
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
82 uint o;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
83 Parameter *arg;
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
84
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
85 buf.writestring("$(DDOC_PARAMS \n");
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
86 while (i < _body.length)
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
87 {
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
88 // Skip to start of macro
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
89 while (true)
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
90 {
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
91 switch (p[i])
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
92 {
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
93 case ' ':
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
94 case '\t':
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
95 i++;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
96 continue;
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
97
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
98 case '\n':
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
99 i++;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
100 goto Lcont;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
101
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
102 default:
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
103 if (isIdStart(p))
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
104 break;
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
105 if (namelen)
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
106 goto Ltext; // continuation of prev macro
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
107 goto Lskipline;
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
108 }
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
109 break;
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
110 }
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
111 tempstart = i;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
112
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
113 while (isIdTail(body_[i .. $]))
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
114 i += utfStride(body_[i .. $]);
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
115 templen = i - tempstart;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
116
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
117 while (p[i] == ' ' || p[i] == '\t')
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
118 i++;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
119
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
120 if (p[i] != '=')
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
121 { if (namelen)
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
122 goto Ltext; // continuation of prev macro
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
123 goto Lskipline;
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
124 }
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
125 i++;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
126
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
127 if (namelen)
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
128 { // Output existing param
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
129
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
130 L1:
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
131 // writef("param '%.*s' = '%.*s'\n", namelen, namestart, textlen, textstart);
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
132 HdrGenState hgs;
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
133 buf.writestring("$(DDOC_PARAM_ROW ");
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
134 buf.writestring("$(DDOC_PARAM_ID ");
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
135 o = buf.offset;
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
136 arg = isFunctionParameter(s, namestart, namelen);
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
137 if (arg && arg.type && arg.ident)
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
138 arg.type.toCBuffer(buf, arg.ident, &hgs);
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
139 else
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
140 buf.write(namestart, namelen);
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
141 escapeStrayParenthesis(buf, o, s.loc);
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
142 highlightCode(sc, s, buf, o);
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
143 buf.writestring(")\n");
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
144
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
145 buf.writestring("$(DDOC_PARAM_DESC ");
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
146 o = buf.offset;
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
147 buf.write(&p[textstart], textlen);
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
148 escapeStrayParenthesis(buf, o, s.loc);
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
149 highlightText(sc, s, buf, o);
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
150 buf.writestring(")");
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
151 buf.writestring(")\n");
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
152 namelen = 0;
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
153 if (i >= p.length)
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
154 break;
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
155 }
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
156
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
157 namestart = tempstart;
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
158 namelen = templen;
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
159
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
160 while (p[i] == ' ' || p[i] == '\t')
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
161 i++;
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
162 textstart = i;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
163
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
164 Ltext:
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
165 while (p[i] != '\n')
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
166 i++;
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
167 textlen = i - textstart;
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
168 i++;
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
169
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
170 Lcont:
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
171 continue;
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
172
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
173 Lskipline:
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
174 // Ignore this line
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
175 while (p[i++] != '\n') {}
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
176 }
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
177 if (namelen)
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
178 goto L1; // write out last one
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
179 buf.writestring(")\n");
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
180 }
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
181 }
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
182
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
183 //!
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
184 class MacroSection : Section
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
185 {
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
186 override void write(DocComment dc, Scope sc, Dsymbol s, OutBuffer buf)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
187 {
106
786ea1839396 ddoc branch
Trass3r
parents: 105
diff changeset
188 // writef("MacroSection.write()\n");
153
560eaedcb7a2 added lots of ddoc code, still needs much care
trass3r
parents: 149
diff changeset
189 DocComment.parseMacros(dc.pescapetable, dc.pmacrotable, body_, body_.length);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
190 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
191 }