| ... | @@ -1641,7 +1641,11 @@ const NAV_MODES = { | ... | @@ -1641,7 +1641,11 @@ const NAV_MODES = { |
| 1641 | return payloadHtml; | 1641 | return payloadHtml; |
| 1642 | } | 1642 | } |
| 1643 | case "null": { | 1643 | case "null": { |
| 1644 | return "null"; | 1644 | if (opts.wantHtml) { |
| | 1645 | return '<span class="tok-null">null</span>'; |
| | 1646 | } else { |
| | 1647 | return "null"; |
| | 1648 | } |
| 1645 | } | 1649 | } |
| 1646 | case "array": { | 1650 | case "array": { |
| 1647 | let payloadHtml = ".{"; | 1651 | let payloadHtml = ".{"; |
| ... | @@ -1766,11 +1770,160 @@ const NAV_MODES = { | ... | @@ -1766,11 +1770,160 @@ const NAV_MODES = { |
| 1766 | throw "TODO"; | 1770 | throw "TODO"; |
| 1767 | case typeKinds.Struct: { | 1771 | case typeKinds.Struct: { |
| 1768 | let structObj = typeObj; | 1772 | let structObj = typeObj; |
| 1769 | return structObj; | 1773 | let name = ""; |
| | 1774 | if (opts.wantHtml) { |
| | 1775 | name = "<span class='tok-kw'>struct</span> { "; |
| | 1776 | } else { |
| | 1777 | name = "struct { "; |
| | 1778 | } |
| | 1779 | if (structObj.fields.length > 1 && opts.wantHtml) {name += "</br>";} |
| | 1780 | let indent = ""; |
| | 1781 | if (structObj.fields.length > 1 && opts.wantHtml) { |
| | 1782 | indent = "&nbsp;&nbsp;&nbsp;&nbsp;" |
| | 1783 | } |
| | 1784 | if (opts.indent) { |
| | 1785 | indent = opts.indent + indent; |
| | 1786 | } |
| | 1787 | let structNode = getAstNode(structObj.src); |
| | 1788 | let field_end = ","; |
| | 1789 | if (structObj.fields.length > 1 && opts.wantHtml) { |
| | 1790 | field_end += "</br>"; |
| | 1791 | } else { |
| | 1792 | field_end += " "; |
| | 1793 | } |
| | 1794 | |
| | 1795 | for(let i = 0; i < structObj.fields.length; i += 1) { |
| | 1796 | let fieldNode = getAstNode(structNode.fields[i]); |
| | 1797 | let fieldName = fieldNode.name; |
| | 1798 | let html = indent + escapeHtml(fieldName); |
| | 1799 | |
| | 1800 | let fieldTypeExpr = structObj.fields[i]; |
| | 1801 | html += ": "; |
| | 1802 | |
| | 1803 | html += exprName(fieldTypeExpr, {...opts, indent: indent}); |
| | 1804 | |
| | 1805 | html += field_end; |
| | 1806 | |
| | 1807 | name += html; |
| | 1808 | } |
| | 1809 | if (opts.indent) { |
| | 1810 | name += opts.indent; |
| | 1811 | } |
| | 1812 | name += "}"; |
| | 1813 | return name; |
| 1770 | } | 1814 | } |
| 1771 | case typeKinds.Enum: { | 1815 | case typeKinds.Enum: { |
| 1772 | let enumObj = typeObj; | 1816 | let enumObj = typeObj; |
| 1773 | return enumObj; | 1817 | let name = ""; |
| | 1818 | if (opts.wantHtml) { |
| | 1819 | name = "<span class='tok-kw'>enum</span>"; |
| | 1820 | } else { |
| | 1821 | name = "enum"; |
| | 1822 | } |
| | 1823 | if (enumObj.tag) { |
| | 1824 | name += " (" + exprName(enumObj.tag, opts) + ")"; |
| | 1825 | } |
| | 1826 | name += " { "; |
| | 1827 | let enumNode = getAstNode(enumObj.src); |
| | 1828 | let fields_len = enumNode.fields.length; |
| | 1829 | if (enumObj.nonexhaustive) { |
| | 1830 | fields_len += 1; |
| | 1831 | } |
| | 1832 | if (fields_len > 1 && opts.wantHtml) {name += "</br>";} |
| | 1833 | let indent = ""; |
| | 1834 | if (fields_len > 1) { |
| | 1835 | if (opts.wantHtml) { |
| | 1836 | indent = "&nbsp;&nbsp;&nbsp;&nbsp;"; |
| | 1837 | } else { |
| | 1838 | indent = " "; |
| | 1839 | } |
| | 1840 | } |
| | 1841 | if (opts.indent) { |
| | 1842 | indent = opts.indent + indent; |
| | 1843 | } |
| | 1844 | let field_end = ","; |
| | 1845 | if (fields_len > 1 && opts.wantHtml) { |
| | 1846 | field_end += "</br>"; |
| | 1847 | } else { |
| | 1848 | field_end += " "; |
| | 1849 | } |
| | 1850 | for(let i = 0; i < enumNode.fields.length; i += 1) { |
| | 1851 | let fieldNode = getAstNode(enumNode.fields[i]); |
| | 1852 | let fieldName = fieldNode.name; |
| | 1853 | let html = indent + escapeHtml(fieldName); |
| | 1854 | |
| | 1855 | html += field_end; |
| | 1856 | |
| | 1857 | name += html; |
| | 1858 | } |
| | 1859 | if (enumObj.nonexhaustive) { |
| | 1860 | name += indent + "_" + field_end; |
| | 1861 | } |
| | 1862 | if (opts.indent) { |
| | 1863 | name += opts.indent; |
| | 1864 | } |
| | 1865 | name += "}"; |
| | 1866 | return name; |
| | 1867 | } |
| | 1868 | case typeKinds.Union: { |
| | 1869 | let unionObj = typeObj; |
| | 1870 | let name = ""; |
| | 1871 | if (opts.wantHtml) { |
| | 1872 | name = "<span class='tok-kw'>union</span>"; |
| | 1873 | } else { |
| | 1874 | name = "union"; |
| | 1875 | } |
| | 1876 | if (unionObj.auto_tag) { |
| | 1877 | if (opts.wantHtml) { |
| | 1878 | name += " (<span class='tok-kw'>enum</span>"; |
| | 1879 | } else { |
| | 1880 | name += " (enum"; |
| | 1881 | } |
| | 1882 | if (unionObj.tag) { |
| | 1883 | name += "(" + exprName(unionObj.tag, opts) + "))"; |
| | 1884 | } else { |
| | 1885 | name += ")"; |
| | 1886 | } |
| | 1887 | } else if (unionObj.tag) { |
| | 1888 | name += " (" + exprName(unionObj.tag, opts) + ")"; |
| | 1889 | } |
| | 1890 | name += " { "; |
| | 1891 | if (unionObj.fields.length > 1 && opts.wantHtml) { |
| | 1892 | name += "</br>"; |
| | 1893 | } |
| | 1894 | let indent = ""; |
| | 1895 | if (unionObj.fields.length > 1 && opts.wantHtml) { |
| | 1896 | indent = "&nbsp;&nbsp;&nbsp;&nbsp;" |
| | 1897 | } |
| | 1898 | if (opts.indent) { |
| | 1899 | indent = opts.indent + indent; |
| | 1900 | } |
| | 1901 | let unionNode = getAstNode(unionObj.src); |
| | 1902 | let field_end = ","; |
| | 1903 | if (unionObj.fields.length > 1 && opts.wantHtml) { |
| | 1904 | field_end += "</br>"; |
| | 1905 | } else { |
| | 1906 | field_end += " "; |
| | 1907 | } |
| | 1908 | for(let i = 0; i < unionObj.fields.length; i += 1) { |
| | 1909 | let fieldNode = getAstNode(unionNode.fields[i]); |
| | 1910 | let fieldName = fieldNode.name; |
| | 1911 | let html = indent + escapeHtml(fieldName); |
| | 1912 | |
| | 1913 | let fieldTypeExpr = unionObj.fields[i]; |
| | 1914 | html += ": "; |
| | 1915 | |
| | 1916 | html += exprName(fieldTypeExpr, {...opts, indent: indent}); |
| | 1917 | |
| | 1918 | html += field_end; |
| | 1919 | |
| | 1920 | name += html; |
| | 1921 | } |
| | 1922 | if (opts.indent) { |
| | 1923 | name += opts.indent; |
| | 1924 | } |
| | 1925 | name += "}"; |
| | 1926 | return name; |
| 1774 | } | 1927 | } |
| 1775 | case typeKinds.Opaque: { | 1928 | case typeKinds.Opaque: { |
| 1776 | let opaqueObj = typeObj; | 1929 | let opaqueObj = typeObj; |
| ... | @@ -3831,6 +3984,8 @@ const NAV_MODES = { | ... | @@ -3831,6 +3984,8 @@ const NAV_MODES = { |
| 3831 | src: ty[2], | 3984 | src: ty[2], |
| 3832 | privDecls: ty[3], | 3985 | privDecls: ty[3], |
| 3833 | pubDecls: ty[4], | 3986 | pubDecls: ty[4], |
| | 3987 | tag: ty[5], |
| | 3988 | nonexhaustive: ty[6], |
| 3834 | }; | 3989 | }; |
| 3835 | case 20: // Union | 3990 | case 20: // Union |
| 3836 | return { | 3991 | return { |
| ... | @@ -3840,6 +3995,8 @@ const NAV_MODES = { | ... | @@ -3840,6 +3995,8 @@ const NAV_MODES = { |
| 3840 | privDecls: ty[3], | 3995 | privDecls: ty[3], |
| 3841 | pubDecls: ty[4], | 3996 | pubDecls: ty[4], |
| 3842 | fields: ty[5], | 3997 | fields: ty[5], |
| | 3998 | tag: ty[6], |
| | 3999 | auto_tag: ty[7], |
| 3843 | }; | 4000 | }; |
| 3844 | case 21: // Fn | 4001 | case 21: // Fn |
| 3845 | return { | 4002 | return { |