annotate trunk/src/Settings.d @ 309:b4d842b0d2c7

- Added new files Settings.d, config.d and lang_en.d - Removed redundant break statements from Lexer.d. - Added function Cast() to SyntaxTree.d. - Relocated compiler version info to Settings.d. - Removed messages variable from module Messages. Compiler messages are loaded dynamically now. - Relocated some functions from module Information to module Messages, and added some format functions to it. - Message tables are located in their own lang_*.d files. - Added getString() method to class StringLiteralsExpression. - Module Settings has a static struct GlobalSettings. It loads global settings from config.d and a language file.
author aziz
date Wed, 15 Aug 2007 16:07:05 +0000
parents
children 6543ce34a4e0
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 +/
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
5 module Settings;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
6 import Parser, SyntaxTree, Declarations, Expressions;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
7 import std.metastrings;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
8
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
9 version(D2)
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
10 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
11 const VERSION_MAJOR = 2;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
12 const VERSION_MINOR = 0;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
13 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
14 else
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
15 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
16 const VERSION_MAJOR = 1;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
17 const VERSION_MINOR = 0;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
18 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
19 const string VERSION = Format!("%s.%s", VERSION_MAJOR, VERSION_MINOR);
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
20
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
21 const COMPILED_WITH = __VENDOR__;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
22 const COMPILED_VERSION = Format!("%s.%s", __VERSION__/1000, __VERSION__%1000);
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
23 const COMPILED_DATE = __TIMESTAMP__;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
24
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
25 const usageHighlight = "highlight (hl) file.d";
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
26
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
27 struct GlobalSettings
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
28 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
29 static:
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
30 string language; /// Language of messages catalogue to load.
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
31 string[] messages; /// Table of localized compiler messages.
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
32 void load()
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
33 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
34 auto fileName = "config.d"[];
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
35 auto sourceText = cast(char[]) std.file.read(fileName);
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
36 auto parser = new Parser(sourceText, fileName);
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
37 parser.start();
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
38 auto root = parser.parseModule();
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
39
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
40 if (parser.errors.length || parser.lx.errors.length)
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
41 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
42 throw new Exception("There are errors in " ~ fileName ~ ".");
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
43 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
44
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
45 foreach (decl; root.children)
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
46 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
47 auto v = Cast!(VariableDeclaration)(decl);
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
48 if (v && v.idents[0].srcText == "language")
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
49 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
50 auto e = v.values[0];
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
51 if (!e)
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
52 throw new Exception("language variable has no value set.");
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
53 auto val = Cast!(StringLiteralsExpression)(e);
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
54 if (val)
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
55 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
56 GlobalSettings.language = val.getString();
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
57 break;
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 }
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
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
62 // Load messages
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
63 if (GlobalSettings.language.length)
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
64 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
65 fileName = "lang_" ~ GlobalSettings.language ~ ".d";
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
66 sourceText = cast(char[]) std.file.read(fileName);
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
67 parser = new Parser(sourceText, fileName);
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
68 parser.start();
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
69 root = parser.parseModule();
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
70
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
71 if (parser.errors.length || parser.lx.errors.length)
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
72 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
73 throw new Exception("There are errors in "~fileName~".");
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
74 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
75
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
76 char[][] messages;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
77 foreach (decl; root.children)
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
78 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
79 auto v = Cast!(VariableDeclaration)(decl);
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
80 if (v && v.idents[0].srcText == "messages")
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
81 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
82 auto e = v.values[0];
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
83 if (!e)
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
84 throw new Exception("messages variable in "~fileName~" has no value set.");
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
85 if (auto array = Cast!(ArrayInitializer)(e))
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
86 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
87 foreach (value; array.values)
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
88 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
89 if (auto str = Cast!(StringLiteralsExpression)(value))
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
90 messages ~= str.getString();
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
91 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
92 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
93 else
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
94 throw new Exception("messages variable is set to "~e.classinfo.name~" instead of an ArrayInitializer.");
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 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
97 GlobalSettings.messages = messages;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
98 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
99 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
100
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents:
diff changeset
101 }