authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-09-12 17:26:51-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-09-12 17:27:10-04:00
log0dbbc91bc92fa23f7290e8bee2d9114b2c41d218
treec92cf59e0635388983baff623d20e3173cc8e715
parent869475c110c583e641c26f9dfe670132d2e0901e
signaturelock-open Commit is signed but in an unrecognized format.

docs: langref is now javascript-free


2 files changed, 263 insertions(+), 147 deletions(-)

doc/docgen.zig+223-3
...@@ -571,6 +571,11 @@ fn escapeHtml(allocator: *mem.Allocator, input: []const u8) ![]u8 {...@@ -571,6 +571,11 @@ fn escapeHtml(allocator: *mem.Allocator, input: []const u8) ![]u8 {
571571
572 var buf_adapter = io.BufferOutStream.init(&buf);572 var buf_adapter = io.BufferOutStream.init(&buf);
573 var out = &buf_adapter.stream;573 var out = &buf_adapter.stream;
574 try writeEscaped(out, input);
575 return buf.toOwnedSlice();
576}
577
578fn writeEscaped(out: var, input: []const u8) !void {
574 for (input) |c| {579 for (input) |c| {
575 try switch (c) {580 try switch (c) {
576 '&' => out.write("&amp;"),581 '&' => out.write("&amp;"),
...@@ -580,7 +585,6 @@ fn escapeHtml(allocator: *mem.Allocator, input: []const u8) ![]u8 {...@@ -580,7 +585,6 @@ fn escapeHtml(allocator: *mem.Allocator, input: []const u8) ![]u8 {
580 else => out.writeByte(c),585 else => out.writeByte(c),
581 };586 };
582 }587 }
583 return buf.toOwnedSlice();
584}588}
585589
586//#define VT_RED "\x1b[31;1m"590//#define VT_RED "\x1b[31;1m"
...@@ -687,6 +691,223 @@ fn termColor(allocator: *mem.Allocator, input: []const u8) ![]u8 {...@@ -687,6 +691,223 @@ fn termColor(allocator: *mem.Allocator, input: []const u8) ![]u8 {
687 return buf.toOwnedSlice();691 return buf.toOwnedSlice();
688}692}
689693
694const builtin_types = [][]const u8{
695 "f16", "f32", "f64", "f128", "c_longdouble", "c_short",
696 "c_ushort", "c_int", "c_uint", "c_long", "c_ulong", "c_longlong",
697 "c_ulonglong", "c_char", "c_void", "void", "bool", "isize",
698 "usize", "noreturn", "type", "error", "comptime_int", "comptime_float",
699};
700
701fn isType(name: []const u8) bool {
702 for (builtin_types) |t| {
703 if (mem.eql(u8, t, name))
704 return true;
705 }
706 return false;
707}
708
709fn tokenizeAndPrint(allocator: *mem.Allocator, out: var, src: []const u8) !void {
710 try out.write("<pre><code class=\"zig\">");
711 var tokenizer = std.zig.Tokenizer.init(src);
712 var index: usize = 0;
713 var next_tok_is_fn = false;
714 while (true) {
715 const prev_tok_was_fn = next_tok_is_fn;
716 next_tok_is_fn = false;
717
718 const token = tokenizer.next();
719 try writeEscaped(out, src[index..token.start]);
720 switch (token.id) {
721 std.zig.Token.Id.Eof => break,
722
723 std.zig.Token.Id.Keyword_align,
724 std.zig.Token.Id.Keyword_and,
725 std.zig.Token.Id.Keyword_asm,
726 std.zig.Token.Id.Keyword_async,
727 std.zig.Token.Id.Keyword_await,
728 std.zig.Token.Id.Keyword_break,
729 std.zig.Token.Id.Keyword_cancel,
730 std.zig.Token.Id.Keyword_catch,
731 std.zig.Token.Id.Keyword_comptime,
732 std.zig.Token.Id.Keyword_const,
733 std.zig.Token.Id.Keyword_continue,
734 std.zig.Token.Id.Keyword_defer,
735 std.zig.Token.Id.Keyword_else,
736 std.zig.Token.Id.Keyword_enum,
737 std.zig.Token.Id.Keyword_errdefer,
738 std.zig.Token.Id.Keyword_error,
739 std.zig.Token.Id.Keyword_export,
740 std.zig.Token.Id.Keyword_extern,
741 std.zig.Token.Id.Keyword_for,
742 std.zig.Token.Id.Keyword_if,
743 std.zig.Token.Id.Keyword_inline,
744 std.zig.Token.Id.Keyword_nakedcc,
745 std.zig.Token.Id.Keyword_noalias,
746 std.zig.Token.Id.Keyword_or,
747 std.zig.Token.Id.Keyword_orelse,
748 std.zig.Token.Id.Keyword_packed,
749 std.zig.Token.Id.Keyword_promise,
750 std.zig.Token.Id.Keyword_pub,
751 std.zig.Token.Id.Keyword_resume,
752 std.zig.Token.Id.Keyword_return,
753 std.zig.Token.Id.Keyword_section,
754 std.zig.Token.Id.Keyword_stdcallcc,
755 std.zig.Token.Id.Keyword_struct,
756 std.zig.Token.Id.Keyword_suspend,
757 std.zig.Token.Id.Keyword_switch,
758 std.zig.Token.Id.Keyword_test,
759 std.zig.Token.Id.Keyword_try,
760 std.zig.Token.Id.Keyword_union,
761 std.zig.Token.Id.Keyword_unreachable,
762 std.zig.Token.Id.Keyword_use,
763 std.zig.Token.Id.Keyword_var,
764 std.zig.Token.Id.Keyword_volatile,
765 std.zig.Token.Id.Keyword_while,
766 => {
767 try out.write("<span class=\"tok-kw\">");
768 try writeEscaped(out, src[token.start..token.end]);
769 try out.write("</span>");
770 },
771
772 std.zig.Token.Id.Keyword_fn => {
773 try out.write("<span class=\"tok-kw\">");
774 try writeEscaped(out, src[token.start..token.end]);
775 try out.write("</span>");
776 next_tok_is_fn = true;
777 },
778
779 std.zig.Token.Id.Keyword_undefined,
780 std.zig.Token.Id.Keyword_null,
781 std.zig.Token.Id.Keyword_true,
782 std.zig.Token.Id.Keyword_false,
783 std.zig.Token.Id.Keyword_this,
784 => {
785 try out.write("<span class=\"tok-null\">");
786 try writeEscaped(out, src[token.start..token.end]);
787 try out.write("</span>");
788 },
789
790 std.zig.Token.Id.StringLiteral,
791 std.zig.Token.Id.MultilineStringLiteralLine,
792 std.zig.Token.Id.CharLiteral,
793 => {
794 try out.write("<span class=\"tok-str\">");
795 try writeEscaped(out, src[token.start..token.end]);
796 try out.write("</span>");
797 },
798
799 std.zig.Token.Id.Builtin => {
800 try out.write("<span class=\"tok-builtin\">");
801 try writeEscaped(out, src[token.start..token.end]);
802 try out.write("</span>");
803 },
804
805 std.zig.Token.Id.LineComment,
806 std.zig.Token.Id.DocComment,
807 => {
808 try out.write("<span class=\"tok-comment\">");
809 try writeEscaped(out, src[token.start..token.end]);
810 try out.write("</span>");
811 },
812
813 std.zig.Token.Id.Identifier => {
814 if (prev_tok_was_fn) {
815 try out.write("<span class=\"tok-fn\">");
816 try writeEscaped(out, src[token.start..token.end]);
817 try out.write("</span>");
818 } else {
819 const is_int = blk: {
820 if (src[token.start] != 'i' and src[token.start] != 'u')
821 break :blk false;
822 var i = token.start + 1;
823 if (i == token.end)
824 break :blk false;
825 while (i != token.end) : (i += 1) {
826 if (src[i] < '0' or src[i] > '9')
827 break :blk false;
828 }
829 break :blk true;
830 };
831 if (is_int or isType(src[token.start..token.end])) {
832 try out.write("<span class=\"tok-type\">");
833 try writeEscaped(out, src[token.start..token.end]);
834 try out.write("</span>");
835 } else {
836 try writeEscaped(out, src[token.start..token.end]);
837 }
838 }
839 },
840
841 std.zig.Token.Id.IntegerLiteral,
842 std.zig.Token.Id.FloatLiteral,
843 => {
844 try out.write("<span class=\"tok-number\">");
845 try writeEscaped(out, src[token.start..token.end]);
846 try out.write("</span>");
847 },
848
849 std.zig.Token.Id.Bang,
850 std.zig.Token.Id.Pipe,
851 std.zig.Token.Id.PipePipe,
852 std.zig.Token.Id.PipeEqual,
853 std.zig.Token.Id.Equal,
854 std.zig.Token.Id.EqualEqual,
855 std.zig.Token.Id.EqualAngleBracketRight,
856 std.zig.Token.Id.BangEqual,
857 std.zig.Token.Id.LParen,
858 std.zig.Token.Id.RParen,
859 std.zig.Token.Id.Semicolon,
860 std.zig.Token.Id.Percent,
861 std.zig.Token.Id.PercentEqual,
862 std.zig.Token.Id.LBrace,
863 std.zig.Token.Id.RBrace,
864 std.zig.Token.Id.LBracket,
865 std.zig.Token.Id.RBracket,
866 std.zig.Token.Id.Period,
867 std.zig.Token.Id.Ellipsis2,
868 std.zig.Token.Id.Ellipsis3,
869 std.zig.Token.Id.Caret,
870 std.zig.Token.Id.CaretEqual,
871 std.zig.Token.Id.Plus,
872 std.zig.Token.Id.PlusPlus,
873 std.zig.Token.Id.PlusEqual,
874 std.zig.Token.Id.PlusPercent,
875 std.zig.Token.Id.PlusPercentEqual,
876 std.zig.Token.Id.Minus,
877 std.zig.Token.Id.MinusEqual,
878 std.zig.Token.Id.MinusPercent,
879 std.zig.Token.Id.MinusPercentEqual,
880 std.zig.Token.Id.Asterisk,
881 std.zig.Token.Id.AsteriskEqual,
882 std.zig.Token.Id.AsteriskAsterisk,
883 std.zig.Token.Id.AsteriskPercent,
884 std.zig.Token.Id.AsteriskPercentEqual,
885 std.zig.Token.Id.Arrow,
886 std.zig.Token.Id.Colon,
887 std.zig.Token.Id.Slash,
888 std.zig.Token.Id.SlashEqual,
889 std.zig.Token.Id.Comma,
890 std.zig.Token.Id.Ampersand,
891 std.zig.Token.Id.AmpersandEqual,
892 std.zig.Token.Id.QuestionMark,
893 std.zig.Token.Id.AngleBracketLeft,
894 std.zig.Token.Id.AngleBracketLeftEqual,
895 std.zig.Token.Id.AngleBracketAngleBracketLeft,
896 std.zig.Token.Id.AngleBracketAngleBracketLeftEqual,
897 std.zig.Token.Id.AngleBracketRight,
898 std.zig.Token.Id.AngleBracketRightEqual,
899 std.zig.Token.Id.AngleBracketAngleBracketRight,
900 std.zig.Token.Id.AngleBracketAngleBracketRightEqual,
901 std.zig.Token.Id.Tilde,
902 std.zig.Token.Id.BracketStarBracket,
903 std.zig.Token.Id.Invalid,
904 => try writeEscaped(out, src[token.start..token.end]),
905 }
906 index = token.end;
907 }
908 try out.write("</code></pre>");
909}
910
690fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var, zig_exe: []const u8) !void {911fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var, zig_exe: []const u8) !void {
691 var code_progress_index: usize = 0;912 var code_progress_index: usize = 0;
692913
...@@ -732,11 +953,10 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var...@@ -732,11 +953,10 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var
732953
733 const raw_source = tokenizer.buffer[code.source_token.start..code.source_token.end];954 const raw_source = tokenizer.buffer[code.source_token.start..code.source_token.end];
734 const trimmed_raw_source = mem.trim(u8, raw_source, " \n");955 const trimmed_raw_source = mem.trim(u8, raw_source, " \n");
735 const escaped_source = try escapeHtml(allocator, trimmed_raw_source);
736 if (!code.is_inline) {956 if (!code.is_inline) {
737 try out.print("<p class=\"file\">{}.zig</p>", code.name);957 try out.print("<p class=\"file\">{}.zig</p>", code.name);
738 }958 }
739 try out.print("<pre><code class=\"zig\">{}</code></pre>", escaped_source);959 try tokenizeAndPrint(allocator, out, trimmed_raw_source);
740 const name_plus_ext = try std.fmt.allocPrint(allocator, "{}.zig", code.name);960 const name_plus_ext = try std.fmt.allocPrint(allocator, "{}.zig", code.name);
741 const tmp_source_file_name = try os.path.join(allocator, tmp_dir_name, name_plus_ext);961 const tmp_source_file_name = try os.path.join(allocator, tmp_dir_name, name_plus_ext);
742 try io.writeFile(tmp_source_file_name, trimmed_raw_source);962 try io.writeFile(tmp_source_file_name, trimmed_raw_source);
doc/langref.html.in+40-144
...@@ -5,9 +5,6 @@...@@ -5,9 +5,6 @@
5 <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />5 <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
6 <title>Documentation - The Zig Programming Language</title>6 <title>Documentation - The Zig Programming Language</title>
7 <style type="text/css">7 <style type="text/css">
8.hljs{display:block;overflow-x:auto;padding:0.5em;color:#333;background:#f8f8f8}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:bold}.hljs-number,.hljs-literal,.hljs-variable,.hljs-template-variable,.hljs-tag .hljs-attr{color:#008080}.hljs-string,.hljs-doctag{color:#d14}.hljs-title,.hljs-section,.hljs-selector-id{color:#900;font-weight:bold}.hljs-subst{font-weight:normal}.hljs-type,.hljs-class .hljs-title{color:#458;font-weight:bold}.hljs-tag,.hljs-name,.hljs-attribute{color:#000080;font-weight:normal}.hljs-regexp,.hljs-link{color:#009926}.hljs-symbol,.hljs-bullet{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:bold}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}
9 </style>
10 <style type="text/css">
11 table, th, td {8 table, th, td {
12 border-collapse: collapse;9 border-collapse: collapse;
13 border: 1px solid grey;10 border: 1px solid grey;
...@@ -39,11 +36,46 @@...@@ -39,11 +36,46 @@
39 pre > code {36 pre > code {
40 display: block;37 display: block;
41 overflow: auto;38 overflow: auto;
39
40 overflow-x: auto;
41 padding: 0.5em;
42 color: #333;
43 background: #f8f8f8;
42 }44 }
43 .table-wrapper {45 .table-wrapper {
44 width: 100%;46 width: 100%;
45 overflow-y: auto;47 overflow-y: auto;
46 }48 }
49
50 .tok-kw {
51 color: #333;
52 font-weight: bold;
53 }
54 .tok-str {
55 color: #d14;
56 }
57 .tok-builtin {
58 color: #0086b3;
59 }
60 .tok-comment {
61 color: #998;
62 font-style: italic;
63 }
64 .tok-fn {
65 color: #900;
66 font-weight: bold;
67 }
68 .tok-null {
69 color: #008080;
70 }
71 .tok-number {
72 color: #008080;
73 }
74 .tok-type {
75 color: #458;
76 font-weight: bold;
77 }
78
47 /* Desktop */79 /* Desktop */
48 @media screen and (min-width: 56.25em) {80 @media screen and (min-width: 56.25em) {
49 #nav {81 #nav {
...@@ -5135,7 +5167,7 @@ fn seq(c: u8) void {...@@ -5135,7 +5167,7 @@ fn seq(c: u8) void {
51355167
5136 {#header_close#}5168 {#header_close#}
5137 {#header_open|@alignOf#}5169 {#header_open|@alignOf#}
5138 <pre><code class="zig">@alignOf(comptime T: type) (number literal)</code></pre>5170 <pre><code class="zig">@alignOf(comptime T: type) comptime_int</code></pre>
5139 <p>5171 <p>
5140 This function returns the number of bytes that this type should be aligned to5172 This function returns the number of bytes that this type should be aligned to
5141 for the current target to match the C ABI. When the child type of a pointer has5173 for the current target to match the C ABI. When the child type of a pointer has
...@@ -5681,7 +5713,7 @@ fn add(a: i32, b: i32) i32 { return a + b; }...@@ -5681,7 +5713,7 @@ fn add(a: i32, b: i32) i32 { return a + b; }
5681 </p>5713 </p>
5682 {#header_close#}5714 {#header_close#}
5683 {#header_open|@maxValue#}5715 {#header_open|@maxValue#}
5684 <pre><code class="zig">@maxValue(comptime T: type) (number literal)</code></pre>5716 <pre><code class="zig">@maxValue(comptime T: type) comptime_int</code></pre>
5685 <p>5717 <p>
5686 This function returns the maximum value of the integer type <code>T</code>.5718 This function returns the maximum value of the integer type <code>T</code>.
5687 </p>5719 </p>
...@@ -5690,7 +5722,7 @@ fn add(a: i32, b: i32) i32 { return a + b; }...@@ -5690,7 +5722,7 @@ fn add(a: i32, b: i32) i32 { return a + b; }
5690 </p>5722 </p>
5691 {#header_close#}5723 {#header_close#}
5692 {#header_open|@memberCount#}5724 {#header_open|@memberCount#}
5693 <pre><code class="zig">@memberCount(comptime T: type) (number literal)</code></pre>5725 <pre><code class="zig">@memberCount(comptime T: type) comptime_int</code></pre>
5694 <p>5726 <p>
5695 This function returns the number of members in a struct, enum, or union type.5727 This function returns the number of members in a struct, enum, or union type.
5696 </p>5728 </p>
...@@ -5751,7 +5783,7 @@ mem.copy(u8, dest[0...byte_count], source[0...byte_count]);</code></pre>...@@ -5751,7 +5783,7 @@ mem.copy(u8, dest[0...byte_count], source[0...byte_count]);</code></pre>
5751mem.set(u8, dest, c);</code></pre>5783mem.set(u8, dest, c);</code></pre>
5752 {#header_close#}5784 {#header_close#}
5753 {#header_open|@minValue#}5785 {#header_open|@minValue#}
5754 <pre><code class="zig">@minValue(comptime T: type) (number literal)</code></pre>5786 <pre><code class="zig">@minValue(comptime T: type) comptime_int</code></pre>
5755 <p>5787 <p>
5756 This function returns the minimum value of the integer type T.5788 This function returns the minimum value of the integer type T.
5757 </p>5789 </p>
...@@ -5839,7 +5871,7 @@ fn add(a: i32, b: i32) i32 {...@@ -5839,7 +5871,7 @@ fn add(a: i32, b: i32) i32 {
5839 {#see_also|@inlineCall#}5871 {#see_also|@inlineCall#}
5840 {#header_close#}5872 {#header_close#}
5841 {#header_open|@offsetOf#}5873 {#header_open|@offsetOf#}
5842 <pre><code class="zig">@offsetOf(comptime T: type, comptime field_name: [] const u8) (number literal)</code></pre>5874 <pre><code class="zig">@offsetOf(comptime T: type, comptime field_name: [] const u8) comptime_int</code></pre>
5843 <p>5875 <p>
5844 This function returns the byte offset of a field relative to its containing struct.5876 This function returns the byte offset of a field relative to its containing struct.
5845 </p>5877 </p>
...@@ -7728,141 +7760,5 @@ ContainerDecl = option("extern" | "packed")...@@ -7728,141 +7760,5 @@ ContainerDecl = option("extern" | "packed")
7728 </ul>7760 </ul>
7729 {#header_close#}7761 {#header_close#}
7730 </div>7762 </div>
7731 <script>
7732/*! highlight.js v9.12.0 | BSD3 License | git.io/hljslicense */
7733!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function a(e){return k.test(e)}function i(e){var n,t,r,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=B.exec(o))return w(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(i=o[n],a(i)||w(i))return i}function o(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset<r[0].offset?e:r:"start"===r[0].event?e:r:e.length?e:r}function o(e){function r(e){return" "+e.nodeName+'="'+n(e.value).replace('"',"&quot;")+'"'}s+="<"+t(e)+E.map.call(e.attributes,r).join("")+">"}function u(e){s+="</"+t(e)+">"}function c(e){("start"===e.event?o:u)(e.node)}for(var l=0,s="",f=[];e.length||r.length;){var g=i();if(s+=n(a.substring(l,g[0].offset)),l=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g===e&&g.length&&g[0].offset===l);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return s+n(a.substr(l))}function l(e){return e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(n){return o(e,{v:null},n)})),e.cached_variants||e.eW&&[o(e)]||[e]}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var o={},u=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");o[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?u("keyword",a.k):x(a.k).forEach(function(e){u(e,a.k[e])}),a.k=o}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),null==a.r&&(a.r=1),a.c||(a.c=[]),a.c=Array.prototype.concat.apply([],a.c.map(function(e){return l("self"===e?a:e)})),a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var c=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=c.length?t(c.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){var t,a;for(t=0,a=n.c.length;a>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function l(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function p(e,n,t,r){var a=r?"":I.classPrefix,i='<span class="'+a,o=t?"":C;return i+=e+'">',i+n+o}function h(){var e,t,r,a;if(!E.k)return n(k);for(a="",t=0,E.lR.lastIndex=0,r=E.lR.exec(k);r;)a+=n(k.substring(t,r.index)),e=l(E,r),e?(B+=e[1],a+=p(e[0],n(r[0]))):a+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(k);return a+n(k.substr(t))}function d(){var e="string"==typeof E.sL;if(e&&!y[E.sL])return n(k);var t=e?f(E.sL,k,!0,x[E.sL]):g(k,E.sL.length?E.sL:void 0);return E.r>0&&(B+=t.r),e&&(x[E.sL]=t.top),p(t.language,t.value,!1,!0)}function b(){L+=null!=E.sL?d():h(),k=""}function v(e){L+=e.cN?p(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(k+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?k+=n:(t.eB&&(k+=n),b(),t.rB||t.eB||(k=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var a=E;a.skip?k+=n:(a.rE||a.eE||(k+=n),b(),a.eE&&(k=n));do E.cN&&(L+=C),E.skip||(B+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"<unnamed>")+'"');return k+=n,n.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,E=i||N,x={},L="";for(R=E;R!==N;R=R.parent)R.cN&&(L=p(R.cN,"",!0)+L);var k="",B=0;try{for(var M,j,O=0;;){if(E.t.lastIndex=O,M=E.t.exec(t),!M)break;j=m(t.substring(O,M.index),M[0]),O=M.index+j}for(m(t.substr(O)),R=E;R.parent;R=R.parent)R.cN&&(L+=C);return{r:B,value:L,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf("Illegal"))return{r:0,value:n(t)};throw T}}function g(e,t){t=t||I.languages||x(y);var r={r:0,value:n(e)},a=r;return t.filter(w).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function p(e){return I.tabReplace||I.useBR?e.replace(M,function(e,n){return I.useBR&&"\n"===e?"<br>":I.tabReplace?n.replace(/\t/g,I.tabReplace):""}):e}function h(e,n,t){var r=n?L[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function d(e){var n,t,r,o,l,s=i(e);a(s)||(I.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n")):n=e,l=n.textContent,r=s?f(s,l,!0):g(l),t=u(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=c(t,u(o),l)),r.value=p(r.value),e.innerHTML=r.value,e.className=h(e.className,s,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function b(e){I=o(I,e)}function v(){if(!v.called){v.called=!0;var e=document.querySelectorAll("pre code");E.forEach.call(e,d)}}function m(){addEventListener("DOMContentLoaded",v,!1),addEventListener("load",v,!1)}function N(n,t){var r=y[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function R(){return x(y)}function w(e){return e=(e||"").toLowerCase(),y[e]||y[L[e]]}var E=[],x=Object.keys,y={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,M=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C="</span>",I={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=f,e.highlightAuto=g,e.fixMarkup=p,e.highlightBlock=d,e.configure=b,e.initHighlighting=v,e.initHighlightingOnLoad=m,e.registerLanguage=N,e.listLanguages=R,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U)?L?"',e:'"',i:"\\n",c:[t.BE]},{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},i={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},t.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"</",c:n.concat([i,{b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e]},t.CLCM,t.CBCM,i]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b:/</,e:/>/,c:["self"]},t.TM]}]),exports:{preprocessor:i,strings:r,k:c}}});hljs.registerLanguage("llvm",function(e){var n="([-a-zA-Z$._][\\w\\-$.]*)";return{k:"begin end true false declare define global constant private linker_private internal available_externally linkonce linkonce_odr weak weak_odr appending dllimport dllexport common default hidden protected extern_weak external thread_local zeroinitializer undef null to tail target triple datalayout volatile nuw nsw nnan ninf nsz arcp fast exact inbounds align addrspace section alias module asm sideeffect gc dbg linker_private_weak attributes blockaddress initialexec localdynamic localexec prefix unnamed_addr ccc fastcc coldcc x86_stdcallcc x86_fastcallcc arm_apcscc arm_aapcscc arm_aapcs_vfpcc ptx_device ptx_kernel intel_ocl_bicc msp430_intrcc spir_func spir_kernel x86_64_sysvcc x86_64_win64cc x86_thiscallcc cc c signext zeroext inreg sret nounwind noreturn noalias nocapture byval nest readnone readonly inlinehint noinline alwaysinline optsize ssp sspreq noredzone noimplicitfloat naked builtin cold nobuiltin noduplicate nonlazybind optnone returns_twice sanitize_address sanitize_memory sanitize_thread sspstrong uwtable returned type opaque eq ne slt sgt sle sge ult ugt ule uge oeq one olt ogt ole oge ord uno ueq une x acq_rel acquire alignstack atomic catch cleanup filter inteldialect max min monotonic nand personality release seq_cst singlethread umax umin unordered xchg add fadd sub fsub mul fmul udiv sdiv fdiv urem srem frem shl lshr ashr and or xor icmp fcmp phi call trunc zext sext fptrunc fpext uitofp sitofp fptoui fptosi inttoptr ptrtoint bitcast addrspacecast select va_arg ret br switch invoke unwind unreachable indirectbr landingpad resume malloc alloca free load store getelementptr extractelement insertelement shufflevector getresult extractvalue insertvalue atomicrmw cmpxchg fence argmemonly double",c:[{cN:"keyword",b:"i\\d+"},e.C(";","\\n",{r:0}),e.QSM,{cN:"string",v:[{b:'"',e:'[^\\\\]"'}],r:0},{cN:"title",v:[{b:"@"+n},{b:"@\\d+"},{b:"!"+n},{b:"!\\d+"+n}]},{cN:"symbol",v:[{b:"%"+n},{b:"%\\d+"},{b:"#\\d+"}]},{cN:"number",v:[{b:"0[xX][a-fA-F0-9]+"},{b:"-?\\d+(?:[.]\\d+)?(?:[eE][-+]?\\d+(?:[.]\\d+)?)?"}],r:0}]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,a,t]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}});
7734 </script>
7735 <script>
7736hljs.registerLanguage("zig", function(t) {
7737 var e = {
7738 cN: "keyword",
7739 b: "\\b[a-z\\d_]*_t\\b"
7740 },
7741 r = {
7742 cN: "string",
7743 v: [{
7744 b: '(u8?|U)?L?"',
7745 e: '"',
7746 i: "\\n",
7747 c: [t.BE]
7748 }, {
7749 b: '(u8?|U)?R"',
7750 e: '"',
7751 c: [t.BE]
7752 }, {
7753 b: "'\\\\?.",
7754 e: "'",
7755 i: "."
7756 }]
7757 },
7758 s = {
7759 cN: "number",
7760 v: [{
7761 b: "\\b(0b[01']+)"
7762 }, {
7763 b: "(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"
7764 }, {
7765 b: "(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
7766 }],
7767 r: 0
7768 },
7769 i = {
7770 cN: "meta",
7771 b: /#\s*[a-z]+\b/,
7772 e: /$/,
7773 k: {
7774 "meta-keyword": "zzzzzzdisable"
7775 },
7776 c: [{
7777 b: /\\\n/,
7778 r: 0
7779 }, t.inherit(r, {
7780 cN: "meta-string"
7781 }), {
7782 cN: "meta-string",
7783 b: /<[^\n>]*>/,
7784 e: /$/,
7785 i: "\\n"
7786 }, t.CLCM, t.CBCM]
7787 },
7788 a = t.IR + "\\s*\\(",
7789 c = {
7790 keyword: "const align var extern stdcallcc nakedcc volatile export pub noalias inline struct packed enum union break return try catch test continue unreachable comptime and or asm defer errdefer if else switch while for fn use bool f32 f64 void type noreturn error i8 u8 i16 u16 i32 u32 i64 u64 isize usize i8w u8w i16w i32w u32w i64w u64w isizew usizew c_short c_ushort c_int c_uint c_long c_ulong c_longlong c_ulonglong resume suspend cancel await async orelse",
7791 built_in: "atomicLoad breakpoint returnAddress frameAddress fieldParentPtr setFloatMode IntType OpaqueType compileError compileLog setCold setRuntimeSafety setEvalBranchQuota offsetOf memcpy inlineCall setGlobalLinkage divTrunc divFloor enumTagName intToPtr ptrToInt panic ptrCast intCast floatCast intToFloat floatToInt boolToInt bytesToSlice sliceToBytes errSetCast bitCast rem mod memset sizeOf alignOf alignCast maxValue minValue memberCount memberName memberType typeOf addWithOverflow subWithOverflow mulWithOverflow shlWithOverflow shlExact shrExact cInclude cDefine cUndef ctz clz popCount import cImport errorName embedFile cmpxchgStrong cmpxchgWeak fence divExact truncate atomicRmw sqrt field typeInfo typeName newStackCall errorToInt intToError enumToInt intToEnum handle",
7792 literal: "true false null undefined"
7793 },
7794 n = [e, t.CLCM, t.CBCM, s, r];
7795 return {
7796 aliases: ["c", "cc", "h", "c++", "h++", "hpp"],
7797 k: c,
7798 i: "</",
7799 c: n.concat([i, {
7800 b: "\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",
7801 e: ">",
7802 k: c,
7803 c: ["self", e]
7804 }, {
7805 b: t.IR + "::",
7806 k: c
7807 }, {
7808 v: [{
7809 b: /=/,
7810 e: /;/
7811 }, {
7812 b: /\(/,
7813 e: /\)/
7814 }, {
7815 bK: "new throw return else",
7816 e: /;/
7817 }],
7818 k: c,
7819 c: n.concat([{
7820 b: /\(/,
7821 e: /\)/,
7822 k: c,
7823 c: n.concat(["self"]),
7824 r: 0
7825 }]),
7826 r: 0
7827 }, {
7828 cN: "function",
7829 b: "(" + t.IR + "[\\*&\\s]+)+" + a,
7830 rB: !0,
7831 e: /[{;=]/,
7832 eE: !0,
7833 k: c,
7834 i: /[^\w\s\*&]/,
7835 c: [{
7836 b: a,
7837 rB: !0,
7838 c: [t.TM],
7839 r: 0
7840 }, {
7841 cN: "params",
7842 b: /\(/,
7843 e: /\)/,
7844 k: c,
7845 r: 0,
7846 c: [t.CLCM, t.CBCM, r, s, e]
7847 }, t.CLCM, t.CBCM, i]
7848 }, {
7849 cN: "class",
7850 bK: "class struct",
7851 e: /[{;:]/,
7852 c: [{
7853 b: /</,
7854 e: />/,
7855 c: ["self"]
7856 }, t.TM]
7857 }]),
7858 exports: {
7859 preprocessor: i,
7860 strings: r,
7861 k: c
7862 }
7863 }
7864});
7865 hljs.initHighlightingOnLoad();
7866 </script>
7867 </body>7763 </body>
7868</html>7764</html>