Bläddra i källkod

Update prism, add syntaxes, add dark theme

simov 3 år sedan
förälder
incheckning
2dbf2a0814
4 ändrade filer med 210 tillägg och 237 borttagningar
  1. 1 0
      build/prism/build.sh
  2. 3 3
      build/prism/package.json
  3. 105 74
      build/prism/prism.js
  4. 101 160
      build/prism/prism.json

+ 1 - 0
build/prism/build.sh

@@ -12,6 +12,7 @@ node prism.js
 
 # copy
 cp tmp/prism.min.* ../../vendor/
+cp tmp/prism-okaidia.min.css ../../vendor/
 
 # after
 rm -r tmp/

+ 3 - 3
build/prism/package.json

@@ -4,11 +4,11 @@
   "description": "Markdown Viewer / Browser Extension",
   "private": true,
   "dependencies": {
-    "prismjs": "^1.22.0"
+    "prismjs": "^1.29.0"
   },
   "devDependencies": {
-    "csso-cli": "^2.0.2",
-    "uglify-js": "^3.12.2"
+    "csso-cli": "^4.0.1",
+    "terser": "^5.5.1"
   },
   "engines": {
     "node": ">=14.0.0"

+ 105 - 74
build/prism/prism.js

@@ -2,84 +2,115 @@
 var fs = require('fs')
 var path = require('path')
 var vm = require('vm')
-var uglify = require('uglify-js')
+var terser = require('terser')
+var csso = require('csso')
 
 
-// load prism languages
-var include = (file) => {
-  var fpath = path.resolve(__dirname, `node_modules/prismjs/${file}.js`)
-  var source = fs.readFileSync(fpath, 'utf8')
-  var ctx = vm.createContext()
-  vm.runInContext(source, ctx)
-  return ctx
+var _config = () => {
+  // load prism languages
+  var include = (file) => {
+    var fpath = path.resolve(__dirname, `node_modules/prismjs/${file}.js`)
+    var source = fs.readFileSync(fpath, 'utf8')
+    var ctx = vm.createContext()
+    vm.runInContext(source, ctx)
+    return ctx
+  }
+
+  var {components: {languages}} = include('components')
+  delete languages.meta
+
+  // update prism languages config
+  var config = require('./prism.json')
+  // sort the included ones
+  config.included = config.included.sort()
+  // update excluded
+  config.excluded = Object.keys(languages)
+    .filter((lang) => !config.included.includes(lang))
+    .sort()
+  // update config
+  fs.writeFileSync(
+    path.resolve(__dirname, 'prism.json'),
+    JSON.stringify(config, null, 2),
+    'utf8'
+  )
+
+  return config
 }
 
-var {components: {languages}} = include('components')
-delete languages.meta
-
-
-// update prism languages config
-var config = require('./prism.json')
-// sort the included ones
-config['markdown-viewer'] = config['markdown-viewer'].sort()
-// add any new
-config.all = Object.keys(languages)
-
-fs.writeFileSync(path.resolve(__dirname, 'prism.json'),
-  JSON.stringify(config, null, 2), 'utf8')
-
-
-// build prism.min.js
-var core = fs.readFileSync(
-  path.resolve(__dirname, 'node_modules/prismjs/prism.js'), 'utf8')
-// core
-var source = uglify.minify(core, {compress: {}, mangle: true}).code
-// components
-source += config['markdown-viewer'].reduce((source, component) => (
-  source += fs.readFileSync(path.resolve(__dirname,
-    `node_modules/prismjs/components/prism-${component}.min.js`), 'utf8') + '\n',
-  source
-), '')
-
-fs.writeFileSync(path.resolve(__dirname, 'tmp/prism.min.js'), source, 'utf8')
+// prism.min.js
+var js = async (config) => {
+  var core = fs.readFileSync(
+    path.resolve(__dirname, 'node_modules/prismjs/prism.js'), 'utf8'
+  )
+
+  var source =
+    // core
+    (await terser.minify(core, {format: {comments: false}})).code +
+    // components
+    config.included.reduce((all, key) => (
+      all += fs.readFileSync(path.resolve(__dirname,
+        `node_modules/prismjs/components/prism-${key}.min.js`), 'utf8') + '\n',
+      all
+    ), '')
+
+  fs.writeFileSync(path.resolve(__dirname, 'tmp/prism.min.js'), source, 'utf8')
+}
 
+// prism.min.css
+var css = () => {
+  var source = fs.readFileSync(
+    path.resolve(__dirname, 'node_modules/prismjs/themes/prism.css'),
+    'utf8'
+  )
+
+  fs.writeFileSync(
+    path.resolve(__dirname, 'tmp/prism.min.css'),
+    csso.minify(source).css,
+    'utf8'
+  )
+
+  var source = fs.readFileSync(
+    path.resolve(__dirname, 'node_modules/prismjs/themes/prism-okaidia.css'),
+    'utf8'
+  )
+
+  fs.writeFileSync(
+    path.resolve(__dirname, 'tmp/prism-okaidia.min.css'),
+    csso.minify(source).css,
+    'utf8'
+  )
+}
 
-// build css
-var csso = require('csso')
+var stats = (config) => {
+  var included = config.included
+    .map((name) => ({
+      name,
+      size: fs.lstatSync(path.resolve(__dirname,
+        `node_modules/prismjs/components/prism-${name}.min.js`)).size
+    }))
+
+  var excluded = config.excluded
+    .map((name) => ({
+      name,
+      size: fs.lstatSync(path.resolve(__dirname,
+        `node_modules/prismjs/components/prism-${name}.min.js`)).size
+    }))
+
+  console.log('Excluded:')
+  excluded // sorted by name
+    // .sort((a, b) => b.size - a.size) // sorted by size
+    .forEach(({name, size}) => console.log(name, '\t\t\t', size))
+
+  console.log('Included:', included.length, included.reduce((total, {size}) => total += size, 0))
+  console.log('Excluded:', excluded.length, excluded.reduce((total, {size}) => total += size, 0))
+}
 
-var source = fs.readFileSync(
-  path.resolve(__dirname, 'node_modules/prismjs/themes/prism.css'),
-  'utf8'
-)
-
-fs.writeFileSync(
-  path.resolve(__dirname, 'tmp/prism.min.css'),
-  csso.minify(source).css,
-  'utf8'
-)
-
-
-// print stats
-var included = config.all
-  .filter((name) => config['markdown-viewer'].includes(name))
-  .map((name) => ({
-    name,
-    size: fs.lstatSync(path.resolve(__dirname,
-      `node_modules/prismjs/components/prism-${name}.min.js`)).size
-  }))
-
-var excluded = config.all
-  .filter((name) => !config['markdown-viewer'].includes(name))
-  .map((name) => ({
-    name,
-    size: fs.lstatSync(path.resolve(__dirname,
-      `node_modules/prismjs/components/prism-${name}.min.js`)).size
-  }))
-
-console.log('Excluded:')
-excluded // sorted by name
-  // .sort((a, b) => b.size - a.size) // sorted by size
-  .forEach(({name, size}) => console.log(name, '\t\t\t', size))
-
-console.log('Included:', included.length, included.reduce((total, {size}) => total += size, 0))
-console.log('Excluded:', excluded.length, excluded.reduce((total, {size}) => total += size, 0))
+;(async () => {
+  var config = _config()
+  // prism.min.js
+  await js(config)
+  // prism.min.css
+  css()
+  // print stats
+  stats(config)
+})()

+ 101 - 160
build/prism/prism.json

@@ -1,27 +1,108 @@
 {
-  "all": [
-    "markup",
-    "css",
+  "included": [
+    "actionscript",
+    "apacheconf",
+    "applescript",
+    "aspnet",
+    "bash",
+    "basic",
+    "batch",
+    "bicep",
+    "c",
     "clike",
+    "clojure",
+    "coffeescript",
+    "cpp",
+    "csharp",
+    "css",
+    "css-extras",
+    "csv",
+    "d",
+    "dart",
+    "diff",
+    "docker",
+    "editorconfig",
+    "elixir",
+    "erlang",
+    "flow",
+    "fsharp",
+    "glsl",
+    "go",
+    "graphql",
+    "groovy",
+    "haskell",
+    "haxe",
+    "hcl",
+    "hlsl",
+    "ini",
+    "java",
     "javascript",
+    "js-extras",
+    "json",
+    "jsx",
+    "julia",
+    "kotlin",
+    "latex",
+    "less",
+    "lisp",
+    "llvm",
+    "lua",
+    "makefile",
+    "markdown",
+    "markup",
+    "markup-templating",
+    "matlab",
+    "mermaid",
+    "nginx",
+    "objectivec",
+    "ocaml",
+    "perl",
+    "php",
+    "powershell",
+    "prolog",
+    "protobuf",
+    "python",
+    "r",
+    "reason",
+    "regex",
+    "ruby",
+    "rust",
+    "sass",
+    "scala",
+    "scheme",
+    "scss",
+    "shell-session",
+    "smalltalk",
+    "solidity",
+    "sql",
+    "swift",
+    "systemd",
+    "tsx",
+    "typescript",
+    "unrealscript",
+    "vala",
+    "vbnet",
+    "wasm",
+    "wgsl",
+    "wiki",
+    "wolfram",
+    "yaml"
+  ],
+  "excluded": [
     "abap",
     "abnf",
-    "actionscript",
     "ada",
     "agda",
     "al",
     "antlr4",
-    "apacheconf",
     "apex",
     "apl",
-    "applescript",
     "aql",
     "arduino",
     "arff",
     "armasm",
     "arturo",
     "asciidoc",
-    "aspnet",
     "asm6502",
     "asmatmel",
     "autohotkey",
@@ -29,12 +110,8 @@
     "avisynth",
     "avro-idl",
     "awk",
-    "bash",
-    "basic",
-    "batch",
     "bbcode",
     "bbj",
-    "bicep",
     "birb",
     "bison",
     "bnf",
@@ -43,55 +120,39 @@
     "brightscript",
     "bro",
     "bsl",
-    "c",
-    "csharp",
-    "cpp",
     "cfscript",
     "chaiscript",
     "cil",
     "cilkc",
     "cilkcpp",
-    "clojure",
     "cmake",
     "cobol",
-    "coffeescript",
     "concurnas",
-    "csp",
     "cooklang",
     "coq",
     "crystal",
-    "css-extras",
-    "csv",
+    "cshtml",
+    "csp",
     "cue",
     "cypher",
-    "d",
-    "dart",
     "dataweave",
     "dax",
     "dhall",
-    "diff",
     "django",
     "dns-zone-file",
-    "docker",
     "dot",
     "ebnf",
-    "editorconfig",
     "eiffel",
     "ejs",
-    "elixir",
     "elm",
-    "etlua",
     "erb",
-    "erlang",
+    "etlua",
     "excel-formula",
-    "fsharp",
     "factor",
     "false",
     "firestore-security-rules",
-    "flow",
     "fortran",
     "ftl",
-    "gml",
     "gap",
     "gcode",
     "gdscript",
@@ -99,73 +160,51 @@
     "gettext",
     "gherkin",
     "git",
-    "glsl",
+    "gml",
     "gn",
-    "linker-script",
-    "go",
     "go-module",
     "gradle",
-    "graphql",
-    "groovy",
     "haml",
     "handlebars",
-    "haskell",
-    "haxe",
-    "hcl",
-    "hlsl",
     "hoon",
-    "http",
     "hpkp",
     "hsts",
+    "http",
     "ichigojam",
     "icon",
     "icu-message-format",
     "idris",
+    "iecst",
     "ignore",
     "inform7",
-    "ini",
     "io",
     "j",
-    "java",
     "javadoc",
     "javadoclike",
     "javastacktrace",
     "jexl",
     "jolie",
     "jq",
+    "js-templates",
     "jsdoc",
-    "js-extras",
-    "json",
     "json5",
     "jsonp",
     "jsstacktrace",
-    "js-templates",
-    "julia",
     "keepalived",
     "keyman",
-    "kotlin",
     "kumir",
     "kusto",
-    "latex",
     "latte",
-    "less",
     "lilypond",
+    "linker-script",
     "liquid",
-    "lisp",
     "livescript",
-    "llvm",
     "log",
     "lolcode",
-    "lua",
     "magma",
-    "makefile",
-    "markdown",
-    "markup-templating",
     "mata",
-    "matlab",
     "maxscript",
     "mel",
-    "mermaid",
     "metafont",
     "mizar",
     "mongodb",
@@ -178,12 +217,9 @@
     "nasm",
     "neon",
     "nevod",
-    "nginx",
     "nim",
     "nix",
     "nsis",
-    "objectivec",
-    "ocaml",
     "odin",
     "opencl",
     "openqasm",
@@ -192,39 +228,27 @@
     "parser",
     "pascal",
     "pascaligo",
-    "psl",
     "pcaxis",
     "peoplecode",
-    "perl",
-    "php",
-    "phpdoc",
     "php-extras",
+    "phpdoc",
     "plant-uml",
     "plsql",
     "powerquery",
-    "powershell",
     "processing",
-    "prolog",
     "promql",
     "properties",
-    "protobuf",
+    "psl",
     "pug",
     "puppet",
     "pure",
     "purebasic",
     "purescript",
-    "python",
-    "qsharp",
     "q",
     "qml",
     "qore",
-    "r",
+    "qsharp",
     "racket",
-    "cshtml",
-    "jsx",
-    "tsx",
-    "reason",
-    "regex",
     "rego",
     "renpy",
     "rescript",
@@ -232,131 +256,48 @@
     "rip",
     "roboconf",
     "robotframework",
-    "ruby",
-    "rust",
     "sas",
-    "sass",
-    "scss",
-    "scala",
-    "scheme",
-    "shell-session",
     "smali",
-    "smalltalk",
     "smarty",
     "sml",
-    "solidity",
     "solution-file",
     "soy",
     "sparql",
     "splunk-spl",
     "sqf",
-    "sql",
     "squirrel",
     "stan",
     "stata",
-    "iecst",
     "stylus",
     "supercollider",
-    "swift",
-    "systemd",
-    "t4-templating",
     "t4-cs",
+    "t4-templating",
     "t4-vb",
     "tap",
     "tcl",
-    "tt2",
     "textile",
     "toml",
     "tremor",
+    "tt2",
     "turtle",
     "twig",
-    "typescript",
     "typoscript",
-    "unrealscript",
     "uorazor",
     "uri",
     "v",
-    "vala",
-    "vbnet",
     "velocity",
     "verilog",
     "vhdl",
     "vim",
     "visual-basic",
     "warpscript",
-    "wasm",
     "web-idl",
-    "wgsl",
-    "wiki",
-    "wolfram",
     "wren",
     "xeora",
     "xml-doc",
     "xojo",
     "xquery",
-    "yaml",
     "yang",
     "zig"
-  ],
-  "markdown-viewer": [
-    "actionscript",
-    "apacheconf",
-    "applescript",
-    "aspnet",
-    "bash",
-    "basic",
-    "batch",
-    "c",
-    "clike",
-    "coffeescript",
-    "cpp",
-    "csharp",
-    "css",
-    "css-extras",
-    "d",
-    "dart",
-    "diff",
-    "docker",
-    "elixir",
-    "erlang",
-    "flow",
-    "fsharp",
-    "go",
-    "graphql",
-    "haskell",
-    "hcl",
-    "java",
-    "javascript",
-    "json",
-    "kotlin",
-    "latex",
-    "lua",
-    "makefile",
-    "markdown",
-    "markup-templating",
-    "nginx",
-    "objectivec",
-    "ocaml",
-    "perl",
-    "php",
-    "prolog",
-    "protobuf",
-    "python",
-    "r",
-    "reason",
-    "ruby",
-    "rust",
-    "sass",
-    "scala",
-    "scheme",
-    "scss",
-    "shell-session",
-    "smalltalk",
-    "sql",
-    "swift",
-    "typescript",
-    "vbnet",
-    "wasm",
-    "yaml"
   ]
 }