Mercurial > projects > ddmd
view 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 |
line wrap: on
line source
module dmd.ddoc.Sections; import dmd.common; import dmd.ddoc.DocComment; import dmd.Array; import dmd.Scope; import dmd.Dsymbol; import dmd.OutBuffer; //! alias Vector!Section Sections; //! class Section { string name; string body_; int nooutput; void write(DocComment dc, Scope sc, Dsymbol s, OutBuffer buf) { if (namelen) { static string[] table = { "AUTHORS", "BUGS", "COPYRIGHT", "DATE", "DEPRECATED", "EXAMPLES", "HISTORY", "LICENSE", "RETURNS", "SEE_ALSO", "STANDARDS", "THROWS", "VERSION" }; for (int i = 0; i < table.length; i++) { if (icmp(table[i], name, namelen) == 0) { buf.printf("$(DDOC_%s ", table[i]); goto L1; } } buf.writestring("$(DDOC_SECTION "); // Replace _ characters with spaces buf.writestring("$(DDOC_SECTION_H "); size_t o = buf.offset; for (size_t u = 0; u < namelen; u++) { char c = name[u]; buf.writeByte((c == '_') ? ' ' : c); } escapeStrayParenthesis(buf, o, s.loc); buf.writestring(":)\n"); } else { buf.writestring("$(DDOC_DESCRIPTION "); } L1: unsigned o = buf.offset; buf.write(body_, bodylen); escapeStrayParenthesis(buf, o, s.loc); highlightText(sc, s, buf, o); buf.writestring(")\n"); } } //! class ParamSection : Section { override void write(DocComment dc, Scope sc, Dsymbol s, OutBuffer buf) { ubyte*p = body_; unsigned len = bodylen; ubyte*pend = p + len; ubyte*tempstart; unsigned templen; ubyte*namestart; unsigned namelen = 0; // !=0 if line continuation ubyte*textstart; unsigned textlen; unsigned o; Parameter *arg; buf.writestring("$(DDOC_PARAMS \n"); while (p < pend) { // Skip to start of macro while (1) { switch (*p) { case ' ': case '\t': p++; continue; case '\n': p++; goto Lcont; default: if (isIdStart(p)) break; if (namelen) goto Ltext; // continuation of prev macro goto Lskipline; } break; } tempstart = p; while (isIdTail(p)) p += utfStride(p); templen = p - tempstart; while (*p == ' ' || *p == '\t') p++; if (*p != '=') { if (namelen) goto Ltext; // continuation of prev macro goto Lskipline; } p++; if (namelen) { // Output existing param L1: //printf("param '%.*s' = '%.*s'\n", namelen, namestart, textlen, textstart); HdrGenState hgs; buf.writestring("$(DDOC_PARAM_ROW "); buf.writestring("$(DDOC_PARAM_ID "); o = buf.offset; arg = isFunctionParameter(s, namestart, namelen); if (arg && arg.type && arg.ident) arg.type.toCBuffer(buf, arg.ident, &hgs); else buf.write(namestart, namelen); escapeStrayParenthesis(buf, o, s.loc); highlightCode(sc, s, buf, o); buf.writestring(")\n"); buf.writestring("$(DDOC_PARAM_DESC "); o = buf.offset; buf.write(textstart, textlen); escapeStrayParenthesis(buf, o, s.loc); highlightText(sc, s, buf, o); buf.writestring(")"); buf.writestring(")\n"); namelen = 0; if (p >= pend) break; } namestart = tempstart; namelen = templen; while (*p == ' ' || *p == '\t') p++; textstart = p; Ltext: while (*p != '\n') p++; textlen = p - textstart; p++; Lcont: continue; Lskipline: // Ignore this line while (*p++ != '\n') {} } if (namelen) goto L1; // write out last one buf.writestring(")\n"); } } //! class MacroSection : Section { override void write(DocComment dc, Scope sc, Dsymbol s, OutBuffer buf) { // writef("MacroSection.write()\n"); DocComment.parseMacros(dc.pescapetable, dc.pmacrotable, body_, bodylen); } }