From d25fa3a3d91e1f7671dab1245718ef4526e6509b Mon Sep 17 00:00:00 2001 From: Justine Tunney Date: Tue, 5 Nov 2024 23:07:18 -0800 Subject: [PATCH] Improve highlighting in new web ui Markdown url syntax is now supported. Typos are fixed. Cmake is ported. --- llamafile/server/www/chatbot.png | Bin 7711 -> 17577 bytes llamafile/server/www/highlight_cmake.js | 261 +++++++++++++++++++++ llamafile/server/www/highlight_make.js | 36 +-- llamafile/server/www/highlight_markdown.js | 107 ++++++++- llamafile/server/www/highlight_ocaml.js | 2 +- llamafile/server/www/index.html | 3 +- 6 files changed, 386 insertions(+), 23 deletions(-) create mode 100644 llamafile/server/www/highlight_cmake.js diff --git a/llamafile/server/www/chatbot.png b/llamafile/server/www/chatbot.png index 20557f4f43a8490f90fbae57c7987d94aaa77dee..0e96111c1fe10fbf6d1b4c3307013eedc6ea2f9f 100644 GIT binary patch literal 17577 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') { + let a = this.push('a', ''); + a.innerText = this.href; + a.href = this.href; + this.pop(); + this.href = ''; + this.state = HighlightMarkdown.NORMAL; + } else if (c == '\\') { + this.state = HighlightMarkdown.LT_BACKSLASH; + } else { + this.href += c; + } + break; + + case HighlightMarkdown.LT_BACKSLASH: + this.href += c; + this.state = HighlightMarkdown.LT; + break; + + case HighlightMarkdown.LSB: + if (c == ']') { + this.state = HighlightMarkdown.LSB_RSB; + } else if (c == '\\') { + this.state = HighlightMarkdown.LSB_BACKSLASH; + } else { + this.text += c; + } + break; + + case HighlightMarkdown.LSB_BACKSLASH: + this.text += c; + this.state = HighlightMarkdown.LSB; + break; + + case HighlightMarkdown.LSB_RSB: + if (c == '(') { + this.state = HighlightMarkdown.LSB_RSB_LPAREN; + } else { + this.append('[' + this.text + ']'); + this.text = ''; + this.epsilon(HighlightMarkdown.NORMAL); + } + break; + + case HighlightMarkdown.LSB_RSB_LPAREN: + if (c == ')') { + let a = this.push('a', ''); + a.innerText = this.text; + a.href = this.href; + this.pop(); + this.href = ''; + this.text = ''; + this.state = HighlightMarkdown.NORMAL; + } else if (c == '\\') { + this.state = HighlightMarkdown.LSB_RSB_LPAREN_BACKSLASH; + } else { + this.href += c; + } + break; + + case HighlightMarkdown.LSB_RSB_LPAREN_BACKSLASH: + this.href += c; + this.state = HighlightMarkdown.LSB_RSB_LPAREN; + break; + default: throw new Error('Invalid state'); } @@ -335,6 +416,26 @@ class HighlightMarkdown extends Highlighter { this.highlighter = null; this.pop(); break; + case HighlightMarkdown.LT: + case HighlightMarkdown.LT_BACKSLASH: + this.append('<' + this.href); + this.href = ''; + break; + case HighlightMarkdown.LSB: + case HighlightMarkdown.LSB_BACKSLASH: + this.append('[' + this.text); + this.text = ''; + break; + case HighlightMarkdown.LSB_RSB: + this.append('[' + this.text + ']'); + this.text = ''; + break; + case HighlightMarkdown.LSB_RSB_LPAREN: + case HighlightMarkdown.LSB_RSB_LPAREN_BACKSLASH: + this.append('[' + this.text + '](' + this.href); + this.text = ''; + this.href = ''; + break; default: break; } diff --git a/llamafile/server/www/highlight_ocaml.js b/llamafile/server/www/highlight_ocaml.js index f37559ea60..61b1d5ba14 100644 --- a/llamafile/server/www/highlight_ocaml.js +++ b/llamafile/server/www/highlight_ocaml.js @@ -263,7 +263,7 @@ class HighlightOcaml extends Highlighter { this.word += c; } else { this.append('{'); - if (this.word.empty()) { + if (!this.word) { this.epsilon(HighlightOcaml.NORMAL); } else { this.epsilon(HighlightOcaml.WORD); diff --git a/llamafile/server/www/index.html b/llamafile/server/www/index.html index c1df19133e..75854d6526 100644 --- a/llamafile/server/www/index.html +++ b/llamafile/server/www/index.html @@ -8,7 +8,7 @@
-

[logo] llamafile

+

[logo] llamafile

@@ -72,5 +72,6 @@

[logo] llamafile

+