@newlogic-digital/core 0.9.5 → 0.9.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,6 +8,9 @@ import gulp from "gulp";
8
8
  import plumber from "gulp-plumber";
9
9
  import minifier from "html-minifier";
10
10
  import through from "through2";
11
+ import Prism from 'prismjs'
12
+ import loadLanguages from 'prismjs/components/index.js'
13
+ import NormalizeWhitespace from 'prismjs/plugins/normalize-whitespace/prism-normalize-whitespace.js'
11
14
  import {Config, Exists, Functions, Modules, root} from "./Core.js";
12
15
 
13
16
  export class Templates {
@@ -236,16 +239,54 @@ export class Templates {
236
239
  type = type.replace(":mirror", "")
237
240
  }
238
241
 
242
+ loadLanguages(['markup', 'css', 'javascript'])
243
+
244
+ const Normalize = new NormalizeWhitespace({
245
+ 'remove-trailing': true,
246
+ 'remove-indent': true,
247
+ 'left-trim': true,
248
+ 'right-trim': true,
249
+ });
250
+
251
+ const wrap = (code, lang) => {
252
+ return `<pre class="language-${lang}"><code>${code}</code></pre>`
253
+ }
254
+
255
+ const highlight = (str, lang) => {
256
+ if (!lang) {
257
+ return wrap(str, 'text')
258
+ }
259
+ lang = lang.toLowerCase()
260
+ const rawLang = lang
261
+ if (lang === 'vue' || lang === 'html') {
262
+ lang = 'markup'
263
+ }
264
+ if (lang === 'md') {
265
+ lang = 'markdown'
266
+ }
267
+ if (lang === 'ts') {
268
+ lang = 'typescript'
269
+ }
270
+ if (lang === 'py') {
271
+ lang = 'python'
272
+ }
273
+ if (!Prism.languages[lang]) {
274
+ try {
275
+ loadLanguages([lang])
276
+ } catch (e) {
277
+ console.warn(`Syntax highlight for language "${lang}" is not supported.`)
278
+ }
279
+ }
280
+ if (Prism.languages[lang]) {
281
+ const code = Prism.highlight(Normalize.normalize(str), Prism.languages[lang], lang)
282
+ return wrap(code, rawLang)
283
+ }
284
+ return wrap(str, 'text')
285
+ }
286
+
239
287
  return {
240
288
  chain: chain,
241
- output: `${mirror ? output : ""}
242
- <pre style="width: 100%">
243
- <code class="language-${type}">
244
- <xmp>
245
- ${output}
246
- </xmp>
247
- </code>
248
- </pre>`
289
+ output: `${mirror ? output : ""}${highlight(output, type)}`
249
290
  };
250
291
  }
251
292
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@newlogic-digital/core",
3
3
  "type": "module",
4
- "version": "0.9.5",
4
+ "version": "0.9.6",
5
5
  "main": "index.js",
6
6
  "author": "New Logic Studio s.r.o.",
7
7
  "description": "Set of tools that can be used to create modern web applications",
@@ -47,7 +47,8 @@
47
47
  "rollup": "^2.66.1",
48
48
  "rollup-plugin-import-map": "^2.2.2",
49
49
  "rollup-plugin-terser": "^7.0.2",
50
- "vite": "~2.7.13"
50
+ "vite": "~2.7.13",
51
+ "prismjs": "^1.26.0"
51
52
  },
52
53
  "peerDependencies": {
53
54
  "autoprefixer": "^10.4.2",