annotate dmd/doc.c @ 1351:8d501abecd24

Initial (but disabled) fix for ticket #294 , the actual part that fixes the bug is in a #if 0 block as I'm afraid it will cause regressions. I'm most likely not going to be around tonight, and maybe not tomorrow as well, so I'm pushing it in case someone wants to run some serious testing/investigate the problem noted in llvmhelpers.cpp : realignOffset .
author Tomas Lindquist Olsen <tomas.l.olsen gmail com>
date Thu, 14 May 2009 17:20:17 +0200
parents eeb8b95ea92e
children def7a1d494fd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2 // Compiler implementation of the D programming language
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
3 // Copyright (c) 1999-2008 by Digital Mars
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
4 // All Rights Reserved
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
5 // written by Walter Bright
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
6 // http://www.digitalmars.com
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
7 // License for redistribution is by either the Artistic License
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
8 // in artistic.txt, or the GNU General Public License in gnu.txt.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
9 // See the included readme.txt for details.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
10
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
11 // This implements the Ddoc capability.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
12
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
13 #include <stdio.h>
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
14 #include <string.h>
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
15 #include <time.h>
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
16 #include <ctype.h>
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
17 #include <assert.h>
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
18
1103
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 876
diff changeset
19 #include "rmem.h"
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
20 #include "root.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
21
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
22 #include "mars.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
23 #include "dsymbol.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
24 #include "macro.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
25 #include "template.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
26 #include "lexer.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
27 #include "aggregate.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
28 #include "declaration.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
29 #include "enum.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
30 #include "id.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
31 #include "module.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
32 #include "scope.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
33 #include "hdrgen.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
34 #include "doc.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
35 #include "mtype.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
36
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
37 struct Escape
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
38 {
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
39 const char *strings[256];
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
40
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
41 static const char *escapeChar(unsigned c);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
42 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
43
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
44 struct Section
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
45 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
46 unsigned char *name;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
47 unsigned namelen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
48
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
49 unsigned char *body;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
50 unsigned bodylen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
51
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
52 int nooutput;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
53
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
54 virtual void write(DocComment *dc, Scope *sc, Dsymbol *s, OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
55 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
56
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
57 struct ParamSection : Section
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
58 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
59 void write(DocComment *dc, Scope *sc, Dsymbol *s, OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
60 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
61
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
62 struct MacroSection : Section
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
63 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
64 void write(DocComment *dc, Scope *sc, Dsymbol *s, OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
65 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
66
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
67 struct DocComment
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
68 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
69 Array sections; // Section*[]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
70
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
71 Section *summary;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
72 Section *copyright;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
73 Section *macros;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
74 Macro **pmacrotable;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
75 Escape **pescapetable;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
76
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
77 DocComment();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
78
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
79 static DocComment *parse(Scope *sc, Dsymbol *s, unsigned char *comment);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
80 static void parseMacros(Escape **pescapetable, Macro **pmacrotable, unsigned char *m, unsigned mlen);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
81 static void parseEscapes(Escape **pescapetable, unsigned char *textstart, unsigned textlen);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
82
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
83 void parseSections(unsigned char *comment);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
84 void writeSections(Scope *sc, Dsymbol *s, OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
85 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
86
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
87
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
88 int cmp(const char *stringz, void *s, size_t slen);
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
89 int icmp(const char *stringz, void *s, size_t slen);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
90 int isDitto(unsigned char *comment);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
91 unsigned char *skipwhitespace(unsigned char *p);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
92 unsigned skiptoident(OutBuffer *buf, unsigned i);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
93 unsigned skippastident(OutBuffer *buf, unsigned i);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
94 unsigned skippastURL(OutBuffer *buf, unsigned i);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
95 void highlightText(Scope *sc, Dsymbol *s, OutBuffer *buf, unsigned offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
96 void highlightCode(Scope *sc, Dsymbol *s, OutBuffer *buf, unsigned offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
97 void highlightCode2(Scope *sc, Dsymbol *s, OutBuffer *buf, unsigned offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
98 Argument *isFunctionParameter(Dsymbol *s, unsigned char *p, unsigned len);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
99
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
100 static unsigned char ddoc_default[] = "\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
101 DDOC = <html><head>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
102 <META http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
103 <title>$(TITLE)</title>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
104 </head><body>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
105 <h1>$(TITLE)</h1>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
106 $(BODY)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
107 <hr>$(SMALL Page generated by $(LINK2 http://www.digitalmars.com/d/1.0/ddoc.html, Ddoc). $(COPYRIGHT))\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
108 </body></html>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
109 \n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
110 B = <b>$0</b>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
111 I = <i>$0</i>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
112 U = <u>$0</u>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
113 P = <p>$0</p>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
114 DL = <dl>$0</dl>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
115 DT = <dt>$0</dt>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
116 DD = <dd>$0</dd>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
117 TABLE = <table>$0</table>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
118 TR = <tr>$0</tr>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
119 TH = <th>$0</th>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
120 TD = <td>$0</td>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
121 OL = <ol>$0</ol>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
122 UL = <ul>$0</ul>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
123 LI = <li>$0</li>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
124 BIG = <big>$0</big>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
125 SMALL = <small>$0</small>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
126 BR = <br>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
127 LINK = <a href=\"$0\">$0</a>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
128 LINK2 = <a href=\"$1\">$+</a>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
129 \n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
130 RED = <font color=red>$0</font>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
131 BLUE = <font color=blue>$0</font>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
132 GREEN = <font color=green>$0</font>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
133 YELLOW =<font color=yellow>$0</font>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
134 BLACK = <font color=black>$0</font>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
135 WHITE = <font color=white>$0</font>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
136 \n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
137 D_CODE = <pre class=\"d_code\">$0</pre>\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
138 D_COMMENT = $(GREEN $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
139 D_STRING = $(RED $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
140 D_KEYWORD = $(BLUE $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
141 D_PSYMBOL = $(U $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
142 D_PARAM = $(I $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
143 \n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
144 DDOC_COMMENT = <!-- $0 -->\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
145 DDOC_DECL = $(DT $(BIG $0))\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
146 DDOC_DECL_DD = $(DD $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
147 DDOC_DITTO = $(BR)$0\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
148 DDOC_SECTIONS = $0\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
149 DDOC_SUMMARY = $0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
150 DDOC_DESCRIPTION = $0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
151 DDOC_AUTHORS = $(B Authors:)$(BR)\n$0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
152 DDOC_BUGS = $(RED BUGS:)$(BR)\n$0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
153 DDOC_COPYRIGHT = $(B Copyright:)$(BR)\n$0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
154 DDOC_DATE = $(B Date:)$(BR)\n$0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
155 DDOC_DEPRECATED = $(RED Deprecated:)$(BR)\n$0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
156 DDOC_EXAMPLES = $(B Examples:)$(BR)\n$0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
157 DDOC_HISTORY = $(B History:)$(BR)\n$0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
158 DDOC_LICENSE = $(B License:)$(BR)\n$0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
159 DDOC_RETURNS = $(B Returns:)$(BR)\n$0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
160 DDOC_SEE_ALSO = $(B See Also:)$(BR)\n$0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
161 DDOC_STANDARDS = $(B Standards:)$(BR)\n$0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
162 DDOC_THROWS = $(B Throws:)$(BR)\n$0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
163 DDOC_VERSION = $(B Version:)$(BR)\n$0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
164 DDOC_SECTION_H = $(B $0)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
165 DDOC_SECTION = $0$(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
166 DDOC_MEMBERS = $(DL $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
167 DDOC_MODULE_MEMBERS = $(DDOC_MEMBERS $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
168 DDOC_CLASS_MEMBERS = $(DDOC_MEMBERS $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
169 DDOC_STRUCT_MEMBERS = $(DDOC_MEMBERS $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
170 DDOC_ENUM_MEMBERS = $(DDOC_MEMBERS $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
171 DDOC_TEMPLATE_MEMBERS = $(DDOC_MEMBERS $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
172 DDOC_PARAMS = $(B Params:)$(BR)\n$(TABLE $0)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
173 DDOC_PARAM_ROW = $(TR $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
174 DDOC_PARAM_ID = $(TD $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
175 DDOC_PARAM_DESC = $(TD $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
176 DDOC_BLANKLINE = $(BR)$(BR)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
177 \n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
178 DDOC_PSYMBOL = $(U $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
179 DDOC_KEYWORD = $(B $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
180 DDOC_PARAM = $(I $0)\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
181 \n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
182 ESCAPES = /</&lt;/\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
183 />/&gt;/\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
184 /&/&amp;/\n\
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
185 ";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
186
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
187 static char ddoc_decl_s[] = "$(DDOC_DECL ";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
188 static char ddoc_decl_e[] = ")\n";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
189
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
190 static char ddoc_decl_dd_s[] = "$(DDOC_DECL_DD ";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
191 static char ddoc_decl_dd_e[] = ")\n";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
192
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
193
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
194 /****************************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
195 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
196
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
197 void Module::gendocfile()
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
198 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
199 static OutBuffer mbuf;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
200 static int mbuf_done;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
201
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
202 OutBuffer buf;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
203
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
204 //printf("Module::gendocfile()\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
205
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
206 if (!mbuf_done) // if not already read the ddoc files
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
207 { mbuf_done = 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
208
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
209 // Use our internal default
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
210 mbuf.write(ddoc_default, sizeof(ddoc_default) - 1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
211
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
212 // Override with DDOCFILE specified in the sc.ini file
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
213 char *p = getenv("DDOCFILE");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
214 if (p)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
215 global.params.ddocfiles->shift(p);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
216
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
217 // Override with the ddoc macro files from the command line
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
218 for (int i = 0; i < global.params.ddocfiles->dim; i++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
219 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
220 FileName f((char *)global.params.ddocfiles->data[i], 0);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
221 File file(&f);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
222 file.readv();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
223 // BUG: convert file contents to UTF-8 before use
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
224
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
225 //printf("file: '%.*s'\n", file.len, file.buffer);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
226 mbuf.write(file.buffer, file.len);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
227 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
228 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
229 DocComment::parseMacros(&escapetable, &macrotable, mbuf.data, mbuf.offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
230
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
231 Scope *sc = Scope::createGlobal(this); // create root scope
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
232 sc->docbuf = &buf;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
233
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
234 DocComment *dc = DocComment::parse(sc, this, comment);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
235 dc->pmacrotable = &macrotable;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
236 dc->pescapetable = &escapetable;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
237
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
238 // Generate predefined macros
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
239
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
240 // Set the title to be the name of the module
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
241 { char *p = toPrettyChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
242 Macro::define(&macrotable, (unsigned char *)"TITLE", 5, (unsigned char *)p, strlen(p));
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
243 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
244
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
245 time_t t;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
246 time(&t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
247 char *p = ctime(&t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
248 p = mem.strdup(p);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
249 Macro::define(&macrotable, (unsigned char *)"DATETIME", 8, (unsigned char *)p, strlen(p));
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
250 Macro::define(&macrotable, (unsigned char *)"YEAR", 4, (unsigned char *)p + 20, 4);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
251
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
252 char *docfilename = docfile->toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
253 Macro::define(&macrotable, (unsigned char *)"DOCFILENAME", 11, (unsigned char *)docfilename, strlen(docfilename));
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
254
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
255 if (dc->copyright)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
256 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
257 dc->copyright->nooutput = 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
258 Macro::define(&macrotable, (unsigned char *)"COPYRIGHT", 9, dc->copyright->body, dc->copyright->bodylen);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
259 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
260
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
261 buf.printf("$(DDOC_COMMENT Generated by Ddoc from %s)\n", srcfile->toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
262 if (isDocFile)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
263 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
264 size_t commentlen = strlen((char *)comment);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
265 if (dc->macros)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
266 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
267 commentlen = dc->macros->name - comment;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
268 dc->macros->write(dc, sc, this, sc->docbuf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
269 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
270 sc->docbuf->write(comment, commentlen);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
271 highlightText(NULL, this, sc->docbuf, 0);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
272 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
273 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
274 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
275 dc->writeSections(sc, this, sc->docbuf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
276 emitMemberComments(sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
277 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
278
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
279 //printf("BODY= '%.*s'\n", buf.offset, buf.data);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
280 Macro::define(&macrotable, (unsigned char *)"BODY", 4, buf.data, buf.offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
281
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
282 OutBuffer buf2;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
283 buf2.writestring("$(DDOC)\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
284 unsigned end = buf2.offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
285 macrotable->expand(&buf2, 0, &end, NULL, 0);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
286
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
287 #if 1
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
288 /* Remove all the escape sequences from buf2,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
289 * and make CR-LF the newline.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
290 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
291 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
292 buf.setsize(0);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
293 buf.reserve(buf2.offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
294 unsigned char *p = buf2.data;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
295 for (unsigned j = 0; j < buf2.offset; j++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
296 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
297 unsigned char c = p[j];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
298 if (c == 0xFF && j + 1 < buf2.offset)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
299 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
300 j++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
301 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
302 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
303 if (c == '\n')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
304 buf.writeByte('\r');
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
305 else if (c == '\r')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
306 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
307 buf.writestring("\r\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
308 if (j + 1 < buf2.offset && p[j + 1] == '\n')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
309 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
310 j++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
311 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
312 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
313 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
314 buf.writeByte(c);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
315 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
316 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
317
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
318 // Transfer image to file
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
319 assert(docfile);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
320 docfile->setbuffer(buf.data, buf.offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
321 docfile->ref = 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
322 char *pt = FileName::path(docfile->toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
323 if (*pt)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
324 FileName::ensurePathExists(pt);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
325 mem.free(pt);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
326 docfile->writev();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
327 #else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
328 /* Remove all the escape sequences from buf2
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
329 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
330 { unsigned i = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
331 unsigned char *p = buf2.data;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
332 for (unsigned j = 0; j < buf2.offset; j++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
333 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
334 if (p[j] == 0xFF && j + 1 < buf2.offset)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
335 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
336 j++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
337 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
338 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
339 p[i] = p[j];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
340 i++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
341 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
342 buf2.setsize(i);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
343 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
344
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
345 // Transfer image to file
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
346 docfile->setbuffer(buf2.data, buf2.offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
347 docfile->ref = 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
348 char *pt = FileName::path(docfile->toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
349 if (*pt)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
350 FileName::ensurePathExists(pt);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
351 mem.free(pt);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
352 docfile->writev();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
353 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
354 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
355
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
356 /******************************* emitComment **********************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
357
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
358 /*
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
359 * Emit doc comment to documentation file
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
360 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
361
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
362 void Dsymbol::emitDitto(Scope *sc)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
363 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
364 //printf("Dsymbol::emitDitto() %s %s\n", kind(), toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
365 OutBuffer *buf = sc->docbuf;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
366 unsigned o;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
367 OutBuffer b;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
368
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
369 b.writestring("$(DDOC_DITTO ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
370 o = b.offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
371 toDocBuffer(&b);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
372 //printf("b: '%.*s'\n", b.offset, b.data);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
373 /* If 'this' is a function template, then highlightCode() was
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
374 * already run by FuncDeclaration::toDocbuffer().
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
375 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
376 TemplateDeclaration *td;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
377 if (parent &&
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
378 (td = parent->isTemplateDeclaration()) != NULL &&
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
379 td->onemember == this)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
380 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
381 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
382 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
383 highlightCode(sc, this, &b, o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
384 b.writeByte(')');
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
385 buf->spread(sc->lastoffset, b.offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
386 memcpy(buf->data + sc->lastoffset, b.data, b.offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
387 sc->lastoffset += b.offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
388 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
389
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
390 void ScopeDsymbol::emitMemberComments(Scope *sc)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
391 {
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
392 //printf("ScopeDsymbol::emitMemberComments() %s\n", toChars());
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
393 OutBuffer *buf = sc->docbuf;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
394
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
395 if (members)
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
396 { const char *m = "$(DDOC_MEMBERS \n";
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
397
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
398 if (isModule())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
399 m = "$(DDOC_MODULE_MEMBERS \n";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
400 else if (isClassDeclaration())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
401 m = "$(DDOC_CLASS_MEMBERS \n";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
402 else if (isStructDeclaration())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
403 m = "$(DDOC_STRUCT_MEMBERS \n";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
404 else if (isEnumDeclaration())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
405 m = "$(DDOC_ENUM_MEMBERS \n";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
406 else if (isTemplateDeclaration())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
407 m = "$(DDOC_TEMPLATE_MEMBERS \n";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
408
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
409 unsigned offset1 = buf->offset; // save starting offset
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
410 buf->writestring(m);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
411 unsigned offset2 = buf->offset; // to see if we write anything
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
412 sc = sc->push(this);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
413 for (int i = 0; i < members->dim; i++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
414 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
415 Dsymbol *s = (Dsymbol *)members->data[i];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
416 //printf("\ts = '%s'\n", s->toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
417 s->emitComment(sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
418 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
419 sc->pop();
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
420 if (buf->offset == offset2)
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
421 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
422 /* Didn't write out any members, so back out last write
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
423 */
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
424 buf->offset = offset1;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
425 }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
426 else
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
427 buf->writestring(")\n");
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
428 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
429 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
430
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
431 void emitProtection(OutBuffer *buf, PROT prot)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
432 {
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
433 const char *p;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
434
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
435 switch (prot)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
436 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
437 case PROTpackage: p = "package"; break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
438 case PROTprotected: p = "protected"; break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
439 case PROTexport: p = "export"; break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
440 default: p = NULL; break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
441 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
442 if (p)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
443 buf->printf("%s ", p);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
444 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
445
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
446 void Dsymbol::emitComment(Scope *sc) { }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
447 void InvariantDeclaration::emitComment(Scope *sc) { }
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
448 #if DMDV2
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
449 void PostBlitDeclaration::emitComment(Scope *sc) { }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
450 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
451 void DtorDeclaration::emitComment(Scope *sc) { }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
452 void StaticCtorDeclaration::emitComment(Scope *sc) { }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
453 void StaticDtorDeclaration::emitComment(Scope *sc) { }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
454 void ClassInfoDeclaration::emitComment(Scope *sc) { }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
455 void ModuleInfoDeclaration::emitComment(Scope *sc) { }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
456 void TypeInfoDeclaration::emitComment(Scope *sc) { }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
457
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
458
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
459 void Declaration::emitComment(Scope *sc)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
460 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
461 //printf("Declaration::emitComment(%p '%s'), comment = '%s'\n", this, toChars(), comment);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
462 //printf("type = %p\n", type);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
463
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
464 if (protection == PROTprivate || !ident ||
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
465 (!type && !isCtorDeclaration() && !isAliasDeclaration()))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
466 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
467 if (!comment)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
468 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
469
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
470 OutBuffer *buf = sc->docbuf;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
471 DocComment *dc = DocComment::parse(sc, this, comment);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
472 unsigned o;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
473
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
474 if (!dc)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
475 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
476 emitDitto(sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
477 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
478 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
479 dc->pmacrotable = &sc->module->macrotable;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
480
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
481 buf->writestring(ddoc_decl_s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
482 o = buf->offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
483 toDocBuffer(buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
484 highlightCode(sc, this, buf, o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
485 sc->lastoffset = buf->offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
486 buf->writestring(ddoc_decl_e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
487
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
488 buf->writestring(ddoc_decl_dd_s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
489 dc->writeSections(sc, this, buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
490 buf->writestring(ddoc_decl_dd_e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
491 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
492
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
493 void AggregateDeclaration::emitComment(Scope *sc)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
494 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
495 //printf("AggregateDeclaration::emitComment() '%s'\n", toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
496 if (prot() == PROTprivate)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
497 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
498 if (!comment)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
499 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
500
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
501 OutBuffer *buf = sc->docbuf;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
502 DocComment *dc = DocComment::parse(sc, this, comment);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
503
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
504 if (!dc)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
505 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
506 emitDitto(sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
507 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
508 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
509 dc->pmacrotable = &sc->module->macrotable;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
510
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
511 buf->writestring(ddoc_decl_s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
512 toDocBuffer(buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
513 sc->lastoffset = buf->offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
514 buf->writestring(ddoc_decl_e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
515
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
516 buf->writestring(ddoc_decl_dd_s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
517 dc->writeSections(sc, this, buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
518 emitMemberComments(sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
519 buf->writestring(ddoc_decl_dd_e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
520 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
521
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
522 void TemplateDeclaration::emitComment(Scope *sc)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
523 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
524 //printf("TemplateDeclaration::emitComment() '%s', kind = %s\n", toChars(), kind());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
525 if (prot() == PROTprivate)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
526 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
527
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
528 unsigned char *com = comment;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
529 int hasmembers = 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
530
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
531 Dsymbol *ss = this;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
532
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
533 if (onemember)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
534 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
535 ss = onemember->isAggregateDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
536 if (!ss)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
537 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
538 ss = onemember->isFuncDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
539 if (ss)
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
540 { hasmembers = 0;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
541 if (com != ss->comment)
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
542 com = Lexer::combineComments(com, ss->comment);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
543 }
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
544 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
545 ss = this;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
546 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
547 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
548
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
549 if (!com)
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
550 return;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
551
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
552 OutBuffer *buf = sc->docbuf;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
553 DocComment *dc = DocComment::parse(sc, this, com);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
554 unsigned o;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
555
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
556 if (!dc)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
557 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
558 ss->emitDitto(sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
559 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
560 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
561 dc->pmacrotable = &sc->module->macrotable;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
562
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
563 buf->writestring(ddoc_decl_s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
564 o = buf->offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
565 ss->toDocBuffer(buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
566 if (ss == this)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
567 highlightCode(sc, this, buf, o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
568 sc->lastoffset = buf->offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
569 buf->writestring(ddoc_decl_e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
570
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
571 buf->writestring(ddoc_decl_dd_s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
572 dc->writeSections(sc, this, buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
573 if (hasmembers)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
574 ((ScopeDsymbol *)ss)->emitMemberComments(sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
575 buf->writestring(ddoc_decl_dd_e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
576 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
577
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
578 void EnumDeclaration::emitComment(Scope *sc)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
579 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
580 if (prot() == PROTprivate)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
581 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
582 // if (!comment)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
583 { if (isAnonymous() && members)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
584 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
585 for (int i = 0; i < members->dim; i++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
586 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
587 Dsymbol *s = (Dsymbol *)members->data[i];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
588 s->emitComment(sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
589 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
590 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
591 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
592 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
593 if (!comment)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
594 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
595 if (isAnonymous())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
596 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
597
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
598 OutBuffer *buf = sc->docbuf;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
599 DocComment *dc = DocComment::parse(sc, this, comment);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
600
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
601 if (!dc)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
602 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
603 emitDitto(sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
604 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
605 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
606 dc->pmacrotable = &sc->module->macrotable;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
607
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
608 buf->writestring(ddoc_decl_s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
609 toDocBuffer(buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
610 sc->lastoffset = buf->offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
611 buf->writestring(ddoc_decl_e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
612
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
613 buf->writestring(ddoc_decl_dd_s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
614 dc->writeSections(sc, this, buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
615 emitMemberComments(sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
616 buf->writestring(ddoc_decl_dd_e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
617 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
618
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
619 void EnumMember::emitComment(Scope *sc)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
620 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
621 //printf("EnumMember::emitComment(%p '%s'), comment = '%s'\n", this, toChars(), comment);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
622 if (prot() == PROTprivate)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
623 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
624 if (!comment)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
625 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
626
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
627 OutBuffer *buf = sc->docbuf;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
628 DocComment *dc = DocComment::parse(sc, this, comment);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
629 unsigned o;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
630
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
631 if (!dc)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
632 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
633 emitDitto(sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
634 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
635 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
636 dc->pmacrotable = &sc->module->macrotable;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
637
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
638 buf->writestring(ddoc_decl_s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
639 o = buf->offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
640 toDocBuffer(buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
641 highlightCode(sc, this, buf, o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
642 sc->lastoffset = buf->offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
643 buf->writestring(ddoc_decl_e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
644
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
645 buf->writestring(ddoc_decl_dd_s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
646 dc->writeSections(sc, this, buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
647 buf->writestring(ddoc_decl_dd_e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
648 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
649
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
650 /******************************* toDocBuffer **********************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
651
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
652 void Dsymbol::toDocBuffer(OutBuffer *buf)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
653 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
654 //printf("Dsymbol::toDocbuffer() %s\n", toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
655 HdrGenState hgs;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
656
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
657 hgs.ddoc = 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
658 toCBuffer(buf, &hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
659 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
660
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
661 void prefix(OutBuffer *buf, Dsymbol *s)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
662 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
663 if (s->isDeprecated())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
664 buf->writestring("deprecated ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
665 Declaration *d = s->isDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
666 if (d)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
667 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
668 emitProtection(buf, d->protection);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
669 if (d->isAbstract())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
670 buf->writestring("abstract ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
671 if (d->isStatic())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
672 buf->writestring("static ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
673 if (d->isConst())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
674 buf->writestring("const ");
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
675 #if DMDV2
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
676 if (d->isInvariant())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
677 buf->writestring("invariant ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
678 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
679 if (d->isFinal())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
680 buf->writestring("final ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
681 if (d->isSynchronized())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
682 buf->writestring("synchronized ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
683 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
684 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
685
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
686 void Declaration::toDocBuffer(OutBuffer *buf)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
687 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
688 //printf("Declaration::toDocbuffer() %s, originalType = %p\n", toChars(), originalType);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
689 if (ident)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
690 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
691 prefix(buf, this);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
692
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
693 if (type)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
694 { HdrGenState hgs;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
695 hgs.ddoc = 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
696 if (originalType)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
697 { //originalType->print();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
698 originalType->toCBuffer(buf, ident, &hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
699 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
700 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
701 type->toCBuffer(buf, ident, &hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
702 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
703 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
704 buf->writestring(ident->toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
705 buf->writestring(";\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
706 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
707 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
708
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
709
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
710 void AliasDeclaration::toDocBuffer(OutBuffer *buf)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
711 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
712 //printf("AliasDeclaration::toDocbuffer() %s\n", toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
713 if (ident)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
714 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
715 if (isDeprecated())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
716 buf->writestring("deprecated ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
717
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
718 emitProtection(buf, protection);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
719 buf->writestring("alias ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
720 buf->writestring(toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
721 buf->writestring(";\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
722 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
723 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
724
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
725
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
726 void TypedefDeclaration::toDocBuffer(OutBuffer *buf)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
727 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
728 if (ident)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
729 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
730 if (isDeprecated())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
731 buf->writestring("deprecated ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
732
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
733 emitProtection(buf, protection);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
734 buf->writestring("typedef ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
735 buf->writestring(toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
736 buf->writestring(";\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
737 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
738 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
739
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
740
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
741 void FuncDeclaration::toDocBuffer(OutBuffer *buf)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
742 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
743 //printf("FuncDeclaration::toDocbuffer() %s\n", toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
744 if (ident)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
745 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
746 TemplateDeclaration *td;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
747
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
748 if (parent &&
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
749 (td = parent->isTemplateDeclaration()) != NULL &&
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
750 td->onemember == this)
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
751 { /* It's a function template
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
752 */
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
753 HdrGenState hgs;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
754 unsigned o = buf->offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
755 TypeFunction *tf = (TypeFunction *)type;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
756
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
757 hgs.ddoc = 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
758 prefix(buf, td);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
759 tf->next->toCBuffer(buf, NULL, &hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
760 buf->writeByte(' ');
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
761 buf->writestring(ident->toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
762 buf->writeByte('(');
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
763 for (int i = 0; i < td->origParameters->dim; i++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
764 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
765 TemplateParameter *tp = (TemplateParameter *)td->origParameters->data[i];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
766 if (i)
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 336
diff changeset
767 buf->writestring(", ");
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
768 tp->toCBuffer(buf, &hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
769 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
770 buf->writeByte(')');
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
771 Argument::argsToCBuffer(buf, &hgs, tf->parameters, tf->varargs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
772 buf->writestring(";\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
773
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
774 highlightCode(NULL, this, buf, o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
775 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
776 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
777 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
778 Declaration::toDocBuffer(buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
779 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
780 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
781 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
782
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
783 void CtorDeclaration::toDocBuffer(OutBuffer *buf)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
784 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
785 HdrGenState hgs;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
786
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
787 buf->writestring("this");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
788 Argument::argsToCBuffer(buf, &hgs, arguments, varargs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
789 buf->writestring(";\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
790 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
791
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
792
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
793 void AggregateDeclaration::toDocBuffer(OutBuffer *buf)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
794 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
795 if (ident)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
796 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
797 #if 0
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
798 emitProtection(buf, protection);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
799 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
800 buf->printf("%s $(DDOC_PSYMBOL %s)", kind(), toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
801 buf->writestring(";\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
802 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
803 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
804
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
805 void StructDeclaration::toDocBuffer(OutBuffer *buf)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
806 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
807 //printf("StructDeclaration::toDocbuffer() %s\n", toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
808 if (ident)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
809 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
810 #if 0
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
811 emitProtection(buf, protection);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
812 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
813 TemplateDeclaration *td;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
814
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
815 if (parent &&
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
816 (td = parent->isTemplateDeclaration()) != NULL &&
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
817 td->onemember == this)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
818 { unsigned o = buf->offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
819 td->toDocBuffer(buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
820 highlightCode(NULL, this, buf, o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
821 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
822 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
823 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
824 buf->printf("%s $(DDOC_PSYMBOL %s)", kind(), toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
825 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
826 buf->writestring(";\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
827 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
828 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
829
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
830 void ClassDeclaration::toDocBuffer(OutBuffer *buf)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
831 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
832 //printf("ClassDeclaration::toDocbuffer() %s\n", toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
833 if (ident)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
834 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
835 #if 0
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
836 emitProtection(buf, protection);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
837 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
838 TemplateDeclaration *td;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
839
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
840 if (parent &&
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
841 (td = parent->isTemplateDeclaration()) != NULL &&
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
842 td->onemember == this)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
843 { unsigned o = buf->offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
844 td->toDocBuffer(buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
845 highlightCode(NULL, this, buf, o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
846 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
847 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
848 {
876
27a379f288bf Merged DMD 1.039
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 875
diff changeset
849 if (isAbstract())
27a379f288bf Merged DMD 1.039
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 875
diff changeset
850 buf->writestring("abstract ");
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
851 buf->printf("%s $(DDOC_PSYMBOL %s)", kind(), toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
852 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
853 int any = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
854 for (int i = 0; i < baseclasses.dim; i++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
855 { BaseClass *bc = (BaseClass *)baseclasses.data[i];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
856
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
857 if (bc->protection == PROTprivate)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
858 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
859 if (bc->base && bc->base->ident == Id::Object)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
860 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
861
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
862 if (any)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
863 buf->writestring(", ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
864 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
865 { buf->writestring(": ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
866 any = 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
867 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
868 emitProtection(buf, bc->protection);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
869 if (bc->base)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
870 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
871 buf->writestring(bc->base->toPrettyChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
872 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
873 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
874 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
875 HdrGenState hgs;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
876 bc->type->toCBuffer(buf, NULL, &hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
877 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
878 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
879 buf->writestring(";\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
880 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
881 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
882
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
883
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
884 void EnumDeclaration::toDocBuffer(OutBuffer *buf)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
885 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
886 if (ident)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
887 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
888 buf->printf("%s $(DDOC_PSYMBOL %s)", kind(), toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
889 buf->writestring(";\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
890 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
891 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
892
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
893 void EnumMember::toDocBuffer(OutBuffer *buf)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
894 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
895 if (ident)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
896 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
897 buf->writestring(toChars());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
898 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
899 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
900
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
901
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
902 /********************************* DocComment *********************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
903
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
904 DocComment::DocComment()
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
905 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
906 memset(this, 0, sizeof(DocComment));
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
907 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
908
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
909 DocComment *DocComment::parse(Scope *sc, Dsymbol *s, unsigned char *comment)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
910 { unsigned idlen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
911
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
912 //printf("parse(%s): '%s'\n", s->toChars(), comment);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
913 if (sc->lastdc && isDitto(comment))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
914 return NULL;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
915
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
916 DocComment *dc = new DocComment();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
917 if (!comment)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
918 return dc;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
919
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
920 dc->parseSections(comment);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
921
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
922 for (int i = 0; i < dc->sections.dim; i++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
923 { Section *s = (Section *)dc->sections.data[i];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
924
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
925 if (icmp("copyright", s->name, s->namelen) == 0)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
926 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
927 dc->copyright = s;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
928 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
929 if (icmp("macros", s->name, s->namelen) == 0)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
930 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
931 dc->macros = s;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
932 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
933 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
934
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
935 sc->lastdc = dc;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
936 return dc;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
937 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
938
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
939 /*****************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
940 * Parse next paragraph out of *pcomment.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
941 * Update *pcomment to point past paragraph.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
942 * Returns NULL if no more paragraphs.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
943 * If paragraph ends in 'identifier:',
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
944 * then (*pcomment)[0 .. idlen] is the identifier.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
945 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
946
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
947 void DocComment::parseSections(unsigned char *comment)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
948 { unsigned char *p;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
949 unsigned char *pstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
950 unsigned char *pend;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
951 unsigned char *q;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
952 unsigned char *idstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
953 unsigned idlen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
954
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
955 unsigned char *name = NULL;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
956 unsigned namelen = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
957
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
958 //printf("parseSections('%s')\n", comment);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
959 p = comment;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
960 while (*p)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
961 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
962 p = skipwhitespace(p);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
963 pstart = p;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
964
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
965 /* Find end of section, which is ended by one of:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
966 * 'identifier:'
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
967 * '\0'
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
968 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
969 idlen = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
970 while (1)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
971 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
972 if (isalpha(*p) || *p == '_')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
973 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
974 q = p + 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
975 while (isalnum(*q) || *q == '_')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
976 q++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
977 if (*q == ':') // identifier: ends it
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
978 { idlen = q - p;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
979 idstart = p;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
980 for (pend = p; pend > pstart; pend--)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
981 { if (pend[-1] == '\n')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
982 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
983 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
984 p = q + 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
985 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
986 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
987 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
988 while (1)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
989 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
990 if (!*p)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
991 { pend = p;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
992 goto L1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
993 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
994 if (*p == '\n')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
995 { p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
996 if (*p == '\n' && !summary && !namelen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
997 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
998 pend = p;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
999 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1000 goto L1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1001 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1002 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1003 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1004 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1005 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1006 p = skipwhitespace(p);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1007 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1008 L1:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1009
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1010 if (namelen || pstart < pend)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1011 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1012 Section *s;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1013 if (icmp("Params", name, namelen) == 0)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1014 s = new ParamSection();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1015 else if (icmp("Macros", name, namelen) == 0)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1016 s = new MacroSection();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1017 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1018 s = new Section();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1019 s->name = name;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1020 s->namelen = namelen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1021 s->body = pstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1022 s->bodylen = pend - pstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1023 s->nooutput = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1024
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1025 //printf("Section: '%.*s' = '%.*s'\n", s->namelen, s->name, s->bodylen, s->body);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1026
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1027 sections.push(s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1028
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1029 if (!summary && !namelen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1030 summary = s;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1031 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1032
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1033 if (idlen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1034 { name = idstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1035 namelen = idlen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1036 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1037 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1038 { name = NULL;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1039 namelen = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1040 if (!*p)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1041 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1042 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1043 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1044 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1045
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1046 void DocComment::writeSections(Scope *sc, Dsymbol *s, OutBuffer *buf)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1047 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1048 //printf("DocComment::writeSections()\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1049 if (sections.dim)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1050 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1051 buf->writestring("$(DDOC_SECTIONS \n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1052 for (int i = 0; i < sections.dim; i++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1053 { Section *sec = (Section *)sections.data[i];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1054
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1055 if (sec->nooutput)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1056 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1057 //printf("Section: '%.*s' = '%.*s'\n", sec->namelen, sec->name, sec->bodylen, sec->body);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1058 if (sec->namelen || i)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1059 sec->write(this, sc, s, buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1060 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1061 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1062 buf->writestring("$(DDOC_SUMMARY ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1063 unsigned o = buf->offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1064 buf->write(sec->body, sec->bodylen);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1065 highlightText(sc, s, buf, o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1066 buf->writestring(")\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1067 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1068 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1069 buf->writestring(")\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1070 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1071 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1072 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1073 buf->writestring("$(DDOC_BLANKLINE)\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1074 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1075 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1076
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1077 /***************************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1078 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1079
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1080 void Section::write(DocComment *dc, Scope *sc, Dsymbol *s, OutBuffer *buf)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1081 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1082 if (namelen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1083 {
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
1084 static const char *table[] =
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1085 { "AUTHORS", "BUGS", "COPYRIGHT", "DATE",
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1086 "DEPRECATED", "EXAMPLES", "HISTORY", "LICENSE",
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1087 "RETURNS", "SEE_ALSO", "STANDARDS", "THROWS",
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1088 "VERSION" };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1089
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1090 for (int i = 0; i < sizeof(table) / sizeof(table[0]); i++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1091 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1092 if (icmp(table[i], name, namelen) == 0)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1093 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1094 buf->printf("$(DDOC_%s ", table[i]);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1095 goto L1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1096 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1097 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1098
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1099 buf->writestring("$(DDOC_SECTION ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1100 // Replace _ characters with spaces
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1101 buf->writestring("$(DDOC_SECTION_H ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1102 for (unsigned u = 0; u < namelen; u++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1103 { unsigned char c = name[u];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1104 buf->writeByte((c == '_') ? ' ' : c);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1105 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1106 buf->writestring(":)\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1107 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1108 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1109 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1110 buf->writestring("$(DDOC_DESCRIPTION ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1111 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1112 L1:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1113 unsigned o = buf->offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1114 buf->write(body, bodylen);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1115 highlightText(sc, s, buf, o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1116 buf->writestring(")\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1117 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1118
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1119 /***************************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1120 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1121
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1122 void ParamSection::write(DocComment *dc, Scope *sc, Dsymbol *s, OutBuffer *buf)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1123 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1124 unsigned char *p = body;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1125 unsigned len = bodylen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1126 unsigned char *pend = p + len;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1127
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1128 unsigned char *tempstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1129 unsigned templen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1130
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1131 unsigned char *namestart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1132 unsigned namelen = 0; // !=0 if line continuation
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1133
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1134 unsigned char *textstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1135 unsigned textlen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1136
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1137 unsigned o;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1138 Argument *arg;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1139
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1140 buf->writestring("$(DDOC_PARAMS \n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1141 while (p < pend)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1142 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1143 // Skip to start of macro
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1144 for (; 1; p++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1145 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1146 switch (*p)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1147 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1148 case ' ':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1149 case '\t':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1150 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1151
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1152 case '\n':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1153 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1154 goto Lcont;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1155
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1156 default:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1157 if (!(isalpha(*p) || *p == '_'))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1158 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1159 if (namelen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1160 goto Ltext; // continuation of prev macro
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1161 goto Lskipline;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1162 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1163 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1164 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1165 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1166 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1167 tempstart = p;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1168
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1169 while (isalnum(*p) || *p == '_')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1170 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1171 templen = p - tempstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1172
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1173 while (*p == ' ' || *p == '\t')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1174 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1175
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1176 if (*p != '=')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1177 { if (namelen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1178 goto Ltext; // continuation of prev macro
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1179 goto Lskipline;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1180 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1181 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1182
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1183 if (namelen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1184 { // Output existing param
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1185
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1186 L1:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1187 //printf("param '%.*s' = '%.*s'\n", namelen, namestart, textlen, textstart);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1188 HdrGenState hgs;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1189 buf->writestring("$(DDOC_PARAM_ROW ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1190 buf->writestring("$(DDOC_PARAM_ID ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1191 o = buf->offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1192 arg = isFunctionParameter(s, namestart, namelen);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1193 if (arg && arg->type && arg->ident)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1194 arg->type->toCBuffer(buf, arg->ident, &hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1195 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1196 buf->write(namestart, namelen);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1197 highlightCode(sc, s, buf, o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1198 buf->writestring(")\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1199
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1200 buf->writestring("$(DDOC_PARAM_DESC ");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1201 o = buf->offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1202 buf->write(textstart, textlen);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1203 highlightText(sc, s, buf, o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1204 buf->writestring(")");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1205 buf->writestring(")\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1206 namelen = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1207 if (p >= pend)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1208 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1209 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1210
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1211 namestart = tempstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1212 namelen = templen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1213
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1214 while (*p == ' ' || *p == '\t')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1215 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1216 textstart = p;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1217
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1218 Ltext:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1219 while (*p != '\n')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1220 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1221 textlen = p - textstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1222 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1223
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1224 Lcont:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1225 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1226
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1227 Lskipline:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1228 // Ignore this line
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1229 while (*p++ != '\n')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1230 ;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1231 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1232 if (namelen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1233 goto L1; // write out last one
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1234 buf->writestring(")\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1235 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1236
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1237 /***************************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1238 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1239
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1240 void MacroSection::write(DocComment *dc, Scope *sc, Dsymbol *s, OutBuffer *buf)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1241 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1242 //printf("MacroSection::write()\n");
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1243 DocComment::parseMacros(dc->pescapetable, dc->pmacrotable, body, bodylen);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1244 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1245
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1246 /************************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1247 * Parse macros out of Macros: section.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1248 * Macros are of the form:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1249 * name1 = value1
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1250 *
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1251 * name2 = value2
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1252 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1253
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1254 void DocComment::parseMacros(Escape **pescapetable, Macro **pmacrotable, unsigned char *m, unsigned mlen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1255 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1256 unsigned char *p = m;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1257 unsigned len = mlen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1258 unsigned char *pend = p + len;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1259
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1260 unsigned char *tempstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1261 unsigned templen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1262
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1263 unsigned char *namestart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1264 unsigned namelen = 0; // !=0 if line continuation
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1265
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1266 unsigned char *textstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1267 unsigned textlen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1268
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1269 while (p < pend)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1270 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1271 // Skip to start of macro
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1272 for (; 1; p++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1273 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1274 if (p >= pend)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1275 goto Ldone;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1276 switch (*p)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1277 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1278 case ' ':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1279 case '\t':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1280 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1281
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1282 case '\n':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1283 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1284 goto Lcont;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1285
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1286 default:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1287 if (!(isalpha(*p) || *p == '_'))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1288 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1289 if (namelen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1290 goto Ltext; // continuation of prev macro
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1291 goto Lskipline;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1292 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1293 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1294 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1295 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1296 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1297 tempstart = p;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1298
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1299 while (1)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1300 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1301 if (p >= pend)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1302 goto Ldone;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1303 if (!(isalnum(*p) || *p == '_'))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1304 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1305 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1306 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1307 templen = p - tempstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1308
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1309 while (1)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1310 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1311 if (p >= pend)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1312 goto Ldone;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1313 if (!(*p == ' ' || *p == '\t'))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1314 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1315 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1316 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1317
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1318 if (*p != '=')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1319 { if (namelen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1320 goto Ltext; // continuation of prev macro
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1321 goto Lskipline;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1322 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1323 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1324 if (p >= pend)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1325 goto Ldone;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1326
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1327 if (namelen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1328 { // Output existing macro
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1329 L1:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1330 //printf("macro '%.*s' = '%.*s'\n", namelen, namestart, textlen, textstart);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1331 if (icmp("ESCAPES", namestart, namelen) == 0)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1332 parseEscapes(pescapetable, textstart, textlen);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1333 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1334 Macro::define(pmacrotable, namestart, namelen, textstart, textlen);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1335 namelen = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1336 if (p >= pend)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1337 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1338 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1339
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1340 namestart = tempstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1341 namelen = templen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1342
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1343 while (p < pend && (*p == ' ' || *p == '\t'))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1344 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1345 textstart = p;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1346
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1347 Ltext:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1348 while (p < pend && *p != '\n')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1349 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1350 textlen = p - textstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1351
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1352 // Remove trailing \r if there is one
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1353 if (p > m && p[-1] == '\r')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1354 textlen--;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1355
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1356 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1357 //printf("p = %p, pend = %p\n", p, pend);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1358
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1359 Lcont:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1360 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1361
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1362 Lskipline:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1363 // Ignore this line
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1364 while (p < pend && *p++ != '\n')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1365 ;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1366 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1367 Ldone:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1368 if (namelen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1369 goto L1; // write out last one
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1370 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1371
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1372 /**************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1373 * Parse escapes of the form:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1374 * /c/string/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1375 * where c is a single character.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1376 * Multiple escapes can be separated
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1377 * by whitespace and/or commas.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1378 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1379
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1380 void DocComment::parseEscapes(Escape **pescapetable, unsigned char *textstart, unsigned textlen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1381 { Escape *escapetable = *pescapetable;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1382
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1383 if (!escapetable)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1384 { escapetable = new Escape;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1385 *pescapetable = escapetable;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1386 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1387 unsigned char *p = textstart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1388 unsigned char *pend = p + textlen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1389
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1390 while (1)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1391 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1392 while (1)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1393 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1394 if (p + 4 >= pend)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1395 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1396 if (!(*p == ' ' || *p == '\t' || *p == '\n' || *p == ','))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1397 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1398 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1399 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1400 if (p[0] != '/' || p[2] != '/')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1401 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1402 unsigned char c = p[1];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1403 p += 3;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1404 unsigned char *start = p;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1405 while (1)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1406 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1407 if (p >= pend)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1408 return;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1409 if (*p == '/')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1410 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1411 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1412 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1413 size_t len = p - start;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1414 char *s = (char *)memcpy(mem.malloc(len + 1), start, len);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1415 s[len] = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1416 escapetable->strings[c] = s;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1417 //printf("%c = '%s'\n", c, s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1418 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1419 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1420 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1421
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1422
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1423 /******************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1424 * Compare 0-terminated string with length terminated string.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1425 * Return < 0, ==0, > 0
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1426 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1427
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
1428 int cmp(const char *stringz, void *s, size_t slen)
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1429 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1430 size_t len1 = strlen(stringz);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1431
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1432 if (len1 != slen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1433 return len1 - slen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1434 return memcmp(stringz, s, slen);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1435 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1436
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
1437 int icmp(const char *stringz, void *s, size_t slen)
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1438 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1439 size_t len1 = strlen(stringz);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1440
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1441 if (len1 != slen)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1442 return len1 - slen;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1443 return memicmp(stringz, (char *)s, slen);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1444 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1445
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1446 /*****************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1447 * Return !=0 if comment consists entirely of "ditto".
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1448 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1449
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1450 int isDitto(unsigned char *comment)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1451 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1452 if (comment)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1453 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1454 unsigned char *p = skipwhitespace(comment);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1455
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1456 if (memicmp((char *)p, "ditto", 5) == 0 && *skipwhitespace(p + 5) == 0)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1457 return 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1458 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1459 return 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1460 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1461
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1462 /**********************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1463 * Skip white space.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1464 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1465
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1466 unsigned char *skipwhitespace(unsigned char *p)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1467 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1468 for (; 1; p++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1469 { switch (*p)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1470 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1471 case ' ':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1472 case '\t':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1473 case '\n':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1474 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1475 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1476 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1477 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1478 return p;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1479 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1480
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1481
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1482 /************************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1483 * Scan forward to one of:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1484 * start of identifier
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1485 * beginning of next line
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1486 * end of buf
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1487 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1488
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1489 unsigned skiptoident(OutBuffer *buf, unsigned i)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1490 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1491 for (; i < buf->offset; i++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1492 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1493 // BUG: handle unicode alpha's
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1494 unsigned char c = buf->data[i];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1495 if (isalpha(c) || c == '_')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1496 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1497 if (c == '\n')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1498 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1499 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1500 return i;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1501 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1502
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1503 /************************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1504 * Scan forward past end of identifier.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1505 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1506
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1507 unsigned skippastident(OutBuffer *buf, unsigned i)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1508 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1509 for (; i < buf->offset; i++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1510 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1511 // BUG: handle unicode alpha's
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1512 unsigned char c = buf->data[i];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1513 if (!(isalnum(c) || c == '_'))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1514 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1515 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1516 return i;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1517 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1518
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1519
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1520 /************************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1521 * Scan forward past URL starting at i.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1522 * We don't want to highlight parts of a URL.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1523 * Returns:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1524 * i if not a URL
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1525 * index just past it if it is a URL
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1526 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1527
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1528 unsigned skippastURL(OutBuffer *buf, unsigned i)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1529 { unsigned length = buf->offset - i;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1530 unsigned char *p = &buf->data[i];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1531 unsigned j;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1532 unsigned sawdot = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1533
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1534 if (length > 7 && memicmp((char *)p, "http://", 7) == 0)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1535 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1536 j = 7;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1537 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1538 else if (length > 8 && memicmp((char *)p, "https://", 8) == 0)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1539 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1540 j = 8;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1541 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1542 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1543 goto Lno;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1544
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1545 for (; j < length; j++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1546 { unsigned char c = p[j];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1547 if (isalnum(c))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1548 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1549 if (c == '-' || c == '_' || c == '?' ||
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1550 c == '=' || c == '%' || c == '&' ||
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1551 c == '/' || c == '+' || c == '#' ||
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1552 c == '~')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1553 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1554 if (c == '.')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1555 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1556 sawdot = 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1557 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1558 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1559 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1560 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1561 if (sawdot)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1562 return i + j;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1563
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1564 Lno:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1565 return i;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1566 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1567
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1568
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1569 /****************************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1570 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1571
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1572 int isKeyword(unsigned char *p, unsigned len)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1573 {
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
1574 static const char *table[] = { "true", "false", "null" };
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1575
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1576 for (int i = 0; i < sizeof(table) / sizeof(table[0]); i++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1577 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1578 if (cmp(table[i], p, len) == 0)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1579 return 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1580 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1581 return 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1582 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1583
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1584 /****************************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1585 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1586
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1587 Argument *isFunctionParameter(Dsymbol *s, unsigned char *p, unsigned len)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1588 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1589 FuncDeclaration *f = s->isFuncDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1590
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1591 /* f->type may be NULL for template members.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1592 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1593 if (f && f->type)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1594 {
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
1595 TypeFunction *tf;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
1596 if (f->originalType)
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
1597 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
1598 tf = (TypeFunction *)f->originalType;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
1599 }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
1600 else
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
1601 tf = (TypeFunction *)f->type;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1602
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1603 if (tf->parameters)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1604 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1605 for (size_t k = 0; k < tf->parameters->dim; k++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1606 { Argument *arg = (Argument *)tf->parameters->data[k];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1607
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1608 if (arg->ident && cmp(arg->ident->toChars(), p, len) == 0)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1609 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1610 return arg;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1611 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1612 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1613 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1614 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1615 return NULL;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1616 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1617
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1618 /**************************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1619 * Highlight text section.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1620 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1621
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1622 void highlightText(Scope *sc, Dsymbol *s, OutBuffer *buf, unsigned offset)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1623 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1624 //printf("highlightText()\n");
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
1625 const char *sid = s->ident->toChars();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1626 FuncDeclaration *f = s->isFuncDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1627 unsigned char *p;
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
1628 const char *se;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1629
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1630 int leadingBlank = 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1631 int inCode = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1632 int inComment = 0; // in <!-- ... --> comment
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1633 unsigned iCodeStart; // start of code section
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1634
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1635 unsigned iLineStart = offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1636
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1637 for (unsigned i = offset; i < buf->offset; i++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1638 { unsigned char c = buf->data[i];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1639
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1640 Lcont:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1641 switch (c)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1642 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1643 case ' ':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1644 case '\t':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1645 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1646
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1647 case '\n':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1648 if (sc && !inCode && i == iLineStart && i + 1 < buf->offset) // if "\n\n"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1649 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1650 static char blankline[] = "$(DDOC_BLANKLINE)\n";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1651
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1652 i = buf->insert(i, blankline, sizeof(blankline) - 1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1653 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1654 leadingBlank = 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1655 iLineStart = i + 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1656 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1657
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1658 case '<':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1659 leadingBlank = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1660 if (inCode)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1661 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1662 p = &buf->data[i];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1663
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1664 // Skip over comments
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1665 if (p[1] == '!' && p[2] == '-' && p[3] == '-')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1666 { unsigned j = i + 4;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1667 p += 4;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1668 while (1)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1669 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1670 if (j == buf->offset)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1671 goto L1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1672 if (p[0] == '-' && p[1] == '-' && p[2] == '>')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1673 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1674 i = j + 2; // place on closing '>'
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1675 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1676 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1677 j++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1678 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1679 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1680 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1681 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1682
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1683 // Skip over HTML tag
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1684 if (isalpha(p[1]) || (p[1] == '/' && isalpha(p[2])))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1685 { unsigned j = i + 2;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1686 p += 2;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1687 while (1)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1688 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1689 if (j == buf->offset)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1690 goto L1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1691 if (p[0] == '>')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1692 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1693 i = j; // place on closing '>'
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1694 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1695 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1696 j++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1697 p++;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1698 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1699 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1700 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1701
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1702 L1:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1703 // Replace '<' with '&lt;' character entity
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1704 se = Escape::escapeChar('<');
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1705 if (se)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1706 { size_t len = strlen(se);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1707 buf->remove(i, 1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1708 i = buf->insert(i, se, len);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1709 i--; // point to ';'
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1710 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1711 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1712
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1713 case '>':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1714 leadingBlank = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1715 if (inCode)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1716 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1717 // Replace '>' with '&gt;' character entity
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1718 se = Escape::escapeChar('>');
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1719 if (se)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1720 { size_t len = strlen(se);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1721 buf->remove(i, 1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1722 i = buf->insert(i, se, len);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1723 i--; // point to ';'
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1724 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1725 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1726
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1727 case '&':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1728 leadingBlank = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1729 if (inCode)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1730 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1731 p = &buf->data[i];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1732 if (p[1] == '#' || isalpha(p[1]))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1733 break; // already a character entity
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1734 // Replace '&' with '&amp;' character entity
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1735 se = Escape::escapeChar('&');
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1736 if (se)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1737 { size_t len = strlen(se);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1738 buf->remove(i, 1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1739 i = buf->insert(i, se, len);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1740 i--; // point to ';'
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1741 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1742 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1743
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1744 case '-':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1745 /* A line beginning with --- delimits a code section.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1746 * inCode tells us if it is start or end of a code section.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1747 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1748 if (leadingBlank)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1749 { int istart = i;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1750 int eollen = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1751
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1752 leadingBlank = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1753 while (1)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1754 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1755 ++i;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1756 if (i >= buf->offset)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1757 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1758 c = buf->data[i];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1759 if (c == '\n')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1760 { eollen = 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1761 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1762 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1763 if (c == '\r')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1764 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1765 eollen = 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1766 if (i + 1 >= buf->offset)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1767 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1768 if (buf->data[i + 1] == '\n')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1769 { eollen = 2;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1770 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1771 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1772 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1773 // BUG: handle UTF PS and LS too
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1774 if (c != '-')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1775 goto Lcont;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1776 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1777 if (i - istart < 3)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1778 goto Lcont;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1779
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1780 // We have the start/end of a code section
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1781
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1782 // Remove the entire --- line, including blanks and \n
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1783 buf->remove(iLineStart, i - iLineStart + eollen);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1784 i = iLineStart;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1785
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1786 if (inCode)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1787 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1788 inCode = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1789 // The code section is from iCodeStart to i
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1790 OutBuffer codebuf;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1791
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1792 codebuf.write(buf->data + iCodeStart, i - iCodeStart);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1793 codebuf.writeByte(0);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1794 highlightCode2(sc, s, &codebuf, 0);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1795 buf->remove(iCodeStart, i - iCodeStart);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1796 i = buf->insert(iCodeStart, codebuf.data, codebuf.offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1797 i = buf->insert(i, ")\n", 2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1798 i--;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1799 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1800 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1801 { static char pre[] = "$(D_CODE \n";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1802
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1803 inCode = 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1804 i = buf->insert(i, pre, sizeof(pre) - 1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1805 iCodeStart = i;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1806 i--; // place i on >
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1807 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1808 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1809 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1810
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1811 default:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1812 leadingBlank = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1813 if (sc && !inCode && (isalpha(c) || c == '_'))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1814 { unsigned j;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1815
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1816 j = skippastident(buf, i);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1817 if (j > i)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1818 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1819 unsigned k = skippastURL(buf, i);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1820 if (k > i)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1821 { i = k - 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1822 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1823 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1824
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1825 if (buf->data[i] == '_') // leading '_' means no highlight
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1826 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1827 buf->remove(i, 1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1828 i = j - 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1829 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1830 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1831 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1832 if (cmp(sid, buf->data + i, j - i) == 0)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1833 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1834 i = buf->bracket(i, "$(DDOC_PSYMBOL ", j, ")") - 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1835 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1836 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1837 else if (isKeyword(buf->data + i, j - i))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1838 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1839 i = buf->bracket(i, "$(DDOC_KEYWORD ", j, ")") - 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1840 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1841 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1842 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1843 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1844 if (f && isFunctionParameter(f, buf->data + i, j - i))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1845 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1846 //printf("highlighting arg '%s', i = %d, j = %d\n", arg->ident->toChars(), i, j);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1847 i = buf->bracket(i, "$(DDOC_PARAM ", j, ")") - 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1848 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1849 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1850 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1851 i = j - 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1852 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1853 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1854 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1855 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1856 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1857 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1858 Ldone:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1859 ;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1860 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1861
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1862 /**************************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1863 * Highlight code for DDOC section.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1864 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1865
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1866 void highlightCode(Scope *sc, Dsymbol *s, OutBuffer *buf, unsigned offset)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1867 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1868 char *sid = s->ident->toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1869 FuncDeclaration *f = s->isFuncDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1870
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1871 //printf("highlightCode(s = '%s', kind = %s)\n", sid, s->kind());
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1872 for (unsigned i = offset; i < buf->offset; i++)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1873 { unsigned char c = buf->data[i];
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
1874 const char *se;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1875
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1876 se = Escape::escapeChar(c);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1877 if (se)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1878 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1879 size_t len = strlen(se);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1880 buf->remove(i, 1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1881 i = buf->insert(i, se, len);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1882 i--; // point to ';'
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1883 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1884 else if (isalpha(c) || c == '_')
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1885 { unsigned j;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1886
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1887 j = skippastident(buf, i);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1888 if (j > i)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1889 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1890 if (cmp(sid, buf->data + i, j - i) == 0)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1891 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1892 i = buf->bracket(i, "$(DDOC_PSYMBOL ", j, ")") - 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1893 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1894 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1895 else if (f)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1896 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1897 if (isFunctionParameter(f, buf->data + i, j - i))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1898 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1899 //printf("highlighting arg '%s', i = %d, j = %d\n", arg->ident->toChars(), i, j);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1900 i = buf->bracket(i, "$(DDOC_PARAM ", j, ")") - 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1901 continue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1902 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1903 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1904 i = j - 1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1905 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1906 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1907 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1908 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1909
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1910 /****************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1911 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1912
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1913 void highlightCode3(OutBuffer *buf, unsigned char *p, unsigned char *pend)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1914 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1915 for (; p < pend; p++)
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
1916 { const char *s = Escape::escapeChar(*p);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1917 if (s)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1918 buf->writestring(s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1919 else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1920 buf->writeByte(*p);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1921 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1922 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1923
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1924 /**************************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1925 * Highlight code for CODE section.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1926 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1927
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1928
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1929 void highlightCode2(Scope *sc, Dsymbol *s, OutBuffer *buf, unsigned offset)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1930 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1931 char *sid = s->ident->toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1932 FuncDeclaration *f = s->isFuncDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1933 unsigned errorsave = global.errors;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1934 Lexer lex(NULL, buf->data, 0, buf->offset - 1, 0, 1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1935 Token tok;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1936 OutBuffer res;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1937 unsigned char *lastp = buf->data;
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
1938 const char *highlight;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1939
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1940 //printf("highlightCode2('%.*s')\n", buf->offset - 1, buf->data);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1941 res.reserve(buf->offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1942 while (1)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1943 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1944 lex.scan(&tok);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1945 highlightCode3(&res, lastp, tok.ptr);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1946 highlight = NULL;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1947 switch (tok.value)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1948 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1949 case TOKidentifier:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1950 if (!sc)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1951 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1952 if (cmp(sid, tok.ptr, lex.p - tok.ptr) == 0)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1953 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1954 highlight = "$(D_PSYMBOL ";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1955 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1956 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1957 else if (f)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1958 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1959 if (isFunctionParameter(f, tok.ptr, lex.p - tok.ptr))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1960 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1961 //printf("highlighting arg '%s', i = %d, j = %d\n", arg->ident->toChars(), i, j);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1962 highlight = "$(D_PARAM ";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1963 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1964 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1965 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1966 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1967
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1968 case TOKcomment:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1969 highlight = "$(D_COMMENT ";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1970 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1971
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1972 case TOKstring:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1973 highlight = "$(D_STRING ";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1974 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1975
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1976 default:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1977 if (tok.isKeyword())
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1978 highlight = "$(D_KEYWORD ";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1979 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1980 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1981 if (highlight)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1982 res.writestring(highlight);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1983 highlightCode3(&res, tok.ptr, lex.p);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1984 if (highlight)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1985 res.writeByte(')');
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1986 if (tok.value == TOKeof)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1987 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1988 lastp = lex.p;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1989 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1990 buf->setsize(offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1991 buf->write(&res);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1992 global.errors = errorsave;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1993 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1994
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1995 /***************************************
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1996 * Find character string to replace c with.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1997 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1998
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
1999 const char *Escape::escapeChar(unsigned c)
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 571
diff changeset
2000 { const char *s;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2001
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2002 switch (c)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2003 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2004 case '<':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2005 s = "&lt;";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2006 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2007 case '>':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2008 s = "&gt;";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2009 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2010 case '&':
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2011 s = "&amp;";
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2012 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2013 default:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2014 s = NULL;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2015 break;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2016 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2017 return s;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2018 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2019