annotate trunk/src/cmd/Generate.d @ 363:2b387a3c6b58

- Added package cmd. - Moved code from main.d to cmd.Generate. - Added command stats/statistics (implemented in cmd.Statistics.)
author aziz
date Thu, 30 Aug 2007 12:02:04 +0000
parents
children 1059295c2727
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
1 /++
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
2 Author: Aziz Köksal
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
3 License: GPL3
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
4 +/
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
5 module cmd.Generate;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
6 import dil.SyntaxTree;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
7 import dil.Token;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
8 import dil.Parser, dil.Lexer;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
9 import dil.File;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
10 import std.stdio;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
11
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
12 enum DocOption
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
13 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
14 Tokens,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
15 Syntax = 1<<1,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
16 HTML = 1<<2,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
17 XML = 1<<3
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
18 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
19
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
20 char[] xml_escape(char[] text)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
21 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
22 char[] result;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
23 foreach(c; text)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
24 switch(c)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
25 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
26 case '<': result ~= "&lt;"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
27 case '>': result ~= "&gt;"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
28 case '&': result ~= "&amp;"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
29 default: result ~= c;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
30 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
31 return result;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
32 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
33
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
34 char[] getShortClassName(Node n)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
35 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
36 static char[][] name_table;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
37 if (name_table is null)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
38 name_table = new char[][NodeKind.max+1];
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
39 char[] name = name_table[n.kind];
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
40 if (name !is null)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
41 return name;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
42
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
43 alias std.string.find find;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
44 name = n.classinfo.name;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
45 name = name[find(name, ".")+1 .. $]; // Remove package name
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
46 name = name[find(name, ".")+1 .. $]; // Remove module name
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
47 char[] remove;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
48 switch (n.category)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
49 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
50 alias NodeCategory NC;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
51 case NC.Declaration: remove = "Declaration"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
52 case NC.Statement:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
53 if (n.kind == NodeKind.Statements)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
54 return name;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
55 remove = "Statement";
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
56 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
57 case NC.Expression: remove = "Expression"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
58 case NC.Type: remove = "Type"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
59 case NC.Other: return name;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
60 default:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
61 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
62 // Remove common suffix.
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
63 auto idx = find(name, remove);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
64 if (idx != -1)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
65 name = name[0 .. idx];
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
66 // Store the name.
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
67 name_table[n.kind] = name;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
68 return name;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
69 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
70
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
71 enum DocPart
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
72 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
73 Head,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
74 CompBegin,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
75 CompEnd,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
76 Error,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
77 SyntaxBegin,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
78 SyntaxEnd,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
79 SrcBegin,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
80 SrcEnd,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
81 Tail,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
82 // Tokens:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
83 Identifier,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
84 Comment,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
85 StringLiteral,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
86 CharLiteral,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
87 Operator,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
88 LorG,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
89 LessEqual,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
90 GreaterEqual,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
91 AndLogical,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
92 OrLogical,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
93 NotEqual,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
94 Not,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
95 Number,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
96 Bracket,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
97 SpecialToken,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
98 Shebang,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
99 Keyword,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
100 HLineBegin,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
101 HLineEnd,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
102 Filespec,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
103 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
104
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
105 auto html_tags = [
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
106 // Head
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
107 `<html>`\n
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
108 `<head>`\n
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
109 `<meta http-equiv="Content-Type" content="text/html; charset=utf-8">`\n
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
110 `<link href="dil_html.css" rel="stylesheet" type="text/css">`\n
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
111 `</head>`\n
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
112 `<body>`[],
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
113 // CompBegin
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
114 `<div class="compilerinfo">`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
115 // CompEnd
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
116 `</div>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
117 // Error
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
118 `<p class="error %s">%s(%d)%s: %s</p>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
119 // SyntaxBegin
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
120 `<span class="%s %s">`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
121 // SyntaxEnd
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
122 `</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
123 // SrcBegin
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
124 `<pre class="sourcecode">`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
125 // SrcEnd
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
126 `</pre>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
127 // Tail
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
128 `</html>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
129 // Identifier
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
130 `<span class="i">%s</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
131 // Comment
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
132 `<span class="c%s">%s</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
133 // StringLiteral
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
134 `<span class="sl">%s</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
135 // CharLiteral
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
136 `<span class="cl">%s</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
137 // Operator
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
138 `<span class="op">%s</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
139 // LorG
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
140 `<span class="oplg">&lt;&gt;</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
141 // LessEqual
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
142 `<span class="ople">&lt;=</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
143 // GreaterEqual
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
144 `<span class="opge">&gt;=</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
145 // AndLogical
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
146 `<span class="opaa">&amp;&amp;</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
147 // OrLogical
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
148 `<span class="opoo">||</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
149 // NotEqual
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
150 `<span class="opne">!=</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
151 // Not
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
152 `<span class="opn">!</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
153 // Number
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
154 `<span class="n">%s</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
155 // Bracket
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
156 `<span class="br">%s</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
157 // SpecialToken
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
158 `<span class="st">%s</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
159 // Shebang
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
160 `<span class="shebang">%s</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
161 // Keyword
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
162 `<span class="k">%s</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
163 // HLineBegin
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
164 `<span class="hl">#line`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
165 // HLineEnd
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
166 "</span>",
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
167 // Filespec
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
168 `<span class="fs">%s</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
169 ];
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
170
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
171 auto xml_tags = [
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
172 // Head
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
173 `<?xml version="1.0"?>`\n
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
174 `<?xml-stylesheet href="dil_xml.css" type="text/css"?>`\n
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
175 `<root>`[],
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
176 // CompBegin
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
177 `<compilerinfo>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
178 // CompEnd
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
179 `</compilerinfo>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
180 // Error
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
181 `<error t="%s">%s(%d)%s: %s</error>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
182 // SyntaxBegin
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
183 `<%s t="%s">`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
184 // SyntaxEnd
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
185 `</%s>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
186 // SrcBegin
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
187 `<sourcecode>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
188 // SrcEnd
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
189 `</sourcecode>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
190 // Tail
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
191 `</root>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
192 // Identifier
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
193 "<i>%s</i>",
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
194 // Comment
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
195 `<c t="%s">%s</c>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
196 // StringLiteral
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
197 "<sl>%s</sl>",
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
198 // CharLiteral
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
199 "<cl>%s</cl>",
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
200 // Operator
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
201 "<op>%s</op>",
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
202 // LorG
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
203 `<op t="lg">&lt;&gt;</op>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
204 // LessEqual
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
205 `<op t="le">&lt;=</op>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
206 // GreaterEqual
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
207 `<op t="ge">&gt;=</op>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
208 // AndLogical
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
209 `<op t="aa">&amp;&amp;</op>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
210 // OrLogical
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
211 `<op t="oo">||</op>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
212 // NotEqual
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
213 `<op t="ne">!=</op>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
214 // Not
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
215 `<op t="n">!</op>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
216 // Number
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
217 "<n>%s</n>",
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
218 // Bracket
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
219 "<br>%s</br>",
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
220 // SpecialToken
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
221 "<st>%s</st>",
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
222 // Shebang
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
223 "<shebang>%s</shebang>",
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
224 // Keyword
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
225 "<k>%s</k>",
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
226 // HLineBegin
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
227 "<hl>#line",
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
228 // HLineEnd
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
229 "</hl>",
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
230 // Filespec
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
231 "<fs>%s</fs>",
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
232 ];
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
233
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
234 static assert(html_tags.length == DocPart.max+1);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
235 static assert(xml_tags.length == DocPart.max+1);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
236
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
237 void syntaxToDoc(string fileName, DocOption options)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
238 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
239 auto tags = options & DocOption.HTML ? html_tags : xml_tags;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
240 auto sourceText = loadFile(fileName);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
241 auto parser = new Parser(sourceText, fileName);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
242 parser.start();
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
243 auto root = parser.parseModule();
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
244 auto lx = parser.lx;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
245
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
246 auto token = lx.head;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
247 char* end = lx.text.ptr;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
248
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
249 writefln(tags[DocPart.Head]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
250 // Output error messages.
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
251 if (lx.errors.length || parser.errors.length)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
252 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
253 writefln(tags[DocPart.CompBegin]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
254 foreach (error; lx.errors)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
255 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
256 writefln(tags[DocPart.Error], "L", lx.fileName, error.loc, "L", xml_escape(error.getMsg));
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
257 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
258 foreach (error; parser.errors)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
259 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
260 writefln(tags[DocPart.Error], "P", lx.fileName, error.loc, "P", xml_escape(error.getMsg));
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
261 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
262 writefln(tags[DocPart.CompEnd]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
263 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
264 writef(tags[DocPart.SrcBegin]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
265
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
266 Node[][Token*] beginNodes, endNodes;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
267
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
268 void populateAAs(Node[] nodes)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
269 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
270 foreach (node; nodes)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
271 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
272 auto begin = node.begin;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
273 if (begin)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
274 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
275 auto end = node.end;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
276 assert(end);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
277 beginNodes[begin] ~= node;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
278 endNodes[end] ~= node;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
279 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
280 if (node.children.length)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
281 populateAAs(node.children);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
282 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
283 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
284 populateAAs(root.children);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
285
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
286 char[] getTag(NodeCategory nc)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
287 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
288 char[] tag;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
289 switch (nc)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
290 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
291 alias NodeCategory NC;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
292 case NC.Declaration: tag = "d"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
293 case NC.Statement: tag = "s"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
294 case NC.Expression: tag = "e"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
295 case NC.Type: tag = "t"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
296 case NC.Other: tag = "o"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
297 default:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
298 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
299 return tag;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
300 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
301
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
302 // Traverse linked list and print tokens.
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
303 while (token.type != TOK.EOF)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
304 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
305 token = token.next;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
306
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
307 // Print whitespace between previous and current token.
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
308 if (end != token.start)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
309 writef("%s", end[0 .. token.start - end]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
310
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
311 Node[]* nodes = token in beginNodes;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
312
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
313 if (nodes)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
314 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
315 foreach (node; *nodes)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
316 writef(tags[DocPart.SyntaxBegin], getTag(node.category), getShortClassName(node));
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
317 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
318
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
319 printToken(token, tags);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
320
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
321 nodes = token in endNodes;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
322
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
323 if (nodes)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
324 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
325 foreach_reverse (node; *nodes)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
326 if (options & DocOption.HTML)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
327 writef(tags[DocPart.SyntaxEnd]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
328 else
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
329 writef(tags[DocPart.SyntaxEnd], getTag(node.category));
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
330 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
331
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
332 end = token.end;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
333 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
334 writef(tags[DocPart.SrcEnd], tags[DocPart.Tail]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
335 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
336
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
337 void tokensToDoc(string fileName, DocOption options)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
338 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
339 auto tags = options & DocOption.HTML ? html_tags : xml_tags;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
340 auto sourceText = loadFile(fileName);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
341 auto lx = new Lexer(sourceText, fileName);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
342
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
343 auto token = lx.getTokens();
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
344 char* end = lx.text.ptr;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
345
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
346 writefln(tags[DocPart.Head]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
347
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
348 if (lx.errors.length)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
349 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
350 writefln(tags[DocPart.CompBegin]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
351 foreach (error; lx.errors)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
352 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
353 writefln(tags[DocPart.Error], "L", lx.fileName, error.loc, "L", xml_escape(error.getMsg));
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
354 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
355 writefln(tags[DocPart.CompEnd]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
356 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
357 writef(tags[DocPart.SrcBegin]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
358
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
359 // Traverse linked list and print tokens.
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
360 while (token.type != TOK.EOF)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
361 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
362 token = token.next;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
364 // Print whitespace between previous and current token.
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
365 if (end != token.start)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
366 writef("%s", end[0 .. token.start - end]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
367 printToken(token, tags);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
368 end = token.end;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
369 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
370 writef(\n, tags[DocPart.SrcEnd], \n, tags[DocPart.Tail]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
371 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
372
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
373 void printToken(Token* token, string[] tags)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
374 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
375 alias DocPart DP;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
376 string srcText = xml_escape(token.srcText);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
377
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
378 switch(token.type)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
379 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
380 case TOK.Identifier:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
381 writef(tags[DP.Identifier], srcText);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
382 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
383 case TOK.Comment:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
384 string t;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
385 switch (token.start[1])
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
386 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
387 case '/': t = "l"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
388 case '*': t = "b"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
389 case '+': t = "n"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
390 default:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
391 assert(0);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
392 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
393 writef(tags[DP.Comment], t, srcText);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
394 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
395 case TOK.String:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
396 writef(tags[DP.StringLiteral], srcText);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
397 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
398 case TOK.CharLiteral, TOK.WCharLiteral, TOK.DCharLiteral:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
399 writef(tags[DP.CharLiteral], srcText);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
400 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
401 case TOK.Assign, TOK.Equal,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
402 TOK.Less, TOK.Greater,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
403 TOK.LShiftAssign, TOK.LShift,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
404 TOK.RShiftAssign, TOK.RShift,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
405 TOK.URShiftAssign, TOK.URShift,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
406 TOK.OrAssign, TOK.OrBinary,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
407 TOK.AndAssign, TOK.AndBinary,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
408 TOK.PlusAssign, TOK.PlusPlus, TOK.Plus,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
409 TOK.MinusAssign, TOK.MinusMinus, TOK.Minus,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
410 TOK.DivAssign, TOK.Div,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
411 TOK.MulAssign, TOK.Mul,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
412 TOK.ModAssign, TOK.Mod,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
413 TOK.XorAssign, TOK.Xor,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
414 TOK.CatAssign,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
415 TOK.Tilde,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
416 TOK.Unordered,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
417 TOK.UorE,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
418 TOK.UorG,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
419 TOK.UorGorE,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
420 TOK.UorL,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
421 TOK.UorLorE,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
422 TOK.LorEorG:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
423 writef(tags[DP.Operator], srcText);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
424 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
425 case TOK.LorG:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
426 writef(tags[DP.LorG]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
427 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
428 case TOK.LessEqual:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
429 writef(tags[DP.LessEqual]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
430 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
431 case TOK.GreaterEqual:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
432 writef(tags[DP.GreaterEqual]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
433 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
434 case TOK.AndLogical:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
435 writef(tags[DP.AndLogical]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
436 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
437 case TOK.OrLogical:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
438 writef(tags[DP.OrLogical]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
439 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
440 case TOK.NotEqual:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
441 writef(tags[DP.NotEqual]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
442 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
443 case TOK.Not:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
444 // Check if this is part of a template instantiation.
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
445 // TODO: comments aren't skipped.
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
446 if (token.prev.type == TOK.Identifier && token.next.type == TOK.LParen)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
447 goto default;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
448 writef(tags[DP.Not]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
449 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
450 case TOK.Int32, TOK.Int64, TOK.Uint32, TOK.Uint64,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
451 TOK.Float32, TOK.Float64, TOK.Float80,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
452 TOK.Imaginary32, TOK.Imaginary64, TOK.Imaginary80:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
453 writef(tags[DP.Number], srcText);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
454 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
455 case TOK.LParen, TOK.RParen, TOK.LBracket,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
456 TOK.RBracket, TOK.LBrace, TOK.RBrace:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
457 writef(tags[DP.Bracket], srcText);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
458 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
459 case TOK.Shebang:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
460 writef(tags[DP.Shebang], srcText);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
461 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
462 case TOK.HashLine:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
463 void printWS(char* start, char* end)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
464 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
465 if (start != end)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
466 writef(start[0 .. end - start]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
467 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
468 writef(tags[DP.HLineBegin]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
469 auto num = token.line_num;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
470 // Print whitespace between #line and number
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
471 auto ptr = token.start + "#line".length;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
472 printWS(ptr, num.start);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
473 printToken(num, tags);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
474 if (token.line_filespec)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
475 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
476 auto filespec = token.line_filespec;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
477 // Print whitespace between number and filespec
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
478 printWS(num.end, filespec.start);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
479 writef(tags[DP.Filespec], xml_escape(filespec.srcText));
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
480
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
481 ptr = filespec.end;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
482 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
483 else
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
484 ptr = num.end;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
485 // Print remaining whitespace
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
486 printWS(ptr, token.end);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
487 writef(tags[DP.HLineEnd]);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
488 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
489 default:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
490 if (token.isKeyword())
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
491 writef(tags[DP.Keyword], srcText);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
492 else if (token.isSpecialToken)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
493 writef(tags[DP.SpecialToken], srcText);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
494 else
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
495 writef("%s", srcText);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
496 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
497 }