@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.
Files changed (100) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/esm/ast-helpers.d.ts +2 -0
  3. package/esm/ast-helpers.js +10 -0
  4. package/esm/ast-helpers.js.map +1 -0
  5. package/esm/ast-inerator.d.ts +6 -0
  6. package/esm/ast-inerator.js +57 -0
  7. package/esm/ast-inerator.js.map +1 -0
  8. package/esm/blocks-helpers.d.ts +32 -0
  9. package/esm/blocks-helpers.js +65 -0
  10. package/esm/blocks-helpers.js.map +1 -0
  11. package/esm/exportAny.d.ts +19 -0
  12. package/esm/exportAny.js +65 -0
  13. package/esm/exportAny.js.map +1 -0
  14. package/esm/exportHtml.d.ts +15 -0
  15. package/esm/exportHtml.js +279 -0
  16. package/esm/exportHtml.js.map +1 -0
  17. package/esm/grammar.d.ts +14 -0
  18. package/esm/grammar.js +6405 -0
  19. package/esm/grammar.js.map +1 -0
  20. package/esm/grammarfc.d.ts +14 -0
  21. package/esm/grammarfc.js +4218 -0
  22. package/esm/grammarfc.js.map +1 -0
  23. package/esm/helpers/config.d.ts +12 -0
  24. package/esm/helpers/config.js +52 -0
  25. package/esm/helpers/config.js.map +1 -0
  26. package/esm/helpers/corePlugins.d.ts +12 -0
  27. package/esm/helpers/corePlugins.js +23 -0
  28. package/esm/helpers/corePlugins.js.map +1 -0
  29. package/esm/helpers/handlers.d.ts +47 -0
  30. package/esm/helpers/handlers.js +107 -0
  31. package/esm/helpers/handlers.js.map +1 -0
  32. package/esm/helpers/ids.d.ts +18 -0
  33. package/esm/helpers/ids.js +69 -0
  34. package/esm/helpers/ids.js.map +1 -0
  35. package/esm/helpers/makeInterator.d.ts +5 -0
  36. package/esm/helpers/makeInterator.js +52 -0
  37. package/esm/helpers/makeInterator.js.map +1 -0
  38. package/esm/helpers/makeQuery.d.ts +47 -0
  39. package/esm/helpers/makeQuery.js +100 -0
  40. package/esm/helpers/makeQuery.js.map +1 -0
  41. package/esm/helpers/makeQuery.test.d.ts +1 -0
  42. package/esm/helpers/makeQuery.test.js +51 -0
  43. package/esm/helpers/makeQuery.test.js.map +1 -0
  44. package/esm/helpers/makeTransformer.d.ts +7 -0
  45. package/esm/helpers/makeTransformer.js +61 -0
  46. package/esm/helpers/makeTransformer.js.map +1 -0
  47. package/esm/helpers/plugins.d.ts +2 -0
  48. package/esm/helpers/plugins.js +23 -0
  49. package/esm/helpers/plugins.js.map +1 -0
  50. package/esm/index.d.ts +82 -0
  51. package/esm/index.js +123 -0
  52. package/esm/index.js.map +1 -0
  53. package/esm/pluggableParser.d.ts +27 -0
  54. package/esm/pluggableParser.js +71 -0
  55. package/esm/pluggableParser.js.map +1 -0
  56. package/esm/plugin-clean-location.d.ts +2 -0
  57. package/esm/plugin-clean-location.js +19 -0
  58. package/esm/plugin-clean-location.js.map +1 -0
  59. package/esm/plugin-defn-fill-term.d.ts +2 -0
  60. package/esm/plugin-defn-fill-term.js +50 -0
  61. package/esm/plugin-defn-fill-term.js.map +1 -0
  62. package/esm/plugin-formatting-codes.d.ts +3 -0
  63. package/esm/plugin-formatting-codes.js +54 -0
  64. package/esm/plugin-formatting-codes.js.map +1 -0
  65. package/esm/plugin-group-defn.d.ts +2 -0
  66. package/esm/plugin-group-defn.js +71 -0
  67. package/esm/plugin-group-defn.js.map +1 -0
  68. package/esm/plugin-group-items.d.ts +2 -0
  69. package/esm/plugin-group-items.js +79 -0
  70. package/esm/plugin-group-items.js.map +1 -0
  71. package/esm/plugin-heading.d.ts +2 -0
  72. package/esm/plugin-heading.js +33 -0
  73. package/esm/plugin-heading.js.map +1 -0
  74. package/esm/plugin-items.d.ts +2 -0
  75. package/esm/plugin-items.js +41 -0
  76. package/esm/plugin-items.js.map +1 -0
  77. package/esm/plugin-tables.d.ts +5 -0
  78. package/esm/plugin-tables.js +141 -0
  79. package/esm/plugin-tables.js.map +1 -0
  80. package/esm/plugin-vmargin.d.ts +3 -0
  81. package/esm/plugin-vmargin.js +29 -0
  82. package/esm/plugin-vmargin.js.map +1 -0
  83. package/esm/query-helpers.d.ts +28 -0
  84. package/esm/query-helpers.js +131 -0
  85. package/esm/query-helpers.js.map +1 -0
  86. package/esm/types.d.ts +357 -0
  87. package/esm/types.js +2 -0
  88. package/esm/types.js.map +1 -0
  89. package/esm/writer.d.ts +30 -0
  90. package/esm/writer.js +85 -0
  91. package/esm/writer.js.map +1 -0
  92. package/esm/writerHtml.d.ts +11 -0
  93. package/esm/writerHtml.js +29 -0
  94. package/esm/writerHtml.js.map +1 -0
  95. package/lib/grammar.js +4 -3
  96. package/lib/plugin-formatting-codes.js +2 -1
  97. package/lib/types.d.ts +16 -1
  98. package/package.json +9 -7
  99. package/schema/AstTree.json +71 -0
  100. 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,2 @@
1
+ export declare const pluginCleanLocation: () => (tree: any) => any;
2
+ export default pluginCleanLocation;
@@ -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,2 @@
1
+ declare const _default: () => (tree: any) => any;
2
+ export default _default;
@@ -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,3 @@
1
+ import { ParserPlugin } from './';
2
+ declare const middle: ParserPlugin;
3
+ export default middle;
@@ -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":"AAAA,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAA;AACvC,OAAO,eAAe,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,SAAS,MAAM,kBAAkB,CAAA;AAUxC,MAAM,MAAM,GAAiB,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;IACxC,MAAM,iBAAiB,GAAG,eAAe,CAAC;QACxC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;YAC3B,OAAO,eAAe,CAAC;gBACrB,OAAO,EAAE,CAAC,CAAQ,EAAE,GAAG,EAAE,EAAE;oBACzB,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;gBAChC,CAAC;gBACD,WAAW,EAAE,CAAC,CAAY,EAAE,GAAG,EAAE,EAAE;oBACjC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;gBAChC,CAAC;aACF,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAA;YACjB,OAAO,CAAC,CAAA;QACV,CAAC;QACD,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;YAC5B,mCAAmC;YACnC,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;gBACjC,OAAO;oBACL,GAAG,CAAC;oBACJ,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC;iBAC1C,CAAA;YACH,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YAC9B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAA;YACpD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAA;YACpD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAA;YAC5D,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAA;YAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;YAC9C,8CAA8C;YAC9C,IAAI,CAAC,WAAW,IAAI,WAAW,IAAI,eAAe,IAAI,cAAc,CAAC,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAA;YAC1G,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,CAAA;YAElC,MAAM,WAAW,GAAG,eAAe,CAAC;gBAClC,WAAW,EAAE,CAAC,CAAY,EAAE,GAAG,EAAE,EAAE;oBACjC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;gBAC7C,CAAC;gBACD,OAAO,EAAE,CAAC,CAAQ,EAAE,GAAG,EAAE,EAAE;oBACzB,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;gBAC7C,CAAC;gBACD,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;oBACnB,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;wBAAE,OAAO,CAAC,CAAA;oBAClC,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,CAAA;gBAC9D,CAAC;aACF,CAAC,CAAA;YACF,OAAO,WAAW,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAA;QACnC,CAAC;KACF,CAAC,CAAA;IACF,OAAO,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AACpC,CAAC,CAAA;AACD,eAAe,MAAM,CAAA"}
@@ -0,0 +1,2 @@
1
+ declare const _default: () => (tree: any) => any;
2
+ export default _default;
@@ -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,2 @@
1
+ declare const _default: () => (tree: any) => any;
2
+ export default _default;
@@ -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,2 @@
1
+ declare const _default: () => (tree: any) => any;
2
+ export default _default;
@@ -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,2 @@
1
+ declare const _default: () => (tree: any) => any;
2
+ export default _default;
@@ -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,5 @@
1
+ declare const _default: () => (tree: any) => any;
2
+ /**
3
+ * Main transforms
4
+ */
5
+ export default _default;
@@ -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