@kerebron/extension-odt 0.4.27 → 0.4.29
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/esm/ExtensionOdt.d.ts +16 -0
- package/esm/ExtensionOdt.d.ts.map +1 -0
- package/esm/ExtensionOdt.js +131 -0
- package/esm/ExtensionOdt.js.map +1 -0
- package/esm/OdtParser.d.ts +70 -0
- package/esm/OdtParser.d.ts.map +1 -0
- package/esm/OdtParser.js +250 -0
- package/esm/OdtParser.js.map +1 -0
- package/esm/lists.d.ts +23 -0
- package/esm/lists.d.ts.map +1 -0
- package/esm/lists.js +24 -0
- package/esm/lists.js.map +1 -0
- package/esm/node_handlers/basic_node_handlers.d.ts +4 -0
- package/esm/node_handlers/basic_node_handlers.d.ts.map +1 -0
- package/esm/node_handlers/basic_node_handlers.js +134 -0
- package/esm/node_handlers/basic_node_handlers.js.map +1 -0
- package/esm/node_handlers/list_node_handlers.d.ts +3 -0
- package/esm/node_handlers/list_node_handlers.d.ts.map +1 -0
- package/esm/node_handlers/list_node_handlers.js +92 -0
- package/esm/node_handlers/list_node_handlers.js.map +1 -0
- package/esm/node_handlers/table_node_handlers.d.ts +3 -0
- package/esm/node_handlers/table_node_handlers.d.ts.map +1 -0
- package/esm/node_handlers/table_node_handlers.js +25 -0
- package/esm/node_handlers/table_node_handlers.js.map +1 -0
- package/esm/package.json +3 -0
- package/esm/postprocess/convertCodeParagraphsToCodeBlocks.d.ts +3 -0
- package/esm/postprocess/convertCodeParagraphsToCodeBlocks.d.ts.map +1 -0
- package/esm/postprocess/convertCodeParagraphsToCodeBlocks.js +82 -0
- package/esm/postprocess/convertCodeParagraphsToCodeBlocks.js.map +1 -0
- package/esm/postprocess/convertMathMl.d.ts +3 -0
- package/esm/postprocess/convertMathMl.d.ts.map +1 -0
- package/esm/postprocess/convertMathMl.js +36 -0
- package/esm/postprocess/convertMathMl.js.map +1 -0
- package/esm/postprocess/fixContinuedLists.d.ts +3 -0
- package/esm/postprocess/fixContinuedLists.d.ts.map +1 -0
- package/esm/postprocess/fixContinuedLists.js +81 -0
- package/esm/postprocess/fixContinuedLists.js.map +1 -0
- package/esm/postprocess/postProcess.d.ts +8 -0
- package/esm/postprocess/postProcess.d.ts.map +1 -0
- package/esm/postprocess/postProcess.js +13 -0
- package/esm/postprocess/postProcess.js.map +1 -0
- package/esm/postprocess/removeUnusedBookmarks.d.ts +3 -0
- package/esm/postprocess/removeUnusedBookmarks.d.ts.map +1 -0
- package/esm/postprocess/removeUnusedBookmarks.js +28 -0
- package/esm/postprocess/removeUnusedBookmarks.js.map +1 -0
- package/package.json +7 -4
- package/src/ExtensionOdt.ts +196 -0
- package/src/OdtParser.ts +350 -0
- package/src/lists.ts +35 -0
- package/src/node_handlers/basic_node_handlers.ts +155 -0
- package/src/node_handlers/list_node_handlers.ts +131 -0
- package/src/node_handlers/table_node_handlers.ts +28 -0
- package/src/postprocess/convertCodeParagraphsToCodeBlocks.ts +118 -0
- package/src/postprocess/convertMathMl.ts +56 -0
- package/src/postprocess/fixContinuedLists.ts +113 -0
- package/src/postprocess/postProcess.ts +23 -0
- package/src/postprocess/removeUnusedBookmarks.ts +36 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Schema } from 'prosemirror-model';
|
|
2
|
+
import { type Converter, type CoreEditor, Extension, type UrlRewriter } from '@kerebron/editor';
|
|
3
|
+
import { OdtParserConfig } from './OdtParser.js';
|
|
4
|
+
import { Command } from '@kerebron/editor/commands';
|
|
5
|
+
export interface OdtConfig extends OdtParserConfig {
|
|
6
|
+
debug?: boolean;
|
|
7
|
+
postProcessCommands?: Command[];
|
|
8
|
+
}
|
|
9
|
+
export declare class ExtensionOdt extends Extension {
|
|
10
|
+
config: OdtConfig;
|
|
11
|
+
name: string;
|
|
12
|
+
urlFromRewriter?: UrlRewriter;
|
|
13
|
+
constructor(config?: OdtConfig);
|
|
14
|
+
getConverters(editor: CoreEditor, schema: Schema): Record<string, Converter>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ExtensionOdt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtensionOdt.d.ts","sourceRoot":"","sources":["../src/ExtensionOdt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,SAAS,EACT,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAa,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAGpD,MAAM,WAAW,SAAU,SAAQ,eAAe;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC;CACjC;AAED,qBAAa,YAAa,SAAQ,SAAS;IAIb,MAAM,EAAE,SAAS;IAH7C,IAAI,SAAS;IACN,eAAe,CAAC,EAAE,WAAW,CAAC;gBAET,MAAM,GAAE,SAAc;IAIzC,aAAa,CACpB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;CAoK7B"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { Extension, } from '@kerebron/editor';
|
|
2
|
+
import { parse_content, parse_styles, unzip } from '@kerebron/odt-wasm';
|
|
3
|
+
import { OdtParser } from './OdtParser.js';
|
|
4
|
+
import { getDefaultsPostProcessFilters } from './postprocess/postProcess.js';
|
|
5
|
+
import { InputRulesPlugin } from '@kerebron/editor/plugins/input-rules';
|
|
6
|
+
export class ExtensionOdt extends Extension {
|
|
7
|
+
config;
|
|
8
|
+
name = 'odt';
|
|
9
|
+
urlFromRewriter;
|
|
10
|
+
constructor(config = {}) {
|
|
11
|
+
super(config);
|
|
12
|
+
this.config = config;
|
|
13
|
+
}
|
|
14
|
+
getConverters(editor, schema) {
|
|
15
|
+
const config = this.config;
|
|
16
|
+
const odtConverter = {
|
|
17
|
+
fromDoc: async (document) => {
|
|
18
|
+
throw new Error('Not implemented');
|
|
19
|
+
},
|
|
20
|
+
toDoc: async (buffer) => {
|
|
21
|
+
const { doc, filesMap } = odtConverter.odtToJson(buffer);
|
|
22
|
+
const filterCommands = getDefaultsPostProcessFilters({
|
|
23
|
+
doc,
|
|
24
|
+
filesMap,
|
|
25
|
+
}).concat(this.config.postProcessCommands || []);
|
|
26
|
+
const plugin = editor.state.plugins.find((plugin) => plugin instanceof InputRulesPlugin);
|
|
27
|
+
if (plugin) {
|
|
28
|
+
// plugin.props.
|
|
29
|
+
}
|
|
30
|
+
const subEditor = editor.clone();
|
|
31
|
+
subEditor.setDocument(doc.toJSON());
|
|
32
|
+
let modified = false;
|
|
33
|
+
if (this.urlFromRewriter) {
|
|
34
|
+
const imageNodes = [];
|
|
35
|
+
subEditor.getDocument().descendants((node, pos) => {
|
|
36
|
+
if (node.type.name === 'image') {
|
|
37
|
+
imageNodes.push({ node, pos });
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
const linkNodes = [];
|
|
41
|
+
subEditor.getDocument().descendants((node, pos) => {
|
|
42
|
+
if (node.marks.find((mark) => mark.type.name === 'link')) {
|
|
43
|
+
linkNodes.push({ node, pos });
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
const tr = subEditor.state.tr;
|
|
47
|
+
for (const { node, pos } of linkNodes) {
|
|
48
|
+
const linkMark = node.marks.find((mark) => mark.type.name === 'link');
|
|
49
|
+
if (!linkMark) {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
let href = linkMark.attrs.href || '';
|
|
53
|
+
href = await this.urlFromRewriter(href, {
|
|
54
|
+
type: 'A',
|
|
55
|
+
dest: 'kerebron',
|
|
56
|
+
});
|
|
57
|
+
if (href !== linkMark.attrs.href) {
|
|
58
|
+
const newMarks = node.marks.map((mark) => {
|
|
59
|
+
if (mark.type.name === 'link') {
|
|
60
|
+
const markType = this.editor.schema.marks['link'];
|
|
61
|
+
return markType.create({ ...mark.attrs, href });
|
|
62
|
+
}
|
|
63
|
+
return mark;
|
|
64
|
+
});
|
|
65
|
+
const nodeType = this.editor.schema.nodes[node.type.name];
|
|
66
|
+
let replaceNode;
|
|
67
|
+
if (nodeType.isText) {
|
|
68
|
+
replaceNode = this.editor.schema.text(node.text || '', newMarks);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
replaceNode = nodeType.create(node.attrs, node.content, newMarks);
|
|
72
|
+
}
|
|
73
|
+
tr.replaceWith(tr.mapping.map(pos), tr.mapping.map(pos + node.nodeSize), replaceNode);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
for (const { node, pos } of imageNodes) {
|
|
77
|
+
let src = node.attrs.src || '';
|
|
78
|
+
src = await this.urlFromRewriter(src, {
|
|
79
|
+
type: 'IMG',
|
|
80
|
+
dest: 'kerebron',
|
|
81
|
+
filesMap,
|
|
82
|
+
});
|
|
83
|
+
if (src !== node.attrs.src) {
|
|
84
|
+
const nodeType = this.editor.schema.nodes[node.type.name];
|
|
85
|
+
const replaceNode = nodeType.create({ ...node.attrs, src }, node.content, node.marks);
|
|
86
|
+
tr.replaceWith(tr.mapping.map(pos), tr.mapping.map(pos + node.nodeSize), replaceNode);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
subEditor.dispatchTransaction(tr), modified = true;
|
|
90
|
+
}
|
|
91
|
+
if (filterCommands.length > 0) {
|
|
92
|
+
for (const filter of filterCommands) {
|
|
93
|
+
filter(subEditor.state, (tr) => subEditor.dispatchTransaction(tr));
|
|
94
|
+
}
|
|
95
|
+
modified = true;
|
|
96
|
+
}
|
|
97
|
+
if (modified) {
|
|
98
|
+
return subEditor.getDocument();
|
|
99
|
+
}
|
|
100
|
+
return doc;
|
|
101
|
+
},
|
|
102
|
+
odtToJson: (buffer) => {
|
|
103
|
+
const files = unzip(buffer);
|
|
104
|
+
const filesMap = {};
|
|
105
|
+
for (const k of files.keys()) {
|
|
106
|
+
filesMap[k] = Uint8Array.from(files.get(k));
|
|
107
|
+
}
|
|
108
|
+
const stylesTree = parse_styles(files.get('styles.xml'));
|
|
109
|
+
const contentTree = parse_content(files.get('content.xml'));
|
|
110
|
+
if (this.config.debug) {
|
|
111
|
+
const event = new CustomEvent('odt:parsed', {
|
|
112
|
+
detail: {
|
|
113
|
+
stylesTree,
|
|
114
|
+
contentTree,
|
|
115
|
+
filesMap,
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
this.editor.dispatchEvent(event);
|
|
119
|
+
}
|
|
120
|
+
const parser = new OdtParser(editor.schema, this.config);
|
|
121
|
+
parser.filesMap = filesMap;
|
|
122
|
+
const doc = parser.parse({ ...filesMap, contentTree, stylesTree });
|
|
123
|
+
return { doc, stylesTree, contentTree, filesMap };
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
return {
|
|
127
|
+
'application/vnd.oasis.opendocument.text': odtConverter,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=ExtensionOdt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtensionOdt.js","sourceRoot":"","sources":["../src/ExtensionOdt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Mark, Node, Schema } from 'prosemirror-model';
|
|
2
|
+
import { ListTracker } from './lists.js';
|
|
3
|
+
export interface OdtElement {
|
|
4
|
+
$value: 'TODO';
|
|
5
|
+
}
|
|
6
|
+
export type NodeHandler = (ctx: OdtStashContext, value: any) => void;
|
|
7
|
+
interface ListStyle {
|
|
8
|
+
'@name': string;
|
|
9
|
+
}
|
|
10
|
+
interface Style {
|
|
11
|
+
'@name': string;
|
|
12
|
+
'@parent-style-name'?: string;
|
|
13
|
+
styles: string[];
|
|
14
|
+
}
|
|
15
|
+
interface StylesTree {
|
|
16
|
+
styles: {
|
|
17
|
+
'list-style': Array<ListStyle>;
|
|
18
|
+
'style': Array<Style>;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
interface AutomaticStyles {
|
|
22
|
+
'style': Array<Style>;
|
|
23
|
+
}
|
|
24
|
+
export declare function resolveStyle(stylesTree: StylesTree, automaticStyles: AutomaticStyles, name: string): Style;
|
|
25
|
+
export interface TaggedEnum {
|
|
26
|
+
tag: string;
|
|
27
|
+
value: any;
|
|
28
|
+
}
|
|
29
|
+
export declare function tagEnum(item: any): {
|
|
30
|
+
tag: string;
|
|
31
|
+
value: unknown;
|
|
32
|
+
};
|
|
33
|
+
export declare function iterateChildren(nodes: unknown[], callback: (item: TaggedEnum) => void): void;
|
|
34
|
+
export declare function iterateEnum($value: unknown[]): Array<TaggedEnum>;
|
|
35
|
+
export interface OdtParserConfig {
|
|
36
|
+
}
|
|
37
|
+
export interface OdtContext {
|
|
38
|
+
handlers: Record<string, NodeHandler>;
|
|
39
|
+
content: Node[];
|
|
40
|
+
marks: Mark[];
|
|
41
|
+
meta: Record<string, any>;
|
|
42
|
+
}
|
|
43
|
+
export declare class OdtStashContext {
|
|
44
|
+
readonly schema: Schema;
|
|
45
|
+
readonly stylesTree: StylesTree;
|
|
46
|
+
readonly automaticStyles: AutomaticStyles;
|
|
47
|
+
private ctxStash;
|
|
48
|
+
private currentCtx;
|
|
49
|
+
listTracker: ListTracker;
|
|
50
|
+
constructor(schema: Schema, handlers: Record<string, NodeHandler>, stylesTree: StylesTree, automaticStyles: AutomaticStyles);
|
|
51
|
+
stash(): number;
|
|
52
|
+
unstash(): void;
|
|
53
|
+
openNode(): void;
|
|
54
|
+
closeNode(type: string, attrs?: {}, marks?: readonly Mark[]): Node;
|
|
55
|
+
private createNode;
|
|
56
|
+
createText(text: string): Node | undefined;
|
|
57
|
+
styleToMarks(style: Style): Mark[];
|
|
58
|
+
handle(nodeType: string, value: any): void;
|
|
59
|
+
getElementStyle(element: any): Style;
|
|
60
|
+
get current(): OdtContext;
|
|
61
|
+
}
|
|
62
|
+
export declare class OdtParser {
|
|
63
|
+
private readonly schema;
|
|
64
|
+
private readonly config;
|
|
65
|
+
constructor(schema: Schema, config?: OdtParserConfig);
|
|
66
|
+
filesMap?: Record<string, Uint8Array<ArrayBufferLike>>;
|
|
67
|
+
parse(files: any): Node;
|
|
68
|
+
}
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=OdtParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OdtParser.d.ts","sourceRoot":"","sources":["../src/OdtParser.ts"],"names":[],"mappings":"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"}
|
package/esm/OdtParser.js
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { Mark } from 'prosemirror-model';
|
|
2
|
+
import { getBasicNodesHandlers, getInlineNodesHandlers, } from './node_handlers/basic_node_handlers.js';
|
|
3
|
+
import { getListNodesHandlers } from './node_handlers/list_node_handlers.js';
|
|
4
|
+
import { getTableNodesHandlers } from './node_handlers/table_node_handlers.js';
|
|
5
|
+
import { ListTracker } from './lists.js';
|
|
6
|
+
const COURIER_FONTS = ['Courier New', 'Courier', 'Roboto Mono'];
|
|
7
|
+
export function resolveStyle(stylesTree, automaticStyles, name) {
|
|
8
|
+
let style;
|
|
9
|
+
if (!style) {
|
|
10
|
+
style = stylesTree.styles['list-style'].find((item) => item['@name'] === name);
|
|
11
|
+
}
|
|
12
|
+
if (!style) {
|
|
13
|
+
style = stylesTree.styles['style'].find((item) => item['@name'] === name);
|
|
14
|
+
}
|
|
15
|
+
if (!style) {
|
|
16
|
+
style = automaticStyles.style.find((item) => item['@name'] === name);
|
|
17
|
+
}
|
|
18
|
+
if (!style) {
|
|
19
|
+
style = {
|
|
20
|
+
'@name': name,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
style['styles'] = [name];
|
|
24
|
+
if (style['@parent-style-name']) {
|
|
25
|
+
const parentStyle = resolveStyle(stylesTree, automaticStyles, style['@parent-style-name']);
|
|
26
|
+
if (parentStyle) {
|
|
27
|
+
const styles = [...style['styles'], ...parentStyle['styles']];
|
|
28
|
+
for (const key in style) {
|
|
29
|
+
if (typeof style[key] === 'undefined') {
|
|
30
|
+
delete style[key];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
style = {
|
|
34
|
+
...parentStyle,
|
|
35
|
+
...style,
|
|
36
|
+
styles,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return style;
|
|
41
|
+
}
|
|
42
|
+
export function tagEnum(item) {
|
|
43
|
+
if ('string' === typeof item) {
|
|
44
|
+
return {
|
|
45
|
+
tag: item, // '$text',
|
|
46
|
+
value: item,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if ('object' === typeof item) {
|
|
50
|
+
const entries = Object.entries(item);
|
|
51
|
+
if (entries.length === 1) {
|
|
52
|
+
return {
|
|
53
|
+
tag: entries[0][0],
|
|
54
|
+
value: entries[0][1],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
throw new Error('Incorrect enum: ' + JSON.stringify(item));
|
|
59
|
+
}
|
|
60
|
+
export function iterateChildren(nodes, callback) {
|
|
61
|
+
for (const child of nodes) {
|
|
62
|
+
if ('Unknown' === child) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const item = tagEnum(child);
|
|
66
|
+
callback(item);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export function iterateEnum($value) {
|
|
70
|
+
if (!$value) {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
return $value.map(tagEnum);
|
|
74
|
+
}
|
|
75
|
+
export class OdtStashContext {
|
|
76
|
+
schema;
|
|
77
|
+
stylesTree;
|
|
78
|
+
automaticStyles;
|
|
79
|
+
ctxStash = [];
|
|
80
|
+
currentCtx;
|
|
81
|
+
listTracker = new ListTracker();
|
|
82
|
+
constructor(schema, handlers, stylesTree, automaticStyles) {
|
|
83
|
+
this.schema = schema;
|
|
84
|
+
this.stylesTree = stylesTree;
|
|
85
|
+
this.automaticStyles = automaticStyles;
|
|
86
|
+
this.currentCtx = {
|
|
87
|
+
handlers,
|
|
88
|
+
content: [],
|
|
89
|
+
marks: [],
|
|
90
|
+
meta: {},
|
|
91
|
+
};
|
|
92
|
+
this.stash();
|
|
93
|
+
}
|
|
94
|
+
stash() {
|
|
95
|
+
this.ctxStash.push(this.currentCtx);
|
|
96
|
+
const funcs = {};
|
|
97
|
+
const handlers = { ...this.currentCtx.handlers };
|
|
98
|
+
const content = this.currentCtx.content;
|
|
99
|
+
const marks = this.currentCtx.marks;
|
|
100
|
+
this.currentCtx = {
|
|
101
|
+
...structuredClone({
|
|
102
|
+
...this.currentCtx,
|
|
103
|
+
content: undefined,
|
|
104
|
+
marks: undefined,
|
|
105
|
+
handlers: undefined,
|
|
106
|
+
}),
|
|
107
|
+
...funcs,
|
|
108
|
+
content,
|
|
109
|
+
marks,
|
|
110
|
+
handlers,
|
|
111
|
+
};
|
|
112
|
+
return this.ctxStash.length - 1;
|
|
113
|
+
}
|
|
114
|
+
unstash() {
|
|
115
|
+
const ctx = this.ctxStash.pop();
|
|
116
|
+
if (!ctx) {
|
|
117
|
+
throw new Error('Unstash failed');
|
|
118
|
+
}
|
|
119
|
+
this.currentCtx = ctx;
|
|
120
|
+
}
|
|
121
|
+
openNode() {
|
|
122
|
+
this.stash();
|
|
123
|
+
this.current.content = [];
|
|
124
|
+
}
|
|
125
|
+
closeNode(type, attrs = {}, marks = Mark.none) {
|
|
126
|
+
const node = this.createNode(type, attrs, marks);
|
|
127
|
+
this.unstash();
|
|
128
|
+
if (node) {
|
|
129
|
+
this.current.content.push(node);
|
|
130
|
+
}
|
|
131
|
+
return node;
|
|
132
|
+
}
|
|
133
|
+
createNode(type, attrs = {}, marks = Mark.none) {
|
|
134
|
+
const nodeType = this.schema.nodes[type];
|
|
135
|
+
if (!nodeType) {
|
|
136
|
+
throw new Error('Invalid node type: ' + type);
|
|
137
|
+
}
|
|
138
|
+
const node = nodeType.createAndFill(attrs, this.current.content, marks);
|
|
139
|
+
if (!node) {
|
|
140
|
+
throw new Error('Error creating node: ' + type);
|
|
141
|
+
}
|
|
142
|
+
return node;
|
|
143
|
+
}
|
|
144
|
+
createText(text) {
|
|
145
|
+
if (!text)
|
|
146
|
+
return;
|
|
147
|
+
return this.schema.text(text, this.current.marks);
|
|
148
|
+
}
|
|
149
|
+
styleToMarks(style) {
|
|
150
|
+
const marks = [];
|
|
151
|
+
const textProperties = style && style['text-properties'] || {};
|
|
152
|
+
if (COURIER_FONTS.indexOf(textProperties['@font-name'] || '') > -1) {
|
|
153
|
+
const markType = this.schema.mark('code');
|
|
154
|
+
marks.push(markType);
|
|
155
|
+
}
|
|
156
|
+
if (textProperties['@font-style'] === 'italic') {
|
|
157
|
+
const markType = this.schema.mark('em');
|
|
158
|
+
marks.push(markType);
|
|
159
|
+
}
|
|
160
|
+
if (textProperties['@font-weight'] === 'bold') {
|
|
161
|
+
const markType = this.schema.mark('strong');
|
|
162
|
+
marks.push(markType);
|
|
163
|
+
}
|
|
164
|
+
return marks;
|
|
165
|
+
}
|
|
166
|
+
handle(nodeType, value) {
|
|
167
|
+
if (!this.current.handlers[nodeType]) {
|
|
168
|
+
throw new Error('No handler for node: ' + nodeType);
|
|
169
|
+
}
|
|
170
|
+
if ('function' !== typeof this.current.handlers[nodeType]) {
|
|
171
|
+
throw new Error('Invalid handler for node: ' + nodeType);
|
|
172
|
+
}
|
|
173
|
+
this.current.handlers[nodeType](this, value);
|
|
174
|
+
}
|
|
175
|
+
getElementStyle(element) {
|
|
176
|
+
const style = ('object' === typeof element && element['@style-name'])
|
|
177
|
+
? resolveStyle(this.stylesTree, this.automaticStyles, element['@style-name'])
|
|
178
|
+
: {};
|
|
179
|
+
return style;
|
|
180
|
+
}
|
|
181
|
+
get current() {
|
|
182
|
+
return this.currentCtx;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
export class OdtParser {
|
|
186
|
+
schema;
|
|
187
|
+
config;
|
|
188
|
+
constructor(schema, config = {}) {
|
|
189
|
+
this.schema = schema;
|
|
190
|
+
this.config = config;
|
|
191
|
+
}
|
|
192
|
+
filesMap;
|
|
193
|
+
parse(files) {
|
|
194
|
+
const contentTree = files.contentTree;
|
|
195
|
+
const stylesTree = files.stylesTree;
|
|
196
|
+
const handlers = {
|
|
197
|
+
...getInlineNodesHandlers(),
|
|
198
|
+
...getBasicNodesHandlers(),
|
|
199
|
+
...getListNodesHandlers(),
|
|
200
|
+
...getTableNodesHandlers(),
|
|
201
|
+
'change-start': {
|
|
202
|
+
// custom(state) {
|
|
203
|
+
// state.textMarks.add({
|
|
204
|
+
// markName: 'change',
|
|
205
|
+
// markAttributes: {},
|
|
206
|
+
// });
|
|
207
|
+
// },
|
|
208
|
+
},
|
|
209
|
+
'change-end': {
|
|
210
|
+
// custom(state) {
|
|
211
|
+
// state.textMarks.forEach((x) =>
|
|
212
|
+
// x.markName === 'change' ? state.textMarks.delete(x) : x
|
|
213
|
+
// );
|
|
214
|
+
// },
|
|
215
|
+
},
|
|
216
|
+
'frame': (ctx, odtElement) => {
|
|
217
|
+
if (odtElement.object && odtElement.object['@href']) {
|
|
218
|
+
const fullPath = odtElement.object['@href'].replace(/^\.\//, '') +
|
|
219
|
+
'/content.xml';
|
|
220
|
+
if (files[fullPath]) {
|
|
221
|
+
const content = new TextDecoder().decode(files[fullPath]);
|
|
222
|
+
ctx.openNode();
|
|
223
|
+
ctx.closeNode('math', {
|
|
224
|
+
lang: 'mathml',
|
|
225
|
+
content,
|
|
226
|
+
});
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (odtElement.image && odtElement.image['@href']) { // TODO links rewrite
|
|
231
|
+
const alt = odtElement.description?.value || '';
|
|
232
|
+
const src = odtElement.image['@href'];
|
|
233
|
+
ctx.openNode();
|
|
234
|
+
ctx.closeNode('image', {
|
|
235
|
+
src,
|
|
236
|
+
alt,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
'annotation': () => {
|
|
241
|
+
// ignore: true,
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
const ctx = new OdtStashContext(this.schema, handlers, stylesTree, contentTree['automatic-styles']);
|
|
245
|
+
ctx.openNode();
|
|
246
|
+
ctx.handle('body', contentTree.body);
|
|
247
|
+
return ctx.closeNode('doc');
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=OdtParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OdtParser.js","sourceRoot":"","sources":["../src/OdtParser.ts"],"names":[],"mappings":"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"}
|
package/esm/lists.d.ts
ADDED
|
@@ -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/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"}
|
package/esm/lists.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export class ListNumbering {
|
|
2
|
+
levels = {};
|
|
3
|
+
levelNodes = {};
|
|
4
|
+
constructor() {
|
|
5
|
+
for (let i = 0; i < 20; i++) {
|
|
6
|
+
this.levels[i] = 1;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
clearAbove(level) {
|
|
10
|
+
for (let i = level + 1; i < 20; i++) {
|
|
11
|
+
this.levels[i] = 1;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
setLevelNode(level, node) {
|
|
15
|
+
this.levelNodes[level] = node;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export class ListTracker {
|
|
19
|
+
listStack = [];
|
|
20
|
+
listNumberings = new Map();
|
|
21
|
+
lastNumbering;
|
|
22
|
+
preserveMinLevel = 999;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=lists.js.map
|
package/esm/lists.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lists.js","sourceRoot":"","sources":["../src/lists.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IACxB,MAAM,GAAgC,EAAE,CAAC;IACzC,UAAU,GAA8B,EAAE,CAAC;IAE3C;QACE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,YAAY,CAAC,KAAa,EAAE,IAAU;QACpC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAChC,CAAC;CACF;AAOD,MAAM,OAAO,WAAW;IACtB,SAAS,GAAW,EAAE,CAAC;IAEvB,cAAc,GAA+B,IAAI,GAAG,EAAyB,CAAC;IAC9E,aAAa,CAAiB;IAC9B,gBAAgB,GAAG,GAAG,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic_node_handlers.d.ts","sourceRoot":"","sources":["../../src/node_handlers/basic_node_handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,WAAW,EAAmB,MAAM,iBAAiB,CAAC;AAEhF,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CA4DpE;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CA0FnE"}
|