├── README.md ├── css ├── fonts │ ├── KaTeX_AMS-Regular.woff2 │ ├── KaTeX_Caligraphic-Bold.woff2 │ ├── KaTeX_Caligraphic-Regular.woff2 │ ├── KaTeX_Fraktur-Bold.woff2 │ ├── KaTeX_Fraktur-Regular.woff2 │ ├── KaTeX_Main-Bold.woff2 │ ├── KaTeX_Main-BoldItalic.woff2 │ ├── KaTeX_Main-Italic.woff2 │ ├── KaTeX_Main-Regular.woff2 │ ├── KaTeX_Math-BoldItalic.woff2 │ ├── KaTeX_Math-Italic.woff2 │ ├── KaTeX_SansSerif-Bold.woff2 │ ├── KaTeX_SansSerif-Italic.woff2 │ ├── KaTeX_SansSerif-Regular.woff2 │ ├── KaTeX_Script-Regular.woff2 │ ├── KaTeX_Size1-Regular.woff2 │ ├── KaTeX_Size2-Regular.woff2 │ ├── KaTeX_Size3-Regular.woff2 │ ├── KaTeX_Size4-Regular.woff2 │ └── KaTeX_Typewriter-Regular.woff2 ├── gitlab.css ├── katex.css └── prism.css ├── icons ├── 128x128.png ├── 16x16.png └── 48x48.png ├── js ├── katex.js ├── main.js ├── markdown-it-html5-embed.js ├── markdown-it.js ├── prism.js └── texmath.js └── manifest.json /README.md: -------------------------------------------------------------------------------- 1 | # GitLab Mardown Viewer 2 | 3 | * Renders markdown files in GitLab style. 4 | * Math formulas are supported. 5 | * Both Firefox (including Android version) and Chrome are Supported. 6 | * Only UTF-8 encoded markdown files are supported. 7 | -------------------------------------------------------------------------------- /css/fonts/KaTeX_AMS-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_AMS-Regular.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Caligraphic-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Caligraphic-Bold.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Caligraphic-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Caligraphic-Regular.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Fraktur-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Fraktur-Bold.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Fraktur-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Fraktur-Regular.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Main-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Main-Bold.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Main-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Main-BoldItalic.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Main-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Main-Italic.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Main-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Main-Regular.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Math-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Math-BoldItalic.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Math-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Math-Italic.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_SansSerif-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_SansSerif-Bold.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_SansSerif-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_SansSerif-Italic.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_SansSerif-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_SansSerif-Regular.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Script-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Script-Regular.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Size1-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Size1-Regular.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Size2-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Size2-Regular.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Size3-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Size3-Regular.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Size4-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Size4-Regular.woff2 -------------------------------------------------------------------------------- /css/fonts/KaTeX_Typewriter-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/css/fonts/KaTeX_Typewriter-Regular.woff2 -------------------------------------------------------------------------------- /css/katex.css: -------------------------------------------------------------------------------- 1 | /* stylelint-disable font-family-no-missing-generic-family-keyword */ 2 | @font-face { 3 | font-family: 'KaTeX_AMS'; 4 | src: url(fonts/KaTeX_AMS-Regular.woff2) format('woff2'), url(fonts/KaTeX_AMS-Regular.woff) format('woff'), url(fonts/KaTeX_AMS-Regular.ttf) format('truetype'); 5 | font-weight: normal; 6 | font-style: normal; 7 | } 8 | @font-face { 9 | font-family: 'KaTeX_Caligraphic'; 10 | src: url(fonts/KaTeX_Caligraphic-Bold.woff2) format('woff2'), url(fonts/KaTeX_Caligraphic-Bold.woff) format('woff'), url(fonts/KaTeX_Caligraphic-Bold.ttf) format('truetype'); 11 | font-weight: bold; 12 | font-style: normal; 13 | } 14 | @font-face { 15 | font-family: 'KaTeX_Caligraphic'; 16 | src: url(fonts/KaTeX_Caligraphic-Regular.woff2) format('woff2'), url(fonts/KaTeX_Caligraphic-Regular.woff) format('woff'), url(fonts/KaTeX_Caligraphic-Regular.ttf) format('truetype'); 17 | font-weight: normal; 18 | font-style: normal; 19 | } 20 | @font-face { 21 | font-family: 'KaTeX_Fraktur'; 22 | src: url(fonts/KaTeX_Fraktur-Bold.woff2) format('woff2'), url(fonts/KaTeX_Fraktur-Bold.woff) format('woff'), url(fonts/KaTeX_Fraktur-Bold.ttf) format('truetype'); 23 | font-weight: bold; 24 | font-style: normal; 25 | } 26 | @font-face { 27 | font-family: 'KaTeX_Fraktur'; 28 | src: url(fonts/KaTeX_Fraktur-Regular.woff2) format('woff2'), url(fonts/KaTeX_Fraktur-Regular.woff) format('woff'), url(fonts/KaTeX_Fraktur-Regular.ttf) format('truetype'); 29 | font-weight: normal; 30 | font-style: normal; 31 | } 32 | @font-face { 33 | font-family: 'KaTeX_Main'; 34 | src: url(fonts/KaTeX_Main-Bold.woff2) format('woff2'), url(fonts/KaTeX_Main-Bold.woff) format('woff'), url(fonts/KaTeX_Main-Bold.ttf) format('truetype'); 35 | font-weight: bold; 36 | font-style: normal; 37 | } 38 | @font-face { 39 | font-family: 'KaTeX_Main'; 40 | src: url(fonts/KaTeX_Main-BoldItalic.woff2) format('woff2'), url(fonts/KaTeX_Main-BoldItalic.woff) format('woff'), url(fonts/KaTeX_Main-BoldItalic.ttf) format('truetype'); 41 | font-weight: bold; 42 | font-style: italic; 43 | } 44 | @font-face { 45 | font-family: 'KaTeX_Main'; 46 | src: url(fonts/KaTeX_Main-Italic.woff2) format('woff2'), url(fonts/KaTeX_Main-Italic.woff) format('woff'), url(fonts/KaTeX_Main-Italic.ttf) format('truetype'); 47 | font-weight: normal; 48 | font-style: italic; 49 | } 50 | @font-face { 51 | font-family: 'KaTeX_Main'; 52 | src: url(fonts/KaTeX_Main-Regular.woff2) format('woff2'), url(fonts/KaTeX_Main-Regular.woff) format('woff'), url(fonts/KaTeX_Main-Regular.ttf) format('truetype'); 53 | font-weight: normal; 54 | font-style: normal; 55 | } 56 | @font-face { 57 | font-family: 'KaTeX_Math'; 58 | src: url(fonts/KaTeX_Math-BoldItalic.woff2) format('woff2'), url(fonts/KaTeX_Math-BoldItalic.woff) format('woff'), url(fonts/KaTeX_Math-BoldItalic.ttf) format('truetype'); 59 | font-weight: bold; 60 | font-style: italic; 61 | } 62 | @font-face { 63 | font-family: 'KaTeX_Math'; 64 | src: url(fonts/KaTeX_Math-Italic.woff2) format('woff2'), url(fonts/KaTeX_Math-Italic.woff) format('woff'), url(fonts/KaTeX_Math-Italic.ttf) format('truetype'); 65 | font-weight: normal; 66 | font-style: italic; 67 | } 68 | @font-face { 69 | font-family: 'KaTeX_SansSerif'; 70 | src: url(fonts/KaTeX_SansSerif-Bold.woff2) format('woff2'), url(fonts/KaTeX_SansSerif-Bold.woff) format('woff'), url(fonts/KaTeX_SansSerif-Bold.ttf) format('truetype'); 71 | font-weight: bold; 72 | font-style: normal; 73 | } 74 | @font-face { 75 | font-family: 'KaTeX_SansSerif'; 76 | src: url(fonts/KaTeX_SansSerif-Italic.woff2) format('woff2'), url(fonts/KaTeX_SansSerif-Italic.woff) format('woff'), url(fonts/KaTeX_SansSerif-Italic.ttf) format('truetype'); 77 | font-weight: normal; 78 | font-style: italic; 79 | } 80 | @font-face { 81 | font-family: 'KaTeX_SansSerif'; 82 | src: url(fonts/KaTeX_SansSerif-Regular.woff2) format('woff2'), url(fonts/KaTeX_SansSerif-Regular.woff) format('woff'), url(fonts/KaTeX_SansSerif-Regular.ttf) format('truetype'); 83 | font-weight: normal; 84 | font-style: normal; 85 | } 86 | @font-face { 87 | font-family: 'KaTeX_Script'; 88 | src: url(fonts/KaTeX_Script-Regular.woff2) format('woff2'), url(fonts/KaTeX_Script-Regular.woff) format('woff'), url(fonts/KaTeX_Script-Regular.ttf) format('truetype'); 89 | font-weight: normal; 90 | font-style: normal; 91 | } 92 | @font-face { 93 | font-family: 'KaTeX_Size1'; 94 | src: url(fonts/KaTeX_Size1-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size1-Regular.woff) format('woff'), url(fonts/KaTeX_Size1-Regular.ttf) format('truetype'); 95 | font-weight: normal; 96 | font-style: normal; 97 | } 98 | @font-face { 99 | font-family: 'KaTeX_Size2'; 100 | src: url(fonts/KaTeX_Size2-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size2-Regular.woff) format('woff'), url(fonts/KaTeX_Size2-Regular.ttf) format('truetype'); 101 | font-weight: normal; 102 | font-style: normal; 103 | } 104 | @font-face { 105 | font-family: 'KaTeX_Size3'; 106 | src: url(fonts/KaTeX_Size3-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size3-Regular.woff) format('woff'), url(fonts/KaTeX_Size3-Regular.ttf) format('truetype'); 107 | font-weight: normal; 108 | font-style: normal; 109 | } 110 | @font-face { 111 | font-family: 'KaTeX_Size4'; 112 | src: url(fonts/KaTeX_Size4-Regular.woff2) format('woff2'), url(fonts/KaTeX_Size4-Regular.woff) format('woff'), url(fonts/KaTeX_Size4-Regular.ttf) format('truetype'); 113 | font-weight: normal; 114 | font-style: normal; 115 | } 116 | @font-face { 117 | font-family: 'KaTeX_Typewriter'; 118 | src: url(fonts/KaTeX_Typewriter-Regular.woff2) format('woff2'), url(fonts/KaTeX_Typewriter-Regular.woff) format('woff'), url(fonts/KaTeX_Typewriter-Regular.ttf) format('truetype'); 119 | font-weight: normal; 120 | font-style: normal; 121 | } 122 | .katex { 123 | font: normal 1.21em KaTeX_Main, Times New Roman, serif; 124 | line-height: 1.2; 125 | text-indent: 0; 126 | text-rendering: auto; 127 | } 128 | .katex * { 129 | -ms-high-contrast-adjust: none !important; 130 | } 131 | .katex .katex-version::after { 132 | content: "0.11.0"; 133 | } 134 | .katex .katex-mathml { 135 | position: absolute; 136 | clip: rect(1px, 1px, 1px, 1px); 137 | padding: 0; 138 | border: 0; 139 | height: 1px; 140 | width: 1px; 141 | overflow: hidden; 142 | } 143 | .katex .katex-html { 144 | /* \newline is an empty block at top level, between .base elements */ 145 | } 146 | .katex .katex-html > .newline { 147 | display: block; 148 | } 149 | .katex .base { 150 | position: relative; 151 | display: inline-block; 152 | white-space: nowrap; 153 | width: min-content; 154 | } 155 | .katex .strut { 156 | display: inline-block; 157 | } 158 | .katex .textbf { 159 | font-weight: bold; 160 | } 161 | .katex .textit { 162 | font-style: italic; 163 | } 164 | .katex .textrm { 165 | font-family: KaTeX_Main; 166 | } 167 | .katex .textsf { 168 | font-family: KaTeX_SansSerif; 169 | } 170 | .katex .texttt { 171 | font-family: KaTeX_Typewriter; 172 | } 173 | .katex .mathdefault { 174 | font-family: KaTeX_Math; 175 | font-style: italic; 176 | } 177 | .katex .mathit { 178 | font-family: KaTeX_Main; 179 | font-style: italic; 180 | } 181 | .katex .mathrm { 182 | font-style: normal; 183 | } 184 | .katex .mathbf { 185 | font-family: KaTeX_Main; 186 | font-weight: bold; 187 | } 188 | .katex .boldsymbol { 189 | font-family: KaTeX_Math; 190 | font-weight: bold; 191 | font-style: italic; 192 | } 193 | .katex .amsrm { 194 | font-family: KaTeX_AMS; 195 | } 196 | .katex .mathbb, 197 | .katex .textbb { 198 | font-family: KaTeX_AMS; 199 | } 200 | .katex .mathcal { 201 | font-family: KaTeX_Caligraphic; 202 | } 203 | .katex .mathfrak, 204 | .katex .textfrak { 205 | font-family: KaTeX_Fraktur; 206 | } 207 | .katex .mathtt { 208 | font-family: KaTeX_Typewriter; 209 | } 210 | .katex .mathscr, 211 | .katex .textscr { 212 | font-family: KaTeX_Script; 213 | } 214 | .katex .mathsf, 215 | .katex .textsf { 216 | font-family: KaTeX_SansSerif; 217 | } 218 | .katex .mathboldsf, 219 | .katex .textboldsf { 220 | font-family: KaTeX_SansSerif; 221 | font-weight: bold; 222 | } 223 | .katex .mathitsf, 224 | .katex .textitsf { 225 | font-family: KaTeX_SansSerif; 226 | font-style: italic; 227 | } 228 | .katex .mainrm { 229 | font-family: KaTeX_Main; 230 | font-style: normal; 231 | } 232 | .katex .vlist-t { 233 | display: inline-table; 234 | table-layout: fixed; 235 | } 236 | .katex .vlist-r { 237 | display: table-row; 238 | } 239 | .katex .vlist { 240 | display: table-cell; 241 | vertical-align: bottom; 242 | position: relative; 243 | } 244 | .katex .vlist > span { 245 | display: block; 246 | height: 0; 247 | position: relative; 248 | } 249 | .katex .vlist > span > span { 250 | display: inline-block; 251 | } 252 | .katex .vlist > span > .pstrut { 253 | overflow: hidden; 254 | width: 0; 255 | } 256 | .katex .vlist-t2 { 257 | margin-right: -2px; 258 | } 259 | .katex .vlist-s { 260 | display: table-cell; 261 | vertical-align: bottom; 262 | font-size: 1px; 263 | width: 2px; 264 | min-width: 2px; 265 | } 266 | .katex .msupsub { 267 | text-align: left; 268 | } 269 | .katex .mfrac > span > span { 270 | text-align: center; 271 | } 272 | .katex .mfrac .frac-line { 273 | display: inline-block; 274 | width: 100%; 275 | border-bottom-style: solid; 276 | } 277 | .katex .mfrac .frac-line, 278 | .katex .overline .overline-line, 279 | .katex .underline .underline-line, 280 | .katex .hline, 281 | .katex .hdashline, 282 | .katex .rule { 283 | min-height: 1px; 284 | } 285 | .katex .mspace { 286 | display: inline-block; 287 | } 288 | .katex .llap, 289 | .katex .rlap, 290 | .katex .clap { 291 | width: 0; 292 | position: relative; 293 | } 294 | .katex .llap > .inner, 295 | .katex .rlap > .inner, 296 | .katex .clap > .inner { 297 | position: absolute; 298 | } 299 | .katex .llap > .fix, 300 | .katex .rlap > .fix, 301 | .katex .clap > .fix { 302 | display: inline-block; 303 | } 304 | .katex .llap > .inner { 305 | right: 0; 306 | } 307 | .katex .rlap > .inner, 308 | .katex .clap > .inner { 309 | left: 0; 310 | } 311 | .katex .clap > .inner > span { 312 | margin-left: -50%; 313 | margin-right: 50%; 314 | } 315 | .katex .rule { 316 | display: inline-block; 317 | border: solid 0; 318 | position: relative; 319 | } 320 | .katex .overline .overline-line, 321 | .katex .underline .underline-line, 322 | .katex .hline { 323 | display: inline-block; 324 | width: 100%; 325 | border-bottom-style: solid; 326 | } 327 | .katex .hdashline { 328 | display: inline-block; 329 | width: 100%; 330 | border-bottom-style: dashed; 331 | } 332 | .katex .sqrt > .root { 333 | margin-left: 0.27777778em; 334 | margin-right: -0.55555556em; 335 | } 336 | .katex .sizing.reset-size1.size1, 337 | .katex .fontsize-ensurer.reset-size1.size1 { 338 | font-size: 1em; 339 | } 340 | .katex .sizing.reset-size1.size2, 341 | .katex .fontsize-ensurer.reset-size1.size2 { 342 | font-size: 1.2em; 343 | } 344 | .katex .sizing.reset-size1.size3, 345 | .katex .fontsize-ensurer.reset-size1.size3 { 346 | font-size: 1.4em; 347 | } 348 | .katex .sizing.reset-size1.size4, 349 | .katex .fontsize-ensurer.reset-size1.size4 { 350 | font-size: 1.6em; 351 | } 352 | .katex .sizing.reset-size1.size5, 353 | .katex .fontsize-ensurer.reset-size1.size5 { 354 | font-size: 1.8em; 355 | } 356 | .katex .sizing.reset-size1.size6, 357 | .katex .fontsize-ensurer.reset-size1.size6 { 358 | font-size: 2em; 359 | } 360 | .katex .sizing.reset-size1.size7, 361 | .katex .fontsize-ensurer.reset-size1.size7 { 362 | font-size: 2.4em; 363 | } 364 | .katex .sizing.reset-size1.size8, 365 | .katex .fontsize-ensurer.reset-size1.size8 { 366 | font-size: 2.88em; 367 | } 368 | .katex .sizing.reset-size1.size9, 369 | .katex .fontsize-ensurer.reset-size1.size9 { 370 | font-size: 3.456em; 371 | } 372 | .katex .sizing.reset-size1.size10, 373 | .katex .fontsize-ensurer.reset-size1.size10 { 374 | font-size: 4.148em; 375 | } 376 | .katex .sizing.reset-size1.size11, 377 | .katex .fontsize-ensurer.reset-size1.size11 { 378 | font-size: 4.976em; 379 | } 380 | .katex .sizing.reset-size2.size1, 381 | .katex .fontsize-ensurer.reset-size2.size1 { 382 | font-size: 0.83333333em; 383 | } 384 | .katex .sizing.reset-size2.size2, 385 | .katex .fontsize-ensurer.reset-size2.size2 { 386 | font-size: 1em; 387 | } 388 | .katex .sizing.reset-size2.size3, 389 | .katex .fontsize-ensurer.reset-size2.size3 { 390 | font-size: 1.16666667em; 391 | } 392 | .katex .sizing.reset-size2.size4, 393 | .katex .fontsize-ensurer.reset-size2.size4 { 394 | font-size: 1.33333333em; 395 | } 396 | .katex .sizing.reset-size2.size5, 397 | .katex .fontsize-ensurer.reset-size2.size5 { 398 | font-size: 1.5em; 399 | } 400 | .katex .sizing.reset-size2.size6, 401 | .katex .fontsize-ensurer.reset-size2.size6 { 402 | font-size: 1.66666667em; 403 | } 404 | .katex .sizing.reset-size2.size7, 405 | .katex .fontsize-ensurer.reset-size2.size7 { 406 | font-size: 2em; 407 | } 408 | .katex .sizing.reset-size2.size8, 409 | .katex .fontsize-ensurer.reset-size2.size8 { 410 | font-size: 2.4em; 411 | } 412 | .katex .sizing.reset-size2.size9, 413 | .katex .fontsize-ensurer.reset-size2.size9 { 414 | font-size: 2.88em; 415 | } 416 | .katex .sizing.reset-size2.size10, 417 | .katex .fontsize-ensurer.reset-size2.size10 { 418 | font-size: 3.45666667em; 419 | } 420 | .katex .sizing.reset-size2.size11, 421 | .katex .fontsize-ensurer.reset-size2.size11 { 422 | font-size: 4.14666667em; 423 | } 424 | .katex .sizing.reset-size3.size1, 425 | .katex .fontsize-ensurer.reset-size3.size1 { 426 | font-size: 0.71428571em; 427 | } 428 | .katex .sizing.reset-size3.size2, 429 | .katex .fontsize-ensurer.reset-size3.size2 { 430 | font-size: 0.85714286em; 431 | } 432 | .katex .sizing.reset-size3.size3, 433 | .katex .fontsize-ensurer.reset-size3.size3 { 434 | font-size: 1em; 435 | } 436 | .katex .sizing.reset-size3.size4, 437 | .katex .fontsize-ensurer.reset-size3.size4 { 438 | font-size: 1.14285714em; 439 | } 440 | .katex .sizing.reset-size3.size5, 441 | .katex .fontsize-ensurer.reset-size3.size5 { 442 | font-size: 1.28571429em; 443 | } 444 | .katex .sizing.reset-size3.size6, 445 | .katex .fontsize-ensurer.reset-size3.size6 { 446 | font-size: 1.42857143em; 447 | } 448 | .katex .sizing.reset-size3.size7, 449 | .katex .fontsize-ensurer.reset-size3.size7 { 450 | font-size: 1.71428571em; 451 | } 452 | .katex .sizing.reset-size3.size8, 453 | .katex .fontsize-ensurer.reset-size3.size8 { 454 | font-size: 2.05714286em; 455 | } 456 | .katex .sizing.reset-size3.size9, 457 | .katex .fontsize-ensurer.reset-size3.size9 { 458 | font-size: 2.46857143em; 459 | } 460 | .katex .sizing.reset-size3.size10, 461 | .katex .fontsize-ensurer.reset-size3.size10 { 462 | font-size: 2.96285714em; 463 | } 464 | .katex .sizing.reset-size3.size11, 465 | .katex .fontsize-ensurer.reset-size3.size11 { 466 | font-size: 3.55428571em; 467 | } 468 | .katex .sizing.reset-size4.size1, 469 | .katex .fontsize-ensurer.reset-size4.size1 { 470 | font-size: 0.625em; 471 | } 472 | .katex .sizing.reset-size4.size2, 473 | .katex .fontsize-ensurer.reset-size4.size2 { 474 | font-size: 0.75em; 475 | } 476 | .katex .sizing.reset-size4.size3, 477 | .katex .fontsize-ensurer.reset-size4.size3 { 478 | font-size: 0.875em; 479 | } 480 | .katex .sizing.reset-size4.size4, 481 | .katex .fontsize-ensurer.reset-size4.size4 { 482 | font-size: 1em; 483 | } 484 | .katex .sizing.reset-size4.size5, 485 | .katex .fontsize-ensurer.reset-size4.size5 { 486 | font-size: 1.125em; 487 | } 488 | .katex .sizing.reset-size4.size6, 489 | .katex .fontsize-ensurer.reset-size4.size6 { 490 | font-size: 1.25em; 491 | } 492 | .katex .sizing.reset-size4.size7, 493 | .katex .fontsize-ensurer.reset-size4.size7 { 494 | font-size: 1.5em; 495 | } 496 | .katex .sizing.reset-size4.size8, 497 | .katex .fontsize-ensurer.reset-size4.size8 { 498 | font-size: 1.8em; 499 | } 500 | .katex .sizing.reset-size4.size9, 501 | .katex .fontsize-ensurer.reset-size4.size9 { 502 | font-size: 2.16em; 503 | } 504 | .katex .sizing.reset-size4.size10, 505 | .katex .fontsize-ensurer.reset-size4.size10 { 506 | font-size: 2.5925em; 507 | } 508 | .katex .sizing.reset-size4.size11, 509 | .katex .fontsize-ensurer.reset-size4.size11 { 510 | font-size: 3.11em; 511 | } 512 | .katex .sizing.reset-size5.size1, 513 | .katex .fontsize-ensurer.reset-size5.size1 { 514 | font-size: 0.55555556em; 515 | } 516 | .katex .sizing.reset-size5.size2, 517 | .katex .fontsize-ensurer.reset-size5.size2 { 518 | font-size: 0.66666667em; 519 | } 520 | .katex .sizing.reset-size5.size3, 521 | .katex .fontsize-ensurer.reset-size5.size3 { 522 | font-size: 0.77777778em; 523 | } 524 | .katex .sizing.reset-size5.size4, 525 | .katex .fontsize-ensurer.reset-size5.size4 { 526 | font-size: 0.88888889em; 527 | } 528 | .katex .sizing.reset-size5.size5, 529 | .katex .fontsize-ensurer.reset-size5.size5 { 530 | font-size: 1em; 531 | } 532 | .katex .sizing.reset-size5.size6, 533 | .katex .fontsize-ensurer.reset-size5.size6 { 534 | font-size: 1.11111111em; 535 | } 536 | .katex .sizing.reset-size5.size7, 537 | .katex .fontsize-ensurer.reset-size5.size7 { 538 | font-size: 1.33333333em; 539 | } 540 | .katex .sizing.reset-size5.size8, 541 | .katex .fontsize-ensurer.reset-size5.size8 { 542 | font-size: 1.6em; 543 | } 544 | .katex .sizing.reset-size5.size9, 545 | .katex .fontsize-ensurer.reset-size5.size9 { 546 | font-size: 1.92em; 547 | } 548 | .katex .sizing.reset-size5.size10, 549 | .katex .fontsize-ensurer.reset-size5.size10 { 550 | font-size: 2.30444444em; 551 | } 552 | .katex .sizing.reset-size5.size11, 553 | .katex .fontsize-ensurer.reset-size5.size11 { 554 | font-size: 2.76444444em; 555 | } 556 | .katex .sizing.reset-size6.size1, 557 | .katex .fontsize-ensurer.reset-size6.size1 { 558 | font-size: 0.5em; 559 | } 560 | .katex .sizing.reset-size6.size2, 561 | .katex .fontsize-ensurer.reset-size6.size2 { 562 | font-size: 0.6em; 563 | } 564 | .katex .sizing.reset-size6.size3, 565 | .katex .fontsize-ensurer.reset-size6.size3 { 566 | font-size: 0.7em; 567 | } 568 | .katex .sizing.reset-size6.size4, 569 | .katex .fontsize-ensurer.reset-size6.size4 { 570 | font-size: 0.8em; 571 | } 572 | .katex .sizing.reset-size6.size5, 573 | .katex .fontsize-ensurer.reset-size6.size5 { 574 | font-size: 0.9em; 575 | } 576 | .katex .sizing.reset-size6.size6, 577 | .katex .fontsize-ensurer.reset-size6.size6 { 578 | font-size: 1em; 579 | } 580 | .katex .sizing.reset-size6.size7, 581 | .katex .fontsize-ensurer.reset-size6.size7 { 582 | font-size: 1.2em; 583 | } 584 | .katex .sizing.reset-size6.size8, 585 | .katex .fontsize-ensurer.reset-size6.size8 { 586 | font-size: 1.44em; 587 | } 588 | .katex .sizing.reset-size6.size9, 589 | .katex .fontsize-ensurer.reset-size6.size9 { 590 | font-size: 1.728em; 591 | } 592 | .katex .sizing.reset-size6.size10, 593 | .katex .fontsize-ensurer.reset-size6.size10 { 594 | font-size: 2.074em; 595 | } 596 | .katex .sizing.reset-size6.size11, 597 | .katex .fontsize-ensurer.reset-size6.size11 { 598 | font-size: 2.488em; 599 | } 600 | .katex .sizing.reset-size7.size1, 601 | .katex .fontsize-ensurer.reset-size7.size1 { 602 | font-size: 0.41666667em; 603 | } 604 | .katex .sizing.reset-size7.size2, 605 | .katex .fontsize-ensurer.reset-size7.size2 { 606 | font-size: 0.5em; 607 | } 608 | .katex .sizing.reset-size7.size3, 609 | .katex .fontsize-ensurer.reset-size7.size3 { 610 | font-size: 0.58333333em; 611 | } 612 | .katex .sizing.reset-size7.size4, 613 | .katex .fontsize-ensurer.reset-size7.size4 { 614 | font-size: 0.66666667em; 615 | } 616 | .katex .sizing.reset-size7.size5, 617 | .katex .fontsize-ensurer.reset-size7.size5 { 618 | font-size: 0.75em; 619 | } 620 | .katex .sizing.reset-size7.size6, 621 | .katex .fontsize-ensurer.reset-size7.size6 { 622 | font-size: 0.83333333em; 623 | } 624 | .katex .sizing.reset-size7.size7, 625 | .katex .fontsize-ensurer.reset-size7.size7 { 626 | font-size: 1em; 627 | } 628 | .katex .sizing.reset-size7.size8, 629 | .katex .fontsize-ensurer.reset-size7.size8 { 630 | font-size: 1.2em; 631 | } 632 | .katex .sizing.reset-size7.size9, 633 | .katex .fontsize-ensurer.reset-size7.size9 { 634 | font-size: 1.44em; 635 | } 636 | .katex .sizing.reset-size7.size10, 637 | .katex .fontsize-ensurer.reset-size7.size10 { 638 | font-size: 1.72833333em; 639 | } 640 | .katex .sizing.reset-size7.size11, 641 | .katex .fontsize-ensurer.reset-size7.size11 { 642 | font-size: 2.07333333em; 643 | } 644 | .katex .sizing.reset-size8.size1, 645 | .katex .fontsize-ensurer.reset-size8.size1 { 646 | font-size: 0.34722222em; 647 | } 648 | .katex .sizing.reset-size8.size2, 649 | .katex .fontsize-ensurer.reset-size8.size2 { 650 | font-size: 0.41666667em; 651 | } 652 | .katex .sizing.reset-size8.size3, 653 | .katex .fontsize-ensurer.reset-size8.size3 { 654 | font-size: 0.48611111em; 655 | } 656 | .katex .sizing.reset-size8.size4, 657 | .katex .fontsize-ensurer.reset-size8.size4 { 658 | font-size: 0.55555556em; 659 | } 660 | .katex .sizing.reset-size8.size5, 661 | .katex .fontsize-ensurer.reset-size8.size5 { 662 | font-size: 0.625em; 663 | } 664 | .katex .sizing.reset-size8.size6, 665 | .katex .fontsize-ensurer.reset-size8.size6 { 666 | font-size: 0.69444444em; 667 | } 668 | .katex .sizing.reset-size8.size7, 669 | .katex .fontsize-ensurer.reset-size8.size7 { 670 | font-size: 0.83333333em; 671 | } 672 | .katex .sizing.reset-size8.size8, 673 | .katex .fontsize-ensurer.reset-size8.size8 { 674 | font-size: 1em; 675 | } 676 | .katex .sizing.reset-size8.size9, 677 | .katex .fontsize-ensurer.reset-size8.size9 { 678 | font-size: 1.2em; 679 | } 680 | .katex .sizing.reset-size8.size10, 681 | .katex .fontsize-ensurer.reset-size8.size10 { 682 | font-size: 1.44027778em; 683 | } 684 | .katex .sizing.reset-size8.size11, 685 | .katex .fontsize-ensurer.reset-size8.size11 { 686 | font-size: 1.72777778em; 687 | } 688 | .katex .sizing.reset-size9.size1, 689 | .katex .fontsize-ensurer.reset-size9.size1 { 690 | font-size: 0.28935185em; 691 | } 692 | .katex .sizing.reset-size9.size2, 693 | .katex .fontsize-ensurer.reset-size9.size2 { 694 | font-size: 0.34722222em; 695 | } 696 | .katex .sizing.reset-size9.size3, 697 | .katex .fontsize-ensurer.reset-size9.size3 { 698 | font-size: 0.40509259em; 699 | } 700 | .katex .sizing.reset-size9.size4, 701 | .katex .fontsize-ensurer.reset-size9.size4 { 702 | font-size: 0.46296296em; 703 | } 704 | .katex .sizing.reset-size9.size5, 705 | .katex .fontsize-ensurer.reset-size9.size5 { 706 | font-size: 0.52083333em; 707 | } 708 | .katex .sizing.reset-size9.size6, 709 | .katex .fontsize-ensurer.reset-size9.size6 { 710 | font-size: 0.5787037em; 711 | } 712 | .katex .sizing.reset-size9.size7, 713 | .katex .fontsize-ensurer.reset-size9.size7 { 714 | font-size: 0.69444444em; 715 | } 716 | .katex .sizing.reset-size9.size8, 717 | .katex .fontsize-ensurer.reset-size9.size8 { 718 | font-size: 0.83333333em; 719 | } 720 | .katex .sizing.reset-size9.size9, 721 | .katex .fontsize-ensurer.reset-size9.size9 { 722 | font-size: 1em; 723 | } 724 | .katex .sizing.reset-size9.size10, 725 | .katex .fontsize-ensurer.reset-size9.size10 { 726 | font-size: 1.20023148em; 727 | } 728 | .katex .sizing.reset-size9.size11, 729 | .katex .fontsize-ensurer.reset-size9.size11 { 730 | font-size: 1.43981481em; 731 | } 732 | .katex .sizing.reset-size10.size1, 733 | .katex .fontsize-ensurer.reset-size10.size1 { 734 | font-size: 0.24108004em; 735 | } 736 | .katex .sizing.reset-size10.size2, 737 | .katex .fontsize-ensurer.reset-size10.size2 { 738 | font-size: 0.28929605em; 739 | } 740 | .katex .sizing.reset-size10.size3, 741 | .katex .fontsize-ensurer.reset-size10.size3 { 742 | font-size: 0.33751205em; 743 | } 744 | .katex .sizing.reset-size10.size4, 745 | .katex .fontsize-ensurer.reset-size10.size4 { 746 | font-size: 0.38572806em; 747 | } 748 | .katex .sizing.reset-size10.size5, 749 | .katex .fontsize-ensurer.reset-size10.size5 { 750 | font-size: 0.43394407em; 751 | } 752 | .katex .sizing.reset-size10.size6, 753 | .katex .fontsize-ensurer.reset-size10.size6 { 754 | font-size: 0.48216008em; 755 | } 756 | .katex .sizing.reset-size10.size7, 757 | .katex .fontsize-ensurer.reset-size10.size7 { 758 | font-size: 0.57859209em; 759 | } 760 | .katex .sizing.reset-size10.size8, 761 | .katex .fontsize-ensurer.reset-size10.size8 { 762 | font-size: 0.69431051em; 763 | } 764 | .katex .sizing.reset-size10.size9, 765 | .katex .fontsize-ensurer.reset-size10.size9 { 766 | font-size: 0.83317261em; 767 | } 768 | .katex .sizing.reset-size10.size10, 769 | .katex .fontsize-ensurer.reset-size10.size10 { 770 | font-size: 1em; 771 | } 772 | .katex .sizing.reset-size10.size11, 773 | .katex .fontsize-ensurer.reset-size10.size11 { 774 | font-size: 1.19961427em; 775 | } 776 | .katex .sizing.reset-size11.size1, 777 | .katex .fontsize-ensurer.reset-size11.size1 { 778 | font-size: 0.20096463em; 779 | } 780 | .katex .sizing.reset-size11.size2, 781 | .katex .fontsize-ensurer.reset-size11.size2 { 782 | font-size: 0.24115756em; 783 | } 784 | .katex .sizing.reset-size11.size3, 785 | .katex .fontsize-ensurer.reset-size11.size3 { 786 | font-size: 0.28135048em; 787 | } 788 | .katex .sizing.reset-size11.size4, 789 | .katex .fontsize-ensurer.reset-size11.size4 { 790 | font-size: 0.32154341em; 791 | } 792 | .katex .sizing.reset-size11.size5, 793 | .katex .fontsize-ensurer.reset-size11.size5 { 794 | font-size: 0.36173633em; 795 | } 796 | .katex .sizing.reset-size11.size6, 797 | .katex .fontsize-ensurer.reset-size11.size6 { 798 | font-size: 0.40192926em; 799 | } 800 | .katex .sizing.reset-size11.size7, 801 | .katex .fontsize-ensurer.reset-size11.size7 { 802 | font-size: 0.48231511em; 803 | } 804 | .katex .sizing.reset-size11.size8, 805 | .katex .fontsize-ensurer.reset-size11.size8 { 806 | font-size: 0.57877814em; 807 | } 808 | .katex .sizing.reset-size11.size9, 809 | .katex .fontsize-ensurer.reset-size11.size9 { 810 | font-size: 0.69453376em; 811 | } 812 | .katex .sizing.reset-size11.size10, 813 | .katex .fontsize-ensurer.reset-size11.size10 { 814 | font-size: 0.83360129em; 815 | } 816 | .katex .sizing.reset-size11.size11, 817 | .katex .fontsize-ensurer.reset-size11.size11 { 818 | font-size: 1em; 819 | } 820 | .katex .delimsizing.size1 { 821 | font-family: KaTeX_Size1; 822 | } 823 | .katex .delimsizing.size2 { 824 | font-family: KaTeX_Size2; 825 | } 826 | .katex .delimsizing.size3 { 827 | font-family: KaTeX_Size3; 828 | } 829 | .katex .delimsizing.size4 { 830 | font-family: KaTeX_Size4; 831 | } 832 | .katex .delimsizing.mult .delim-size1 > span { 833 | font-family: KaTeX_Size1; 834 | } 835 | .katex .delimsizing.mult .delim-size4 > span { 836 | font-family: KaTeX_Size4; 837 | } 838 | .katex .nulldelimiter { 839 | display: inline-block; 840 | width: 0.12em; 841 | } 842 | .katex .delimcenter { 843 | position: relative; 844 | } 845 | .katex .op-symbol { 846 | position: relative; 847 | } 848 | .katex .op-symbol.small-op { 849 | font-family: KaTeX_Size1; 850 | } 851 | .katex .op-symbol.large-op { 852 | font-family: KaTeX_Size2; 853 | } 854 | .katex .op-limits > .vlist-t { 855 | text-align: center; 856 | } 857 | .katex .accent > .vlist-t { 858 | text-align: center; 859 | } 860 | .katex .accent .accent-body { 861 | position: relative; 862 | } 863 | .katex .accent .accent-body:not(.accent-full) { 864 | width: 0; 865 | } 866 | .katex .overlay { 867 | display: block; 868 | } 869 | .katex .mtable .vertical-separator { 870 | display: inline-block; 871 | min-width: 1px; 872 | } 873 | .katex .mtable .arraycolsep { 874 | display: inline-block; 875 | } 876 | .katex .mtable .col-align-c > .vlist-t { 877 | text-align: center; 878 | } 879 | .katex .mtable .col-align-l > .vlist-t { 880 | text-align: left; 881 | } 882 | .katex .mtable .col-align-r > .vlist-t { 883 | text-align: right; 884 | } 885 | .katex .svg-align { 886 | text-align: left; 887 | } 888 | .katex svg { 889 | display: block; 890 | position: absolute; 891 | width: 100%; 892 | height: inherit; 893 | fill: currentColor; 894 | stroke: currentColor; 895 | fill-rule: nonzero; 896 | fill-opacity: 1; 897 | stroke-width: 1; 898 | stroke-linecap: butt; 899 | stroke-linejoin: miter; 900 | stroke-miterlimit: 4; 901 | stroke-dasharray: none; 902 | stroke-dashoffset: 0; 903 | stroke-opacity: 1; 904 | } 905 | .katex svg path { 906 | stroke: none; 907 | } 908 | .katex img { 909 | border-style: none; 910 | min-width: 0; 911 | min-height: 0; 912 | max-width: none; 913 | max-height: none; 914 | } 915 | .katex .stretchy { 916 | width: 100%; 917 | display: block; 918 | position: relative; 919 | overflow: hidden; 920 | } 921 | .katex .stretchy::before, 922 | .katex .stretchy::after { 923 | content: ""; 924 | } 925 | .katex .hide-tail { 926 | width: 100%; 927 | position: relative; 928 | overflow: hidden; 929 | } 930 | .katex .halfarrow-left { 931 | position: absolute; 932 | left: 0; 933 | width: 50.2%; 934 | overflow: hidden; 935 | } 936 | .katex .halfarrow-right { 937 | position: absolute; 938 | right: 0; 939 | width: 50.2%; 940 | overflow: hidden; 941 | } 942 | .katex .brace-left { 943 | position: absolute; 944 | left: 0; 945 | width: 25.1%; 946 | overflow: hidden; 947 | } 948 | .katex .brace-center { 949 | position: absolute; 950 | left: 25%; 951 | width: 50%; 952 | overflow: hidden; 953 | } 954 | .katex .brace-right { 955 | position: absolute; 956 | right: 0; 957 | width: 25.1%; 958 | overflow: hidden; 959 | } 960 | .katex .x-arrow-pad { 961 | padding: 0 0.5em; 962 | } 963 | .katex .x-arrow, 964 | .katex .mover, 965 | .katex .munder { 966 | text-align: center; 967 | } 968 | .katex .boxpad { 969 | padding: 0 0.3em 0 0.3em; 970 | } 971 | .katex .fbox, 972 | .katex .fcolorbox { 973 | box-sizing: border-box; 974 | border: 0.04em solid; 975 | } 976 | .katex .cancel-pad { 977 | padding: 0 0.2em 0 0.2em; 978 | } 979 | .katex .cancel-lap { 980 | margin-left: -0.2em; 981 | margin-right: -0.2em; 982 | } 983 | .katex .sout { 984 | border-bottom-style: solid; 985 | border-bottom-width: 0.08em; 986 | } 987 | .katex-display { 988 | display: block; 989 | margin: 1em 0; 990 | text-align: center; 991 | } 992 | .katex-display > .katex { 993 | display: block; 994 | text-align: center; 995 | white-space: nowrap; 996 | } 997 | .katex-display > .katex > .katex-html { 998 | display: block; 999 | position: relative; 1000 | } 1001 | .katex-display > .katex > .katex-html > .tag { 1002 | position: absolute; 1003 | right: 0; 1004 | } 1005 | .katex-display.leqno > .katex > .katex-html > .tag { 1006 | left: 0; 1007 | right: auto; 1008 | } 1009 | .katex-display.fleqn > .katex { 1010 | text-align: left; 1011 | } 1012 | 1013 | -------------------------------------------------------------------------------- /css/prism.css: -------------------------------------------------------------------------------- 1 | .token.comment, 2 | .token.prolog, 3 | .token.doctype, 4 | .token.cdata { 5 | color: #998; 6 | font-style: italic 7 | } 8 | 9 | .token.string, 10 | .token.attr-value { 11 | color: #d14 12 | } 13 | 14 | .token.entity, 15 | .token.url, 16 | .token.symbol, 17 | .token.number, 18 | .token.boolean, 19 | .token.variable, 20 | .token.constant, 21 | .token.property, 22 | .token.regex, 23 | .token.inserted { 24 | color: #099 25 | } 26 | 27 | .token.atrule, 28 | .token.keyword, 29 | .token.attr-name, 30 | .language-autohotkey .token.selector { 31 | font-weight: bold 32 | } 33 | 34 | .token.function, 35 | .token.deleted, 36 | .language-autohotkey .token.tag { 37 | color: #900 38 | } 39 | 40 | .token.class-name { 41 | color: #458; 42 | font-weight: bold 43 | } 44 | 45 | .token.tag, 46 | .token.selector, 47 | .language-autohotkey .token.keyword { 48 | color: #009 49 | } 50 | 51 | .token.important, 52 | .token.function, 53 | .token.bold { 54 | font-weight: bold 55 | } 56 | 57 | .token.italic { 58 | font-style: italic 59 | } 60 | -------------------------------------------------------------------------------- /icons/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/icons/128x128.png -------------------------------------------------------------------------------- /icons/16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/icons/16x16.png -------------------------------------------------------------------------------- /icons/48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/painyeph/GitLabMarkdownViewer/a1a3b0150c7bb26efe1a953f6c7d4eec0816fb87/icons/48x48.png -------------------------------------------------------------------------------- /js/main.js: -------------------------------------------------------------------------------- 1 | const getURL = (typeof browser === 'undefined') ? chrome.runtime.getURL : browser.runtime.getURL; 2 | 3 | const markdownText = document.body.textContent; 4 | document.body.textContent = ''; 5 | 6 | // Style the page and code highlights. 7 | const gitlabStyle = document.createElement('link'); 8 | gitlabStyle.rel = 'stylesheet'; 9 | gitlabStyle.type = 'text/css'; 10 | gitlabStyle.href = getURL('css/gitlab.css'); 11 | document.head.appendChild(gitlabStyle); 12 | 13 | const prismStyle = document.createElement('link'); 14 | prismStyle.rel = 'stylesheet'; 15 | prismStyle.type = 'text/css'; 16 | prismStyle.href = getURL('css/prism.css'); 17 | document.head.appendChild(prismStyle); 18 | 19 | const mathStyle = document.createElement('link'); 20 | mathStyle.rel = 'stylesheet'; 21 | mathStyle.type = 'text/css'; 22 | mathStyle.href = getURL('css/katex.css'); 23 | document.head.appendChild(mathStyle); 24 | 25 | // This is considered a good practice for mobiles. 26 | var viewport = document.createElement('meta'); 27 | viewport.name = 'viewport'; 28 | viewport.content = 'width=device-width, initial-scale=1'; 29 | document.head.appendChild(viewport); 30 | 31 | // Insert html for the markdown into an element for processing. 32 | var markdownRoot = document.createElement('div'); 33 | markdownRoot.className = "wiki"; 34 | markdownRoot.innerHTML = markdownit({ 35 | html: true, 36 | linkify: true, 37 | highlight: function (str, lang) { 38 | if (!Prism.languages[lang]) return ''; 39 | return Prism.highlight(str, Prism.languages[lang]); 40 | } 41 | }).use(texmath.use(katex), {delimiters: 'gitlab'}) 42 | .use(markdownitHTML5Embed, { html5embed: { useImageSyntax: true } }) 43 | .render(markdownText); 44 | 45 | // Trample out script elements. 46 | markdownRoot.querySelectorAll('script').forEach(each => { 47 | each.innerText = ''; 48 | each.src = ''; 49 | }); 50 | 51 | // Remove hrefs that don't look like URLs. 52 | const likeUrl = /^[-a-z]*:\/\//i; 53 | markdownRoot.querySelectorAll('[href]').forEach(each => { 54 | if (!likeUrl.test(each.href)) { 55 | each.href = ''; 56 | } 57 | }); 58 | 59 | // Remove event handlers. (Others?) 60 | var events = ['onclick', 'onload', 'onmouseover', 'onmouseout']; 61 | var eventsJoined = '[' + events.join('],[') + ']'; 62 | markdownRoot.querySelectorAll(eventsJoined).forEach(each => { 63 | events.forEach(attr => { 64 | if (each.getAttribute(attr)) { each.setAttribute(attr, null); } 65 | }); 66 | }); 67 | 68 | // Set the page title. 69 | var title = markdownRoot.querySelector('h1, h2, h3, h4, h5, h6'); // First header 70 | if (title) { 71 | title = title.textContent.trim(); 72 | } else { 73 | title = markdownRoot.textContent.trim().split("\n", 1)[0].trim(); // First line 74 | } 75 | if (title.length > 50) { 76 | title = title.substr(0, 50) + "..."; 77 | } 78 | document.title = title; 79 | 80 | // Finally insert the markdown. 81 | document.body.appendChild(markdownRoot); 82 | 83 | // Jump to anchor 84 | if (location.hash) { 85 | setTimeout(function () { 86 | if (typeof browser !== "undefined") { // Firefox 87 | window.location.hash = location.hash; 88 | } else { // Chrome 89 | window.location.href = location.hash; 90 | } 91 | }, 0); 92 | } 93 | -------------------------------------------------------------------------------- /js/texmath.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) Stefan Goessner - 2017-19. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 'use strict'; 6 | 7 | function texmath(md,options) { 8 | let delimiters = options && options.delimiters || 'dollars', 9 | macros = options && options.macros; 10 | 11 | if (delimiters in texmath.rules) { 12 | for (let rule of texmath.rules[delimiters].inline) { 13 | md.inline.ruler.before('escape', rule.name, texmath.inline(rule)); // ! important 14 | md.renderer.rules[rule.name] = (tokens, idx) => rule.tmpl.replace(/\$1/,texmath.render(tokens[idx].content,false,macros)); 15 | } 16 | 17 | for (let rule of texmath.rules[delimiters].block) { 18 | md.block.ruler.before('fence', rule.name, texmath.block(rule)); 19 | md.renderer.rules[rule.name] = (tokens, idx) => rule.tmpl.replace(/\$2/,tokens[idx].info) // equation number .. ? 20 | .replace(/\$1/,texmath.render(tokens[idx].content,true,macros)); 21 | } 22 | } 23 | } 24 | 25 | texmath.applyRule = function(rule, str, beg, inBlockquote) { 26 | let pre, match, post; 27 | rule.rex.lastIndex = beg; 28 | 29 | pre = str.startsWith(rule.tag,beg) && (!rule.pre || rule.pre(str,beg)); 30 | match = pre && rule.rex.exec(str); 31 | if (match) { 32 | match.lastIndex = rule.rex.lastIndex; 33 | post = (!rule.post || rule.post(str, match.lastIndex-1)) // valid post-condition 34 | && (!inBlockquote || !match[1].includes('\n')); // remove evil blockquote bug (https://github.com/goessner/mdmath/issues/50) 35 | } 36 | rule.rex.lastIndex = 0; 37 | 38 | return post && match; 39 | } 40 | 41 | // texmath.inline = (rule) => dollar; // just for testing .. 42 | 43 | texmath.inline = (rule) => 44 | function(state, silent) { 45 | let res = texmath.applyRule(rule, state.src, state.pos); 46 | if (res) { 47 | if (!silent) { 48 | let token = state.push(rule.name, 'math', 0); 49 | token.content = res[1]; // group 1 from regex .. 50 | token.markup = rule.tag; 51 | } 52 | state.pos = res.lastIndex; 53 | } 54 | return !!res; 55 | } 56 | 57 | texmath.block = (rule) => 58 | function(state, begLine, endLine, silent) { 59 | let res = texmath.applyRule(rule, state.src, state.bMarks[begLine] + state.tShift[begLine], state.parentType==='blockquote'); 60 | if (res) { 61 | if (!silent) { 62 | let token = state.push(rule.name, 'math', 0); 63 | token.block = true; 64 | token.content = res[1]; 65 | token.info = res[res.length-1]; 66 | token.markup = rule.tag; 67 | } 68 | for (let line=begLine, endpos=res.lastIndex-1; line < endLine; line++) 69 | if (endpos >= state.bMarks[line] && endpos <= state.eMarks[line]) { // line for end of block math found ... 70 | state.line = line+1; 71 | break; 72 | } 73 | state.pos = res.lastIndex; 74 | } 75 | return !!res; 76 | } 77 | 78 | texmath.render = function(tex,displayMode,macros) { 79 | let res; 80 | try { 81 | res = texmath.katex.renderToString(tex,{throwOnError:false,displayMode,macros}); 82 | } 83 | catch(err) { 84 | res = tex+": "+err.message.replace("<","<"); 85 | } 86 | return res; 87 | } 88 | 89 | texmath.use = function(katex) { // math renderer used ... 90 | texmath.katex = katex; // ... katex solely at current ... 91 | return texmath; 92 | } 93 | 94 | /* 95 | function dollar(state, silent) { 96 | var start, max, marker, matchStart, matchEnd, token, 97 | pos = state.pos, 98 | ch = state.src.charCodeAt(pos); 99 | 100 | if (ch !== 0x24) { return false; } // $ 101 | 102 | start = pos; 103 | pos++; 104 | max = state.posMax; 105 | 106 | while (pos < max && state.src.charCodeAt(pos) === 0x24) { pos++; } 107 | 108 | marker = state.src.slice(start, pos); 109 | 110 | matchStart = matchEnd = pos; 111 | 112 | while ((matchStart = state.src.indexOf('$', matchEnd)) !== -1) { 113 | matchEnd = matchStart + 1; 114 | 115 | while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x24) { matchEnd++; } 116 | 117 | if (matchEnd - matchStart === marker.length) { 118 | if (!silent) { 119 | token = state.push('math_inline', 'math', 0); 120 | token.markup = marker; 121 | token.content = state.src.slice(pos, matchStart) 122 | .replace(/[ \n]+/g, ' ') 123 | .trim(); 124 | } 125 | state.pos = matchEnd; 126 | return true; 127 | } 128 | } 129 | 130 | if (!silent) { state.pending += marker; } 131 | state.pos += marker.length; 132 | return true; 133 | }; 134 | */ 135 | 136 | texmath.$_pre = (str,beg) => { 137 | let prv = beg > 0 ? str[beg-1].charCodeAt(0) : false; 138 | return !prv || prv !== 0x5c // no backslash, 139 | && (prv < 0x30 || prv > 0x39); // no decimal digit .. before opening '$' 140 | } 141 | texmath.$_post = (str,end) => { 142 | let nxt = str[end+1] && str[end+1].charCodeAt(0); 143 | return !nxt || nxt < 0x30 || nxt > 0x39; // no decimal digit .. after closing '$' 144 | } 145 | 146 | texmath.rules = { 147 | brackets: { 148 | inline: [ 149 | { name: 'math_inline', 150 | rex: /\\\((.+?)\\\)/gy, 151 | tmpl: '$1', 152 | tag: '\\(' 153 | } 154 | ], 155 | block: [ 156 | { name: 'math_block_eqno', 157 | rex: /\\\[(((?!\\\]|\\\[)[\s\S])+?)\\\]\s*?\(([^)$\r\n]+?)\)/gmy, 158 | tmpl: '
$1($2)
', 159 | tag: '\\[' 160 | }, 161 | { name: 'math_block', 162 | rex: /\\\[([\s\S]+?)\\\]/gmy, 163 | tmpl: '
$1
', 164 | tag: '\\[' 165 | } 166 | ] 167 | }, 168 | gitlab: { 169 | inline: [ 170 | { name: 'math_inline', 171 | rex: /\$`(.+?)`\$/gy, 172 | tmpl: '$1', 173 | tag: '$`' 174 | } 175 | ], 176 | block: [ 177 | { name: 'math_block_eqno', 178 | rex: /`{3}math\s+?([^`]+?)\s+?`{3}\s*?\(([^)$\r\n]+?)\)/gmy, 179 | tmpl: '
$1($2)
', 180 | tag: '```math' 181 | }, 182 | { name: 'math_block', 183 | rex: /`{3}math\s+?([^`]+?)\s+?`{3}/gmy, 184 | tmpl: '
$1
', 185 | tag: '```math' 186 | } 187 | ] 188 | }, 189 | kramdown: { 190 | inline: [ 191 | { name: 'math_inline', 192 | rex: /\${2}([^$\r\n]*?)\${2}/gy, 193 | tmpl: '$1', 194 | tag: '$$' 195 | } 196 | ], 197 | block: [ 198 | { name: 'math_block_eqno', 199 | rex: /\${2}([^$]*?)\${2}\s*?\(([^)$\r\n]+?)\)/gmy, 200 | tmpl: '
$1($2)
', 201 | tag: '$$' 202 | }, 203 | { name: 'math_block', 204 | rex: /\${2}([^$]*?)\${2}/gmy, 205 | tmpl: '
$1
', 206 | tag: '$$' 207 | } 208 | ] 209 | }, 210 | dollars: { 211 | inline: [ 212 | { name: 'math_inline', 213 | rex: /\$(\S[^$\r\n]*?[^\s\\]{1}?)\$/gy, 214 | tmpl: '$1', 215 | tag: '$', 216 | pre: texmath.$_pre, 217 | post: texmath.$_post 218 | }, 219 | { name: 'math_single', 220 | rex: /\$([^$\s\\]{1}?)\$/gy, 221 | tmpl: '$1', 222 | tag: '$', 223 | pre: texmath.$_pre, 224 | post: texmath.$_post 225 | } 226 | ], 227 | block: [ 228 | { name: 'math_block_eqno', 229 | rex: /\${2}([^$]*?)\${2}\s*?\(([^)$\r\n]+?)\)/gmy, 230 | tmpl: '
$1($2)
', 231 | tag: '$$' 232 | }, 233 | { name: 'math_block', 234 | rex: /\${2}([^$]*?)\${2}/gmy, 235 | tmpl: '
$1
', 236 | tag: '$$' 237 | } 238 | ] 239 | } 240 | }; 241 | 242 | if (typeof module === "object" && module.exports) 243 | module.exports = texmath; -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | "manifest_version": 2, 4 | "name": "GitLab Markdown Viewer", 5 | "version": "1.2.8", 6 | "description": "Renders markdown files in GitLab style.", 7 | 8 | "icons": { 9 | "16": "icons/16x16.png", 10 | "48": "icons/48x48.png", 11 | "128": "icons/128x128.png" 12 | }, 13 | 14 | "content_scripts": [ 15 | { 16 | "matches": ["file:///*.md", "file:///*.markdown"], 17 | "js": ["js/markdown-it.js", 18 | "js/markdown-it-html5-embed.js", 19 | "js/prism.js", 20 | "js/katex.js", 21 | "js/texmath.js", 22 | "js/main.js" 23 | ] 24 | } 25 | ], 26 | 27 | "web_accessible_resources": [ 28 | "css/gitlab.css", 29 | "css/prism.css", 30 | "css/katex.css", 31 | "css/fonts/KaTeX_AMS-Regular.woff2", 32 | "css/fonts/KaTeX_Caligraphic-Bold.woff2", 33 | "css/fonts/KaTeX_Caligraphic-Regular.woff2", 34 | "css/fonts/KaTeX_Fraktur-Bold.woff2", 35 | "css/fonts/KaTeX_Fraktur-Regular.woff2", 36 | "css/fonts/KaTeX_Main-Bold.woff2", 37 | "css/fonts/KaTeX_Main-BoldItalic.woff2", 38 | "css/fonts/KaTeX_Main-Italic.woff2", 39 | "css/fonts/KaTeX_Main-Regular.woff2", 40 | "css/fonts/KaTeX_Math-BoldItalic.woff2", 41 | "css/fonts/KaTeX_Math-Italic.woff2", 42 | "css/fonts/KaTeX_SansSerif-Bold.woff2", 43 | "css/fonts/KaTeX_SansSerif-Italic.woff2", 44 | "css/fonts/KaTeX_SansSerif-Regular.woff2", 45 | "css/fonts/KaTeX_Script-Regular.woff2", 46 | "css/fonts/KaTeX_Size1-Regular.woff2", 47 | "css/fonts/KaTeX_Size2-Regular.woff2", 48 | "css/fonts/KaTeX_Size3-Regular.woff2", 49 | "css/fonts/KaTeX_Size4-Regular.woff2", 50 | "css/fonts/KaTeX_Typewriter-Regular.woff2" 51 | ] 52 | 53 | } 54 | --------------------------------------------------------------------------------