/
githubmirror
/
CS-Notes
Обзор
Документация
Войти
/
githubmirror
/
CS-Notes
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
docs/_style/prism-master/examples/prism-d.html
267 строк
7 KB
CyC2018
use prism-tomorrow.css
19 дек 2018, 09:09
19 дек 2018, 09:09
e9e604e
Код
Авторство
О чём код?
<h2>Comments</h2> <pre><code>// Single line comment /* Multi-line comment */ /+ Mutli-line /+ nestable +/ comment +/</code></pre> <h2>Numbers</h2> <pre><code>0 .. 2_147_483_647 2_147_483_648 .. 9_223_372_036_854_775_807 0L .. 9_223_372_036_854_775_807L 0U .. 4_294_967_296U 4_294_967_296U .. 18_446_744_073_709_551_615U 0UL .. 18_446_744_073_709_551_615UL 0x0 .. 0x7FFF_FFFF 0x8000_0000 .. 0xFFFF_FFFF 0x1_0000_0000 .. 0x7FFF_FFFF_FFFF_FFFF 0x8000_0000_0000_0000 .. 0xFFFF_FFFF_FFFF_FFFF 0x0L .. 0x7FFF_FFFF_FFFF_FFFFL 0x8000_0000_0000_0000L .. 0xFFFF_FFFF_FFFF_FFFFL 0x0U .. 0xFFFF_FFFFU 0x1_0000_0000U .. 0xFFFF_FFFF_FFFF_FFFFU 0x0UL .. 0xFFFF_FFFF_FFFF_FFFFUL 123_456.567_8 // 123456.5678 1_2_3_4_5_6_.5_6_7_8 // 123456.5678 1_2_3_4_5_6_.5e-6_ // 123456.5e-6 0x1.FFFFFFFFFFFFFp1023 // double.max 0x1p-52 // double.epsilon 1.175494351e-38F // float.min 6.3i // idouble 6.3 6.3fi // ifloat 6.3 6.3Li // ireal 6.3 4.5 + 6.2i // complex number (phased out)</code></pre> <h2>Strings</h2> <pre><code>// WYSIWYG strings r"hello" r"c:\root\foo.exe" r"ab\n" `hello` `c:\root\foo.exe` `ab\n` // Double-quoted strings "hello" "c:\\root\\foo.exe" "ab\n" "ab " // Hex strings x"0A" x"00 FBCD 32FD 0A" // String postfix characters "hello"c // string "hello"w // wstring "hello"d // dstring // Delimited strings q"(foo(xxx))" q"[foo{]" q"EOS This is a multi-line heredoc string EOS" q"/foo]/" // Token strings q{foo} q{/*}*/ } q{ foo(q{hello}); } q{ __TIME__ } // Character literals 'a' '\u000A'</code></pre> <h2>Iasm registers</h2> <pre><code>AL AH AX EAX BL BH BX EBX CL CH CX ECX DL DH DX EDX BP EBP SP ESP DI EDI SI ESI ES CS SS DS GS FS CR0 CR2 CR3 CR4 DR0 DR1 DR2 DR3 DR6 DR7 TR3 TR4 TR5 TR6 TR7 ST ST(0) ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7) MM0 MM1 MM2 MM3 MM4 MM5 MM6 MM7 XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 RAX RBX RCX RDX BPL RBP SPL RSP DIL RDI SIL RSI R8B R8W R8D R8 R9B R9W R9D R9 R10B R10W R10D R10 R11B R11W R11D R11 R12B R12W R12D R12 R13B R13W R13D R13 R14B R14W R14D R14 R15B R15W R15D R15 XMM8 XMM9 XMM10 XMM11 XMM12 XMM13 XMM14 XMM15 YMM0 YMM1 YMM2 YMM3 YMM4 YMM5 YMM6 YMM7 YMM8 YMM9 YMM10 YMM11 YMM12 YMM13 YMM14 YMM15</code></pre> <h2>Full example</h2> <pre><code>#!/usr/bin/dmd -run /* sh style script syntax is supported! */ /* Hello World in D To compile: dmd hello.d or to optimize: dmd -O -inline -release hello.d or to get generated documentation: dmd hello.d -D */ import std.stdio; // References to commonly used I/O routines. void main(char[][] args) // 'void' here means return 0 by default. { // Write-Formatted-Line writefln("Hello World, " // automatic concatenation of string literals "Reloaded"); // Strings are denoted as a dynamic array of chars 'char[]' // auto type inference and built-in foreach foreach(argc, argv; args) { // OOP is supported, of course! And automatic type inference. auto cl = new CmdLin(argc, argv); // 'writefln' is the improved 'printf' !! // user-defined class properties. writefln(cl.argnum, cl.suffix, " arg: %s", cl.argv); // Garbage Collection or explicit memory management - your choice!!! delete cl; } // Nested structs, classes and functions! struct specs { // all vars. automatically initialized int count, allocated; } // Note that declarations read right-to-left. // So that 'char[][]' reads as an array of an array of chars. specs argspecs(char[][] args) // Optional (built-in) function contracts. in{ assert (args.length > 0); // assert built in } out(result){ assert(result.count == CmdLin.total); assert(result.allocated > 0); } body{ specs* s = new specs; // no need for '->' s.count = args.length; // The 'length' property is number of elements. s.allocated = typeof(args).sizeof; // built-in properties for native types foreach(argv; args) s.allocated += argv.length * typeof(argv[0]).sizeof; return *s; } // built-in string and common string operations, e.g. '~' is concatenate. char[] argcmsg = "argc = %d"; char[] allocmsg = "allocated = %d"; writefln(argcmsg ~ ", " ~ allocmsg, argspecs(args).count,argspecs(args).allocated); } /** Stores a single command line argument. */ class CmdLin { private { int _argc; char[] _argv; static uint _totalc; } public: /************ Object constructor. params: argc = ordinal count of this argument. argv = text of the parameter *********/ this(int argc, char[] argv) { _argc = argc + 1; _argv = argv; _totalc++; } ~this() /// Object destructor { // Doesn't actually do anything for this example. } int argnum() /// A property that returns arg number { return _argc; } char[] argv() /// A property that returns arg text { return _argv; } wchar[] suffix() /// A property that returns ordinal suffix { wchar[] suffix; // Built in Unicode strings (utf8,utf16, utf32) switch(_argc) { case 1: suffix = "st"; break; case 2: suffix = "nd"; break; case 3: suffix = "rd"; break; default: // 'default' is mandatory with "-w" compile switch. suffix = "th"; } return suffix; } /* ************** * A property of the whole class, not just an instance. * returns: The total number of commandline args added. *************/ static typeof(_totalc) total() { return _totalc; } // Class invariant, things that must be true after any method is run. invariant { assert(_argc > 0); assert(_totalc >= _argc); } }</code></pre> <h2>Known failures</h2> <p>There are certain edge cases where Prism will fail. There are always such cases in every regex-based syntax highlighter. However, Prism dares to be open and honest about them. If a failure is listed here, it doesn’t mean it will never be fixed. This is more of a “known bugs” list, just with a certain type of bug. </p> <h3>Comments only support one level of nesting</h3> <pre><code>/+ /+ /+ this does not work +/ +/ +/</code></pre> <h3>Token strings only support one level of nesting</h3> <pre><code>q{ q{ q{ this does not work } } }</code></pre>