@podlite/schema 0.0.14 → 0.0.16
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/CHANGELOG.md +4 -0
- package/esm/ast-helpers.d.ts +2 -0
- package/esm/ast-helpers.js +10 -0
- package/esm/ast-helpers.js.map +1 -0
- package/esm/ast-inerator.d.ts +6 -0
- package/esm/ast-inerator.js +57 -0
- package/esm/ast-inerator.js.map +1 -0
- package/esm/blocks-helpers.d.ts +32 -0
- package/esm/blocks-helpers.js +65 -0
- package/esm/blocks-helpers.js.map +1 -0
- package/esm/exportAny.d.ts +19 -0
- package/esm/exportAny.js +65 -0
- package/esm/exportAny.js.map +1 -0
- package/esm/exportHtml.d.ts +15 -0
- package/esm/exportHtml.js +279 -0
- package/esm/exportHtml.js.map +1 -0
- package/esm/grammar.d.ts +14 -0
- package/esm/grammar.js +6405 -0
- package/esm/grammar.js.map +1 -0
- package/esm/grammarfc.d.ts +14 -0
- package/esm/grammarfc.js +4218 -0
- package/esm/grammarfc.js.map +1 -0
- package/esm/helpers/config.d.ts +12 -0
- package/esm/helpers/config.js +52 -0
- package/esm/helpers/config.js.map +1 -0
- package/esm/helpers/corePlugins.d.ts +12 -0
- package/esm/helpers/corePlugins.js +23 -0
- package/esm/helpers/corePlugins.js.map +1 -0
- package/esm/helpers/handlers.d.ts +47 -0
- package/esm/helpers/handlers.js +107 -0
- package/esm/helpers/handlers.js.map +1 -0
- package/esm/helpers/ids.d.ts +18 -0
- package/esm/helpers/ids.js +69 -0
- package/esm/helpers/ids.js.map +1 -0
- package/esm/helpers/makeInterator.d.ts +5 -0
- package/esm/helpers/makeInterator.js +52 -0
- package/esm/helpers/makeInterator.js.map +1 -0
- package/esm/helpers/makeQuery.d.ts +47 -0
- package/esm/helpers/makeQuery.js +100 -0
- package/esm/helpers/makeQuery.js.map +1 -0
- package/esm/helpers/makeQuery.test.d.ts +1 -0
- package/esm/helpers/makeQuery.test.js +51 -0
- package/esm/helpers/makeQuery.test.js.map +1 -0
- package/esm/helpers/makeTransformer.d.ts +7 -0
- package/esm/helpers/makeTransformer.js +61 -0
- package/esm/helpers/makeTransformer.js.map +1 -0
- package/esm/helpers/plugins.d.ts +2 -0
- package/esm/helpers/plugins.js +23 -0
- package/esm/helpers/plugins.js.map +1 -0
- package/esm/index.d.ts +82 -0
- package/esm/index.js +123 -0
- package/esm/index.js.map +1 -0
- package/esm/pluggableParser.d.ts +27 -0
- package/esm/pluggableParser.js +71 -0
- package/esm/pluggableParser.js.map +1 -0
- package/esm/plugin-clean-location.d.ts +2 -0
- package/esm/plugin-clean-location.js +19 -0
- package/esm/plugin-clean-location.js.map +1 -0
- package/esm/plugin-defn-fill-term.d.ts +2 -0
- package/esm/plugin-defn-fill-term.js +50 -0
- package/esm/plugin-defn-fill-term.js.map +1 -0
- package/esm/plugin-formatting-codes.d.ts +3 -0
- package/esm/plugin-formatting-codes.js +54 -0
- package/esm/plugin-formatting-codes.js.map +1 -0
- package/esm/plugin-group-defn.d.ts +2 -0
- package/esm/plugin-group-defn.js +71 -0
- package/esm/plugin-group-defn.js.map +1 -0
- package/esm/plugin-group-items.d.ts +2 -0
- package/esm/plugin-group-items.js +79 -0
- package/esm/plugin-group-items.js.map +1 -0
- package/esm/plugin-heading.d.ts +2 -0
- package/esm/plugin-heading.js +33 -0
- package/esm/plugin-heading.js.map +1 -0
- package/esm/plugin-items.d.ts +2 -0
- package/esm/plugin-items.js +41 -0
- package/esm/plugin-items.js.map +1 -0
- package/esm/plugin-tables.d.ts +5 -0
- package/esm/plugin-tables.js +141 -0
- package/esm/plugin-tables.js.map +1 -0
- package/esm/plugin-vmargin.d.ts +3 -0
- package/esm/plugin-vmargin.js +29 -0
- package/esm/plugin-vmargin.js.map +1 -0
- package/esm/query-helpers.d.ts +28 -0
- package/esm/query-helpers.js +131 -0
- package/esm/query-helpers.js.map +1 -0
- package/esm/types.d.ts +357 -0
- package/esm/types.js +2 -0
- package/esm/types.js.map +1 -0
- package/esm/writer.d.ts +30 -0
- package/esm/writer.js +85 -0
- package/esm/writer.js.map +1 -0
- package/esm/writerHtml.d.ts +11 -0
- package/esm/writerHtml.js +29 -0
- package/esm/writerHtml.js.map +1 -0
- package/lib/grammar.js +4 -3
- package/lib/plugin-formatting-codes.js +2 -1
- package/lib/types.d.ts +16 -1
- package/package.json +9 -7
- package/schema/AstTree.json +71 -0
- package/schema/PodliteDocument.json +71 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { mkRootBlock, toAny, toAnyRules, toHtml, toTree } from '.';
|
|
2
|
+
import idMiddleware from './helpers/ids';
|
|
3
|
+
import core from './helpers/corePlugins';
|
|
4
|
+
export { cleanIds, frozenIds } from './helpers/ids';
|
|
5
|
+
export const podlitePluggable = ({ plugins = {} } = {}) => {
|
|
6
|
+
let instance = function () { };
|
|
7
|
+
let _plugins = [];
|
|
8
|
+
instance.use = (onj) => {
|
|
9
|
+
for (const plugin of Object.entries(onj)) {
|
|
10
|
+
const [key, val] = plugin;
|
|
11
|
+
if (typeof val === 'function') {
|
|
12
|
+
_plugins.push({ [key]: { toAst: val } });
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
_plugins.push({ [key]: val });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return instance;
|
|
19
|
+
};
|
|
20
|
+
instance.parse = (text, opt = { skipChain: 0, podMode: 1 }) => {
|
|
21
|
+
const rawTree = toTree().use(idMiddleware).parse(text, opt);
|
|
22
|
+
const root = mkRootBlock({ margin: '' }, rawTree);
|
|
23
|
+
return root;
|
|
24
|
+
};
|
|
25
|
+
instance.toAst = ast => {
|
|
26
|
+
return instance.toAstResult(ast).interator;
|
|
27
|
+
};
|
|
28
|
+
instance.toAstResult = ast => {
|
|
29
|
+
// get plugins for Ast
|
|
30
|
+
const toAstPlugins = toAnyRules('toAst', instance.getPlugins());
|
|
31
|
+
const result = toAny()
|
|
32
|
+
.use({
|
|
33
|
+
'*': () => (node, ctx, interator) => {
|
|
34
|
+
if ('content' in node) {
|
|
35
|
+
node.content = interator(node.content, ctx);
|
|
36
|
+
}
|
|
37
|
+
return node;
|
|
38
|
+
},
|
|
39
|
+
})
|
|
40
|
+
.use(toAstPlugins)
|
|
41
|
+
.run(ast);
|
|
42
|
+
// add second pass
|
|
43
|
+
const toAstAfterPlugins = toAnyRules('toAstAfter', instance.getPlugins());
|
|
44
|
+
if (Object.keys(toAstAfterPlugins).length) {
|
|
45
|
+
const resultAfter = toAny()
|
|
46
|
+
.use({
|
|
47
|
+
'*': () => (node, ctx, interator) => {
|
|
48
|
+
if ('content' in node) {
|
|
49
|
+
node.content = interator(node.content, ctx);
|
|
50
|
+
}
|
|
51
|
+
return node;
|
|
52
|
+
},
|
|
53
|
+
})
|
|
54
|
+
.use(toAstAfterPlugins)
|
|
55
|
+
.run(ast);
|
|
56
|
+
return resultAfter;
|
|
57
|
+
}
|
|
58
|
+
return result;
|
|
59
|
+
};
|
|
60
|
+
instance.toHtml = ast => {
|
|
61
|
+
const toHtmlPlugins = toAnyRules('toHtml', instance.getPlugins());
|
|
62
|
+
return toHtml({}).use(toHtmlPlugins).run(ast, null);
|
|
63
|
+
};
|
|
64
|
+
instance.getPlugins = () => _plugins;
|
|
65
|
+
// init core plugins
|
|
66
|
+
instance.use(core);
|
|
67
|
+
// init external plugins
|
|
68
|
+
instance.use(plugins);
|
|
69
|
+
return instance;
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=pluggableParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluggableParser.js","sourceRoot":"","sources":["../src/pluggableParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delete location attribute
|
|
3
|
+
* use in test suite
|
|
4
|
+
*/
|
|
5
|
+
import makeTransformer from './helpers/makeTransformer';
|
|
6
|
+
export const pluginCleanLocation = () => tree => {
|
|
7
|
+
const transformer = makeTransformer({
|
|
8
|
+
'*': (node, ctx, visiter) => {
|
|
9
|
+
if (node.content) {
|
|
10
|
+
node.content = visiter(node.content, ctx, visiter);
|
|
11
|
+
}
|
|
12
|
+
delete node.location;
|
|
13
|
+
return node;
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
return transformer(tree, {});
|
|
17
|
+
};
|
|
18
|
+
export default pluginCleanLocation;
|
|
19
|
+
//# sourceMappingURL=plugin-clean-location.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-clean-location.js","sourceRoot":"","sources":["../src/plugin-clean-location.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,eAAe,MAAM,2BAA2B,CAAA;AAEvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;IAC9C,MAAM,WAAW,GAAG,eAAe,CAAC;QAClC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;YAC1B,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;aACnD;YACD,OAAO,IAAI,CAAC,QAAQ,CAAA;YACpB,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAC,CAAA;IACF,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AAC9B,CAAC,CAAA;AACD,eAAe,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin for fill term's for defn. From S26:
|
|
3
|
+
* The first non-blank line of content is treated as a term being defined,
|
|
4
|
+
* and the remaining content is treated as the definition for the term.
|
|
5
|
+
*/
|
|
6
|
+
import makeTransformer from './helpers/makeTransformer';
|
|
7
|
+
export default () => tree => {
|
|
8
|
+
const transformer = makeTransformer({
|
|
9
|
+
defn: node => {
|
|
10
|
+
// get first non blank block
|
|
11
|
+
const content = node.content;
|
|
12
|
+
// skip all blank blocks
|
|
13
|
+
const count = content.length;
|
|
14
|
+
let newContent = [];
|
|
15
|
+
let isFirstParaProcessed = false;
|
|
16
|
+
for (let i = 0; i < count; i++) {
|
|
17
|
+
const item = content[i];
|
|
18
|
+
if (item.type === 'para' && !isFirstParaProcessed) {
|
|
19
|
+
// get text content
|
|
20
|
+
const textNode = item.content[0];
|
|
21
|
+
const text = textNode.value;
|
|
22
|
+
// split text by lines
|
|
23
|
+
// get first line
|
|
24
|
+
const splited = text.split('\n');
|
|
25
|
+
const term = splited.shift();
|
|
26
|
+
const newTermPara = {
|
|
27
|
+
type: 'para',
|
|
28
|
+
name: 'term',
|
|
29
|
+
text: term,
|
|
30
|
+
content: [{ type: 'text', value: term }],
|
|
31
|
+
};
|
|
32
|
+
newContent.push(newTermPara);
|
|
33
|
+
if (!(splited.length == 1 && splited[0] === '')) {
|
|
34
|
+
textNode.value = splited.join('\n');
|
|
35
|
+
item.text = textNode.value;
|
|
36
|
+
newContent.push(item);
|
|
37
|
+
}
|
|
38
|
+
isFirstParaProcessed = true;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
newContent.push(item);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
node.content = newContent;
|
|
45
|
+
return node;
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
return transformer(tree, {});
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=plugin-defn-fill-term.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-defn-fill-term.js","sourceRoot":"","sources":["../src/plugin-defn-fill-term.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,eAAe,MAAM,2BAA2B,CAAA;AACvD,eAAe,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;IAC1B,MAAM,WAAW,GAAG,eAAe,CAAC;QAClC,IAAI,EAAE,IAAI,CAAC,EAAE;YACX,4BAA4B;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;YAE5B,wBAAwB;YACxB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAA;YAC5B,IAAI,UAAU,GAAG,EAAE,CAAA;YACnB,IAAI,oBAAoB,GAAG,KAAK,CAAA;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;gBACvB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,oBAAoB,EAAE;oBACjD,mBAAmB;oBACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;oBAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAA;oBAC3B,sBAAsB;oBACtB,iBAAiB;oBACjB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBAChC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAA;oBAC5B,MAAM,WAAW,GAAG;wBAClB,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI;wBACV,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;qBACzC,CAAA;oBACD,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;oBAC5B,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;wBAC/C,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;wBACnC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAA;wBAC1B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;qBACtB;oBACD,oBAAoB,GAAG,IAAI,CAAA;iBAC5B;qBAAM;oBACL,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;iBACtB;aACF;YACD,IAAI,CAAC,OAAO,GAAG,UAAU,CAAA;YACzB,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAC,CAAA;IACF,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AAC9B,CAAC,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as fcparser from './grammarfc';
|
|
2
|
+
import makeTransformer from './helpers/makeTransformer';
|
|
3
|
+
import { isNamedBlock } from './helpers/makeTransformer';
|
|
4
|
+
import makeAttrs from './helpers/config';
|
|
5
|
+
const middle = () => tree => {
|
|
6
|
+
const transformerBlocks = makeTransformer({
|
|
7
|
+
':para': (n, ctx, visiter) => {
|
|
8
|
+
return makeTransformer({
|
|
9
|
+
':text': (n, ctx) => {
|
|
10
|
+
return fcparser.parse(n.value);
|
|
11
|
+
},
|
|
12
|
+
':verbatim': (n, ctx) => {
|
|
13
|
+
return fcparser.parse(n.value);
|
|
14
|
+
},
|
|
15
|
+
})(n, { ...ctx });
|
|
16
|
+
return n;
|
|
17
|
+
},
|
|
18
|
+
':block': (n, ctx, visiter) => {
|
|
19
|
+
// only =pod may have childs blocks
|
|
20
|
+
if ('name' in n && n.name === 'pod')
|
|
21
|
+
return {
|
|
22
|
+
...n,
|
|
23
|
+
content: visiter(n.content, ctx, visiter),
|
|
24
|
+
};
|
|
25
|
+
const conf = makeAttrs(n, ctx);
|
|
26
|
+
const isCodeBlock = 'name' in n && n.name === 'code';
|
|
27
|
+
const isDataBlock = 'name' in n && n.name === 'data';
|
|
28
|
+
const isMarkdownBlock = 'name' in n && n.name === 'markdown';
|
|
29
|
+
const isPictureBlock = 'name' in n && n.name === 'picture';
|
|
30
|
+
const allowValues = conf.getAllValues('allow');
|
|
31
|
+
// for code block not parse content by default
|
|
32
|
+
if ((isCodeBlock || isDataBlock || isMarkdownBlock || isPictureBlock) && allowValues.length == 0)
|
|
33
|
+
return n;
|
|
34
|
+
const allowed = allowValues.sort();
|
|
35
|
+
const transformer = makeTransformer({
|
|
36
|
+
':verbatim': (n, ctx) => {
|
|
37
|
+
return fcparser.parse(n.value, { allowed });
|
|
38
|
+
},
|
|
39
|
+
':text': (n, ctx) => {
|
|
40
|
+
return fcparser.parse(n.value, { allowed });
|
|
41
|
+
},
|
|
42
|
+
':block': (n, ctx) => {
|
|
43
|
+
if (isNamedBlock(n.name))
|
|
44
|
+
return n;
|
|
45
|
+
return { ...n, content: transformer(n.content, { ...ctx }) };
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
return transformer(n, { ...ctx });
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
return transformerBlocks(tree, {});
|
|
52
|
+
};
|
|
53
|
+
export default middle;
|
|
54
|
+
//# sourceMappingURL=plugin-formatting-codes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-formatting-codes.js","sourceRoot":"","sources":["../src/plugin-formatting-codes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export default () => tree => {
|
|
2
|
+
const isNodesEqual = (n1, n2) =>
|
|
3
|
+
// if nodes items
|
|
4
|
+
(n1.name === 'item' || n1.name === 'defn') &&
|
|
5
|
+
n2.name === n1.name &&
|
|
6
|
+
n1['level'] === n2.level &&
|
|
7
|
+
isNumbered(n1) === isNumbered(n2);
|
|
8
|
+
const isNumbered = node => Boolean(node.config && node.config.numbered);
|
|
9
|
+
const group = a => {
|
|
10
|
+
let lastItem = {};
|
|
11
|
+
let result = a.reduce((a, i) => {
|
|
12
|
+
if (i.name === 'defn') {
|
|
13
|
+
if (isNodesEqual(lastItem, i)) {
|
|
14
|
+
// group items into arrays
|
|
15
|
+
a[a.length - 1].push(i);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
// group items into arrays
|
|
19
|
+
a.push([i]);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
// save not 'item' elements as is
|
|
24
|
+
a.push(i);
|
|
25
|
+
}
|
|
26
|
+
lastItem = i;
|
|
27
|
+
return a;
|
|
28
|
+
}, []);
|
|
29
|
+
// convert grouped items into object 'itemlist'
|
|
30
|
+
/**
|
|
31
|
+
* { type = 'list',
|
|
32
|
+
* ordered = [true, false]
|
|
33
|
+
* content = [ .... ]
|
|
34
|
+
* list = ['ordered', 'variable', 'itemized']
|
|
35
|
+
*/
|
|
36
|
+
return result.map(item => {
|
|
37
|
+
if (item instanceof Array) {
|
|
38
|
+
if (item[0].name !== 'defn') {
|
|
39
|
+
return item;
|
|
40
|
+
}
|
|
41
|
+
// get type of list
|
|
42
|
+
const list = item[0].name === 'defn' ? 'variable' : isNumbered(item[0]) ? 'ordered' : 'itemized';
|
|
43
|
+
// create items container
|
|
44
|
+
return {
|
|
45
|
+
type: 'list',
|
|
46
|
+
list,
|
|
47
|
+
level: 1,
|
|
48
|
+
content: [...item],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
if (item.content && item.type !== 'fcode') {
|
|
52
|
+
item.content = group(item.content);
|
|
53
|
+
}
|
|
54
|
+
return item;
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
const visit = node => {
|
|
58
|
+
if (Array.isArray(node)) {
|
|
59
|
+
return group(node);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
if (node.type === 'block' && node.name !== 'table') {
|
|
63
|
+
node.content = group(node.content);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return node;
|
|
67
|
+
};
|
|
68
|
+
tree = visit(tree);
|
|
69
|
+
return tree;
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=plugin-group-defn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-group-defn.js","sourceRoot":"","sources":["../src/plugin-group-defn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import makeAttrs from './helpers/config';
|
|
2
|
+
export default () => tree => {
|
|
3
|
+
const isNodesEqual = (n1, n2) =>
|
|
4
|
+
// if nodes items
|
|
5
|
+
(n1.name === 'item' || n1.name === 'defn') &&
|
|
6
|
+
n2.name === n1.name &&
|
|
7
|
+
n1['level'] === n2.level &&
|
|
8
|
+
isNumbered(n1) === isNumbered(n2);
|
|
9
|
+
const isNumbered = node => Boolean(makeAttrs(node, {}).exists('numbered'));
|
|
10
|
+
const group = (a, level = 1) => {
|
|
11
|
+
const isInListMode = a => {
|
|
12
|
+
return a.length > 0 && a[a.length - 1].type === 'list';
|
|
13
|
+
};
|
|
14
|
+
const getList = a => {
|
|
15
|
+
if (isInListMode(a))
|
|
16
|
+
return a[a.length - 1];
|
|
17
|
+
};
|
|
18
|
+
const isInsertableToList = (l, i) => (i.name && i.name === 'item' && i.type && i.type === 'block') || i.type === 'blankline';
|
|
19
|
+
let lastItem = {};
|
|
20
|
+
let result = a.reduce((a, i) => {
|
|
21
|
+
// skip items out of level
|
|
22
|
+
if (i.name === 'item' && i.type === 'block' && i.level < level) {
|
|
23
|
+
return [...a, i];
|
|
24
|
+
}
|
|
25
|
+
if (i.name === 'item' &&
|
|
26
|
+
i.type === 'block' &&
|
|
27
|
+
(!isInListMode(a) ||
|
|
28
|
+
// different type of list and item
|
|
29
|
+
// at the same level
|
|
30
|
+
(i.level === level && getList(a).list !== (isNumbered(i) ? 'ordered' : 'itemized')))) {
|
|
31
|
+
// create empty list
|
|
32
|
+
// list = ['ordered', 'variable', 'itemized']
|
|
33
|
+
a.push({
|
|
34
|
+
type: 'list',
|
|
35
|
+
level: i.level,
|
|
36
|
+
content: [],
|
|
37
|
+
list: isNumbered(i) ? 'ordered' : 'itemized',
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
// main logic
|
|
41
|
+
if (isInListMode(a) && isInsertableToList(getList(a), i)) {
|
|
42
|
+
// getlist and push item to them
|
|
43
|
+
getList(a).content.push(i);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
a.push(i);
|
|
47
|
+
}
|
|
48
|
+
return a;
|
|
49
|
+
}, []);
|
|
50
|
+
// convert grouped items into object 'itemlist'
|
|
51
|
+
/**
|
|
52
|
+
* { type = 'list',
|
|
53
|
+
* ordered = [true, false]
|
|
54
|
+
* content = [ .... ]
|
|
55
|
+
* list = ['ordered', 'variable', 'itemized']
|
|
56
|
+
*/
|
|
57
|
+
return result.map(item => {
|
|
58
|
+
// process any item with content ( except formatting codes)
|
|
59
|
+
if (item.content && item.type !== 'fcode') {
|
|
60
|
+
item.content = group(item.content, item.level + 1);
|
|
61
|
+
}
|
|
62
|
+
return item;
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
const visit = node => {
|
|
66
|
+
if (Array.isArray(node)) {
|
|
67
|
+
node = group(node);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
if (node.type === 'block' && node.name !== 'table') {
|
|
71
|
+
node.content = group(node.content);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return node;
|
|
75
|
+
};
|
|
76
|
+
tree = visit(tree);
|
|
77
|
+
return tree;
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=plugin-group-items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-group-items.js","sourceRoot":"","sources":["../src/plugin-group-items.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export default () => tree => {
|
|
2
|
+
const visit = node => {
|
|
3
|
+
if (Array.isArray(node)) {
|
|
4
|
+
node.forEach(i => {
|
|
5
|
+
visit(i);
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
if (node && node.type === 'block') {
|
|
10
|
+
const matchHead = /^head(\d+)?/.exec(node.name);
|
|
11
|
+
if (matchHead) {
|
|
12
|
+
node.name = 'head';
|
|
13
|
+
node.level = matchHead[1] || 1;
|
|
14
|
+
if (node.content[0]) {
|
|
15
|
+
const startText = node.content[0];
|
|
16
|
+
if (startText.text) {
|
|
17
|
+
let re = /(\s*#\s*)/;
|
|
18
|
+
const match = re.exec(startText.text);
|
|
19
|
+
if (match) {
|
|
20
|
+
startText.text = startText.text.replace(re, '');
|
|
21
|
+
node.config = { ...node.config, ...{ numbered: true } };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
visit(node.content);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
visit(tree);
|
|
31
|
+
return tree;
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=plugin-heading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-heading.js","sourceRoot":"","sources":["../src/plugin-heading.ts"],"names":[],"mappings":"AAAA,eAAe,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE;QACnB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACf,KAAK,CAAC,CAAC,CAAC,CAAA;YACV,CAAC,CAAC,CAAA;SACH;aAAM;YACL,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;gBACjC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC/C,IAAI,SAAS,EAAE;oBACb,IAAI,CAAC,IAAI,GAAG,MAAM,CAAA;oBAClB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;oBAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBACnB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;wBACjC,IAAI,SAAS,CAAC,IAAI,EAAE;4BAClB,IAAI,EAAE,GAAG,WAAW,CAAA;4BACpB,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;4BACrC,IAAI,KAAK,EAAE;gCACT,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;gCAC/C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAA;6BACxD;yBACF;qBACF;iBACF;gBACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;aACpB;SACF;IACH,CAAC,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,CAAA;IACX,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export default () => tree => {
|
|
2
|
+
const visit = node => {
|
|
3
|
+
if (Array.isArray(node)) {
|
|
4
|
+
node.forEach(i => {
|
|
5
|
+
visit(i);
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
if (node && node.type === 'block') {
|
|
10
|
+
const matchItem = /^item(\d+)?/.exec(node.name);
|
|
11
|
+
if (matchItem) {
|
|
12
|
+
node.name = 'item';
|
|
13
|
+
node.level = matchItem[1] || 1;
|
|
14
|
+
if (node.content[0]) {
|
|
15
|
+
const startText = node.content[0];
|
|
16
|
+
if (startText.text) {
|
|
17
|
+
let re = /^(\s*#\s*)/;
|
|
18
|
+
const match = re.exec(startText.text);
|
|
19
|
+
if (match) {
|
|
20
|
+
startText.text = startText.text.replace(re, '');
|
|
21
|
+
if (startText.type === 'para') {
|
|
22
|
+
startText.content = [startText.text];
|
|
23
|
+
}
|
|
24
|
+
node.config = node.config || [];
|
|
25
|
+
node.config.push({
|
|
26
|
+
name: 'numbered',
|
|
27
|
+
value: true,
|
|
28
|
+
type: 'boolean',
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
visit(node.content);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
visit(tree);
|
|
39
|
+
return tree;
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=plugin-items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-items.js","sourceRoot":"","sources":["../src/plugin-items.ts"],"names":[],"mappings":"AAAA,eAAe,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE;QACnB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACf,KAAK,CAAC,CAAC,CAAC,CAAA;YACV,CAAC,CAAC,CAAA;SACH;aAAM;YACL,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;gBACjC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC/C,IAAI,SAAS,EAAE;oBACb,IAAI,CAAC,IAAI,GAAG,MAAM,CAAA;oBAClB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;oBAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBACnB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;wBACjC,IAAI,SAAS,CAAC,IAAI,EAAE;4BAClB,IAAI,EAAE,GAAG,YAAY,CAAA;4BACrB,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;4BACrC,IAAI,KAAK,EAAE;gCACT,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;gCAC/C,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE;oCAC7B,SAAS,CAAC,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;iCACrC;gCACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;gCAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;oCACf,IAAI,EAAE,UAAU;oCAChB,KAAK,EAAE,IAAI;oCACX,IAAI,EAAE,SAAS;iCAChB,CAAC,CAAA;6BACH;yBACF;qBACF;iBACF;gBACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;aACpB;SACF;IACH,CAAC,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,CAAA;IACX,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin for fill term's for defn. From S26:
|
|
3
|
+
* The first non-blank line of content is treated as a term being defined,
|
|
4
|
+
* and the remaining content is treated as the definition for the term.
|
|
5
|
+
*/
|
|
6
|
+
import makeTransformer from './helpers/makeTransformer';
|
|
7
|
+
function flattenDeep(arr) {
|
|
8
|
+
return arr.reduce((acc, val) => (Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val)), []);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Helpers section
|
|
12
|
+
*/
|
|
13
|
+
// run cb in symbols pair
|
|
14
|
+
const strbin = (str1, str2, cb) => {
|
|
15
|
+
let res = [];
|
|
16
|
+
for (let i = 0; str1.length > i; i++) {
|
|
17
|
+
res.push(cb(parseInt(str1[i], 10), parseInt(str2[i], 10)));
|
|
18
|
+
}
|
|
19
|
+
return res.join('');
|
|
20
|
+
};
|
|
21
|
+
// Create mask for extract columns
|
|
22
|
+
const makeMask = (lines, separators) => {
|
|
23
|
+
// calculate template length
|
|
24
|
+
const tmplLength = Math.max(...[...lines, ...separators].map(s => s.length));
|
|
25
|
+
// make bin mask for each string
|
|
26
|
+
const masks = lines.map(str => {
|
|
27
|
+
/** make mask for each line
|
|
28
|
+
' The Shoveller | Eddie Stevens | King Arthur\'s singing shovel',
|
|
29
|
+
'0000000011111111111110001111111111111000001111111111111111111111111111' ]
|
|
30
|
+
then not(mask) ... then & masks
|
|
31
|
+
*/
|
|
32
|
+
// enlarge string to tmplLength
|
|
33
|
+
let tstr = str + ' '.repeat(tmplLength - str.length);
|
|
34
|
+
let mask = [];
|
|
35
|
+
const re = /\s+[+|\s]\s/g;
|
|
36
|
+
let match;
|
|
37
|
+
while ((match = re.exec(tstr)) != null) {
|
|
38
|
+
const tmpMask = '1'.repeat(match.index) + '0'.repeat(match[0].length);
|
|
39
|
+
mask.push(tmpMask + '1'.repeat(tmplLength - tmpMask.length));
|
|
40
|
+
}
|
|
41
|
+
return mask.reduce((a, b) => {
|
|
42
|
+
return strbin(a, b, (i1, i2) => i1 & i2);
|
|
43
|
+
}, '1'.repeat(tmplLength));
|
|
44
|
+
});
|
|
45
|
+
// make result mask
|
|
46
|
+
const inverted = masks.map(m => strbin(m, '', i1 => (i1 == 0 ? 1 : 0)));
|
|
47
|
+
const columnTemplate = inverted.reduce((a, b) => {
|
|
48
|
+
return strbin(a, b, (i1, i2) => i1 & i2);
|
|
49
|
+
}, '1'.repeat(tmplLength));
|
|
50
|
+
return columnTemplate;
|
|
51
|
+
};
|
|
52
|
+
const extractColumnsByTemplate = (text, template) => {
|
|
53
|
+
const lines = flattenDeep(text
|
|
54
|
+
.split(/\n/) // split each row by eol
|
|
55
|
+
.filter(str => str.length > 0));
|
|
56
|
+
const cols = lines.map(line => {
|
|
57
|
+
const re = /((1+|0+))/g;
|
|
58
|
+
let columns = [];
|
|
59
|
+
let match;
|
|
60
|
+
while ((match = re.exec(template)) != null) {
|
|
61
|
+
if (match[0][0] == 1)
|
|
62
|
+
continue;
|
|
63
|
+
const s = line.substring(match.index, match.index + match[0].length);
|
|
64
|
+
columns.push(s);
|
|
65
|
+
}
|
|
66
|
+
return columns;
|
|
67
|
+
});
|
|
68
|
+
let result = [];
|
|
69
|
+
result = cols.reduce((a, b) => {
|
|
70
|
+
for (let i = 0; i < b.length; i++) {
|
|
71
|
+
a[i] = (a[i] === undefined ? '' : a[i]) + ' ' + b[i];
|
|
72
|
+
}
|
|
73
|
+
return a;
|
|
74
|
+
}, []);
|
|
75
|
+
return result;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Main transforms
|
|
79
|
+
*/
|
|
80
|
+
export default () => tree => {
|
|
81
|
+
const transformer = makeTransformer({
|
|
82
|
+
table: node => {
|
|
83
|
+
let rows = [];
|
|
84
|
+
const collectValues = row => {
|
|
85
|
+
rows.push(row.value);
|
|
86
|
+
};
|
|
87
|
+
// collect separators for calculate max length of rows
|
|
88
|
+
let seps = [];
|
|
89
|
+
makeTransformer({
|
|
90
|
+
'row:text': collectValues,
|
|
91
|
+
'head:text': collectValues,
|
|
92
|
+
':separator': sep => {
|
|
93
|
+
seps.push(sep.text);
|
|
94
|
+
},
|
|
95
|
+
})(node);
|
|
96
|
+
// add table-caption
|
|
97
|
+
// if table empty return node as is
|
|
98
|
+
if (!rows.length)
|
|
99
|
+
return node;
|
|
100
|
+
const splitToLines = row => row
|
|
101
|
+
.split(/\n/) // split each row by eol
|
|
102
|
+
.filter(str => str.length > 0); // filter empty strings ( after slit )
|
|
103
|
+
// split each row into lines
|
|
104
|
+
const lines = flattenDeep(rows.map(splitToLines));
|
|
105
|
+
const separators = flattenDeep(seps.map(splitToLines));
|
|
106
|
+
// collect text rows
|
|
107
|
+
let textRows = [];
|
|
108
|
+
makeTransformer({
|
|
109
|
+
'row:text': row => {
|
|
110
|
+
textRows.push(row.value);
|
|
111
|
+
},
|
|
112
|
+
})(node);
|
|
113
|
+
const columnTemplate = makeMask(lines, separators);
|
|
114
|
+
const makeBlock = (name, content, ...attr) => {
|
|
115
|
+
return { ...attr, name, type: 'block', content: Array.isArray(content) ? content : [content] };
|
|
116
|
+
};
|
|
117
|
+
// make columns
|
|
118
|
+
const res = makeTransformer({
|
|
119
|
+
'row:text': row => {
|
|
120
|
+
if (textRows.length == 1) {
|
|
121
|
+
// split each text row into lines
|
|
122
|
+
const textRowsLines = flattenDeep([row.value].map(splitToLines));
|
|
123
|
+
return textRowsLines.map(rowValue => {
|
|
124
|
+
const res = extractColumnsByTemplate(rowValue, columnTemplate);
|
|
125
|
+
return makeBlock('table_row', res.map(col => makeBlock('table_cell', { type: 'text', value: col })));
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
const res = extractColumnsByTemplate(row.value, columnTemplate);
|
|
129
|
+
return makeBlock('table_row', res.map(col => makeBlock('table_cell', { type: 'text', value: col })));
|
|
130
|
+
},
|
|
131
|
+
'head:text': head => {
|
|
132
|
+
const res = extractColumnsByTemplate(head.value, columnTemplate);
|
|
133
|
+
return makeBlock('table_head', res.map(col => makeBlock('table_cell', { type: 'text', value: col })));
|
|
134
|
+
},
|
|
135
|
+
})(node);
|
|
136
|
+
return res;
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
return transformer(tree, {});
|
|
140
|
+
};
|
|
141
|
+
//# sourceMappingURL=plugin-tables.js.map
|