@kerebron/extension-odt 0.3.0 → 0.3.1

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 (33) hide show
  1. package/README.md +8 -2
  2. package/esm/editor/src/CoreEditor.d.ts.map +1 -1
  3. package/esm/editor/src/CoreEditor.js +3 -1
  4. package/esm/editor/src/Extension.d.ts.map +1 -1
  5. package/esm/editor/src/ExtensionManager.d.ts +1 -1
  6. package/esm/editor/src/ExtensionManager.d.ts.map +1 -1
  7. package/esm/editor/src/nodeToTreeString.d.ts +8 -2
  8. package/esm/editor/src/nodeToTreeString.d.ts.map +1 -1
  9. package/esm/editor/src/nodeToTreeString.js +27 -11
  10. package/esm/editor/src/utilities/SmartOutput.d.ts +39 -0
  11. package/esm/editor/src/utilities/SmartOutput.d.ts.map +1 -0
  12. package/esm/editor/src/utilities/SmartOutput.js +213 -0
  13. package/esm/extension-odt/src/ExtensionOdt.d.ts +0 -1
  14. package/esm/extension-odt/src/ExtensionOdt.d.ts.map +1 -1
  15. package/esm/extension-odt/src/ExtensionOdt.js +25 -28
  16. package/esm/extension-odt/src/OdtParser.d.ts +41 -63
  17. package/esm/extension-odt/src/OdtParser.d.ts.map +1 -1
  18. package/esm/extension-odt/src/OdtParser.js +172 -474
  19. package/esm/extension-odt/src/lists.d.ts +23 -0
  20. package/esm/extension-odt/src/lists.d.ts.map +1 -0
  21. package/esm/extension-odt/src/lists.js +55 -0
  22. package/esm/extension-odt/src/node_handlers/basic_node_handlers.d.ts +4 -0
  23. package/esm/extension-odt/src/node_handlers/basic_node_handlers.d.ts.map +1 -0
  24. package/esm/extension-odt/src/node_handlers/basic_node_handlers.js +138 -0
  25. package/esm/extension-odt/src/node_handlers/list_node_handlers.d.ts +3 -0
  26. package/esm/extension-odt/src/node_handlers/list_node_handlers.d.ts.map +1 -0
  27. package/esm/extension-odt/src/node_handlers/list_node_handlers.js +91 -0
  28. package/esm/extension-odt/src/node_handlers/table_node_handlers.d.ts +3 -0
  29. package/esm/extension-odt/src/node_handlers/table_node_handlers.d.ts.map +1 -0
  30. package/esm/extension-odt/src/node_handlers/table_node_handlers.js +24 -0
  31. package/esm/extension-odt/src/postprocess/convertCodeParagraphsToCodeBlocks.d.ts.map +1 -1
  32. package/esm/extension-odt/src/postprocess/convertCodeParagraphsToCodeBlocks.js +3 -1
  33. package/package.json +1 -1
@@ -0,0 +1,23 @@
1
+ import { OdtElement } from './OdtParser.js';
2
+ export declare class ListNumbering {
3
+ levels: {
4
+ [level: number]: number;
5
+ };
6
+ levelNodes: {
7
+ [level: number]: Node;
8
+ };
9
+ constructor();
10
+ clearAbove(level: number): void;
11
+ setLevelNode(level: number, node: Node): void;
12
+ }
13
+ export interface List {
14
+ level: number;
15
+ odtElement: OdtElement;
16
+ }
17
+ export declare class ListTracker {
18
+ listStack: List[];
19
+ listNumberings: Map<string, ListNumbering>;
20
+ lastNumbering?: ListNumbering;
21
+ preserveMinLevel: number;
22
+ }
23
+ //# sourceMappingURL=lists.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lists.d.ts","sourceRoot":"","sources":["../../../src/extension-odt/src/lists.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,qBAAa,aAAa;IACxB,MAAM,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAM;IACzC,UAAU,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAM;;IAQ3C,UAAU,CAAC,KAAK,EAAE,MAAM;IAMxB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;CAGvC;AAED,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,qBAAa,WAAW;IACtB,SAAS,EAAE,IAAI,EAAE,CAAM;IAEvB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAoC;IAC9E,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gBAAgB,SAAO;CACxB"}
@@ -0,0 +1,55 @@
1
+ export class ListNumbering {
2
+ constructor() {
3
+ Object.defineProperty(this, "levels", {
4
+ enumerable: true,
5
+ configurable: true,
6
+ writable: true,
7
+ value: {}
8
+ });
9
+ Object.defineProperty(this, "levelNodes", {
10
+ enumerable: true,
11
+ configurable: true,
12
+ writable: true,
13
+ value: {}
14
+ });
15
+ for (let i = 0; i < 20; i++) {
16
+ this.levels[i] = 1;
17
+ }
18
+ }
19
+ clearAbove(level) {
20
+ for (let i = level + 1; i < 20; i++) {
21
+ this.levels[i] = 1;
22
+ }
23
+ }
24
+ setLevelNode(level, node) {
25
+ this.levelNodes[level] = node;
26
+ }
27
+ }
28
+ export class ListTracker {
29
+ constructor() {
30
+ Object.defineProperty(this, "listStack", {
31
+ enumerable: true,
32
+ configurable: true,
33
+ writable: true,
34
+ value: []
35
+ });
36
+ Object.defineProperty(this, "listNumberings", {
37
+ enumerable: true,
38
+ configurable: true,
39
+ writable: true,
40
+ value: new Map()
41
+ });
42
+ Object.defineProperty(this, "lastNumbering", {
43
+ enumerable: true,
44
+ configurable: true,
45
+ writable: true,
46
+ value: void 0
47
+ });
48
+ Object.defineProperty(this, "preserveMinLevel", {
49
+ enumerable: true,
50
+ configurable: true,
51
+ writable: true,
52
+ value: 999
53
+ });
54
+ }
55
+ }
@@ -0,0 +1,4 @@
1
+ import { NodeHandler } from '../OdtParser.js';
2
+ export declare function getInlineNodesHandlers(): Record<string, NodeHandler>;
3
+ export declare function getBasicNodesHandlers(): Record<string, NodeHandler>;
4
+ //# sourceMappingURL=basic_node_handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic_node_handlers.d.ts","sourceRoot":"","sources":["../../../../src/extension-odt/src/node_handlers/basic_node_handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EAEZ,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAiEpE;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CA2FnE"}
@@ -0,0 +1,138 @@
1
+ import { iterateChildren, } from '../OdtParser.js';
2
+ export function getInlineNodesHandlers() {
3
+ return {
4
+ '$text': (ctx, value) => {
5
+ const node = ctx.createText(value);
6
+ if (node) {
7
+ ctx.current.content.push(node);
8
+ }
9
+ },
10
+ 's': (ctx, odtElement) => {
11
+ const chars = odtElement['@c'] || 1;
12
+ const text = ' '.substring(0, chars);
13
+ const node = ctx.createText(text);
14
+ if (node) {
15
+ ctx.current.content.push(node);
16
+ }
17
+ },
18
+ 'tab': (ctx, odtElement) => {
19
+ const node = ctx.createText('\t');
20
+ if (node) {
21
+ ctx.current.content.push(node);
22
+ }
23
+ },
24
+ 'line-break': (ctx, odtElement) => {
25
+ ctx.openNode();
26
+ ctx.closeNode('br');
27
+ },
28
+ 'soft-page-break': (ctx, odtElement) => {
29
+ ctx.openNode();
30
+ ctx.closeNode('br');
31
+ },
32
+ 'bookmark': (ctx, value) => {
33
+ // ctx.current.marks = [ ...ctx.current.marks, ...marks ];
34
+ },
35
+ // custom(state, element) {
36
+ // state.nextTextMarks.add({
37
+ // markName: 'bookmark',
38
+ // markAttributes: {
39
+ // id: element['@name'],
40
+ // },
41
+ // });
42
+ // },
43
+ // },
44
+ // 'bookmark-start': {
45
+ // custom(state, element) {
46
+ // state.textMarks.add({
47
+ // markName: 'bookmark',
48
+ // markAttributes: {
49
+ // id: element['@name'],
50
+ // },
51
+ // });
52
+ // },
53
+ // },
54
+ // 'bookmark-end': {
55
+ // custom(state, element) {
56
+ // state.textMarks.forEach((x) =>
57
+ // x.markName === 'bookmark' &&
58
+ // x.markAttributes.id === element['@name']
59
+ // ? state.textMarks.delete(x)
60
+ // : x
61
+ // );
62
+ // },
63
+ // },
64
+ };
65
+ }
66
+ export function getBasicNodesHandlers() {
67
+ return {
68
+ 'body': (ctx, value) => {
69
+ ctx.handle('text', value.text);
70
+ },
71
+ 'text': (ctx, value) => {
72
+ iterateChildren(value.$value, (child) => ctx.handle(child.tag, child.value));
73
+ },
74
+ 'p': (ctx, value) => {
75
+ const attrs = {};
76
+ const style = ctx.getElementStyle(value);
77
+ const heading = style.styles.find((item) => item.startsWith('Heading_20_'));
78
+ if (heading) {
79
+ attrs.level = parseInt(heading.substring('Heading_20_'.length));
80
+ }
81
+ let nodeType = 'paragraph';
82
+ if (style.styles.find((item) => item.startsWith('Heading_20_'))) {
83
+ nodeType = 'heading';
84
+ }
85
+ ctx.openNode();
86
+ const marks = ctx.styleToMarks(style);
87
+ if (marks.length > 0) {
88
+ ctx.current.marks = [...ctx.current.marks, ...marks];
89
+ }
90
+ iterateChildren(value.$value, (child) => {
91
+ ctx.handle(child.tag, child.value);
92
+ });
93
+ ctx.closeNode(nodeType, attrs);
94
+ },
95
+ 'table-of-content': (ctx, value) => {
96
+ ctx.openNode();
97
+ for (const pElem of value['index-body']['p']) {
98
+ ctx.openNode();
99
+ ctx.handle('p', pElem);
100
+ ctx.closeNode('list_item');
101
+ }
102
+ ctx.closeNode('bullet_list');
103
+ },
104
+ 'span': (ctx, value) => {
105
+ const style = ctx.getElementStyle(value);
106
+ const marks = ctx.styleToMarks(style);
107
+ if (marks.length > 0) {
108
+ ctx.stash();
109
+ ctx.current.marks = [...ctx.current.marks, ...marks];
110
+ }
111
+ iterateChildren(value.$value, (child) => {
112
+ ctx.handle(child.tag, child.value);
113
+ });
114
+ if (marks.length > 0) {
115
+ ctx.unstash();
116
+ }
117
+ },
118
+ 'a': (ctx, value) => {
119
+ let href = value['@href'];
120
+ const attrs = {
121
+ href,
122
+ // title: tok.attrGet('title') || null,
123
+ };
124
+ const markType = ctx.schema.mark('link', attrs);
125
+ const marks = [markType];
126
+ if (marks.length > 0) {
127
+ ctx.stash();
128
+ ctx.current.marks = [...ctx.current.marks, ...marks];
129
+ }
130
+ iterateChildren(value.$value, (child) => {
131
+ ctx.handle(child.tag, child.value);
132
+ });
133
+ if (marks.length > 0) {
134
+ ctx.unstash();
135
+ }
136
+ },
137
+ };
138
+ }
@@ -0,0 +1,3 @@
1
+ import { ParseSpec } from '../OdtParser.js';
2
+ export declare function getListNodesHandlers(): Record<string, ParseSpec>;
3
+ //# sourceMappingURL=list_node_handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_node_handlers.d.ts","sourceRoot":"","sources":["../../../../src/extension-odt/src/node_handlers/list_node_handlers.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,SAAS,EAEV,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CA0HhE"}
@@ -0,0 +1,91 @@
1
+ import { ListNumbering } from '../lists.js';
2
+ import { iterateChildren, resolveStyle, } from '../OdtParser.js';
3
+ export function getListNodesHandlers() {
4
+ return {
5
+ 'list': (ctx, odtElement) => {
6
+ const listTracker = ctx.listTracker;
7
+ const list = {
8
+ level: listTracker.listStack.length + 1,
9
+ odtElement,
10
+ };
11
+ listTracker.listStack.push(list);
12
+ let style = {};
13
+ let listId = null;
14
+ for (let i = listTracker.listStack.length - 1; i >= 0; i--) {
15
+ const element = listTracker.listStack[i].odtElement;
16
+ if (!listId) {
17
+ if (element['@id']) {
18
+ listId = element['@id'];
19
+ }
20
+ }
21
+ if (!style['@style-name']) {
22
+ style = ('object' === typeof element && element['@style-name'])
23
+ ? resolveStyle(ctx.stylesTree, ctx.automaticStyles, element['@style-name'])
24
+ : {};
25
+ }
26
+ }
27
+ let nodeTypeName = 'bullet_list';
28
+ const attrs = {};
29
+ if (style) {
30
+ const numLevelStyle = style['list-level-style-number'].find((levelStyle) => parseInt(levelStyle['@level']) === list.level);
31
+ if (numLevelStyle) {
32
+ attrs['type'] = numLevelStyle['@num-format'] || '1';
33
+ nodeTypeName = 'ordered_list';
34
+ }
35
+ }
36
+ ctx.current.meta['list_type'] = nodeTypeName;
37
+ let listNumbering = null;
38
+ if (listId && listTracker.listNumberings.has(listId)) {
39
+ listNumbering = listTracker.listNumberings.get(listId);
40
+ }
41
+ let isContinue = false;
42
+ if (odtElement['@continue-list'] &&
43
+ listTracker.listNumberings.has(odtElement['@continue-list'])) {
44
+ listNumbering = listTracker.listNumberings.get(odtElement['@continue-list']);
45
+ isContinue = true;
46
+ }
47
+ if (odtElement['@continue-numbering']) {
48
+ listNumbering = listTracker.lastNumbering;
49
+ isContinue = true;
50
+ }
51
+ if (!listNumbering) {
52
+ listNumbering = new ListNumbering();
53
+ }
54
+ if (isContinue) {
55
+ listTracker.preserveMinLevel = 999;
56
+ }
57
+ if (listId) {
58
+ listTracker.listNumberings.set(listId, listNumbering);
59
+ }
60
+ listTracker.lastNumbering = listNumbering;
61
+ if (listTracker.preserveMinLevel <= list.level) {
62
+ listNumbering.clearAbove(list.level - 1);
63
+ }
64
+ if (nodeTypeName === 'ordered_list') {
65
+ attrs['start'] = listNumbering.levels[list.level] || 1;
66
+ }
67
+ ctx.openNode();
68
+ const children = odtElement['list-item'].map((item) => ({
69
+ 'list-item': item,
70
+ }));
71
+ if (children) {
72
+ iterateChildren(children, (child) => {
73
+ ctx.handle(child.tag, child.value);
74
+ });
75
+ listNumbering.levels[list.level] += children.length;
76
+ }
77
+ ctx.closeNode(nodeTypeName, attrs);
78
+ if (listTracker.preserveMinLevel >= list.level) {
79
+ listTracker.preserveMinLevel = list.level;
80
+ }
81
+ listTracker.listStack.pop();
82
+ },
83
+ 'list-item': (ctx, odtElement) => {
84
+ ctx.openNode();
85
+ iterateChildren(odtElement.$value, (child) => ctx.handle(child.tag, child.value));
86
+ const attrs = {};
87
+ attrs.markup = '* ';
88
+ ctx.closeNode('list_item', attrs);
89
+ },
90
+ };
91
+ }
@@ -0,0 +1,3 @@
1
+ import { NodeHandler } from '../OdtParser.js';
2
+ export declare function getTableNodesHandlers(): Record<string, NodeHandler>;
3
+ //# sourceMappingURL=table_node_handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table_node_handlers.d.ts","sourceRoot":"","sources":["../../../../src/extension-odt/src/node_handlers/table_node_handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,WAAW,EAAmB,MAAM,iBAAiB,CAAC;AAEhF,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAyBnE"}
@@ -0,0 +1,24 @@
1
+ import { iterateChildren } from '../OdtParser.js';
2
+ export function getTableNodesHandlers() {
3
+ return {
4
+ 'table': (ctx, value) => {
5
+ ctx.openNode();
6
+ for (const item of value['table-row']) {
7
+ ctx.handle('table-row', item);
8
+ }
9
+ ctx.closeNode('table');
10
+ },
11
+ 'table-row': (ctx, value) => {
12
+ ctx.openNode();
13
+ for (const item of value['table-cell']) {
14
+ ctx.handle('table-cell', item);
15
+ }
16
+ ctx.closeNode('table_row');
17
+ },
18
+ 'table-cell': (ctx, value) => {
19
+ ctx.openNode();
20
+ iterateChildren(value.$value, (child) => ctx.handle(child.tag, child.value));
21
+ ctx.closeNode('table_cell');
22
+ },
23
+ };
24
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"convertCodeParagraphsToCodeBlocks.d.ts","sourceRoot":"","sources":["../../../../src/extension-odt/src/postprocess/convertCodeParagraphsToCodeBlocks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAe,MAAM,mBAAmB,CAAC;AAwBzD,eAAO,MAAM,iCAAiC,EAAE,OAkF/C,CAAC"}
1
+ {"version":3,"file":"convertCodeParagraphsToCodeBlocks.d.ts","sourceRoot":"","sources":["../../../../src/extension-odt/src/postprocess/convertCodeParagraphsToCodeBlocks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAe,MAAM,mBAAmB,CAAC;AA8BzD,eAAO,MAAM,iCAAiC,EAAE,OAoF/C,CAAC"}
@@ -24,7 +24,9 @@ export const convertCodeParagraphsToCodeBlocks = (state, dispatch) => {
24
24
  const codeBlock = schema.nodes.code_block.createAndFill(null, [textNode]);
25
25
  const startPos = tr.mapping.map(paragraphsToMerge.startPos);
26
26
  const endPos = tr.mapping.map(paragraphsToMerge.endPos);
27
- tr.replaceRangeWith(startPos, endPos, codeBlock);
27
+ if (codeBlock) {
28
+ tr.replaceRangeWith(startPos, endPos, codeBlock);
29
+ }
28
30
  paragraphsToMerge = null;
29
31
  }
30
32
  function nodesToText(fragment) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kerebron/extension-odt",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "license": "MIT",
5
5
  "module": "./esm/extension-odt/src/ExtensionOdt.js",
6
6
  "exports": {