From 03c9972485dc8331ea14ec9bd5cadaf4ef48e4a4 Mon Sep 17 00:00:00 2001 From: Cameron Ross Date: Tue, 12 Jun 2018 02:57:28 -0300 Subject: [PATCH] convert docs to markdown and remove built doc artifacts (#153) convert docs to markdown and remove built doc artifacts merged-on-behalf-of: BBasile --- .../articles/spec_differences.doctree | Bin 13260 -> 0 bytes doc/doctrees/environment.pickle | Bin 12796 -> 0 bytes doc/doctrees/index.doctree | Bin 4411 -> 0 bytes doc/doctrees/tutorials/custom_types.doctree | Bin 47071 -> 0 bytes .../tutorials/getting_started.doctree | Bin 31223 -> 0 bytes doc/doctrees/tutorials/yaml_syntax.doctree | Bin 28166 -> 0 bytes doc/html/.buildinfo | 4 - .../_sources/articles/spec_differences.txt | 61 -- doc/html/_sources/index.txt | 21 - doc/html/_sources/tutorials/custom_types.txt | 337 ------- .../_sources/tutorials/getting_started.txt | 176 ---- doc/html/_static/ajax-loader.gif | Bin 673 -> 0 bytes doc/html/_static/basic.css | 537 ----------- doc/html/_static/comment-bright.png | Bin 3500 -> 0 bytes doc/html/_static/comment-close.png | Bin 3578 -> 0 bytes doc/html/_static/comment.png | Bin 3445 -> 0 bytes doc/html/_static/default.css | 256 ------ doc/html/_static/doctools.js | 238 ----- doc/html/_static/down-pressed.png | Bin 368 -> 0 bytes doc/html/_static/down.png | Bin 363 -> 0 bytes doc/html/_static/file.png | Bin 392 -> 0 bytes doc/html/_static/jquery.js | 2 - doc/html/_static/minus.png | Bin 199 -> 0 bytes doc/html/_static/plus.png | Bin 199 -> 0 bytes doc/html/_static/pygments.css | 63 -- doc/html/_static/searchtools.js | 622 ------------- doc/html/_static/sidebar.js | 159 ---- doc/html/_static/underscore.js | 31 - doc/html/_static/up-pressed.png | Bin 372 -> 0 bytes doc/html/_static/up.png | Bin 363 -> 0 bytes doc/html/_static/websupport.js | 808 ---------------- doc/html/api/dyaml/constructor.html | 189 ---- .../api/dyaml/constructor/Constructor.html | 291 ------ doc/html/api/dyaml/dumper.html | 64 -- doc/html/api/dyaml/dumper/Dumper.html | 319 ------- doc/html/api/dyaml/exception.html | 59 -- .../api/dyaml/exception/YAMLException.html | 71 -- doc/html/api/dyaml/hacks.html | 164 ---- doc/html/api/dyaml/linebreak.html | 54 -- doc/html/api/dyaml/linebreak/LineBreak.html | 65 -- doc/html/api/dyaml/loader.html | 59 -- doc/html/api/dyaml/loader/Loader.html | 329 ------- doc/html/api/dyaml/node.html | 64 -- doc/html/api/dyaml/node/Node.html | 866 ------------------ doc/html/api/dyaml/node/NodeException.html | 57 -- doc/html/api/dyaml/node/YAMLNull.html | 68 -- doc/html/api/dyaml/representer.html | 179 ---- .../api/dyaml/representer/Representer.html | 433 --------- .../representer/RepresenterException.html | 57 -- doc/html/api/dyaml/resolver.html | 67 -- doc/html/api/dyaml/resolver/Resolver.html | 173 ---- doc/html/api/dyaml/style.html | 61 -- doc/html/api/dyaml/style/CollectionStyle.html | 65 -- doc/html/api/dyaml/style/ScalarStyle.html | 71 -- doc/html/api/highlight.pack.js | 1 - doc/html/api/index.html | 84 -- doc/html/api/search.js | 179 ---- doc/html/api/show_hide.js | 17 - doc/html/api/style.css | 726 --------------- doc/html/articles/spec_differences.html | 146 --- doc/html/index.html | 112 --- doc/html/objects.inv | Bin 202 -> 0 bytes doc/html/search.html | 97 -- doc/html/searchindex.js | 1 - doc/html/tutorials/custom_types.html | 385 -------- doc/html/tutorials/getting_started.html | 241 ----- doc/html/tutorials/yaml_syntax.html | 338 ------- docs/articles/spec_differences.md | 64 ++ docs/index.md | 11 + {docsrc => docs}/logo128.png | Bin {doc/html/_static => docs}/logo210.png | Bin docs/tutorials/custom_types.md | 336 +++++++ docs/tutorials/getting_started.md | 164 ++++ .../tutorials/yaml_syntax.md | 193 ++-- docsrc/Makefile | 139 --- docsrc/articles/spec_differences.rst | 61 -- docsrc/autoddoc_index.dd | 18 - docsrc/conf.py | 236 ----- docsrc/index.rst | 21 - docsrc/logo210.png | Bin 5329 -> 0 bytes docsrc/tutorials/custom_types.rst | 337 ------- docsrc/tutorials/getting_started.rst | 176 ---- docsrc/tutorials/yaml_syntax.rst | 272 ------ 83 files changed, 656 insertions(+), 10839 deletions(-) delete mode 100644 doc/doctrees/articles/spec_differences.doctree delete mode 100644 doc/doctrees/environment.pickle delete mode 100644 doc/doctrees/index.doctree delete mode 100644 doc/doctrees/tutorials/custom_types.doctree delete mode 100644 doc/doctrees/tutorials/getting_started.doctree delete mode 100644 doc/doctrees/tutorials/yaml_syntax.doctree delete mode 100644 doc/html/.buildinfo delete mode 100644 doc/html/_sources/articles/spec_differences.txt delete mode 100644 doc/html/_sources/index.txt delete mode 100644 doc/html/_sources/tutorials/custom_types.txt delete mode 100644 doc/html/_sources/tutorials/getting_started.txt delete mode 100644 doc/html/_static/ajax-loader.gif delete mode 100644 doc/html/_static/basic.css delete mode 100644 doc/html/_static/comment-bright.png delete mode 100644 doc/html/_static/comment-close.png delete mode 100644 doc/html/_static/comment.png delete mode 100644 doc/html/_static/default.css delete mode 100644 doc/html/_static/doctools.js delete mode 100644 doc/html/_static/down-pressed.png delete mode 100644 doc/html/_static/down.png delete mode 100644 doc/html/_static/file.png delete mode 100644 doc/html/_static/jquery.js delete mode 100644 doc/html/_static/minus.png delete mode 100644 doc/html/_static/plus.png delete mode 100644 doc/html/_static/pygments.css delete mode 100644 doc/html/_static/searchtools.js delete mode 100644 doc/html/_static/sidebar.js delete mode 100644 doc/html/_static/underscore.js delete mode 100644 doc/html/_static/up-pressed.png delete mode 100644 doc/html/_static/up.png delete mode 100644 doc/html/_static/websupport.js delete mode 100644 doc/html/api/dyaml/constructor.html delete mode 100644 doc/html/api/dyaml/constructor/Constructor.html delete mode 100644 doc/html/api/dyaml/dumper.html delete mode 100644 doc/html/api/dyaml/dumper/Dumper.html delete mode 100644 doc/html/api/dyaml/exception.html delete mode 100644 doc/html/api/dyaml/exception/YAMLException.html delete mode 100644 doc/html/api/dyaml/hacks.html delete mode 100644 doc/html/api/dyaml/linebreak.html delete mode 100644 doc/html/api/dyaml/linebreak/LineBreak.html delete mode 100644 doc/html/api/dyaml/loader.html delete mode 100644 doc/html/api/dyaml/loader/Loader.html delete mode 100644 doc/html/api/dyaml/node.html delete mode 100644 doc/html/api/dyaml/node/Node.html delete mode 100644 doc/html/api/dyaml/node/NodeException.html delete mode 100644 doc/html/api/dyaml/node/YAMLNull.html delete mode 100644 doc/html/api/dyaml/representer.html delete mode 100644 doc/html/api/dyaml/representer/Representer.html delete mode 100644 doc/html/api/dyaml/representer/RepresenterException.html delete mode 100644 doc/html/api/dyaml/resolver.html delete mode 100644 doc/html/api/dyaml/resolver/Resolver.html delete mode 100644 doc/html/api/dyaml/style.html delete mode 100644 doc/html/api/dyaml/style/CollectionStyle.html delete mode 100644 doc/html/api/dyaml/style/ScalarStyle.html delete mode 100644 doc/html/api/highlight.pack.js delete mode 100644 doc/html/api/index.html delete mode 100644 doc/html/api/search.js delete mode 100644 doc/html/api/show_hide.js delete mode 100644 doc/html/api/style.css delete mode 100644 doc/html/articles/spec_differences.html delete mode 100644 doc/html/index.html delete mode 100644 doc/html/objects.inv delete mode 100644 doc/html/search.html delete mode 100644 doc/html/searchindex.js delete mode 100644 doc/html/tutorials/custom_types.html delete mode 100644 doc/html/tutorials/getting_started.html delete mode 100644 doc/html/tutorials/yaml_syntax.html create mode 100644 docs/articles/spec_differences.md create mode 100644 docs/index.md rename {docsrc => docs}/logo128.png (100%) rename {doc/html/_static => docs}/logo210.png (100%) create mode 100644 docs/tutorials/custom_types.md create mode 100644 docs/tutorials/getting_started.md rename doc/html/_sources/tutorials/yaml_syntax.txt => docs/tutorials/yaml_syntax.md (67%) delete mode 100644 docsrc/Makefile delete mode 100644 docsrc/articles/spec_differences.rst delete mode 100644 docsrc/autoddoc_index.dd delete mode 100644 docsrc/conf.py delete mode 100644 docsrc/index.rst delete mode 100644 docsrc/logo210.png delete mode 100644 docsrc/tutorials/custom_types.rst delete mode 100644 docsrc/tutorials/getting_started.rst delete mode 100644 docsrc/tutorials/yaml_syntax.rst diff --git a/doc/doctrees/articles/spec_differences.doctree b/doc/doctrees/articles/spec_differences.doctree deleted file mode 100644 index 0727397a6c142840a56e4a171668e73b9848af8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13260 zcmeHO37i~NnIA$XGtdc;T&xiWe&0sCc1!xTkx%r+d4*?(OdC|NE+{r}`L|EYbY@{rLTo z>8kg>_ucRN-tpBP%Zeqp82Fa$2WuZJXtM@oYMfeL<;mPHp z?95J_)6vmkTb{4EWo_1RYmQd3%4MO1Qxx8)Trobe2N0+D zg~l&lRTQnVRWy9db!69gps)3Ug6CU47;~L`Nt8X=9m*cPuWBeyIvT6PIs%Cjcr z`fSmwnwB%4GfJgM>!vkr+W7C=hBKX!8=(5LL-`b_UKzDmu715kUjYR`RJqYyrmu+G z&zZOy${wnSl4T6dT9$7PddAQ}!#9S;ue|ZfBS-fSm59Y5nATIpAxLi(ZQ%_Om-&=P zIpz6sliuYU)1(-=S?_J&OP;G|4BuB)A@HI6^Fn!kR$opWPb>!qL_=R~TaJL5O(i_j zwM&Qg@7lF{_ugH@yGQozxn%F&J^P0DX7n>j>Dr{;T`-EXip+ZfUP?ig=z4O?q~2Au z4bQ{#)=9lHYQ1nW05zbO+s2jwI(Affk-5w~YceP_d$K2r9oo!>a!1yL3Qefa zJjdK*Zq~bE2)WaQEKkjvTPDq|lja4JrZy=D%you&;iMciyNtlxHr8oIbYw2uObCu@ zi;Nrsnc+}g3^MHg2N$PA-Te=a-gLz^hwJXoFOAN!3k+ss20IzE+)eCV(!d@#YhY?m zGfzjwJf`r-6JTWTUB~3UQ0|8~CNVV}6pU6S!yk=lWmL_K9EJRshVn9!zweBWj-w_5 zf(C!pJhvj!5#nd6e_b5+Ku6s+mM@-5+Mz(TRDQ3(08lwo`7YLibV<6hp*xLt|I zJ;NM%QlYI1y#fyU%upU62PNfR$_{Fh8y*bhmE?x&;D$$#-0T4@o_R1DEabazLGp*9 z?RtV6E@3ED{vQ}`glrR`yoqEZ?AI^OubV@83-NRrcuJ=^_TD0#o&&WuXV_Lr<0QA} z;aD6bzC9|Ro8p>1ak3rPXD2Fo9=LwOH1m*aDwGDvMf7iOo7f70Z3{n73&M;nzz)Sw zmN10v87o>}nSzpnB6&HhuZSAu^aP?$$4)FJXh{*REuysDpU7jjtR;wE-tt8yBP|e} z3FRy)dJLGxU8J#U)l~=(nEr(YUm)|85REE^n)NtUCHbw@St%%q&`A36FVK7Pqi64){o_x^kBMEErkzD2BDlwSgEolu}U#X zcePN?lkOgb?yj>9%I!tN#s-2^QMTQhR&*U7>m+!qLtaU*1U5A_fPeTIotk2;PEB1t zHI>U8H7%?lXqB!N5!t5&uNh)EjH4V<4rs-Z%N!9xGkw20Iy6*Wpp|jXRntQ?Yt|Z~ z`EbCsUFVQ<6}UJMGeI^j2{3@I*rIhzHpxO8wbo7Yd^X9gp?twFue7za6NPQ09otAw zbXyi)GVF<;#gq)D$sh5(9UK z@)e5=z-@_vS1!rGt6~O5f%Da&d`-f@-OPX)(IsKn`{io^_PS8MKB2&^DeCux@(oEJ zPZgs6#wDrW8&kg=Xx|jdHz(BZNmJhl>PyZz`4$X)Ybf7FRDUL9ip%>#`SwLFV;#L? zNiN@+($Tv@`R;_v`_f#lCmpq!`SLwr@V%jY9}!#%sJ&xhHyoX#WaRr{+51EJ0YXA< zds6X4K0sFZAkq;q2FfxYXh}q|JAMd~o;>;wL&66``H@5~_eaj#Q|DiPl-;+NRFsZw z@?#kJ@lbw(#A@k{lp=sEj^Yo6@{t; z7H2c^O9(fQg!0S8^;#&g#nagiI23FcC%-~*=BqfVoUhoUUe&+}?4x>j6%$gZIU&E+ z5_YzYolmyDD_PC;NgpZLWR3o2)_l}#r@XDi z?QenGror;J!PW1C@^=%peRol9-wWmM5k1Q39Cw=a^84-dvW+PH0VvVwE)A1^2oir3 z%0DJtNh45wZ&9-Ehw@LTmy%xMK3XA-6F!C3n{L4hv?=Q;w zgHZkzaX_1mQy4?#UpMRQZ`$c>2eJOQVEt5+|2s(h_o4g;h-MNiKVXTGD0#2*!%+Ss z30;naZi?2}wqS2l4(M!CGYW2i9k@~8eNZ*MG0JH-QoeJx`+SB(Fd1aB1{e+JQ-*D~ z7u{|Zh0Fr7R8tqq%FJIQGO4x|0z)F=M~_WaLK{ukMk zxcm{@GgSCzw2x?*-M84L?(yM-)OE;RT2i=e)Ibfr+ z4wc~{t&-&8vl6wE2I1(mJ<3(+1(Ut_2^HO!K;ttJof+aOifA}_QmYwcO$3rYe=_OF zNv-9MrB9oN6MpCnH%s9{oy8c}M;IqgfWbpfseXL|SF@%atURN2ES+kkPD=)~nrY!S z1yDF__UcPhazsAxhW0XzcOTJ$8&SipQ6$2(OMD*_FMwyo!l-sDt*%3O>alzBV~YcgHrv}kuGj* z7xzu2QA`MdJ50{BjsOg{a7KwXe8{(p6A@QXQ&U^&hmhOxgo}Ga*$aH+%Lk4HF>N_~ z+k_Pww+Q^=1{Bk+`4{zO4_7dJNRCmKyE z+Kqlp5&Z4g0vRsBL#X!fplDhUZcGbvbMtwj8bJ?+?ByYJZbNH{`f*|-hx-|5GzBy@ z1wSVaFXhIiIlK)0F^Ahh?rDta=@BN%k~4%m&EYU)IoS!ME(a1|e+FZ}BEmlL|G`w3 zd+~5fJ(IB>h_Rjr{;&Y&Jc)^)$8@K2Bx72`sZI$|C8rJo6o{HLQo@fVI=R0M#8+jDX4f1SK?)7{tgi5#pKKH8_)hhN{abW-=vF4$$DY|cRd{09G zRegPlB09RnV{oL140dXsg$87W0JTnmf#LJOPh9IWtb#%urL% zDB_iYpHLN8_x&@mX~^|?fr`@uM5*{69iHkdePuWv7NfWmP({Fv>%H|tSX?i7s>B!t z{_5Rm;8IIf=EiAiT;nZN3a*_`MtRCa^Q5w$XlQT3N5o+bZK0Z{o;6sGTR3R(^C%jg7QUwzc-Zr)v)dECPjOq_iq}*r zM_JLGK5m?DperITqh5f1SB3Z+s@n)wUzg}JPbILBa@JF~qX&GR1$qe8D0{8~2MQEX zv8L`o-?+X?m5UgF66iqL>KNMeP4TUu@46@)u!LXcN(0kJ!LNEDLG(axMZuM}cjEmx zs;EVkB#rJFJ@q2S-A4tD)qK&dP$8wK?&8*7-zAC(i!UaGo#Lv8tOXa@-im@>e z3F$bsEfbD9K@UARm_nVTQK_nz;+^# z?ktHyFs)uqnDjNGQV`@Z3s`8GLip-6Xg{H!i__9-;4g*$wS;H|u~zie>*%GIs)}(5 zm!GF;r(TaX7iLPOuNpcDF; z!kJTVXJnD!RZj#ZNLjJfJGgm`m`8P`$n&MCW7wX0C%3O7?V$*)cQbGwO^1{tzlU2_H(5-*7tMNS;FkyYsrS)yCPqb*==~8U%Sjtq-A`aWJY>*= zx;{Yft5GcP8Mr8hud@;#;ITajG`Q|6Tl4CJ1V%H?DCBEa303ePLd#gU-q+})>ca%s zsUN)xEImliUGdio>LYkFH|eVpY^XMg<|FRZeDzVZAJ==P1>&JWw)z+v#`Qk-t3@q- zoLg6UC<*iPd;sC8PoV9DzKYzZ9y=aFn|^*AJ8HFBuDalxuEVjTB<6+y>Z0cJ^=|>xr>J>3Dww9#r|EHXqxPDn;KKl!;i=I_5jel7uFufmWmZXjmLB>r7t&_` z92!sPo1$qiqWW$RYW2;0{BeN#JU}psVter9@YEO3IH{k_GX*uW0-rnJBNE||kV7hs5j5 zY@n}e_=Y9QtB*3^*YFqH=8I^z^K~ACWfWHlCf{`6^8|c|Kp#BxBzeM9-vH>O`X>Hz TO$R=qP~XB!s2;=Lppg41fW#(Q diff --git a/doc/doctrees/environment.pickle b/doc/doctrees/environment.pickle deleted file mode 100644 index f4c23eac593a639a498df46a74cdd75947ef5240..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12796 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 GB>o?T6|&j@ diff --git a/doc/doctrees/tutorials/getting_started.doctree b/doc/doctrees/tutorials/getting_started.doctree deleted file mode 100644 index d2a2ba2f477a9b29a1840f69ba2e4f2252761eaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31223 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 U)hEO^T;+DWMDj8G#j^GP15fZ^kpKVy diff --git a/doc/doctrees/tutorials/yaml_syntax.doctree b/doc/doctrees/tutorials/yaml_syntax.doctree deleted file mode 100644 index 3bb4e29a0ea321de78996555c5fad765c043f1cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28166 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 Z0WlMQ`2#KZbd{Ke2W(=--|A5I{{dXe`_ `(local copy) `_ - -Tutorials: - -.. toctree:: - :maxdepth: 2 - - tutorials/getting_started - tutorials/custom_types - tutorials/yaml_syntax - -Articles: - -.. toctree:: - :maxdepth: 2 - - articles/spec_differences diff --git a/doc/html/_sources/tutorials/custom_types.txt b/doc/html/_sources/tutorials/custom_types.txt deleted file mode 100644 index feb5f86..0000000 --- a/doc/html/_sources/tutorials/custom_types.txt +++ /dev/null @@ -1,337 +0,0 @@ -====================== -Custom YAML data types -====================== - -Sometimes you need to serialize complex data types such as classes. To do this -you could use plain nodes such as mappings with classes' fields. YAML also -supports custom types with identifiers called *tags*. That is the topic of this -tutorial. - -Each YAML node has a tag specifying its type. For instance: strings use the tag -``tag:yaml.org,2002:str``. Tags of most default types are *implicitly resolved* -during parsing - you don't need to specify tag for each float, integer, etc. -D:YAML can also implicitly resolve custom tags, as we will show later. - - ------------ -Constructor ------------ - -D:YAML uses the `Constructor <../api/dyaml.constructor.html>`_ class to process -each node to hold data type corresponding to its tag. *Constructor* stores -functions to process each supported tag. These are supplied by the user using -the *addConstructorXXX()* methods, where *XXX* is *Scalar*, *Sequence* or -*Mapping*. *Constructor* is then passed to *Loader*, which parses YAML input. - -Structs and classes must implement the *opCmp()* operator for YAML support. This -is used for duplicate detection in mappings, sorting and equality comparisons of -nodes. The signature of the operator that must be implemented is -``const int opCmp(ref const MyStruct s)`` for structs where *MyStruct* is the -struct type, and ``int opCmp(Object o)`` for classes. Note that the class -*opCmp()* should not alter the compared values - it is not const for compatibility -reasons. - -We will implement support for an RGB color type. It is implemented as the -following struct: - -.. code-block:: d - - struct Color - { - ubyte red; - ubyte green; - ubyte blue; - - const int opCmp(ref const Color c) - { - if(red != c.red) {return red - c.red;} - if(green != c.green){return green - c.green;} - if(blue != c.blue) {return blue - c.blue;} - return 0; - } - } - -First, we need a function to construct our data type. The function will take a -reference to *Node* to construct from. The node is guaranteed to contain either -a *string*, an array of *Node* or of *Node.Pair*, depending on whether we're -constructing our value from a scalar, sequence, or mapping, respectively. -If this function throws any exception, D:YAML handles it and adds its message -to a *YAMLException* that will be thrown when loading the file. - -In this tutorial, we have functions to construct a color from a scalar, using -CSS-like format, RRGGBB, or from a mapping, where we use the following format: -{r:RRR, g:GGG, b:BBB} . Code of these functions: - -.. code-block:: d - - Color constructColorScalar(ref Node node) - { - string value = node.as!string; - - if(value.length != 6) - { - throw new Exception("Invalid color: " ~ value); - } - //We don't need to check for uppercase chars this way. - value = value.toLower(); - - //Get value of a hex digit. - uint hex(char c) - { - import std.ascii; - if(!std.ascii.isHexDigit(c)) - { - throw new Exception("Invalid color: " ~ value); - } - - if(std.ascii.isDigit(c)) - { - return c - '0'; - } - return c - 'a' + 10; - } - - Color result; - result.red = cast(ubyte)(16 * hex(value[0]) + hex(value[1])); - result.green = cast(ubyte)(16 * hex(value[2]) + hex(value[3])); - result.blue = cast(ubyte)(16 * hex(value[4]) + hex(value[5])); - - return result; - } - - Color constructColorMapping(ref Node node) - { - ubyte r,g,b; - - //Might throw if a value is missing is not an integer, or is out of range. - //If this happens, D:YAML will handle the exception and use its message - //in a YAMLException thrown when loading. - r = node["r"].as!ubyte; - g = node["g"].as!ubyte; - b = node["b"].as!ubyte; - - return Color(cast(ubyte)r, cast(ubyte)g, cast(ubyte)b); - } - -Next, we need some YAML data using our new tag. Create a file called -``input.yaml`` with the following contents: - -.. code-block:: yaml - - scalar-red: !color FF0000 - scalar-orange: !color FFFF00 - mapping-red: !color-mapping {r: 255, g: 0, b: 0} - mapping-orange: - !color-mapping - r: 255 - g: 255 - b: 0 - -You can see that we're using tag ``!color`` for scalar colors, and -``!color-mapping`` for colors expressed as mappings. - -Finally, the code to put it all together: - -.. code-block:: d - - void main() - { - auto red = Color(255, 0, 0); - auto orange = Color(255, 255, 0); - - try - { - auto constructor = new Constructor; - //both functions handle the same tag, but one handles scalar, one mapping. - constructor.addConstructorScalar("!color", &constructColorScalar); - constructor.addConstructorMapping("!color-mapping", &constructColorMapping); - - auto loader = Loader("input.yaml"); - loader.constructor = constructor; - - auto root = loader.load(); - - if(root["scalar-red"].as!Color == red && - root["mapping-red"].as!Color == red && - root["scalar-orange"].as!Color == orange && - root["mapping-orange"].as!Color == orange) - { - writeln("SUCCESS"); - return; - } - } - catch(YAMLException e) - { - writeln(e.msg); - } - - writeln("FAILURE"); - } - -First, we create a *Constructor* and pass functions to handle the ``!color`` -and ``!color-mapping`` tag. We construct a *Loader* and pass the *Constructor* -to it. We then load the YAML document, and finally, read the colors to test if -they were loaded as expected. - -You can find the source code for what we've done so far in the -``examples/constructor`` directory in the D:YAML package. - - --------- -Resolver --------- - -Specifying tag for every color can be tedious. D:YAML can implicitly resolve -scalar tags using regular expressions. This is how default types are resolved. -We will use the `Resolver <../api/dyaml.resolver.html>`_ class to add implicit -tag resolution for the Color data type (in its scalar form). - -We use the *addImplicitResolver()* method of *Resolver*, passing the tag, -regular expression the scalar must match to resolve to this tag, and a string of -possible starting characters of the scalar. Then we pass the *Resolver* to -*Loader*. - -Note that resolvers added first override ones added later. If no resolver -matches a scalar, YAML string tag is used. Therefore our custom values must not -be resolvable as any non-string YAML data type. - -Add this to your code to add implicit resolution of ``!color``. - -.. code-block:: d - - //code from the previous example... - - auto resolver = new Resolver; - import std.regex; - resolver.addImplicitResolver("!color", std.regex.regex("[0-9a-fA-F]{6}"), - "0123456789abcdefABCDEF"); - - auto loader = Loader("input.yaml"); - - loader.constructor = constructor; - loader.resolver = resolver; - - //code from the previous example... - -Now, change contents of ``input.yaml`` to this: - -.. code-block:: yaml - - scalar-red: FF0000 - scalar-orange: FFFF00 - mapping-red: !color-mapping {r: 255, g: 0, b: 0} - mapping-orange: - !color-mapping - r: 255 - g: 255 - b: 0 - -We no longer need to specify the tag for scalar color values. Compile and test -the example. If everything went as expected, it should report success. - -You can find the complete code in the ``examples/resolver`` directory in the -D:YAML package. - - ------------ -Representer ------------ - -Now that you can load custom data types, it might be good to know how to dump -them. D:YAML uses the `Representer <../api/dyaml.representer.html>`_ class for -this purpose. - -*Representer* processes YAML nodes into plain mapping, sequence or scalar nodes -ready for output. Just like with *Constructor*, this is done by user specified -functions. These functions take references to a node to process and to the -*Representer*, and return the processed node. - -Representer functions can be added with the *addRepresenter()* method. The -*Representer* is then passed to *Dumper*, which dumps YAML documents. Only one -function per type can be specified. This is asserted in *addRepresenter()* -preconditions. Default YAML types already have representer functions specified, -but you can disable them by constructing *Representer* with the -*useDefaultRepresenters* parameter set to false. - -By default, tags are explicitly output for all non-default types. To make dumped -tags implicit, you can pass a *Resolver* that will resolve them implicitly. Of -course, you will need to use an identical *Resolver* when loading the output. - -With the following code, we will add support for dumping the our Color type. - -.. code-block:: d - - Node representColor(ref Node node, Representer representer) - { - //The node is guaranteed to be Color as we add representer for Color. - Color color = node.as!Color; - - static immutable hex = "0123456789ABCDEF"; - - //Using the color format from the Constructor example. - string scalar; - foreach(channel; [color.red, color.green, color.blue]) - { - scalar ~= hex[channel / 16]; - scalar ~= hex[channel % 16]; - } - - //Representing as a scalar, with custom tag to specify this data type. - return representer.representScalar("!color", scalar); - } - -First we get the *Color* from the node. Then we convert it to a string with the -CSS-like format we've used before. Finally, we use the *representScalar()* -method of *Representer* to get a scalar node ready for output. There are -corresponding *representMapping()* and *representSequence()* methods -as well, with examples in the -`Resolver API documentation <../api/dyaml.resolver.html>`_. - -Since a type can only have one representer function, we don't dump *Color* both -in the scalar and mapping formats we've used before. However, you can decide to -dump the node with different formats/tags in the representer function itself. -E.g. you could dump the Color as a mapping based on some arbitrary condition, -such as the color being white. - -.. code-block:: d - - void main() - { - try - { - auto representer = new Representer; - representer.addRepresenter!Color(&representColor); - - auto resolver = new Resolver; - import std.regex; - resolver.addImplicitResolver("!color", std.regex.regex("[0-9a-fA-F]{6}"), - "0123456789abcdefABCDEF"); - - auto dumper = Dumper("output.yaml"); - dumper.representer = representer; - dumper.resolver = resolver; - - auto document = Node([Color(255, 0, 0), - Color(0, 255, 0), - Color(0, 0, 255)]); - - dumper.dump(document); - } - catch(YAMLException e) - { - writeln(e.msg); - } - } - -We construct a new *Representer*, and specify a representer function for the -*Color* (the template argument) type. We also construct a *Resolver*, same as in -the previous section, so the ``!color`` tag will be implicit. Of course, -identical *Resolver* would then have to be used when loading the file. -You don't need to do this if you want the tag to be explicit. - -We construct a *Dumper* to file ``output.yaml`` and pass the *Representer* and -*Resolver* to it. Then, we create a simple node containing a sequence of colors -and finally, we dump it. - -Source code for this section can be found in the ``examples/representer`` -directory of the D:YAML package. diff --git a/doc/html/_sources/tutorials/getting_started.txt b/doc/html/_sources/tutorials/getting_started.txt deleted file mode 100644 index 651ce2c..0000000 --- a/doc/html/_sources/tutorials/getting_started.txt +++ /dev/null @@ -1,176 +0,0 @@ -=============== -Getting started -=============== - -Welcome to D:YAML! D:YAML is a `YAML `_ parser -library for the `D programming language `_. This tutorial will -explain how to set D:YAML up and use it in your projects. - -This is meant to be the **simplest possible** introduction to D:YAML. Some of this -information might already be known to you. Only basic usage is covered. - - ----------- -Setting up ----------- - -^^^^^^^^^^^^^^^^^^^^^^^^ -Install the DMD compiler -^^^^^^^^^^^^^^^^^^^^^^^^ - -Digital Mars D compiler, or DMD, is the most commonly used D compiler. You can find its -newest version `here `_. Download the version of DMD -for your operating system and install it. - -.. note:: - Other D compilers exist, such as - `GDC `_ and - `LDC `_. - -^^^^^^^^^^^ -Install dub -^^^^^^^^^^^ - -`dub `_ is a build system and package manager for D. -It is the standard way to manage D projects and their dependencies, compilation and so -on. - -DMD may include DUB in future releases, but at this point we need to install it -separately. See -`installation instructions `_. - - -------------------------- -Your first D:YAML project -------------------------- - -Create a directory for your project and in that directory, create a new file named -``input.yaml`` and paste this code into the file: - -.. code-block:: yaml - - Hello World : [Hello, World] - Answer: 42 - -This will serve as input for our example. - -Now we need to parse it. Create a new file with name ``main.d``. Paste following code -into the file: - -.. code-block:: d - - import std.stdio; - import yaml; - - void main() - { - //Read the input. - Node root = Loader("input.yaml").load(); - - //Display the data read. - foreach(string word; root["Hello World"]) - { - writeln(word); - } - writeln("The answer is ", root["Answer"].as!int); - - //Dump the loaded document to output.yaml. - Dumper("output.yaml").dump(root); - } - - -^^^^^^^^^^^^^^^^^^^^^^^ -Explanation of the code -^^^^^^^^^^^^^^^^^^^^^^^ - -First, we import the *dyaml.all* module. This is the only D:YAML module you need to -import - it automatically imports all needed modules. - -Next we load the file using the *Loader.load()* method. *Loader* is a struct used for -parsing YAML documents. The *load()* method loads the file as **one** YAML document, or -throws *YAMLException*, D:YAML exception type, if the file could not be parsed or -contains more than one document. Note that we don't do any error checking here in order -to keep the example as simple as possible. - -*Node* represents a node in a YAML document. It can be a sequence (array), mapping -(associative array) or a scalar (value). Here the root node is a mapping, and we use the -index operator to get subnodes with keys "Hello World" and "Answer". We iterate over the -former, as it is a sequence, and use the *Node.as()* method on the latter to read its -value as an integer. - -You can iterate over a mapping or sequence as if it was an associative or normal array, -respectively. If you try to iterate over a scalar, it will throw a *YAMLException*. - -You can iterate using *Node* as the iterated type, or specify the type iterated nodes -are expected to have. D:YAML will automatically convert to that type if possible. Here -we specify the *string* type, so we iterate over the "Hello World" sequence as an array -of strings. If it is not possible to convert to iterated type, a *YAMLException* is -thrown. For instance, if we specified *int* here, we would get an error, as "Hello" -cannot be converted to an integer. - -The *Node.as()* method is used to read value of a scalar node as specified type. If the -scalar does not have the specified type, D:YAML will try to convert it, throwing -*YAMLException* if not possible. - -Finally we dump the document we just read to ``output.yaml`` with the *Dumper.dump()* -method. *Dumper* is a struct used to dump YAML documents. The *dump()* method writes -one or more documents to a file, throwing *YAMLException* if the file could not be -written to. - -D:YAML tries to preserve style information in documents so e.g. ``[Hello, World]`` is -not turned into: - -| ``- Hello`` -| ``- World`` - -However, comments are not preserved and neither are any extra formatting whitespace that -doesn't affect the meaning of YAML contents. - - -^^^^^^^^^ -Compiling -^^^^^^^^^ - -We're going to use dub, which we installed at the beginning, to compile our project. - -Create a file called ``dub.json`` with the following contents: - -.. code-block:: json - - { - "name": "getting-started", - "targetType": "executable", - "sourceFiles": ["main.d"], - "mainSourceFile": "main.d", - "dependencies": - { - "dyaml": { "version" : "~>0.5.0" }, - }, - } - -This file tells dub that we're building an executable called ``getting-started`` from -a D source file ``main.d``, and that our project depends on D:YAML 0.5.0 or any newer, -bugfix release of D:YAML 0.5 . DUB will automatically find and download the correct -version of D:YAML when the project is built. - -Now run the following command in your project's directory:: - - dub build - -dub will automatically download D:YAML and compile it, and then then it will compile our -program. This will generate an executable called ``getting-started`` or -``getting-started.exe`` in your directory. When you run it, it should produce the -following output:: - - Hello - World - The answer is 42 - - -^^^^^^^^^^ -Conclusion -^^^^^^^^^^ - -You should now have a basic idea about how to use D:YAML. To learn more, look at the -`API documentation <../api/index.html>`_ and other tutorials. You can find code for this -example in the ``example/getting_started`` directory in the package. diff --git a/doc/html/_static/ajax-loader.gif b/doc/html/_static/ajax-loader.gif deleted file mode 100644 index 61faf8cab23993bd3e1560bff0668bd628642330..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmZ?wbhEHb6krfw_{6~Q|Nno%(3)e{?)x>&1u}A`t?OF7Z|1gRivOgXi&7IyQd1Pl zGfOfQ60;I3a`F>X^fL3(@);C=vM_KlFfb_o=k{|A33hf2a5d61U}gjg=>Rd%XaNQW zW@Cw{|b%Y*pl8F?4B9 zlo4Fz*0kZGJabY|>}Okf0}CCg{u4`zEPY^pV?j2@h+|igy0+Kz6p;@SpM4s6)XEMg z#3Y4GX>Hjlml5ftdH$4x0JGdn8~MX(U~_^d!Hi)=HU{V%g+mi8#UGbE-*ao8f#h+S z2a0-5+vc7MU$e-NhmBjLIC1v|)9+Im8x1yacJ7{^tLX(ZhYi^rpmXm0`@ku9b53aN zEXH@Y3JaztblgpxbJt{AtE1ad1Ca>{v$rwwvK(>{m~Gf_=-Ro7Fk{#;i~+{{>QtvI yb2P8Zac~?~=sRA>$6{!(^3;ZP0TPFR(G_-UDU(8Jl0?(IXu$~#4A!880|o%~Al1tN diff --git a/doc/html/_static/basic.css b/doc/html/_static/basic.css deleted file mode 100644 index 967e36c..0000000 --- a/doc/html/_static/basic.css +++ /dev/null @@ -1,537 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox input[type="text"] { - width: 170px; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - width: 30px; -} - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li div.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable dl, table.indextable dd { - margin-top: 0; - margin-bottom: 0; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- general body styles --------------------------------------------------- */ - -a.headerlink { - visibility: hidden; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.field-list ul { - padding-left: 1em; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px 7px 0 7px; - background-color: #ffe; - width: 40%; - float: right; -} - -p.sidebar-title { - font-weight: bold; -} - -/* -- topics ---------------------------------------------------------------- */ - -div.topic { - border: 1px solid #ccc; - padding: 7px 7px 0 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -div.admonition dl { - margin-bottom: 0; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - border: 0; - border-collapse: collapse; -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -table.field-list td, table.field-list th { - border: 0 !important; -} - -table.footnote td, table.footnote th { - border: 0 !important; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -dl { - margin-bottom: 15px; -} - -dd p { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dt:target, .highlighted { - background-color: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.optional { - font-size: 1.3em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -td.linenos pre { - padding: 5px 0px; - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - margin-left: 0.5em; -} - -table.highlighttable td { - padding: 0 0.5em 0 0.5em; -} - -tt.descname { - background-color: transparent; - font-weight: bold; - font-size: 1.2em; -} - -tt.descclassname { - background-color: transparent; -} - -tt.xref, a tt { - background-color: transparent; - font-weight: bold; -} - -h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/doc/html/_static/comment-bright.png b/doc/html/_static/comment-bright.png deleted file mode 100644 index 551517b8c83b76f734ff791f847829a760ad1903..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3500 zcmV;d4O8-oP)Oz@Z0f2-7z;ux~O9+4z06=<WDR*FRcSTFz- zW=q650N5=6FiBTtNC2?60Km==3$g$R3;-}uh=nNt1bYBr$Ri_o0EC$U6h`t_Jn<{8 z5a%iY0C<_QJh>z}MS)ugEpZ1|S1ukX&Pf+56gFW3VVXcL!g-k)GJ!M?;PcD?0HBc- z5#WRK{dmp}uFlRjj{U%*%WZ25jX z{P*?XzTzZ-GF^d31o+^>%=Ap99M6&ogks$0k4OBs3;+Bb(;~!4V!2o<6ys46agIcq zjPo+3B8fthDa9qy|77CdEc*jK-!%ZRYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S z1Au6Q;m>#f??3%Vpd|o+W=WE9003S@Bra6Svp>fO002awfhw>;8}z{#EWidF!3EsG z3;bXU&9EIRU@z1_9W=mEXoiz;4lcq~xDGvV5BgyU zp1~-*fe8db$Osc*A=-!mVv1NJjtCc-h4>-CNCXm#Bp}I%6j35eku^v$Qi@a{RY)E3 zJ#qp$hg?Rwkvqr$GJ^buyhkyVfwECO)C{#lxu`c9ghrwZ&}4KmnvWKso6vH!8a<3Q zq36)6Xb;+tK10Vaz~~qUGsJ8#F2=(`u{bOVlVi)VBCHIn#u~6ztOL7=^<&SmcLWlF zMZgI*1b0FpVIDz9SWH+>*hr`#93(Um+6gxa1B6k+CnA%mOSC4s5&6UzVlpv@SV$}* z))J2sFA#f(L&P^E5{W}HC%KRUNwK6<(h|}}(r!{C=`5+6G)NjFlgZj-YqAG9lq?`C z$c5yc>d>VnA`E_*3F2Qp##d8RZb=H01_mm@+|Cqnc9PsG(F5HIG_C zt)aG3uTh7n6Et<2In9F>NlT@zqLtGcXcuVrX|L#Xx)I%#9!{6gSJKPrN9dR61N3(c z4Tcqi$B1Vr8Jidf7-t!G7_XR2rWwr)$3XQ?}=hpK0&Z&W{| zep&sA23f;Q!%st`QJ}G3cbou<7-yIK2z4nfCCCtN2-XOGSWo##{8Q{ATurxr~;I`ytDs%xbip}RzP zziy}Qn4Z2~fSycmr`~zJ=lUFdFa1>gZThG6M+{g7vkW8#+YHVaJjFF}Z#*3@$J_By zLtVo_L#1JrVVB{Ak-5=4qt!-@Mh}c>#$4kh<88)m#-k<%CLtzEP3leVno>={htGUuD;o7bD)w_sX$S}eAxwzy?UvgBH(S?;#HZiQMoS*2K2 zT3xe7t(~nU*1N5{rxB;QPLocnp4Ml>u<^FZwyC!nu;thW+pe~4wtZn|Vi#w(#jeBd zlf9FDx_yoPJqHbk*$%56S{;6Kv~mM9!g3B(KJ}#RZ#@)!hR|78Dq|Iq-afF%KE1Brn_fm;Im z_u$xr8UFki1L{Ox>G0o)(&RAZ;=|I=wN2l97;cLaHH6leTB-XXa*h%dBOEvi`+x zi?=Txl?TadvyiL>SuF~-LZ;|cS}4~l2eM~nS7yJ>iOM;atDY;(?aZ^v+mJV$@1Ote z62cPUlD4IWOIIx&SmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGA zUct(O!LkCy1<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}Ti zncS4LsjI}fWY1>OX6feMEuLErma3QLmkw?X+1j)X-&VBk_4Y;EFPF_I+q;9dL%E~B zJh;4Nr^(LEJ3myURP{Rblsw%57T)g973R8o)DE9*xN#~;4_o$q%o z4K@u`jhx2fBXC4{U8Qn{*%*B$Ge=nny$HAYq{=vy|sI0 z_vss+H_qMky?OB#|JK!>IX&II^LlUh#rO5!7TtbwC;iULyV-Xq?ybB}ykGP{?LpZ? z-G|jbTmIbG@7#ZCz;~eY(cDM(28Dyq{*m>M4?_iynUBkc4TkHUI6gT!;y-fz>HMcd z&t%Ugo)`Y2{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P` z?ZJ24cOCDe-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy000JJOGiWi{{a60 z|De66lK=n!32;bRa{vGf6951U69E94oEQKA00(qQO+^RV2niQ93PPz|JOBU!-bqA3 zR5;6pl1pe^WfX zkSdl!omi0~*ntl;2q{jA^;J@WT8O!=A(Gck8fa>hn{#u{`Tyg)!KXI6l>4dj==iVKK6+%4zaRizy(5eryC3d2 z+5Y_D$4}k5v2=Siw{=O)SWY2HJwR3xX1*M*9G^XQ*TCNXF$Vj(kbMJXK0DaS_Sa^1 z?CEa!cFWDhcwxy%a?i@DN|G6-M#uuWU>lss@I>;$xmQ|`u3f;MQ|pYuHxxvMeq4TW;>|7Z2*AsqT=`-1O~nTm6O&pNEK?^cf9CX= zkq5|qAoE7un3V z^yy=@%6zqN^x`#qW+;e7j>th{6GV}sf*}g7{(R#T)yg-AZh0C&U;WA`AL$qz8()5^ zGFi2`g&L7!c?x+A2oOaG0c*Bg&YZt8cJ{jq_W{uTdA-<;`@iP$$=$H?gYIYc_q^*$ z#k(Key`d40R3?+GmgK8hHJcwiQ~r4By@w9*PuzR>x3#(F?YW_W5pPc(t(@-Y{psOt zz2!UE_5S)bLF)Oz@Z0f2-7z;ux~O9+4z06=<WDR*FRcSTFz- zW=q650N5=6FiBTtNC2?60Km==3$g$R3;-}uh=nNt1bYBr$Ri_o0EC$U6h`t_Jn<{8 z5a%iY0C<_QJh>z}MS)ugEpZ1|S1ukX&Pf+56gFW3VVXcL!g-k)GJ!M?;PcD?0HBc- z5#WRK{dmp}uFlRjj{U%*%WZ25jX z{P*?XzTzZ-GF^d31o+^>%=Ap99M6&ogks$0k4OBs3;+Bb(;~!4V!2o<6ys46agIcq zjPo+3B8fthDa9qy|77CdEc*jK-!%ZRYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S z1Au6Q;m>#f??3%Vpd|o+W=WE9003S@Bra6Svp>fO002awfhw>;8}z{#EWidF!3EsG z3;bXU&9EIRU@z1_9W=mEXoiz;4lcq~xDGvV5BgyU zp1~-*fe8db$Osc*A=-!mVv1NJjtCc-h4>-CNCXm#Bp}I%6j35eku^v$Qi@a{RY)E3 zJ#qp$hg?Rwkvqr$GJ^buyhkyVfwECO)C{#lxu`c9ghrwZ&}4KmnvWKso6vH!8a<3Q zq36)6Xb;+tK10Vaz~~qUGsJ8#F2=(`u{bOVlVi)VBCHIn#u~6ztOL7=^<&SmcLWlF zMZgI*1b0FpVIDz9SWH+>*hr`#93(Um+6gxa1B6k+CnA%mOSC4s5&6UzVlpv@SV$}* z))J2sFA#f(L&P^E5{W}HC%KRUNwK6<(h|}}(r!{C=`5+6G)NjFlgZj-YqAG9lq?`C z$c5yc>d>VnA`E_*3F2Qp##d8RZb=H01_mm@+|Cqnc9PsG(F5HIG_C zt)aG3uTh7n6Et<2In9F>NlT@zqLtGcXcuVrX|L#Xx)I%#9!{6gSJKPrN9dR61N3(c z4Tcqi$B1Vr8Jidf7-t!G7_XR2rWwr)$3XQ?}=hpK0&Z&W{| zep&sA23f;Q!%st`QJ}G3cbou<7-yIK2z4nfCCCtN2-XOGSWo##{8Q{ATurxr~;I`ytDs%xbip}RzP zziy}Qn4Z2~fSycmr`~zJ=lUFdFa1>gZThG6M+{g7vkW8#+YHVaJjFF}Z#*3@$J_By zLtVo_L#1JrVVB{Ak-5=4qt!-@Mh}c>#$4kh<88)m#-k<%CLtzEP3leVno>={htGUuD;o7bD)w_sX$S}eAxwzy?UvgBH(S?;#HZiQMoS*2K2 zT3xe7t(~nU*1N5{rxB;QPLocnp4Ml>u<^FZwyC!nu;thW+pe~4wtZn|Vi#w(#jeBd zlf9FDx_yoPJqHbk*$%56S{;6Kv~mM9!g3B(KJ}#RZ#@)!hR|78Dq|Iq-afF%KE1Brn_fm;Im z_u$xr8UFki1L{Ox>G0o)(&RAZ;=|I=wN2l97;cLaHH6leTB-XXa*h%dBOEvi`+x zi?=Txl?TadvyiL>SuF~-LZ;|cS}4~l2eM~nS7yJ>iOM;atDY;(?aZ^v+mJV$@1Ote z62cPUlD4IWOIIx&SmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGA zUct(O!LkCy1<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}Ti zncS4LsjI}fWY1>OX6feMEuLErma3QLmkw?X+1j)X-&VBk_4Y;EFPF_I+q;9dL%E~B zJh;4Nr^(LEJ3myURP{Rblsw%57T)g973R8o)DE9*xN#~;4_o$q%o z4K@u`jhx2fBXC4{U8Qn{*%*B$Ge=nny$HAYq{=vy|sI0 z_vss+H_qMky?OB#|JK!>IX&II^LlUh#rO5!7TtbwC;iULyV-Xq?ybB}ykGP{?LpZ? z-G|jbTmIbG@7#ZCz;~eY(cDM(28Dyq{*m>M4?_iynUBkc4TkHUI6gT!;y-fz>HMcd z&t%Ugo)`Y2{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P` z?ZJ24cOCDe-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy000JJOGiWi{{a60 z|De66lK=n!32;bRa{vGf6951U69E94oEQKA00(qQO+^RV2oe()A>y0J-2easEJ;K` zR5;6Jl3z%jbr{D#&+mQTbB>-f&3W<<%ayjKi&ZjBc2N<@)`~{dMXWB0(ajbV85_gJ zf(EU`iek}4Bt%55ix|sVMm1u8KvB#hnmU~_r<Ogd(A5vg_omvd-#L!=(BMVklxVqhdT zofSj`QA^|)G*lu58>#vhvA)%0Or&dIsb%b)st*LV8`ANnOipDbh%_*c7`d6# z21*z~Xd?ovgf>zq(o0?Et~9ti+pljZC~#_KvJhA>u91WRaq|uqBBKP6V0?p-NL59w zrK0w($_m#SDPQ!Z$nhd^JO|f+7k5xca94d2OLJ&sSxlB7F%NtrF@@O7WWlkHSDtor zzD?u;b&KN$*MnHx;JDy9P~G<{4}9__s&MATBV4R+MuA8TjlZ3ye&qZMCUe8ihBnHI zhMSu zSERHwrmBb$SWVr+)Yk2k^FgTMR6mP;@FY2{}BeV|SUo=mNk<-XSOHNErw>s{^rR-bu$@aN7= zj~-qXcS2!BA*(Q**BOOl{FggkyHdCJi_Fy>?_K+G+DYwIn8`29DYPg&s4$}7D`fv? zuyJ2sMfJX(I^yrf6u!(~9anf(AqAk&ke}uL0SIb-H!SaDQvd(}07*qoM6N<$g1Ha7 A2LJ#7 diff --git a/doc/html/_static/comment.png b/doc/html/_static/comment.png deleted file mode 100644 index 92feb52b8824c6b0f59b658b1196c61de9162a95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3445 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 Xn!ZpXD%P(H00000NkvXXu0mjf= 0 && !jQuery(node.parentNode).hasClass(className)) { - var span = document.createElement("span"); - span.className = className; - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this); - }); - } - } - return this.each(function() { - highlight(this); - }); -}; - -/** - * Small JavaScript module for the documentation. - */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - }, - - /** - * i18n support - */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, - LOCALE : 'unknown', - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated == 'undefined') - return string; - return (typeof translated == 'string') ? translated : translated[0]; - }, - - ngettext : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated == 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; - }, - - addTranslations : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; - }, - - /** - * add context elements like header anchor links - */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); - }, - - /** - * workaround a firefox stupidity - */ - fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) - window.setTimeout(function() { - document.location.href += ''; - }, 10); - }, - - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - if (!body.length) { - body = $('body'); - } - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('') - .appendTo($('#searchbox')); - } - }, - - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) == 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - }, - - /** - * make the url absolute - */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, - - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this == '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); - } -}; - -// quick alias for translations -_ = Documentation.gettext; - -$(document).ready(function() { - Documentation.init(); -}); diff --git a/doc/html/_static/down-pressed.png b/doc/html/_static/down-pressed.png deleted file mode 100644 index 6f7ad782782e4f8e39b0c6e15c7344700cdd2527..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*yM+OLB!qm#z$3ZNi+iKnkC`z>}Z23@f-Ava~9&<9T!#}JFtXD=!G zGdl{fK6ro2OGiOl+hKvH6i=D3%%Y^j`yIkRn!8O>@bG)IQR0{Kf+mxNd=_WScA8u_ z3;8(7x2){m9`nt+U(Nab&1G)!{`SPVpDX$w8McLTzAJ39wprG3p4XLq$06M`%}2Yk zRPPsbES*dnYm1wkGL;iioAUB*Or2kz6(-M_r_#Me-`{mj$Z%( diff --git a/doc/html/_static/down.png b/doc/html/_static/down.png deleted file mode 100644 index 3003a88770de3977d47a2ba69893436a2860f9e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*yM+OLB!qm#z$3ZNi+iKnkC`z>}xaV3tUZ$qnrLa#kt978NlpS`ru z&)HFc^}^>{UOEce+71h5nn>6&w6A!ieNbu1wh)UGh{8~et^#oZ1# z>T7oM=FZ~xXWnTo{qnXm$ZLOlqGswI_m2{XwVK)IJmBjW{J3-B3x@C=M{ShWt#fYS9M?R;8K$~YwlIqwf>VA7q=YKcwf2DS4Zj5inDKXXB1zl=(YO3ST6~rDq)&z z*o>z)=hxrfG-cDBW0G$!?6{M<$@{_4{m1o%Ub!naEtn|@^frU1tDnm{r-UW|!^@B8 diff --git a/doc/html/_static/file.png b/doc/html/_static/file.png deleted file mode 100644 index d18082e397e7e54f20721af768c4c2983258f1b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP$HyOL$D9)yc9|lc|nKf<9@eUiWd>3GuTC!a5vdfWYEazjncPj5ZQX%+1 zt8B*4=d)!cdDz4wr^#OMYfqGz$1LDFF>|#>*O?AGil(WEs?wLLy{Gj2J_@opDm%`dlax3yA*@*N$G&*ukFv>P8+2CBWO(qz zD0k1@kN>hhb1_6`&wrCswzINE(evt-5C1B^STi2@PmdKI;Vst0PQB6!2kdN diff --git a/doc/html/_static/jquery.js b/doc/html/_static/jquery.js deleted file mode 100644 index 83589da..0000000 --- a/doc/html/_static/jquery.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v1.8.3 jquery.com | jquery.org/license */ -(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write(""),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t
a",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="
t
",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="
",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;ti.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="
",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="

",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t0)for(i=r;i=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*\s*$/g,Nt={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X
","
"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1>");try{for(;r1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]===""&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("
").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window); \ No newline at end of file diff --git a/doc/html/_static/minus.png b/doc/html/_static/minus.png deleted file mode 100644 index da1c5620d10c047525a467a425abe9ff5269cfc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1SHkYJtzcHoCO|{#XvD(5N2eUHAey{$X?>< z>&kweokM_|(Po{+Q=kw>iEBiObAE1aYF-J$w=>iB1I2R$WLpMkF=>bh=@O1TaS?83{1OVknK< z>&kweokM`jkU7Va11Q8%;u=xnoS&PUnpeW`?aZ|OK(QcC7sn8Z%gHvy&v=;Q4jejg zV8NnAO`-4Z@2~&zopr02WF_WB>pF diff --git a/doc/html/_static/pygments.css b/doc/html/_static/pygments.css deleted file mode 100644 index 57eadc0..0000000 --- a/doc/html/_static/pygments.css +++ /dev/null @@ -1,63 +0,0 @@ -.highlight .hll { background-color: #ffffcc } -.highlight { background: #eeffcc; } -.highlight .c { color: #408090; font-style: italic } /* Comment */ -.highlight .err { border: 1px solid #FF0000 } /* Error */ -.highlight .k { color: #007020; font-weight: bold } /* Keyword */ -.highlight .o { color: #666666 } /* Operator */ -.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #007020 } /* Comment.Preproc */ -.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ -.highlight .gd { color: #A00000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #333333 } /* Generic.Output */ -.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #0044DD } /* Generic.Traceback */ -.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #007020 } /* Keyword.Pseudo */ -.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #902000 } /* Keyword.Type */ -.highlight .m { color: #208050 } /* Literal.Number */ -.highlight .s { color: #4070a0 } /* Literal.String */ -.highlight .na { color: #4070a0 } /* Name.Attribute */ -.highlight .nb { color: #007020 } /* Name.Builtin */ -.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ -.highlight .no { color: #60add5 } /* Name.Constant */ -.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ -.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #007020 } /* Name.Exception */ -.highlight .nf { color: #06287e } /* Name.Function */ -.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ -.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #bb60d5 } /* Name.Variable */ -.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mb { color: #208050 } /* Literal.Number.Bin */ -.highlight .mf { color: #208050 } /* Literal.Number.Float */ -.highlight .mh { color: #208050 } /* Literal.Number.Hex */ -.highlight .mi { color: #208050 } /* Literal.Number.Integer */ -.highlight .mo { color: #208050 } /* Literal.Number.Oct */ -.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ -.highlight .sc { color: #4070a0 } /* Literal.String.Char */ -.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ -.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ -.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ -.highlight .sx { color: #c65d09 } /* Literal.String.Other */ -.highlight .sr { color: #235388 } /* Literal.String.Regex */ -.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ -.highlight .ss { color: #517918 } /* Literal.String.Symbol */ -.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ -.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ -.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ -.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/doc/html/_static/searchtools.js b/doc/html/_static/searchtools.js deleted file mode 100644 index 6e1f06b..0000000 --- a/doc/html/_static/searchtools.js +++ /dev/null @@ -1,622 +0,0 @@ -/* - * searchtools.js_t - * ~~~~~~~~~~~~~~~~ - * - * Sphinx JavaScript utilties for the full-text search. - * - * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - - -/** - * Porter Stemmer - */ -var Stemmer = function() { - - var step2list = { - ational: 'ate', - tional: 'tion', - enci: 'ence', - anci: 'ance', - izer: 'ize', - bli: 'ble', - alli: 'al', - entli: 'ent', - eli: 'e', - ousli: 'ous', - ization: 'ize', - ation: 'ate', - ator: 'ate', - alism: 'al', - iveness: 'ive', - fulness: 'ful', - ousness: 'ous', - aliti: 'al', - iviti: 'ive', - biliti: 'ble', - logi: 'log' - }; - - var step3list = { - icate: 'ic', - ative: '', - alize: 'al', - iciti: 'ic', - ical: 'ic', - ful: '', - ness: '' - }; - - var c = "[^aeiou]"; // consonant - var v = "[aeiouy]"; // vowel - var C = c + "[^aeiouy]*"; // consonant sequence - var V = v + "[aeiou]*"; // vowel sequence - - var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 - var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 - var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 - var s_v = "^(" + C + ")?" + v; // vowel in stem - - this.stemWord = function (w) { - var stem; - var suffix; - var firstch; - var origword = w; - - if (w.length < 3) - return w; - - var re; - var re2; - var re3; - var re4; - - firstch = w.substr(0,1); - if (firstch == "y") - w = firstch.toUpperCase() + w.substr(1); - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) - w = w.replace(re,"$1$2"); - else if (re2.test(w)) - w = w.replace(re2,"$1$2"); - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) - w = w + "e"; - else if (re3.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - else if (re4.test(w)) - w = w + "e"; - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) - w = stem + "i"; - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step2list[suffix]; - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step3list[suffix]; - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) - w = stem; - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) - w = stem; - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) - w = stem; - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - if (firstch == "y") - w = firstch.toLowerCase() + w.substr(1); - return w; - } -} - - - -/** - * Simple result scoring code. - */ -var Scorer = { - // Implement the following function to further tweak the score for each result - // The function takes a result array [filename, title, anchor, descr, score] - // and returns the new score. - /* - score: function(result) { - return result[4]; - }, - */ - - // query matches the full name of an object - objNameMatch: 11, - // or matches in the last dotted part of the object name - objPartialMatch: 6, - // Additive scores depending on the priority of the object - objPrio: {0: 15, // used to be importantResults - 1: 5, // used to be objectResults - 2: -5}, // used to be unimportantResults - // Used when the priority is not in the mapping. - objPrioDefault: 0, - - // query found in title - title: 15, - // query found in terms - term: 5 -}; - - -/** - * Search Module - */ -var Search = { - - _index : null, - _queued_query : null, - _pulse_status : -1, - - init : function() { - var params = $.getQueryParameters(); - if (params.q) { - var query = params.q[0]; - $('input[name="q"]')[0].value = query; - this.performSearch(query); - } - }, - - loadIndex : function(url) { - $.ajax({type: "GET", url: url, data: null, - dataType: "script", cache: true, - complete: function(jqxhr, textstatus) { - if (textstatus != "success") { - document.getElementById("searchindexloader").src = url; - } - }}); - }, - - setIndex : function(index) { - var q; - this._index = index; - if ((q = this._queued_query) !== null) { - this._queued_query = null; - Search.query(q); - } - }, - - hasIndex : function() { - return this._index !== null; - }, - - deferQuery : function(query) { - this._queued_query = query; - }, - - stopPulse : function() { - this._pulse_status = 0; - }, - - startPulse : function() { - if (this._pulse_status >= 0) - return; - function pulse() { - var i; - Search._pulse_status = (Search._pulse_status + 1) % 4; - var dotString = ''; - for (i = 0; i < Search._pulse_status; i++) - dotString += '.'; - Search.dots.text(dotString); - if (Search._pulse_status > -1) - window.setTimeout(pulse, 500); - } - pulse(); - }, - - /** - * perform a search for something (or wait until index is loaded) - */ - performSearch : function(query) { - // create the required interface elements - this.out = $('#search-results'); - this.title = $('

' + _('Searching') + '

').appendTo(this.out); - this.dots = $('').appendTo(this.title); - this.status = $('

').appendTo(this.out); - this.output = $('
'); - } - // Prettify the comment rating. - comment.pretty_rating = comment.rating + ' point' + - (comment.rating == 1 ? '' : 's'); - // Make a class (for displaying not yet moderated comments differently) - comment.css_class = comment.displayed ? '' : ' moderate'; - // Create a div for this comment. - var context = $.extend({}, opts, comment); - var div = $(renderTemplate(commentTemplate, context)); - - // If the user has voted on this comment, highlight the correct arrow. - if (comment.vote) { - var direction = (comment.vote == 1) ? 'u' : 'd'; - div.find('#' + direction + 'v' + comment.id).hide(); - div.find('#' + direction + 'u' + comment.id).show(); - } - - if (opts.moderator || comment.text != '[deleted]') { - div.find('a.reply').show(); - if (comment.proposal_diff) - div.find('#sp' + comment.id).show(); - if (opts.moderator && !comment.displayed) - div.find('#cm' + comment.id).show(); - if (opts.moderator || (opts.username == comment.username)) - div.find('#dc' + comment.id).show(); - } - return div; - } - - /** - * A simple template renderer. Placeholders such as <%id%> are replaced - * by context['id'] with items being escaped. Placeholders such as <#id#> - * are not escaped. - */ - function renderTemplate(template, context) { - var esc = $(document.createElement('div')); - - function handle(ph, escape) { - var cur = context; - $.each(ph.split('.'), function() { - cur = cur[this]; - }); - return escape ? esc.text(cur || "").html() : cur; - } - - return template.replace(/<([%#])([\w\.]*)\1>/g, function() { - return handle(arguments[2], arguments[1] == '%' ? true : false); - }); - } - - /** Flash an error message briefly. */ - function showError(message) { - $(document.createElement('div')).attr({'class': 'popup-error'}) - .append($(document.createElement('div')) - .attr({'class': 'error-message'}).text(message)) - .appendTo('body') - .fadeIn("slow") - .delay(2000) - .fadeOut("slow"); - } - - /** Add a link the user uses to open the comments popup. */ - $.fn.comment = function() { - return this.each(function() { - var id = $(this).attr('id').substring(1); - var count = COMMENT_METADATA[id]; - var title = count + ' comment' + (count == 1 ? '' : 's'); - var image = count > 0 ? opts.commentBrightImage : opts.commentImage; - var addcls = count == 0 ? ' nocomment' : ''; - $(this) - .append( - $(document.createElement('a')).attr({ - href: '#', - 'class': 'sphinx-comment-open' + addcls, - id: 'ao' + id - }) - .append($(document.createElement('img')).attr({ - src: image, - alt: 'comment', - title: title - })) - .click(function(event) { - event.preventDefault(); - show($(this).attr('id').substring(2)); - }) - ) - .append( - $(document.createElement('a')).attr({ - href: '#', - 'class': 'sphinx-comment-close hidden', - id: 'ah' + id - }) - .append($(document.createElement('img')).attr({ - src: opts.closeCommentImage, - alt: 'close', - title: 'close' - })) - .click(function(event) { - event.preventDefault(); - hide($(this).attr('id').substring(2)); - }) - ); - }); - }; - - var opts = { - processVoteURL: '/_process_vote', - addCommentURL: '/_add_comment', - getCommentsURL: '/_get_comments', - acceptCommentURL: '/_accept_comment', - deleteCommentURL: '/_delete_comment', - commentImage: '/static/_static/comment.png', - closeCommentImage: '/static/_static/comment-close.png', - loadingImage: '/static/_static/ajax-loader.gif', - commentBrightImage: '/static/_static/comment-bright.png', - upArrow: '/static/_static/up.png', - downArrow: '/static/_static/down.png', - upArrowPressed: '/static/_static/up-pressed.png', - downArrowPressed: '/static/_static/down-pressed.png', - voting: false, - moderator: false - }; - - if (typeof COMMENT_OPTIONS != "undefined") { - opts = jQuery.extend(opts, COMMENT_OPTIONS); - } - - var popupTemplate = '\ -
\ -

\ - Sort by:\ - best rated\ - newest\ - oldest\ -

\ -
Comments
\ -
\ - loading comments...
\ -
    \ -
    \ -

    Add a comment\ - (markup):

    \ -
    \ - reStructured text markup: *emph*, **strong**, \ - ``code``, \ - code blocks: :: and an indented block after blank line
    \ -
    \ - \ -

    \ - \ - Propose a change ▹\ - \ - \ - Propose a change ▿\ - \ -

    \ - \ - \ - \ - \ - \ -
    \ -
    '; - - var commentTemplate = '\ -
    \ -
    \ -
    \ - \ - \ - \ - \ - \ - \ -
    \ -
    \ - \ - \ - \ - \ - \ - \ -
    \ -
    \ -
    \ -

    \ - <%username%>\ - <%pretty_rating%>\ - <%time.delta%>\ -

    \ -
    <#text#>
    \ -

    \ - \ - reply ▿\ - proposal ▹\ - proposal ▿\ - \ - \ -

    \ -
    \
    -<#proposal_diff#>\
    -        
    \ -
      \ -
      \ -
      \ -
      \ - '; - - var replyTemplate = '\ -
    • \ -
      \ -
      \ - \ - \ - \ - \ - \ - \ -
      \ -
    • '; - - $(document).ready(function() { - init(); - }); -})(jQuery); - -$(document).ready(function() { - // add comment anchors for all paragraphs that are commentable - $('.sphinx-has-comment').comment(); - - // highlight search words in search results - $("div.context").each(function() { - var params = $.getQueryParameters(); - var terms = (params.q) ? params.q[0].split(/\s+/) : []; - var result = $(this); - $.each(terms, function() { - result.highlightText(this.toLowerCase(), 'highlighted'); - }); - }); - - // directly open comment window if requested - var anchor = document.location.hash; - if (anchor.substring(0, 9) == '#comment-') { - $('#ao' + anchor.substring(9)).click(); - document.location.hash = '#s' + anchor.substring(9); - } -}); diff --git a/doc/html/api/dyaml/constructor.html b/doc/html/api/dyaml/constructor.html deleted file mode 100644 index 1942121..0000000 --- a/doc/html/api/dyaml/constructor.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - -dyaml.constructor - - - - - -
      -
      -⌂ -dyaml.constructor - - -
      -
      public YAMLNull constructNull(ref Node node) @safe pure nothrow @nogc
      -
      -

      Construct a _null _node. -

      - - -
      -
      public YAMLMerge constructMerge(ref Node node) @safe pure nothrow @nogc
      -
      -

      Construct a merge _node - a _node that merges another _node into a mapping. -

      - - -
      -
      public bool constructBool(ref Node node) @safe
      -
      -

      Construct a boolean _node. -

      - - -
      -
      public long constructLong(ref Node node)
      -
      -

      Construct an integer (long) _node. -

      - - -
      -
      public real constructReal(ref Node node)
      -
      -

      Construct a floating point (real) _node. -

      - - -
      -
      public ubyte[] constructBinary(ref Node node)
      -
      -

      Construct a binary (base64) _node. -

      - - -
      -
      public SysTime constructTimestamp(ref Node node)
      -
      -

      Construct a timestamp (SysTime) _node. -

      - - -
      -
      public string constructString(ref Node node)
      -
      -

      Construct a string _node. -

      - - -
      -
      public Node.Pair[] getPairs(
      -    string type, 
      -    Node[] nodes)
      -
      -

      Convert a sequence of single-element mappings into a sequence of pairs. -

      - - -
      -
      public Node.Pair[] constructOrderedMap(ref Node node)
      -
      -

      Construct an ordered map (ordered sequence of key:value pairs without duplicates) _node. -

      - - -
      -
      public Node.Pair[] constructPairs(ref Node node)
      -
      -

      Construct a pairs (ordered sequence of key: value pairs allowing duplicates) _node. -

      - - -
      -
      public Node[] constructSet(ref Node node)
      -
      -

      Construct a set _node. -

      - - -
      -
      public Node[] constructSequence(ref Node node)
      -
      -

      Construct a sequence (array) _node. -

      - - -
      -
      public Node.Pair[] constructMap(ref Node node)
      -
      -

      Construct an unordered map (unordered set of key:value _pairs without duplicates) _node. -

      - - -
      -

      Class that processes YAML mappings, sequences and scalars into nodes. This can be -used to add custom data types. A tutorial can be found -here. -

      - - -
      -

      Functions

      constructNull@safe, pure, nothrow, @nogc

      Construct a _null _node. -

      -
      constructMerge@safe, pure, nothrow, @nogc

      Construct a merge _node - a _node that merges another _node into a mapping. -

      -
      constructBool@safe

      Construct a boolean _node. -

      -
      constructLong

      Construct an integer (long) _node. -

      -
      constructReal

      Construct a floating point (real) _node. -

      -
      constructBinary

      Construct a binary (base64) _node. -

      -
      constructTimestamp

      Construct a timestamp (SysTime) _node. -

      -
      constructString

      Construct a string _node. -

      -
      getPairs

      Convert a sequence of single-element mappings into a sequence of pairs. -

      -
      constructOrderedMap

      Construct an ordered map (ordered sequence of key:value pairs without duplicates) _node. -

      -
      constructPairs

      Construct a pairs (ordered sequence of key: value pairs allowing duplicates) _node. -

      -
      constructSet

      Construct a set _node. -

      -
      constructSequence

      Construct a sequence (array) _node. -

      -
      constructMap

      Construct an unordered map (unordered set of key:value _pairs without duplicates) _node. -

      -

      Classes

      Constructor

      Constructs YAML values. -

      -
      -
      -
      - -
      - - - - diff --git a/doc/html/api/dyaml/constructor/Constructor.html b/doc/html/api/dyaml/constructor/Constructor.html deleted file mode 100644 index aacaca0..0000000 --- a/doc/html/api/dyaml/constructor/Constructor.html +++ /dev/null @@ -1,291 +0,0 @@ - - - - - - -Constructor - - - - - -
      - - -
      -
      public final class Constructor
      -
      -

      Constructs YAML values. -

      - - -
      -

      Each YAML scalar, sequence or mapping has a tag specifying its data type. - Constructor uses user-specifyable functions to create a node of desired - data type from a scalar, sequence or mapping. -

      -

      Each of these functions is associated with a tag, and can process either - a scalar, a sequence, or a mapping. The constructor passes each value to - the function with corresponding tag, which then returns the resulting value - that can be stored in a node. -

      -

      If a tag is detected with no known constructor function, it is considered an error. -

      - - -
      -
      public this(const Flag!"useDefaultConstructors" defaultConstructors = Yes.useDefaultConstructors) @safe nothrow
      -
      -

      Construct a Constructor. -

      - - -
      -

      /// If you don't want to support default YAML tags/data types, you can use -defaultConstructors to disable constructor functions for these. -

      -

      /// Params: defaultConstructors = Use constructors for default YAML tags? -

      - - -
      -
      public void addConstructorScalar(T)(
      -    const string tag, 
      -    T function(ref Node) ctor) @safe nothrow
      -
      -

      Add a constructor function from scalar. -

      - - -
      -

      The function must take a reference to Node to construct from. - The node contains a string for scalars, Node[] for sequences and - Node.Pair[] for mappings. -

      -

      Any exception thrown by this function will be caught by D:YAML and - its message will be added to a YAMLException that will also tell - the user which type failed to construct, and position in the file. -

      -

      The value returned by this function will be stored in the resulting node. -

      -

      Only one constructor function can be set for one tag. -

      -

      Structs and classes must implement the opCmp() operator for D:YAML - support. The signature of the operator that must be implemented - is const int opCmp(ref const MyStruct s) for structs where - MyStruct is the struct type, and int opCmp(Object o) for - classes. Note that the class opCmp() should not alter the compared - values - it is not const for compatibility reasons. -

      - - -
      -

      Parameters

      - - - -
      tag

      Tag for the function to handle. -

      -
      ctor

      Constructor function. -

      -
      -
      -

      Example

      - - -
       import std.string;
      -
      - import dyaml.all;
      -
      - struct MyStruct
      - {
      -     int x, y, z;
      -
      -     //Any D:YAML type must have a custom opCmp operator.
      -     //This is used for ordering in mappings.
      -     const int opCmp(ref const MyStruct s)
      -     {
      -         if(x != s.x){return x - s.x;}
      -         if(y != s.y){return y - s.y;}
      -         if(z != s.z){return z - s.z;}
      -         return 0;
      -     }
      - }
      -
      - MyStruct constructMyStructScalar(ref Node node)
      - {
      -     //Guaranteed to be string as we construct from scalar.
      -     //!mystruct x:y:z
      -     auto parts = node.as!string().split(":");
      -     // If this throws, the D:YAML will handle it and throw a YAMLException.
      -     return MyStruct(to!int(parts[0]), to!int(parts[1]), to!int(parts[2]));
      - }
      -
      - void main()
      - {
      -     auto loader = Loader("file.yaml");
      -     auto constructor = new Constructor;
      -     constructor.addConstructorScalar("!mystruct", &constructMyStructScalar);
      -     loader.constructor = constructor;
      -     Node node = loader.load();
      - }
      -
      - -
      -
      public void addConstructorSequence(T)(
      -    const string tag, 
      -    T function(ref Node) ctor) @safe nothrow
      -
      -

      Add a constructor function from sequence. -

      - - -
      -

      Example

      - - -
       import std.string;
      -
      - import dyaml.all;
      -
      - struct MyStruct
      - {
      -     int x, y, z;
      -
      -     //Any D:YAML type must have a custom opCmp operator.
      -     //This is used for ordering in mappings.
      -     const int opCmp(ref const MyStruct s)
      -     {
      -         if(x != s.x){return x - s.x;}
      -         if(y != s.y){return y - s.y;}
      -         if(z != s.z){return z - s.z;}
      -         return 0;
      -     }
      - }
      -
      - MyStruct constructMyStructSequence(ref Node node)
      - {
      -     //node is guaranteed to be sequence.
      -     //!mystruct [x, y, z]
      -     return MyStruct(node[0].as!int, node[1].as!int, node[2].as!int);
      - }
      -
      - void main()
      - {
      -     auto loader = Loader("file.yaml");
      -     auto constructor = new Constructor;
      -     constructor.addConstructorSequence("!mystruct", &constructMyStructSequence);
      -     loader.constructor = constructor;
      -     Node node = loader.load();
      - }
      -
      - -
      -
      -

      See Also:

      - -
      -
      public void addConstructorMapping(T)(
      -    const string tag, 
      -    T function(ref Node) ctor) @safe nothrow
      -
      -

      Add a constructor function from a mapping. -

      - - -
      -

      Example

      - - -
       import std.string;
      -
      - import dyaml.all;
      -
      - struct MyStruct
      - {
      -     int x, y, z;
      -
      -     //Any D:YAML type must have a custom opCmp operator.
      -     //This is used for ordering in mappings.
      -     const int opCmp(ref const MyStruct s)
      -     {
      -         if(x != s.x){return x - s.x;}
      -         if(y != s.y){return y - s.y;}
      -         if(z != s.z){return z - s.z;}
      -         return 0;
      -     }
      - }
      -
      - MyStruct constructMyStructMapping(ref Node node)
      - {
      -     //node is guaranteed to be mapping.
      -     //!mystruct {"x": x, "y": y, "z": z}
      -     return MyStruct(node["x"].as!int, node["y"].as!int, node["z"].as!int);
      - }
      -
      - void main()
      - {
      -     auto loader = Loader("file.yaml");
      -     auto constructor = new Constructor;
      -     constructor.addConstructorMapping("!mystruct", &constructMyStructMapping);
      -     loader.constructor = constructor;
      -     Node node = loader.load();
      - }
      -
      - -
      -
      -

      See Also:

      - -
      -

      Functions

      this

      Construct a Constructor. -

      -
      addConstructorScalar@safe, nothrow

      Add a constructor function from scalar. -

      -
      addConstructorSequence@safe, nothrow

      Add a constructor function from sequence. -

      -
      addConstructorMapping@safe, nothrow

      Add a constructor function from a mapping. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/dumper.html b/doc/html/api/dyaml/dumper.html deleted file mode 100644 index e962a08..0000000 --- a/doc/html/api/dyaml/dumper.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - -dyaml.dumper - - - - - -
      - - -
      -

      YAML dumper. -

      - - -
      -

      Code based on PyYAML. -

      - - -
      -

      Structs

      Dumper

      Dumps YAML documents to files or streams. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/dumper/Dumper.html b/doc/html/api/dyaml/dumper/Dumper.html deleted file mode 100644 index 0dde271..0000000 --- a/doc/html/api/dyaml/dumper/Dumper.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - - -Dumper - - - - - -
      - - -
      -
      public struct Dumper
      -
      -

      Dumps YAML documents to files or streams. -

      - - -
      -

      User specified Representer and/or Resolver can be used to support new -tags / data types. -

      -

      Setters are provided to affect output details (style, encoding, etc.). -

      - - -
      -

      Examples

      - - -Write to a file: -
      auto node = Node([1, 2, 3, 4, 5]);
      -Dumper("file.yaml").dump(node);
      - -Write multiple YAML documents to a file: -
      auto node1 = Node([1, 2, 3, 4, 5]);
      -auto node2 = Node("This document contains only one string");
      -Dumper("file.yaml").dump(node1, node2);
      -
      -//Or with an array:
      -//Dumper("file.yaml").dump([node1, node2]);
      -
      -
      - -Write to memory: -
      import std.stream;
      -auto stream = new MemoryStream();
      -auto node = Node([1, 2, 3, 4, 5]);
      -Dumper(stream).dump(node);
      - -Use a custom representer/resolver to support custom data types and/or implicit tags: -
      auto node = Node([1, 2, 3, 4, 5]);
      -auto representer = new Representer();
      -auto resolver = new Resolver();
      -
      -//Add representer functions / resolver expressions here...
      -
      -auto dumper = Dumper("file.yaml");
      -dumper.representer = representer;
      -dumper.resolver = resolver;
      -dumper.dump(node);
      - -
      -
      public this(string filename) @trusted
      -
      -

      Construct a Dumper writing to a file. -

      - - -
      -

      Parameters

      - - -
      filename

      File name to write to. -

      -
      -
      -

      Throws

      -

      YAMLException if the file can not be dumped to (e.g. cannot be opened). -

      - - -
      -
      public this(Stream stream) @safe
      -
      -

      Construct a Dumper writing to a _stream. This is useful to e.g. write to memory. -

      - - -
      -
      public @property void name(string name) pure @safe nothrow
      -
      -

      Set stream _name. Used in debugging messages. -

      - - -
      -
      public @property void resolver(Resolver resolver) @trusted
      -
      -

      Specify custom Resolver to use. -

      - - -
      -
      public @property void representer(Representer representer) @trusted
      -
      -

      Specify custom Representer to use. -

      - - -
      -
      public @property void canonical(bool canonical) pure @safe nothrow
      -
      -

      Write scalars in _canonical form? -

      - - -
      -
      public @property void indent(uint indent) pure @safe nothrow
      -
      -

      Set indentation width. 2 by default. Must not be zero. -

      - - -
      -

      Contracts

      in
      -{
      -    assert (indent != 0, "Can't use zero YAML indent width");
      -}
      -
      - -
      -
      public @property void textWidth(uint width) pure @safe nothrow
      -
      -

      Set preferred text _width. -

      - - -
      -
      public @property void lineBreak(LineBreak lineBreak) pure @safe nothrow
      -
      -

      Set line break to use. Unix by default. -

      - - -
      -
      public @property void encoding(Encoding encoding) pure @safe nothrow
      -
      -

      Set character _encoding to use. UTF-8 by default. -

      - - -
      -
      public @property void explicitStart(bool explicit) pure @safe nothrow
      -
      -

      Always explicitly write document start? -

      - - -
      -
      public @property void explicitEnd(bool explicit) pure @safe nothrow
      -
      -

      Always explicitly write document end? -

      - - -
      -
      public @property void YAMLVersion(string YAMLVersion) pure @safe nothrow
      -
      -

      Specify YAML version string. "1.1" by default. -

      - - -
      -
      public @property void tagDirectives(string[string] tags) pure @trusted
      -
      -

      Specify tag directives. -

      - - -
      -

      A tag directive specifies a shorthand notation for specifying _tags. -Each tag directive associates a handle with a prefix. This allows for -compact tag notation. -

      -

      Each handle specified MUST start and end with a '!' character -(a single character "!" handle is allowed as well). -

      -

      Only alphanumeric characters, '-', and '__' may be used in handles. -

      -

      Each prefix MUST not be empty. -

      -

      The "!!" handle is used for default YAML _tags with prefix -

      - - -
      -

      "tag

      -

      yaml.org,2002:". This can be overridden. -

      - - -
      -

      Parameters

      - - -
      tags

      Tag directives (keys are handles, values are prefixes). -

      -
      -
      -

      Example

      - -
      Dumper dumper = Dumper("file.yaml");
      -string[string] directives;
      -directives["!short!"] = "tag:long.org,2011:";
      -//This will emit tags starting with "tag:long.org,2011"
      -//with a "!short!" prefix instead.
      -dumper.tagDirectives(directives);
      -dumper.dump(Node("foo"));
      - -
      -
      public void dump(Node[] documents...) @trusted
      -
      -

      Dump one or more YAML _documents to the file/stream. -

      - - -
      -

      Note that while you can call dump() multiple times on the same -dumper, you will end up writing multiple YAML "files" to the same -file/stream. -

      - - -
      -

      Parameters

      - - -
      documents

      Documents to _dump (root nodes of the _documents). -

      -
      -
      -

      Throws

      -

      YAMLException on error (e.g. invalid nodes, - unable to write to file/stream). -

      - - -
      -

      Functions

      this

      Construct a Dumper writing to a file. -

      -
      this

      Construct a Dumper writing to a _stream. This is useful to e.g. write to memory. -

      -
      @propertynamepure, @safe, nothrow

      Set stream _name. Used in debugging messages. -

      -
      @propertyresolver@trusted

      Specify custom Resolver to use. -

      -
      @propertyrepresenter@trusted

      Specify custom Representer to use. -

      -
      @propertycanonicalpure, @safe, nothrow

      Write scalars in _canonical form? -

      -
      @propertyindentpure, @safe, nothrow

      Set indentation width. 2 by default. Must not be zero. -

      -
      @propertytextWidthpure, @safe, nothrow

      Set preferred text _width. -

      -
      @propertylineBreakpure, @safe, nothrow

      Set line break to use. Unix by default. -

      -
      @propertyencodingpure, @safe, nothrow

      Set character _encoding to use. UTF-8 by default. -

      -
      @propertyexplicitStartpure, @safe, nothrow

      Always explicitly write document start? -

      -
      @propertyexplicitEndpure, @safe, nothrow

      Always explicitly write document end? -

      -
      @propertyYAMLVersionpure, @safe, nothrow

      Specify YAML version string. "1.1" by default. -

      -
      @propertytagDirectivespure, @trusted

      Specify tag directives. -

      -
      dump@trusted

      Dump one or more YAML _documents to the file/stream. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/exception.html b/doc/html/api/dyaml/exception.html deleted file mode 100644 index 40df961..0000000 --- a/doc/html/api/dyaml/exception.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - -dyaml.exception - - - - - -
      - - -
      -

      Exceptions thrown by D:YAML and _exception related code. -

      - - -
      -

      Classes

      YAMLException

      Base class for all exceptions thrown by D:YAML. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/exception/YAMLException.html b/doc/html/api/dyaml/exception/YAMLException.html deleted file mode 100644 index 44968dc..0000000 --- a/doc/html/api/dyaml/exception/YAMLException.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - -YAMLException - - - - - -
      - - -
      -
      public class YAMLException : Exception
      -
      -

      Base class for all exceptions thrown by D:YAML. -

      - - -
      -
      public this(
      -    string msg, 
      -    string file = __FILE__, 
      -    size_t line = __LINE__) @safe pure nothrow
      -
      -

      Construct a YAMLException with specified message and position where it was thrown. -

      - - -
      -

      Functions

      this

      Construct a YAMLException with specified message and position where it was thrown. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/hacks.html b/doc/html/api/dyaml/hacks.html deleted file mode 100644 index 55611b2..0000000 --- a/doc/html/api/dyaml/hacks.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - -dyaml.hacks - - - - - -
      - - -
      -
      public ScalarStyle scalarStyleHack(ref const(Node) node) @safe nothrow
      -
      -

      Get the scalar style a node had in the file it was loaded from. -

      - - -
      -

      This is only useful for nodes loaded from files. -

      -

      This is a "hack" because a YAML application is supposed to be unaware of styles - used in YAML styles, i.e. treating different styles differently is unstandard. - However, determining style may be useful in some cases, e.g. YAML utilities. -

      -

      May only be called on scalar nodes (nodes where node.isScalar() == true). -

      - - -
      -

      Example

      - -
       // Node node // loaded from a file
      - if(node.isScalar)
      - {
      -     import std.stdio;
      -     writeln(node.scalarStyleHack());
      - }
      -
      - -
      -
      public CollectionStyle collectionStyleHack(ref const(Node) node) @safe nothrow
      -
      -

      Get the collection style a YAML node had in the file it was loaded from. -

      - - -
      -

      May only be called on collection nodes (nodes where node.isScalar() != true). -

      - - -
      -
      -

      See Also:

      -
      -

      scalarStyleHack -

      - -
      -
      -
      public void scalarStyleHack(
      -    ref Node node, 
      -    const ScalarStyle rhs) @safe nothrow
      -
      -

      Set the scalar style node should have when written to a file. -

      - - -
      -

      Setting the style might be useful when generating YAML or reformatting existing files. -

      -

      May only be called on scalar nodes (nodes where node.isScalar() == true). -

      - - -
      -

      Example

      -
      writeln("D:YAML scalarStyleHack setter unittest");
      -auto node = Node(5);
      -node.scalarStyleHack = ScalarStyle.DoubleQuoted;
      -assert(node.scalarStyleHack() == ScalarStyle.DoubleQuoted);
      -
      -
      - -
      -
      public void collectionStyleHack(
      -    ref Node node, 
      -    const CollectionStyle rhs) @safe nothrow
      -
      -

      Set the collection style node should have when written to a file. -

      - - -
      -

      Setting the style might be useful when generating YAML or reformatting existing files. -

      -

      May only be called on collection nodes (nodes where node.isScalar() != true). -

      - - -
      -

      Example

      -
      writeln("D:YAML collectionStyleHack setter unittest");
      -auto node = Node([1, 2, 3, 4, 5]);
      -node.collectionStyleHack = CollectionStyle.Block;
      -assert(node.collectionStyleHack() == CollectionStyle.Block);
      -
      -
      - -
      -

      Functionality that may sometimes be needed but allows unsafe or unstandard behavior, and should only be used in specific cases. -

      - - -
      -

      Functions

      scalarStyleHack@safe, nothrow

      Get the scalar style a node had in the file it was loaded from. -

      -
      collectionStyleHack@safe, nothrow

      Get the collection style a YAML node had in the file it was loaded from. -

      -
      scalarStyleHack@safe, nothrow

      Set the scalar style node should have when written to a file. -

      -
      collectionStyleHack@safe, nothrow

      Set the collection style node should have when written to a file. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/linebreak.html b/doc/html/api/dyaml/linebreak.html deleted file mode 100644 index aa3b98c..0000000 --- a/doc/html/api/dyaml/linebreak.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - -dyaml.linebreak - - - - - -
      - - -
      -

      Enums

      LineBreak

      Enumerates platform specific line breaks. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/linebreak/LineBreak.html b/doc/html/api/dyaml/linebreak/LineBreak.html deleted file mode 100644 index c59e3b5..0000000 --- a/doc/html/api/dyaml/linebreak/LineBreak.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - -LineBreak - - - - - -
      - - -
      -
      public enum LineBreak
      -
      -

      Enumerates platform specific line breaks. -

      - - -
      -

      Values

      Unix

      Unix line break ("\n"). -

      -
      Windows

      Windows line break ("\r\n"). -

      -
      Macintosh

      Macintosh line break ("\r"). -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/loader.html b/doc/html/api/dyaml/loader.html deleted file mode 100644 index 42220b1..0000000 --- a/doc/html/api/dyaml/loader.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - -dyaml.loader - - - - - -
      - - -
      -

      Class used to load YAML documents. -

      - - -
      -

      Structs

      Loader

      Loads YAML documents from files or streams. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/loader/Loader.html b/doc/html/api/dyaml/loader/Loader.html deleted file mode 100644 index f1b3d29..0000000 --- a/doc/html/api/dyaml/loader/Loader.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - -Loader - - - - - -
      - - -
      -
      public struct Loader
      -
      -

      Loads YAML documents from files or streams. -

      - - -
      -

      User specified Constructor and/or Resolver can be used to support new - tags / data types. -

      - - -
      -

      Examples

      - - - Load single YAML document from a file: -
       auto rootNode = Loader("file.yaml").load();
      - ...
      -
      - - Load all YAML documents from a file: -
       auto nodes = Loader("file.yaml").loadAll();
      - ...
      -
      - - Iterate over YAML documents in a file, lazily loading them: -
       auto loader = Loader("file.yaml");
      -
      - foreach(ref node; loader)
      - {
      -     ...
      - }
      -
      - - Load YAML from a string: -
       char[] yaml_input = "red:   '#ff0000'\n"
      -                     "green: '#00ff00'\n"
      -                     "blue:  '#0000ff'".dup;
      -
      - auto colors = Loader.fromString(yaml_input).load();
      -
      - foreach(string color, string value; colors)
      - {
      -     import std.stdio;
      -     writeln(color, " is ", value, " in HTML/CSS");
      - }
      -
      - - Load a file into a buffer in memory and then load YAML from that buffer: -
       try
      - {
      -     import std.file;
      -     void[] buffer = std.file.read("file.yaml");
      -     auto yamlNode = Loader(buffer);
      -
      -     // Read data from yamlNode here...
      - }
      - catch(FileException e)
      - {
      -     writeln("Failed to read file 'file.yaml'");
      - }
      -
      - - Use a custom constructor/resolver to support custom data types and/or implicit tags: -
       auto constructor = new Constructor();
      - auto resolver    = new Resolver();
      -
      - // Add constructor functions / resolver expressions here...
      -
      - auto loader = Loader("file.yaml");
      - loader.constructor = constructor;
      - loader.resolver    = resolver;
      - auto rootNode      = loader.load(node);
      -
      - -
      -
      public this(string filename) @trusted
      -
      -

      Construct a Loader to load YAML from a file. -

      - - -
      -

      Parameters

      - - -
      filename

      Name of the file to load from. -

      -
      -
      -

      Throws

      -

      YAMLException if the file could not be opened or read. -

      - - -
      -
      public static Loader fromString(char[] data) @safe
      -
      -

      Construct a Loader to load YAML from a string (char []). -

      - - -
      -

      Parameters

      - - -
      data

      String to load YAML from. will be overwritten during parsing as D:YAML reuses memory. Use data.dup if you don't want to modify the original string. -

      -
      -
      -

      Returns

      -

      Loader loading YAML from given string. -

      - - -
      -

      Throws

      -

      YAMLException if data could not be read (e.g. a decoding error) -

      - - -
      -

      Example

      -
      assert(Loader.fromString(cast(char[])"42").load().as!int == 42);
      -
      -
      - -
      -
      public this(void[] yamlData) @safe
      -
      -

      Construct a Loader to load YAML from a buffer. -

      - - -
      -

      Parameters

      - - -
      yamlData

      Buffer with YAML data to load. This may be e.g. a file loaded to memory or a string with YAML data. Note that buffer will be overwritten, as D:YAML minimizes memory allocations by reusing the input _buffer. Must not be deleted or modified by the user as long as nodes loaded by this Loader are in use! - Nodes may refer to data in this buffer. Note that D:YAML looks for byte-order-marks YAML files encoded in UTF-16/UTF-32 (and sometimes UTF-8) use to specify the encoding and endianness, so it should be enough to load an entire file to a buffer and pass it to D:YAML, regardless of Unicode encoding. -

      -
      -
      -

      Throws

      -

      YAMLException if yamlData contains data illegal in YAML. -

      - - -
      -
      public void name(string name) pure @safe nothrow @nogc
      -
      -

      Set stream _name. Used in debugging messages. -

      - - -
      -
      public void resolver(Resolver resolver) pure @safe nothrow @nogc
      -
      -

      Specify custom Resolver to use. -

      - - -
      -
      public void constructor(Constructor constructor) pure @safe nothrow @nogc
      -
      -

      Specify custom Constructor to use. -

      - - -
      -
      public Node load() @safe
      -
      -

      Load single YAML document. -

      - - -
      -

      Contracts

      in
      -{
      -    assert (!done_, "Loader: Trying to load YAML twice");
      -}
      -
      - -
      -

      If none or more than one YAML document is found, this throws a YAMLException. -

      -

      This can only be called once; this is enforced by contract. -

      - - -
      -

      Returns

      -

      Root node of the document. -

      - - -
      -

      Throws

      -

      YAMLException if there wasn't exactly one document - or on a YAML parsing error. -

      - - -
      -
      public Node[] loadAll() @trusted
      -
      -

      Load all YAML documents. -

      - - -
      -

      This is just a shortcut that iterates over all documents and returns them - all at once. Calling loadAll after iterating over the node or vice versa - will not return any documents, as they have all been parsed already. -

      -

      This can only be called once; this is enforced by contract. -

      - - -
      -

      Returns

      -

      Array of root nodes of all documents in the file/stream. -

      - - -
      -

      Throws

      -

      YAMLException on a parsing error. -

      - - -
      -
      public int opApply(int delegate(ref Node) dg) @trusted
      -
      -

      Foreach over YAML documents. -

      - - -
      -

      Contracts

      in
      -{
      -    assert (!done_, "Loader: Trying to load YAML twice");
      -}
      -
      - -
      -

      Parses documents lazily, when they are needed. -

      -

      Foreach over a Loader can only be used once; this is enforced by contract. -

      - - -
      -

      Throws

      -

      YAMLException on a parsing error. -

      - - -
      -

      Functions

      this

      Construct a Loader to load YAML from a file. -

      -
      staticfromString@safe

      Construct a Loader to load YAML from a string (char []). -

      -
      this

      Construct a Loader to load YAML from a buffer. -

      -
      namepure, @safe, nothrow, @nogc

      Set stream _name. Used in debugging messages. -

      -
      resolverpure, @safe, nothrow, @nogc

      Specify custom Resolver to use. -

      -
      constructorpure, @safe, nothrow, @nogc

      Specify custom Constructor to use. -

      -
      load@safe

      Load single YAML document. -

      -
      loadAll@trusted

      Load all YAML documents. -

      -
      opApply@trusted

      Foreach over YAML documents. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/node.html b/doc/html/api/dyaml/node.html deleted file mode 100644 index 827af84..0000000 --- a/doc/html/api/dyaml/node.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - -dyaml.node - - - - - -
      - - -
      -

      Node of a YAML document. Used to read YAML data once it's loaded, -and to prepare data to emit. -

      - - -
      -

      Structs

      YAMLNull

      Null YAML type. Used in nodes with _null values. -

      -
      Node

      YAML node. -

      -

      Classes

      NodeException

      Exception thrown at node related errors. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/node/Node.html b/doc/html/api/dyaml/node/Node.html deleted file mode 100644 index c3627ed..0000000 --- a/doc/html/api/dyaml/node/Node.html +++ /dev/null @@ -1,866 +0,0 @@ - - - - - - -Node - - - - - -
      - - -
      -
      public struct Node
      -
      -

      YAML node. -

      - - -
      -

      This is a pseudo-dynamic type that can store any YAML value, including a - sequence or mapping of nodes. You can get data from a Node directly or - iterate over it if it's a collection. -

      - - -
      -
      public this(T)(
      -    T value, 
      -    const string tag = null) @trusted 
      -if(!scalarCtorNothrow!T && (!isArray!T && !isAssociativeArray!T))
      -
      -

      Construct a Node from a value. -

      - - -
      -

      Any type except for Node can be stored in a Node, but default YAML - types (integers, floats, strings, timestamps, etc.) will be stored - more efficiently. To create a node representing a null value, - construct it from YAMLNull. -

      -

      Note that to emit any non-default types you store - in a node, you need a Representer to represent them in YAML - - otherwise emitting will fail. -

      - - -
      -

      Parameters

      - - - -
      value

      Value to store in the node. -

      -
      tag

      Overrides tag of the node when emitted, regardless of tag determined by Representer. Representer uses this to determine YAML data type when a D data type maps to multiple different YAML data types. Tag must be in full form, e.g. "tag:yaml.org,2002:int", not a shortcut, like "!!int". -

      -
      -
      -
      public this(T)(
      -    T value, 
      -    const string tag = null) @safe pure nothrow 
      -if(scalarCtorNothrow!T)
      -
      -

      Ditto. -

      - - -
      -
      public this(T)(
      -    T[] array, 
      -    const string tag = null) @safe 
      -if(!isSomeString!(T[]))
      -
      -

      Construct a node from an _array. -

      - - -
      -

      If _array is an _array of nodes or pairs, it is stored directly. - Otherwise, every value in the array is converted to a node, and - those nodes are stored. -

      - - -
      -

      Parameters

      - - - -
      array

      Values to store in the node. -

      -
      tag

      Overrides tag of the node when emitted, regardless of tag determined by Representer. Representer uses this to determine YAML data type when a D data type maps to multiple different YAML data types. This is used to differentiate between YAML sequences ("!!seq") and sets ("!!set"), which both are internally represented as an array_ of nodes. Tag must be in full form, e.g. "tag:yaml.org,2002:set", not a shortcut, like "!!set". -

      -
      -
      -

      Examples

      - -
       // Will be emitted as a sequence (default for arrays)
      - auto seq = Node([1, 2, 3, 4, 5]);
      - // Will be emitted as a set (overriden tag)
      - auto set = Node([1, 2, 3, 4, 5], "tag:yaml.org,2002:set");
      -
      - -
      -
      public this(K, V)(
      -    V[K] array, 
      -    const string tag = null) @safe
      -
      -

      Construct a node from an associative _array. -

      - - -
      -

      If keys and/or values of _array are nodes, they stored directly. - Otherwise they are converted to nodes and then stored. -

      - - -
      -

      Parameters

      - - - -
      array

      Values to store in the node. -

      -
      tag

      Overrides tag of the node when emitted, regardless of tag determined by Representer. Representer uses this to determine YAML data type when a D data type maps to multiple different YAML data types. This is used to differentiate between YAML unordered mappings ("!!map"), ordered mappings ("!!omap"), and pairs ("!!pairs") which are all internally represented as an _array of node pairs. Tag must be in full form, e.g. "tag:yaml.org,2002:omap", not a shortcut, like "!!omap". -

      -
      -
      -

      Examples

      - -
       // Will be emitted as an unordered mapping (default for mappings)
      - auto map   = Node([1 : "a", 2 : "b"]);
      - // Will be emitted as an ordered map (overriden tag)
      - auto omap  = Node([1 : "a", 2 : "b"], "tag:yaml.org,2002:omap");
      - // Will be emitted as pairs (overriden tag)
      - auto pairs = Node([1 : "a", 2 : "b"], "tag:yaml.org,2002:pairs");
      -
      - -
      -
      public this(K, V)(
      -    K[] keys, 
      -    V[] values, 
      -    const string tag = null) @safe 
      -if(!(isSomeString!(K[]) || isSomeString!(V[])))
      -
      -

      Construct a node from arrays of _keys and _values. -

      - - -
      -

      Contracts

      in
      -{
      -    assert (keys.length == values.length, "Lengths of keys and values arrays to construct ""a YAML node from don't match");
      -}
      -
      - -
      -

      Constructs a mapping node with key-value pairs from - _keys and _values, keeping their order. Useful when order - is important (ordered maps, pairs). -

      -

      keys and values must have equal length. -

      -

      If _keys and/or _values are nodes, they are stored directly/ - Otherwise they are converted to nodes and then stored. -

      - - -
      -

      Parameters

      - - - - -
      keys

      Keys of the mapping, from first to last pair. -

      -
      values

      Values of the mapping, from first to last pair. -

      -
      tag

      Overrides tag of the node when emitted, regardless of tag determined by Representer. Representer uses this to determine YAML data type when a D data type maps to multiple different YAML data types. This is used to differentiate between YAML unordered mappings ("!!map"), ordered mappings ("!!omap"), and pairs ("!!pairs") which are all internally represented as an array of node pairs. Tag must be in full form, e.g. "tag:yaml.org,2002:omap", not a shortcut, like "!!omap". -

      -
      -
      -

      Examples

      - -
       // Will be emitted as an unordered mapping (default for mappings)
      - auto map   = Node([1, 2], ["a", "b"]);
      - // Will be emitted as an ordered map (overriden tag)
      - auto omap  = Node([1, 2], ["a", "b"], "tag:yaml.org,2002:omap");
      - // Will be emitted as pairs (overriden tag)
      - auto pairs = Node([1, 2], ["a", "b"], "tag:yaml.org,2002:pairs");
      -
      - -
      -
      public @property bool isValid() const @safe pure nothrow
      -
      -

      Is this node valid (initialized)? -

      - - -
      -
      public @property bool isScalar() const @safe nothrow
      -
      -

      Is this node a scalar value? -

      - - -
      -
      public @property bool isSequence() const @safe nothrow
      -
      -

      Is this node a sequence? -

      - - -
      -
      public @property bool isMapping() const @safe nothrow
      -
      -

      Is this node a mapping? -

      - - -
      -
      public @property bool isUserType() const @safe nothrow
      -
      -

      Is this node a user defined type? -

      - - -
      -
      public @property bool isNull() const @safe nothrow
      -
      -

      Is this node null? -

      - - -
      -
      public @property string tag() const @safe nothrow
      -
      -

      Return tag of the node. -

      - - -
      -
      public bool opEquals(T)(const auto ref T rhs) const @safe
      -
      -

      Equality test. -

      - - -
      -

      If T is Node, recursively compares all subnodes. - This might be quite expensive if testing entire documents. -

      -

      If T is not Node, gets a value of type T from the node and tests - equality with that. -

      -

      To test equality with a null YAML value, use YAMLNull. -

      - - -
      -

      Parameters

      - - -
      rhs

      Variable to test equality with. -

      -
      -
      -

      Returns

      -

      true if equal, false otherwise. -

      - - -
      -

      Example

      -
      auto node = Node(42);
      -
      -assert(node == 42);
      -assert(node != "42");
      -assert(node != "43");
      -
      -auto node2 = Node(YAMLNull());
      -assert(node2 == YAMLNull());
      -
      -
      - -
      -
      alias as = get
      -
      -

      Shortcut for get(). -

      - - -
      -
      public @property T get(T, Flag!"stringConversion" stringConversion = Yes.stringConversion)() @trusted 
      -if(!is(T == const))
      -
      -

      Get the value of the node as specified type. -

      - - -
      -

      If the specifed type does not match type in the node, - conversion is attempted. The stringConversion template - parameter can be used to disable conversion from non-string - types to strings. -

      -

      Numeric values are range checked, throwing if out of range of - requested type. -

      -

      Timestamps are stored as std.datetime.SysTime. - Binary values are decoded and stored as ubyte[]. -

      -

      To get a null value, use get!YAMLNull . This is to - prevent getting null values for types such as strings or classes. -

      -

      Mapping default values: -

      - - -
      -

      Examples

      - - - Automatic type conversion: -
       auto node = Node(42);
      -
      - assert(node.as!int == 42);
      - assert(node.as!string == "42");
      - assert(node.as!double == 42.0);
      -
      - - - -
      -

      Returns

      -

      Value of the node as specified type. -

      - - -
      -

      Throws

      -

      NodeException if unable to convert to specified type, or if - the value is out of range of requested type. -

      - - -
      -
      public @property T get(T, Flag!"stringConversion" stringConversion = Yes.stringConversion)() const @trusted 
      -if(is(T == const))
      -
      -

      Ditto. -

      - - -
      -
      public @property size_t length() const @safe
      -
      -

      If this is a collection, return its _length. -

      - - -
      -

      Otherwise, throw NodeException. -

      - - -
      -

      Returns

      -

      Number of elements in a sequence or key-value pairs in a mapping. -

      - - -
      -

      Throws

      -

      NodeException if this is not a sequence nor a mapping. -

      - - -
      -
      public ref Node opIndex(T)(T index) @trusted
      -
      -

      Get the element at specified index. -

      - - -
      -

      If the node is a sequence, index must be integral. -

      -

      If the node is a mapping, return the value corresponding to the first - key equal to index. containsKey() can be used to determine if a mapping - has a specific key. -

      -

      To get element at a null index, use YAMLNull for index. -

      - - -
      -

      Parameters

      - - -
      index

      Index to use. -

      -
      -
      -

      Returns

      -

      Value corresponding to the index. -

      - - -
      -

      Throws

      -

      NodeException if the index could not be found, - non-integral index is used with a sequence or the node is - not a collection. -

      - - -
      -

      Example

      -
      writeln("D:YAML Node opIndex unittest");
      -alias Node.Value Value;
      -alias Node.Pair Pair;
      -
      -Node narray = Node([11, 12, 13, 14]);
      -Node nmap   = Node(["11", "12", "13", "14"], [11, 12, 13, 14]);
      -
      -assert(narray[0].as!int == 11);
      -assert(null !is collectException(narray[42]));
      -assert(nmap["11"].as!int == 11);
      -assert(nmap["14"].as!int == 14);
      -
      -
      - -
      -
      public bool contains(T)(T rhs) const @safe
      -
      -

      Determine if a collection contains specified value. -

      - - -
      -

      If the node is a sequence, check if it contains the specified value. - If it's a mapping, check if it has a value that matches specified value. -

      - - -
      -

      Parameters

      - - -
      rhs

      Item to look for. Use YAMLNull to check for a null value. -

      -
      -
      -

      Returns

      -

      true if rhs was found, false otherwise. -

      - - -
      -

      Throws

      -

      NodeException if the node is not a collection. -

      - - -
      -
      public bool containsKey(T)(T rhs) const @safe
      -
      -

      Determine if a mapping contains specified key. -

      - - -
      -

      Parameters

      - - -
      rhs

      Key to look for. Use YAMLNull to check for a null key. -

      -
      -
      -

      Returns

      -

      true if rhs was found, false otherwise. -

      - - -
      -

      Throws

      -

      NodeException if the node is not a mapping. -

      - - -
      -
      public void opAssign(Node rhs) @safe nothrow
      -
      -

      Assignment (shallow copy) by value. -

      - - -
      -
      public void opAssign(ref Node rhs) @trusted nothrow
      -
      -

      Assignment (shallow copy) by reference. -

      - - -
      -
      public void opIndexAssign(K, V)(
      -    V value, 
      -    K index) @safe
      -
      -

      Set element at specified index in a collection. -

      - - -
      -

      This method can only be called on collection nodes. -

      -

      If the node is a sequence, index must be integral. -

      -

      If the node is a mapping, sets the _value corresponding to the first - key matching index (including conversion, so e.g. "42" matches 42). -

      -

      If the node is a mapping and no key matches index, a new key-value - pair is added to the mapping. In sequences the index must be in - range. This ensures behavior siilar to D arrays and associative - arrays. -

      -

      To set element at a null index, use YAMLNull for index. -

      - - -
      -

      Parameters

      - - -
      index

      Index of the value to set. -

      -
      -
      -

      Throws

      -

      NodeException if the node is not a collection, index is out - of range or if a non-integral index is used on a sequence node. -

      - - -
      -
      public int opApply(T)(int delegate(ref T) dg) @trusted
      -
      -

      Foreach over a sequence, getting each element as T. -

      - - -
      -

      If T is Node, simply iterate over the nodes in the sequence. - Otherwise, convert each node to T during iteration. -

      - - -
      -

      Throws

      -

      NodeException if the node is not a sequence or an - element could not be converted to specified type. -

      - - -
      -
      public int opApply(K, V)(int delegate(
      -    ref K, 
      -    ref V) dg) @trusted
      -
      -

      Foreach over a mapping, getting each key/value as K/V. -

      - - -
      -

      If the K and/or V is Node, simply iterate over the nodes in the mapping. - Otherwise, convert each key/value to T during iteration. -

      - - -
      -

      Throws

      -

      NodeException if the node is not a mapping or an - element could not be converted to specified type. -

      - - -
      -
      public void add(T)(T value) @safe
      -
      -

      Add an element to a sequence. -

      - - -
      -

      This method can only be called on sequence nodes. -

      -

      If value is a node, it is copied to the sequence directly. Otherwise - value is converted to a node and then stored in the sequence. -

      -

      When emitting, all values in the sequence will be emitted. When - using the !!set tag, the user needs to ensure that all elements in - the sequence are unique, otherwise invalid YAML code will be - emitted.

      -

      - - -
      -

      Parameters

      - - -
      value

      Value to _add to the sequence. -

      -
      -
      -
      public void add(K, V)(
      -    K key, 
      -    V value) @safe
      -
      -

      Add a key-value pair to a mapping. -

      - - -
      -

      This method can only be called on mapping nodes. -

      -

      If key and/or value is a node, it is copied to the mapping directly. - Otherwise it is converted to a node and then stored in the mapping. -

      -

      It is possible for the same key to be present more than once in a - mapping. When emitting, all key-value pairs will be emitted. - This is useful with the "!!pairs" tag, but will result in - invalid YAML with "!!map" and "!!omap" tags.

      -

      - - -
      -

      Parameters

      - - - -
      key

      Key to _add. -

      -
      value

      Value to _add. -

      -
      -
      -
      public Node* opBinaryRight(string op, K)(K key) @system 
      -if(op == "in")
      -
      -

      Determine whether a key is in a mapping, and access its value. -

      - - -
      -

      This method can only be called on mapping nodes. -

      - - -
      -

      Parameters

      - - -
      key

      Key to search for. -

      -
      -
      -

      Returns

      -

      A pointer to the value (as a Node) corresponding to key, - or null if not found. -

      - - -
      -

      Note:

      -
      -
       Any modification to the node can invalidate the returned
      -       pointer.
      -
      -
      - -
      -
      -

      See Also:

      -
      -

      contains -

      - -
      -
      -
      public void remove(T)(T rhs) @trusted
      -
      -

      Remove first (if any) occurence of a value in a collection. -

      - - -
      -

      This method can only be called on collection nodes. -

      -

      If the node is a sequence, the first node matching value is removed. - If the node is a mapping, the first key-value pair where _value - matches specified value is removed. -

      - - -
      -

      Parameters

      - - -
      rhs

      Value to _remove. -

      -
      -
      -

      Throws

      -

      NodeException if the node is not a collection. -

      - - -
      -
      public void removeAt(T)(T index) @trusted
      -
      -

      Remove element at the specified index of a collection. -

      - - -
      -

      This method can only be called on collection nodes. -

      -

      If the node is a sequence, index must be integral. -

      -

      If the node is a mapping, remove the first key-value pair where - key matches index. -

      -

      If the node is a mapping and no key matches index, nothing is removed - and no exception is thrown. This ensures behavior siilar to D arrays - and associative arrays. -

      - - -
      -

      Parameters

      - - -
      index

      Index to remove at. -

      -
      -
      -

      Throws

      -

      NodeException if the node is not a collection, index is out - of range or if a non-integral index is used on a sequence node. -

      - - -
      -
      public int opCmp(ref const Node node) const @safe
      -
      -

      Compare with another _node. -

      - - -
      -

      Aliases

      as
      get
      -
      -

      Shortcut for get(). -

      -

      Functions

      this

      Construct a Node from a value. -

      -
      this

      Ditto. -

      -
      this

      Construct a node from an _array. -

      -
      this

      Construct a node from an associative _array. -

      -
      this

      Construct a node from arrays of _keys and _values. -

      -
      @propertyisValidconst, @safe, pure, nothrow

      Is this node valid (initialized)? -

      -
      @propertyisScalarconst, @safe, nothrow

      Is this node a scalar value? -

      -
      @propertyisSequenceconst, @safe, nothrow

      Is this node a sequence? -

      -
      @propertyisMappingconst, @safe, nothrow

      Is this node a mapping? -

      -
      @propertyisUserTypeconst, @safe, nothrow

      Is this node a user defined type? -

      -
      @propertyisNullconst, @safe, nothrow

      Is this node null? -

      -
      @propertytagconst, @safe, nothrow

      Return tag of the node. -

      -
      opEqualsconst, @safe

      Equality test. -

      -
      @propertyget@trusted

      Get the value of the node as specified type. -

      -
      @propertygetconst, @trusted

      Ditto. -

      -
      @propertylengthconst, @safe

      If this is a collection, return its _length. -

      -
      refopIndex@trusted

      Get the element at specified index. -

      -
      containsconst, @safe

      Determine if a collection contains specified value. -

      -
      containsKeyconst, @safe

      Determine if a mapping contains specified key. -

      -
      opAssign@safe, nothrow

      Assignment (shallow copy) by value. -

      -
      opAssign@trusted, nothrow

      Assignment (shallow copy) by reference. -

      -
      opIndexAssign@safe

      Set element at specified index in a collection. -

      -
      opApply@trusted

      Foreach over a sequence, getting each element as T. -

      -
      opApply@trusted

      Foreach over a mapping, getting each key/value as K/V. -

      -
      add@safe

      Add an element to a sequence. -

      -
      add@safe

      Add a key-value pair to a mapping. -

      -
      opBinaryRight@system

      Determine whether a key is in a mapping, and access its value. -

      -
      remove@trusted

      Remove first (if any) occurence of a value in a collection. -

      -
      removeAt@trusted

      Remove element at the specified index of a collection. -

      -
      opCmpconst, @safe

      Compare with another _node. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/node/NodeException.html b/doc/html/api/dyaml/node/NodeException.html deleted file mode 100644 index 1316914..0000000 --- a/doc/html/api/dyaml/node/NodeException.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -NodeException - - - - - -
      - - -
      -
      public class NodeException : YAMLException
      -
      -

      Exception thrown at node related errors. -

      - - -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/node/YAMLNull.html b/doc/html/api/dyaml/node/YAMLNull.html deleted file mode 100644 index 3cae738..0000000 --- a/doc/html/api/dyaml/node/YAMLNull.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - -YAMLNull - - - - - -
      - - -
      -
      public struct YAMLNull
      -
      -

      Null YAML type. Used in nodes with _null values. -

      - - -
      -
      public string toString() const pure @safe nothrow
      -
      -

      Used for string conversion. -

      - - -
      -

      Functions

      toStringconst, pure, @safe, nothrow

      Used for string conversion. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/representer.html b/doc/html/api/dyaml/representer.html deleted file mode 100644 index 22ad995..0000000 --- a/doc/html/api/dyaml/representer.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - -dyaml.representer - - - - - -
      - - -
      -
      public Node representNull(
      -    ref Node node, 
      -    Representer representer) @safe
      -
      -

      Represent a _null _node as a _null YAML value. -

      - - -
      -
      public Node representString(
      -    ref Node node, 
      -    Representer representer) @safe
      -
      -

      Represent a string _node as a string scalar. -

      - - -
      -
      public Node representBytes(
      -    ref Node node, 
      -    Representer representer) @system
      -
      -

      Represent a bytes _node as a binary scalar. -

      - - -
      -
      public Node representBool(
      -    ref Node node, 
      -    Representer representer) @safe
      -
      -

      Represent a bool _node as a bool scalar. -

      - - -
      -
      public Node representLong(
      -    ref Node node, 
      -    Representer representer) @system
      -
      -

      Represent a long _node as an integer scalar. -

      - - -
      -
      public Node representReal(
      -    ref Node node, 
      -    Representer representer) @system
      -
      -

      Represent a real _node as a floating point scalar. -

      - - -
      -
      public Node representSysTime(
      -    ref Node node, 
      -    Representer representer) @system
      -
      -

      Represent a SysTime _node as a timestamp. -

      - - -
      -
      public Node representNodes(
      -    ref Node node, 
      -    Representer representer) @safe
      -
      -

      Represent a sequence _node as sequence/set. -

      - - -
      -
      public Node.Pair[] pairs
      -
      -

      YAML sets are mapping with null values. -

      - - -
      -

      Variables

      pairs
      Node.Pair[]
      -
      -

      YAML sets are mapping with null values. -

      -
      -
      -
      public Node representPairs(
      -    ref Node node, 
      -    Representer representer) @system
      -
      -

      Represent a mapping _node as map/ordered map/pairs. -

      - - -
      -

      YAML node _representer. Prepares YAML nodes for output. A tutorial can be -found here.
      -

      - - -
      -

      Code based on PyYAML. -

      - - -
      -

      Functions

      representNull@safe

      Represent a _null _node as a _null YAML value. -

      -
      representString@safe

      Represent a string _node as a string scalar. -

      -
      representBytes@system

      Represent a bytes _node as a binary scalar. -

      -
      representBool@safe

      Represent a bool _node as a bool scalar. -

      -
      representLong@system

      Represent a long _node as an integer scalar. -

      -
      representReal@system

      Represent a real _node as a floating point scalar. -

      -
      representSysTime@system

      Represent a SysTime _node as a timestamp. -

      -
      representNodes@safe

      Represent a sequence _node as sequence/set. -

      -
      representPairs@system

      Represent a mapping _node as map/ordered map/pairs. -

      -

      Classes

      RepresenterException

      Exception thrown on Representer errors. -

      -
      Representer

      Represents YAML nodes as scalar, sequence and mapping nodes ready for output. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/representer/Representer.html b/doc/html/api/dyaml/representer/Representer.html deleted file mode 100644 index c2a9112..0000000 --- a/doc/html/api/dyaml/representer/Representer.html +++ /dev/null @@ -1,433 +0,0 @@ - - - - - - -Representer - - - - - -
      - - -
      -
      public final class Representer
      -
      -

      Represents YAML nodes as scalar, sequence and mapping nodes ready for output. -

      - - -
      -

      This class is used to add support for dumping of custom data types. -

      -

      It can also override default node formatting styles for output. -

      - - -
      -
      public this(const Flag!"useDefaultRepresenters" useDefaultRepresenters = Yes.useDefaultRepresenters) @safe pure
      -
      -

      Construct a Representer. -

      - - -
      -

      Parameters

      - - -
      useDefaultRepresenters

      Use default representer functions for default YAML types? This can be disabled to use custom representer functions for default types. -

      -
      -
      -
      public @property void defaultScalarStyle(ScalarStyle style) pure @safe nothrow
      -
      -

      Set default _style for scalars. If style is ScalarStyle.Invalid, the _style is chosen automatically. -

      - - -
      -
      public @property void defaultCollectionStyle(CollectionStyle style) pure @safe nothrow
      -
      -

      Set default _style for collections. If style is CollectionStyle.Invalid, the _style is chosen automatically. -

      - - -
      -
      public void addRepresenter(T)(Node function(
      -    ref Node, 
      -    Representer) representer) @trusted pure
      -
      -

      Add a function to represent nodes with a specific data type. -

      - - -
      -

      The representer function takes references to a Node storing the data -type and to the Representer. It returns the represented node and may -throw a RepresenterException. See the example for more information. -

      -

      Only one function may be specified for one data type. Default data -types already have representer functions unless disabled in the -Representer constructor. -

      -

      Structs and classes must implement the opCmp() operator for D:YAML -support. The signature of the operator that must be implemented -is const int opCmp(ref const MyStruct s) for structs where -MyStruct is the struct type, and int opCmp(Object o) for -classes. Note that the class opCmp() should not alter the compared -values - it is not const for compatibility reasons. -

      - - -
      -

      Parameters

      - - -
      representer

      Representer function to add. -

      -
      -
      -

      Examples

      - - -Representing a simple struct: -
      import std.string;
      -
      -import dyaml.all;
      -
      -struct MyStruct
      -{
      -    int x, y, z;
      -
      -    //Any D:YAML type must have a custom opCmp operator.
      -    //This is used for ordering in mappings.
      -    const int opCmp(ref const MyStruct s)
      -    {
      -        if(x != s.x){return x - s.x;}
      -        if(y != s.y){return y - s.y;}
      -        if(z != s.z){return z - s.z;}
      -        return 0;
      -    }
      -}
      -
      -Node representMyStruct(ref Node node, Representer representer)
      -{ 
      -    //The node is guaranteed to be MyStruct as we add representer for MyStruct.
      -    auto value = node.as!MyStruct;
      -    //Using custom scalar format, x:y:z.
      -    auto scalar = format("%s:%s:%s", value.x, value.y, value.z);
      -    //Representing as a scalar, with custom tag to specify this data type.
      -    return representer.representScalar("!mystruct.tag", scalar);
      -}
      -
      -void main()
      -{
      -    auto dumper = Dumper("file.yaml");
      -    auto representer = new Representer;
      -    representer.addRepresenter!MyStruct(&representMyStruct);
      -    dumper.representer = representer;
      -    dumper.dump(Node(MyStruct(1,2,3)));
      -}
      - -Representing a class: -
      import std.string;
      -
      -import dyaml.all;
      -
      -class MyClass
      -{
      -    int x, y, z;
      -
      -    this(int x, int y, int z)
      -    {
      -        this.x = x; 
      -        this.y = y; 
      -        this.z = z;
      -    }
      -
      -    //Any D:YAML type must have a custom opCmp operator.
      -    //This is used for ordering in mappings.
      -    override int opCmp(Object o)
      -    {
      -        MyClass s = cast(MyClass)o;
      -        if(s is null){return -1;}
      -        if(x != s.x){return x - s.x;}
      -        if(y != s.y){return y - s.y;}
      -        if(z != s.z){return z - s.z;}
      -        return 0;
      -    }
      -
      -    ///Useful for Node.as!string .
      -    override string toString()
      -    {
      -        return format("MyClass(%s, %s, %s)", x, y, z);
      -    }
      -}
      -
      -//Same as representMyStruct.
      -Node representMyClass(ref Node node, Representer representer)
      -{ 
      -    //The node is guaranteed to be MyClass as we add representer for MyClass.
      -    auto value = node.as!MyClass;
      -    //Using custom scalar format, x:y:z.
      -    auto scalar = format("%s:%s:%s", value.x, value.y, value.z);
      -    //Representing as a scalar, with custom tag to specify this data type.
      -    return representer.representScalar("!myclass.tag", scalar);
      -}
      -
      -void main()
      -{
      -    auto dumper = Dumper("file.yaml");
      -    auto representer = new Representer;
      -    representer.addRepresenter!MyClass(&representMyClass);
      -    dumper.representer = representer;
      -    dumper.dump(Node(new MyClass(1,2,3)));
      -}
      - -
      -
      public Node representScalar(
      -    string tag, 
      -    string scalar, 
      -    ScalarStyle style = ScalarStyle.Invalid) @safe
      -
      -

      Represent a _scalar with specified _tag. -

      - - -
      -

      This is used by representer functions that produce scalars. -

      - - -
      -

      Parameters

      - - - - -
      tag

      Tag of the _scalar. -

      -
      scalar

      Scalar value. -

      -
      style

      Style of the _scalar. If invalid, default _style will be used. If the node was loaded before, previous _style will always be used. -

      -
      -
      -

      Returns

      -

      The represented node. -

      - - -
      -

      Example

      - -
      struct MyStruct
      -{
      -    int x, y, z;
      -
      -    //Any D:YAML type must have a custom opCmp operator.
      -    //This is used for ordering in mappings.
      -    const int opCmp(ref const MyStruct s)
      -    {
      -        if(x != s.x){return x - s.x;}
      -        if(y != s.y){return y - s.y;}
      -        if(z != s.z){return z - s.z;}
      -        return 0;
      -    }        
      -}
      -
      -Node representMyStruct(ref Node node, Representer representer)
      -{ 
      -    auto value = node.as!MyStruct;
      -    auto scalar = format("%s:%s:%s", value.x, value.y, value.z);
      -    return representer.representScalar("!mystruct.tag", scalar);
      -}
      - -
      -
      public Node representSequence(
      -    string tag, 
      -    Node[] sequence, 
      -    CollectionStyle style = CollectionStyle.Invalid) @trusted
      -
      -

      Represent a _sequence with specified _tag, representing children first. -

      - - -
      -

      This is used by representer functions that produce sequences. -

      - - -
      -

      Parameters

      - - - - -
      tag

      Tag of the _sequence. -

      -
      sequence

      Sequence of nodes. -

      -
      style

      Style of the _sequence. If invalid, default _style will be used. If the node was loaded before, previous _style will always be used. -

      -
      -
      -

      Returns

      -

      The represented node. -

      - - -
      -

      Throws

      -

      RepresenterException if a child could not be represented. -

      - - -
      -

      Example

      - -
      struct MyStruct
      -{
      -    int x, y, z;
      -
      -    //Any D:YAML type must have a custom opCmp operator.
      -    //This is used for ordering in mappings.
      -    const int opCmp(ref const MyStruct s)
      -    {
      -        if(x != s.x){return x - s.x;}
      -        if(y != s.y){return y - s.y;}
      -        if(z != s.z){return z - s.z;}
      -        return 0;
      -    }        
      -}
      -
      -Node representMyStruct(ref Node node, Representer representer)
      -{ 
      -    auto value = node.as!MyStruct;
      -    auto nodes = [Node(value.x), Node(value.y), Node(value.z)];
      -    //use flow style
      -    return representer.representSequence("!mystruct.tag", nodes,
      -                                         CollectionStyle.Flow);
      -}
      - -
      -
      public Node representMapping(
      -    string tag, 
      -    Node.Pair[] pairs, 
      -    CollectionStyle style = CollectionStyle.Invalid) @trusted
      -
      -

      Represent a mapping with specified _tag, representing children first. -

      - - -
      -

      This is used by representer functions that produce mappings. -

      - - -
      -

      Parameters

      - - - - -
      tag

      Tag of the mapping. -

      -
      pairs

      Key-value _pairs of the mapping. -

      -
      style

      Style of the mapping. If invalid, default _style will be used. If the node was loaded before, previous _style will always be used. -

      -
      -
      -

      Returns

      -

      The represented node. -

      - - -
      -

      Throws

      -

      RepresenterException if a child could not be represented. -

      - - -
      -

      Example

      - -
      struct MyStruct
      -{
      -    int x, y, z;
      -
      -    //Any D:YAML type must have a custom opCmp operator.
      -    //This is used for ordering in mappings.
      -    const int opCmp(ref const MyStruct s)
      -    {
      -        if(x != s.x){return x - s.x;}
      -        if(y != s.y){return y - s.y;}
      -        if(z != s.z){return z - s.z;}
      -        return 0;
      -    }        
      -}
      -
      -Node representMyStruct(ref Node node, Representer representer)
      -{ 
      -    auto value = node.as!MyStruct;
      -    auto pairs = [Node.Pair("x", value.x), 
      -                  Node.Pair("y", value.y), 
      -                  Node.Pair("z", value.z)];
      -    return representer.representMapping("!mystruct.tag", pairs);
      -}
      - -
      -

      Functions

      this

      Construct a Representer. -

      -
      @propertydefaultScalarStylepure, @safe, nothrow

      Set default _style for scalars. If style is ScalarStyle.Invalid, the _style is chosen automatically. -

      -
      @propertydefaultCollectionStylepure, @safe, nothrow

      Set default _style for collections. If style is CollectionStyle.Invalid, the _style is chosen automatically. -

      -
      addRepresenter@trusted, pure

      Add a function to represent nodes with a specific data type. -

      -
      representScalar@safe

      Represent a _scalar with specified _tag. -

      -
      representSequence@trusted

      Represent a _sequence with specified _tag, representing children first. -

      -
      representMapping@trusted

      Represent a mapping with specified _tag, representing children first. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/representer/RepresenterException.html b/doc/html/api/dyaml/representer/RepresenterException.html deleted file mode 100644 index d3fa3b6..0000000 --- a/doc/html/api/dyaml/representer/RepresenterException.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -RepresenterException - - - - - -
      - - -
      -
      public class RepresenterException : YAMLException
      -
      -

      Exception thrown on Representer errors. -

      - - -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/resolver.html b/doc/html/api/dyaml/resolver.html deleted file mode 100644 index 3b09809..0000000 --- a/doc/html/api/dyaml/resolver.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - -dyaml.resolver - - - - - -
      - - -
      -

      Implements a class that resolves YAML tags. This can be used to implicitly -resolve tags for custom data types, removing the need to explicitly -specify tags in YAML. A tutorial can be found -here.
      -

      - - -
      -

      Code based on PyYAML. -

      - - -
      -

      Classes

      Resolver

      Resolves YAML tags (data types). -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/resolver/Resolver.html b/doc/html/api/dyaml/resolver/Resolver.html deleted file mode 100644 index c3c47fa..0000000 --- a/doc/html/api/dyaml/resolver/Resolver.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - -Resolver - - - - - -
      - - -
      -
      public final class Resolver
      -
      -

      Resolves YAML tags (data types). -

      - - -
      -

      Can be used to implicitly resolve custom data types of scalar values. -

      - - -
      -
      public this(Flag!"useDefaultImplicitResolvers" defaultImplicitResolvers = Yes.useDefaultImplicitResolvers) @safe
      -
      -

      Construct a Resolver. -

      - - -
      -

      If you don't want to implicitly resolve default YAML tags/data types, -you can use defaultImplicitResolvers to disable default resolvers. -

      - - -
      -

      Parameters

      - - -
      defaultImplicitResolvers

      Use default YAML implicit resolvers? -

      -
      -
      -
      public void addImplicitResolver(
      -    string tag, 
      -    Regex!char regexp, 
      -    string first) pure @safe
      -
      -

      Add an implicit scalar resolver. -

      - - -
      -

      If a scalar matches regexp and starts with any character in first, -its _tag is set to tag. If it matches more than one resolver _regexp -resolvers added _first override ones added later. Default resolvers -override any user specified resolvers, but they can be disabled in -Resolver constructor. -

      -

      If a scalar is not resolved to anything, it is assigned the default -YAML _tag for strings. -

      - - -
      -

      Parameters

      - - - - -
      tag

      Tag to resolve to. -

      -
      regexp

      Regular expression the scalar must match to have this _tag. -

      -
      first

      String of possible starting characters of the scalar. -

      -
      -
      -

      Examples

      - - -Resolve scalars starting with 'A' to !_tag : -
      import std.regex;
      -
      -import dyaml.all;
      -
      -void main()
      -{
      -    auto loader = Loader("file.txt");
      -    auto resolver = new Resolver();
      -    resolver.addImplicitResolver("!tag", std.regex.regex("A.*"), "A");
      -    loader.resolver = resolver;
      -    
      -    //Note that we have no constructor from tag "!tag", so we can't
      -    //actually load anything that resolves to this tag.
      -    //See Constructor API documentation and tutorial for more information.
      -
      -    auto node = loader.load();
      -}
      - -
      -
      package @property Tag defaultScalarTag() const pure @safe nothrow
      -
      -

      Return default scalar tag. -

      - - -
      -
      package @property Tag defaultSequenceTag() const pure @safe nothrow
      -
      -

      Return default sequence tag. -

      - - -
      -
      package @property Tag defaultMappingTag() const pure @safe nothrow
      -
      -

      Return default mapping tag. -

      - - -
      -

      Functions

      this

      Construct a Resolver. -

      -
      addImplicitResolverpure, @safe

      Add an implicit scalar resolver. -

      -
      @propertydefaultScalarTagconst, pure, @safe, nothrow

      Return default scalar tag. -

      -
      @propertydefaultSequenceTagconst, pure, @safe, nothrow

      Return default sequence tag. -

      -
      @propertydefaultMappingTagconst, pure, @safe, nothrow

      Return default mapping tag. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/style.html b/doc/html/api/dyaml/style.html deleted file mode 100644 index 80fcad1..0000000 --- a/doc/html/api/dyaml/style.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - -dyaml.style - - - - - -
      - - -
      -

      YAML node formatting styles. -

      - - -
      -

      Enums

      ScalarStyle

      Scalar styles. -

      -
      CollectionStyle

      Collection styles. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/style/CollectionStyle.html b/doc/html/api/dyaml/style/CollectionStyle.html deleted file mode 100644 index 34c73d8..0000000 --- a/doc/html/api/dyaml/style/CollectionStyle.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - -CollectionStyle - - - - - -
      - - -
      -
      public enum CollectionStyle : ubyte
      -
      -

      Collection styles. -

      - - -
      -

      Values

      Invalid

      Invalid (uninitialized) style -

      -
      Block

      Block style. -

      -
      Flow

      Flow style. -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/dyaml/style/ScalarStyle.html b/doc/html/api/dyaml/style/ScalarStyle.html deleted file mode 100644 index 4b048c7..0000000 --- a/doc/html/api/dyaml/style/ScalarStyle.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - -ScalarStyle - - - - - -
      - - -
      -
      public enum ScalarStyle : ubyte
      -
      -

      Scalar styles. -

      - - -
      -

      Values

      Invalid

      Invalid (uninitialized) style -

      -
      Literal

      | (Literal block style) -

      -
      Folded

      > (Folded block style) -

      -
      Plain

      Plain scalar -

      -
      SingleQuoted

      Single quoted scalar -

      -
      DoubleQuoted

      Double quoted scalar -

      -
      -
      -
      - -
      - -
      - - diff --git a/doc/html/api/highlight.pack.js b/doc/html/api/highlight.pack.js deleted file mode 100644 index d45d419..0000000 --- a/doc/html/api/highlight.pack.js +++ /dev/null @@ -1 +0,0 @@ -var hljs=new function(){function k(v){return v.replace(/&/gm,"&").replace(//gm,">")}function t(v){return v.nodeName.toLowerCase()}function i(w,x){var v=w&&w.exec(x);return v&&v.index==0}function d(v){return Array.prototype.map.call(v.childNodes,function(w){if(w.nodeType==3){return b.useBR?w.nodeValue.replace(/\n/g,""):w.nodeValue}if(t(w)=="br"){return"\n"}return d(w)}).join("")}function r(w){var v=(w.className+" "+(w.parentNode?w.parentNode.className:"")).split(/\s+/);v=v.map(function(x){return x.replace(/^language-/,"")});return v.filter(function(x){return j(x)||x=="no-highlight"})[0]}function o(x,y){var v={};for(var w in x){v[w]=x[w]}if(y){for(var w in y){v[w]=y[w]}}return v}function u(x){var v=[];(function w(y,z){for(var A=y.firstChild;A;A=A.nextSibling){if(A.nodeType==3){z+=A.nodeValue.length}else{if(t(A)=="br"){z+=1}else{if(A.nodeType==1){v.push({event:"start",offset:z,node:A});z=w(A,z);v.push({event:"stop",offset:z,node:A})}}}}return z})(x,0);return v}function q(w,y,C){var x=0;var F="";var z=[];function B(){if(!w.length||!y.length){return w.length?w:y}if(w[0].offset!=y[0].offset){return(w[0].offset"}function E(G){F+=""}function v(G){(G.event=="start"?A:E)(G.node)}while(w.length||y.length){var D=B();F+=k(C.substr(x,D[0].offset-x));x=D[0].offset;if(D==w){z.reverse().forEach(E);do{v(D.splice(0,1)[0]);D=B()}while(D==w&&D.length&&D[0].offset==x);z.reverse().forEach(A)}else{if(D[0].event=="start"){z.push(D[0].node)}else{z.pop()}v(D.splice(0,1)[0])}}return F+k(C.substr(x))}function m(y){function v(z){return(z&&z.source)||z}function w(A,z){return RegExp(v(A),"m"+(y.cI?"i":"")+(z?"g":""))}function x(D,C){if(D.compiled){return}D.compiled=true;D.k=D.k||D.bK;if(D.k){var z={};function E(G,F){if(y.cI){F=F.toLowerCase()}F.split(" ").forEach(function(H){var I=H.split("|");z[I[0]]=[G,I[1]?Number(I[1]):1]})}if(typeof D.k=="string"){E("keyword",D.k)}else{Object.keys(D.k).forEach(function(F){E(F,D.k[F])})}D.k=z}D.lR=w(D.l||/\b[A-Za-z0-9_]+\b/,true);if(C){if(D.bK){D.b=D.bK.split(" ").join("|")}if(!D.b){D.b=/\B|\b/}D.bR=w(D.b);if(!D.e&&!D.eW){D.e=/\B|\b/}if(D.e){D.eR=w(D.e)}D.tE=v(D.e)||"";if(D.eW&&C.tE){D.tE+=(D.e?"|":"")+C.tE}}if(D.i){D.iR=w(D.i)}if(D.r===undefined){D.r=1}if(!D.c){D.c=[]}var B=[];D.c.forEach(function(F){if(F.v){F.v.forEach(function(G){B.push(o(F,G))})}else{B.push(F=="self"?D:F)}});D.c=B;D.c.forEach(function(F){x(F,D)});if(D.starts){x(D.starts,C)}var A=D.c.map(function(F){return F.bK?"\\.?\\b("+F.b+")\\b\\.?":F.b}).concat([D.tE]).concat([D.i]).map(v).filter(Boolean);D.t=A.length?w(A.join("|"),true):{exec:function(F){return null}};D.continuation={}}x(y)}function c(S,L,J,R){function v(U,V){for(var T=0;T";U+=Z+'">';return U+X+Y}function N(){var U=k(C);if(!I.k){return U}var T="";var X=0;I.lR.lastIndex=0;var V=I.lR.exec(U);while(V){T+=U.substr(X,V.index-X);var W=E(I,V);if(W){H+=W[1];T+=w(W[0],V[0])}else{T+=V[0]}X=I.lR.lastIndex;V=I.lR.exec(U)}return T+U.substr(X)}function F(){if(I.sL&&!f[I.sL]){return k(C)}var T=I.sL?c(I.sL,C,true,I.continuation.top):g(C);if(I.r>0){H+=T.r}if(I.subLanguageMode=="continuous"){I.continuation.top=T.top}return w(T.language,T.value,false,true)}function Q(){return I.sL!==undefined?F():N()}function P(V,U){var T=V.cN?w(V.cN,"",true):"";if(V.rB){D+=T;C=""}else{if(V.eB){D+=k(U)+T;C=""}else{D+=T;C=U}}I=Object.create(V,{parent:{value:I}})}function G(T,X){C+=T;if(X===undefined){D+=Q();return 0}var V=v(X,I);if(V){D+=Q();P(V,X);return V.rB?0:X.length}var W=z(I,X);if(W){var U=I;if(!(U.rE||U.eE)){C+=X}D+=Q();do{if(I.cN){D+=""}H+=I.r;I=I.parent}while(I!=W.parent);if(U.eE){D+=k(X)}C="";if(W.starts){P(W.starts,"")}return U.rE?0:X.length}if(A(X,I)){throw new Error('Illegal lexeme "'+X+'" for mode "'+(I.cN||"")+'"')}C+=X;return X.length||1}var M=j(S);if(!M){throw new Error('Unknown language: "'+S+'"')}m(M);var I=R||M;var D="";for(var K=I;K!=M;K=K.parent){if(K.cN){D=w(K.cN,D,true)}}var C="";var H=0;try{var B,y,x=0;while(true){I.t.lastIndex=x;B=I.t.exec(L);if(!B){break}y=G(L.substr(x,B.index-x),B[0]);x=B.index+y}G(L.substr(x));for(var K=I;K.parent;K=K.parent){if(K.cN){D+=""}}return{r:H,value:D,language:S,top:I}}catch(O){if(O.message.indexOf("Illegal")!=-1){return{r:0,value:k(L)}}else{throw O}}}function g(y,x){x=x||b.languages||Object.keys(f);var v={r:0,value:k(y)};var w=v;x.forEach(function(z){if(!j(z)){return}var A=c(z,y,false);A.language=z;if(A.r>w.r){w=A}if(A.r>v.r){w=v;v=A}});if(w.language){v.second_best=w}return v}function h(v){if(b.tabReplace){v=v.replace(/^((<[^>]+>|\t)+)/gm,function(w,z,y,x){return z.replace(/\t/g,b.tabReplace)})}if(b.useBR){v=v.replace(/\n/g,"
      ")}return v}function p(z){var y=d(z);var A=r(z);if(A=="no-highlight"){return}var v=A?c(A,y,true):g(y);var w=u(z);if(w.length){var x=document.createElementNS("http://www.w3.org/1999/xhtml","pre");x.innerHTML=v.value;v.value=q(w,u(x),y)}v.value=h(v.value);z.innerHTML=v.value;z.className+=" hljs "+(!A&&v.language||"");z.result={language:v.language,re:v.r};if(v.second_best){z.second_best={language:v.second_best.language,re:v.second_best.r}}}var b={classPrefix:"hljs-",tabReplace:null,useBR:false,languages:undefined};function s(v){b=o(b,v)}function l(){if(l.called){return}l.called=true;var v=document.querySelectorAll("pre code");Array.prototype.forEach.call(v,p)}function a(){addEventListener("DOMContentLoaded",l,false);addEventListener("load",l,false)}var f={};var n={};function e(v,x){var w=f[v]=x(this);if(w.aliases){w.aliases.forEach(function(y){n[y]=v})}}function j(v){return f[v]||f[n[v]]}this.highlight=c;this.highlightAuto=g;this.fixMarkup=h;this.highlightBlock=p;this.configure=s;this.initHighlighting=l;this.initHighlightingOnLoad=a;this.registerLanguage=e;this.getLanguage=j;this.inherit=o;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE]};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE]};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gim]*/,i:/\n/,c:[this.BE,{b:/\[/,e:/\]/,r:0,c:[this.BE]}]};this.TM={cN:"title",b:this.IR,r:0};this.UTM={cN:"title",b:this.UIR,r:0}}();hljs.registerLanguage("d",function(x){var b={keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short size_t string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"};var c="(0|[1-9][\\d_]*)",q="(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)",h="0[bB][01_]+",v="([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)",y="0[xX]"+v,p="([eE][+-]?"+q+")",o="("+q+"(\\.\\d*|"+p+")|\\d+\\."+q+q+"|\\."+c+p+"?)",k="(0[xX]("+v+"\\."+v+"|\\.?"+v+")[pP][+-]?"+q+")",l="("+c+"|"+h+"|"+y+")",n="("+k+"|"+o+")";var z="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};";var m={cN:"number",b:"\\b"+l+"(L|u|U|Lu|LU|uL|UL)?",r:0};var j={cN:"number",b:"\\b("+n+"([fF]|L|i|[fF]i|Li)?|"+l+"(i|[fF]i|Li))",r:0};var s={cN:"string",b:"'("+z+"|.)",e:"'",i:"."};var r={b:z,r:0};var w={cN:"string",b:'"',c:[r],e:'"[cwd]?'};var f={cN:"string",b:'[rq]"',e:'"[cwd]?',r:5};var u={cN:"string",b:"`",e:"`[cwd]?"};var i={cN:"string",b:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',r:10};var t={cN:"string",b:'q"\\{',e:'\\}"'};var e={cN:"shebang",b:"^#!",e:"$",r:5};var g={cN:"preprocessor",b:"#(line)",e:"$",r:5};var d={cN:"keyword",b:"@[a-zA-Z_][a-zA-Z_\\d]*"};var a={cN:"comment",b:"\\/\\+",c:["self"],e:"\\+\\/",r:10};return{l:x.UIR,k:b,c:[x.CLCM,x.CBLCLM,a,i,w,f,u,t,j,m,s,e,g,d]}}); diff --git a/doc/html/api/index.html b/doc/html/api/index.html deleted file mode 100644 index a2d6172..0000000 --- a/doc/html/api/index.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - -Index - - - - - -
      - - -
      - - - - - - - - - - - - - - - - - diff --git a/doc/html/api/search.js b/doc/html/api/search.js deleted file mode 100644 index a5b01c4..0000000 --- a/doc/html/api/search.js +++ /dev/null @@ -1,179 +0,0 @@ -"use strict"; -var items = [ -{"dyaml.node" : "dyaml/node.html"}, -{"dyaml.node.NodeException" : "dyaml/node/NodeException.html"}, -{"dyaml.node.YAMLNull" : "dyaml/node/YAMLNull.html"}, -{"dyaml.node.YAMLNull.toString" : "dyaml/node/YAMLNull.html#toString"}, -{"dyaml.node.Node" : "dyaml/node/Node.html"}, -{"dyaml.node.Node.this" : "dyaml/node/Node.html#this"}, -{"dyaml.node.Node.this" : "dyaml/node/Node.html#this"}, -{"dyaml.node.Node.this" : "dyaml/node/Node.html#this"}, -{"dyaml.node.Node.this" : "dyaml/node/Node.html#this"}, -{"dyaml.node.Node.this" : "dyaml/node/Node.html#this"}, -{"dyaml.node.Node.isValid" : "dyaml/node/Node.html#isValid"}, -{"dyaml.node.Node.isScalar" : "dyaml/node/Node.html#isScalar"}, -{"dyaml.node.Node.isSequence" : "dyaml/node/Node.html#isSequence"}, -{"dyaml.node.Node.isMapping" : "dyaml/node/Node.html#isMapping"}, -{"dyaml.node.Node.isUserType" : "dyaml/node/Node.html#isUserType"}, -{"dyaml.node.Node.isNull" : "dyaml/node/Node.html#isNull"}, -{"dyaml.node.Node.tag" : "dyaml/node/Node.html#tag"}, -{"dyaml.node.Node.opEquals" : "dyaml/node/Node.html#opEquals"}, -{"dyaml.node.Node.as" : "dyaml/node/Node.html#as"}, -{"dyaml.node.Node.get" : "dyaml/node/Node.html#get"}, -{"dyaml.node.Node.get" : "dyaml/node/Node.html#get"}, -{"dyaml.node.Node.length" : "dyaml/node/Node.html#length"}, -{"dyaml.node.Node.opIndex" : "dyaml/node/Node.html#opIndex"}, -{"dyaml.node.Node.contains" : "dyaml/node/Node.html#contains"}, -{"dyaml.node.Node.containsKey" : "dyaml/node/Node.html#containsKey"}, -{"dyaml.node.Node.opAssign" : "dyaml/node/Node.html#opAssign"}, -{"dyaml.node.Node.opAssign" : "dyaml/node/Node.html#opAssign"}, -{"dyaml.node.Node.opIndexAssign" : "dyaml/node/Node.html#opIndexAssign"}, -{"dyaml.node.Node.opApply" : "dyaml/node/Node.html#opApply"}, -{"dyaml.node.Node.opApply" : "dyaml/node/Node.html#opApply"}, -{"dyaml.node.Node.add" : "dyaml/node/Node.html#add"}, -{"dyaml.node.Node.add" : "dyaml/node/Node.html#add"}, -{"dyaml.node.Node.opBinaryRight" : "dyaml/node/Node.html#opBinaryRight"}, -{"dyaml.node.Node.remove" : "dyaml/node/Node.html#remove"}, -{"dyaml.node.Node.removeAt" : "dyaml/node/Node.html#removeAt"}, -{"dyaml.node.Node.opCmp" : "dyaml/node/Node.html#opCmp"}, -{"dyaml.resolver" : "dyaml/resolver.html"}, -{"dyaml.resolver.Resolver" : "dyaml/resolver/Resolver.html"}, -{"dyaml.resolver.Resolver.this" : "dyaml/resolver/Resolver.html#this"}, -{"dyaml.resolver.Resolver.addImplicitResolver" : "dyaml/resolver/Resolver.html#addImplicitResolver"}, -{"dyaml.resolver.Resolver.defaultScalarTag" : "dyaml/resolver/Resolver.html#defaultScalarTag"}, -{"dyaml.resolver.Resolver.defaultSequenceTag" : "dyaml/resolver/Resolver.html#defaultSequenceTag"}, -{"dyaml.resolver.Resolver.defaultMappingTag" : "dyaml/resolver/Resolver.html#defaultMappingTag"}, -{"dyaml.hacks" : "dyaml/hacks.html"}, -{"dyaml.hacks.scalarStyleHack" : "dyaml/hacks.html#scalarStyleHack"}, -{"dyaml.hacks.collectionStyleHack" : "dyaml/hacks.html#collectionStyleHack"}, -{"dyaml.hacks.scalarStyleHack" : "dyaml/hacks.html#scalarStyleHack"}, -{"dyaml.hacks.collectionStyleHack" : "dyaml/hacks.html#collectionStyleHack"}, -{"dyaml.dumper" : "dyaml/dumper.html"}, -{"dyaml.dumper.Dumper" : "dyaml/dumper/Dumper.html"}, -{"dyaml.dumper.Dumper.this" : "dyaml/dumper/Dumper.html#this"}, -{"dyaml.dumper.Dumper.this" : "dyaml/dumper/Dumper.html#this"}, -{"dyaml.dumper.Dumper.name" : "dyaml/dumper/Dumper.html#name"}, -{"dyaml.dumper.Dumper.resolver" : "dyaml/dumper/Dumper.html#resolver"}, -{"dyaml.dumper.Dumper.representer" : "dyaml/dumper/Dumper.html#representer"}, -{"dyaml.dumper.Dumper.canonical" : "dyaml/dumper/Dumper.html#canonical"}, -{"dyaml.dumper.Dumper.indent" : "dyaml/dumper/Dumper.html#indent"}, -{"dyaml.dumper.Dumper.textWidth" : "dyaml/dumper/Dumper.html#textWidth"}, -{"dyaml.dumper.Dumper.lineBreak" : "dyaml/dumper/Dumper.html#lineBreak"}, -{"dyaml.dumper.Dumper.encoding" : "dyaml/dumper/Dumper.html#encoding"}, -{"dyaml.dumper.Dumper.explicitStart" : "dyaml/dumper/Dumper.html#explicitStart"}, -{"dyaml.dumper.Dumper.explicitEnd" : "dyaml/dumper/Dumper.html#explicitEnd"}, -{"dyaml.dumper.Dumper.YAMLVersion" : "dyaml/dumper/Dumper.html#YAMLVersion"}, -{"dyaml.dumper.Dumper.tagDirectives" : "dyaml/dumper/Dumper.html#tagDirectives"}, -{"dyaml.dumper.Dumper.dump" : "dyaml/dumper/Dumper.html#dump"}, -{"dyaml.representer" : "dyaml/representer.html"}, -{"dyaml.representer.RepresenterException" : "dyaml/representer/RepresenterException.html"}, -{"dyaml.representer.Representer" : "dyaml/representer/Representer.html"}, -{"dyaml.representer.Representer.this" : "dyaml/representer/Representer.html#this"}, -{"dyaml.representer.Representer.defaultScalarStyle" : "dyaml/representer/Representer.html#defaultScalarStyle"}, -{"dyaml.representer.Representer.defaultCollectionStyle" : "dyaml/representer/Representer.html#defaultCollectionStyle"}, -{"dyaml.representer.Representer.addRepresenter" : "dyaml/representer/Representer.html#addRepresenter"}, -{"dyaml.representer.Representer.representScalar" : "dyaml/representer/Representer.html#representScalar"}, -{"dyaml.representer.Representer.representSequence" : "dyaml/representer/Representer.html#representSequence"}, -{"dyaml.representer.Representer.representMapping" : "dyaml/representer/Representer.html#representMapping"}, -{"dyaml.representer.representNull" : "dyaml/representer.html#representNull"}, -{"dyaml.representer.representString" : "dyaml/representer.html#representString"}, -{"dyaml.representer.representBytes" : "dyaml/representer.html#representBytes"}, -{"dyaml.representer.representBool" : "dyaml/representer.html#representBool"}, -{"dyaml.representer.representLong" : "dyaml/representer.html#representLong"}, -{"dyaml.representer.representReal" : "dyaml/representer.html#representReal"}, -{"dyaml.representer.representSysTime" : "dyaml/representer.html#representSysTime"}, -{"dyaml.representer.representNodes" : "dyaml/representer.html#representNodes"}, -{"dyaml.representer.representNodes.pairs" : "dyaml/representer.html#representNodes.pairs"}, -{"dyaml.representer.representPairs" : "dyaml/representer.html#representPairs"}, -{"dyaml.exception" : "dyaml/exception.html"}, -{"dyaml.exception.YAMLException" : "dyaml/exception/YAMLException.html"}, -{"dyaml.exception.YAMLException.this" : "dyaml/exception/YAMLException.html#this"}, -{"dyaml.linebreak" : "dyaml/linebreak.html"}, -{"dyaml.linebreak.LineBreak" : "dyaml/linebreak/LineBreak.html"}, -{"dyaml.loader" : "dyaml/loader.html"}, -{"dyaml.loader.Loader" : "dyaml/loader/Loader.html"}, -{"dyaml.loader.Loader.this" : "dyaml/loader/Loader.html#this"}, -{"dyaml.loader.Loader.fromString" : "dyaml/loader/Loader.html#fromString"}, -{"dyaml.loader.Loader.this" : "dyaml/loader/Loader.html#this"}, -{"dyaml.loader.Loader.name" : "dyaml/loader/Loader.html#name"}, -{"dyaml.loader.Loader.resolver" : "dyaml/loader/Loader.html#resolver"}, -{"dyaml.loader.Loader.constructor" : "dyaml/loader/Loader.html#constructor"}, -{"dyaml.loader.Loader.load" : "dyaml/loader/Loader.html#load"}, -{"dyaml.loader.Loader.loadAll" : "dyaml/loader/Loader.html#loadAll"}, -{"dyaml.loader.Loader.opApply" : "dyaml/loader/Loader.html#opApply"}, -{"dyaml.style" : "dyaml/style.html"}, -{"dyaml.style.ScalarStyle" : "dyaml/style/ScalarStyle.html"}, -{"dyaml.style.CollectionStyle" : "dyaml/style/CollectionStyle.html"}, -{"dyaml.constructor" : "dyaml/constructor.html"}, -{"dyaml.constructor.Constructor" : "dyaml/constructor/Constructor.html"}, -{"dyaml.constructor.Constructor.this" : "dyaml/constructor/Constructor.html#this"}, -{"dyaml.constructor.Constructor.addConstructorScalar" : "dyaml/constructor/Constructor.html#addConstructorScalar"}, -{"dyaml.constructor.Constructor.addConstructorSequence" : "dyaml/constructor/Constructor.html#addConstructorSequence"}, -{"dyaml.constructor.Constructor.addConstructorMapping" : "dyaml/constructor/Constructor.html#addConstructorMapping"}, -{"dyaml.constructor.constructNull" : "dyaml/constructor.html#constructNull"}, -{"dyaml.constructor.constructMerge" : "dyaml/constructor.html#constructMerge"}, -{"dyaml.constructor.constructBool" : "dyaml/constructor.html#constructBool"}, -{"dyaml.constructor.constructLong" : "dyaml/constructor.html#constructLong"}, -{"dyaml.constructor.constructReal" : "dyaml/constructor.html#constructReal"}, -{"dyaml.constructor.constructBinary" : "dyaml/constructor.html#constructBinary"}, -{"dyaml.constructor.constructTimestamp" : "dyaml/constructor.html#constructTimestamp"}, -{"dyaml.constructor.constructString" : "dyaml/constructor.html#constructString"}, -{"dyaml.constructor.getPairs" : "dyaml/constructor.html#getPairs"}, -{"dyaml.constructor.constructOrderedMap" : "dyaml/constructor.html#constructOrderedMap"}, -{"dyaml.constructor.constructPairs" : "dyaml/constructor.html#constructPairs"}, -{"dyaml.constructor.constructSet" : "dyaml/constructor.html#constructSet"}, -{"dyaml.constructor.constructSequence" : "dyaml/constructor.html#constructSequence"}, -{"dyaml.constructor.constructMap" : "dyaml/constructor.html#constructMap"}, -]; -function search(str) { - var re = new RegExp(str.toLowerCase()); - var ret = {}; - for (var i = 0; i < items.length; i++) { - var k = Object.keys(items[i])[0]; - if (re.test(k.toLowerCase())) - ret[k] = items[i][k]; - } - return ret; -} - -function searchSubmit(value, event) { - console.log("searchSubmit"); - var resultTable = document.getElementById("results"); - while (resultTable.firstChild) - resultTable.removeChild(resultTable.firstChild); - if (value === "" || event.keyCode == 27) { - resultTable.style.display = "none"; - return; - } - resultTable.style.display = "block"; - var results = search(value); - var keys = Object.keys(results); - if (keys.length === 0) { - var row = resultTable.insertRow(); - var td = document.createElement("td"); - var node = document.createTextNode("No results"); - td.appendChild(node); - row.appendChild(td); - return; - } - for (var i = 0; i < keys.length; i++) { - var k = keys[i]; - var v = results[keys[i]]; - var link = document.createElement("a"); - link.href = v; - link.textContent = k; - link.attributes.id = "link" + i; - var row = resultTable.insertRow(); - row.appendChild(link); - } -} - -function hideSearchResults(event) { - if (event.keyCode != 27) - return; - var resultTable = document.getElementById("results"); - while (resultTable.firstChild) - resultTable.removeChild(resultTable.firstChild); - resultTable.style.display = "none"; -} - diff --git a/doc/html/api/show_hide.js b/doc/html/api/show_hide.js deleted file mode 100644 index ab7a50c..0000000 --- a/doc/html/api/show_hide.js +++ /dev/null @@ -1,17 +0,0 @@ -window.onload = function(e) -{ - var elems = document.querySelectorAll( "div.toc ul ul" ); - for( i in elems ) - { - if( elems[i].style.display != "block" ) - elems[i].style.display = "none"; - } -} - -function show_hide(id) -{ - var elem = document.getElementById( id ); - if( elem.style.display == "block" ) - elem.style.display = "none"; - else elem.style.display = "block"; -} diff --git a/doc/html/api/style.css b/doc/html/api/style.css deleted file mode 100644 index 769e7d3..0000000 --- a/doc/html/api/style.css +++ /dev/null @@ -1,726 +0,0 @@ -html { - font-family: Verdana, "DejaVu Sans", sans; - margin: 0; - padding: 0; - background-color: #333; - border-left: .2em solid #333; - border-right: .2em solid #333; - min-height: 100%; -} - -body { - margin: 0; - padding: 0; -} - -div.main { - overflow: hidden; - background-color: #F8F8F8; -} - - - -/**** BREADCRUMBS ****/ - -div.breadcrumbs { - color: white; - background-color: #333; - padding: 1.0em 0.5em 0.0em 0.5em; - left: 0; - box-sizing: border-box; - text-align: right; - top: 0; - width: 100%; - height: 48px; - font-size: 95%; - - position: fixed; -} - -div.breadcrumbs a { - color: white; -} - -div.breadcrumbs span.highlight, div.breadcrumbs span a { - color: #DAAF07; -} - -div.breadcrumbs input { - width: 7em; - margin-top: -0.1em; -} - -div.breadcrumbs small { - font-size: 0.8em; -} - -/** narrow screen hacks **/ -@media only screen and (max-width: 1000px) -{ - div.breadcrumbs span, div.breadcrumbs small { - font-size: 80%; - } -} -@media only screen and (max-width: 800px) -{ - div.breadcrumbs small { - display: none; - position: fixed; - } - div.breadcrumbs span { - font-size: 75%; - } -} -@media only screen and (max-width: 600px) -{ - div.breadcrumbs span { - font-size: 65%; - } -} - -div.breadcrumbs a.home { - float: left; - font-weight: bold; - font-size: 200%; - margin: 0 2% 0 0%; - margin-top: -0.3em; - text-decoration: none; -} - -div.breadcrumbs input { - float: left; -} - - -/* anchors need to compensate for the fixed-pos breadcrumbs */ -a.anchor -{ - display: block; - position: relative; - top: -48px; - visibility: hidden; -} - -/** SEARCH RESULTS **/ -#results { - position: absolute; - max-height: 30em; - background-color: #eee; - box-shadow: 0 .25em .25em black; - display: none; - text-align: left; - color: black; - margin-top: 2em; - font-size: 70%; - z-index: 1000; - overflow-y: scroll; -} - -#results a { - color: blue; -} - - -/**** SIDEBAR, TABLE OF CONTENTS ****/ - -div.sidebar { - margin-top: 48px; - float: left; - margin-right: -1px; - border-right: 1px solid #D0D0D0; - background-color: #F8F8F0; -} - - -div.toc { - padding: 1.5em 0.75em 1em 0.5em; - font-size: 0.55em; - line-height: 1.95em; - display:block; -} - -@media only screen and (max-width: 800px) -{ - div.toc { - font-size: 0.5em; - padding: 1.5em 0.4em 1em 0.2em; - } -} - - -/* stuff for showing/hiding the sidebar */ -.hide, .show { - display: block; - float: right; - border-right: 1px solid #D0D0D0; - border-bottom: 1px solid #D0D0D0; - border-left: 1px solid #D0D0D0; - /* to avoid having double border */ - margin-right: -1px; - font-size: 1.1em; - padding: 0 0.6em; -} -a.hide, a.show { - color: #111; - text-decoration: none; -} -.hide { - background-color: #F8F8F8; - border-bottom-left-radius:3px; - border-right: 1px solid #F8F8F8; -} -.show { - background-color: #F8F8F0; - border-bottom-right-radius:3px; - display: none; -} -.hide:target + .show { - display: inline; - position: absolute; -} -.hide:target { - display: none; -} -.hide:target ~ .toc { - display:none; -} - - -div.toc .toc-additional { - border-bottom: 1px dashed #333; - line-height: 1.5em; -} - -div.toc .toc-additional p, div.toc .toc-additional ul { - margin: 0.4em 0; -} - -div.toc ul { - list-style-type: none; - padding-left: 0; - padding-bottom: 0.5em; -} - -div.toc ul ul { - list-style-type: none; - padding-left: 0.5em; -} - - -div.toc a { - color: #111; - font-size: 1.25em; -} - -@media only screen and (max-width: 800px) -{ - div.toc ul ul { - padding-left: 0.2em; - } -} - -div.toc span.package { - cursor: pointer; - line-height: 1.8em; - font-weight: bold; - border: 1px solid rgba(0, 0, 0, 0.12); - border-radius: 2px; - background-color: #F0F0F0; - font-size: 1.25em; - padding: 0 0.2em; - /* counteracts the text movement caused by the padding */ - margin: 0 -0.2em; -} - -div.toc span.package a { - font-size: 1em; -} - -/* Highlight the current module/package */ -div.toc .selected { - border-radius: 2px; - background-color: #DAAF07 !important; - padding: 0.325em 0.2em; - /* counteracts the text movement caused by the padding */ - margin: -0.325em -0.2em; -} - - - -/**** MAIN CONTENT ****/ - -div.content { - margin-top: 48px; - padding: 1.5em; - font-size: 90%; - line-height: 130%; - overflow: hidden; - border-left: 1px solid #D0D0D0; -} -@media only screen and (max-width: 800px) -{ - div.content { - font-size: 82%; - } -} -@media only screen and (max-width: 600px) -{ - div.content { - font-size: 70%; - padding: 1.5em 0.3em 1.5em 0.5em; - } -} - -div.content h2 { - margin: .35em 0 .45em 0; - padding-top: .35em; - font-size: 1.3em; -} - -div.content h3 { - font-size: 1.1em; -} - -div.content tr { - margin: 0; -} - -div.content table { - border-collapse: collapse; - border-bottom: 1px dashed #333; - font-size: 90%; - line-height: 130%; - margin: 1em 0; -} - -div.content td { - border-top: 1px dashed #333; - margin: 0; - padding: .32em; -} - -div.content td:first-child { - text-align: center; -} - -/* prevent function attribs from wrapping, make the cell wider instead */ -div.content td:first-child * { - white-space: nowrap -} - -/* The first markdown-generated paragraph in e.g. Params tables shouldn't add any vertical - * space - */ -div.content td p:first-child { - margin: 0; -} - -div.content p strong { - font-size: 92%; -} - -.paramName { - font-weight: bold; - width: 6em; -} - -div.section { - padding: 0; - margin: 0; -} - - - -/**** EXTRA INFO IN FUNCTION/CLASS/ETC LISTS ****/ - -div.content td .extrainfo{ - display: block; - line-height: 105%; - font-family: monospace; - font-size: 85%; - text-align: center; -} - -.extrainfo div { - display: block; - margin: 0; -} - -.extrainfo .attr-const { color: blueviolet; } -.extrainfo .attr-pure { color: darkslategray; } -.extrainfo .attr-nothrow { color: brown; } -.extrainfo .attr-nogc { color: darkgreen; } -.extrainfo .attr-safe { color: darkblue; } -.extrainfo .attr-trusted { color: firebrick; } -.extrainfo .attr-system { color: darkred; } -.extrainfo .attr-final { color: darkolivegreen; } -.extrainfo .attr-ref { color: fuchsia; } - - -/**** SYMBOLS (not used by the one-file-for-every-variable writer backend) ****/ - -div.aggregate-symbol { - display: flex; - flex-direction: column; - display: -webkit-flex; - -webkit-flex-direction: column; -} - -div.aggregate-symbol div.description { - order: -2; - -webkit-order: -2; -} - -div.aggregate-symbol div.members { - order: -1; - -webkit-order: -1; - padding-bottom: 0.3em; - border-bottom: 10px solid #333; - margin: 1em 0em 1.5em 0em; -} - -div.symbol { - border-radius: 3px; - border: 1px solid #d0d0d0; - padding: 1px 0.4em; - margin: 0.5em 0; -} - -a.anchor:target + div.symbol { - border: 2px solid #DAAF07; - border-radius: 0; - background-color: #F8F8F0; -} - - - -/**** SECTION-SPECIFIC STYLES ****/ - -.section.seealso, .section.note, .section.imports { - font-size: 75%; - line-height: 135%; - /* background-color: #F0F0C0; */ - /* background-color: #DA7F07; */ - /* background-color: #DA8F07; */ - /* background-color: #DA9F07; */ - background-color: #DAAF07; - /* background-color: #EABD08; */ - padding: 1em; - margin-bottom: 0.5em; -} - -.section.seealso h2, .section.note h2 { - display: block; - float: left; - margin: 0 0.7em -0.05em 0em; - padding: 0; - font-size: 1.1em; -} - -.section.imports h2 { - display: inline; - margin: 0.5em 0em; - padding: 0; - font-size: 1.1em; -} - -.section.seealso div.seealso-content, .section.note div.note-content { - display: block; - margin-left: 6.5em; -} - -.section.imports ul { - margin: 0; - list-style-type: none; - padding-left: 1.5em; - - -moz-column-count: 4; - -moz-column-gap: 20px; - -webkit-column-count: 4; - -webkit-column-gap: 20px; - column-count: 4; - column-gap: 20px; -} - -@media only screen and (max-width: 1400px) -{ - .section.imports ul { - -moz-column-count: 3; - -moz-column-gap: 20px; - -webkit-column-count: 3; - -webkit-column-gap: 20px; - column-count: 3; - column-gap: 20px; - } -} - -@media only screen and (max-width: 1100px) -{ - .section.imports ul { - -moz-column-count: 2; - -moz-column-gap: 13px; - -webkit-column-count: 2; - -webkit-column-gap: 13px; - column-count: 2; - column-gap: 13px; - } -} - -@media only screen and (max-width: 800px) -{ - .section.imports ul { - -moz-column-count: 1; - -moz-column-gap: 7px; - -webkit-column-count: 1; - -webkit-column-gap: 7px; - column-count: 1; - column-gap: 7px; - } -} - - -.section.imports ul a { - color: #111; -} - - -.section.seealso *:first-child, .section.note *:first-child { - margin-top: 0em; -} - -.section.seealso ul, .section.note ul { - padding-left: 1.5em; -} - -.section.seealso *:last-child, .section.note *:last-child { - margin-bottom: 0em; -} - -/**** FOOTER ****/ - -footer -{ - text-align: center; - font-size: 60%; - color: white; - background-color: #333; -} - -footer a -{ - color: white; -} - - - -/**** CODE ****/ - -pre { - margin-top: 0.4em; -} - -/* DDoc code examples */ -code { - background-color: #333; - color: #eee; - padding: 0.8em; - border-radius: .1em; - display: block; -} - -code a { - color: white; - text-decoration: none; - border-bottom: 1px dotted #888; -} - -/* hmod/libddoc errors */ -div.error { - color: darkred; -} - -/* Markdown inline code and $(D code) */ -code.prettyprint, .d_inlinecode { - font-family: monospace; - color: #333; - background-color:rgba(0,0,0,0.04); - border-radius: .15em; - border: 1px solid #C0C0C0; - padding: 0.22em; - display: inline; -} - -code.prettyprint a { - color: black; - border-color: #777; -} - -/*do not affect the first
      , which is not in a section*/
      -div.section pre > code {
      -	margin: .5em;
      -	border-radius: .1em;
      -	padding: 0.8em;
      -}
      -
      -div.section td pre {
      -	margin: 0;
      -	padding: 0;
      -}
      -
      -
      -div.section td code:not(.prettyprint) {
      -	margin: 0;
      -	padding: 0.6em;
      -}
      -
      -.hljs {
      -	display: block; padding: 1em;
      -	background: #282B2E;
      -	overflow-x: auto;
      -	display: block;
      -}
      -
      -.hljs-keyword,
      -.hljs-literal,
      -.hljs-change,
      -.hljs-winutils,
      -.hljs-flow,
      -.lisp .hljs-title,
      -.clojure .hljs-built_in,
      -.nginx .hljs-title,
      -.css .hljs-id,
      -.tex .hljs-special {
      -	color: #93C763;
      -}
      -
      -.hljs-number {
      -	color: #FFCD22;
      -}
      -
      -.hljs {
      -	color: #E0E2E4;
      -}
      -
      -.css .hljs-tag,
      -.css .hljs-pseudo {
      -	color: #D0D2B5;
      -}
      -
      -.hljs-attribute,
      -.hljs .hljs-constant {
      -	color: #668BB0;
      -}
      -
      -.xml .hljs-attribute {
      -	color: #B3B689;
      -}
      -
      -.xml .hljs-tag .hljs-value {
      -	color: #E8E2B7;
      -}
      -
      -.hljs-code,
      -.hljs-class .hljs-title,
      -.hljs-header {
      -	color: white;
      -}
      -
      -.hljs-class,
      -.hljs-hexcolor {
      -	color: #93C763;
      -}
      -
      -.hljs-regexp {
      -	color: #D39745;
      -}
      -
      -.hljs-at_rule,
      -.hljs-at_rule .hljs-keyword {
      -	color: #A082BD;
      -}
      -
      -.hljs-doctype {
      -	color: #557182;
      -}
      -
      -.hljs-link_url,
      -.hljs-tag,
      -.hljs-tag .hljs-title,
      -.hljs-bullet,
      -.hljs-subst,
      -.hljs-emphasis,
      -.haskell .hljs-type,
      -.hljs-preprocessor,
      -.hljs-pragma,
      -.ruby .hljs-class .hljs-parent,
      -.hljs-built_in,
      -.sql .hljs-aggregate,
      -.django .hljs-template_tag,
      -.django .hljs-variable,
      -.smalltalk .hljs-class,
      -.hljs-javadoc,
      -.django .hljs-filter .hljs-argument,
      -.smalltalk .hljs-localvars,
      -.smalltalk .hljs-array,
      -.hljs-attr_selector,
      -.hljs-pseudo,
      -.hljs-addition,
      -.hljs-stream,
      -.hljs-envvar,
      -.apache .hljs-tag,
      -.apache .hljs-cbracket,
      -.tex .hljs-command,
      -.hljs-prompt {
      -	color: #8CBBAD;
      -}
      -
      -.hljs-string {
      -	color: #EC7600;
      -}
      -
      -.hljs-comment,
      -.java .hljs-annotation,
      -.hljs-blockquote,
      -.hljs-horizontal_rule,
      -.python .hljs-decorator,
      -.hljs-template_comment,
      -.hljs-pi,
      -.hljs-deletion,
      -.hljs-shebang,
      -.apache .hljs-sqbracket,
      -.tex .hljs-formula {
      -	color: #818E96;
      -}
      -
      -.hljs-keyword,
      -.hljs-literal,
      -.css .hljs-id,
      -.hljs-phpdoc,
      -.hljs-title,
      -.hljs-header,
      -.haskell .hljs-type,
      -.vbscript .hljs-built_in,
      -.sql .hljs-aggregate,
      -.rsl .hljs-built_in,
      -.smalltalk .hljs-class,
      -.diff .hljs-header,
      -.hljs-chunk,
      -.hljs-winutils,
      -.bash .hljs-variable,
      -.apache .hljs-tag,
      -.tex .hljs-special,
      -.hljs-request,
      -.hljs-at_rule .hljs-keyword,
      -.hljs-status {
      -	font-weight: bold;
      -}
      -
      -.coffeescript .javascript,
      -.javascript .xml,
      -.tex .hljs-formula,
      -.xml .javascript,
      -.xml .vbscript,
      -.xml .css,
      -.xml .hljs-cdata {
      -	opacity: 0.5;
      -}
      diff --git a/doc/html/articles/spec_differences.html b/doc/html/articles/spec_differences.html
      deleted file mode 100644
      index 1c21d8b..0000000
      --- a/doc/html/articles/spec_differences.html
      +++ /dev/null
      @@ -1,146 +0,0 @@
      -
      -
      -
      -
      -  
      -    
      -    
      -    Differences between D:YAML and the YAML specification — D:YAML 0.5 documentation
      -    
      -    
      -    
      -    
      -    
      -    
      -    
      -    
      -    
      -     
      -  
      -  
      -      
      -
      -    
      -
      -
      -
      - -
      -

      Differences between D:YAML and the YAML specification¶

      -

      There are some differences between D:YAML and the YAML 1.1 specification. Some -are caused by difficulty of implementation of some features, such as multiple -Unicode encodings within single stream, and some by unnecessary restrictions or -ambiguities in the specification.

      -

      Still, D:YAML tries to be as close to the specification as possible. It should -never load documents with different meaning than according to the specification, -and documents that fail to load should be very rare (for instance, very few -files use multiple Unicode encodings).

      -
      -

      List of known differences:¶

      -

      Differences that can cause valid YAML documents not to load:

      -
        -
      • No support for byte order marks and multiple Unicode encodings in a stream.

        -
      • -
      • Plain scalars in flow context cannot contain ,, : and ?. -This might change with : in the future. -See http://pyyaml.org/wiki/YAMLColonInFlowContext for details.

        -
      • -
      • The specification does not restrict characters for anchors and -aliases. This may lead to problems, for instance, the document:

        -
        [ *alias, value ]
        -
        -
        -

        can be interpteted in two ways, as:

        -
        [ "value" ]
        -
        -
        -

        and:

        -
        [ *alias , "value" ]
        -
        -
        -

        Therefore we restrict aliases and anchors to ASCII alphanumeric characters.

        -
      • -
      • The specification is confusing about tabs in plain scalars. We don’t use tabs -in plain scalars at all.

        -
      • -
      • There is no support for recursive data structures in DYAML.

        -
      • -
      -

      Other differences:

      -
        -
      • Indentation is ignored in the flow context, which is less restrictive than the -specification. This allows code such as:

        -
        key: {
        -}
        -
        -
        -
      • -
      • Indentation rules for quoted scalars are loosed: They don’t need to adhere -indentation as " and ' clearly mark the beginning and the end of them.

        -
      • -
      • We allow _ in tag handles.

        -
      • -
      • Right now, two mappings with the same contents but different orderings are -considered unequal, even if they are unordered mappings. This is because all -mappings are ordered in the D:YAML implementation. This should change in -future, once D associative arrays work with variant types or a map class or -struct appears in Phobos.

        -
      • -
      -
      -
      - - -
      -
      -
      - -
      -
      - - - - \ No newline at end of file diff --git a/doc/html/index.html b/doc/html/index.html deleted file mode 100644 index 2eb6019..0000000 --- a/doc/html/index.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - Welcome to D:YAML documentation! — D:YAML 0.5 documentation - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/html/objects.inv b/doc/html/objects.inv deleted file mode 100644 index 47872397d0cb3b8b5c5104d86a4c7b777107c05f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmY#Z2rkIT%&Sny%qvUHE6FdaR47X=D$dN$Q!wIERtPA{&q_@$u~Klcigfh#0g8k{ zWUUko^h|-=kc?D?qSV~P%)FG;B8B`kg_4ZSVuiHKoKyuMot&RrP?TC+oSLFgTAZ1e zu27YenWV>6aqIM1|C49DJ=X?k=y`5D<>}*fHt>RJh{lR5XIs5qq)vJAOhfy}v*lBs xEzzoIYT0oq`16L0rcS3)hbdyq)x=cO7ihI~I8J4C7GY6Yw!Dau;r=s2NdP%>PhS84 diff --git a/doc/html/search.html b/doc/html/search.html deleted file mode 100644 index 8cad9ea..0000000 --- a/doc/html/search.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - Search — D:YAML 0.5 documentation - - - - - - - - - - - - - - - - - - - -
      -
      -
      -
      - -

      Search

      -
      - -

      - Please activate JavaScript to enable the search - functionality. -

      -
      -

      - From here you can search these documents. Enter your search - words into the box below and click "search". Note that the search - function will automatically search for all of the words. Pages - containing fewer words won't appear in the result list. -

      -
      - - - - - -
      - -
      - -
      -
      -
      -
      -
      - -
      -
      -
      -
      - - - - \ No newline at end of file diff --git a/doc/html/searchindex.js b/doc/html/searchindex.js deleted file mode 100644 index f324563..0000000 --- a/doc/html/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({envversion:42,terms:{represent:[],all:[1,3,4],code:[1,3],representmap:3,scalar:[1,3,4],follow:[3,4],decid:3,"const":3,readabl:0,representsequ:3,program:4,digit:[3,4],sourc:[3,4],everi:3,string:[0,3,4],powervr:0,"void":[3,4],phobo:1,failur:3,veri:1,affect:4,implicitli:[0,3],tri:[1,4],gender:0,iter:4,"try":[3,4],item:0,refer:[0,3],slower:0,past:4,fold:0,second:0,design:0,pass:3,download:4,rrr:3,even:1,index:4,what:3,appear:1,compar:3,cast:3,section:3,version:4,"new":[3,4],method:[3,4],dyaml:[1,4],gener:4,never:1,here:4,ggg:3,depend:[0,3,4],sinc:3,valu:[0,1,3,4],convert:[0,3,4],male:0,loos:1,datetim:0,omap:0,chang:[0,1,3],commonli:4,extra:4,modul:4,put:3,subnod:4,articl:[0,2],regex:3,from:[3,4],would:[3,4],doubl:0,two:[0,1],next:[3,4],mainsourcefil:4,few:1,call:[3,4],handl:[1,3],msg:3,type:1,tell:4,more:[0,4],sort:3,phone:0,hold:3,must:3,addrepresent:3,word:4,alia:[0,1],work:1,paragraph:0,can:[0,1,3,4],learn:4,purpos:3,root:[3,4],overrid:3,sourcefil:4,stream:[0,1],process:3,templat:3,topic:3,tag:[1,3],tab:1,onlin:2,serial:[0,3],addconstructorxxx:3,cours:3,multipl:[0,1],newlin:0,quot:[0,1],getting_start:4,how:[3,4],targettyp:4,foreach:[3,4],answer:[0,4],instead:0,simpl:[0,3,4],css:3,map:[1,3,4],mar:4,clone:0,variant:1,befor:3,ff0000:3,uint:3,mai:[1,4],end:[0,1],data:1,ani:[0,3,4],stdio:4,explicit:[0,3],correspond:3,ambigu:1,caus:1,inform:[0,4],green:[0,3],allow:[0,1],first:3,order:[1,4],over:4,orang:3,becaus:1,yamlexcept:[3,4],hierarchi:0,still:[0,1],paramet:3,write:4,style:[0,4],precondit:3,complex:[0,3],main:[3,4],might:[0,1,3,4],alter:3,them:[0,1,3],good:3,"return":3,thei:[0,1,3],python:0,auto:3,now:[1,3,4],introduct:[0,4],name:[0,4],unlik:0,separ:[0,4],each:[0,3],found:3,went:3,complet:3,mean:[1,4],compil:3,unequ:1,idea:4,"static":3,expect:[3,4],our:[3,4],happen:3,out:[0,3],space:0,content:[1,3,4],"0123456789abcdefabcdef":3,ref:3,correct:4,red:[0,3],difficulti:1,advanc:0,"0123456789abcdef":3,mystruct:3,standard:4,reason:3,base:[0,3],dictionari:0,releas:4,org:[1,3],"byte":1,thrown:[3,4],pyyaml:[0,1],indent:[0,1],could:[3,4],keep:4,turn:4,length:3,yamlcoloninflowcontext:1,confus:1,assign:0,radeon:0,oper:[0,3,4],rang:3,onc:[0,1],arrai:[0,1,3,4],sometim:3,restrict:1,instruct:4,alreadi:[3,4],done:3,construct:[0,3],miss:3,addconstructormap:3,size:0,seq:0,associ:[0,1,4],addimplicitresolv:3,system:[0,4],messag:3,gpu:0,white:3,conveni:0,"final":[3,4],store:[0,3],adher:1,option:0,especi:0,ishexdigit:3,copi:2,specifi:[0,3,4],pars:[0,3,4],somewhat:0,than:[1,4],serv:4,remov:0,structur:[0,1],charact:[0,1,3],project:[],str:[0,3],were:3,argument:3,packag:[3,4],have:[0,3,4],tabl:0,need:[0,1,3,4],"null":0,built:4,alias:1,latter:4,constructcolormap:3,note:[3,4],also:[0,3],read:[0,3,4],take:3,which:[0,1,3,4],brace:0,channel:3,uppercas:3,compat:3,begin:[0,1,4],normal:4,previou:3,most:[0,3,4],detect:3,pair:[0,3],"class":[1,3],don:[1,3,4],later:3,flow:[0,1],doe:[0,1,4],bracket:0,cortex:0,fact:0,show:[0,3],alphanumer:1,syntax:[],identifi:[0,3],find:[3,4],onli:[3,4],explicitli:[0,3],just:[3,4],explain:4,should:[1,3,4],local:2,meant:4,std:[0,3,4],get:3,express:3,cannot:[1,4],report:3,whether:3,common:0,contain:[0,1,3,4],where:[0,3],wiki:1,set:3,dump:[3,4],"float":[0,3],see:[0,1,3,4],result:3,fail:1,close:1,athlon:0,representscalar:3,wikipedia:0,written:4,simplest:4,"import":[3,4],neither:4,signatur:3,accord:1,kei:[0,1,4],both:3,last:0,howev:[0,3,4],equal:3,comment:[0,4],etc:3,tutori:[2,3,4],context:[0,1],load:[1,3,4],point:4,constructcolorscalar:3,hyphen:0,loader:[3,4],colon:0,suppli:3,respect:[3,4],addconstructorscalar:3,rgb:3,empti:0,implicit:[0,3],json:[0,4],basic:4,resolut:[0,3],anywher:0,assert:3,togeth:3,input:[3,4],"catch":3,former:4,multi:0,ident:3,look:4,plain:[0,1,3],ffff00:3,easier:0,defin:0,ain:0,error:4,anchor:1,readi:3,therefor:[1,3],non:[0,3],itself:3,tediou:3,ascii:[1,3],dumper:[3,4],disabl:3,clearli:1,make:3,same:[0,1,3],binari:0,instanc:[1,3,4],timestamp:0,android:0,document:1,difficult:0,http:1,nest:0,blue:[0,3],user:[0,3],implement:[1,3],markup:0,well:3,person:0,exampl:[3,4],command:4,thi:[0,1,3,4],everyth:3,left:0,ldc:4,systim:0,newest:4,execut:4,less:1,gdc:4,human:0,languag:[0,4],struct:[1,3,4],interptet:1,except:[3,4],color:[0,3],add:3,other:[1,4],els:0,match:3,build:4,real:0,format:[0,3,4],preserv:[0,4],know:3,world:4,recurs:[0,1],tolow:3,like:3,success:3,arbitrari:3,whitespac:4,resolv:[],integ:[0,3,4],arthur:0,api:[2,3,4],singl:[0,1],output:[3,4],page:0,right:1,linux:0,some:[0,1,3,4],guarante:3,ubyt:[0,3],librari:4,representcolor:3,lead:1,per:3,unord:1,condit:3,duplic:3,either:[0,3],object:3,run:4,acronym:0,usag:4,immut:3,rrggbb:3,unicod:1,chapter:0,comparison:3,about:[1,4],rare:1,usedefaultrepresent:3,unnecessari:1,regular:3,constructor:[],fals:3,produc:4,block:0,subset:0,within:1,encod:1,automat:4,bbb:3,bsd:0,mark:[0,1],your:3,manag:4,wai:[1,3,4],support:[0,1,3],question:0,"long":0,custom:[],writeln:[3,4],start:3,includ:4,"function":3,form:3,continu:0,newer:4,line:0,opcmp:3,"throw":[3,4],consist:0,possibl:[0,1,3,4],"default":[0,3],bugfix:4,displai:4,until:0,problem:1,similar:0,featur:[0,1],creat:[0,3,4],"int":[0,3,4],cover:4,dure:3,parser:[0,4],doesn:4,repres:[0,3,4],"char":3,exist:4,file:[1,3,4],yamlnul:0,isdigit:3,dent:0,check:[3,4],probabl:0,want:3,hex:3,when:[3,4],detail:[0,1],invalid:3,field:3,valid:1,bool:0,futur:[0,1,4],test:3,you:[0,3,4],node:[0,3,4],xxx:3,sequenc:[3,4],consid:1,debian:0,reduc:0,longer:3,directori:[3,4],rule:1,hello:4,ignor:1,far:3,escap:0,cpu:0},objtypes:{},objnames:{},filenames:["tutorials/yaml_syntax","articles/spec_differences","index","tutorials/custom_types","tutorials/getting_started"],titles:["YAML syntax","Differences between D:YAML and the YAML specification","Welcome to D:YAML documentation!","Custom YAML data types","Getting started"],objects:{},titleterms:{compil:4,represent:3,set:4,syntax:0,scalar:0,code:4,instal:4,your:4,differ:1,welcom:2,start:4,dub:4,custom:3,yaml:[0,1,2,3,4],explan:4,between:1,document:[0,2],type:3,map:0,get:4,sequenc:0,known:1,data:3,conclus:4,dmd:4,specif:1,list:1,resolv:3,project:4,alias:0,tag:0,constructor:3,anchor:0,first:4}}) \ No newline at end of file diff --git a/doc/html/tutorials/custom_types.html b/doc/html/tutorials/custom_types.html deleted file mode 100644 index 5c27426..0000000 --- a/doc/html/tutorials/custom_types.html +++ /dev/null @@ -1,385 +0,0 @@ - - - - - - - - Custom YAML data types — D:YAML 0.5 documentation - - - - - - - - - - - - - - - -
      -
      -
      -
      - -
      -

      Custom YAML data types¶

      -

      Sometimes you need to serialize complex data types such as classes. To do this -you could use plain nodes such as mappings with classes’ fields. YAML also -supports custom types with identifiers called tags. That is the topic of this -tutorial.

      -

      Each YAML node has a tag specifying its type. For instance: strings use the tag -tag:yaml.org,2002:str. Tags of most default types are implicitly resolved -during parsing - you don’t need to specify tag for each float, integer, etc. -D:YAML can also implicitly resolve custom tags, as we will show later.

      -
      -

      Constructor¶

      -

      D:YAML uses the Constructor class to process -each node to hold data type corresponding to its tag. Constructor stores -functions to process each supported tag. These are supplied by the user using -the addConstructorXXX() methods, where XXX is Scalar, Sequence or -Mapping. Constructor is then passed to Loader, which parses YAML input.

      -

      Structs and classes must implement the opCmp() operator for YAML support. This -is used for duplicate detection in mappings, sorting and equality comparisons of -nodes. The signature of the operator that must be implemented is -const int opCmp(ref const MyStruct s) for structs where MyStruct is the -struct type, and int opCmp(Object o) for classes. Note that the class -opCmp() should not alter the compared values - it is not const for compatibility -reasons.

      -

      We will implement support for an RGB color type. It is implemented as the -following struct:

      -
      struct Color
      -{
      -    ubyte red;
      -    ubyte green;
      -    ubyte blue;
      -
      -    const int opCmp(ref const Color c)
      -    {
      -        if(red   != c.red)  {return red   - c.red;}
      -        if(green != c.green){return green - c.green;}
      -        if(blue  != c.blue) {return blue  - c.blue;}
      -        return 0;
      -    }
      -}
      -
      -
      -

      First, we need a function to construct our data type. The function will take a -reference to Node to construct from. The node is guaranteed to contain either -a string, an array of Node or of Node.Pair, depending on whether we’re -constructing our value from a scalar, sequence, or mapping, respectively. -If this function throws any exception, D:YAML handles it and adds its message -to a YAMLException that will be thrown when loading the file.

      -

      In this tutorial, we have functions to construct a color from a scalar, using -CSS-like format, RRGGBB, or from a mapping, where we use the following format: -{r:RRR, g:GGG, b:BBB} . Code of these functions:

      -
      Color constructColorScalar(ref Node node)
      -{
      -    string value = node.as!string;
      -
      -    if(value.length != 6)
      -    {
      -        throw new Exception("Invalid color: " ~ value);
      -    }
      -    //We don't need to check for uppercase chars this way.
      -    value = value.toLower();
      -
      -    //Get value of a hex digit.
      -    uint hex(char c)
      -    {
      -        import std.ascii;
      -        if(!std.ascii.isHexDigit(c))
      -        {
      -            throw new Exception("Invalid color: " ~ value);
      -        }
      -
      -        if(std.ascii.isDigit(c))
      -        {
      -            return c - '0';
      -        }
      -        return c - 'a' + 10;
      -    }
      -
      -    Color result;
      -    result.red   = cast(ubyte)(16 * hex(value[0]) + hex(value[1]));
      -    result.green = cast(ubyte)(16 * hex(value[2]) + hex(value[3]));
      -    result.blue  = cast(ubyte)(16 * hex(value[4]) + hex(value[5]));
      -
      -    return result;
      -}
      -
      -Color constructColorMapping(ref Node node)
      -{
      -    ubyte r,g,b;
      -
      -    //Might throw if a value is missing is not an integer, or is out of range.
      -    //If this happens, D:YAML will handle the exception and use its message
      -    //in a YAMLException thrown when loading.
      -    r = node["r"].as!ubyte;
      -    g = node["g"].as!ubyte;
      -    b = node["b"].as!ubyte;
      -
      -    return Color(cast(ubyte)r, cast(ubyte)g, cast(ubyte)b);
      -}
      -
      -
      -

      Next, we need some YAML data using our new tag. Create a file called -input.yaml with the following contents:

      -
      scalar-red: !color FF0000
      -scalar-orange: !color FFFF00
      -mapping-red: !color-mapping {r: 255, g: 0, b: 0}
      -mapping-orange:
      -    !color-mapping
      -    r: 255
      -    g: 255
      -    b: 0
      -
      -
      -

      You can see that we’re using tag !color for scalar colors, and -!color-mapping for colors expressed as mappings.

      -

      Finally, the code to put it all together:

      -
      void main()
      -{
      -    auto red    = Color(255, 0, 0);
      -    auto orange = Color(255, 255, 0);
      -
      -    try
      -    {
      -        auto constructor = new Constructor;
      -        //both functions handle the same tag, but one handles scalar, one mapping.
      -        constructor.addConstructorScalar("!color", &constructColorScalar);
      -        constructor.addConstructorMapping("!color-mapping", &constructColorMapping);
      -
      -        auto loader = Loader("input.yaml");
      -        loader.constructor = constructor;
      -
      -        auto root = loader.load();
      -
      -        if(root["scalar-red"].as!Color == red &&
      -           root["mapping-red"].as!Color == red &&
      -           root["scalar-orange"].as!Color == orange &&
      -           root["mapping-orange"].as!Color == orange)
      -        {
      -            writeln("SUCCESS");
      -            return;
      -        }
      -    }
      -    catch(YAMLException e)
      -    {
      -        writeln(e.msg);
      -    }
      -
      -    writeln("FAILURE");
      -}
      -
      -
      -

      First, we create a Constructor and pass functions to handle the !color -and !color-mapping tag. We construct a Loader and pass the Constructor -to it. We then load the YAML document, and finally, read the colors to test if -they were loaded as expected.

      -

      You can find the source code for what we’ve done so far in the -examples/constructor directory in the D:YAML package.

      -
      -
      -

      Resolver¶

      -

      Specifying tag for every color can be tedious. D:YAML can implicitly resolve -scalar tags using regular expressions. This is how default types are resolved. -We will use the Resolver class to add implicit -tag resolution for the Color data type (in its scalar form).

      -

      We use the addImplicitResolver() method of Resolver, passing the tag, -regular expression the scalar must match to resolve to this tag, and a string of -possible starting characters of the scalar. Then we pass the Resolver to -Loader.

      -

      Note that resolvers added first override ones added later. If no resolver -matches a scalar, YAML string tag is used. Therefore our custom values must not -be resolvable as any non-string YAML data type.

      -

      Add this to your code to add implicit resolution of !color.

      -
      //code from the previous example...
      -
      -auto resolver = new Resolver;
      -import std.regex;
      -resolver.addImplicitResolver("!color", std.regex.regex("[0-9a-fA-F]{6}"),
      -                             "0123456789abcdefABCDEF");
      -
      -auto loader = Loader("input.yaml");
      -
      -loader.constructor = constructor;
      -loader.resolver = resolver;
      -
      -//code from the previous example...
      -
      -
      -

      Now, change contents of input.yaml to this:

      -
      scalar-red: FF0000
      -scalar-orange: FFFF00
      -mapping-red: !color-mapping {r: 255, g: 0, b: 0}
      -mapping-orange:
      -    !color-mapping
      -    r: 255
      -    g: 255
      -    b: 0
      -
      -
      -

      We no longer need to specify the tag for scalar color values. Compile and test -the example. If everything went as expected, it should report success.

      -

      You can find the complete code in the examples/resolver directory in the -D:YAML package.

      -
      -
      -

      Representer¶

      -

      Now that you can load custom data types, it might be good to know how to dump -them. D:YAML uses the Representer class for -this purpose.

      -

      Representer processes YAML nodes into plain mapping, sequence or scalar nodes -ready for output. Just like with Constructor, this is done by user specified -functions. These functions take references to a node to process and to the -Representer, and return the processed node.

      -

      Representer functions can be added with the addRepresenter() method. The -Representer is then passed to Dumper, which dumps YAML documents. Only one -function per type can be specified. This is asserted in addRepresenter() -preconditions. Default YAML types already have representer functions specified, -but you can disable them by constructing Representer with the -useDefaultRepresenters parameter set to false.

      -

      By default, tags are explicitly output for all non-default types. To make dumped -tags implicit, you can pass a Resolver that will resolve them implicitly. Of -course, you will need to use an identical Resolver when loading the output.

      -

      With the following code, we will add support for dumping the our Color type.

      -
      Node representColor(ref Node node, Representer representer)
      -{
      -    //The node is guaranteed to be Color as we add representer for Color.
      -    Color color = node.as!Color;
      -
      -    static immutable hex = "0123456789ABCDEF";
      -
      -    //Using the color format from the Constructor example.
      -    string scalar;
      -    foreach(channel; [color.red, color.green, color.blue])
      -    {
      -        scalar ~= hex[channel / 16];
      -        scalar ~= hex[channel % 16];
      -    }
      -
      -    //Representing as a scalar, with custom tag to specify this data type.
      -    return representer.representScalar("!color", scalar);
      -}
      -
      -
      -

      First we get the Color from the node. Then we convert it to a string with the -CSS-like format we’ve used before. Finally, we use the representScalar() -method of Representer to get a scalar node ready for output. There are -corresponding representMapping() and representSequence() methods -as well, with examples in the -Resolver API documentation.

      -

      Since a type can only have one representer function, we don’t dump Color both -in the scalar and mapping formats we’ve used before. However, you can decide to -dump the node with different formats/tags in the representer function itself. -E.g. you could dump the Color as a mapping based on some arbitrary condition, -such as the color being white.

      -
      void main()
      -{
      -    try
      -    {
      -        auto representer = new Representer;
      -        representer.addRepresenter!Color(&representColor);
      -
      -        auto resolver = new Resolver;
      -        import std.regex;
      -        resolver.addImplicitResolver("!color", std.regex.regex("[0-9a-fA-F]{6}"),
      -                                     "0123456789abcdefABCDEF");
      -
      -        auto dumper = Dumper("output.yaml");
      -        dumper.representer = representer;
      -        dumper.resolver    = resolver;
      -
      -        auto document = Node([Color(255, 0, 0),
      -                              Color(0, 255, 0),
      -                              Color(0, 0, 255)]);
      -
      -        dumper.dump(document);
      -    }
      -    catch(YAMLException e)
      -    {
      -        writeln(e.msg);
      -    }
      -}
      -
      -
      -

      We construct a new Representer, and specify a representer function for the -Color (the template argument) type. We also construct a Resolver, same as in -the previous section, so the !color tag will be implicit. Of course, -identical Resolver would then have to be used when loading the file. -You don’t need to do this if you want the tag to be explicit.

      -

      We construct a Dumper to file output.yaml and pass the Representer and -Resolver to it. Then, we create a simple node containing a sequence of colors -and finally, we dump it.

      -

      Source code for this section can be found in the examples/representer -directory of the D:YAML package.

      -
      -
      - - -
      -
      -
      - -
      -
      - - - - \ No newline at end of file diff --git a/doc/html/tutorials/getting_started.html b/doc/html/tutorials/getting_started.html deleted file mode 100644 index d219f7a..0000000 --- a/doc/html/tutorials/getting_started.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - - Getting started — D:YAML 0.5 documentation - - - - - - - - - - - - - - - -
      -
      -
      -
      - -
      -

      Getting started¶

      -

      Welcome to D:YAML! D:YAML is a YAML parser -library for the D programming language. This tutorial will -explain how to set D:YAML up and use it in your projects.

      -

      This is meant to be the simplest possible introduction to D:YAML. Some of this -information might already be known to you. Only basic usage is covered.

      -
      -

      Setting up¶

      -
      -

      Install the DMD compiler¶

      -

      Digital Mars D compiler, or DMD, is the most commonly used D compiler. You can find its -newest version here. Download the version of DMD -for your operating system and install it.

      -
      -

      Note

      -

      Other D compilers exist, such as -GDC and -LDC.

      -
      -
      -
      -

      Install dub¶

      -

      dub is a build system and package manager for D. -It is the standard way to manage D projects and their dependencies, compilation and so -on.

      -

      DMD may include DUB in future releases, but at this point we need to install it -separately. See -installation instructions.

      -
      -
      -
      -

      Your first D:YAML project¶

      -

      Create a directory for your project and in that directory, create a new file named -input.yaml and paste this code into the file:

      -
      Hello World : [Hello, World]
      -Answer: 42
      -
      -
      -

      This will serve as input for our example.

      -

      Now we need to parse it. Create a new file with name main.d. Paste following code -into the file:

      -
      import std.stdio;
      -import yaml;
      -
      -void main()
      -{
      -    //Read the input.
      -    Node root = Loader("input.yaml").load();
      -
      -    //Display the data read.
      -    foreach(string word; root["Hello World"])
      -    {
      -        writeln(word);
      -    }
      -    writeln("The answer is ", root["Answer"].as!int);
      -
      -    //Dump the loaded document to output.yaml.
      -    Dumper("output.yaml").dump(root);
      -}
      -
      -
      -
      -

      Explanation of the code¶

      -

      First, we import the dyaml.all module. This is the only D:YAML module you need to -import - it automatically imports all needed modules.

      -

      Next we load the file using the Loader.load() method. Loader is a struct used for -parsing YAML documents. The load() method loads the file as one YAML document, or -throws YAMLException, D:YAML exception type, if the file could not be parsed or -contains more than one document. Note that we don’t do any error checking here in order -to keep the example as simple as possible.

      -

      Node represents a node in a YAML document. It can be a sequence (array), mapping -(associative array) or a scalar (value). Here the root node is a mapping, and we use the -index operator to get subnodes with keys “Hello World” and “Answer”. We iterate over the -former, as it is a sequence, and use the Node.as() method on the latter to read its -value as an integer.

      -

      You can iterate over a mapping or sequence as if it was an associative or normal array, -respectively. If you try to iterate over a scalar, it will throw a YAMLException.

      -

      You can iterate using Node as the iterated type, or specify the type iterated nodes -are expected to have. D:YAML will automatically convert to that type if possible. Here -we specify the string type, so we iterate over the “Hello World” sequence as an array -of strings. If it is not possible to convert to iterated type, a YAMLException is -thrown. For instance, if we specified int here, we would get an error, as “Hello” -cannot be converted to an integer.

      -

      The Node.as() method is used to read value of a scalar node as specified type. If the -scalar does not have the specified type, D:YAML will try to convert it, throwing -YAMLException if not possible.

      -

      Finally we dump the document we just read to output.yaml with the Dumper.dump() -method. Dumper is a struct used to dump YAML documents. The dump() method writes -one or more documents to a file, throwing YAMLException if the file could not be -written to.

      -

      D:YAML tries to preserve style information in documents so e.g. [Hello, World] is -not turned into:

      -
      -
      - Hello
      -
      - World
      -
      -

      However, comments are not preserved and neither are any extra formatting whitespace that -doesn’t affect the meaning of YAML contents.

      -
      -
      -

      Compiling¶

      -

      We’re going to use dub, which we installed at the beginning, to compile our project.

      -

      Create a file called dub.json with the following contents:

      -
      {
      -    "name": "getting-started",
      -    "targetType": "executable",
      -    "sourceFiles": ["main.d"],
      -    "mainSourceFile": "main.d",
      -    "dependencies":
      -    {
      -        "dyaml": { "version" : "~>0.5.0" },
      -    },
      -}
      -
      -
      -

      This file tells dub that we’re building an executable called getting-started from -a D source file main.d, and that our project depends on D:YAML 0.5.0 or any newer, -bugfix release of D:YAML 0.5 . DUB will automatically find and download the correct -version of D:YAML when the project is built.

      -

      Now run the following command in your project’s directory:

      -
      dub build
      -
      -
      -

      dub will automatically download D:YAML and compile it, and then then it will compile our -program. This will generate an executable called getting-started or -getting-started.exe in your directory. When you run it, it should produce the -following output:

      -
      Hello
      -World
      -The answer is 42
      -
      -
      -
      -
      -

      Conclusion¶

      -

      You should now have a basic idea about how to use D:YAML. To learn more, look at the -API documentation and other tutorials. You can find code for this -example in the example/getting_started directory in the package.

      -
      -
      -
      - - -
      -
      -
      - -
      -
      - - - - \ No newline at end of file diff --git a/doc/html/tutorials/yaml_syntax.html b/doc/html/tutorials/yaml_syntax.html deleted file mode 100644 index 6be9f3f..0000000 --- a/doc/html/tutorials/yaml_syntax.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - - - YAML syntax — D:YAML 0.5 documentation - - - - - - - - - - - - - - - -
      -
      -
      -
      - -
      -

      YAML syntax¶

      -

      This is an introduction to the most common YAML constructs. For more detailed -information, see PyYAML documentation, -which this article is based on, -Chapter 2 of the YAML specification -or the Wikipedia page.

      -

      YAML is a data serialization format designed for human readability. YAML is a -recursive acronym for “YAML Ain’t Markup Language”.

      -

      YAML is similar to JSON, and in fact, JSON is a subset of YAML 1.2; but YAML has -some more advanced features and is easier to read. However, it is also more -difficult to parse (and probably somewhat slower). Data is stored in mappings -(associative arrays), sequences (lists) and scalars (single values). Data -structure hierarchy depends either on indentation (block context, similar to -Python code), or nesting of brackets and braces (flow context, similar to JSON). -YAML comments begin with # and continue until the end of line.

      -
      -

      Documents¶

      -

      A YAML stream consists of one or more documents starting with --- and -optionally ending with ... . --- can be left out for the first document.

      -

      Single document with no explicit start or end:

      -
      - Red
      -- Green
      -- Blue
      -
      -
      -

      Same document with explicit start and end:

      -
      ---
      -- Red
      -- Green
      -- Blue
      -...
      -
      -
      -

      A stream containing multiple documents:

      -
      ---
      -- Red
      -- Green
      -- Blue
      ----
      -- Linux
      -- BSD
      ----
      -answer : 42
      -
      -
      -
      -
      -

      Sequences¶

      -

      Sequences are arrays of nodes of any type, similar e.g. to Python lists. -In block context, each item begins with hyphen+space “- ”. In flow context, -sequences have syntax similar to D arrays.

      -
      #Block context
      -- Red
      -- Green
      -- Blue
      -
      -
      -
      #Flow context
      -[Red, Green, Blue]
      -
      -
      -
      #Nested
      --
      -  - Red
      -  - Green
      -  - Blue
      --
      -  - Linux
      -  - BSD
      -
      -
      -
      #Nested flow
      -[[Red, Green, Blue], [Linux, BSD]]
      -
      -
      -
      #Nested in a mapping
      -Colors:
      -  - Red
      -  - Green
      -  - Blue
      -Operating systems:
      -  - Linux
      -  - BSD
      -
      -
      -
      -
      -

      Mappings¶

      -

      Mappings are associative arrays where each key and value can be of any type, -similar e.g. to Python dictionaries. In block context, keys and values are -separated by colon+space ”: ”. In flow context, mappings have syntax similar -to D associative arrays, but with braces instead of brackets:

      -
      #Block context
      -CPU: Athlon
      -GPU: Radeon
      -OS: Linux
      -
      -
      -
      #Flow context
      -{CPU: Athlon, GPU: Radeon, OS: Linux}
      -
      -
      -
      #Nested
      -PC:
      -  CPU: Athlon
      -  GPU: Radeon
      -  OS: Debian
      -Phone:
      -  CPU: Cortex
      -  GPU: PowerVR
      -  OS: Android
      -
      -
      -
      #Nested flow
      -{PC: {CPU: Athlon, GPU: Radeon, OS: Debian},
      - Phone: {CPU: Cortex, GPU: PowerVR, OS: Android}}
      -
      -
      -
      #Nested in a sequence
      -- CPU: Athlon
      -  GPU: Radeon
      -  OS: Debian
      -- CPU: Cortex
      -  GPU: PowerVR
      -  OS: Android
      -
      -
      -

      Complex keys start with question mark+space ”? ”.

      -
      #Nested in a sequence
      -? [CPU, GPU]: [Athlon, Radeon]
      -OS: Debian
      -
      -
      -
      -
      -

      Scalars¶

      -

      Scalars are simple values such as integers, strings, timestamps and so on. -There are multiple scalar styles.

      -

      Plain scalars use no quotes, start with the first non-space and end with the -last non-space character:

      -
      scalar: Plain scalar
      -
      -
      -

      Single quoted scalars start and end with single quotes. A single quote is -represented by a pair of single quotes ‘’.

      -
      scalar: 'Single quoted scalar ending with some spaces    '
      -
      -
      -

      Double quoted scalars support C-style escape sequences.

      -
      scalar: "Double quoted scalar \n with some \\ escape sequences"
      -
      -
      -

      Block scalars are convenient for multi-line values. They start either with -| or with >. With |, the newlines in the scalar are preserved. -With >, the newlines between two non-empty lines are removed.

      -
      scalar: |
      -  Newlines are preserved
      -  First line
      -  Second line
      -
      -
      -
      scalar: >
      -  Newlines are folded
      -  This is still the first paragraph
      -
      -  This is the second
      -  paragraph
      -
      -
      -
      -
      -

      Anchors and aliases¶

      -

      Anchors and aliases can reduce size of YAML code by allowing you to define a -value once, assign an anchor to it and use alias referring to that anchor -anywhere else you need that value. It is possible to use this to create -recursive data structures and some parsers support this; however, D:YAML does -not (this might change in the future, but it is unlikely).

      -
      Person: &AD
      -  gender: male
      -  name: Arthur Dent
      -Clone: *AD
      -
      -
      -
      -
      -

      Tags¶

      -

      Tags are identifiers that specify data types of YAML nodes. Most default YAML -tags are resolved implicitly, so there is no need to specify them. D:YAML also -supports implicit resolution for custom, user specified tags.

      -

      Explicitly specified tags:

      -
      answer: !!int "42"
      -name:   !!str "Arthur Dent"
      -
      -
      -

      Implicit tags:

      -
      answer: 42        #int
      -name: Arthur Dent #string
      -
      -
      -

      This table shows D types stored in yaml.Node default YAML tags are converted to. -Some of these might change in the future (especially !!map and !!set).

      -
      dyaml.constructor

      Class that processes YAML mappings, sequences and scalars into nodes. This can be -used to add custom data types. A tutorial can be found -here. -

      -
      dyaml.dumper

      YAML dumper. -

      -
      dyaml.exception

      Exceptions thrown by D:YAML and _exception related code. -

      -
      dyaml.hacks

      Functionality that may sometimes be needed but allows unsafe or unstandard behavior, and should only be used in specific cases. -

      -
      dyaml.linebreak
      dyaml.loader

      Class used to load YAML documents. -

      -
      dyaml.node

      Node of a YAML document. Used to read YAML data once it's loaded, -and to prepare data to emit. -

      -
      dyaml.representer

      YAML node _representer. Prepares YAML nodes for output. A tutorial can be -found here.
      -

      -
      dyaml.resolver

      Implements a class that resolves YAML tags. This can be used to implicitly -resolve tags for custom data types, removing the need to explicitly -specify tags in YAML. A tutorial can be found -here.
      -

      -
      dyaml.style

      YAML node formatting styles. -

      -
      ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      YAML tagD type
      !!nullyaml.YAMLNull
      !!boolbool
      !!intlong
      !!floatreal
      !!binaryubyte[]
      !!timestampstd.datetime.SysTime
      !!map, !!omap, !!pairsyaml.Node.Pair[]
      !!seq, !!setyaml.Node[]
      !!strstring
      -
      -
      - - - - - - -
      - - - - - \ No newline at end of file diff --git a/docs/articles/spec_differences.md b/docs/articles/spec_differences.md new file mode 100644 index 0000000..93cf038 --- /dev/null +++ b/docs/articles/spec_differences.md @@ -0,0 +1,64 @@ +# Differences between D:YAML and the YAML specification + +There are some differences between D:YAML and the YAML 1.1 +specification. Some are caused by difficulty of implementation of some +features, such as multiple Unicode encodings within single stream, and +some by unnecessary restrictions or ambiguities in the specification. + +Still, D:YAML tries to be as close to the specification as possible. It +should never load documents with different meaning than according to the +specification, and documents that fail to load should be very rare (for +instance, very few files use multiple Unicode encodings). + +## List of known differences: + +Differences that can cause valid YAML documents not to load: + + - No support for byte order marks and multiple Unicode encodings in a + stream. + + - Plain scalars in flow context cannot contain `,`, `:` and `?`. This + might change with `:` in the future. See + for details. + + - The specification does not restrict characters for anchors and + aliases. This may lead to problems, for instance, the document: + + [ *alias, value ] + + can be interpteted in two ways, as: + + [ "value" ] + + and: + + [ *alias , "value" ] + + Therefore we restrict aliases and anchors to ASCII alphanumeric + characters. + + - The specification is confusing about tabs in plain scalars. We don't + use tabs in plain scalars at all. + + - There is no support for recursive data structures in DYAML. + +Other differences: + + - Indentation is ignored in the flow context, which is less + restrictive than the specification. This allows code such as: + + key: { + } + + - Indentation rules for quoted scalars are loosed: They don't need to + adhere indentation as `"` and `'` clearly mark the beginning and the + end of them. + + - We allow `_` in tag handles. + + - Right now, two mappings with the same contents but different + orderings are considered unequal, even if they are unordered + mappings. This is because all mappings are ordered in the D:YAML + implementation. This should change in future, once D associative + arrays work with variant types or a map class or struct appears in + Phobos. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..d0017ea --- /dev/null +++ b/docs/index.md @@ -0,0 +1,11 @@ +# Welcome to D:YAML documentation! + +API Documentation [online](https://dyaml.dpldocs.info/dyaml.html) + +Tutorials: + - [Getting Started](tutorials/getting_started.md) + - [Custom Types](tutorials/custom_types.md) + - [YAML Syntax](tutorials/yaml_syntax.md) + +Articles: + - [Spec Differences](articles/spec_differences.md) diff --git a/docsrc/logo128.png b/docs/logo128.png similarity index 100% rename from docsrc/logo128.png rename to docs/logo128.png diff --git a/doc/html/_static/logo210.png b/docs/logo210.png similarity index 100% rename from doc/html/_static/logo210.png rename to docs/logo210.png diff --git a/docs/tutorials/custom_types.md b/docs/tutorials/custom_types.md new file mode 100644 index 0000000..69ccace --- /dev/null +++ b/docs/tutorials/custom_types.md @@ -0,0 +1,336 @@ +# Custom YAML data types + +Sometimes you need to serialize complex data types such as classes. To +do this you could use plain nodes such as mappings with classes' fields. +YAML also supports custom types with identifiers called *tags*. That is +the topic of this tutorial. + +Each YAML node has a tag specifying its type. For instance: strings use +the tag `tag:yaml.org,2002:str`. Tags of most default types are +*implicitly resolved* during parsing - you don't need to specify tag for +each float, integer, etc. D:YAML can also implicitly resolve custom +tags, as we will show later. + +## Constructor + +D:YAML uses the [Constructor](https://dyaml.dpldocs.info/dyaml.constructor.Constructor.html) +class to process each node to hold data type corresponding to its tag. +*Constructor* stores functions to process each supported tag. These are +supplied by the user using the *addConstructorXXX()* methods, where +*XXX* is *Scalar*, *Sequence* or *Mapping*. *Constructor* is then passed +to *Loader*, which parses YAML input. + +Structs and classes must implement the *opCmp()* operator for YAML +support. This is used for duplicate detection in mappings, sorting and +equality comparisons of nodes. The signature of the operator that must +be implemented is `const int opCmp(ref const MyStruct s)` for structs +where *MyStruct* is the struct type, and `int opCmp(Object o)` for +classes. Note that the class *opCmp()* should not alter the compared +values - it is not const for compatibility reasons. + +We will implement support for an RGB color type. It is implemented as +the following struct: + +```D +struct Color +{ + ubyte red; + ubyte green; + ubyte blue; + + const int opCmp(ref const Color c) + { + if(red != c.red) {return red - c.red;} + if(green != c.green){return green - c.green;} + if(blue != c.blue) {return blue - c.blue;} + return 0; + } +} +``` + +First, we need a function to construct our data type. The function will +take a reference to *Node* to construct from. The node is guaranteed to +contain either a *string*, an array of *Node* or of *Node.Pair*, +depending on whether we're constructing our value from a scalar, +sequence, or mapping, respectively. If this function throws any +exception, D:YAML handles it and adds its message to a *YAMLException* +that will be thrown when loading the file. + +In this tutorial, we have functions to construct a color from a scalar, +using CSS-like format, RRGGBB, or from a mapping, where we use the +following format: {r:RRR, g:GGG, b:BBB} . Code of these functions: + +```D +Color constructColorScalar(ref Node node) +{ + string value = node.as!string; + + if(value.length != 6) + { + throw new Exception("Invalid color: " ~ value); + } + //We don't need to check for uppercase chars this way. + value = value.toLower(); + + //Get value of a hex digit. + uint hex(char c) + { + import std.ascii; + if(!std.ascii.isHexDigit(c)) + { + throw new Exception("Invalid color: " ~ value); + } + + if(std.ascii.isDigit(c)) + { + return c - '0'; + } + return c - 'a' + 10; + } + + Color result; + result.red = cast(ubyte)(16 * hex(value[0]) + hex(value[1])); + result.green = cast(ubyte)(16 * hex(value[2]) + hex(value[3])); + result.blue = cast(ubyte)(16 * hex(value[4]) + hex(value[5])); + + return result; +} + +Color constructColorMapping(ref Node node) +{ + ubyte r,g,b; + + //Might throw if a value is missing is not an integer, or is out of range. + //If this happens, D:YAML will handle the exception and use its message + //in a YAMLException thrown when loading. + r = node["r"].as!ubyte; + g = node["g"].as!ubyte; + b = node["b"].as!ubyte; + + return Color(cast(ubyte)r, cast(ubyte)g, cast(ubyte)b); +} +``` + +Next, we need some YAML data using our new tag. Create a file called +`input.yaml` with the following contents: + +```YAML +scalar-red: !color FF0000 +scalar-orange: !color FFFF00 +mapping-red: !color-mapping {r: 255, g: 0, b: 0} +mapping-orange: + !color-mapping + r: 255 + g: 255 + b: 0 +``` + +You can see that we're using tag `!color` for scalar colors, and +`!color-mapping` for colors expressed as mappings. + +Finally, the code to put it all together: + +```D +void main() +{ + auto red = Color(255, 0, 0); + auto orange = Color(255, 255, 0); + + try + { + auto constructor = new Constructor; + //both functions handle the same tag, but one handles scalar, one mapping. + constructor.addConstructorScalar("!color", &constructColorScalar); + constructor.addConstructorMapping("!color-mapping", &constructColorMapping); + + auto loader = Loader("input.yaml"); + loader.constructor = constructor; + + auto root = loader.load(); + + if(root["scalar-red"].as!Color == red && + root["mapping-red"].as!Color == red && + root["scalar-orange"].as!Color == orange && + root["mapping-orange"].as!Color == orange) + { + writeln("SUCCESS"); + return; + } + } + catch(YAMLException e) + { + writeln(e.msg); + } + + writeln("FAILURE"); +} +``` + +First, we create a *Constructor* and pass functions to handle the +`!color` and `!color-mapping` tag. We construct a *Loader* and pass the +*Constructor* to it. We then load the YAML document, and finally, read +the colors to test if they were loaded as expected. + +You can find the source code for what we've done so far in the +`examples/constructor` directory in the D:YAML package. + +## Resolver + +Specifying tag for every color can be tedious. D:YAML can implicitly +resolve scalar tags using regular expressions. This is how default types +are resolved. We will use the [Resolver](../api/dyaml.resolver.html) +class to add implicit tag resolution for the Color data type (in its +scalar form). + +We use the *addImplicitResolver()* method of *Resolver*, passing the +tag, regular expression the scalar must match to resolve to this tag, +and a string of possible starting characters of the scalar. Then we pass +the *Resolver* to *Loader*. + +Note that resolvers added first override ones added later. If no +resolver matches a scalar, YAML string tag is used. Therefore our custom +values must not be resolvable as any non-string YAML data type. + +Add this to your code to add implicit resolution of `!color`. + +```D +//code from the previous example... + +auto resolver = new Resolver; +import std.regex; +resolver.addImplicitResolver("!color", std.regex.regex("[0-9a-fA-F]{6}"), + "0123456789abcdefABCDEF"); + +auto loader = Loader("input.yaml"); + +loader.constructor = constructor; +loader.resolver = resolver; + +//code from the previous example... +``` + +Now, change contents of `input.yaml` to this: + +```YAML +scalar-red: FF0000 +scalar-orange: FFFF00 +mapping-red: !color-mapping {r: 255, g: 0, b: 0} +mapping-orange: + !color-mapping + r: 255 + g: 255 + b: 0 +``` + +We no longer need to specify the tag for scalar color values. Compile +and test the example. If everything went as expected, it should report +success. + +You can find the complete code in the `examples/resolver` directory in +the D:YAML package. + +## Representer + +Now that you can load custom data types, it might be good to know how to +dump them. D:YAML uses the [Representer](https://dyaml.dpldocs.info/dyaml.representer.Representer.html) +class for this purpose. + +*Representer* processes YAML nodes into plain mapping, sequence or +scalar nodes ready for output. Just like with *Constructor*, this is +done by user specified functions. These functions take references to a +node to process and to the *Representer*, and return the processed node. + +Representer functions can be added with the *addRepresenter()* method. +The *Representer* is then passed to *Dumper*, which dumps YAML +documents. Only one function per type can be specified. This is asserted +in *addRepresenter()* preconditions. Default YAML types already have +representer functions specified, but you can disable them by +constructing *Representer* with the *useDefaultRepresenters* parameter +set to false. + +By default, tags are explicitly output for all non-default types. To +make dumped tags implicit, you can pass a *Resolver* that will resolve +them implicitly. Of course, you will need to use an identical *Resolver* +when loading the output. + +With the following code, we will add support for dumping the our Color +type. + +```D +Node representColor(ref Node node, Representer representer) +{ + //The node is guaranteed to be Color as we add representer for Color. + Color color = node.as!Color; + + static immutable hex = "0123456789ABCDEF"; + + //Using the color format from the Constructor example. + string scalar; + foreach(channel; [color.red, color.green, color.blue]) + { + scalar ~= hex[channel / 16]; + scalar ~= hex[channel % 16]; + } + + //Representing as a scalar, with custom tag to specify this data type. + return representer.representScalar("!color", scalar); +} +``` + +First we get the *Color* from the node. Then we convert it to a string +with the CSS-like format we've used before. Finally, we use the +*representScalar()* method of *Representer* to get a scalar node ready +for output. There are corresponding *representMapping()* and +*representSequence()* methods as well, with examples in the [Resolver +API documentation](https://dyaml.dpldocs.info/dyaml.resolver.html). + +Since a type can only have one representer function, we don't dump +*Color* both in the scalar and mapping formats we've used before. +However, you can decide to dump the node with different formats/tags in +the representer function itself. E.g. you could dump the Color as a +mapping based on some arbitrary condition, such as the color being +white. + +```D +void main() +{ + try + { + auto representer = new Representer; + representer.addRepresenter!Color(&representColor); + + auto resolver = new Resolver; + import std.regex; + resolver.addImplicitResolver("!color", std.regex.regex("[0-9a-fA-F]{6}"), + "0123456789abcdefABCDEF"); + + auto dumper = Dumper("output.yaml"); + dumper.representer = representer; + dumper.resolver = resolver; + + auto document = Node([Color(255, 0, 0), + Color(0, 255, 0), + Color(0, 0, 255)]); + + dumper.dump(document); + } + catch(YAMLException e) + { + writeln(e.msg); + } +} +``` + +We construct a new *Representer*, and specify a representer function for +the *Color* (the template argument) type. We also construct a +*Resolver*, same as in the previous section, so the `!color` tag will be +implicit. Of course, identical *Resolver* would then have to be used +when loading the file. You don't need to do this if you want the tag to +be explicit. + +We construct a *Dumper* to file `output.yaml` and pass the *Representer* +and *Resolver* to it. Then, we create a simple node containing a +sequence of colors and finally, we dump it. + +Source code for this section can be found in the `examples/representer` +directory of the D:YAML package. diff --git a/docs/tutorials/getting_started.md b/docs/tutorials/getting_started.md new file mode 100644 index 0000000..4441b70 --- /dev/null +++ b/docs/tutorials/getting_started.md @@ -0,0 +1,164 @@ +# Getting started + +Welcome to D:YAML\! D:YAML is a +[YAML](http://en.wikipedia.org/wiki/YAML) parser library for the [D +programming language](http://dlang.org). This tutorial will explain how +to set D:YAML up and use it in your projects. + +This is meant to be the **simplest possible** introduction to D:YAML. +Some of this information might already be known to you. Only basic usage +is covered. + +## Setting up + +### Install the DMD compiler + +Digital Mars D compiler, or DMD, is the most commonly used D compiler. +You can find its newest version [here](http://dlang.org/download.html). +Download the version of DMD for your operating system and install it. + +Note: Other D compilers exist, such as [GDC](http://gdcproject.org/) and +[LDC](https://github.com/ldc-developers/ldc). + +### Install dub + +[dub](http://code.dlang.org/about) is a build system and package manager +for D. It is the standard way to manage D projects and their +dependencies, compilation and so on. + +DMD may include DUB in future releases, but at this point we need to +install it separately. See [installation +instructions](https://github.com/D-Programming-Language/dub#installation). + +## Your first D:YAML project + +Create a directory for your project and in that directory, create a new +file named `input.yaml` and paste this code into the file: + +```YAML +Hello World : [Hello, World] +Answer: 42 +``` + +This will serve as input for our example. + +Now we need to parse it. Create a new file with name `main.d`. Paste +following code into the file: + +```D +import std.stdio; +import yaml; + +void main() +{ + //Read the input. + Node root = Loader("input.yaml").load(); + + //Display the data read. + foreach(string word; root["Hello World"]) + { + writeln(word); + } + writeln("The answer is ", root["Answer"].as!int); + + //Dump the loaded document to output.yaml. + Dumper("output.yaml").dump(root); +} +``` + +### Explanation of the code + +First, we import the *dyaml.all* module. This is the only D:YAML module +you need to import - it automatically imports all needed modules. + +Next we load the file using the *Loader.load()* method. *Loader* is a +struct used for parsing YAML documents. The *load()* method loads the +file as **one** YAML document, or throws *YAMLException*, D:YAML +exception type, if the file could not be parsed or contains more than +one document. Note that we don't do any error checking here in order to +keep the example as simple as possible. + +*Node* represents a node in a YAML document. It can be a sequence +(array), mapping (associative array) or a scalar (value). Here the root +node is a mapping, and we use the index operator to get subnodes with +keys "Hello World" and "Answer". We iterate over the former, as it is a +sequence, and use the *Node.as()* method on the latter to read its value +as an integer. + +You can iterate over a mapping or sequence as if it was an associative +or normal array, respectively. If you try to iterate over a scalar, it +will throw a *YAMLException*. + +You can iterate using *Node* as the iterated type, or specify the type +iterated nodes are expected to have. D:YAML will automatically convert +to that type if possible. Here we specify the *string* type, so we +iterate over the "Hello World" sequence as an array of strings. If it is +not possible to convert to iterated type, a *YAMLException* is thrown. +For instance, if we specified *int* here, we would get an error, as +"Hello" cannot be converted to an integer. + +The *Node.as()* method is used to read value of a scalar node as +specified type. If the scalar does not have the specified type, D:YAML +will try to convert it, throwing *YAMLException* if not possible. + +Finally we dump the document we just read to `output.yaml` with the +*Dumper.dump()* method. *Dumper* is a struct used to dump YAML +documents. The *dump()* method writes one or more documents to a file, +throwing *YAMLException* if the file could not be written to. + +D:YAML tries to preserve style information in documents so e.g. `[Hello, +World]` is not turned into: + +```YAML +- Hello +- World +``` + +However, comments are not preserved and neither are any extra formatting +whitespace that doesn't affect the meaning of YAML contents. + +### Compiling + +We're going to use dub, which we installed at the beginning, to compile +our project. + +Create a file called `dub.json` with the following contents: + +```JSON +{ + "name": "getting-started", + "targetType": "executable", + "sourceFiles": ["main.d"], + "mainSourceFile": "main.d", + "dependencies": + { + "dyaml": { "version" : "~>0.5.0" }, + }, +} +``` + +This file tells dub that we're building an executable called +`getting-started` from a D source file `main.d`, and that our project +depends on D:YAML 0.5.0 or any newer, bugfix release of D:YAML 0.5 . DUB +will automatically find and download the correct version of D:YAML when +the project is built. + +Now run the following command in your project's directory: + + dub build + +dub will automatically download D:YAML and compile it, and then then it +will compile our program. This will generate an executable called +`getting-started` or `getting-started.exe` in your directory. When you +run it, it should produce the following output: + + Hello + World + The answer is 42 + +### Conclusion + +You should now have a basic idea about how to use D:YAML. To learn more, +look at the [API documentation](https://dyaml.dpldocs.info/dyaml.html) and other tutorials. +You can find code for this example in the `example/getting_started` +directory in the package. diff --git a/doc/html/_sources/tutorials/yaml_syntax.txt b/docs/tutorials/yaml_syntax.md similarity index 67% rename from doc/html/_sources/tutorials/yaml_syntax.txt rename to docs/tutorials/yaml_syntax.md index 315b298..84a5665 100644 --- a/doc/html/_sources/tutorials/yaml_syntax.txt +++ b/docs/tutorials/yaml_syntax.md @@ -1,54 +1,45 @@ -=========== -YAML syntax -=========== +# YAML syntax -This is an introduction to the most common YAML constructs. For more detailed -information, see `PyYAML documentation `_, +This is an introduction to the most common YAML constructs. For more detailed +information, see [PyYAML documentation](http://pyyaml.org/wiki/PyYAMLDocumentation), which this article is based on, -`Chapter 2 of the YAML specification `_ -or the `Wikipedia page `_. +[Chapter 2 of the YAML specification](http://yaml.org/spec/1.1/#id857168) +or the [Wikipedia page](http://en.wikipedia.org/wiki/YAML). -YAML is a data serialization format designed for human readability. YAML is a +YAML is a data serialization format designed for human readability. YAML is a recursive acronym for "YAML Ain't Markup Language". YAML is similar to JSON, and in fact, JSON is a subset of YAML 1.2; but YAML has some more advanced features and is easier to read. However, it is also more difficult to parse (and probably somewhat slower). Data is stored in mappings -(associative arrays), sequences (lists) and scalars (single values). Data +(associative arrays), sequences (lists) and scalars (single values). Data structure hierarchy depends either on indentation (block context, similar to Python code), or nesting of brackets and braces (flow context, similar to JSON). -YAML comments begin with ``#`` and continue until the end of line. +YAML comments begin with `#` and continue until the end of line. ---------- -Documents ---------- +## Documents -A YAML stream consists of one or more documents starting with ``---`` and -optionally ending with ``...`` . ``---`` can be left out for the first document. +A YAML stream consists of one or more documents starting with `---` and +optionally ending with `...` . `---` can be left out for the first document. Single document with no explicit start or end: -.. code-block:: yaml - +``` - Red - Green - Blue - +``` Same document with explicit start and end: - -.. code-block:: yaml - +``` --- - Red - Green - Blue ... - +``` A stream containing multiple documents: - -.. code-block:: yaml - +``` --- - Red - Green @@ -58,30 +49,25 @@ A stream containing multiple documents: - BSD --- answer : 42 - +``` ---------- -Sequences ---------- +## Sequences Sequences are arrays of nodes of any type, similar e.g. to Python lists. In block context, each item begins with hyphen+space "- ". In flow context, sequences have syntax similar to D arrays. -.. code-block:: yaml - +``` #Block context - Red - Green - Blue - -.. code-block:: yaml - +``` +``` #Flow context [Red, Green, Blue] - -.. code-block:: yaml - +``` +``` #Nested - - Red @@ -90,14 +76,12 @@ sequences have syntax similar to D arrays. - - Linux - BSD - -.. code-block:: yaml - +``` +``` #Nested flow [[Red, Green, Blue], [Linux, BSD]] - -.. code-block:: yaml - +``` +``` #Nested in a mapping Colors: - Red @@ -106,31 +90,28 @@ sequences have syntax similar to D arrays. Operating systems: - Linux - BSD +``` +## Mappings --------- -Mappings --------- - -Mappings are associative arrays where each key and value can be of any type, +Mappings are associative arrays where each key and value can be of any type, similar e.g. to Python dictionaries. In block context, keys and values are separated by colon+space ": ". In flow context, mappings have syntax similar to D associative arrays, but with braces instead of brackets: -.. code-block:: yaml - +``` #Block context CPU: Athlon GPU: Radeon OS: Linux -.. code-block:: yaml - +``` +``` #Flow context {CPU: Athlon, GPU: Radeon, OS: Linux} -.. code-block:: yaml - +``` +``` #Nested PC: CPU: Athlon @@ -141,14 +122,13 @@ to D associative arrays, but with braces instead of brackets: GPU: PowerVR OS: Android -.. code-block:: yaml - +``` +``` #Nested flow - {PC: {CPU: Athlon, GPU: Radeon, OS: Debian}, + {PC: {CPU: Athlon, GPU: Radeon, OS: Debian}, Phone: {CPU: Cortex, GPU: PowerVR, OS: Android}} - -.. code-block:: yaml - +``` +``` #Nested in a sequence - CPU: Athlon GPU: Radeon @@ -156,85 +136,76 @@ to D associative arrays, but with braces instead of brackets: - CPU: Cortex GPU: PowerVR OS: Android +``` Complex keys start with question mark+space "? ". -.. code-block:: yaml - +``` #Nested in a sequence ? [CPU, GPU]: [Athlon, Radeon] OS: Debian +``` - -------- -Scalars -------- +## Scalars Scalars are simple values such as integers, strings, timestamps and so on. There are multiple scalar styles. -Plain scalars use no quotes, start with the first non-space and end with the +Plain scalars use no quotes, start with the first non-space and end with the last non-space character: -.. code-block:: yaml +``` + scalar: Plain scalar +``` - scalar: Plain scalar - -Single quoted scalars start and end with single quotes. A single quote is +Single quoted scalars start and end with single quotes. A single quote is represented by a pair of single quotes ''. -.. code-block:: yaml - +``` scalar: 'Single quoted scalar ending with some spaces ' +``` Double quoted scalars support C-style escape sequences. -.. code-block:: yaml - +``` scalar: "Double quoted scalar \n with some \\ escape sequences" +``` Block scalars are convenient for multi-line values. They start either with -``|`` or with ``>``. With ``|``, the newlines in the scalar are preserved. -With ``>``, the newlines between two non-empty lines are removed. - -.. code-block:: yaml +`|` or with `>`. With `|`, the newlines in the scalar are preserved. +With `>`, the newlines between two non-empty lines are removed. +``` scalar: | Newlines are preserved First line - Second line - -.. code-block:: yaml - + Second line +``` +``` scalar: > Newlines are folded This is still the first paragraph This is the second paragraph +``` - -------------------- -Anchors and aliases -------------------- +## Anchors and aliases Anchors and aliases can reduce size of YAML code by allowing you to define a -value once, assign an anchor to it and use alias referring to that anchor -anywhere else you need that value. It is possible to use this to create +value once, assign an anchor to it and use alias referring to that anchor +anywhere else you need that value. It is possible to use this to create recursive data structures and some parsers support this; however, D:YAML does not (this might change in the future, but it is unlikely). -.. code-block:: yaml - +``` Person: &AD gender: male name: Arthur Dent Clone: *AD +``` - ----- -Tags ----- +## Tags Tags are identifiers that specify data types of YAML nodes. Most default YAML tags are resolved implicitly, so there is no need to specify them. D:YAML also @@ -242,31 +213,29 @@ supports implicit resolution for custom, user specified tags. Explicitly specified tags: -.. code-block:: yaml - +``` answer: !!int "42" name: !!str "Arthur Dent" +``` Implicit tags: -.. code-block:: yaml - +``` answer: 42 #int name: Arthur Dent #string +``` This table shows D types stored in *yaml.Node* default YAML tags are converted to. Some of these might change in the future (especially !!map and !!set). -====================== ==================== -YAML tag D type -====================== ==================== -!!null yaml.YAMLNull -!!bool bool -!!int long -!!float real -!!binary ubyte[] -!!timestamp std.datetime.SysTime -!!map, !!omap, !!pairs yaml.Node.Pair[] -!!seq, !!set yaml.Node[] -!!str string -====================== ==================== +|YAML tag |D type | +|-----------------------|---------------------| +|!!null |yaml.YAMLNull | +|!!bool |bool | +|!!int |long | +|!!float |real | +|!!binary |ubyte[] | +|!!timestamp |std.datetime.SysTime | +|!!map, !!omap, !!pairs |yaml.Node.Pair[] | +|!!seq, !!set |yaml.Node[] | +|!!str |string | diff --git a/docsrc/Makefile b/docsrc/Makefile deleted file mode 100644 index bd362aa..0000000 --- a/docsrc/Makefile +++ /dev/null @@ -1,139 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = ../doc - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean ddoc_html html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -################################################################################ -# DDOC GENERATION CODE -################################################################################ -ddoc_html : - cd ../ && hmod -################################################################################ -# DDOC GENERATION CODE END -################################################################################ - -html: ddoc_html - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/DYAML.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/DYAML.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/DYAML" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/DYAML" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - make -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." diff --git a/docsrc/articles/spec_differences.rst b/docsrc/articles/spec_differences.rst deleted file mode 100644 index 00ed069..0000000 --- a/docsrc/articles/spec_differences.rst +++ /dev/null @@ -1,61 +0,0 @@ -.. highlight:: yaml - -===================================================== -Differences between D:YAML and the YAML specification -===================================================== - -There are some differences between D:YAML and the YAML 1.1 specification. Some -are caused by difficulty of implementation of some features, such as multiple -Unicode encodings within single stream, and some by unnecessary restrictions or -ambiguities in the specification. - -Still, D:YAML tries to be as close to the specification as possible. It should -never load documents with different meaning than according to the specification, -and documents that fail to load should be very rare (for instance, very few -files use multiple Unicode encodings). - - --------------------------- -List of known differences: --------------------------- - -Differences that can cause valid YAML documents not to load: - -* No support for byte order marks and multiple Unicode encodings in a stream. -* Plain scalars in flow context cannot contain ``,``, ``:`` and ``?``. - This might change with ``:`` in the future. - See http://pyyaml.org/wiki/YAMLColonInFlowContext for details. -* The specification does not restrict characters for anchors and - aliases. This may lead to problems, for instance, the document:: - - [ *alias, value ] - - can be interpteted in two ways, as:: - - [ "value" ] - - and:: - - [ *alias , "value" ] - - Therefore we restrict aliases and anchors to ASCII alphanumeric characters. -* The specification is confusing about tabs in plain scalars. We don't use tabs - in plain scalars at all. -* There is no support for recursive data structures in DYAML. - -Other differences: - -* Indentation is ignored in the flow context, which is less restrictive than the - specification. This allows code such as:: - - key: { - } - -* Indentation rules for quoted scalars are loosed: They don't need to adhere - indentation as ``"`` and ``'`` clearly mark the beginning and the end of them. -* We allow ``_`` in tag handles. -* Right now, two mappings with the same contents but different orderings are - considered unequal, even if they are unordered mappings. This is because all - mappings are ordered in the D:YAML implementation. This should change in - future, once D associative arrays work with variant types or a map class or - struct appears in Phobos. diff --git a/docsrc/autoddoc_index.dd b/docsrc/autoddoc_index.dd deleted file mode 100644 index bef0e56..0000000 --- a/docsrc/autoddoc_index.dd +++ /dev/null @@ -1,18 +0,0 @@ -Ddoc - -$(P -This is the complete API documentation for D:YAML. It describes all classes, methods and -global functions provided by the library. This is not the best place to start learning; -it should serve as a reference when detailed information about D:YAML functionality is -needed. To get started with D:YAML see $(LINK2 ../index.html, tutorials). -) - -$(P -Although each D:YAML module is documented on a separate page, you don't need to import -individual modules. Importing the $(I yaml) module automatically imports all D:YAML -functionality. -) - -Macros: - TITLE=$(PROJECT_NAME) $(PROJECT_VERSION) API documentation - diff --git a/docsrc/conf.py b/docsrc/conf.py deleted file mode 100644 index f10054c..0000000 --- a/docsrc/conf.py +++ /dev/null @@ -1,236 +0,0 @@ -# -*- coding: utf-8 -*- -# -# D:YAML documentation build configuration file, created by -# sphinx-quickstart on Sun Jul 24 15:16:35 2011. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys, os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = [] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'D:YAML' -copyright = (u'2011-2014, Ferdinand Majerech. Based on PyYAML http://www.pyyaml.org ' - 'by Kirill Simonov') - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '0.5' -# The full version, including alpha/beta/rc tags. -release = '0.5' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'default' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -html_theme_options =\ -{ - "footerbgcolor" : "#1f252b", - "footertextcolor" : "#ccc", - "sidebarbgcolor" : "#1f252b", - "sidebarlinkcolor" : "#ddd", - "relbarbgcolor" : "#303333", - "relbartextcolor" : "#ccc", - "bgcolor" : "#f6f6f6", - "textcolor" : "black", - "linkcolor" : "#006", - "visitedlinkcolor" : "#606", - "headbgcolor" : "#f6f6f6", - "headtextcolor" : "#633", - "headlinkcolor" : "#006", - "codebgcolor" : "fcfcfc", - "codetextcolor" : "000066", - "bodyfont" : "Verdana, \"Deja Vu\", \"Bitstream Vera Sans\", sans-serif", - "headfont" : "Georgia, \"Times New Roman\", Times, serif" -} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -html_logo = "logo210.png" - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -html_sidebars = {"**" : ["localtoc.html"]} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -html_domain_indices = False - -# If false, no index is generated. -html_use_index = False - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'DYAMLdoc' - - -# -- Options for LaTeX output -------------------------------------------------- - -# The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' - -# The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', 'DYAML.tex', u'D:YAML Documentation', - u'Ferdinand Majerech', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Additional stuff for the LaTeX preamble. -#latex_preamble = '' - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'dyaml', u'D:YAML Documentation', - [u'Ferdinand Majerech'], 1) -] diff --git a/docsrc/index.rst b/docsrc/index.rst deleted file mode 100644 index da665bf..0000000 --- a/docsrc/index.rst +++ /dev/null @@ -1,21 +0,0 @@ -================================ -Welcome to D:YAML documentation! -================================ - -API Documentation `(online) `_ `(local copy) `_ - -Tutorials: - -.. toctree:: - :maxdepth: 2 - - tutorials/getting_started - tutorials/custom_types - tutorials/yaml_syntax - -Articles: - -.. toctree:: - :maxdepth: 2 - - articles/spec_differences diff --git a/docsrc/logo210.png b/docsrc/logo210.png deleted file mode 100644 index 66bef665fd261c35ce22ba34448cbaa77d26bb10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5329 zcmZWtXHXMB(~crYZ_*JEhyv1U=t%D!DMorP0@6Yc0!oo0K|vsh1f&I|cWDA*2+~6j z9TAXTA}zdm|9n5bcV~9@ZszW0XLoORo=q|_(xxJ3BL@HgRJuAEW&}M>U`gO^ zX(gyTfoi%Iqy&m2bx9=b$^3O}0s#OD`~UJS;E?5i&$0$-S_hf?xdlNS16%rw z*E`VJ(ce|XFTg!-Pmv7(U@+3vP_+n!@8*YvT3}|op}1k#kV_6qZ3g({0j(4L6FR|` zMlV5+Dn_IwgYaW(8OH33M*HSc<*5oyjqca0mbDJH6(0RwD*R@8vzaxIfWR^#Zb9yO zAzUPMXed7-GY92DPyGE_iH62KYF~~ImmfGBktL|AxLZEc%&Sf+PR#w|6$@YdPfb!u zwFmKln=WeKhLz+SsMManXOTa0>%*TTx+Xu^0j_e1uIbZ`${6O@}j|WIGL^l18VuNDyb?sFMG<8 zhKlM%ZYv{D&Xqo&o^d@1sM|M?my{05 z{OIweqJk_N4Z?c*m?YMtt%YP`1SG_$9R?7Z+i)G&XJfARLJbm<=pnb9l$7}8GJ_}1 z9dqib=8WZDmm$)by>#jQP8V+aUJm}b&N67({FfC=*b1xSg_7O`Pj3&Cdow<6l$4b6 z^jv2O}6I1}rtM-4KdbbY`_SAcO~JsUR~=9n)jMj8h! zoS-TEhX+-Xk&r0G6zcpx`J}oo5d0#<;P>cL`sB}z=f%HCV_&I`j3F7e>dJ9q4t=eT zYaN^*!_!81C33~ZmTF*7zf5TE&2$%wg9EK#hhBz!uS?TA_+s|@NhctM1xmJ7-TwM$ zH;;ezO72vfreKwx4PFj^n#_l9G&NgNN5}Zo+Ekh>|1lRuqYQZFIl>eU+dZ@W@C!`4Y&P~F+y*z{3BNir`Popksid|NXdE2DDSOf;U=ewu{C)nK zyE?Fs-{tM=Ijko4+NEs}8S~ZAOMsr`w;?=Zb=J9hj$%Lz9q=j zt=Kyx;!SIBkI?zXqh@%M?pS3%NhrjrL`AS2#j2e+XB zK^1(AdO;-V6SLp6Ka~G0(Lj*?a1J3QqvH`K|F*pF*VEIJVwwHln@g|X z%SJd21%R%%xu2)<0a#8mBXqeWMJghhuU5r>oL7W+_|G5&*K=zj^Y6^VenT#Tm*uT<7t)Gel*beBuo|-qSz7w*ULVx!v$E98DfRGDiIY3gH!i>2%Tk~ zl3UnAq}}G95-Ng0>n36m(K8Khd8uzX?aMAeHy7?LY}>shTtOQ^7zqvLbv^c>-`lSp){1Z| zFT9B!5CRM5Rl8A34_n>@x>Da-ertSV)W3AYWZE#*V$$%>^K>yaqj~8yij7$WY(1{M z!zdsO6(SOCN9aqC|5i+N8Rw!lMDJip?y6^e_pkgGKgVldfrpc2Cp0=WYS#KpSlbK_ zzcvOu$P+e*JZhyrBE%A=a9s*$VKc7T%BInJpOdBXrgM!CFdDQjNL~;HOHPkWcGn+q z_!Df-d?uW zwOMT%>+KXBTeUDe#&#lC1hKIa*=oS}>E0jOo8`ULwa3sx>b0Z2d~Llnzuw(3Lw0_f z({K%&v*>HqfT|HitfiIumR><)t?vzI=kpz~juA>O8-EYM1uO9s3Td~q)(JK}a4V0M z%OCkbKZ0_Zc@MUL5=xV4GlY3LulY+*uMo7&ncwVAuJL3Mf6wJerrBxoK6(N zh*kKPli1IypTjq0l0QW}JH-|F3$Sjcr+-v|P7!(KunD3CZsx%j%zGwl5y#;$f){Aj zMlGz67n$QH#|c22RkzZd<5gGRkdH5O5#Yet)&nxaom)#37abqCD&E|B@mzLDhMhP1 zFF58@3RJs)>e}|N;zgd^*%Fkl_Ds%FUJKNLd37ghj4umSQu6^YujeQ0 z7=@|N^oT^eBz&r2D&C!K${`3u$`S5n8=0w|b{P((_?yOn!CKg}bGuHCm_0iLLv0op47FxidNJZj8M`7-3nUTu1Zhp|esb^GhW?g-V6az`X6R&+Bt9 zU{TvmMFeluhWvif_U*r!6g^>qv0vX$1+We39ZG>5oA}LDnZdMFl$&hi}_oR=jYcHv}3eof6 zKOJX3IUn@oRJ2pplrribwmfYfZQ*^nhpm4KIs4U|8FjpCx`ED-iNm6^{(LHb7!@?? zRJxl1c&vQEUbGKo(6*G(p(iwmb^E~m+ud1XR#-8Lp4N=4ZN%RYofDjLB+;FyiM|1Dm&46wkx&k0`3DhY5s9?)Ne<|4pU- z8eJN9wT)PAt!cOtCv=@(AGiJG?_u&ph{(hvt3t9lV?_h6(Y&W#eT)2pxT!H{5 zji+6a;g?jVn;nr`NIX%9Gl~T#T+!q^-tV1m^yjxWTl}>8;W)8Ds1qH)X8MM-9-Ahx zh!fv`b7V#xJz5L8?V)I)3bqw~DNtUVGN>+*6OP3tQ5{1_SO1d1RpkC5nq;H{{0DxU zTl4(P2}$>|Tf|-H+YYwlFb)?c6b*Al_jWh6pA9bB=uS8;;nh(tZU@E7hcJYu@iw() zQ)$UevzT|&tUo0>t@FU0^bJp=I?PohKRn%6VHBUbbMPjom}0qwZ_dWnhmb+6au|pZ zVk4CC16TE)8QwV$WY+8l0^}@pyy;Vo3qE|siQ4gc>mg^M=$l*sEm03uw-LB&)x};* ziP6mEpziPwb?1jM={hY)gCrg(SW(H_*%*!8MBSHYwdyYLQWB~@uBn_#z4UJD51yg% z;}+=$4GEp2k&eQC88f(CKU^FTy)Do1FFdPzgEu%L*>vG+VgU8GMnoK{!+(s6=S+)G zP;$e}L>C^r3}syP@jVJWG=xZq@flNjE01;0si>sWyWOh&US+aoe_U~@*2=D>rF=CP zETwRd5Cv3Tt*zBlJRS_c`Quk352x(fk_izCy^lj_nQ5(;9m92c+W>Y}?Co}uS%+O` z9AuudCTjf&`@yicWliM$Uy6gnX80I-lH%?LIVNCZseX~`K5FR`$t)8OZ@p9LcNDO| z+cN6QgT$u2?|2crD{Mz%<08_8*6Ple7rq-=z6=`FUfBDZkuXTR?(uQqNp9hp+4Tl@r z+bu+^k*Of9vx(PH0pn=#^!>ZTx1Z;*D7skBRMa%~;}+IZIo(R1k@{r#Fdmo|F{jf; zuAGez2#G%yY3tguQD~^=Q{ZoLk^m_lu`IPZXBj0uV>3P&v0{RR>lPcvMwl5q|KQ=I zm5lOh+qY?;sCl(wQ~4L_+WIZlC|6_=}E&|M-R8Q4sMY*>o^zQ7EOgIneBe52F$ zDgq=bVL^fRh1qoev8fHt6U$*11bwjncjH9s^rPp&D<*R9(8^qsynNt%UBeEKy{Q=whXBrrGVt$+R-0+?+m2y|i9&y&B z()L$&u%uu^a#YRV%l-3R(x%0K{vNO@XC{Y7^tV^zP`R9E#Gb4EZ_h-rQ4?NPC={MLPybP-7q;R9D>GAa&NaeTpKXT36 zp~IgcqeuqNwRxyAMpH~yU(UNKgn%!T{s(3LFYb(?>@ zxm74`wi)D+PU%DZQ&u#z8(CP$*gXH|10`ics3Q64>5Gab`fARenTp5bGhxS*>Cee- z4WxtCLbRb%echiyYlr+6Po;@BwdsL!r^zSOqwlh^wR<`wF)1S1*}Vzu<<)*)8Zpi+ z4=9J_<7pe3!po}tHjve9!A)_%gp_`eiWgup2F016R+(0X2RrL0=GICSh{2s^76EV?Y$= z%dHBV&_GPY$3G!;{WV0629ApUG$Nk*=_cvC`D-orsi55E5jto}ktnX7ZWc&a;J~wX zUr@K)?P^-FvZquMP^M%S^M5m=UUxBOxMJkTw(HA7Dd|gJOS%|ZdC)6%D-8$L>6@-@ z=F*qQ<0@(i(#p{DOp zpT~Wn&SMyn2%@Quj@La=6 V;5$Fq2(Xkux|&8BU)3C9{{xEKa&Z6v diff --git a/docsrc/tutorials/custom_types.rst b/docsrc/tutorials/custom_types.rst deleted file mode 100644 index feb5f86..0000000 --- a/docsrc/tutorials/custom_types.rst +++ /dev/null @@ -1,337 +0,0 @@ -====================== -Custom YAML data types -====================== - -Sometimes you need to serialize complex data types such as classes. To do this -you could use plain nodes such as mappings with classes' fields. YAML also -supports custom types with identifiers called *tags*. That is the topic of this -tutorial. - -Each YAML node has a tag specifying its type. For instance: strings use the tag -``tag:yaml.org,2002:str``. Tags of most default types are *implicitly resolved* -during parsing - you don't need to specify tag for each float, integer, etc. -D:YAML can also implicitly resolve custom tags, as we will show later. - - ------------ -Constructor ------------ - -D:YAML uses the `Constructor <../api/dyaml.constructor.html>`_ class to process -each node to hold data type corresponding to its tag. *Constructor* stores -functions to process each supported tag. These are supplied by the user using -the *addConstructorXXX()* methods, where *XXX* is *Scalar*, *Sequence* or -*Mapping*. *Constructor* is then passed to *Loader*, which parses YAML input. - -Structs and classes must implement the *opCmp()* operator for YAML support. This -is used for duplicate detection in mappings, sorting and equality comparisons of -nodes. The signature of the operator that must be implemented is -``const int opCmp(ref const MyStruct s)`` for structs where *MyStruct* is the -struct type, and ``int opCmp(Object o)`` for classes. Note that the class -*opCmp()* should not alter the compared values - it is not const for compatibility -reasons. - -We will implement support for an RGB color type. It is implemented as the -following struct: - -.. code-block:: d - - struct Color - { - ubyte red; - ubyte green; - ubyte blue; - - const int opCmp(ref const Color c) - { - if(red != c.red) {return red - c.red;} - if(green != c.green){return green - c.green;} - if(blue != c.blue) {return blue - c.blue;} - return 0; - } - } - -First, we need a function to construct our data type. The function will take a -reference to *Node* to construct from. The node is guaranteed to contain either -a *string*, an array of *Node* or of *Node.Pair*, depending on whether we're -constructing our value from a scalar, sequence, or mapping, respectively. -If this function throws any exception, D:YAML handles it and adds its message -to a *YAMLException* that will be thrown when loading the file. - -In this tutorial, we have functions to construct a color from a scalar, using -CSS-like format, RRGGBB, or from a mapping, where we use the following format: -{r:RRR, g:GGG, b:BBB} . Code of these functions: - -.. code-block:: d - - Color constructColorScalar(ref Node node) - { - string value = node.as!string; - - if(value.length != 6) - { - throw new Exception("Invalid color: " ~ value); - } - //We don't need to check for uppercase chars this way. - value = value.toLower(); - - //Get value of a hex digit. - uint hex(char c) - { - import std.ascii; - if(!std.ascii.isHexDigit(c)) - { - throw new Exception("Invalid color: " ~ value); - } - - if(std.ascii.isDigit(c)) - { - return c - '0'; - } - return c - 'a' + 10; - } - - Color result; - result.red = cast(ubyte)(16 * hex(value[0]) + hex(value[1])); - result.green = cast(ubyte)(16 * hex(value[2]) + hex(value[3])); - result.blue = cast(ubyte)(16 * hex(value[4]) + hex(value[5])); - - return result; - } - - Color constructColorMapping(ref Node node) - { - ubyte r,g,b; - - //Might throw if a value is missing is not an integer, or is out of range. - //If this happens, D:YAML will handle the exception and use its message - //in a YAMLException thrown when loading. - r = node["r"].as!ubyte; - g = node["g"].as!ubyte; - b = node["b"].as!ubyte; - - return Color(cast(ubyte)r, cast(ubyte)g, cast(ubyte)b); - } - -Next, we need some YAML data using our new tag. Create a file called -``input.yaml`` with the following contents: - -.. code-block:: yaml - - scalar-red: !color FF0000 - scalar-orange: !color FFFF00 - mapping-red: !color-mapping {r: 255, g: 0, b: 0} - mapping-orange: - !color-mapping - r: 255 - g: 255 - b: 0 - -You can see that we're using tag ``!color`` for scalar colors, and -``!color-mapping`` for colors expressed as mappings. - -Finally, the code to put it all together: - -.. code-block:: d - - void main() - { - auto red = Color(255, 0, 0); - auto orange = Color(255, 255, 0); - - try - { - auto constructor = new Constructor; - //both functions handle the same tag, but one handles scalar, one mapping. - constructor.addConstructorScalar("!color", &constructColorScalar); - constructor.addConstructorMapping("!color-mapping", &constructColorMapping); - - auto loader = Loader("input.yaml"); - loader.constructor = constructor; - - auto root = loader.load(); - - if(root["scalar-red"].as!Color == red && - root["mapping-red"].as!Color == red && - root["scalar-orange"].as!Color == orange && - root["mapping-orange"].as!Color == orange) - { - writeln("SUCCESS"); - return; - } - } - catch(YAMLException e) - { - writeln(e.msg); - } - - writeln("FAILURE"); - } - -First, we create a *Constructor* and pass functions to handle the ``!color`` -and ``!color-mapping`` tag. We construct a *Loader* and pass the *Constructor* -to it. We then load the YAML document, and finally, read the colors to test if -they were loaded as expected. - -You can find the source code for what we've done so far in the -``examples/constructor`` directory in the D:YAML package. - - --------- -Resolver --------- - -Specifying tag for every color can be tedious. D:YAML can implicitly resolve -scalar tags using regular expressions. This is how default types are resolved. -We will use the `Resolver <../api/dyaml.resolver.html>`_ class to add implicit -tag resolution for the Color data type (in its scalar form). - -We use the *addImplicitResolver()* method of *Resolver*, passing the tag, -regular expression the scalar must match to resolve to this tag, and a string of -possible starting characters of the scalar. Then we pass the *Resolver* to -*Loader*. - -Note that resolvers added first override ones added later. If no resolver -matches a scalar, YAML string tag is used. Therefore our custom values must not -be resolvable as any non-string YAML data type. - -Add this to your code to add implicit resolution of ``!color``. - -.. code-block:: d - - //code from the previous example... - - auto resolver = new Resolver; - import std.regex; - resolver.addImplicitResolver("!color", std.regex.regex("[0-9a-fA-F]{6}"), - "0123456789abcdefABCDEF"); - - auto loader = Loader("input.yaml"); - - loader.constructor = constructor; - loader.resolver = resolver; - - //code from the previous example... - -Now, change contents of ``input.yaml`` to this: - -.. code-block:: yaml - - scalar-red: FF0000 - scalar-orange: FFFF00 - mapping-red: !color-mapping {r: 255, g: 0, b: 0} - mapping-orange: - !color-mapping - r: 255 - g: 255 - b: 0 - -We no longer need to specify the tag for scalar color values. Compile and test -the example. If everything went as expected, it should report success. - -You can find the complete code in the ``examples/resolver`` directory in the -D:YAML package. - - ------------ -Representer ------------ - -Now that you can load custom data types, it might be good to know how to dump -them. D:YAML uses the `Representer <../api/dyaml.representer.html>`_ class for -this purpose. - -*Representer* processes YAML nodes into plain mapping, sequence or scalar nodes -ready for output. Just like with *Constructor*, this is done by user specified -functions. These functions take references to a node to process and to the -*Representer*, and return the processed node. - -Representer functions can be added with the *addRepresenter()* method. The -*Representer* is then passed to *Dumper*, which dumps YAML documents. Only one -function per type can be specified. This is asserted in *addRepresenter()* -preconditions. Default YAML types already have representer functions specified, -but you can disable them by constructing *Representer* with the -*useDefaultRepresenters* parameter set to false. - -By default, tags are explicitly output for all non-default types. To make dumped -tags implicit, you can pass a *Resolver* that will resolve them implicitly. Of -course, you will need to use an identical *Resolver* when loading the output. - -With the following code, we will add support for dumping the our Color type. - -.. code-block:: d - - Node representColor(ref Node node, Representer representer) - { - //The node is guaranteed to be Color as we add representer for Color. - Color color = node.as!Color; - - static immutable hex = "0123456789ABCDEF"; - - //Using the color format from the Constructor example. - string scalar; - foreach(channel; [color.red, color.green, color.blue]) - { - scalar ~= hex[channel / 16]; - scalar ~= hex[channel % 16]; - } - - //Representing as a scalar, with custom tag to specify this data type. - return representer.representScalar("!color", scalar); - } - -First we get the *Color* from the node. Then we convert it to a string with the -CSS-like format we've used before. Finally, we use the *representScalar()* -method of *Representer* to get a scalar node ready for output. There are -corresponding *representMapping()* and *representSequence()* methods -as well, with examples in the -`Resolver API documentation <../api/dyaml.resolver.html>`_. - -Since a type can only have one representer function, we don't dump *Color* both -in the scalar and mapping formats we've used before. However, you can decide to -dump the node with different formats/tags in the representer function itself. -E.g. you could dump the Color as a mapping based on some arbitrary condition, -such as the color being white. - -.. code-block:: d - - void main() - { - try - { - auto representer = new Representer; - representer.addRepresenter!Color(&representColor); - - auto resolver = new Resolver; - import std.regex; - resolver.addImplicitResolver("!color", std.regex.regex("[0-9a-fA-F]{6}"), - "0123456789abcdefABCDEF"); - - auto dumper = Dumper("output.yaml"); - dumper.representer = representer; - dumper.resolver = resolver; - - auto document = Node([Color(255, 0, 0), - Color(0, 255, 0), - Color(0, 0, 255)]); - - dumper.dump(document); - } - catch(YAMLException e) - { - writeln(e.msg); - } - } - -We construct a new *Representer*, and specify a representer function for the -*Color* (the template argument) type. We also construct a *Resolver*, same as in -the previous section, so the ``!color`` tag will be implicit. Of course, -identical *Resolver* would then have to be used when loading the file. -You don't need to do this if you want the tag to be explicit. - -We construct a *Dumper* to file ``output.yaml`` and pass the *Representer* and -*Resolver* to it. Then, we create a simple node containing a sequence of colors -and finally, we dump it. - -Source code for this section can be found in the ``examples/representer`` -directory of the D:YAML package. diff --git a/docsrc/tutorials/getting_started.rst b/docsrc/tutorials/getting_started.rst deleted file mode 100644 index 651ce2c..0000000 --- a/docsrc/tutorials/getting_started.rst +++ /dev/null @@ -1,176 +0,0 @@ -=============== -Getting started -=============== - -Welcome to D:YAML! D:YAML is a `YAML `_ parser -library for the `D programming language `_. This tutorial will -explain how to set D:YAML up and use it in your projects. - -This is meant to be the **simplest possible** introduction to D:YAML. Some of this -information might already be known to you. Only basic usage is covered. - - ----------- -Setting up ----------- - -^^^^^^^^^^^^^^^^^^^^^^^^ -Install the DMD compiler -^^^^^^^^^^^^^^^^^^^^^^^^ - -Digital Mars D compiler, or DMD, is the most commonly used D compiler. You can find its -newest version `here `_. Download the version of DMD -for your operating system and install it. - -.. note:: - Other D compilers exist, such as - `GDC `_ and - `LDC `_. - -^^^^^^^^^^^ -Install dub -^^^^^^^^^^^ - -`dub `_ is a build system and package manager for D. -It is the standard way to manage D projects and their dependencies, compilation and so -on. - -DMD may include DUB in future releases, but at this point we need to install it -separately. See -`installation instructions `_. - - -------------------------- -Your first D:YAML project -------------------------- - -Create a directory for your project and in that directory, create a new file named -``input.yaml`` and paste this code into the file: - -.. code-block:: yaml - - Hello World : [Hello, World] - Answer: 42 - -This will serve as input for our example. - -Now we need to parse it. Create a new file with name ``main.d``. Paste following code -into the file: - -.. code-block:: d - - import std.stdio; - import yaml; - - void main() - { - //Read the input. - Node root = Loader("input.yaml").load(); - - //Display the data read. - foreach(string word; root["Hello World"]) - { - writeln(word); - } - writeln("The answer is ", root["Answer"].as!int); - - //Dump the loaded document to output.yaml. - Dumper("output.yaml").dump(root); - } - - -^^^^^^^^^^^^^^^^^^^^^^^ -Explanation of the code -^^^^^^^^^^^^^^^^^^^^^^^ - -First, we import the *dyaml.all* module. This is the only D:YAML module you need to -import - it automatically imports all needed modules. - -Next we load the file using the *Loader.load()* method. *Loader* is a struct used for -parsing YAML documents. The *load()* method loads the file as **one** YAML document, or -throws *YAMLException*, D:YAML exception type, if the file could not be parsed or -contains more than one document. Note that we don't do any error checking here in order -to keep the example as simple as possible. - -*Node* represents a node in a YAML document. It can be a sequence (array), mapping -(associative array) or a scalar (value). Here the root node is a mapping, and we use the -index operator to get subnodes with keys "Hello World" and "Answer". We iterate over the -former, as it is a sequence, and use the *Node.as()* method on the latter to read its -value as an integer. - -You can iterate over a mapping or sequence as if it was an associative or normal array, -respectively. If you try to iterate over a scalar, it will throw a *YAMLException*. - -You can iterate using *Node* as the iterated type, or specify the type iterated nodes -are expected to have. D:YAML will automatically convert to that type if possible. Here -we specify the *string* type, so we iterate over the "Hello World" sequence as an array -of strings. If it is not possible to convert to iterated type, a *YAMLException* is -thrown. For instance, if we specified *int* here, we would get an error, as "Hello" -cannot be converted to an integer. - -The *Node.as()* method is used to read value of a scalar node as specified type. If the -scalar does not have the specified type, D:YAML will try to convert it, throwing -*YAMLException* if not possible. - -Finally we dump the document we just read to ``output.yaml`` with the *Dumper.dump()* -method. *Dumper* is a struct used to dump YAML documents. The *dump()* method writes -one or more documents to a file, throwing *YAMLException* if the file could not be -written to. - -D:YAML tries to preserve style information in documents so e.g. ``[Hello, World]`` is -not turned into: - -| ``- Hello`` -| ``- World`` - -However, comments are not preserved and neither are any extra formatting whitespace that -doesn't affect the meaning of YAML contents. - - -^^^^^^^^^ -Compiling -^^^^^^^^^ - -We're going to use dub, which we installed at the beginning, to compile our project. - -Create a file called ``dub.json`` with the following contents: - -.. code-block:: json - - { - "name": "getting-started", - "targetType": "executable", - "sourceFiles": ["main.d"], - "mainSourceFile": "main.d", - "dependencies": - { - "dyaml": { "version" : "~>0.5.0" }, - }, - } - -This file tells dub that we're building an executable called ``getting-started`` from -a D source file ``main.d``, and that our project depends on D:YAML 0.5.0 or any newer, -bugfix release of D:YAML 0.5 . DUB will automatically find and download the correct -version of D:YAML when the project is built. - -Now run the following command in your project's directory:: - - dub build - -dub will automatically download D:YAML and compile it, and then then it will compile our -program. This will generate an executable called ``getting-started`` or -``getting-started.exe`` in your directory. When you run it, it should produce the -following output:: - - Hello - World - The answer is 42 - - -^^^^^^^^^^ -Conclusion -^^^^^^^^^^ - -You should now have a basic idea about how to use D:YAML. To learn more, look at the -`API documentation <../api/index.html>`_ and other tutorials. You can find code for this -example in the ``example/getting_started`` directory in the package. diff --git a/docsrc/tutorials/yaml_syntax.rst b/docsrc/tutorials/yaml_syntax.rst deleted file mode 100644 index 315b298..0000000 --- a/docsrc/tutorials/yaml_syntax.rst +++ /dev/null @@ -1,272 +0,0 @@ -=========== -YAML syntax -=========== - -This is an introduction to the most common YAML constructs. For more detailed -information, see `PyYAML documentation `_, -which this article is based on, -`Chapter 2 of the YAML specification `_ -or the `Wikipedia page `_. - -YAML is a data serialization format designed for human readability. YAML is a -recursive acronym for "YAML Ain't Markup Language". - -YAML is similar to JSON, and in fact, JSON is a subset of YAML 1.2; but YAML has -some more advanced features and is easier to read. However, it is also more -difficult to parse (and probably somewhat slower). Data is stored in mappings -(associative arrays), sequences (lists) and scalars (single values). Data -structure hierarchy depends either on indentation (block context, similar to -Python code), or nesting of brackets and braces (flow context, similar to JSON). -YAML comments begin with ``#`` and continue until the end of line. - - ---------- -Documents ---------- - -A YAML stream consists of one or more documents starting with ``---`` and -optionally ending with ``...`` . ``---`` can be left out for the first document. - -Single document with no explicit start or end: - -.. code-block:: yaml - - - Red - - Green - - Blue - -Same document with explicit start and end: - -.. code-block:: yaml - - --- - - Red - - Green - - Blue - ... - -A stream containing multiple documents: - -.. code-block:: yaml - - --- - - Red - - Green - - Blue - --- - - Linux - - BSD - --- - answer : 42 - - ---------- -Sequences ---------- - -Sequences are arrays of nodes of any type, similar e.g. to Python lists. -In block context, each item begins with hyphen+space "- ". In flow context, -sequences have syntax similar to D arrays. - -.. code-block:: yaml - - #Block context - - Red - - Green - - Blue - -.. code-block:: yaml - - #Flow context - [Red, Green, Blue] - -.. code-block:: yaml - - #Nested - - - - Red - - Green - - Blue - - - - Linux - - BSD - -.. code-block:: yaml - - #Nested flow - [[Red, Green, Blue], [Linux, BSD]] - -.. code-block:: yaml - - #Nested in a mapping - Colors: - - Red - - Green - - Blue - Operating systems: - - Linux - - BSD - - --------- -Mappings --------- - -Mappings are associative arrays where each key and value can be of any type, -similar e.g. to Python dictionaries. In block context, keys and values are -separated by colon+space ": ". In flow context, mappings have syntax similar -to D associative arrays, but with braces instead of brackets: - -.. code-block:: yaml - - #Block context - CPU: Athlon - GPU: Radeon - OS: Linux - -.. code-block:: yaml - - #Flow context - {CPU: Athlon, GPU: Radeon, OS: Linux} - -.. code-block:: yaml - - #Nested - PC: - CPU: Athlon - GPU: Radeon - OS: Debian - Phone: - CPU: Cortex - GPU: PowerVR - OS: Android - -.. code-block:: yaml - - #Nested flow - {PC: {CPU: Athlon, GPU: Radeon, OS: Debian}, - Phone: {CPU: Cortex, GPU: PowerVR, OS: Android}} - -.. code-block:: yaml - - #Nested in a sequence - - CPU: Athlon - GPU: Radeon - OS: Debian - - CPU: Cortex - GPU: PowerVR - OS: Android - -Complex keys start with question mark+space "? ". - -.. code-block:: yaml - - #Nested in a sequence - ? [CPU, GPU]: [Athlon, Radeon] - OS: Debian - - -------- -Scalars -------- - -Scalars are simple values such as integers, strings, timestamps and so on. -There are multiple scalar styles. - -Plain scalars use no quotes, start with the first non-space and end with the -last non-space character: - -.. code-block:: yaml - - scalar: Plain scalar - -Single quoted scalars start and end with single quotes. A single quote is -represented by a pair of single quotes ''. - -.. code-block:: yaml - - scalar: 'Single quoted scalar ending with some spaces ' - -Double quoted scalars support C-style escape sequences. - -.. code-block:: yaml - - scalar: "Double quoted scalar \n with some \\ escape sequences" - -Block scalars are convenient for multi-line values. They start either with -``|`` or with ``>``. With ``|``, the newlines in the scalar are preserved. -With ``>``, the newlines between two non-empty lines are removed. - -.. code-block:: yaml - - scalar: | - Newlines are preserved - First line - Second line - -.. code-block:: yaml - - scalar: > - Newlines are folded - This is still the first paragraph - - This is the second - paragraph - - -------------------- -Anchors and aliases -------------------- - -Anchors and aliases can reduce size of YAML code by allowing you to define a -value once, assign an anchor to it and use alias referring to that anchor -anywhere else you need that value. It is possible to use this to create -recursive data structures and some parsers support this; however, D:YAML does -not (this might change in the future, but it is unlikely). - -.. code-block:: yaml - - Person: &AD - gender: male - name: Arthur Dent - Clone: *AD - - ----- -Tags ----- - -Tags are identifiers that specify data types of YAML nodes. Most default YAML -tags are resolved implicitly, so there is no need to specify them. D:YAML also -supports implicit resolution for custom, user specified tags. - -Explicitly specified tags: - -.. code-block:: yaml - - answer: !!int "42" - name: !!str "Arthur Dent" - -Implicit tags: - -.. code-block:: yaml - - answer: 42 #int - name: Arthur Dent #string - -This table shows D types stored in *yaml.Node* default YAML tags are converted to. -Some of these might change in the future (especially !!map and !!set). - -====================== ==================== -YAML tag D type -====================== ==================== -!!null yaml.YAMLNull -!!bool bool -!!int long -!!float real -!!binary ubyte[] -!!timestamp std.datetime.SysTime -!!map, !!omap, !!pairs yaml.Node.Pair[] -!!seq, !!set yaml.Node[] -!!str string -====================== ====================