@pfmcodes/caret 0.2.6 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # Caret
2
-
2
+ ![LOGO](https://github.com/PFMCODES/Caret/raw/main/logo.svg)
3
3
  [![License: MIT](https://img.shields.io/badge/License-MIT-4000ff.svg)](https://opensource.org/licenses/MIT)
4
4
  [![JavaScript](https://img.shields.io/badge/JavaScript-63.7%25-f6fa03)](https://github.com/PFMCODES/lexius-edior)
5
5
  [![JavaScript](https://img.shields.io/badge/TypeScript-32.3%25-0244f7)](https://github.com/PFMCODES/lexius-edior)
@@ -33,6 +33,12 @@ A lightweight, feature-rich code editor with real-time syntax highlighting and c
33
33
 
34
34
  ## What's-New?
35
35
 
36
+ ### v0.2.8
37
+ - just mistake i made has been fixed
38
+
39
+ ### v0.2.7
40
+ - another cleanup but this time, with file optimizations and updated comments at the end of each containing short summaries of each function and variables(only some important variables)
41
+
36
42
  ### v0.2.6
37
43
 
38
44
  - CommonJs support has been removed to reduce package size
package/editor.js CHANGED
@@ -71,8 +71,10 @@ async function createEditor(editor, data) {
71
71
  editor.style = "position: relative; width: 600px; height: 300px; overflow: hidden; /* 👈 CRITICAL */ font-size: 14px;"
72
72
  if (code && editor && editor1 && language && highlighted) {
73
73
  editor1.style.paddingTop = "-9px";
74
- editor1.value = data.value;
75
- highlighted.innerHTML = await _render(data.value, language, editor1);
74
+ editor1.value = code;
75
+ let h = await _render(code, language, editor1);
76
+ highlighted.innerHTML = h;
77
+ console.log({h: h, code: code})
76
78
  }
77
79
  const keyDown = async (e) => {
78
80
  if (e.key !== "Tab") return;
@@ -396,13 +398,6 @@ function getWrapMap(code, wrapAt = 71) {
396
398
  return wrapMap;
397
399
  }
398
400
 
399
- function escapeHtml(str) {
400
- return str
401
- .replace(/&/g, "&")
402
- .replace(/</g, "&lt;")
403
- .replace(/>/g, "&gt;");
404
- }
405
-
406
401
  async function _render(code, language, editor) {
407
402
  // If no editor context provided, just highlight everything (initial load)
408
403
  if (!editor) {
@@ -440,7 +435,7 @@ async function _render(code, language, editor) {
440
435
  const highlightedVisible = hljs.highlight(wrappedCode, { language }).value;
441
436
  // Plain text for non-visible areas (no highlighting = faster)
442
437
  if (highlightedVisible.trim() === "") {
443
- return hljs.highlight(escapeHtml(code), { language }).value;
438
+ return hljs.highlight(code, { language }).value;
444
439
  }
445
440
  const beforeHTML = "\n".repeat(beforeLines.length);
446
441
  const afterHTML = "\n".repeat(afterLines.length);
@@ -453,16 +448,23 @@ const editor = {
453
448
 
454
449
  export default editor;
455
450
 
456
- /*
457
-
458
- createEditor: creates the main editor, using html Elements like, textarea and etc.
459
- refresh: refreshs the editor
460
- getValue: return the current value from the editor
461
- setValue: sets a certain value to the editor's value
462
- focus: focusses the editor
463
- destroy: destroys and removeEventListeners
464
- updateCaret: updates the caret positon, height and other metrics using math
465
- updateLineNumbers: just add new line numbers
466
- getFontMetrics: returns back the font's metrics like height
467
- updateFontMetrics: update the fontMetrics
451
+ /*
452
+ createEditor(editor, data): creates the main editor using HTML elements like textarea, pre, div etc.
453
+ Returns an object with the following methods:
454
+ getValue() -> returns the current value from the editor
455
+ setValue(val) -> sets a value to the editor
456
+ focus() -> focuses the editor
457
+ setLanguage(lang) -> changes the syntax highlighting language
458
+ destroy() -> destroys the editor and removes all event listeners
459
+ onDidChangeModelContent(fn) -> fires a callback whenever the editor content changes
460
+
461
+ Internal functions:
462
+ _render(code, language, editor) -> virtual renderer, only highlights visible lines for performance
463
+ wrapCode(code, wrapAt) -> wraps long lines at word boundaries
464
+ getWrapMap(code, wrapAt) -> returns an array mapping each line to its visual line count
465
+ updateCaret() -> updates the caret position using canvas font metrics
466
+ updateLineNumbers() -> re-renders line numbers, accounting for wrapped lines
467
+ updateFontMetrics() -> updates the canvas font to match the textarea's computed style
468
+ getFontMetrics() -> returns ascent, descent and height of the current font
469
+ getVisualRow(text, wrapAt) -> returns which visual row and remaining text the caret is on
468
470
  */
package/index.js CHANGED
@@ -7,4 +7,16 @@ const Caret = {
7
7
  theme,
8
8
  language
9
9
  }
10
- export default Caret;
10
+ export default Caret;
11
+
12
+ /*
13
+ Caret.editor:
14
+ createEditor() -> backbone of caret, handles ui and abstractions
15
+ Caret.theme:
16
+ setTheme() -> changes the current highlight.js theme
17
+ Caret.langauge:
18
+ init() -> initializes default avaible languages
19
+ registerLanguage() -> registers a new languages
20
+ registeredLangauges[List]: has all the langauges registered
21
+ hljs: the highlight.js module
22
+ */
package/langauges.js CHANGED
@@ -22,31 +22,31 @@ let registeredLanguages = [];
22
22
 
23
23
  function init() {
24
24
  // Register all languages
25
- hljs.registerLanguage("javascript", javascript);
26
- hljs.registerLanguage("xml", xml);
27
- hljs.registerLanguage("typescript", typescript);
28
- hljs.registerAliases(["jsx"], { languageName: "javascript" });
29
- hljs.registerAliases(["js"], { languageName: "javascript" });
30
- hljs.registerAliases(["ts"], { languageName: "typescript" });
31
- hljs.registerAliases(["html"], { languageName: "xml" });
32
- hljs.registerAliases(["svg"], { languageName: "xml" });
33
- hljs.registerLanguage("css", css);
34
- hljs.registerLanguage("python", python);
35
- hljs.registerLanguage("java", java);
36
- hljs.registerLanguage("csharp", csharp);
37
- hljs.registerLanguage("cpp", cpp);
38
- hljs.registerLanguage("ruby", ruby);
39
- hljs.registerLanguage("php", php);
40
- hljs.registerLanguage("go", go);
41
- hljs.registerLanguage("c", c);
42
- hljs.registerLanguage("rust", rust);
43
- hljs.registerLanguage("kotlin", kotlin);
44
- hljs.registerLanguage("swift", swift);
45
- hljs.registerLanguage("json", json);
46
- hljs.registerLanguage("bash", bash);
47
- hljs.registerLanguage("shell", bash);
48
- hljs.registerLanguage("sh", bash);
49
- hljs.registerLanguage("plaintext", plaintext);
25
+ registerLanguage("javascript", javascript);
26
+ registerLanguage("xml", xml);
27
+ registerLanguage("typescript", typescript);
28
+ registerAliases(["jsx"], { languageName: "javascript" });
29
+ registerAliases(["js"], { languageName: "javascript" });
30
+ registerAliases(["ts"], { languageName: "typescript" });
31
+ registerAliases(["html"], { languageName: "xml" });
32
+ registerAliases(["svg"], { languageName: "xml" });
33
+ registerLanguage("css", css);
34
+ registerLanguage("python", python);
35
+ registerLanguage("java", java);
36
+ registerLanguage("csharp", csharp);
37
+ registerLanguage("cpp", cpp);
38
+ registerLanguage("ruby", ruby);
39
+ registerLanguage("php", php);
40
+ registerLanguage("go", go);
41
+ registerLanguage("c", c);
42
+ registerLanguage("rust", rust);
43
+ registerLanguage("kotlin", kotlin);
44
+ registerLanguage("swift", swift);
45
+ registerLanguage("json", json);
46
+ registerLanguage("bash", bash);
47
+ registerLanguage("shell", bash);
48
+ registerLanguage("sh", bash);
49
+ registerLanguage("plaintext", plaintext);
50
50
  registeredLanguages.push(
51
51
  "javascript", "js",
52
52
  "xml", "html", "svg",
@@ -69,10 +69,18 @@ function init() {
69
69
  );
70
70
  }
71
71
 
72
+ export function registerAliases(a, b) {
73
+ hljs.registerAliases(a, b)
74
+ }
75
+
72
76
  function registerLanguage(name, definition) {
73
- hljs.registerLanguage(name, definition);
74
77
  if (!registeredLanguages.includes(name)) {
78
+ hljs.registerLanguage(name, definition);
75
79
  registeredLanguages.push(name);
80
+ return;
81
+ } else {
82
+ console.warn(`Caret: Language ${name} already registered, aborting`);
83
+ return;
76
84
  }
77
85
  }
78
86
 
@@ -80,18 +88,15 @@ const languages = {
80
88
  init,
81
89
  registeredLanguages,
82
90
  registerLanguage,
91
+ registerAliases,
83
92
  hljs
84
93
  }
85
94
 
86
95
  export default languages;
87
96
 
88
97
  /*
89
-
90
98
  registeredLannguage: added for the editor.js can check if the langauge provided already is regsitered or not
91
-
92
-
93
99
  init: just registers some languages and updates the registeredLangauges variable
94
-
95
100
  registerLanguage: just registers a language
96
-
101
+ registerAliases: basically registers a nickname or second name for an language
97
102
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pfmcodes/caret",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "description": "The official code editor engine for lexius",
5
5
  "type": "module",
6
6
  "main": "./index.js",
package/theme.js CHANGED
@@ -3,16 +3,12 @@ function setTheme(name) {
3
3
  link.href = `https://esm.sh/@pfmcodes/highlight.js@1.0.0/styles/${name}.css`;
4
4
  }
5
5
 
6
- function removeTheme() {
7
- const link = document.getElementById("Caret-theme");
8
- if (link) {
9
- link.parentNode.removeChild(link);
10
- }
11
- }
12
-
13
6
  const theme = {
14
- removeTheme,
15
7
  setTheme
16
8
  }
17
9
 
18
- export default theme;
10
+ export default theme;
11
+
12
+ /*
13
+ setTheme() -> changes the current highlight.js theme
14
+ */
package/types/editor.ts CHANGED
@@ -1,5 +1,6 @@
1
+ // @ts-ignore
1
2
  import hljs from "https://esm.sh/@pfmcodes/highlight.js@1.0.0/es/core.js"; // Use default export
2
- import languages from "./languages.ts";
3
+ import languages from "./langauges.ts";
3
4
 
4
5
  languages.init();
5
6
 
@@ -49,6 +50,7 @@ async function createEditor(editor: HTMLElement, data: any) {
49
50
  link.href = `https://esm.sh/@pfmcodes/highlight.js@1.0.0/styles/${theme}.css`;
50
51
  document.head.appendChild(link);
51
52
  } else {
53
+ // @ts-ignore
52
54
  themeLink.href = `https://esm.sh/@pfmcodes/highlight.js@1.0.0/styles/${theme}.css`;
53
55
  }
54
56
  } else {
@@ -60,6 +62,7 @@ async function createEditor(editor: HTMLElement, data: any) {
60
62
  link.href = `https://esm.sh/@pfmcodes/highlight.js@1.0.0/styles/hybrid.css`;
61
63
  document.head.appendChild(link);
62
64
  } else {
65
+ // @ts-ignore
63
66
  themeLink.href = `./highlight.js/styles/hybrid.css`;
64
67
  }
65
68
  }
@@ -455,16 +458,24 @@ const editor = {
455
458
 
456
459
  export default editor;
457
460
 
458
- /*
459
-
460
- createEditor: creates the main editor, using html Elements like, textarea and etc.
461
- refresh: refreshs the editor
462
- getValue: return the current value from the editor
463
- setValue: sets a certain value to the editor's value
464
- focus: focusses the editor
465
- destroy: destroys and removeEventListeners
466
- updateCaret: updates the caret positon, height and other metrics using math
467
- updateLineNumbers: just add new line numbers
468
- getFontMetrics: returns back the font's metrics like height
469
- updateFontMetrics: update the fontMetrics
461
+ /*
462
+ createEditor(editor, data): creates the main editor using HTML elements like textarea, pre, div etc.
463
+ Returns an object with the following methods:
464
+ getValue() -> returns the current value from the editor
465
+ setValue(val) -> sets a value to the editor
466
+ focus() -> focuses the editor
467
+ setLanguage(lang) -> changes the syntax highlighting language
468
+ destroy() -> destroys the editor and removes all event listeners
469
+ onDidChangeModelContent(fn) -> fires a callback whenever the editor content changes
470
+
471
+ Internal functions:
472
+ _render(code, language, editor) -> virtual renderer, only highlights visible lines for performance
473
+ wrapCode(code, wrapAt) -> wraps long lines at word boundaries
474
+ getWrapMap(code, wrapAt) -> returns an array mapping each line to its visual line count
475
+ escapeHtml(str) -> escapes HTML special characters
476
+ updateCaret() -> updates the caret position using canvas font metrics
477
+ updateLineNumbers() -> re-renders line numbers, accounting for wrapped lines
478
+ updateFontMetrics() -> updates the canvas font to match the textarea's computed style
479
+ getFontMetrics() -> returns ascent, descent and height of the current font
480
+ getVisualRow(text, wrapAt) -> returns which visual row and remaining text the caret is on
470
481
  */
package/types/index.d.ts CHANGED
@@ -32,3 +32,15 @@ declare module "@pfmcodes/caret" {
32
32
 
33
33
  export default Caret;
34
34
  }
35
+
36
+ /*
37
+ Caret.editor:
38
+ createEditor() -> backbone of caret, handles ui and abstractions
39
+ Caret.theme:
40
+ setTheme() -> changes the current highlight.js theme
41
+ Caret.langauge:
42
+ init() -> initializes default avaible languages
43
+ registerLanguage() -> registers a new languages
44
+ registeredLangauges[List]: has all the langauges registered
45
+ hljs: the highlight.js module
46
+ */
package/types/index.ts CHANGED
@@ -1,10 +1,22 @@
1
1
  import editor from "./editor.ts";
2
2
  import theme from "./theme.ts";
3
- import language from "./languages.ts";
3
+ import language from "./langauges.ts";
4
4
 
5
5
  const Caret = {
6
6
  editor,
7
7
  theme,
8
8
  language
9
9
  }
10
- export default Caret;
10
+ export default Caret;
11
+
12
+ /*
13
+ Caret.editor:
14
+ createEditor() -> backbone of caret, handles ui and abstractions
15
+ Caret.theme:
16
+ setTheme() -> changes the current highlight.js theme
17
+ Caret.langauge:
18
+ init() -> initializes default avaible languages
19
+ registerLanguage() -> registers a new languages
20
+ registeredLangauges[List]: has all the langauges registered
21
+ hljs: the highlight.js module
22
+ */
@@ -37,8 +37,7 @@ import plaintext from "https://esm.sh/@pfmcodes/highlight.js@1.0.0/es/languages/
37
37
  // @ts-ignore
38
38
  import hljs from "https://esm.sh/@pfmcodes/highlight.js@1.0.0/es/core.js";
39
39
 
40
- let registeredLanguages: Array<T> = [];
41
- type T = any
40
+ let registeredLanguages: Array<any> = [];
42
41
 
43
42
  function init() {
44
43
  // Register all languages
@@ -89,6 +88,10 @@ function init() {
89
88
  ]
90
89
  }
91
90
 
91
+ export function registerAliases(a: any, b: any) {
92
+ hljs.registerAliases(a, b)
93
+ }
94
+
92
95
  function registerLanguage(name: string, definition: any) {
93
96
  hljs.registerLanguage(name, definition);
94
97
  if (!registeredLanguages.includes(name)) {
@@ -106,12 +109,8 @@ const languages = {
106
109
  export default languages;
107
110
 
108
111
  /*
109
-
110
112
  registeredLannguage: added for the editor.js can check if the langauge provided already is regsitered or not
111
-
112
-
113
113
  init: just registers some languages and updates the registeredLangauges variable
114
-
115
114
  registerLanguage: just registers a language
116
-
115
+ registerAliases: basically registers a nickname or second name for an language
117
116
  */
package/types/theme.ts CHANGED
@@ -3,16 +3,12 @@ function setTheme(name: string) {
3
3
  link.href = `./highlight.js/styles/${name}.css`;
4
4
  }
5
5
 
6
- function removeTheme() {
7
- const link = document.getElementById("Caret-theme") as HTMLLinkElement;
8
- if (link && link.parentNode) {
9
- link.parentNode.removeChild(link);
10
- }
11
- }
12
-
13
6
  const theme = {
14
- removeTheme,
15
7
  setTheme
16
8
  }
17
9
 
18
- export default theme;
10
+ export default theme;
11
+
12
+ /*
13
+ setTheme() -> changes the current highlight.js theme
14
+ */
@@ -1,4 +0,0 @@
1
- declare module "https://esm.sh/@pfmcodes/highlight.js@1.0.0/*" {
2
- const mod: any;
3
- export default mod;
4
- }