annotate dmd/ddoc/Sections.d @ 149:78bf0fe43974

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