@cardenelabs/dragon 0.7.0 → 0.9.0

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/src/index.ts CHANGED
@@ -13,16 +13,12 @@ export { compileToCdl } from "./compile";
13
13
  export type { CompileNotice } from "./compile";
14
14
  export { parseTextDslV05 } from "./v05";
15
15
  // 記法一覧が「実際に受け付ける値」 を実装から引くための公開。 手書きすると説明と実装がずれる。
16
- export { PRESET_TYPES } from "./v05/parser";
16
+ export { DRAW_TARGETS, DRAW_WORDS, PRESET_TYPES, TOP_LEVEL_KEYS } from "./v05/parser";
17
17
  export { TONE_ALIAS, NODE_KIND_ALIAS } from "./keywords";
18
18
  export { lintDiagram, autoFix } from "./notation-lint";
19
19
  export type { LintIssue, LintReport, LintSeverity } from "./notation-lint";
20
20
  // canvas pivot 新 spec 図境界計算 helper (§diagram-boundary SSOT)
21
- export {
22
- computeDiagramBoundingBox,
23
- rectsOverlap,
24
- DIAGRAM_BOUNDARY_PADDING,
25
- } from "./canvas-bounds";
21
+ export { computeDiagramBoundingBox, rectsOverlap, DIAGRAM_BOUNDARY_PADDING } from "./canvas-bounds";
26
22
  export type { DiagramBoundingBox } from "./canvas-bounds";
27
23
  // 位置を相対で書くための解決。 組み立て側と画面側の両方が同じ規則を使うために公開する。
28
24
  export {
@@ -78,6 +74,10 @@ export { isColorValue, pointsOutside, stripExternalPaint } from "./color";
78
74
  // 別々に持つと、片方だけが読める本文ができる (実測 = `位置: '300,200"` が
79
75
  // 画面側では座標 300 として通り、組み立て側では読めない値として知らせが出た)
80
76
  export { stripQuotes } from "./v05/parser";
77
+
78
+ // 画面で色分けするための分解器 (#1310)。 色は持たず、種類名と位置だけを返す
79
+ export { 記法を分解する, JSONを分解する, 区間に広げる } from "./tokenize";
80
+ export type { トークン, トークンの種類 } from "./tokenize";
81
81
  // 大きすぎる入力を組み立てる前に止める上限 (#1005)。 画面側も同じ物差しで事前に知らせられるよう公開する。
82
82
  export {
83
83
  MAX_INPUT_ELEMENTS,
@@ -96,6 +96,8 @@ export { diagramJsonSchema } from "./schema";
96
96
  export type {
97
97
  DragonJson,
98
98
  JsonActor,
99
+ JsonActorNodeOverride,
100
+ JsonAxes,
99
101
  JsonStep,
100
102
  JsonPhase,
101
103
  JsonDslError,
@@ -109,6 +111,9 @@ export type {
109
111
  DslPhase,
110
112
  DslTween,
111
113
  DslSet,
114
+ // `DslDocument.values` を触る利用者が型を import できるようにする (#1169)。
115
+ // 兄弟の `DslState` / `DslTween` / `DslSet` は公開されており、これだけ漏れていた
116
+ DslValue,
112
117
  DslError,
113
118
  PresetType,
114
119
  DslLane,
@@ -201,15 +206,24 @@ function isV05Source(src: string): boolean {
201
206
  // 判定不足。 v0.4-specific syntax (`step "..." Xs` = colon なし step / `^\d+\.\s+` = 番号 flow) を
202
207
  // negative marker に追加。
203
208
  const V04_KEYWORDS = [
204
- // Japanese v0.4 専用 keyword (v0.5 は英語のみ)
205
- /^\s*タイトル\s*[::]/, // title (JA)
206
- /^\s*種類\s*[::]/, // type (JA)
207
- /^\s*登場人物\s*[::]/, // actors (JA)
208
- /^\s*流れ\s*[::]/, // flow (JA)
209
- /^\s*アニメーション\s*[::]/, // animation (JA)
210
- /^\s*動作\s*[::]/, // step (JA)
211
- /^\s*状態\s*[::]/, // state (JA)
212
- /^\s*ステップ\s*[「『]/, // step (JA)
209
+ // Japanese v0.4 専用 keyword (v0.5 は英語のみ)
210
+ //
211
+ // **字下げした行には当てない** (#1300)。 v0.4 の見出しは行頭に書くが、v0.5 の縦書き形は
212
+ // 必ず字下げする。 同じ語が「v0.4 の見出し」 と「v0.5 の箱の欄 / 見本の状態名」 の両方で
213
+ // 使われるため、`\s*` を許すと **正しい v0.5 の本文が旧 parser へ回る**。
214
+ //
215
+ // 実測 = `種類:` を箱の欄として縦に書いた本文と、見本の状態名が下の 7 語のいずれかである
216
+ // 本文が、いずれも v0.4 として読まれて別の行を指す誤りを返していた。
217
+ /^タイトル\s*[::]/, // title (JA)
218
+ /^種類\s*[::]/, // type (JA)
219
+ /^登場人物\s*[::]/, // actors (JA)
220
+ /^流れ\s*[::]/, // flow (JA)
221
+ /^アニメーション\s*[::]/, // animation (JA)
222
+ /^動作\s*[::]/, // step (JA)
223
+ /^状態\s*[::]/, // state (JA)
224
+ // 鉤括弧が続く形は v0.5 に無い (状態名は `ステップ: 5` の形しか取れない) ため、
225
+ // 字下げを許しても v0.5 と衝突しない。 v0.4 では `アニメーション:` の下に字下げして書く
226
+ /^\s*ステップ\s*[「『]/, // step (JA)
213
227
  // v0.4 English-specific syntax = colon なし step (v0.5 は step: 必須)
214
228
  /^\s*step\s+"[^"]+"\s+[\d.]+\s*s\b/,
215
229
  /^\s*step\s+'[^']+'\s+[\d.]+\s*s\b/,
package/src/input-size.ts CHANGED
@@ -49,6 +49,9 @@ export interface InputSize {
49
49
  * **段の中身 (光らせる相手 / 遷移 / 即時変更) も数える**。 段の数だけを見ると、
50
50
  * 1 段に 1,000 件の相手を書いた形が 1 件として通る。 実測ではこの形が組み立ての中で
51
51
  * 約 100 万件に展開され、 呼び出しの深さが上限を超えて落ちた。
52
+ *
53
+ * **他の値から決まる値 (`values:`) も数える** (#1162)。 これらは毎 frame 解かれるので、
54
+ * 数に入れないと上限をすり抜けた本文が描画のたびに重さを持つ。
52
55
  */
53
56
  export function countDocElements(doc: DslDocument): number {
54
57
  const phases = doc.animate?.phases ?? [];
@@ -62,6 +65,7 @@ export function countDocElements(doc: DslDocument): number {
62
65
  phases.length +
63
66
  phaseChildren +
64
67
  (doc.animate?.states.length ?? 0) +
68
+ (doc.values?.length ?? 0) +
65
69
  (doc.groups ? Object.keys(doc.groups).length : 0) +
66
70
  (doc.lanes ? Object.keys(doc.lanes).length : 0)
67
71
  );
@@ -87,6 +91,7 @@ export function countDiagramElements(diagram: {
87
91
  formulas?: unknown[];
88
92
  scrollTriggers?: unknown[];
89
93
  eventBindings?: unknown[];
94
+ derived?: unknown[];
90
95
  }): number {
91
96
  const phases = Array.isArray(diagram.phases) ? diagram.phases : [];
92
97
  const phaseChildren = phases.reduce((acc: number, p) => {
@@ -111,7 +116,9 @@ export function countDiagramElements(diagram: {
111
116
  (diagram.inputs?.length ?? 0) +
112
117
  (diagram.formulas?.length ?? 0) +
113
118
  (diagram.scrollTriggers?.length ?? 0) +
114
- (diagram.eventBindings?.length ?? 0)
119
+ (diagram.eventBindings?.length ?? 0) +
120
+ // 他の値から決まる値 (#1162)。 記法側 (`countDocElements`) が数えるので、こちらも揃える
121
+ (diagram.derived?.length ?? 0)
115
122
  );
116
123
  }
117
124