@unified-latex/unified-latex-builder 1.0.0
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/README.md +153 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +132 -0
- package/dist/index.js.map +7 -0
- package/dist/libs/builders.d.ts +53 -0
- package/dist/libs/builders.d.ts.map +1 -0
- package/package.json +45 -0
package/README.md
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
<!-- DO NOT MODIFY -->
|
|
2
|
+
<!-- This file was autogenerated by build-docs.ts -->
|
|
3
|
+
<!-- Edit the docstring in index.ts and regenerate -->
|
|
4
|
+
<!-- rather than editing this file directly. -->
|
|
5
|
+
# unified-latex-builder
|
|
6
|
+
|
|
7
|
+
## What is this?
|
|
8
|
+
|
|
9
|
+
Functions to help build a `unified-latex` Abstract Syntax Tree (AST)
|
|
10
|
+
with [hyperscript](https://github.com/dominictarr/hyperscript)-like syntax.
|
|
11
|
+
|
|
12
|
+
## When should I use this?
|
|
13
|
+
|
|
14
|
+
If you want to programmatically create `Ast.Node` nodes.
|
|
15
|
+
|
|
16
|
+
# Functions
|
|
17
|
+
|
|
18
|
+
## `arg(args, special)`
|
|
19
|
+
|
|
20
|
+
Create an Argument. `special.braces` can optionally specify
|
|
21
|
+
the signature of the open/close marks that each argument uses. For example
|
|
22
|
+
|
|
23
|
+
arg("a", { braces: "[]" });
|
|
24
|
+
|
|
25
|
+
will result in arguments `[a]`. Valid braces are `*`, `[`, `{`, and `(`.
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
function arg(
|
|
29
|
+
args: CoercibleArgument | Ast.Node[],
|
|
30
|
+
special: ArgumentSpecialOptions
|
|
31
|
+
): Ast.Argument;
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Parameters**
|
|
35
|
+
|
|
36
|
+
| Param | Type |
|
|
37
|
+
| :------ | :-------------------------------- |
|
|
38
|
+
| args | <span color='gray'>Omitted</span> |
|
|
39
|
+
| special | `ArgumentSpecialOptions` |
|
|
40
|
+
|
|
41
|
+
where
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
type ArgumentSpecialOptions = {
|
|
45
|
+
braces?: string;
|
|
46
|
+
openMark?: string;
|
|
47
|
+
closeMark?: string;
|
|
48
|
+
};
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## `args(args, special)`
|
|
52
|
+
|
|
53
|
+
Create an Argument list. `special.braces` can optionally specify
|
|
54
|
+
the signature of the open/close marks that each argument uses. For example
|
|
55
|
+
|
|
56
|
+
args(["a", "b"], { braces: "[]{}" });
|
|
57
|
+
|
|
58
|
+
will result in arguments `[a]{b}`. Valid braces are `*`, `[`, `{`, and `(`.
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
function args(
|
|
62
|
+
args: CoercibleArgument | CoercibleArgument[],
|
|
63
|
+
special: ArgumentsSpecialOptions
|
|
64
|
+
): Ast.Argument[];
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Parameters**
|
|
68
|
+
|
|
69
|
+
| Param | Type |
|
|
70
|
+
| :------ | :-------------------------------- |
|
|
71
|
+
| args | <span color='gray'>Omitted</span> |
|
|
72
|
+
| special | `ArgumentsSpecialOptions` |
|
|
73
|
+
|
|
74
|
+
where
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
type ArgumentsSpecialOptions = {
|
|
78
|
+
braces?: string;
|
|
79
|
+
defaultOpenMark?: string;
|
|
80
|
+
defaultCloseMark?: string;
|
|
81
|
+
};
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## `env(name, body, envArgs, special)`
|
|
85
|
+
|
|
86
|
+
Create an Environment node.
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
function env(
|
|
90
|
+
name: String,
|
|
91
|
+
body: CoercibleNode | CoercibleNode[],
|
|
92
|
+
envArgs: CoercibleArgument | CoercibleArgument[],
|
|
93
|
+
special: {}
|
|
94
|
+
): Ast.Environment;
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Parameters**
|
|
98
|
+
|
|
99
|
+
| Param | Type |
|
|
100
|
+
| :------ | :-------------------------------- |
|
|
101
|
+
| name | `String` |
|
|
102
|
+
| body | <span color='gray'>Omitted</span> |
|
|
103
|
+
| envArgs | <span color='gray'>Omitted</span> |
|
|
104
|
+
| special | `{}` |
|
|
105
|
+
|
|
106
|
+
## `m(name, marcoArgs, special)`
|
|
107
|
+
|
|
108
|
+
Create a Macro with the given `name`. The macro
|
|
109
|
+
may be followed by any number of arguments.
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
function m(
|
|
113
|
+
name: String,
|
|
114
|
+
marcoArgs: CoercibleArgument | CoercibleArgument[],
|
|
115
|
+
special: MacroSpecialOptions
|
|
116
|
+
): Ast.Macro;
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Parameters**
|
|
120
|
+
|
|
121
|
+
| Param | Type |
|
|
122
|
+
| :-------- | :-------------------------------- |
|
|
123
|
+
| name | `String` |
|
|
124
|
+
| marcoArgs | <span color='gray'>Omitted</span> |
|
|
125
|
+
| special | `MacroSpecialOptions` |
|
|
126
|
+
|
|
127
|
+
where
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
type MacroSpecialOptions = {
|
|
131
|
+
escapeToken?: string;
|
|
132
|
+
};
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## `s(value)`
|
|
136
|
+
|
|
137
|
+
Create a String node from `value`
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
function s(value: string | Ast.String): Ast.String;
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Parameters**
|
|
144
|
+
|
|
145
|
+
| Param | Type |
|
|
146
|
+
| :---- | :--------------------- |
|
|
147
|
+
| value | `string \| Ast.String` |
|
|
148
|
+
|
|
149
|
+
# Constants
|
|
150
|
+
|
|
151
|
+
| Name | Type | Description |
|
|
152
|
+
| :--- | :--------------- | :--------------- |
|
|
153
|
+
| `SP` | `Ast.Whitespace` | Whitespace node. |
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from "./libs/builders";
|
|
2
|
+
/**
|
|
3
|
+
* ## What is this?
|
|
4
|
+
*
|
|
5
|
+
* Functions to help build a `unified-latex` Abstract Syntax Tree (AST)
|
|
6
|
+
* with [hyperscript](https://github.com/dominictarr/hyperscript)-like syntax.
|
|
7
|
+
*
|
|
8
|
+
* ## When should I use this?
|
|
9
|
+
*
|
|
10
|
+
* If you want to programmatically create `Ast.Node` nodes.
|
|
11
|
+
*
|
|
12
|
+
*/
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAGhC;;;;;;;;;;GAUG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// libs/builders.ts
|
|
2
|
+
function normalizeNode(node) {
|
|
3
|
+
if (typeof node === "string") {
|
|
4
|
+
return s(node);
|
|
5
|
+
}
|
|
6
|
+
return node;
|
|
7
|
+
}
|
|
8
|
+
function normalizeArgument(arg2, openMark = "{", closeMark = "}") {
|
|
9
|
+
if (typeof arg2 === "string") {
|
|
10
|
+
return {
|
|
11
|
+
type: "argument",
|
|
12
|
+
openMark,
|
|
13
|
+
closeMark,
|
|
14
|
+
content: [s(arg2)]
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
if (arg2.type === "argument") {
|
|
18
|
+
return arg2;
|
|
19
|
+
}
|
|
20
|
+
return { type: "argument", openMark, closeMark, content: [arg2] };
|
|
21
|
+
}
|
|
22
|
+
function normalizeArgumentsList(args2, openMark = "{", closeMark = "}") {
|
|
23
|
+
if (args2 == null) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
if (Array.isArray(args2)) {
|
|
27
|
+
return args2.map((arg2) => normalizeArgument(arg2, openMark, closeMark));
|
|
28
|
+
}
|
|
29
|
+
return [normalizeArgument(args2, openMark, closeMark)];
|
|
30
|
+
}
|
|
31
|
+
var BRACES_MAP = {
|
|
32
|
+
"*": { openMark: "", closeMark: "" },
|
|
33
|
+
"{": { openMark: "{", closeMark: "}" },
|
|
34
|
+
"[": { openMark: "[", closeMark: "]" },
|
|
35
|
+
"(": { openMark: "(", closeMark: ")" }
|
|
36
|
+
};
|
|
37
|
+
var CLOSE_BRACES = new Set(Object.values(BRACES_MAP).map((x) => x.closeMark).filter((x) => x));
|
|
38
|
+
function bracesToOpenAndCloseMarks(braces) {
|
|
39
|
+
const ret = [];
|
|
40
|
+
for (const char of braces.split("")) {
|
|
41
|
+
if (CLOSE_BRACES.has(char)) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const braces2 = BRACES_MAP[char];
|
|
45
|
+
if (braces2 == null) {
|
|
46
|
+
throw new Error(`Unknown open/close mark type "${char}"`);
|
|
47
|
+
}
|
|
48
|
+
braces2;
|
|
49
|
+
ret.push(braces2);
|
|
50
|
+
}
|
|
51
|
+
return ret;
|
|
52
|
+
}
|
|
53
|
+
function args(args2, special) {
|
|
54
|
+
var _a, _b;
|
|
55
|
+
if (!Array.isArray(args2)) {
|
|
56
|
+
args2 = [args2];
|
|
57
|
+
}
|
|
58
|
+
if (special == null ? void 0 : special.braces) {
|
|
59
|
+
const braces = bracesToOpenAndCloseMarks(special.braces);
|
|
60
|
+
if (braces.length !== args2.length) {
|
|
61
|
+
throw new Error(`There is a difference between the number of supplied braces and the number of supplied arguments. ${args2.length} supplied with braces signature ${special.braces}`);
|
|
62
|
+
}
|
|
63
|
+
return args2.map((arg2, i) => normalizeArgument(arg2, braces[i].openMark, braces[i].closeMark));
|
|
64
|
+
}
|
|
65
|
+
const openMark = (_a = special == null ? void 0 : special.defaultOpenMark) != null ? _a : "{";
|
|
66
|
+
const closeMark = (_b = special == null ? void 0 : special.defaultCloseMark) != null ? _b : "}";
|
|
67
|
+
return normalizeArgumentsList(args2, openMark, closeMark);
|
|
68
|
+
}
|
|
69
|
+
function arg(args2, special) {
|
|
70
|
+
var _a, _b;
|
|
71
|
+
if (typeof args2 === "string") {
|
|
72
|
+
args2 = s(args2);
|
|
73
|
+
}
|
|
74
|
+
if (!Array.isArray(args2) && args2.type === "argument") {
|
|
75
|
+
return args2;
|
|
76
|
+
}
|
|
77
|
+
let openMark = (_a = special == null ? void 0 : special.openMark) != null ? _a : "{";
|
|
78
|
+
let closeMark = (_b = special == null ? void 0 : special.closeMark) != null ? _b : "}";
|
|
79
|
+
if (special == null ? void 0 : special.braces) {
|
|
80
|
+
const braces = bracesToOpenAndCloseMarks(special.braces);
|
|
81
|
+
if (braces[0]) {
|
|
82
|
+
openMark = braces[0].openMark;
|
|
83
|
+
closeMark = braces[0].closeMark;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (!Array.isArray(args2)) {
|
|
87
|
+
args2 = [args2];
|
|
88
|
+
}
|
|
89
|
+
return { type: "argument", content: args2, openMark, closeMark };
|
|
90
|
+
}
|
|
91
|
+
function m(name, marcoArgs, special) {
|
|
92
|
+
const args2 = normalizeArgumentsList(marcoArgs);
|
|
93
|
+
const escapeToken = special == null ? void 0 : special.escapeToken;
|
|
94
|
+
const ret = { type: "macro", content: name };
|
|
95
|
+
if (args2.length > 0) {
|
|
96
|
+
ret.args = args2;
|
|
97
|
+
}
|
|
98
|
+
if (escapeToken != null) {
|
|
99
|
+
ret.escapeToken = escapeToken;
|
|
100
|
+
}
|
|
101
|
+
return ret;
|
|
102
|
+
}
|
|
103
|
+
function s(value) {
|
|
104
|
+
if (typeof value === "string") {
|
|
105
|
+
return { type: "string", content: value };
|
|
106
|
+
}
|
|
107
|
+
return value;
|
|
108
|
+
}
|
|
109
|
+
function env(name, body, envArgs, special) {
|
|
110
|
+
if (!Array.isArray(body)) {
|
|
111
|
+
body = [body];
|
|
112
|
+
}
|
|
113
|
+
const args2 = normalizeArgumentsList(envArgs, "[", "]");
|
|
114
|
+
const ret = {
|
|
115
|
+
type: "environment",
|
|
116
|
+
env: name,
|
|
117
|
+
content: body.map(normalizeNode)
|
|
118
|
+
};
|
|
119
|
+
if (args2.length > 0) {
|
|
120
|
+
ret.args = args2;
|
|
121
|
+
}
|
|
122
|
+
return ret;
|
|
123
|
+
}
|
|
124
|
+
var SP = { type: "whitespace" };
|
|
125
|
+
export {
|
|
126
|
+
SP,
|
|
127
|
+
arg,
|
|
128
|
+
args,
|
|
129
|
+
env,
|
|
130
|
+
m,
|
|
131
|
+
s
|
|
132
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../libs/builders.ts"],
|
|
4
|
+
"sourcesContent": ["import type * as Ast from \"@unified-latex/unified-latex-types\";\n\ntype CoercibleNode = string | Ast.Node;\ntype CoercibleArgument = CoercibleNode | Ast.Argument;\ntype MacroSpecialOptions = {\n escapeToken?: string;\n};\ntype ArgumentsSpecialOptions = {\n braces?: string;\n defaultOpenMark?: string;\n defaultCloseMark?: string;\n};\ntype ArgumentSpecialOptions = {\n braces?: string;\n openMark?: string;\n closeMark?: string;\n};\n\nfunction normalizeNode(node: CoercibleNode): Ast.Node {\n if (typeof node === \"string\") {\n return s(node);\n }\n return node;\n}\n\nfunction normalizeArgument(\n arg: CoercibleArgument,\n openMark = \"{\",\n closeMark = \"}\"\n): Ast.Argument {\n if (typeof arg === \"string\") {\n return {\n type: \"argument\",\n openMark,\n closeMark,\n content: [s(arg)],\n };\n }\n if (arg.type === \"argument\") {\n return arg;\n }\n return { type: \"argument\", openMark, closeMark, content: [arg] };\n}\n\nfunction normalizeArgumentsList(\n args?: CoercibleArgument | CoercibleArgument[],\n openMark = \"{\",\n closeMark = \"}\"\n): Ast.Argument[] {\n if (args == null) {\n return [];\n }\n if (Array.isArray(args)) {\n return args.map((arg) => normalizeArgument(arg, openMark, closeMark));\n }\n return [normalizeArgument(args, openMark, closeMark)];\n}\n\ntype BracesPair = { openMark: string; closeMark: string };\nconst BRACES_MAP: Record<string, BracesPair> = {\n \"*\": { openMark: \"\", closeMark: \"\" },\n \"{\": { openMark: \"{\", closeMark: \"}\" },\n \"[\": { openMark: \"[\", closeMark: \"]\" },\n \"(\": { openMark: \"(\", closeMark: \")\" },\n};\nconst CLOSE_BRACES = new Set(\n Object.values(BRACES_MAP)\n .map((x) => x.closeMark)\n .filter((x) => x)\n);\n\n/**\n * Turn a braces signature into an array of braces.\n */\nfunction bracesToOpenAndCloseMarks(braces: string): BracesPair[] {\n const ret: BracesPair[] = [];\n\n for (const char of braces.split(\"\")) {\n if (CLOSE_BRACES.has(char)) {\n continue;\n }\n const braces = BRACES_MAP[char];\n if (braces == null) {\n throw new Error(`Unknown open/close mark type \"${char}\"`);\n }\n braces;\n ret.push(braces);\n }\n\n return ret;\n}\n\n/**\n * Create an Argument list. `special.braces` can optionally specify\n * the signature of the open/close marks that each argument uses. For example\n * ```\n * args([\"a\", \"b\"], { braces: \"[]{}\" });\n * ```\n * will result in arguments `[a]{b}`. Valid braces are `*`, `[`, `{`, and `(`.\n */\nexport function args(\n args: CoercibleArgument | CoercibleArgument[],\n special?: ArgumentsSpecialOptions\n): Ast.Argument[] {\n if (!Array.isArray(args)) {\n args = [args];\n }\n if (special?.braces) {\n const braces = bracesToOpenAndCloseMarks(special.braces);\n if (braces.length !== args.length) {\n throw new Error(\n `There is a difference between the number of supplied braces and the number of supplied arguments. ${args.length} supplied with braces signature ${special.braces}`\n );\n }\n return args.map((arg, i) =>\n normalizeArgument(arg, braces[i].openMark, braces[i].closeMark)\n );\n }\n\n const openMark = special?.defaultOpenMark ?? \"{\";\n const closeMark = special?.defaultCloseMark ?? \"}\";\n return normalizeArgumentsList(args, openMark, closeMark);\n}\n\n/**\n * Create an Argument. `special.braces` can optionally specify\n * the signature of the open/close marks that each argument uses. For example\n * ```\n * arg(\"a\", { braces: \"[]\" });\n * ```\n * will result in arguments `[a]`. Valid braces are `*`, `[`, `{`, and `(`.\n */\nexport function arg(\n args: CoercibleArgument | Ast.Node[],\n special?: ArgumentSpecialOptions\n): Ast.Argument {\n if (typeof args === \"string\") {\n args = s(args);\n }\n if (!Array.isArray(args) && args.type === \"argument\") {\n return args;\n }\n\n let openMark = special?.openMark ?? \"{\";\n let closeMark = special?.closeMark ?? \"}\";\n if (special?.braces) {\n const braces = bracesToOpenAndCloseMarks(special.braces);\n if (braces[0]) {\n openMark = braces[0].openMark;\n closeMark = braces[0].closeMark;\n }\n }\n\n if (!Array.isArray(args)) {\n args = [args];\n }\n\n return { type: \"argument\", content: args, openMark, closeMark };\n}\n\n/**\n * Create a Macro with the given `name`. The macro\n * may be followed by any number of arguments.\n */\nexport function m(\n name: string,\n marcoArgs?: CoercibleArgument | CoercibleArgument[],\n special?: MacroSpecialOptions\n): Ast.Macro {\n const args = normalizeArgumentsList(marcoArgs);\n const escapeToken = special?.escapeToken;\n const ret: Ast.Macro = { type: \"macro\", content: name };\n\n if (args.length > 0) {\n ret.args = args;\n }\n if (escapeToken != null) {\n ret.escapeToken = escapeToken;\n }\n\n return ret;\n}\n\n/**\n * Create a String node from `value`\n */\nexport function s(value: string | Ast.String): Ast.String {\n if (typeof value === \"string\") {\n return { type: \"string\", content: value };\n }\n return value;\n}\n\n/**\n * Create an Environment node.\n */\nexport function env(\n name: string,\n body: CoercibleNode | CoercibleNode[],\n envArgs?: CoercibleArgument | CoercibleArgument[],\n special?: unknown\n): Ast.Environment {\n if (!Array.isArray(body)) {\n body = [body];\n }\n const args = normalizeArgumentsList(envArgs, \"[\", \"]\");\n const ret: Ast.Environment = {\n type: \"environment\",\n env: name,\n content: body.map(normalizeNode),\n };\n if (args.length > 0) {\n ret.args = args;\n }\n\n return ret;\n}\n\n/**\n * Whitespace node.\n */\nexport const SP: Ast.Whitespace = { type: \"whitespace\" };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type * as Ast from "@unified-latex/unified-latex-types";
|
|
2
|
+
declare type CoercibleNode = string | Ast.Node;
|
|
3
|
+
declare type CoercibleArgument = CoercibleNode | Ast.Argument;
|
|
4
|
+
declare type MacroSpecialOptions = {
|
|
5
|
+
escapeToken?: string;
|
|
6
|
+
};
|
|
7
|
+
declare type ArgumentsSpecialOptions = {
|
|
8
|
+
braces?: string;
|
|
9
|
+
defaultOpenMark?: string;
|
|
10
|
+
defaultCloseMark?: string;
|
|
11
|
+
};
|
|
12
|
+
declare type ArgumentSpecialOptions = {
|
|
13
|
+
braces?: string;
|
|
14
|
+
openMark?: string;
|
|
15
|
+
closeMark?: string;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Create an Argument list. `special.braces` can optionally specify
|
|
19
|
+
* the signature of the open/close marks that each argument uses. For example
|
|
20
|
+
* ```
|
|
21
|
+
* args(["a", "b"], { braces: "[]{}" });
|
|
22
|
+
* ```
|
|
23
|
+
* will result in arguments `[a]{b}`. Valid braces are `*`, `[`, `{`, and `(`.
|
|
24
|
+
*/
|
|
25
|
+
export declare function args(args: CoercibleArgument | CoercibleArgument[], special?: ArgumentsSpecialOptions): Ast.Argument[];
|
|
26
|
+
/**
|
|
27
|
+
* Create an Argument. `special.braces` can optionally specify
|
|
28
|
+
* the signature of the open/close marks that each argument uses. For example
|
|
29
|
+
* ```
|
|
30
|
+
* arg("a", { braces: "[]" });
|
|
31
|
+
* ```
|
|
32
|
+
* will result in arguments `[a]`. Valid braces are `*`, `[`, `{`, and `(`.
|
|
33
|
+
*/
|
|
34
|
+
export declare function arg(args: CoercibleArgument | Ast.Node[], special?: ArgumentSpecialOptions): Ast.Argument;
|
|
35
|
+
/**
|
|
36
|
+
* Create a Macro with the given `name`. The macro
|
|
37
|
+
* may be followed by any number of arguments.
|
|
38
|
+
*/
|
|
39
|
+
export declare function m(name: string, marcoArgs?: CoercibleArgument | CoercibleArgument[], special?: MacroSpecialOptions): Ast.Macro;
|
|
40
|
+
/**
|
|
41
|
+
* Create a String node from `value`
|
|
42
|
+
*/
|
|
43
|
+
export declare function s(value: string | Ast.String): Ast.String;
|
|
44
|
+
/**
|
|
45
|
+
* Create an Environment node.
|
|
46
|
+
*/
|
|
47
|
+
export declare function env(name: string, body: CoercibleNode | CoercibleNode[], envArgs?: CoercibleArgument | CoercibleArgument[], special?: unknown): Ast.Environment;
|
|
48
|
+
/**
|
|
49
|
+
* Whitespace node.
|
|
50
|
+
*/
|
|
51
|
+
export declare const SP: Ast.Whitespace;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=builders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../libs/builders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAE/D,aAAK,aAAa,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;AACvC,aAAK,iBAAiB,GAAG,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAC;AACtD,aAAK,mBAAmB,GAAG;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AACF,aAAK,uBAAuB,GAAG;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AACF,aAAK,sBAAsB,GAAG;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AA4EF;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAChB,IAAI,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,EAC7C,OAAO,CAAC,EAAE,uBAAuB,GAClC,GAAG,CAAC,QAAQ,EAAE,CAmBhB;AAED;;;;;;;GAOG;AACH,wBAAgB,GAAG,CACf,IAAI,EAAE,iBAAiB,GAAG,GAAG,CAAC,IAAI,EAAE,EACpC,OAAO,CAAC,EAAE,sBAAsB,GACjC,GAAG,CAAC,QAAQ,CAuBd;AAED;;;GAGG;AACH,wBAAgB,CAAC,CACb,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,EACnD,OAAO,CAAC,EAAE,mBAAmB,GAC9B,GAAG,CAAC,KAAK,CAaX;AAED;;GAEG;AACH,wBAAgB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAKxD;AAED;;GAEG;AACH,wBAAgB,GAAG,CACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,GAAG,aAAa,EAAE,EACrC,OAAO,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,EACjD,OAAO,CAAC,EAAE,OAAO,GAClB,GAAG,CAAC,WAAW,CAejB;AAED;;GAEG;AACH,eAAO,MAAM,EAAE,EAAE,GAAG,CAAC,UAAmC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@unified-latex/unified-latex-builder",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Tools for constructing unified-latex ASTs",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"@unified-latex/unified-latex-types": "^1.0.0"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/**/*.ts",
|
|
12
|
+
"dist/**/*.js",
|
|
13
|
+
"dist/**/*.map",
|
|
14
|
+
"dist/**/*.json"
|
|
15
|
+
],
|
|
16
|
+
"exports": {
|
|
17
|
+
".": "./dist/index.js",
|
|
18
|
+
"./*js": "./dist/*js",
|
|
19
|
+
"./*": "./dist/*.js"
|
|
20
|
+
},
|
|
21
|
+
"typesVersions": {
|
|
22
|
+
"*": {
|
|
23
|
+
"*": [
|
|
24
|
+
"dist/*"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"scripts": {
|
|
29
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
30
|
+
"build": "npm run clean && npm run compile",
|
|
31
|
+
"clean": "rm -rf ./dist && rm -rf tsconfig.tsbuildinfo",
|
|
32
|
+
"compile": "tsc -b tsconfig.json"
|
|
33
|
+
},
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "git+https://github.com/siefkenj/unified-latex.git"
|
|
37
|
+
},
|
|
38
|
+
"keywords": [],
|
|
39
|
+
"author": "",
|
|
40
|
+
"license": "BSD",
|
|
41
|
+
"bugs": {
|
|
42
|
+
"url": "https://github.com/siefkenj/unified-latex/issues"
|
|
43
|
+
},
|
|
44
|
+
"homepage": "https://github.com/siefkenj/unified-latex#readme"
|
|
45
|
+
}
|