annotate trunk/src/cmd/Generate.d @ 755:90668b83ae5e

Introduced new module dil.SourceText and class SourceText.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Wed, 13 Feb 2008 20:21:25 +0100
parents 51e9dfe27f20
children e4b60543c5e8
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;
578
c769bc239006 Moved Parser.d to new package 'parser'.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 576
diff changeset
6
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
7 import dil.ast.DefaultVisitor;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
8 import dil.ast.Node,
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
9 dil.ast.Declaration,
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
10 dil.ast.Statement,
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
11 dil.ast.Expression,
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
12 dil.ast.Types;
596
39fac5531b85 Moved dil.Token to dil.lexer.Token.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 582
diff changeset
13 import dil.lexer.Lexer;
578
c769bc239006 Moved Parser.d to new package 'parser'.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 576
diff changeset
14 import dil.parser.Parser;
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 752
diff changeset
15 import dil.SourceText;
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 752
diff changeset
16 import common;
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 752
diff changeset
17
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
18 import tango.io.Print;
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
19
582
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
20 /// Options for the generate command.
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
21 enum DocOption
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
22 {
392
bb935c6f9b7a Applied fixes and improvements to the Lexer class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 391
diff changeset
23 Empty,
bb935c6f9b7a Applied fixes and improvements to the Lexer class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 391
diff changeset
24 Tokens = 1,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
25 Syntax = 1<<1,
392
bb935c6f9b7a Applied fixes and improvements to the Lexer class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 391
diff changeset
26 HTML = 1<<2,
bb935c6f9b7a Applied fixes and improvements to the Lexer class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 391
diff changeset
27 XML = 1<<3
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
28 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
29
582
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
30 /// Executes the command.
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
31 void execute(string filePath, DocOption options)
364
1059295c2727 - Every command module has an execute method now.
aziz
parents: 363
diff changeset
32 {
392
bb935c6f9b7a Applied fixes and improvements to the Lexer class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 391
diff changeset
33 assert(options != DocOption.Empty);
364
1059295c2727 - Every command module has an execute method now.
aziz
parents: 363
diff changeset
34 if (options & DocOption.Syntax)
582
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
35 syntaxToDoc(filePath, Stdout, options);
364
1059295c2727 - Every command module has an execute method now.
aziz
parents: 363
diff changeset
36 else
582
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
37 tokensToDoc(filePath, Stdout, options);
364
1059295c2727 - Every command module has an execute method now.
aziz
parents: 363
diff changeset
38 }
1059295c2727 - Every command module has an execute method now.
aziz
parents: 363
diff changeset
39
582
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
40 /// Escapes the characters '<', '>' and '&' with named character entities.
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
41 char[] xml_escape(char[] text)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
42 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
43 char[] result;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
44 foreach(c; text)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
45 switch(c)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
46 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
47 case '<': result ~= "&lt;"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
48 case '>': result ~= "&gt;"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
49 case '&': result ~= "&amp;"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
50 default: result ~= c;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
51 }
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
52 if (result.length != text.length)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
53 return result;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
54 // Nothing escaped. Return original text.
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
55 delete result;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
56 return text;
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
57 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
58
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
59
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
60 /// Find object in subject and return position.
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
61 /// Returns -1 if no match was found.
581
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
62 /+int find(char[] subject, char[] object)
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
63 {
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
64 if (object.length > subject.length)
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
65 return -1;
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
66 foreach (i, c; subject)
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
67 {
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
68 if (c == object[0])
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
69 {
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
70 if (object.length > (subject.length - i))
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
71 return -1;
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
72 if (object == subject[i..i+object.length])
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
73 return i;
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
74 }
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
75 }
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
76 return -1;
581
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
77 }+/
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
78
582
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
79 /++
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
80 Find the last occurrence of object in subject.
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
81 Returns the index if found, or -1 if not.
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
82 +/
581
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
83 int rfind(char[] subject, char object)
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
84 {
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
85 foreach_reverse(i, c; subject)
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
86 if (c == object)
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
87 return i;
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
88 return -1;
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
89 }
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
90
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
91 /// Returns: the short class name of an instance descending from Node.
581
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
92 char[] getShortClassName(Node node)
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
93 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
94 static char[][] name_table;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
95 if (name_table is null)
581
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
96 name_table = new char[][NodeKind.max+1]; // Create a new table.
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
97 // Look up in table.
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
98 char[] name = name_table[node.kind];
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
99 if (name !is null)
581
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
100 return name; // Return cached name.
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
101
582
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
102 name = node.classinfo.name; // Get the fully qualified name of the class.
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
103 name = name[rfind(name, '.')+1 .. $]; // Remove package and module name.
581
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
104
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
105 uint suffixLength;
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
106 switch (node.category)
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
107 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
108 alias NodeCategory NC;
485
ea8c7459f1c4 Changed a lot of things in the Lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 422
diff changeset
109 case NC.Declaration:
581
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
110 suffixLength = "Declaration".length;
485
ea8c7459f1c4 Changed a lot of things in the Lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 422
diff changeset
111 break;
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
112 case NC.Statement:
682
7541c64fc423 Renamed FunctionBody, CatchBody and FinallyBody.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 681
diff changeset
113 suffixLength = "Statement".length;
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
114 break;
581
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
115 case NC.Expression:
695
170ddcdc9711 Renamed VoidInitializer, ArrayInitializer and StructInitializer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 682
diff changeset
116 suffixLength = "Expression".length;
581
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
117 break;
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
118 case NC.Type:
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
119 suffixLength = "Type".length;
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
120 break;
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
121 case NC.Other:
640
05645f5613c1 Added an error message.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 619
diff changeset
122 break;
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
123 default:
640
05645f5613c1 Added an error message.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 619
diff changeset
124 assert(0);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
125 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
126 // Remove common suffix.
581
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
127 name = name[0 .. $ - suffixLength];
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
128 // Store the name in the table.
61f9784aaf2a Improved function getShortClassName().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
129 name_table[node.kind] = name;
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
130 return name;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
131 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
132
582
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
133 /// Indices into the XML and HTML tag arrays.
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
134 enum DocPart
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
135 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
136 Head,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
137 CompBegin,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
138 CompEnd,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
139 Error,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
140 SyntaxBegin,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
141 SyntaxEnd,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
142 SrcBegin,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
143 SrcEnd,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
144 Tail,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
145 // Tokens:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
146 Identifier,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
147 Comment,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
148 StringLiteral,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
149 CharLiteral,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
150 Operator,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
151 LorG,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
152 LessEqual,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
153 GreaterEqual,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
154 AndLogical,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
155 OrLogical,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
156 NotEqual,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
157 Not,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
158 Number,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
159 Bracket,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
160 SpecialToken,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
161 Shebang,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
162 Keyword,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
163 HLineBegin,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
164 HLineEnd,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
165 Filespec,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
166 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
167
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
168 auto html_tags = [
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
169 // Head
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
170 `<html>`\n
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
171 `<head>`\n
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
172 `<meta http-equiv="Content-Type" content="text/html; charset=utf-8">`\n
598
4ba8157bde1f Renamed dil_html.css/dil_xml.css to html.css/xml.css.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
173 `<link href="html.css" rel="stylesheet" type="text/css">`\n
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
174 `</head>`\n
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
175 `<body>`[],
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
176 // CompBegin
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
177 `<div class="compilerinfo">`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
178 // CompEnd
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
179 `</div>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
180 // Error
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
181 `<p class="error {0}">{1}({2}){3}: {4}</p>`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
182 // SyntaxBegin
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
183 `<span class="{0} {1}">`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
184 // SyntaxEnd
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
185 `</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
186 // SrcBegin
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
187 `<pre class="sourcecode">`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
188 // SrcEnd
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
189 `</pre>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
190 // Tail
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
191 `</html>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
192 // Identifier
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
193 `<span class="i">{0}</span>`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
194 // Comment
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
195 `<span class="c{0}">{1}</span>`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
196 // StringLiteral
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
197 `<span class="sl">{0}</span>`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
198 // CharLiteral
709
7e7c85235673 Changed CSS class .cl to .chl.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 695
diff changeset
199 `<span class="chl">{0}</span>`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
200 // Operator
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
201 `<span class="op">{0}</span>`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
202 // LorG
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
203 `<span class="oplg">&lt;&gt;</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
204 // LessEqual
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
205 `<span class="ople">&lt;=</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
206 // GreaterEqual
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
207 `<span class="opge">&gt;=</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
208 // AndLogical
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
209 `<span class="opaa">&amp;&amp;</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
210 // OrLogical
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
211 `<span class="opoo">||</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
212 // NotEqual
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
213 `<span class="opne">!=</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
214 // Not
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
215 `<span class="opn">!</span>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
216 // Number
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
217 `<span class="n">{0}</span>`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
218 // Bracket
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
219 `<span class="br">{0}</span>`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
220 // SpecialToken
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
221 `<span class="st">{0}</span>`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
222 // Shebang
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
223 `<span class="shebang">{0}</span>`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
224 // Keyword
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
225 `<span class="k">{0}</span>`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
226 // HLineBegin
388
ae154eceba65 Applied some fixes to scanning and printing #line tokens.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 379
diff changeset
227 `<span class="hl">`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
228 // HLineEnd
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
229 "</span>",
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
230 // Filespec
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
231 `<span class="fs">{0}</span>`,
363
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 auto xml_tags = [
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
235 // Head
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
236 `<?xml version="1.0"?>`\n
598
4ba8157bde1f Renamed dil_html.css/dil_xml.css to html.css/xml.css.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
237 `<?xml-stylesheet href="xml.css" type="text/css"?>`\n
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
238 `<root>`[],
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
239 // CompBegin
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
240 `<compilerinfo>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
241 // CompEnd
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
242 `</compilerinfo>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
243 // Error
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
244 `<error t="{0}">{1}({2}){3}: {4}</error>`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
245 // SyntaxBegin
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
246 `<{0} t="{1}">`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
247 // SyntaxEnd
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
248 `</{0}>`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
249 // SrcBegin
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
250 `<sourcecode>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
251 // SrcEnd
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
252 `</sourcecode>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
253 // Tail
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
254 `</root>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
255 // Identifier
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
256 "<i>{0}</i>",
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
257 // Comment
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
258 `<c t="{0}">{1}</c>`,
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
259 // StringLiteral
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
260 "<sl>{0}</sl>",
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
261 // CharLiteral
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
262 "<cl>{0}</cl>",
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
263 // Operator
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
264 "<op>{0}</op>",
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
265 // LorG
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
266 `<op t="lg">&lt;&gt;</op>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
267 // LessEqual
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
268 `<op t="le">&lt;=</op>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
269 // GreaterEqual
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
270 `<op t="ge">&gt;=</op>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
271 // AndLogical
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
272 `<op t="aa">&amp;&amp;</op>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
273 // OrLogical
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
274 `<op t="oo">||</op>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
275 // NotEqual
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
276 `<op t="ne">!=</op>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
277 // Not
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
278 `<op t="n">!</op>`,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
279 // Number
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
280 "<n>{0}</n>",
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
281 // Bracket
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
282 "<br>{0}</br>",
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
283 // SpecialToken
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
284 "<st>{0}</st>",
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
285 // Shebang
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
286 "<shebang>{0}</shebang>",
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
287 // Keyword
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
288 "<k>{0}</k>",
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
289 // HLineBegin
388
ae154eceba65 Applied some fixes to scanning and printing #line tokens.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 379
diff changeset
290 "<hl>",
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
291 // HLineEnd
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
292 "</hl>",
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
293 // Filespec
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
294 "<fs>{0}</fs>",
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
295 ];
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
296
582
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
297 // The size of the arrays must equal the number of members in enum DocPart.
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
298 static assert(html_tags.length == DocPart.max+1);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
299 static assert(xml_tags.length == DocPart.max+1);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
300
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
301 /// Extended token structure.
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
302 struct TokenEx
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
303 {
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
304 Token* token; /// The lexer token.
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
305 Node[] beginNodes; /// beginNodes[n].begin == token
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
306 Node[] endNodes; /// endNodes[n].end == token
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
307 }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
308
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
309 /// Builds an array of TokenEx items.
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
310 class TokenExBuilder : DefaultVisitor
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
311 {
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
312 private TokenEx*[Token*] tokenTable;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
313
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
314 TokenEx[] build(Node root, Token* first)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
315 {
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
316 Token* token = first;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
317
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
318 uint count;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
319 while (token)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
320 {
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
321 count++;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
322 token = token.next;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
323 }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
324
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
325 auto toks = new TokenEx[count];
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
326 token = first;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
327 foreach (ref tokEx; toks)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
328 {
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
329 tokEx.token = token;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
330 if (!token.isWhitespace)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
331 tokenTable[token] = &tokEx;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
332 token = token.next;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
333 }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
334
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
335 super.visitN(root);
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
336 tokenTable = null;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
337 return toks;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
338 }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
339
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
340 TokenEx* getTokenEx()(Token* t)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
341 {
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
342 auto p = t in tokenTable;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
343 assert(p, t.srcText~" is not in tokenTable");
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
344 return *p;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
345 }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
346
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
347 void push()(Node n)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
348 {
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
349 auto begin = n.begin;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
350 if (begin)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
351 { assert(n.end);
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
352 auto txbegin = getTokenEx(begin);
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
353 auto txend = getTokenEx(n.end);
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
354 txbegin.beginNodes ~= n;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
355 txend.endNodes ~= n;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
356 }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
357 }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
358
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
359 // Override dispatch functions.
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
360 override:
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
361 Declaration visitD(Declaration n)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
362 { return push(n), super.visitD(n); }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
363 Statement visitS(Statement n)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
364 { return push(n), super.visitS(n); }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
365 Expression visitE(Expression n)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
366 { return push(n), super.visitE(n); }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
367 TypeNode visitT(TypeNode n)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
368 { return push(n), super.visitT(n); }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
369 Node visitN(Node n)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
370 { return push(n), super.visitN(n); }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
371 }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
372
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
373 char getTag(NodeCategory nc)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
374 {
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
375 char tag;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
376 switch (nc)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
377 {
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
378 alias NodeCategory NC;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
379 case NC.Declaration: tag = 'd'; break;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
380 case NC.Statement: tag = 's'; break;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
381 case NC.Expression: tag = 'e'; break;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
382 case NC.Type: tag = 't'; break;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
383 case NC.Other: tag = 'o'; break;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
384 default:
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
385 assert(0);
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
386 }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
387 return tag;
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
388 }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
389
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
390 void printErrors(Lexer lx, string[] tags, Print!(char) print)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
391 {
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
392 foreach (error; lx.errors)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
393 {
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
394 print.formatln(tags[DocPart.Error], "L", error.filePath, Format("{0},{1}", error.loc, error.col), "L", xml_escape(error.getMsg));
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
395 }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
396 }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
397
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
398 void printErrors(Parser parser, string[] tags, Print!(char) print)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
399 {
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
400 foreach (error; parser.errors)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
401 {
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
402 print.formatln(tags[DocPart.Error], "P", error.filePath, Format("{0},{1}", error.loc, error.col), "P", xml_escape(error.getMsg));
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
403 }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
404 }
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
405
582
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
406 void syntaxToDoc(string filePath, Print!(char) print, DocOption options)
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
407 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
408 auto tags = options & DocOption.HTML ? html_tags : xml_tags;
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 752
diff changeset
409 auto parser = new Parser(new SourceText(filePath, true));
368
2adf808343d6 - Renamed method start() to init() in Parser.
aziz
parents: 364
diff changeset
410 auto root = parser.start();
619
933cd8d24467 Renamed Parser.lx to Parser.lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 598
diff changeset
411 auto lx = parser.lexer;
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
412
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
413 auto builder = new TokenExBuilder();
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
414 auto tokenExList = builder.build(root, lx.firstToken());
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
415
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
416 print(tags[DocPart.Head]~\n);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
417 if (lx.errors.length || parser.errors.length)
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
418 { // Output error messages.
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
419 print(tags[DocPart.CompBegin]~\n);
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
420 printErrors(lx, tags, print);
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
421 printErrors(parser, tags, print);
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
422 print(tags[DocPart.CompEnd]~\n);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
423 }
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
424 print(tags[DocPart.SrcBegin]);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
425
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
426 // Iterate over list of tokens.
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
427 foreach (ref tokenEx; tokenExList)
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
428 {
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
429 auto token = tokenEx.token;
394
6440da4adb07 Fixed forward references of enum MID complaints by compiler.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 392
diff changeset
430 // Print whitespace.
6440da4adb07 Fixed forward references of enum MID complaints by compiler.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 392
diff changeset
431 if (token.ws)
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
432 print(token.wsChars);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
433
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
434 foreach (node; tokenEx.beginNodes)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
435 print.format(tags[DocPart.SyntaxBegin], getTag(node.category), getShortClassName(node));
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
436
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
437 printToken(token, tags, print);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
438
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
439 if (options & DocOption.HTML)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
440 foreach_reverse (node; tokenEx.endNodes)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
441 print(tags[DocPart.SyntaxEnd]);
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
442 else
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
443 foreach_reverse (node; tokenEx.endNodes)
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
444 print.format(tags[DocPart.SyntaxEnd], getTag(node.category));
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
445 }
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
446 print(\n~tags[DocPart.SrcEnd])(\n~tags[DocPart.Tail]);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
447 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
448
582
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
449 /// Prints all tokens of a source file using the buffer print.
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
450 void tokensToDoc(string filePath, Print!(char) print, DocOption options)
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
451 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
452 auto tags = options & DocOption.HTML ? html_tags : xml_tags;
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 752
diff changeset
453 auto lx = new Lexer(new SourceText(filePath, true));
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
454 lx.scanAll();
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
455
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
456 print(tags[DocPart.Head]~\n);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
457 if (lx.errors.length)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
458 {
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
459 print(tags[DocPart.CompBegin]~\n);
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
460 printErrors(lx, tags, print);
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
461 print(tags[DocPart.CompEnd]~\n);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
462 }
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
463 print(tags[DocPart.SrcBegin]);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
464
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
465 // Traverse linked list and print tokens.
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
466 auto token = lx.firstToken();
679
ff6971637f88 Renamed Token member type to kind.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 668
diff changeset
467 while (token.kind != TOK.EOF)
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
468 {
394
6440da4adb07 Fixed forward references of enum MID complaints by compiler.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 392
diff changeset
469 // Print whitespace.
6440da4adb07 Fixed forward references of enum MID complaints by compiler.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 392
diff changeset
470 if (token.ws)
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
471 print(token.wsChars);
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
472 printToken(token, tags, print);
752
51e9dfe27f20 Revised module cmd.Generate.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 709
diff changeset
473 token = token.next;
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
474 }
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
475 print(\n~tags[DocPart.SrcEnd])(\n~tags[DocPart.Tail]);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
476 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
477
582
724603deed37 Added comments and renamed a few variables.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 581
diff changeset
478 /// Prints a token with tags using the buffer print.
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
479 void printToken(Token* token, string[] tags, Print!(char) print)
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
480 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
481 alias DocPart DP;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
482 string srcText = xml_escape(token.srcText);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
483
679
ff6971637f88 Renamed Token member type to kind.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 668
diff changeset
484 switch(token.kind)
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
485 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
486 case TOK.Identifier:
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
487 print.format(tags[DP.Identifier], srcText);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
488 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
489 case TOK.Comment:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
490 string t;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
491 switch (token.start[1])
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
492 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
493 case '/': t = "l"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
494 case '*': t = "b"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
495 case '+': t = "n"; break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
496 default:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
497 assert(0);
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
498 }
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
499 print.format(tags[DP.Comment], t, srcText);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
500 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
501 case TOK.String:
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
502 print.format(tags[DP.StringLiteral], srcText);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
503 break;
507
996041463028 Removed TOK.WCharLiteral and TOK.DCharLiteral.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 485
diff changeset
504 case TOK.CharLiteral:
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
505 print.format(tags[DP.CharLiteral], srcText);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
506 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
507 case TOK.Assign, TOK.Equal,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
508 TOK.Less, TOK.Greater,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
509 TOK.LShiftAssign, TOK.LShift,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
510 TOK.RShiftAssign, TOK.RShift,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
511 TOK.URShiftAssign, TOK.URShift,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
512 TOK.OrAssign, TOK.OrBinary,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
513 TOK.AndAssign, TOK.AndBinary,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
514 TOK.PlusAssign, TOK.PlusPlus, TOK.Plus,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
515 TOK.MinusAssign, TOK.MinusMinus, TOK.Minus,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
516 TOK.DivAssign, TOK.Div,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
517 TOK.MulAssign, TOK.Mul,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
518 TOK.ModAssign, TOK.Mod,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
519 TOK.XorAssign, TOK.Xor,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
520 TOK.CatAssign,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
521 TOK.Tilde,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
522 TOK.Unordered,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
523 TOK.UorE,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
524 TOK.UorG,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
525 TOK.UorGorE,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
526 TOK.UorL,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
527 TOK.UorLorE,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
528 TOK.LorEorG:
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
529 print.format(tags[DP.Operator], srcText);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
530 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
531 case TOK.LorG:
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
532 print(tags[DP.LorG]);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
533 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
534 case TOK.LessEqual:
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
535 print(tags[DP.LessEqual]);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
536 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
537 case TOK.GreaterEqual:
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
538 print(tags[DP.GreaterEqual]);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
539 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
540 case TOK.AndLogical:
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
541 print(tags[DP.AndLogical]);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
542 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
543 case TOK.OrLogical:
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
544 print(tags[DP.OrLogical]);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
545 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
546 case TOK.NotEqual:
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
547 print(tags[DP.NotEqual]);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
548 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
549 case TOK.Not:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
550 // Check if this is part of a template instantiation.
709
7e7c85235673 Changed CSS class .cl to .chl.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 695
diff changeset
551 if (token.prevNWS.kind == TOK.Identifier && token.nextNWS.kind == TOK.LParen)
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
552 goto default;
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
553 print(tags[DP.Not]);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
554 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
555 case TOK.Int32, TOK.Int64, TOK.Uint32, TOK.Uint64,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
556 TOK.Float32, TOK.Float64, TOK.Float80,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
557 TOK.Imaginary32, TOK.Imaginary64, TOK.Imaginary80:
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
558 print.format(tags[DP.Number], srcText);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
559 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
560 case TOK.LParen, TOK.RParen, TOK.LBracket,
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
561 TOK.RBracket, TOK.LBrace, TOK.RBrace:
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
562 print.format(tags[DP.Bracket], srcText);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
563 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
564 case TOK.Shebang:
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
565 print.format(tags[DP.Shebang], srcText);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
566 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
567 case TOK.HashLine:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
568 void printWS(char* start, char* end)
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
569 {
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
570 if (start != end)
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
571 print(start[0 .. end - start]);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
572 }
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
573 print(tags[DP.HLineBegin]);
485
ea8c7459f1c4 Changed a lot of things in the Lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 422
diff changeset
574 auto num = token.tokLineNum;
388
ae154eceba65 Applied some fixes to scanning and printing #line tokens.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 379
diff changeset
575 if (num is null)
ae154eceba65 Applied some fixes to scanning and printing #line tokens.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 379
diff changeset
576 {
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
577 print(token.srcText);
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
578 print(tags[DP.HLineEnd]);
388
ae154eceba65 Applied some fixes to scanning and printing #line tokens.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 379
diff changeset
579 break;
ae154eceba65 Applied some fixes to scanning and printing #line tokens.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 379
diff changeset
580 }
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
581 // Print whitespace between #line and number
388
ae154eceba65 Applied some fixes to scanning and printing #line tokens.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 379
diff changeset
582 auto ptr = token.start;
ae154eceba65 Applied some fixes to scanning and printing #line tokens.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 379
diff changeset
583 printWS(ptr, num.start); // prints "#line" as well
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
584 printToken(num, tags, print);
485
ea8c7459f1c4 Changed a lot of things in the Lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 422
diff changeset
585 if (token.tokLineFilespec)
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
586 {
485
ea8c7459f1c4 Changed a lot of things in the Lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 422
diff changeset
587 auto filespec = token.tokLineFilespec;
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
588 // Print whitespace between number and filespec
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
589 printWS(num.end, filespec.start);
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
590 print.format(tags[DP.Filespec], xml_escape(filespec.srcText));
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
591
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
592 ptr = filespec.end;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
593 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
594 else
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
595 ptr = num.end;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
596 // Print remaining whitespace
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
597 printWS(ptr, token.end);
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
598 print(tags[DP.HLineEnd]);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
599 break;
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
600 default:
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
601 if (token.isKeyword())
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
602 print.format(tags[DP.Keyword], srcText);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
603 else if (token.isSpecialToken)
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
604 print.format(tags[DP.SpecialToken], srcText);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
605 else
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 390
diff changeset
606 print(srcText);
363
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
607 }
2b387a3c6b58 - Added package cmd.
aziz
parents:
diff changeset
608 }