c063 1.4.7 → 1.4.9

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.
@@ -6,6 +6,7 @@ import { CodeBlockProps } from "../types/index";
6
6
  * @param props.tokenLines 所有程式碼行的 token 陣列
7
7
  * @param props.showLineNumbers 是否顯示行號,預設為 true
8
8
  * @param props.lineNumberStyle 行號的自訂樣式
9
+ * @param props.theme 主題
9
10
  * @param rest 其他傳遞給 <pre> 的屬性
10
11
  * @returns JSX 元素,呈現語法高亮的程式碼區塊
11
12
  */
@@ -7,6 +7,7 @@ import { CodeLine } from "./CodeLine";
7
7
  * @param props.tokenLines 所有程式碼行的 token 陣列
8
8
  * @param props.showLineNumbers 是否顯示行號,預設為 true
9
9
  * @param props.lineNumberStyle 行號的自訂樣式
10
+ * @param props.theme 主題
10
11
  * @param rest 其他傳遞給 <pre> 的屬性
11
12
  * @returns JSX 元素,呈現語法高亮的程式碼區塊
12
13
  */
@@ -5,6 +5,7 @@ import { CodeLineProps } from "../types/index";
5
5
  * @template T 元件渲染類型,例如 <code>、<span> 等
6
6
  * @param props.tokens 該行所包含的語法 token 陣列
7
7
  * @param props.style 自訂樣式,會與 whiteSpace: pre-wrap 合併
8
+ * @param props.theme 主題
8
9
  * @param rest 其他 HTMLAttributes
9
10
  * @returns JSX 元素,呈現語法 token 的單行程式碼
10
11
  */
@@ -6,6 +6,7 @@ import { CodeToken } from "./CodeToken";
6
6
  * @template T 元件渲染類型,例如 <code>、<span> 等
7
7
  * @param props.tokens 該行所包含的語法 token 陣列
8
8
  * @param props.style 自訂樣式,會與 whiteSpace: pre-wrap 合併
9
+ * @param props.theme 主題
9
10
  * @param rest 其他 HTMLAttributes
10
11
  * @returns JSX 元素,呈現語法 token 的單行程式碼
11
12
  */
@@ -13,6 +14,6 @@ export const CodeLine = ({ style, tokens, theme, ...rest }) => {
13
14
  return (_jsx("code", { ...rest, style: {
14
15
  whiteSpace: "pre-wrap",
15
16
  ...style,
16
- }, children: tokens.map((token, index) => (_jsx(CodeToken, { theme: theme, ...token }, `${token.type}-${index}`))) }));
17
+ }, children: tokens.map((token, index) => (_jsx(CodeToken, { theme: theme, ...token }, index))) }));
17
18
  };
18
19
  CodeLine.displayName = "CodeLine";
@@ -7,6 +7,7 @@ import { CodeTokenProps } from "../types/index";
7
7
  * @param props.type 語法類型,用於對應不同顏色
8
8
  * @param props.style 額外樣式,會與語法顏色合併
9
9
  * @param props.children 顯示的程式碼字串
10
+ * @param props.theme 主題設定
10
11
  * @param rest 其他 HTML 屬性
11
12
  * @returns JSX 元素,顯示帶有語法顏色的 token
12
13
  */
@@ -8,6 +8,7 @@ import { themeMap } from "../libs/index";
8
8
  * @param props.type 語法類型,用於對應不同顏色
9
9
  * @param props.style 額外樣式,會與語法顏色合併
10
10
  * @param props.children 顯示的程式碼字串
11
+ * @param props.theme 主題設定
11
12
  * @param rest 其他 HTML 屬性
12
13
  * @returns JSX 元素,顯示帶有語法顏色的 token
13
14
  */
@@ -15,4 +15,5 @@ declare const _themeRegistry: {
15
15
  };
16
16
  export declare const themes: (keyof typeof _themeRegistry)[];
17
17
  export declare const themeMap: Record<CodeTheme, Record<CodeTokenType, React.CSSProperties["color"]>>;
18
+ export declare const parsableLanguages: readonly ["javascript"];
18
19
  export {};
@@ -28,3 +28,4 @@ const _themeRegistry = {
28
28
  export const themes = Object.keys(_themeRegistry);
29
29
  // themeMap 保留給外部使用
30
30
  export const themeMap = _themeRegistry;
31
+ export const parsableLanguages = ["javascript"];
@@ -1,10 +1,9 @@
1
- import { themes } from "../libs";
1
+ import { parsableLanguages, themes } from "../libs";
2
2
  import { AsComponentProps, OverrideProps } from "./common";
3
3
  /**
4
4
  * 用於表示語法高亮中每個 token 的語意分類,對應於 `<CodeToken />` 中的 `type`。
5
5
  *
6
6
  * 每個類型會對應特定的顏色與用途,例如關鍵字、數字、字串、註解等,
7
- * 可配合 `codeColoreMap` 指定顯示樣式。s
8
7
  *
9
8
  * 類型分為以下幾大類:
10
9
  *
@@ -48,7 +47,7 @@ export type CodeTokenProps<T extends React.ElementType> = AsComponentProps<T, {
48
47
  */
49
48
  theme?: CodeTheme;
50
49
  }>;
51
- export type CodeTokenBuilder = <T extends React.ElementType>(children: CodeTokenProps<T>["children"], props?: CodeTokenProps<T>) => CodeTokenProps<T>;
50
+ export type CodeTokenBuilder = <T extends React.ElementType = "span">(children: CodeTokenProps<T>["children"], props?: CodeTokenProps<T>) => CodeTokenProps<T>;
52
51
  /**
53
52
  * 用於單一程式碼行的屬性,用在 <CodeLine /> 或類似元件中。
54
53
  */
@@ -114,3 +113,4 @@ export type CodeBlockProps<T extends React.ElementType> = OverrideProps<React.HT
114
113
  */
115
114
  theme?: CodeTheme;
116
115
  }>;
116
+ export type ParsableLanguage = (typeof parsableLanguages)[number];
@@ -53,3 +53,14 @@ export const extractTokenContent = (token) => {
53
53
  return _extract(token.children);
54
54
  };
55
55
  export default c063;
56
+ /**
57
+ * 待實現
58
+ */
59
+ const _parseTokens = new Proxy({}, {
60
+ get: (_, prop) => {
61
+ const parser = (content) => {
62
+ return [];
63
+ };
64
+ return parser;
65
+ },
66
+ });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "c063",
4
- "version": "1.4.7",
4
+ "version": "1.4.9",
5
5
  "description": "A React component for displaying code snippets with syntax highlighting.",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -7,6 +7,7 @@ import { CodeLine } from "./CodeLine";
7
7
  * @param props.tokenLines 所有程式碼行的 token 陣列
8
8
  * @param props.showLineNumbers 是否顯示行號,預設為 true
9
9
  * @param props.lineNumberStyle 行號的自訂樣式
10
+ * @param props.theme 主題
10
11
  * @param rest 其他傳遞給 <pre> 的屬性
11
12
  * @returns JSX 元素,呈現語法高亮的程式碼區塊
12
13
  */
@@ -6,6 +6,7 @@ import { CodeToken } from "./CodeToken";
6
6
  * @template T 元件渲染類型,例如 <code>、<span> 等
7
7
  * @param props.tokens 該行所包含的語法 token 陣列
8
8
  * @param props.style 自訂樣式,會與 whiteSpace: pre-wrap 合併
9
+ * @param props.theme 主題
9
10
  * @param rest 其他 HTMLAttributes
10
11
  * @returns JSX 元素,呈現語法 token 的單行程式碼
11
12
  */
@@ -24,7 +25,7 @@ export const CodeLine = <T extends React.ElementType = "span">({
24
25
  }}
25
26
  >
26
27
  {tokens.map((token, index) => (
27
- <CodeToken key={`${token.type}-${index}`} theme={theme} {...token} />
28
+ <CodeToken key={index} theme={theme} {...token} />
28
29
  ))}
29
30
  </code>
30
31
  );
@@ -9,6 +9,7 @@ import { CodeTokenProps } from "../types/index";
9
9
  * @param props.type 語法類型,用於對應不同顏色
10
10
  * @param props.style 額外樣式,會與語法顏色合併
11
11
  * @param props.children 顯示的程式碼字串
12
+ * @param props.theme 主題設定
12
13
  * @param rest 其他 HTML 屬性
13
14
  * @returns JSX 元素,顯示帶有語法顏色的 token
14
15
  */
@@ -37,3 +37,5 @@ export const themeMap: Record<
37
37
  CodeTheme,
38
38
  Record<CodeTokenType, React.CSSProperties["color"]>
39
39
  > = _themeRegistry;
40
+
41
+ export const parsableLanguages = ["javascript"] as const;
@@ -1,10 +1,9 @@
1
- import { themes } from "../libs";
1
+ import { parsableLanguages, themes } from "../libs";
2
2
  import { AsComponentProps, OverrideProps } from "./common";
3
3
  /**
4
4
  * 用於表示語法高亮中每個 token 的語意分類,對應於 `<CodeToken />` 中的 `type`。
5
5
  *
6
6
  * 每個類型會對應特定的顏色與用途,例如關鍵字、數字、字串、註解等,
7
- * 可配合 `codeColoreMap` 指定顯示樣式。s
8
7
  *
9
8
  * 類型分為以下幾大類:
10
9
  *
@@ -65,7 +64,7 @@ export type CodeTokenProps<T extends React.ElementType> = AsComponentProps<
65
64
  }
66
65
  >;
67
66
 
68
- export type CodeTokenBuilder = <T extends React.ElementType>(
67
+ export type CodeTokenBuilder = <T extends React.ElementType = "span">(
69
68
  children: CodeTokenProps<T>["children"],
70
69
  props?: CodeTokenProps<T>
71
70
  ) => CodeTokenProps<T>;
@@ -143,3 +142,5 @@ export type CodeBlockProps<T extends React.ElementType> = OverrideProps<
143
142
  theme?: CodeTheme;
144
143
  }
145
144
  >;
145
+
146
+ export type ParsableLanguage = (typeof parsableLanguages)[number];
@@ -1,6 +1,10 @@
1
1
  import React from "react";
2
- import { CodeTokenBuilder, CodeTokenProps, CodeTokenType } from "../types";
3
-
2
+ import {
3
+ CodeTokenBuilder,
4
+ CodeTokenProps,
5
+ CodeTokenType,
6
+ ParsableLanguage,
7
+ } from "../types";
4
8
 
5
9
  /**
6
10
  * 語法 token 的建構器集合,每個 key 對應一種語法類型(如 `keyword-blue`, `string`, `comment` 等),
@@ -32,7 +36,7 @@ const c063 = new Proxy(
32
36
  ...props,
33
37
  };
34
38
  };
35
- return builder as CodeTokenBuilder;
39
+ return builder;
36
40
  },
37
41
  }
38
42
  ) as Record<CodeTokenType, CodeTokenBuilder>;
@@ -64,4 +68,19 @@ export const extractTokenContent = <T extends React.ElementType>(
64
68
  return _extract(token.children);
65
69
  };
66
70
 
67
- export default c063;
71
+ export default c063;
72
+
73
+ /**
74
+ * 待實現
75
+ */
76
+ const _parseTokens = new Proxy(
77
+ {},
78
+ {
79
+ get: (_, prop: ParsableLanguage) => {
80
+ const parser = (content: string): CodeTokenProps<"span">[][] => {
81
+ return [];
82
+ };
83
+ return parser;
84
+ },
85
+ }
86
+ ) as Record<ParsableLanguage, (content: string) => CodeTokenProps<"span">[][]>;