|
@@ -10,6 +10,7 @@ public{
|
|
|
import std.ascii : isDigit;
|
|
|
import std.conv : to;
|
|
|
import std.algorithm;
|
|
|
+ import std.sumtype : SumType;
|
|
|
}
|
|
|
|
|
|
//import dopp_lexer : tokenize, isKeyword;
|
|
@@ -49,7 +50,6 @@ export struct Token{
|
|
|
// ./dopp -f test.de -o test.d == input file name + output file name (default output file name = input file name [but .d instead .de] )
|
|
|
// ./dopp -f "/test/test.de" -o "/result/test.d" == input file path + output file path (default output file name and path = input file name and path [but .d instead .de] )
|
|
|
bool is_valid_argv(ref string[] argv){
|
|
|
- //ulong num = argv[1 .. $].length; // uint64
|
|
|
ulong num = argv.length; // uint64
|
|
|
if(num != 1 && num != 2 && num != 4){
|
|
|
return false;
|
|
@@ -108,16 +108,81 @@ bool is_valid_argv(ref string[] argv){
|
|
|
}
|
|
|
|
|
|
|
|
|
+//alias Config_Value = SumType!(string, int, ubyte, bool);
|
|
|
+alias Config_Value = SumType!(string, ubyte, bool);
|
|
|
+
|
|
|
+Config_Value get_config_value(ref TOMLDocument toml_s, string key){
|
|
|
+ if(key == "indent_matter"){
|
|
|
+ ubyte default_indent_matter = 4;
|
|
|
+ if(("indent_matter" in toml_s) != null){
|
|
|
+ if(toml_s[key].type == TOMLType.INTEGER){
|
|
|
+ ubyte indent_matter = cast(ubyte) toml_s[key].integer; // long (int64) -> ubyte (uint8) // todo add alias
|
|
|
+ if(indent_matter > 0){
|
|
|
+ return Config_Value(indent_matter);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ writeln("Warning: use default indent_matter = ", default_indent_matter); // todo add config key-value "no_warn" = false | true for silence
|
|
|
+ return Config_Value(default_indent_matter);
|
|
|
+
|
|
|
+ }else if(key == "indent_out"){
|
|
|
+ ubyte default_indent_out = 2;
|
|
|
+ if(("indent_out" in toml_s) != null){
|
|
|
+ if(toml_s[key].type == TOMLType.INTEGER){
|
|
|
+ ubyte indent_out = cast(ubyte) toml_s[key].integer; // long (int64) -> ubyte (uint8)
|
|
|
+ if(indent_out > 0){
|
|
|
+ return Config_Value(indent_out);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ writeln("Warning: use default indent_out = ", default_indent_out);
|
|
|
+ return Config_Value(default_indent_out);
|
|
|
+
|
|
|
+ }else if(key == "indent_type"){ // 0 = whitespaces, 1 = tabs
|
|
|
+ ubyte default_indent_type = 0;
|
|
|
+ if(("indent_type" in toml_s) != null){
|
|
|
+ if(toml_s[key].type == TOMLType.INTEGER){
|
|
|
+ ubyte indent_type = cast(ubyte) toml_s[key].integer; // long (int64) -> ubyte (uint8)
|
|
|
+ if(indent_type < 2){ // 0 | 1
|
|
|
+ return Config_Value(indent_type);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ writeln("Warning: use default indent_type = ", default_indent_type);
|
|
|
+ return Config_Value(default_indent_type);
|
|
|
+
|
|
|
+ //}else{}
|
|
|
+
|
|
|
+ }
|
|
|
+ return Config_Value(0);
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
//void main(string[] argv){
|
|
|
int main(string[] argv){
|
|
|
|
|
|
toml_s = parseTOML(cast(string)read("dopp.toml"));
|
|
|
+
|
|
|
+ /*
|
|
|
writeln("indent_matter: ", toml_s["indent_matter"]); // 4
|
|
|
//writeln("xyz: ", toml_s["xyz"]); // Address boundary error || Segmentation fault (core dumped)
|
|
|
- writeln("indent_matter in: ", "indent_matter" in toml_s);
|
|
|
- writeln("xyz in: ", "xyz" in toml_s);
|
|
|
- // todo function - config and default values
|
|
|
+ writeln("indent_matter in: ", "indent_matter" in toml_s); // hex like 7F27C2992040
|
|
|
+ writeln("indent_matter is null: ", ("indent_matter" in toml_s) == null); // fasle
|
|
|
+ writeln("indent_matter is TOMLType.INTEGER: ", (toml_s["indent_matter"].type == TOMLType.INTEGER)); // true
|
|
|
+ writeln("xyz in: ", "xyz" in toml_s); // null
|
|
|
+ writeln("xyz is null: ", ("xyz" in toml_s) == null); // true
|
|
|
+ */
|
|
|
+
|
|
|
+
|
|
|
+ auto indent_type = get_config_value(toml_s, "indent_type");
|
|
|
+ writeln("config: indent_type = ", indent_type); // 0
|
|
|
+
|
|
|
+ auto indent_matter = get_config_value(toml_s, "indent_matter");
|
|
|
+ writeln("config: indent_matter = ", indent_matter); // 4
|
|
|
+
|
|
|
+ auto indent_out = get_config_value(toml_s, "indent_out");
|
|
|
+ writeln("config: indent_out = ", indent_out); // 2
|
|
|
+
|
|
|
|
|
|
/*
|
|
|
int i = 0;
|