From 59b2587c8de746909eea87c4852eb0456a47f14e Mon Sep 17 00:00:00 2001 From: tobil4sk Date: Fri, 2 Aug 2024 06:58:10 +0100 Subject: [PATCH] Update highlighter library (#472) * Update highlighter library * [earthly] Update earthly image focal has a node version that is too old * Update readme setup info We no longer need an ancient version of node for vscode-textmate * Show generator complete message only when complete --- Earthfile | 2 +- README.md | 10 +---- package-lock.json | 80 ++++++++++++++++++++++++++-------------- package.json | 5 ++- src/Main.hx | 8 ++-- src/SyntaxHighlighter.hx | 68 +++++++++++++++------------------- 6 files changed, 93 insertions(+), 80 deletions(-) diff --git a/Earthfile b/Earthfile index a7d0f7c1..4ad9f118 100644 --- a/Earthfile +++ b/Earthfile @@ -1,5 +1,5 @@ VERSION 0.6 -FROM ubuntu:focal +FROM ubuntu:noble WORKDIR /workspace RUN apt-get update \ && apt-get install -qqy --no-install-recommends \ diff --git a/README.md b/README.md index 193a31fc..b43b922a 100644 --- a/README.md +++ b/README.md @@ -93,17 +93,11 @@ The haxe.org website was designed to be easy to generate, to run a local copy fo * Haxelib * Neko * cUrl -* NodeJS 10 (via `nvm`: ) +* NodeJS +* npm ### Setting up -* Set up node using nvm: - -```sh -nvm install 10 -npm config set node_gyp $(npm prefix -g)/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js -``` - * Install the dependencies `haxelib install all` and `npm install` in the root directory. * Update submodule dependencies `git submodule init && git submodule update`. * Clone the manual into the `manual` directory with `git clone https://github.com/HaxeFoundation/HaxeManual.git manual`. diff --git a/package-lock.json b/package-lock.json index a9896387..b67e66a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,54 +1,80 @@ { "name": "haxe-website", "version": "0.1.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "coffeescript": { + "packages": { + "": { + "name": "haxe-website", + "version": "0.1.0", + "devDependencies": { + "cson-parser": "3.0.0", + "vscode-oniguruma": "^2.0.1", + "vscode-textmate": "^9.1.0" + } + }, + "node_modules/coffeescript": { "version": "1.12.7", "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz", "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==", - "dev": true + "dev": true, + "bin": { + "cake": "bin/cake", + "coffee": "bin/coffee" + }, + "engines": { + "node": ">=0.8.0" + } }, - "cson-parser": { + "node_modules/cson-parser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cson-parser/-/cson-parser-3.0.0.tgz", "integrity": "sha512-khmLtNmwe6SSlWz5vrhay9yWd/Fwwyiel+vt+1vIcCT9AsdqNuLXuK9tYhhAw1FdSSHjLc56PW8xa565/x73XQ==", "dev": true, - "requires": { + "dependencies": { "coffeescript": "^1.10.0" } }, - "fast-plist": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/fast-plist/-/fast-plist-0.1.3.tgz", - "integrity": "sha512-d9cEfo/WcOezgPLAC/8t8wGb6YOD6JTCPMw2QcG2nAdFmyY+9rTUizCTaGjIZAloWENTEUMAPpkUAIJJJ0i96A==", + "node_modules/vscode-oniguruma": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-2.0.1.tgz", + "integrity": "sha512-poJU8iHIWnC3vgphJnrLZyI3YdqRlR27xzqDmpPXYzA93R4Gk8z7T6oqDzDoHjoikA2aS82crdXFkjELCdJsjQ==", "dev": true }, - "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "node_modules/vscode-textmate": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-9.1.0.tgz", + "integrity": "sha512-lxKSVp2DkFOx9RDAvpiYUrB9/KT1fAfi1aE8CBGstP8N7rLF+Seifj8kDA198X0mYj1CjQUC+81+nQf8CO0nVA==", + "dev": true + } + }, + "dependencies": { + "coffeescript": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz", + "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==", "dev": true }, - "oniguruma": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/oniguruma/-/oniguruma-6.2.1.tgz", - "integrity": "sha512-+qRtxMG41+datUUS3pqCPFuVinzLQzMzdbM+Ft5HpGTqKpupmWWWqDWdQjo+jJ1jzJKlFis/nUS0SFMEBztB8Q==", + "cson-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cson-parser/-/cson-parser-3.0.0.tgz", + "integrity": "sha512-khmLtNmwe6SSlWz5vrhay9yWd/Fwwyiel+vt+1vIcCT9AsdqNuLXuK9tYhhAw1FdSSHjLc56PW8xa565/x73XQ==", "dev": true, "requires": { - "nan": "^2.0.9" + "coffeescript": "^1.10.0" } }, + "vscode-oniguruma": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-2.0.1.tgz", + "integrity": "sha512-poJU8iHIWnC3vgphJnrLZyI3YdqRlR27xzqDmpPXYzA93R4Gk8z7T6oqDzDoHjoikA2aS82crdXFkjELCdJsjQ==", + "dev": true + }, "vscode-textmate": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-3.1.5.tgz", - "integrity": "sha512-GPDsyzgYTgdCi/K8VBPRKPdAwa4z0pWwiZhK/lH9ScWTptd5+Pd16kuywP+EJtLJRowXeNEQ2gR5SCw0ubTobA==", - "dev": true, - "requires": { - "fast-plist": "^0.1.2", - "oniguruma": "^6.0.1" - } + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-9.1.0.tgz", + "integrity": "sha512-lxKSVp2DkFOx9RDAvpiYUrB9/KT1fAfi1aE8CBGstP8N7rLF+Seifj8kDA198X0mYj1CjQUC+81+nQf8CO0nVA==", + "dev": true } } } diff --git a/package.json b/package.json index 20b9e365..d859fa02 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,8 @@ "name": "haxe-website", "version": "0.1.0", "devDependencies": { - "vscode-textmate": "3.1.5", - "cson-parser": "3.0.0" + "cson-parser": "3.0.0", + "vscode-oniguruma": "^2.0.1", + "vscode-textmate": "^9.1.0" } } diff --git a/src/Main.hx b/src/Main.hx index a15412ef..a5f69ddf 100644 --- a/src/Main.hx +++ b/src/Main.hx @@ -24,10 +24,10 @@ class Main { generators.RobotsTxt.generate(); // Patch as post process the html file with syntax highlighting - SyntaxHighlighter.patch(); - - var end = Date.now().getTime(); - Sys.println('Generation complete, time ${(end - start)/1000}s'); + SyntaxHighlighter.patch(function () { + var end = Date.now().getTime(); + Sys.println('Generation complete, time ${(end - start) / 1000}s'); + }); } } diff --git a/src/SyntaxHighlighter.hx b/src/SyntaxHighlighter.hx index 22cd5a37..cf18c746 100644 --- a/src/SyntaxHighlighter.hx +++ b/src/SyntaxHighlighter.hx @@ -4,54 +4,46 @@ import sys.io.File; class SyntaxHighlighter { - public static function patch () { + public static function patch (onComplete:()->Void) { Sys.println("Applying syntax highlighting ..."); // Convert CSON grammar to json for vscode-textmate File.saveContent("bin/javascript.json", Json.stringify(CSON.parse(File.getContent("grammars/language-javascript/grammars/javascript.cson")))); File.saveContent("bin/shell-unix-bash.json", Json.stringify(CSON.parse(File.getContent("grammars/language-shellscript/grammars/shell-unix-bash.cson")))); - var haxeGrammar = new Highlighter("grammars/haxe-TmLanguage/haxe.tmLanguage"); - var hxmlGrammar = new Highlighter("grammars/haxe-TmLanguage/hxml.tmLanguage"); - var luaGrammar = new Highlighter("grammars/lua.tmbundle/Syntaxes/Lua.plist"); - var xmlGrammar = new Highlighter("grammars/xml.tmbundle/Syntaxes/XML.plist"); - var cppGrammar = new Highlighter("grammars/c.tmbundle/Syntaxes/C++.plist"); - var as3Grammar = new Highlighter("grammars/actionscript3-tmbundle/Syntaxes/ActionScript 3.tmLanguage"); - var pythonGrammar = new Highlighter("grammars/python.tmbundle/Syntaxes/Python.tmLanguage"); - var javaGrammar = new Highlighter("grammars/Java.plist"); // from https://github.com/textmate/java.tmbundle - var ocamlGrammar = new Highlighter("grammars/OCaml.plist"); // from https://github.com/textmate/ocaml.tmbundle - var jsGrammar = new Highlighter("bin/javascript.json"); - var shGrammar = new Highlighter("bin/shell-unix-bash.json"); - - var grammars = [ - "haxe" => haxeGrammar, - "hxml" => hxmlGrammar, - "lua" => luaGrammar, - "xml" => xmlGrammar, - "cpp" => cppGrammar, - "as3" => as3Grammar, - "python" => pythonGrammar, - "js" => jsGrammar, - "java" => javaGrammar, - "ocaml" => ocamlGrammar, - "javascript" => jsGrammar, - "sh" => shGrammar, + var grammarFiles = [ + "haxe" => "grammars/haxe-TmLanguage/haxe.tmLanguage", + "hxml" => "grammars/haxe-TmLanguage/hxml.tmLanguage", + "lua" => "grammars/lua.tmbundle/Syntaxes/Lua.plist", + "xml" => "grammars/xml.tmbundle/Syntaxes/XML.plist", + "cpp" => "grammars/c.tmbundle/Syntaxes/C++.plist", + "as3" => "grammars/actionscript3-tmbundle/Syntaxes/ActionScript 3.tmLanguage", + "python" => "grammars/python.tmbundle/Syntaxes/Python.tmLanguage", + "js" => "bin/javascript.json", + "javascript" => "bin/javascript.json", + "java" => "grammars/Java.plist", // from https://github.com/textmate/java.tmbundle + "ocaml" => "grammars/OCaml.plist", // from https://github.com/textmate/ocaml.tmbundle + "sh" => "bin/shell-unix-bash.json", ]; - // Go over the generated HTML file and apply syntax highlighting - var missingGrammars = Highlighter.patchFolder(Config.outputFolder, grammars, function (classList) { - return classList.substr(12); - }); + Highlighter.loadHighlighters(grammarFiles, function(highlighters) { + // Go over the generated HTML file and apply syntax highlighting + var missingGrammars = Highlighter.patchFolder(Config.outputFolder, highlighters, function(classList) { + return classList.substr(12);} + ); + + for (g in missingGrammars) { + Sys.println('Missing grammar for "${g}"'); + } - for (g in missingGrammars) { - Sys.println('Missing grammar for "${g}"'); - } + // Add CSS rules for highlighting + var path = Config.outputFolder + "/css/style.css"; + var baseStyle = File.getContent(path); + var syntaxStyle = highlighters["haxe"].runCss(); + File.saveContent(path, baseStyle + syntaxStyle); - // Add CSS rules for highlighting - var path = Config.outputFolder + "/css/style.css"; - var baseStyle = File.getContent(path); - var syntaxStyle = haxeGrammar.runCss(); - File.saveContent(path, baseStyle + syntaxStyle); + onComplete(); + }); } }