@teriusu/rich-editor 0.9.13 → 0.9.14

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.
@@ -1,5 +1,5 @@
1
1
  /** 등록하는 언어 이름. 테스트가 이 목록으로 실제 등록분을 검사한다. */
2
- export declare const CODE_LANGUAGES: readonly ["cpp", "java", "python", "javascript", "typescript", "kotlin", "go", "csharp", "rust", "sql", "pgsql", "graphql", "xml", "css", "json", "yaml", "bash", "shell", "makefile", "ini", "diff"];
2
+ export declare const CODE_LANGUAGES: readonly ["cpp", "java", "python", "javascript", "typescript", "kotlin", "go", "csharp", "rust", "sql", "pgsql", "graphql", "xml", "css", "json", "yaml", "bash", "shell", "makefile", "ini", "diff", "plaintext"];
3
3
  export declare const lowlight: {
4
4
  highlight: (language: string, value: string, options?: Readonly<import("lowlight").Options> | null | undefined) => import("hast").Root;
5
5
  highlightAuto: (value: string, options?: Readonly<import("lowlight").AutoOptions> | null | undefined) => import("hast").Root;
@@ -1 +1 @@
1
- {"version":3,"file":"lowlight.d.ts","sourceRoot":"","sources":["../../src/utils/lowlight.ts"],"names":[],"mappings":"AAuDA,4CAA4C;AAC5C,eAAO,MAAM,cAAc,uMA0BjB,CAAC;AAEX,eAAO,MAAM,QAAQ;wDA3EL,CAAA;0CAGM,CAAC;;;;;;;;;;;CAwEiB,CAAC"}
1
+ {"version":3,"file":"lowlight.d.ts","sourceRoot":"","sources":["../../src/utils/lowlight.ts"],"names":[],"mappings":"AA+DA,4CAA4C;AAC5C,eAAO,MAAM,cAAc,oNA4BjB,CAAC;AAEX,eAAO,MAAM,QAAQ;wDArFL,CAAA;0CAGM,CAAC;;;;;;;;;;;CAkFiB,CAAC"}
@@ -17,10 +17,17 @@
17
17
  * · DB·질의 (3) hljs 에 있는 DB 계열은 이 셋이 전부다(`plsql`·`mongodb` 는 없다)
18
18
  * · 웹·데이터 (4) `xml` 이 HTML 을 겸한다
19
19
  * · 셸·설정 (5) 코드 예시에 딸려 오는 명령·설정 파일
20
+ * · 서식 없음 (1) `plaintext` — 아래 참조
20
21
  *
21
- * 스물하나를 다 넣어도 **40KB 대(gzip)** 다 — 묶음 export 는 398KB 였다. 크기 여유가
22
+ * 스물둘을 다 넣어도 **40KB 대(gzip)** 다 — 묶음 export 는 398KB 였다. 크기 여유가
22
23
  * 크므로 "혹시 쓸까" 싶은 것은 빼기보다 넣는 쪽이 낫다.
23
24
  *
25
+ * ⚠️ **`plaintext` 는 "색을 빼는" 언어다 — 없으면 오히려 칠해진다.** 등록되지 않은
26
+ * 이름은 자동 감지로 떨어지므로, 색을 빼려고 ```text 로 적은 블록에 엉뚱한 문법
27
+ * 색이 붙었다(예시 입출력·ASCII 그림). `plaintext` 는 `text`·`txt` 를 별칭으로
28
+ * 갖고 `disableAutodetect: true` 라, 등록해도 다른 언어의 감지 후보를 늘리지
29
+ * 않는다 — `c` 를 뺀 이유와 충돌하지 않는다.
30
+ *
24
31
  * ⚠️ **`c` 는 일부러 없다.** C++ 문법이 C 를 사실상 포함해 색이 거의 같은데, 자동 감지
25
32
  * 후보에 넣으면 relevance 를 과하게 먹어 **Python 코드까지 `c` 로 판정**했다(실측).
26
33
  * `language-c` 로 지정된 블록은 자동 감지로 떨어져 `cpp` 로 칠해진다 — 눈으로는 같다.
@@ -52,6 +59,7 @@ import shell from "highlight.js/lib/languages/shell";
52
59
  import makefile from "highlight.js/lib/languages/makefile";
53
60
  import ini from "highlight.js/lib/languages/ini";
54
61
  import diff from "highlight.js/lib/languages/diff";
62
+ import plaintext from "highlight.js/lib/languages/plaintext";
55
63
  /** 등록하는 언어 이름. 테스트가 이 목록으로 실제 등록분을 검사한다. */
56
64
  export const CODE_LANGUAGES = [
57
65
  // 채점·알고리즘
@@ -79,6 +87,8 @@ export const CODE_LANGUAGES = [
79
87
  "makefile",
80
88
  "ini",
81
89
  "diff",
90
+ // 서식 없음 (별칭 `text`·`txt`)
91
+ "plaintext",
82
92
  ];
83
93
  export const lowlight = createLowlight();
84
94
  lowlight.register({
@@ -103,4 +113,5 @@ lowlight.register({
103
113
  makefile,
104
114
  ini,
105
115
  diff,
116
+ plaintext,
106
117
  });
@@ -48,6 +48,20 @@ describe("코드 하이라이터 언어 목록", () => {
48
48
  expect(lowlight.registered("ts")).toBe(true);
49
49
  expect(lowlight.registered("c++")).toBe(true);
50
50
  });
51
+ /*
52
+ * ⚠️ 이게 빠지면 증상이 "색이 없다"가 아니라 **"엉뚱한 색이 붙는다"** 라 눈에 안 띈다.
53
+ * 등록되지 않은 이름은 자동 감지로 떨어지므로, 색을 빼려고 ```text 로 적은 예시
54
+ * 입출력에 문법 색이 칠해졌다. `disableAutodetect` 라 다른 언어의 감지는 안 건드린다.
55
+ */
56
+ it("plaintext 가 text·txt 별칭으로 등록돼 있다", () => {
57
+ for (const lang of ["plaintext", "text", "txt"]) {
58
+ expect(lowlight.registered(lang)).toBe(true);
59
+ }
60
+ });
61
+ it("plaintext 는 색을 입히지 않는다", () => {
62
+ const tree = lowlight.highlight("text", "3 1\n1 2 3");
63
+ expect(tree.children.every((node) => node.type === "text")).toBe(true);
64
+ });
51
65
  it("등록하지 않은 언어는 색이 없다(깨지지는 않는다)", () => {
52
66
  expect(lowlight.registered("ruby")).toBe(false);
53
67
  // 색을 못 입혀도 예외를 던지지 않고 평범한 텍스트로 남는지
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teriusu/rich-editor",
3
- "version": "0.9.13",
3
+ "version": "0.9.14",
4
4
  "description": "TipTap 기반 Notion-style 리치 텍스트 에디터 (Svelte)",
5
5
  "type": "module",
6
6
  "svelte": "./dist/index.js",