annotate trunk/src/dil/Settings.d @ 391:33b566df6af4

Migrated project to Tango. Decremented the numbers of the format placeholders in the localized messages by one. Replaced all instances of writef/ln with Stdout. Added module common.d with string aliases and a global Layout!(char) instance. Replaced %s format specifiers with index placeholders in html/xml_tags. Changed member Information.arguments to string message. Copied std.metastring, std.uni and std.utf from Phobos.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sat, 15 Sep 2007 17:12:26 +0200
parents 2adf808343d6
children 6440da4adb07
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
1 /++
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
2 Author: Aziz Köksal
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
3 License: GPL3
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
4 +/
326
4a7359b88c11 - Added package 'dil' to module declarations.
aziz
parents: 325
diff changeset
5 module dil.Settings;
327
a48a987f7515 - Added package dil to import declarations.
aziz
parents: 326
diff changeset
6 import dil.Messages;
a48a987f7515 - Added package dil to import declarations.
aziz
parents: 326
diff changeset
7 import dil.Parser, dil.SyntaxTree, dil.Declarations, dil.Expressions;
358
0faf57d99c1c - Replaced calls to std.file.read() with dil.loadFile().
aziz
parents: 349
diff changeset
8 import dil.File;
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 368
diff changeset
9 import std.metastrings : FormatT = Format, ToString;
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 368
diff changeset
10 import common;
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
11
331
cff12a1999ae - Added template Pad for padding numbers.
aziz
parents: 329
diff changeset
12 template Pad(char[] str, uint amount)
cff12a1999ae - Added template Pad for padding numbers.
aziz
parents: 329
diff changeset
13 {
cff12a1999ae - Added template Pad for padding numbers.
aziz
parents: 329
diff changeset
14 static if (str.length >= amount)
cff12a1999ae - Added template Pad for padding numbers.
aziz
parents: 329
diff changeset
15 const char[] Pad = str;
cff12a1999ae - Added template Pad for padding numbers.
aziz
parents: 329
diff changeset
16 else
cff12a1999ae - Added template Pad for padding numbers.
aziz
parents: 329
diff changeset
17 const char[] Pad = "0" ~ Pad!(str, amount-1);
cff12a1999ae - Added template Pad for padding numbers.
aziz
parents: 329
diff changeset
18 }
cff12a1999ae - Added template Pad for padding numbers.
aziz
parents: 329
diff changeset
19
cff12a1999ae - Added template Pad for padding numbers.
aziz
parents: 329
diff changeset
20 template Pad(int num, uint amount)
cff12a1999ae - Added template Pad for padding numbers.
aziz
parents: 329
diff changeset
21 {
cff12a1999ae - Added template Pad for padding numbers.
aziz
parents: 329
diff changeset
22 const char[] Pad = Pad!(ToString!(num), amount);
cff12a1999ae - Added template Pad for padding numbers.
aziz
parents: 329
diff changeset
23 }
cff12a1999ae - Added template Pad for padding numbers.
aziz
parents: 329
diff changeset
24
333
268d680d5275 - Moved Pad template to the top.
aziz
parents: 331
diff changeset
25 version(D2)
268d680d5275 - Moved Pad template to the top.
aziz
parents: 331
diff changeset
26 {
268d680d5275 - Moved Pad template to the top.
aziz
parents: 331
diff changeset
27 const VERSION_MAJOR = 2;
268d680d5275 - Moved Pad template to the top.
aziz
parents: 331
diff changeset
28 const VERSION_MINOR = 0;
268d680d5275 - Moved Pad template to the top.
aziz
parents: 331
diff changeset
29 }
268d680d5275 - Moved Pad template to the top.
aziz
parents: 331
diff changeset
30 else
268d680d5275 - Moved Pad template to the top.
aziz
parents: 331
diff changeset
31 {
268d680d5275 - Moved Pad template to the top.
aziz
parents: 331
diff changeset
32 const VERSION_MAJOR = 1;
268d680d5275 - Moved Pad template to the top.
aziz
parents: 331
diff changeset
33 const VERSION_MINOR = 0;
268d680d5275 - Moved Pad template to the top.
aziz
parents: 331
diff changeset
34 }
268d680d5275 - Moved Pad template to the top.
aziz
parents: 331
diff changeset
35
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 368
diff changeset
36 const string VERSION = FormatT!("%s.%s", VERSION_MAJOR, Pad!(VERSION_MINOR, 3));
343
95f1b6e43214 - Removed TOK.Special and added an own entry for each special token.
aziz
parents: 339
diff changeset
37 const VENDOR = "dil";
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
38
339
9954367bcd4b - Removed usageGenerate from Settings.d. Added some comments.
aziz
parents: 333
diff changeset
39 /// Used in main help message.
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
40 const COMPILED_WITH = __VENDOR__;
339
9954367bcd4b - Removed usageGenerate from Settings.d. Added some comments.
aziz
parents: 333
diff changeset
41 /// ditto
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 368
diff changeset
42 const COMPILED_VERSION = FormatT!("%s.%s", __VERSION__/1000, Pad!(__VERSION__%1000, 3));
339
9954367bcd4b - Removed usageGenerate from Settings.d. Added some comments.
aziz
parents: 333
diff changeset
43 /// ditto
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
44 const COMPILED_DATE = __TIMESTAMP__;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
45
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
46 struct GlobalSettings
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
47 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
48 static:
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 368
diff changeset
49 string language; /// Language of loaded messages catalogue.
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
50 string[] messages; /// Table of localized compiler messages.
367
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
51 string[] importPaths; /// Array of import paths to look for modules.
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
52 void load()
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
53 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
54 auto fileName = "config.d"[];
358
0faf57d99c1c - Replaced calls to std.file.read() with dil.loadFile().
aziz
parents: 349
diff changeset
55 auto sourceText = loadFile(fileName);
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
56 auto parser = new Parser(sourceText, fileName);
368
2adf808343d6 - Renamed method start() to init() in Parser.
aziz
parents: 367
diff changeset
57 auto root = parser.start();
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
58
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
59 if (parser.errors.length || parser.lx.errors.length)
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
60 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
61 throw new Exception("There are errors in " ~ fileName ~ ".");
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
62 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
63
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
64 foreach (decl; root.children)
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
65 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
66 auto v = Cast!(VariableDeclaration)(decl);
367
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
67 if (v is null)
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
68 continue;
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
69 auto vname = v.idents[0].srcText;
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
70 if (vname == "langfile")
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
71 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
72 auto e = v.values[0];
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
73 if (!e)
349
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
74 throw new Exception("langfile variable has no value set.");
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
75 auto val = Cast!(StringLiteralsExpression)(e);
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
76 if (val)
349
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
77 // Set fileName to d-file with messages table.
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
78 fileName = val.getString();
367
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
79 }
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
80 else if (vname == "import_paths")
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
81 {
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
82 auto e = v.values[0];
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
83 if (e is null)
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
84 throw new Exception("import_paths variable has no variable set.");
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
85 if (auto array = Cast!(ArrayInitializer)(e))
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
86 {
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
87 foreach (value; array.values)
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
88 if (auto str = Cast!(StringLiteralsExpression)(value))
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
89 GlobalSettings.importPaths ~= str.getString();
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
90 }
367
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
91 else
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 358
diff changeset
92 throw new Exception("import_paths variable is set to "~e.classinfo.name~" instead of an ArrayInitializer.");
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
93 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
94 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
95
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
96 // Load messages
358
0faf57d99c1c - Replaced calls to std.file.read() with dil.loadFile().
aziz
parents: 349
diff changeset
97 sourceText = loadFile(fileName);
349
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
98 parser = new Parser(sourceText, fileName);
368
2adf808343d6 - Renamed method start() to init() in Parser.
aziz
parents: 367
diff changeset
99 root = parser.start();
349
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
100
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
101 if (parser.errors.length || parser.lx.errors.length)
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
102 {
349
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
103 throw new Exception("There are errors in "~fileName~".");
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
104 }
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
105
349
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
106 char[][] messages;
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
107 foreach (decl; root.children)
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
108 {
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
109 auto v = Cast!(VariableDeclaration)(decl);
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
110 if (v is null)
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
111 continue;
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
112 if (v.idents[0].srcText == "messages")
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
113 {
349
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
114 auto e = v.values[0];
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
115 if (!e)
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
116 throw new Exception("messages variable in "~fileName~" has no value set.");
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
117 if (auto array = Cast!(ArrayInitializer)(e))
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
118 {
349
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
119 foreach (value; array.values)
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
120 {
349
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
121 if (auto str = Cast!(StringLiteralsExpression)(value))
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
122 messages ~= str.getString();
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
123 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
124 }
349
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
125 else
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
126 throw new Exception("messages variable is set to "~e.classinfo.name~" instead of an ArrayInitializer.");
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
127 }
349
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
128 else if(v.idents[0].srcText == "lang_code")
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
129 {
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
130 auto e = v.values[0];
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
131 if (!e)
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
132 throw new Exception("lang_code variable in "~fileName~" has no value set.");
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
133 if (auto str = Cast!(StringLiteralsExpression)(e))
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
134 GlobalSettings.language = str.getString();
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
135 }
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
136 }
349
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
137 if (messages.length != MID.max+1)
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 368
diff changeset
138 throw new Exception(Format("messages table in {0} must exactly have {1} entries, but {2} were found.", fileName, MID.max+1, messages.length));
349
a0711c57c1db - Added variable 'lang_code' to language files.
aziz
parents: 343
diff changeset
139 GlobalSettings.messages = messages;
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
140 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
141 }