flow-frame-core 0.1.0 → 0.1.7

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.
Files changed (239) hide show
  1. package/README.md +32 -0
  2. package/TOOLS.md +1080 -0
  3. package/dist/browerRoutes.d.ts.map +1 -1
  4. package/dist/browerRoutes.js.map +1 -1
  5. package/dist/browser-utils/utils.d.ts.map +1 -1
  6. package/dist/browser-utils/utils.js +1 -0
  7. package/dist/browser-utils/utils.js.map +1 -1
  8. package/dist/controllers/browserController.d.ts +28 -0
  9. package/dist/controllers/browserController.d.ts.map +1 -0
  10. package/dist/controllers/browserController.js +45 -0
  11. package/dist/controllers/browserController.js.map +1 -0
  12. package/dist/controllers/extensionController.d.ts +39 -0
  13. package/dist/controllers/extensionController.d.ts.map +1 -0
  14. package/dist/controllers/extensionController.js +29 -0
  15. package/dist/controllers/extensionController.js.map +1 -0
  16. package/dist/controllers/promptController.d.ts +22 -0
  17. package/dist/controllers/promptController.d.ts.map +1 -0
  18. package/dist/controllers/promptController.js +59 -0
  19. package/dist/controllers/promptController.js.map +1 -0
  20. package/dist/controllers/promptLibraryController.d.ts +16 -0
  21. package/dist/controllers/promptLibraryController.d.ts.map +1 -0
  22. package/dist/controllers/promptLibraryController.js +60 -0
  23. package/dist/controllers/promptLibraryController.js.map +1 -0
  24. package/dist/controllers/standardController.d.ts +38 -0
  25. package/dist/controllers/standardController.d.ts.map +1 -0
  26. package/dist/controllers/standardController.js +79 -0
  27. package/dist/controllers/standardController.js.map +1 -0
  28. package/dist/controllers/workflowController.d.ts +19 -0
  29. package/dist/controllers/workflowController.d.ts.map +1 -0
  30. package/dist/controllers/workflowController.js +94 -0
  31. package/dist/controllers/workflowController.js.map +1 -0
  32. package/dist/filter-gmail-poller/filter-gmail-poller.d.ts.map +1 -1
  33. package/dist/filter-gmail-poller/filter-gmail-poller.js +1 -0
  34. package/dist/filter-gmail-poller/filter-gmail-poller.js.map +1 -1
  35. package/dist/index.d.ts +8 -0
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +46 -0
  38. package/dist/index.js.map +1 -1
  39. package/dist/operations/blender-ops.d.ts.map +1 -1
  40. package/dist/operations/blender-ops.js +0 -1
  41. package/dist/operations/blender-ops.js.map +1 -1
  42. package/dist/operations.d.ts +1 -1
  43. package/dist/operations.d.ts.map +1 -1
  44. package/dist/operations.js +1 -0
  45. package/dist/operations.js.map +1 -1
  46. package/dist/process.d.ts.map +1 -1
  47. package/dist/process.js +1 -0
  48. package/dist/process.js.map +1 -1
  49. package/dist/server.js +32 -1
  50. package/dist/services/audioService.js.map +1 -1
  51. package/dist/services/autoPromptOptimizer.d.ts.map +1 -1
  52. package/dist/services/autoPromptOptimizer.js +1 -0
  53. package/dist/services/autoPromptOptimizer.js.map +1 -1
  54. package/dist/services/chainExecutor.d.ts +2 -1
  55. package/dist/services/chainExecutor.d.ts.map +1 -1
  56. package/dist/services/chainExecutor.js +105 -129
  57. package/dist/services/chainExecutor.js.map +1 -1
  58. package/dist/services/configuration/executor.d.ts.map +1 -1
  59. package/dist/services/configuration/executor.js +1 -0
  60. package/dist/services/configuration/executor.js.map +1 -1
  61. package/dist/services/error.d.ts.map +1 -1
  62. package/dist/services/error.js +1 -0
  63. package/dist/services/error.js.map +1 -1
  64. package/dist/services/executor.d.ts.map +1 -1
  65. package/dist/services/executor.js +110 -51
  66. package/dist/services/executor.js.map +1 -1
  67. package/dist/services/extractPdf.d.ts.map +1 -1
  68. package/dist/services/extractPdf.js +1 -0
  69. package/dist/services/extractPdf.js.map +1 -1
  70. package/dist/services/polyfill_canvas.js +1 -0
  71. package/dist/services/polyfill_canvas.js.map +1 -1
  72. package/dist/services/runPrompt.d.ts +1 -1
  73. package/dist/services/runPrompt.d.ts.map +1 -1
  74. package/dist/services/runPrompt.js +1 -1
  75. package/dist/services/runPrompt.js.map +1 -1
  76. package/dist/services/self-learning/injest.d.ts.map +1 -1
  77. package/dist/services/self-learning/injest.js +1 -0
  78. package/dist/services/self-learning/injest.js.map +1 -1
  79. package/dist/services/self-learning/matcher.d.ts +1 -1
  80. package/dist/services/self-learning/recognize.d.ts.map +1 -1
  81. package/dist/services/self-learning/recognize.js +1 -0
  82. package/dist/services/self-learning/recognize.js.map +1 -1
  83. package/dist/services/stepByStepAiPlanner.d.ts.map +1 -1
  84. package/dist/services/stepByStepAiPlanner.js +1 -0
  85. package/dist/services/stepByStepAiPlanner.js.map +1 -1
  86. package/dist/services/uiMapPathFinder.d.ts.map +1 -1
  87. package/dist/services/uiMapPathFinder.js +1 -0
  88. package/dist/services/uiMapPathFinder.js.map +1 -1
  89. package/dist/services/uiMapService.d.ts.map +1 -1
  90. package/dist/services/uiMapService.js +1 -0
  91. package/dist/services/uiMapService.js.map +1 -1
  92. package/dist/services/uiPlanner.d.ts.map +1 -1
  93. package/dist/services/uiPlanner.js.map +1 -1
  94. package/dist/services/variableGenerator.d.ts +1 -1
  95. package/dist/services/variableGenerator.d.ts.map +1 -1
  96. package/dist/services/variableGenerator.js.map +1 -1
  97. package/dist/standardRoutes.d.ts.map +1 -1
  98. package/dist/standardRoutes.js +92 -108
  99. package/dist/standardRoutes.js.map +1 -1
  100. package/dist/storage.d.ts +6 -0
  101. package/dist/storage.d.ts.map +1 -1
  102. package/dist/storage.js +104 -23
  103. package/dist/storage.js.map +1 -1
  104. package/dist/storage.zachary.json +22 -0
  105. package/dist/suno_download.js +1 -1
  106. package/dist/suno_download.js.map +1 -1
  107. package/dist/utils.d.ts +8 -12
  108. package/dist/utils.d.ts.map +1 -1
  109. package/dist/utils.js +30 -1
  110. package/dist/utils.js.map +1 -1
  111. package/dist/workflowRoutes.d.ts.map +1 -1
  112. package/dist/workflowRoutes.js +28 -60
  113. package/dist/workflowRoutes.js.map +1 -1
  114. package/package.json +3 -2
  115. package/dist/augment-parallel.d.ts +0 -6
  116. package/dist/augment-parallel.d.ts.map +0 -1
  117. package/dist/augment-parallel.js +0 -128
  118. package/dist/augment-parallel.js.map +0 -1
  119. package/dist/augment-worker.d.ts +0 -2
  120. package/dist/augment-worker.d.ts.map +0 -1
  121. package/dist/augment-worker.js +0 -100
  122. package/dist/augment-worker.js.map +0 -1
  123. package/dist/capture_training_data_endpoints.d.ts +0 -158
  124. package/dist/capture_training_data_endpoints.d.ts.map +0 -1
  125. package/dist/capture_training_data_endpoints.js +0 -1812
  126. package/dist/capture_training_data_endpoints.js.map +0 -1
  127. package/dist/download.d.ts +0 -11
  128. package/dist/download.d.ts.map +0 -1
  129. package/dist/download.js +0 -31
  130. package/dist/download.js.map +0 -1
  131. package/dist/extension/background.d.ts +0 -2
  132. package/dist/extension/background.d.ts.map +0 -1
  133. package/dist/extension/background.js +0 -268
  134. package/dist/extension/background.js.map +0 -1
  135. package/dist/filter-gmail-poller/demo.d.ts +0 -2
  136. package/dist/filter-gmail-poller/demo.d.ts.map +0 -1
  137. package/dist/filter-gmail-poller/demo.js +0 -79
  138. package/dist/filter-gmail-poller/demo.js.map +0 -1
  139. package/dist/filter-gmail-poller/example-existing-app.d.ts +0 -2
  140. package/dist/filter-gmail-poller/example-existing-app.d.ts.map +0 -1
  141. package/dist/filter-gmail-poller/example-existing-app.js +0 -72
  142. package/dist/filter-gmail-poller/example-existing-app.js.map +0 -1
  143. package/dist/filter-gmail-poller/index.d.ts +0 -3
  144. package/dist/filter-gmail-poller/index.d.ts.map +0 -1
  145. package/dist/filter-gmail-poller/index.js +0 -18
  146. package/dist/filter-gmail-poller/index.js.map +0 -1
  147. package/dist/filter-gmail-poller/manual-test.d.ts +0 -2
  148. package/dist/filter-gmail-poller/manual-test.d.ts.map +0 -1
  149. package/dist/filter-gmail-poller/manual-test.js +0 -70
  150. package/dist/filter-gmail-poller/manual-test.js.map +0 -1
  151. package/dist/filter-gmail-poller/test.js +0 -69
  152. package/dist/gmail-poller/example.d.ts +0 -5
  153. package/dist/gmail-poller/example.d.ts.map +0 -1
  154. package/dist/gmail-poller/example.js +0 -83
  155. package/dist/gmail-poller/example.js.map +0 -1
  156. package/dist/gmail-poller/gmail-poller.d.ts +0 -82
  157. package/dist/gmail-poller/gmail-poller.d.ts.map +0 -1
  158. package/dist/gmail-poller/gmail-poller.js +0 -455
  159. package/dist/gmail-poller/gmail-poller.js.map +0 -1
  160. package/dist/gmail-poller/manual-test.d.ts +0 -2
  161. package/dist/gmail-poller/manual-test.d.ts.map +0 -1
  162. package/dist/gmail-poller/manual-test.js +0 -37
  163. package/dist/gmail-poller/manual-test.js.map +0 -1
  164. package/dist/gmail-poller/microsoft-email-example.d.ts +0 -8
  165. package/dist/gmail-poller/microsoft-email-example.d.ts.map +0 -1
  166. package/dist/gmail-poller/microsoft-email-example.js +0 -58
  167. package/dist/gmail-poller/microsoft-email-example.js.map +0 -1
  168. package/dist/gmail-poller/microsoft-email-poller.d.ts +0 -73
  169. package/dist/gmail-poller/microsoft-email-poller.d.ts.map +0 -1
  170. package/dist/gmail-poller/microsoft-email-poller.js +0 -346
  171. package/dist/gmail-poller/microsoft-email-poller.js.map +0 -1
  172. package/dist/gmail-poller/setup-auth.d.ts +0 -3
  173. package/dist/gmail-poller/setup-auth.d.ts.map +0 -1
  174. package/dist/gmail-poller/setup-auth.js +0 -36
  175. package/dist/gmail-poller/setup-auth.js.map +0 -1
  176. package/dist/gmail-poller/test.js +0 -36
  177. package/dist/inference/augment_levels.d.ts +0 -2
  178. package/dist/inference/augment_levels.d.ts.map +0 -1
  179. package/dist/inference/augment_levels.js.map +0 -1
  180. package/dist/inference/capture-overlay.d.ts +0 -13
  181. package/dist/inference/capture-overlay.d.ts.map +0 -1
  182. package/dist/inference/capture-overlay.js +0 -355
  183. package/dist/inference/capture-overlay.js.map +0 -1
  184. package/dist/playparser.d.ts +0 -2
  185. package/dist/playparser.d.ts.map +0 -1
  186. package/dist/playparser.js +0 -281
  187. package/dist/playparser.js.map +0 -1
  188. package/dist/services/agenticUiPlanner.d.ts +0 -27
  189. package/dist/services/agenticUiPlanner.d.ts.map +0 -1
  190. package/dist/services/agenticUiPlanner.js +0 -161
  191. package/dist/services/agenticUiPlanner.js.map +0 -1
  192. package/dist/services/autoPromptOptimizer.manual-test.d.ts +0 -2
  193. package/dist/services/autoPromptOptimizer.manual-test.d.ts.map +0 -1
  194. package/dist/services/autoPromptOptimizer.manual-test.js +0 -27
  195. package/dist/services/autoPromptOptimizer.manual-test.js.map +0 -1
  196. package/dist/services/generateJsTransformFromPrompt.d.ts +0 -11
  197. package/dist/services/generateJsTransformFromPrompt.d.ts.map +0 -1
  198. package/dist/services/generateJsTransformFromPrompt.js +0 -328
  199. package/dist/services/generateJsTransformFromPrompt.js.map +0 -1
  200. package/dist/services/promptRoutes.d.ts +0 -7
  201. package/dist/services/promptRoutes.d.ts.map +0 -1
  202. package/dist/services/promptRoutes.js.map +0 -1
  203. package/dist/services/schemaInference.d.ts +0 -2
  204. package/dist/services/schemaInference.d.ts.map +0 -1
  205. package/dist/services/schemaInference.js +0 -17
  206. package/dist/services/schemaInference.js.map +0 -1
  207. package/dist/services/self-learning/autolearn.d.ts +0 -23
  208. package/dist/services/self-learning/autolearn.d.ts.map +0 -1
  209. package/dist/services/self-learning/autolearn.js +0 -308
  210. package/dist/services/self-learning/autolearn.js.map +0 -1
  211. package/dist/services/self-learning/learn.d.ts +0 -2
  212. package/dist/services/self-learning/learn.d.ts.map +0 -1
  213. package/dist/services/self-learning/learn.js +0 -145
  214. package/dist/services/self-learning/learn.js.map +0 -1
  215. package/dist/services/self-learning/schemaStrictify.d.ts +0 -2
  216. package/dist/services/self-learning/schemaStrictify.d.ts.map +0 -1
  217. package/dist/services/self-learning/schemaStrictify.js +0 -34
  218. package/dist/services/self-learning/schemaStrictify.js.map +0 -1
  219. package/dist/services/self-learning/transition_graph.d.ts +0 -6
  220. package/dist/services/self-learning/transition_graph.d.ts.map +0 -1
  221. package/dist/services/self-learning/transition_graph.js +0 -83
  222. package/dist/services/self-learning/transition_graph.js.map +0 -1
  223. package/dist/services/test-genjs.js +0 -39
  224. package/dist/services/test-genjs.manual-test.d.ts +0 -2
  225. package/dist/services/test-genjs.manual-test.d.ts.map +0 -1
  226. package/dist/services/test-genjs.manual-test.js +0 -40
  227. package/dist/services/test-genjs.manual-test.js.map +0 -1
  228. package/dist/test-web-element-requests.d.ts +0 -6
  229. package/dist/test-web-element-requests.d.ts.map +0 -1
  230. package/dist/test-web-element-requests.js +0 -114
  231. package/dist/test-web-element-requests.js.map +0 -1
  232. package/dist/test_pdf_render.d.ts +0 -2
  233. package/dist/test_pdf_render.d.ts.map +0 -1
  234. package/dist/test_pdf_render.js +0 -50
  235. package/dist/test_pdf_render.js.map +0 -1
  236. package/dist/web-element-requests.d.ts +0 -102
  237. package/dist/web-element-requests.d.ts.map +0 -1
  238. package/dist/web-element-requests.js +0 -278
  239. package/dist/web-element-requests.js.map +0 -1
@@ -1,355 +0,0 @@
1
- import fs from 'fs/promises';
2
- import path from 'path';
3
- import yaml from 'js-yaml';
4
- import sharp from 'sharp';
5
- /**
6
- * Process hierarchical annotations and generate YOLO training data
7
- * @param {string} imagePath - Path to the source image
8
- * @param {Object} annotationData - Annotation data structure
9
- * @param {string} outputDir - Target output directory
10
- * @param {Object} options - Processing options
11
- */
12
- export async function processAnnotations(imagePath, annotationData, outputDir, options = {}) {
13
- try {
14
- // Load and get image dimensions
15
- const imageBuffer = await fs.readFile(imagePath);
16
- console.log('Loaded image:', imagePath);
17
- const image = sharp(imageBuffer);
18
- const { width: imgWidth, height: imgHeight } = await image.metadata();
19
- console.log(`Image dimensions: ${imgWidth}x${imgHeight}`);
20
- const defaults = {
21
- prefix: `sample_${Date.now()}`,
22
- valSplit: 0.2,
23
- augCount: 100, // For now, just process once without jittering
24
- jitterPos: Math.min(imgWidth * 0.025, 13),
25
- jitterSize: Math.min(imgWidth * 0.05, 25),
26
- rootParentPercentageX: 0.1,
27
- rootParentPercentageY: 0.1,
28
- minAreaRatio: 0.05,
29
- onProgress: null // Callback for progress updates
30
- };
31
- const config = { ...defaults, ...options };
32
- // Parse annotation data structure
33
- const { classes, parents, boxes } = annotationData;
34
- // Build class hierarchy helpers
35
- const classToIndex = {};
36
- classes.forEach((name, idx) => classToIndex[name] = idx);
37
- const getDepth = (className) => {
38
- let depth = 0;
39
- let current = className;
40
- while (parents[current]) {
41
- depth++;
42
- current = parents[current];
43
- if (depth > 10)
44
- break; // Prevent infinite loops
45
- }
46
- return depth;
47
- };
48
- // Group classes by depth
49
- const depthToClasses = {};
50
- classes.forEach(className => {
51
- const depth = getDepth(className);
52
- if (!depthToClasses[depth])
53
- depthToClasses[depth] = [];
54
- depthToClasses[depth].push(className);
55
- });
56
- // Create directory structure for each depth
57
- for (const depth of Object.keys(depthToClasses)) {
58
- const levelDir = path.join(outputDir, `level_${depth}`);
59
- await fs.mkdir(path.join(levelDir, 'images', 'train'), { recursive: true });
60
- console.log(`Created directory: ${path.join(levelDir, 'images', 'train')}`);
61
- await fs.mkdir(path.join(levelDir, 'images', 'val'), { recursive: true });
62
- console.log(`Created directory: ${path.join(levelDir, 'images', 'val')}`);
63
- await fs.mkdir(path.join(levelDir, 'labels', 'train'), { recursive: true });
64
- console.log(`Created directory: ${path.join(levelDir, 'labels', 'train')}`);
65
- await fs.mkdir(path.join(levelDir, 'labels', 'val'), { recursive: true });
66
- console.log(`Created directory: ${path.join(levelDir, 'labels', 'val')}`);
67
- }
68
- // Convert boxes to processing format
69
- const processBoxes = boxes.map(box => ({
70
- x1: box.x,
71
- y1: box.y,
72
- x2: box.x + box.w,
73
- y2: box.y + box.h,
74
- classIdx: classToIndex[box.class],
75
- className: box.class,
76
- depth: getDepth(box.class)
77
- }));
78
- // Process each augmentation iteration
79
- for (let i = 0; i < config.augCount; i++) {
80
- const isVal = Math.random() < config.valSplit;
81
- const split = isVal ? 'val' : 'train';
82
- const iterPrefix = `${config.prefix}_${i.toString().padStart(4, '0')}`;
83
- console.log(`Processing iteration ${i + 1}/${config.augCount} (${split})`);
84
- // Apply jittering to boxes (for now, minimal jittering)
85
- const jitteredBoxes = processBoxes.map(box => {
86
- const dx = Math.floor(Math.random() * (config.jitterPos * 2 + 1)) - config.jitterPos;
87
- const dy = Math.floor(Math.random() * (config.jitterPos * 2 + 1)) - config.jitterPos;
88
- const dw = Math.floor(Math.random() * (config.jitterSize * 2 + 1)) - config.jitterSize;
89
- const dh = Math.floor(Math.random() * (config.jitterSize * 2 + 1)) - config.jitterSize;
90
- return {
91
- ...box,
92
- x1: Math.max(0, Math.min(box.x1 + dx, imgWidth - 1)),
93
- y1: Math.max(0, Math.min(box.y1 + dy, imgHeight - 1)),
94
- x2: Math.max(box.x1 + dx + 1, Math.min(box.x2 + dx + dw, imgWidth)),
95
- y2: Math.max(box.y1 + dy + 1, Math.min(box.y2 + dy + dh, imgHeight))
96
- };
97
- });
98
- // Process regions recursively
99
- await processRegion(image, { x1: 0, y1: 0, x2: imgWidth, y2: imgHeight }, -1, null, iterPrefix, jitteredBoxes, {
100
- classes,
101
- parents,
102
- classToIndex,
103
- getDepth,
104
- depthToClasses,
105
- outputDir,
106
- split,
107
- config,
108
- imgWidth,
109
- imgHeight
110
- });
111
- await config.onProgress?.({
112
- step: i + 1,
113
- totalSteps: config.augCount,
114
- percentage: Math.round(((i + 1) / config.augCount) * 100),
115
- message: `Processed augmentation ${i + 1}`
116
- });
117
- }
118
- // Generate data.yaml for each level
119
- for (const depth of Object.keys(depthToClasses)) {
120
- await generateDataYaml(path.join(outputDir, `level_${depth}`), classes, config);
121
- }
122
- console.log(`Successfully processed ${config.augCount} iterations with ${classes.length} classes`);
123
- }
124
- catch (error) {
125
- console.error('Error processing annotations:', error);
126
- throw error;
127
- }
128
- }
129
- /**
130
- * Recursive function to process regions at each depth level
131
- */
132
- async function processRegion(sourceImage, regionBox, regionDepth, parentClassIdx, namePrefix, jitteredBoxes, context) {
133
- const { classes, parents, classToIndex, getDepth, depthToClasses, outputDir, split, config, imgWidth, imgHeight } = context;
134
- const childDepth = regionDepth + 1;
135
- // Check if there are classes at this child depth
136
- if (!depthToClasses[childDepth]) {
137
- return;
138
- }
139
- const { x1: rx1, y1: ry1, x2: rx2, y2: ry2 } = regionBox;
140
- // Find candidate boxes at this depth level
141
- const candidateBoxes = jitteredBoxes.filter(box => {
142
- // Check depth
143
- if (box.depth !== childDepth)
144
- return false;
145
- // Check parent relationship (if not root)
146
- if (parentClassIdx !== null) {
147
- const parentClassName = classes[parentClassIdx];
148
- if (parents[box.className] !== parentClassName)
149
- return false;
150
- }
151
- // Check containment within region
152
- return box.x1 >= rx1 && box.y1 >= ry1 && box.x2 <= rx2 && box.y2 <= ry2;
153
- });
154
- if (candidateBoxes.length === 0) {
155
- return;
156
- }
157
- const levelFolder = path.join(outputDir, `level_${childDepth}`);
158
- // Create ONE image and label file for this parent region containing ALL child boxes
159
- const parentClassName = parentClassIdx !== null ? classes[parentClassIdx] : 'root';
160
- const thisPrefix = `${namePrefix}_${parentClassName}_${guid()}`;
161
- if (childDepth === 0) {
162
- // Depth 0: Save full image with all root boxes
163
- const imgPath = path.join(levelFolder, 'images', split, `${thisPrefix}.png`);
164
- console.log(`Creating full image for root boxes: ${imgPath}`);
165
- const labelPath = path.join(levelFolder, 'labels', split, `${thisPrefix}.txt`);
166
- console.log(`Creating label file for root boxes: ${labelPath}`);
167
- console.log(`Checking for existing image: ${imgPath}`);
168
- try {
169
- await fs.access(imgPath);
170
- console.log(`Image already exists: ${imgPath}`);
171
- }
172
- catch {
173
- // File doesn't exist, save it
174
- // await sourceImage.png().toFile(imgPath);
175
- await sourceImage.clone().png().toFile(imgPath);
176
- console.log(`Saved full image: ${imgPath}`);
177
- }
178
- // Create labels with ALL boxes at this depth level
179
- const labelLines = [];
180
- for (const box of candidateBoxes) {
181
- // Main box
182
- const xc = ((box.x1 + box.x2) / 2) / imgWidth;
183
- const yc = ((box.y1 + box.y2) / 2) / imgHeight;
184
- const wn = (box.x2 - box.x1) / imgWidth;
185
- const hn = (box.y2 - box.y1) / imgHeight;
186
- labelLines.push(`${box.classIdx} ${xc.toFixed(6)} ${yc.toFixed(6)} ${wn.toFixed(6)} ${hn.toFixed(6)}`);
187
- // Corner boxes for this box
188
- const cornerLines = generateCornerBoxes(box, box.classIdx, classes.length, config, imgWidth, imgHeight);
189
- labelLines.push(...cornerLines);
190
- }
191
- await fs.writeFile(labelPath, labelLines.join('\n') + '\n');
192
- console.log(`Created label file with ${candidateBoxes.length} boxes: ${labelPath}`);
193
- }
194
- else {
195
- // Child depth >= 1: Crop parent region and label ALL child boxes within it
196
- const parentAbsX1 = Math.floor(regionBox.x1);
197
- const parentAbsY1 = Math.floor(regionBox.y1);
198
- const parentAbsX2 = Math.floor(regionBox.x2);
199
- const parentAbsY2 = Math.floor(regionBox.y2);
200
- const regionW = parentAbsX2 - parentAbsX1;
201
- const regionH = parentAbsY2 - parentAbsY1;
202
- // Crop the image ONCE for this parent region
203
- const imgPath = path.join(levelFolder, 'images', split, `${thisPrefix}.png`);
204
- const labelPath = path.join(levelFolder, 'labels', split, `${thisPrefix}.txt`);
205
- try {
206
- await fs.access(imgPath);
207
- console.log(`Image already exists: ${imgPath}`);
208
- }
209
- catch {
210
- // File doesn't exist, crop and save it
211
- const croppedImage = sourceImage.clone().extract({
212
- left: parentAbsX1,
213
- top: parentAbsY1,
214
- width: regionW,
215
- height: regionH
216
- });
217
- await croppedImage.png().toFile(imgPath);
218
- console.log(`Saved cropped image: ${imgPath} (${regionW}x${regionH})`);
219
- }
220
- // Create labels for ALL child boxes in this cropped region
221
- const labelLines = [];
222
- for (const box of candidateBoxes) {
223
- const mx1 = box.x1 - rx1;
224
- const my1 = box.y1 - ry1;
225
- const mx2 = box.x2 - rx1;
226
- const my2 = box.y2 - ry1;
227
- const xc = ((mx1 + mx2) / 2) / regionW;
228
- const yc = ((my1 + my2) / 2) / regionH;
229
- const wn = (mx2 - mx1) / regionW;
230
- const hn = (my2 - my1) / regionH;
231
- labelLines.push(`${box.classIdx} ${xc.toFixed(6)} ${yc.toFixed(6)} ${wn.toFixed(6)} ${hn.toFixed(6)}`);
232
- }
233
- await fs.writeFile(labelPath, labelLines.join('\n') + '\n');
234
- console.log(`Saved label with ${candidateBoxes.length} child boxes for parent "${parentClassName}"`);
235
- }
236
- // Now recurse into EACH child box's region for the next depth level
237
- for (let idx = 0; idx < candidateBoxes.length; idx++) {
238
- const box = candidateBoxes[idx];
239
- // Calculate absolute coordinates for recursion
240
- let absRx1, absRy1, absRx2, absRy2;
241
- if (childDepth === 0) {
242
- absRx1 = box.x1;
243
- absRy1 = box.y1;
244
- absRx2 = box.x2;
245
- absRy2 = box.y2;
246
- }
247
- else {
248
- const parentAbsX1 = Math.floor(regionBox.x1);
249
- const parentAbsY1 = Math.floor(regionBox.y1);
250
- const mx1 = box.x1 - rx1;
251
- const my1 = box.y1 - ry1;
252
- const mx2 = box.x2 - rx1;
253
- const my2 = box.y2 - ry1;
254
- absRx1 = parentAbsX1 + Math.floor(mx1);
255
- absRy1 = parentAbsY1 + Math.floor(my1);
256
- absRx2 = parentAbsX1 + Math.floor(mx2);
257
- absRy2 = parentAbsY1 + Math.floor(my2);
258
- }
259
- // Recurse into this box's region for the next depth level
260
- await processRegion(sourceImage, { x1: absRx1, y1: absRy1, x2: absRx2, y2: absRy2 }, childDepth, box.classIdx, `${box.className}_c_${childDepth}_${idx}`, // Unique prefix for this child's descendants
261
- jitteredBoxes, context);
262
- }
263
- }
264
- const SKIP_CORNER_BOXES = true; // Set to true to skip corner boxes
265
- /**
266
- * Generate corner box labels for depth 0 boxes
267
- */
268
- function generateCornerBoxes(box, classIdx, numClasses, config, imgWidth, imgHeight) {
269
- const cornerBase = numClasses + (classIdx * 4);
270
- const pw = box.x2 - box.x1;
271
- const ph = box.y2 - box.y1;
272
- const cw = config.rootParentPercentageX * pw;
273
- const ch = config.rootParentPercentageY * ph;
274
- if (SKIP_CORNER_BOXES) {
275
- return [];
276
- }
277
- const corners = [
278
- // Top-left
279
- { x1: box.x1, y1: box.y1, x2: box.x1 + cw, y2: box.y1 + ch },
280
- // Top-right
281
- { x1: box.x2 - cw, y1: box.y1, x2: box.x2, y2: box.y1 + ch },
282
- // Bottom-left
283
- { x1: box.x1, y1: box.y2 - ch, x2: box.x1 + cw, y2: box.y2 },
284
- // Bottom-right
285
- { x1: box.x2 - cw, y1: box.y2 - ch, x2: box.x2, y2: box.y2 }
286
- ];
287
- return corners.map((corner, i) => {
288
- const cx = (corner.x1 + corner.x2) / 2;
289
- const cy = (corner.y1 + corner.y2) / 2;
290
- const xc = cx / imgWidth;
291
- const yc = cy / imgHeight;
292
- const wn = cw / imgWidth;
293
- const hn = ch / imgHeight;
294
- return `${cornerBase + i} ${xc.toFixed(6)} ${yc.toFixed(6)} ${wn.toFixed(6)} ${hn.toFixed(6)}`;
295
- });
296
- }
297
- function guid() {
298
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
299
- var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
300
- return v.toString(16);
301
- });
302
- }
303
- /**
304
- * Generate data.yaml file for YOLO training
305
- */
306
- async function generateDataYaml(levelDir, classes, config) {
307
- // Build expanded names list (original classes + corner classes)
308
- const expandedNames = [...classes];
309
- if (!SKIP_CORNER_BOXES) {
310
- classes.forEach(className => {
311
- expandedNames.push(`${className}#tl`, `${className}#tr`, `${className}#bl`, `${className}#br`);
312
- });
313
- }
314
- const yamlData = {
315
- train: 'images/train',
316
- val: 'images/val',
317
- nc: expandedNames.length,
318
- names: expandedNames
319
- };
320
- const yamlContent = yaml.dump(yamlData);
321
- const yamlPath = path.join(levelDir, 'data.yaml');
322
- await fs.writeFile(yamlPath, yamlContent);
323
- console.log(`Generated data.yaml in ${levelDir} (nc=${expandedNames.length})`);
324
- }
325
- /**
326
- * Example usage function
327
- */
328
- export async function processImageAnnotations(imagePath, annotationJsonPath, outputDir, options = {}) {
329
- try {
330
- const annotationData = JSON.parse(await fs.readFile(annotationJsonPath, 'utf8'));
331
- await processAnnotations(imagePath, annotationData, outputDir, options);
332
- console.log('Processing completed successfully');
333
- }
334
- catch (error) {
335
- console.error('Error processing image annotations:', error);
336
- throw error;
337
- }
338
- }
339
- ///Users/andrewporter/Documents/ai/yolo_training_data
340
- // Example usage:
341
- /*
342
- await processImageAnnotations(
343
- '/path/to/image.png',
344
- '/path/to/annotations.json',
345
- '/path/to/output',
346
- {
347
- prefix: 'my_sample',
348
- valSplit: 0.2,
349
- augCount: 100,
350
- rootParentPercentageX: 0.1,
351
- rootParentPercentageY: 0.1
352
- }
353
- );
354
- */
355
- //# sourceMappingURL=capture-overlay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"capture-overlay.js","sourceRoot":"","sources":["../../src/inference/capture-overlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,GAAG,EAAE;IAEvF,IAAI,CAAC;QACD,gCAAgC;QAEhC,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;QACjC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,qBAAqB,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;QAE1D,MAAM,QAAQ,GAAG;YACb,MAAM,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE;YAC9B,QAAQ,EAAE,GAAG;YACb,QAAQ,EAAE,GAAG,EAAE,+CAA+C;YAC9D,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,EAAE,EAAE,CAAC;YACzC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,EAAE,EAAE,CAAC;YACzC,qBAAqB,EAAE,GAAG;YAC1B,qBAAqB,EAAE,GAAG;YAC1B,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,IAAI,CAAC,gCAAgC;SACpD,CAAC;QAEF,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;QAE3C,kCAAkC;QAClC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC;QAEnD,gCAAgC;QAChC,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QAEzD,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,EAAE;YAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,OAAO,GAAG,SAAS,CAAC;YACxB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtB,KAAK,EAAE,CAAC;gBACR,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC3B,IAAI,KAAK,GAAG,EAAE;oBAAE,MAAM,CAAC,yBAAyB;YACpD,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC;QAEF,yBAAyB;QACzB,MAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YAClC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gBAAE,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACvD,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,4CAA4C;QAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,KAAK,EAAE,CAAC,CAAC;YACxD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5E,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1E,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5E,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,qCAAqC;QACrC,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnC,EAAE,EAAE,GAAG,CAAC,CAAC;YACT,EAAE,EAAE,GAAG,CAAC,CAAC;YACT,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACjB,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACjB,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;YACjC,SAAS,EAAE,GAAG,CAAC,KAAK;YACpB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;SAC7B,CAAC,CAAC,CAAC;QAEJ,sCAAsC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;YAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YACtC,MAAM,UAAU,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,GAAG,CAAC,CAAC;YAC3E,wDAAwD;YACxD,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACzC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;gBACrF,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;gBACrF,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;gBACvF,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;gBAEvF,OAAO;oBACH,GAAG,GAAG;oBACN,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;oBACpD,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;oBACrD,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;oBACnE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;iBACvE,CAAC;YACN,CAAC,CAAC,CAAC;YAEH,8BAA8B;YAC9B,MAAM,aAAa,CACf,KAAK,EACL,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAC7C,CAAC,CAAC,EACF,IAAI,EACJ,UAAU,EACV,aAAa,EACb;gBACI,OAAO;gBACP,OAAO;gBACP,YAAY;gBACZ,QAAQ;gBACR,cAAc;gBACd,SAAS;gBACT,KAAK;gBACL,MAAM;gBACN,QAAQ;gBACR,SAAS;aACZ,CACJ,CAAC;YACF,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,IAAI,EAAE,CAAC,GAAG,CAAC;gBACX,UAAU,EAAE,MAAM,CAAC,QAAQ;gBAC3B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;gBACzD,OAAO,EAAE,0BAA0B,CAAC,GAAG,CAAC,EAAE;aAC7C,CAAC,CAAC;QACP,CAAC;QAED,oCAAoC;QACpC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAC9C,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpF,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,QAAQ,oBAAoB,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;IAEvG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO;IAChH,MAAM,EACF,OAAO,EACP,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,SAAS,EACZ,GAAG,OAAO,CAAC;IAEZ,MAAM,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC;IAEnC,iDAAiD;IACjD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO;IACX,CAAC;IAED,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;IAEzD,2CAA2C;IAC3C,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAC9C,cAAc;QACd,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU;YAAE,OAAO,KAAK,CAAC;QAE3C,0CAA0C;QAC1C,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YAChD,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,eAAe;gBAAE,OAAO,KAAK,CAAC;QACjE,CAAC;QAED,kCAAkC;QAClC,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO;IACX,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC;IAEhE,oFAAoF;IACpF,MAAM,eAAe,GAAG,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACnF,MAAM,UAAU,GAAG,GAAG,UAAU,IAAI,eAAe,IAAI,IAAI,EAAE,EAAE,CAAC;IAEhE,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACnB,+CAA+C;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,UAAU,MAAM,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,uCAAuC,OAAO,EAAE,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,UAAU,MAAM,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,uCAAuC,SAAS,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACL,8BAA8B;YAC9B,2CAA2C;YAC3C,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,mDAAmD;QACnD,MAAM,UAAU,GAAG,EAAE,CAAC;QAEtB,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YAC/B,WAAW;YACX,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;YAC9C,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;YAC/C,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;YACxC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;YACzC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAEvG,4BAA4B;YAC5B,MAAM,WAAW,GAAG,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YACxG,UAAU,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,2BAA2B,cAAc,CAAC,MAAM,WAAW,SAAS,EAAE,CAAC,CAAC;IAExF,CAAC;SAAM,CAAC;QACJ,2EAA2E;QAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAE7C,MAAM,OAAO,GAAG,WAAW,GAAG,WAAW,CAAC;QAC1C,MAAM,OAAO,GAAG,WAAW,GAAG,WAAW,CAAC;QAE1C,6CAA6C;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,UAAU,MAAM,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,UAAU,MAAM,CAAC,CAAC;QAE/E,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACL,uCAAuC;YACvC,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC;gBAC7C,IAAI,EAAE,WAAW;gBACjB,GAAG,EAAE,WAAW;gBAChB,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,OAAO;aAClB,CAAC,CAAC;YACH,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,KAAK,OAAO,IAAI,OAAO,GAAG,CAAC,CAAC;QAC3E,CAAC;QAED,2DAA2D;QAC3D,MAAM,UAAU,GAAG,EAAE,CAAC;QAEtB,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;YAEzB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;YACvC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;YACvC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC;YACjC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC;YAEjC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3G,CAAC;QAED,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,oBAAoB,cAAc,CAAC,MAAM,4BAA4B,eAAe,GAAG,CAAC,CAAC;IACzG,CAAC;IAED,oEAAoE;IACpE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QAEhC,+CAA+C;QAC/C,IAAI,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QAEnC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;QACpB,CAAC;aAAM,CAAC;YACJ,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;YAEzB,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QAED,0DAA0D;QAC1D,MAAM,aAAa,CACf,WAAW,EACX,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAClD,UAAU,EACV,GAAG,CAAC,QAAQ,EACZ,GAAG,GAAG,CAAC,SAAS,MAAM,UAAU,IAAI,GAAG,EAAE,EAAE,6CAA6C;QACxF,aAAa,EACb,OAAO,CACV,CAAC;IACN,CAAC;AACL,CAAC;AACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,mCAAmC;AACnE;;GAEG;AACH,SAAS,mBAAmB,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS;IAC/E,MAAM,UAAU,GAAG,UAAU,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;IAC3B,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;IAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,qBAAqB,GAAG,EAAE,CAAC;IAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,qBAAqB,GAAG,EAAE,CAAC;IAC7C,IAAI,iBAAiB,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG;QACZ,WAAW;QACX,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE;QAC5D,YAAY;QACZ,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE;QAC5D,cAAc;QACd,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;QAC5D,eAAe;QACf,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;KAC/D,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;QACzB,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;QAC1B,MAAM,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;QACzB,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;QAE1B,OAAO,GAAG,UAAU,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACnG,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAS,IAAI;IACT,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;QACtE,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QACpE,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACP,CAAC;AACD;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM;IACrD,gEAAgE;IAChE,MAAM,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACrB,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACxB,aAAa,CAAC,IAAI,CACd,GAAG,SAAS,KAAK,EACjB,GAAG,SAAS,KAAK,EACjB,GAAG,SAAS,KAAK,EACjB,GAAG,SAAS,KAAK,CACpB,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,QAAQ,GAAG;QACb,KAAK,EAAE,cAAc;QACrB,GAAG,EAAE,YAAY;QACjB,EAAE,EAAE,aAAa,CAAC,MAAM;QACxB,KAAK,EAAE,aAAa;KACvB,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAElD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,QAAQ,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;AACnF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,OAAO,GAAG,EAAE;IAChG,IAAI,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;QACjF,MAAM,kBAAkB,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AACD,qDAAqD;AAErD,iBAAiB;AACjB;;;;;;;;;;;;;EAaE"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=playparser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"playparser.d.ts","sourceRoot":"","sources":["../src/playparser.ts"],"names":[],"mappings":""}
@@ -1,281 +0,0 @@
1
- /**
2
- * Parses a specially formatted play text (like Shakespeare) into a structured JSON object.
3
- *
4
- * @param {string} input - The raw play text.
5
- * @returns {object} - A JSON object representing the play structure.
6
- */
7
- function parsePlay(input) {
8
- const lines = input.split(/\r?\n/);
9
- const play = {
10
- title: null,
11
- acts: []
12
- };
13
- let currentAct = null;
14
- let currentScene = null;
15
- let currentBlock = null;
16
- // Helper: finalize and push the currentBlock (speech or direction) into the current scene
17
- function finalizeBlock() {
18
- if (!currentScene || !currentBlock)
19
- return;
20
- currentScene.blocks.push(currentBlock);
21
- currentBlock = null;
22
- }
23
- // Iterate line by line
24
- for (let rawLine of lines) {
25
- const line = rawLine.trim();
26
- // Skip blank lines
27
- if (line === "")
28
- continue;
29
- // 1) Detect the play title (first non-empty line before any Act)
30
- if (!play.title && /^The\s+/i.test(line)) {
31
- play.title = line;
32
- continue;
33
- }
34
- // 2) Detect Act headings: “Actus Primus. Scoena Prima.” or “Actus Secundus. Scoena Secunda.”, etc.
35
- const actMatch = line.match(/^(Actus\s+[IVXLC]+)\.\s*(Scoena\s+[IVXLC]+)/i);
36
- if (actMatch) {
37
- // Finalize any previous blocks/scenes
38
- finalizeBlock();
39
- // Start a new Act
40
- currentAct = {
41
- title: actMatch[1], // e.g. “Actus Primus”
42
- sceneHead: actMatch[2], // e.g. “Scoena Prima”
43
- scenes: []
44
- };
45
- play.acts.push(currentAct);
46
- // Immediately start the first Scene within this act
47
- currentScene = {
48
- title: actMatch[2],
49
- blocks: []
50
- };
51
- currentAct.scenes.push(currentScene);
52
- continue;
53
- }
54
- // 3) Detect a new Scene within the same Act (in case acts contain multiple scenes).
55
- // If the line starts with “Scoena...” and we already have an act open, start a new scene.
56
- const sceneMatch = line.match(/^Scoena\s+[IVXLC]+(?:\.\s*.*)?$/i);
57
- if (sceneMatch && currentAct) {
58
- finalizeBlock();
59
- currentScene = {
60
- title: line,
61
- blocks: []
62
- };
63
- currentAct.scenes.push(currentScene);
64
- continue;
65
- }
66
- // 4) Detect stage directions: lines beginning with keywords like “Enter”, “Exit”, “Exeunt”, “Sennet”, “Flourish”
67
- const directionMatch = line.match(/^(Enter|Exit|Exeunt|Sennet|Flourish|Exeunt\.)/i);
68
- if (directionMatch && currentScene) {
69
- // Finalize any prior block
70
- finalizeBlock();
71
- currentBlock = {
72
- type: "direction",
73
- text: line
74
- };
75
- // Immediately finalize this direction block
76
- finalizeBlock();
77
- continue;
78
- }
79
- // 5) Detect a speech line: “Flauius. Hence: home you idle Creatures, get you home:”
80
- // Speaker name is everything before the first period followed by space.
81
- const speechMatch = line.match(/^([A-Za-z][A-Za-z0-9\.\-]*)\.\s*(.*)$/);
82
- if (speechMatch && currentScene) {
83
- // If there was a previous block (speech or direction), finalize it first
84
- finalizeBlock();
85
- const speaker = speechMatch[1];
86
- const text = speechMatch[2];
87
- currentBlock = {
88
- type: "speech",
89
- speaker: speaker,
90
- lines: [text]
91
- };
92
- continue;
93
- }
94
- // 6) If the line doesn't match any of the above, it is a continuation:
95
- // - Either part of the previous speech’s lines
96
- // - Or, in some rare cases, a direction extension
97
- if (currentBlock) {
98
- // Append to the current speech block’s lines
99
- if (currentBlock.type === "speech") {
100
- currentBlock.lines.push(line);
101
- }
102
- // If it were somehow a multi-line direction, we could append, but for now we treat each direction as single-line.
103
- continue;
104
- }
105
- // 7) Any other text outside known contexts: treat as unparsed or metadata. We’ll lump it as a “misc” block.
106
- if (currentScene) {
107
- currentBlock = {
108
- type: "misc",
109
- text: line
110
- };
111
- finalizeBlock();
112
- }
113
- }
114
- // Finalize any leftover block at end of input
115
- finalizeBlock();
116
- return play;
117
- }
118
- // Example usage:
119
- const rawText = `
120
- The Tragedie of Julius Caesar
121
-
122
- Actus Primus. Scoena Prima.
123
-
124
- Enter Flauius, Murellus, and certaine Commoners ouer the Stage.
125
-
126
- Flauius. Hence: home you idle Creatures, get you home:
127
- Is this a Holiday? What, know you not
128
- (Being Mechanicall) you ought not walke
129
- Vpon a labouring day, without the signe
130
- Of your Profession? Speake, what Trade art thou?
131
- Car. Why Sir, a Carpenter
132
-
133
- Mur. Where is thy Leather Apron, and thy Rule?
134
- What dost thou with thy best Apparrell on?
135
- You sir, what Trade are you?
136
- Cobl. Truely Sir, in respect of a fine Workman, I am
137
- but as you would say, a Cobler
138
-
139
- Mur. But what Trade art thou? Answer me directly
140
-
141
- Cob. A Trade Sir, that I hope I may vse, with a safe
142
- Conscience, which is indeed Sir, a Mender of bad soules
143
-
144
- Fla. What Trade thou knaue? Thou naughty knaue,
145
- what Trade?
146
- Cobl. Nay I beseech you Sir, be not out with me: yet
147
- if you be out Sir, I can mend you
148
-
149
- Mur. What mean'st thou by that? Mend mee, thou
150
- sawcy Fellow?
151
- Cob. Why sir, Cobble you
152
-
153
- Fla. Thou art a Cobler, art thou?
154
- Cob. Truly sir, all that I liue by, is with the Aule: I
155
- meddle with no Tradesmans matters, nor womens matters;
156
- but withal I am indeed Sir, a Surgeon to old shooes:
157
- when they are in great danger, I recouer them. As proper
158
- men as euer trod vpon Neats Leather, haue gone vpon
159
- my handy-worke
160
-
161
- Fla. But wherefore art not in thy Shop to day?
162
- Why do'st thou leade these men about the streets?
163
- Cob. Truly sir, to weare out their shooes, to get my
164
- selfe into more worke. But indeede sir, we make Holyday
165
- to see Caesar, and to reioyce in his Triumph
166
-
167
- Mur. Wherefore reioyce?
168
- What Conquest brings he home?
169
- What Tributaries follow him to Rome,
170
- To grace in Captiue bonds his Chariot Wheeles?
171
- You Blockes, you stones, you worse then senslesse things:
172
- O you hard hearts, you cruell men of Rome,
173
- Knew you not Pompey many a time and oft?
174
- Haue you climb'd vp to Walles and Battlements,
175
- To Towres and Windowes? Yea, to Chimney tops,
176
- Your Infants in your Armes, and there haue sate
177
- The liue-long day, with patient expectation,
178
- To see great Pompey passe the streets of Rome:
179
- And when you saw his Chariot but appeare,
180
- Haue you not made an Vniuersall shout,
181
- That Tyber trembled vnderneath her bankes
182
- To heare the replication of your sounds,
183
- Made in her Concaue Shores?
184
- And do you now put on your best attyre?
185
- And do you now cull out a Holyday?
186
- And do you now strew Flowers in his way,
187
- That comes in Triumph ouer Pompeyes blood?
188
- Be gone,
189
- Runne to your houses, fall vpon your knees,
190
- Pray to the Gods to intermit the plague
191
- That needs must light on this Ingratitude
192
-
193
- Fla. Go, go, good Countrymen, and for this fault
194
- Assemble all the poore men of your sort;
195
- Draw them to Tyber bankes, and weepe your teares
196
- Into the Channell, till the lowest streame
197
- Do kisse the most exalted Shores of all.
198
-
199
- Exeunt. all the Commoners.
200
-
201
- See where their basest mettle be not mou'd,
202
- They vanish tongue-tyed in their guiltinesse:
203
- Go you downe that way towards the Capitoll,
204
- This way will I: Disrobe the Images,
205
- If you do finde them deckt with Ceremonies
206
-
207
- Mur. May we do so?
208
- You know it is the Feast of Lupercall
209
-
210
- Fla. It is no matter, let no Images
211
- Be hung with Caesars Trophees: Ile about,
212
- And driue away the Vulgar from the streets;
213
- So do you too, where you perceiue them thicke.
214
- These growing Feathers, pluckt from Caesars wing,
215
- Will make him flye an ordinary pitch,
216
- Who else would soare aboue the view of men,
217
- And keepe vs all in seruile fearefulnesse.
218
-
219
- Exeunt.
220
-
221
- Enter Caesar, Antony for the Course, Calphurnia, Portia, Decius,
222
- Cicero,
223
- Brutus, Cassius, Caska, a Soothsayer: after them Murellus and
224
- Flauius.
225
-
226
- Caes. Calphurnia
227
-
228
- Cask. Peace ho, Caesar speakes
229
-
230
- Caes. Calphurnia
231
-
232
- Calp. Heere my Lord
233
-
234
- Caes. Stand you directly in Antonio's way,
235
- When he doth run his course. Antonio
236
-
237
- Ant. Cæsar, my Lord
238
-
239
- Caes. Forget not in your speed Antonio,
240
- To touch Calphurnia: for our Elders say,
241
- The Barren touched in this holy chace,
242
- Shake off their sterrile curse
243
-
244
- Ant. I shall remember,
245
- When Caesar sayes, Do this; it is perform'd
246
-
247
- Caes. Set on, and leaue no Ceremony out
248
-
249
- Sooth. Caesar
250
-
251
- Caes. Ha? Who calles?
252
- Cask. Bid euery noyse be still: peace yet againe
253
-
254
- Caes. Who is it in the presse, that calles on me?
255
- I heare a Tongue shriller then all the Musicke
256
- Cry, Caesar: Speake, Caesar is turn'd to heare
257
-
258
- Sooth. Beware the Ides of March
259
-
260
- Caes. What man is that?
261
- Br. A Sooth-sayer bids you beware the Ides of March
262
- Caes. Set him before me, let me see his face
263
-
264
- Cassi. Fellow, come from the throng, look vpon Caesar
265
-
266
- Caes. What sayst thou to me now? Speak once againe,
267
- Sooth. Beware the Ides of March
268
-
269
- Caes. He is a Dreamer, let vs leaue him: Passe.
270
-
271
- Sennet
272
-
273
- Exeunt. Manet Brut. & Cass.
274
-
275
- Cassi. Will you go see the order of the course?
276
- Brut. Not I
277
- `;
278
- const parsed = parsePlay(rawText);
279
- console.log(JSON.stringify(parsed, null, 2));
280
- export {};
281
- //# sourceMappingURL=playparser.js.map