diff options
Diffstat (limited to 'src/sdlang/util.d')
-rw-r--r-- | src/sdlang/util.d | 200 |
1 files changed, 0 insertions, 200 deletions
diff --git a/src/sdlang/util.d b/src/sdlang/util.d deleted file mode 100644 index d192ea2..0000000 --- a/src/sdlang/util.d +++ /dev/null @@ -1,200 +0,0 @@ -// SDLang-D -// Written in the D programming language. - -module sdlang.util; - -import std.algorithm; -import std.array; -import std.conv; -import std.datetime; -import std.range; -import std.stdio; -import std.string; - -import sdlang.exception; -import sdlang.token; - -enum sdlangVersion = "0.9.1"; - -alias immutable(ubyte)[] ByteString; - -auto startsWith(T)(string haystack, T needle) - if( is(T:ByteString) || is(T:string) ) -{ - return std.algorithm.startsWith( cast(ByteString)haystack, cast(ByteString)needle ); -} - -struct Location -{ - string file; /// Filename (including path) - int line; /// Zero-indexed - int col; /// Zero-indexed, Tab counts as 1 - size_t index; /// Index into the source - - this(int line, int col, int index) - { - this.line = line; - this.col = col; - this.index = index; - } - - this(string file, int line, int col, int index) - { - this.file = file; - this.line = line; - this.col = col; - this.index = index; - } - - /// Convert to string. Optionally takes output range as a sink. - string toString() - { - Appender!string sink; - this.toString(sink); - return sink.data; - } - - ///ditto - void toString(Sink)(ref Sink sink) if(isOutputRange!(Sink,char)) - { - sink.put(file); - sink.put("("); - sink.put(to!string(line+1)); - sink.put(":"); - sink.put(to!string(col+1)); - sink.put(")"); - } -} - -struct FullName -{ - string namespace; - string name; - - /// Convert to string. Optionally takes output range as a sink. - string toString() - { - if(namespace == "") - return name; - - Appender!string sink; - this.toString(sink); - return sink.data; - } - - ///ditto - void toString(Sink)(ref Sink sink) if(isOutputRange!(Sink,char)) - { - if(namespace != "") - { - sink.put(namespace); - sink.put(":"); - } - - sink.put(name); - } - - /// - static string combine(string namespace, string name) - { - return FullName(namespace, name).toString(); - } - /// - @("FullName.combine example") - unittest - { - assert(FullName.combine("", "name") == "name"); - assert(FullName.combine("*", "name") == "*:name"); - assert(FullName.combine("namespace", "name") == "namespace:name"); - } - - /// - static FullName parse(string fullName) - { - FullName result; - - auto parts = fullName.findSplit(":"); - if(parts[1] == "") // No colon - { - result.namespace = ""; - result.name = parts[0]; - } - else - { - result.namespace = parts[0]; - result.name = parts[2]; - } - - return result; - } - /// - @("FullName.parse example") - unittest - { - assert(FullName.parse("name") == FullName("", "name")); - assert(FullName.parse("*:name") == FullName("*", "name")); - assert(FullName.parse("namespace:name") == FullName("namespace", "name")); - } - - /// Throws with appropriate message if this.name is "*". - /// Wildcards are only supported for namespaces, not names. - void ensureNoWildcardName(string extaMsg = null) - { - if(name == "*") - throw new ArgumentException(`Wildcards ("*") only allowed for namespaces, not names. `~extaMsg); - } -} -struct Foo { string foo; } - -void removeIndex(E)(ref E[] arr, ptrdiff_t index) -{ - arr = arr[0..index] ~ arr[index+1..$]; -} - -void trace(string file=__FILE__, size_t line=__LINE__, TArgs...)(TArgs args) -{ - version(sdlangTrace) - { - writeln(file, "(", line, "): ", args); - stdout.flush(); - } -} - -string toString(TypeInfo ti) -{ - if (ti == typeid( bool )) return "bool"; - else if(ti == typeid( string )) return "string"; - else if(ti == typeid( dchar )) return "dchar"; - else if(ti == typeid( int )) return "int"; - else if(ti == typeid( long )) return "long"; - else if(ti == typeid( float )) return "float"; - else if(ti == typeid( double )) return "double"; - else if(ti == typeid( real )) return "real"; - else if(ti == typeid( Date )) return "Date"; - else if(ti == typeid( DateTimeFrac )) return "DateTimeFrac"; - else if(ti == typeid( DateTimeFracUnknownZone )) return "DateTimeFracUnknownZone"; - else if(ti == typeid( SysTime )) return "SysTime"; - else if(ti == typeid( Duration )) return "Duration"; - else if(ti == typeid( ubyte[] )) return "ubyte[]"; - else if(ti == typeid( typeof(null) )) return "null"; - - return "{unknown}"; -} - -enum BOM { - UTF8, /// UTF-8 - UTF16LE, /// UTF-16 (little-endian) - UTF16BE, /// UTF-16 (big-endian) - UTF32LE, /// UTF-32 (little-endian) - UTF32BE, /// UTF-32 (big-endian) -} - -enum NBOM = __traits(allMembers, BOM).length; -immutable ubyte[][NBOM] ByteOrderMarks = -[ - [0xEF, 0xBB, 0xBF], //UTF8 - [0xFF, 0xFE], //UTF16LE - [0xFE, 0xFF], //UTF16BE - [0xFF, 0xFE, 0x00, 0x00], //UTF32LE - [0x00, 0x00, 0xFE, 0xFF] //UTF32BE -]; |