/******** * Highlight testing module. * * Do not attempt to run this! ***********/ module highlighttest; import X = null; /++ Pragma directives. DDoc + DDoc embedded items. Special Tokens. + + --- + // comment + #line 12 "hightlighttest.d" /* block comment */ + #line __LINE__ __FILE__ /++ embedded block comment +/ + + pragma /* */ (msg, "what?"); + pragma(/++ +/ lib, "insane.a"); + pragma(inline); + pragma(linkerDirective); + pragma(mangle); + pragma(startaddress); + pragma(D_Custom_Extension, "custom data"); + pragma(foo 0); + --- +/ /// version condition version = X; version = 1_2_3; version (X) ; version(linux) {} /// linkage extern (C) {} extern : ; extern (C++) {} extern (C++, foo.bar.baz) {} extern (D) {} extern (Windows) {} extern (Pascal) {} extern (System) {} extern (unknown) {} extern (C,) {} extern (C++, foo, bar) {} /// alias & typedef alias int.min minint; typedef int myint; int main(char[][] args) { /// statements if (1) {} else {} with (N) {x = B} /// attributes auto x = 1; static if (true) {} void (in X, out Y) {} // NOTE: using in like this is rare, more common to use as an expression and no way to tell apart? /// deprecated deprecated void fct (); /// types void a; ushort u; int[uint] AA; class C; enum N : int { A = 5, B } typeof(u) u2; /// expressions x = cast(int) 55; void* p = null; p = cast(void*) new int; x = 1 in AA; // NOTE: a THIRD use of in. How to detect?? assert (true); /// libsymbols string s = ""; throw new Exception; TypeInfo ti = typeid(int); /// tests debug {} debug (2) {} debug (DSymb) {} unittest {} /// scope (as attribute and as statement) scope struct S; scope (exit) {} scope (success) {} // NOTE: rules cannot match across new-lines scope (failure) {} /// Properties x = int.min; s = (5-3).stringof; /// strings s = r"raw string"; s = x"00FF"; s = \n \a; s = \u1234; s = \U12345678; s = \& ; char c = 'a'; s = "abc 012 \" \n \x12 \u1234 \U12345678"; s = `BQString '"`; s = q{foo "bar" 123}; s = q"FOO foo FOO"; s = q"[foo [bar] q"[baz]"]"; s = q"(foo (bar) q"(baz)")"; s = q"<foo <bar> q"<baz>">"; s = q"{foo {bar} q"{baz}"}"; s = q"/foo/"; s = q"!foo!"; /// region markers //BEGIN x //END x /// DDoc /******* * DDoc * * Section: * New section. * $(I italic) *******/ /+++++++ + DDoc + /+ + +/ +++++++/ // comments // FIXME NOTE /* comment */ /+ comment /+ nested comment +/ +/ /// brace folding { } /** normal text * --- * .x; * .. * ... * .... * ..... * _._ * _e1 * --- */ /// float and int literals int i; real r; ireal ir; r = .0; r = 0f; ir = 0e0i; ir = 0.fi; r = 0.0e0; r = 0xF.Fp0; r = 0x_._p0_; i = 5; i = -1; i = 0b10; i = 0070; i = 00; i = 0xF0; /// ranges int[] A; i = A[1]; A = A[0..$]; A = A[0..0]; A = A[0..length]; /// labels label: goto label; /// function, delegate creal function () fp = function creal() { return 0f+0fi; }; void delegate (in int i, lazy int b) dg = delegate void (int, int) {} /// in, out, body // NOTE: highlighting in & out as statements here could be difficult float F () in {} out (result) {} body {} /// try, catch, finally try { throw new Exception("oh no... "); } catch (Exception e) { } finally { } /// mixin mixin("return false;").stringof; /// templates macro; // what does this do? template Tp (T) { Tp t; } Tp!(int) y; }