| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 | <!doctype html><title>CodeMirror: D mode</title><meta charset="utf-8"/><link rel=stylesheet href="../../doc/docs.css"><link rel="stylesheet" href="../../lib/codemirror.css"><script src="../../lib/codemirror.js"></script><script src="../../addon/edit/matchbrackets.js"></script><script src="d.js"></script><style>.CodeMirror {border: 2px inset #dee;}</style><div id=nav>  <a href="http://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a>  <ul>    <li><a href="../../index.html">Home</a>    <li><a href="../../doc/manual.html">Manual</a>    <li><a href="https://github.com/codemirror/codemirror">Code</a>  </ul>  <ul>    <li><a href="../index.html">Language modes</a>    <li><a class=active href="#">D</a>  </ul></div><article><h2>D mode</h2><form><textarea id="code" name="code">/* D demo code // copied from phobos/sd/metastrings.d */// Written in the D programming language./**Templates with which to do compile-time manipulation of strings.Macros: WIKI = Phobos/StdMetastringsCopyright: Copyright Digital Mars 2007 - 2009.License:   <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.Authors:   $(WEB digitalmars.com, Walter Bright),           Don ClugstonSource:    $(PHOBOSSRC std/_metastrings.d)*//*         Copyright Digital Mars 2007 - 2009.Distributed under the Boost Software License, Version 1.0.   (See accompanying file LICENSE_1_0.txt or copy at         http://www.boost.org/LICENSE_1_0.txt) */module std.metastrings;/**Formats constants into a string at compile time.  Analogous to $(XREFstring,format).Parameters:A = tuple of constants, which can be strings, characters, or integral    values.Formats: *    The formats supported are %s for strings, and %% *    for the % character.Example:---import std.metastrings;import std.stdio;void main(){  string s = Format!("Arg %s = %s", "foo", 27);  writefln(s); // "Arg foo = 27"} * --- */template Format(A...){    static if (A.length == 0)        enum Format = "";    else static if (is(typeof(A[0]) : const(char)[]))        enum Format = FormatString!(A[0], A[1..$]);    else        enum Format = toStringNow!(A[0]) ~ Format!(A[1..$]);}template FormatString(const(char)[] F, A...){    static if (F.length == 0)        enum FormatString = Format!(A);    else static if (F.length == 1)        enum FormatString = F[0] ~ Format!(A);    else static if (F[0..2] == "%s")        enum FormatString            = toStringNow!(A[0]) ~ FormatString!(F[2..$],A[1..$]);    else static if (F[0..2] == "%%")        enum FormatString = "%" ~ FormatString!(F[2..$],A);    else    {        static assert(F[0] != '%', "unrecognized format %" ~ F[1]);        enum FormatString = F[0] ~ FormatString!(F[1..$],A);    }}unittest{    auto s = Format!("hel%slo", "world", -138, 'c', true);    assert(s == "helworldlo-138ctrue", "[" ~ s ~ "]");}/** * Convert constant argument to a string. */template toStringNow(ulong v){    static if (v < 10)        enum toStringNow = "" ~ cast(char)(v + '0');    else        enum toStringNow = toStringNow!(v / 10) ~ toStringNow!(v % 10);}unittest{    static assert(toStringNow!(1uL << 62) == "4611686018427387904");}/// dittotemplate toStringNow(long v){    static if (v < 0)        enum toStringNow = "-" ~ toStringNow!(cast(ulong) -v);    else        enum toStringNow = toStringNow!(cast(ulong) v);}unittest{    static assert(toStringNow!(0x100000000) == "4294967296");    static assert(toStringNow!(-138L) == "-138");}/// dittotemplate toStringNow(uint U){    enum toStringNow = toStringNow!(cast(ulong)U);}/// dittotemplate toStringNow(int I){    enum toStringNow = toStringNow!(cast(long)I);}/// dittotemplate toStringNow(bool B){    enum toStringNow = B ? "true" : "false";}/// dittotemplate toStringNow(string S){    enum toStringNow = S;}/// dittotemplate toStringNow(char C){    enum toStringNow = "" ~ C;}/******** * Parse unsigned integer literal from the start of string s. * returns: *    .value = the integer literal as a string, *    .rest = the string following the integer literal * Otherwise: *    .value = null, *    .rest = s */template parseUinteger(const(char)[] s){    static if (s.length == 0)    {        enum value = "";        enum rest = "";    }    else static if (s[0] >= '0' && s[0] <= '9')    {        enum value = s[0] ~ parseUinteger!(s[1..$]).value;        enum rest = parseUinteger!(s[1..$]).rest;    }    else    {        enum value = "";        enum rest = s;    }}/********Parse integer literal optionally preceded by $(D '-') from the startof string $(D s).Returns:   .value = the integer literal as a string,   .rest = the string following the integer literalOtherwise:   .value = null,   .rest = s*/template parseInteger(const(char)[] s){    static if (s.length == 0)    {        enum value = "";        enum rest = "";    }    else static if (s[0] >= '0' && s[0] <= '9')    {        enum value = s[0] ~ parseUinteger!(s[1..$]).value;        enum rest = parseUinteger!(s[1..$]).rest;    }    else static if (s.length >= 2 &&            s[0] == '-' && s[1] >= '0' && s[1] <= '9')    {        enum value = s[0..2] ~ parseUinteger!(s[2..$]).value;        enum rest = parseUinteger!(s[2..$]).rest;    }    else    {        enum value = "";        enum rest = s;    }}unittest{    assert(parseUinteger!("1234abc").value == "1234");    assert(parseUinteger!("1234abc").rest == "abc");    assert(parseInteger!("-1234abc").value == "-1234");    assert(parseInteger!("-1234abc").rest == "abc");}/**Deprecated aliases held for backward compatibility.*/deprecated alias toStringNow ToString;/// Dittodeprecated alias parseUinteger ParseUinteger;/// Dittodeprecated alias parseUinteger ParseInteger;</textarea></form>    <script>      var editor = CodeMirror.fromTextArea(document.getElementById("code"), {        lineNumbers: true,        matchBrackets: true,        indentUnit: 4,        mode: "text/x-d"      });    </script>    <p>Simple mode that handle D-Syntax (<a href="http://www.dlang.org">DLang Homepage</a>).</p>    <p><strong>MIME types defined:</strong> <code>text/x-d</code>    .</p>  </article>
 |