bookish-press 0.4.1 → 0.4.21
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 +3 -1
- package/components/Auth.svelte +19 -14
- package/components/Auth.svelte.d.ts +4 -4
- package/components/Authentication.d.ts +2 -2
- package/components/BookPreview.svelte +77 -59
- package/components/BookPreview.svelte.d.ts +5 -5
- package/components/External.svelte +1 -1
- package/components/External.svelte.d.ts +3 -3
- package/components/Link.svelte +49 -3
- package/components/Link.svelte.d.ts +3 -4
- package/components/app/BookList.svelte +19 -0
- package/components/app/BookList.svelte.d.ts +18 -0
- package/components/app/Button.svelte +49 -0
- package/components/app/Button.svelte.d.ts +22 -0
- package/components/app/Feedback.svelte +45 -0
- package/components/app/Feedback.svelte.d.ts +18 -0
- package/components/app/Head.svelte +12 -0
- package/components/app/Head.svelte.d.ts +27 -0
- package/components/app/Large.svelte +8 -0
- package/components/app/Large.svelte.d.ts +27 -0
- package/components/app/Lead.svelte +12 -0
- package/components/app/Lead.svelte.d.ts +27 -0
- package/components/app/Link.svelte +24 -0
- package/components/app/Link.svelte.d.ts +20 -0
- package/components/app/Options.svelte +24 -0
- package/components/app/Options.svelte.d.ts +19 -0
- package/components/app/Paragraph.svelte +19 -0
- package/components/app/Paragraph.svelte.d.ts +18 -0
- package/components/app/Table.svelte +32 -0
- package/components/app/Table.svelte.d.ts +27 -0
- package/components/app/TextInput.svelte +37 -0
- package/components/app/TextInput.svelte.d.ts +22 -0
- package/components/app/Writing.svelte +13 -0
- package/components/app/Writing.svelte.d.ts +27 -0
- package/components/chapter/Atom.svelte +20 -6
- package/components/chapter/Atom.svelte.d.ts +3 -3
- package/components/chapter/Block.svelte +23 -20
- package/components/chapter/Block.svelte.d.ts +4 -4
- package/components/chapter/Callout.svelte +38 -7
- package/components/chapter/Callout.svelte.d.ts +4 -4
- package/components/chapter/CaptionedCode.svelte +66 -23
- package/components/chapter/CaptionedCode.svelte.d.ts +4 -4
- package/components/chapter/ChapterBody.svelte +61 -9
- package/components/chapter/ChapterBody.svelte.d.ts +4 -4
- package/components/chapter/Citations.svelte +86 -20
- package/components/chapter/Citations.svelte.d.ts +4 -4
- package/components/chapter/Code.svelte +152 -21
- package/components/chapter/Code.svelte.d.ts +3 -3
- package/components/chapter/Comment.svelte +38 -16
- package/components/chapter/Comment.svelte.d.ts +3 -3
- package/components/chapter/Definition.svelte +52 -18
- package/components/chapter/Definition.svelte.d.ts +5 -8
- package/components/chapter/Embed.svelte +154 -66
- package/components/chapter/Embed.svelte.d.ts +5 -4
- package/components/chapter/ErrorMessage.svelte +7 -2
- package/components/chapter/ErrorMessage.svelte.d.ts +4 -4
- package/components/chapter/ExtendedPrism.d.ts +2 -0
- package/components/chapter/ExtendedPrism.js +69 -0
- package/components/chapter/Figure.svelte +90 -0
- package/components/chapter/Figure.svelte.d.ts +24 -0
- package/components/chapter/Footnote.svelte +75 -12
- package/components/chapter/Footnote.svelte.d.ts +4 -4
- package/components/chapter/Format.svelte +60 -37
- package/components/chapter/Format.svelte.d.ts +4 -4
- package/components/chapter/InlineCode.svelte +15 -5
- package/components/chapter/InlineCode.svelte.d.ts +4 -4
- package/components/chapter/Label.svelte +37 -8
- package/components/chapter/Label.svelte.d.ts +4 -4
- package/components/chapter/Link.svelte +23 -18
- package/components/chapter/Link.svelte.d.ts +4 -4
- package/components/chapter/List.svelte +75 -8
- package/components/chapter/List.svelte.d.ts +4 -4
- package/components/chapter/Marginal.svelte +169 -27
- package/components/chapter/Marginal.svelte.d.ts +6 -3
- package/components/chapter/Paragraph.svelte +74 -6
- package/components/chapter/Paragraph.svelte.d.ts +4 -4
- package/components/chapter/Positioned.svelte +33 -0
- package/components/chapter/Positioned.svelte.d.ts +19 -0
- package/components/chapter/Problem.svelte +15 -0
- package/components/chapter/Problem.svelte.d.ts +27 -0
- package/components/chapter/Python.svelte +68 -21
- package/components/chapter/Python.svelte.d.ts +4 -4
- package/components/chapter/Quote.svelte +64 -11
- package/components/chapter/Quote.svelte.d.ts +4 -4
- package/components/chapter/Rule.svelte +12 -1
- package/components/chapter/Rule.svelte.d.ts +4 -4
- package/components/chapter/Table.svelte +36 -25
- package/components/chapter/Table.svelte.d.ts +4 -4
- package/components/chapter/Text.svelte +61 -36
- package/components/chapter/Text.svelte.d.ts +5 -4
- package/components/editor/BookishEditor.svelte +343 -237
- package/components/editor/BookishEditor.svelte.d.ts +5 -5
- package/components/editor/CalloutEditor.svelte +5 -5
- package/components/editor/CalloutEditor.svelte.d.ts +4 -4
- package/components/editor/CaptionedCodeEditor.svelte +16 -12
- package/components/editor/CaptionedCodeEditor.svelte.d.ts +4 -4
- package/components/editor/CaretContext.d.ts +48 -16
- package/components/editor/CaretState.d.ts +16 -44
- package/components/editor/CaretUtilities.d.ts +2 -2
- package/components/editor/CaretView.svelte +80 -0
- package/components/editor/CaretView.svelte.d.ts +24 -0
- package/components/editor/CitationsEditor.svelte +36 -25
- package/components/editor/CitationsEditor.svelte.d.ts +4 -4
- package/components/editor/Clipboard.d.ts +2 -2
- package/components/editor/Command.d.ts +13 -12
- package/components/editor/Commands.d.ts +1 -1
- package/components/editor/Commands.js +1114 -571
- package/components/editor/ConfirmButton.svelte +18 -12
- package/components/editor/ConfirmButton.svelte.d.ts +5 -4
- package/components/editor/DefinitionEditor.svelte +29 -21
- package/components/editor/DefinitionEditor.svelte.d.ts +4 -4
- package/components/editor/EmbedEditor.svelte +93 -43
- package/components/editor/EmbedEditor.svelte.d.ts +3 -3
- package/components/editor/Icon.svelte +17 -0
- package/components/editor/Icon.svelte.d.ts +16 -0
- package/components/editor/ImageChooser.svelte +53 -34
- package/components/editor/ImageChooser.svelte.d.ts +3 -3
- package/components/editor/InlineCodeEditor.svelte +7 -4
- package/components/editor/InlineCodeEditor.svelte.d.ts +4 -4
- package/components/editor/LabelEditor.svelte +20 -11
- package/components/editor/LabelEditor.svelte.d.ts +4 -4
- package/components/editor/LanguageEditor.svelte +10 -7
- package/components/editor/LanguageEditor.svelte.d.ts +3 -3
- package/components/editor/LinkEditor.svelte +64 -39
- package/components/editor/LinkEditor.svelte.d.ts +4 -4
- package/components/editor/Note.svelte +3 -3
- package/components/editor/Note.svelte.d.ts +6 -2
- package/components/editor/PositionEditor.svelte +9 -6
- package/components/editor/PositionEditor.svelte.d.ts +4 -4
- package/components/editor/QuoteEditor.svelte +7 -2
- package/components/editor/QuoteEditor.svelte.d.ts +4 -4
- package/components/editor/Switch.svelte +55 -28
- package/components/editor/Switch.svelte.d.ts +4 -4
- package/components/editor/TableEditor.svelte +10 -0
- package/components/editor/TableEditor.svelte.d.ts +17 -0
- package/components/editor/TextEditor.svelte +83 -45
- package/components/editor/TextEditor.svelte.d.ts +5 -4
- package/components/editor/Toggle.svelte +11 -8
- package/components/editor/Toggle.svelte.d.ts +4 -4
- package/components/editor/Toolbar.svelte +192 -144
- package/components/editor/Toolbar.svelte.d.ts +5 -8
- package/components/editor/ToolbarGroup.svelte +18 -23
- package/components/editor/ToolbarGroup.svelte.d.ts +3 -4
- package/components/editor/ToolbarSpacer.svelte +8 -1
- package/components/editor/ToolbarSpacer.svelte.d.ts +6 -2
- package/components/editor/URLEditor.svelte +6 -8
- package/components/editor/URLEditor.svelte.d.ts +3 -3
- package/components/editor/UndoState.d.ts +3 -3
- package/components/editor/icons/annotate.svg +1 -0
- package/components/editor/icons/block.svg +1 -0
- package/components/editor/icons/bold.svg +1 -0
- package/components/editor/icons/bullets.svg +1 -0
- package/components/editor/icons/callout.svg +1 -0
- package/components/editor/icons/citation.svg +8 -0
- package/components/editor/icons/clear.svg +1 -0
- package/components/editor/icons/clipboard.svg +1 -0
- package/components/editor/icons/code.svg +1 -0
- package/components/editor/icons/columnafter.svg +1 -0
- package/components/editor/icons/columnbefore.svg +1 -0
- package/components/editor/icons/comment.svg +1 -0
- package/components/editor/icons/copy.svg +1 -0
- package/components/editor/icons/cut.svg +1 -0
- package/components/editor/icons/define.svg +7 -0
- package/components/editor/icons/deletecolumn.svg +1 -0
- package/components/editor/icons/deleterow.svg +1 -0
- package/components/editor/icons/footnote.svg +8 -0
- package/components/editor/icons/header1.svg +7 -0
- package/components/editor/icons/header2.svg +7 -0
- package/components/editor/icons/header3.svg +7 -0
- package/components/editor/icons/home.svg +1 -0
- package/components/editor/icons/indent.svg +1 -0
- package/components/editor/icons/italic.svg +1 -0
- package/components/editor/icons/label.svg +1 -0
- package/components/editor/icons/left.svg +1 -0
- package/components/editor/icons/level.svg +1 -0
- package/components/editor/icons/link.svg +1 -0
- package/components/editor/icons/list.svg +1 -0
- package/components/editor/icons/media.svg +1 -0
- package/components/editor/icons/middle.svg +1 -0
- package/components/editor/icons/numbers.svg +10 -0
- package/components/editor/icons/paragraph.svg +1 -0
- package/components/editor/icons/paste.svg +10 -0
- package/components/editor/icons/quote.svg +1 -0
- package/components/editor/icons/redo.svg +1 -0
- package/components/editor/icons/right.svg +1 -0
- package/components/editor/icons/rowabove.svg +1 -0
- package/components/editor/icons/rowbelow.svg +1 -0
- package/components/editor/icons/rule.svg +1 -0
- package/components/editor/icons/sub.svg +1 -0
- package/components/editor/icons/super.svg +1 -0
- package/components/editor/icons/table.svg +1 -0
- package/components/editor/icons/text.svg +1 -0
- package/components/editor/icons/time.svg +1 -0
- package/components/editor/icons/undo.svg +1 -0
- package/components/editor/icons/unindent.svg +1 -0
- package/components/editor/icons/unlink.svg +1 -0
- package/components/page/Acknowledgements.svelte +31 -22
- package/components/page/Acknowledgements.svelte.d.ts +4 -4
- package/components/page/Authors.svelte +34 -14
- package/components/page/Authors.svelte.d.ts +6 -6
- package/components/page/BulkReferenceEditor.svelte +53 -22
- package/components/page/BulkReferenceEditor.svelte.d.ts +4 -4
- package/components/page/Chapter.svelte +196 -141
- package/components/page/Chapter.svelte.d.ts +3 -3
- package/components/page/ChapterContext.d.ts +4 -4
- package/components/page/ChapterNumber.svelte +9 -0
- package/components/page/ChapterNumber.svelte.d.ts +27 -0
- package/components/page/ChapterTitle.svelte +16 -0
- package/components/page/ChapterTitle.svelte.d.ts +18 -0
- package/components/page/Contexts.d.ts +31 -20
- package/components/page/Contexts.js +47 -17
- package/components/page/DefinitionView.svelte +115 -86
- package/components/page/DefinitionView.svelte.d.ts +3 -3
- package/components/page/Description.svelte +27 -18
- package/components/page/Description.svelte.d.ts +4 -4
- package/components/page/Edition.svelte +127 -75
- package/components/page/Edition.svelte.d.ts +4 -4
- package/components/page/Editions.svelte +158 -0
- package/components/page/Editions.svelte.d.ts +14 -0
- package/components/page/Glossary.svelte +57 -48
- package/components/page/Glossary.svelte.d.ts +4 -4
- package/components/page/Header.svelte +129 -44
- package/components/page/Header.svelte.d.ts +6 -6
- package/components/page/Index.svelte +114 -80
- package/components/page/Index.svelte.d.ts +4 -4
- package/components/page/Instructions.svelte +18 -16
- package/components/page/Instructions.svelte.d.ts +4 -4
- package/components/page/License.svelte +29 -21
- package/components/page/License.svelte.d.ts +4 -4
- package/components/page/Loading.svelte +102 -12
- package/components/page/Loading.svelte.d.ts +6 -2
- package/components/page/Media.svelte +77 -51
- package/components/page/Media.svelte.d.ts +4 -4
- package/components/page/MediaPreview.svelte +26 -8
- package/components/page/MediaPreview.svelte.d.ts +3 -3
- package/components/page/Muted.svelte +10 -0
- package/components/page/Muted.svelte.d.ts +27 -0
- package/components/page/Outline.svelte +279 -59
- package/components/page/Outline.svelte.d.ts +3 -3
- package/components/page/Page.svelte +40 -9
- package/components/page/Page.svelte.d.ts +3 -3
- package/components/page/PageHeader.svelte +14 -0
- package/components/page/PageHeader.svelte.d.ts +18 -0
- package/components/page/PageParagraph.svelte +18 -0
- package/components/page/PageParagraph.svelte.d.ts +27 -0
- package/components/page/PossibleChapter.svelte +7 -7
- package/components/page/PossibleChapter.svelte.d.ts +4 -4
- package/components/page/PossibleReference.svelte +6 -11
- package/components/page/PossibleReference.svelte.d.ts +6 -7
- package/components/page/Print.svelte +27 -3
- package/components/page/Print.svelte.d.ts +4 -4
- package/components/page/Reference.svelte +256 -113
- package/components/page/Reference.svelte.d.ts +5 -5
- package/components/page/References.svelte +39 -47
- package/components/page/References.svelte.d.ts +4 -4
- package/components/page/Rows.svelte +54 -0
- package/components/page/Rows.svelte.d.ts +27 -0
- package/components/page/Search.svelte +86 -63
- package/components/page/Search.svelte.d.ts +4 -4
- package/components/page/Status.svelte +43 -35
- package/components/page/Status.svelte.d.ts +4 -9
- package/components/page/SubdomainEditor.svelte +40 -27
- package/components/page/SubdomainEditor.svelte.d.ts +4 -4
- package/components/page/TableOfContents.svelte +225 -190
- package/components/page/TableOfContents.svelte.d.ts +4 -4
- package/components/page/TableOfContentsImage.svelte +8 -8
- package/components/page/TableOfContentsImage.svelte.d.ts +3 -3
- package/components/page/TableOfContentsRow.svelte +96 -33
- package/components/page/TableOfContentsRow.svelte.d.ts +4 -4
- package/components/page/ThemeEditor.svelte +174 -39
- package/components/page/ThemeEditor.svelte.d.ts +4 -4
- package/components/page/ThemeEditorPreview.svelte +35 -23
- package/components/page/ThemeEditorPreview.svelte.d.ts +5 -5
- package/components/page/ThemeSetEditor.svelte +15 -13
- package/components/page/ThemeSetEditor.svelte.d.ts +4 -4
- package/components/page/ThemeVariableEditor.svelte +24 -15
- package/components/page/ThemeVariableEditor.svelte.d.ts +3 -3
- package/components/page/Title.svelte +12 -0
- package/components/page/Title.svelte.d.ts +27 -0
- package/components/page/Unknown.svelte +25 -21
- package/components/page/Unknown.svelte.d.ts +4 -4
- package/components/page/margins.js +50 -33
- package/index.d.ts +14 -0
- package/index.js +14 -0
- package/models/CRUD.d.ts +17 -0
- package/models/CRUD.js +207 -0
- package/models/Firebase.d.ts +1 -0
- package/models/Firebase.js +21 -15
- package/models/book/Book.d.ts +26 -30
- package/models/book/Book.js +120 -113
- package/models/book/BookMedia.d.ts +3 -3
- package/models/book/BookMedia.js +22 -16
- package/models/book/BookSaveStatus.d.ts +7 -0
- package/models/book/BookSaveStatus.js +8 -0
- package/models/book/Chapter.d.ts +46 -39
- package/models/book/Chapter.js +180 -198
- package/models/book/ChapterID.js +7 -7
- package/models/book/Definition.d.ts +1 -1
- package/models/book/Edition.d.ts +62 -60
- package/models/book/Edition.js +385 -303
- package/models/book/Reference.d.ts +24 -0
- package/models/book/Reference.js +78 -0
- package/models/book/Schema.d.ts +169 -0
- package/models/book/Schema.js +114 -0
- package/models/book/Theme.d.ts +44 -37
- package/models/book/Theme.js +452 -52
- package/models/book/ThemeColors.d.ts +1 -1
- package/models/book/Words.d.ts +2 -0
- package/models/book/Words.js +110 -0
- package/models/chapter/AtomNode.d.ts +4 -4
- package/models/chapter/AtomNode.js +20 -13
- package/models/chapter/BlockNode.d.ts +9 -10
- package/models/chapter/BlockNode.js +32 -13
- package/models/chapter/BlocksNode.d.ts +10 -10
- package/models/chapter/BlocksNode.js +315 -120
- package/models/chapter/BlocksNode.test.js +494 -228
- package/models/chapter/Bookkeeping.d.ts +1 -1
- package/models/chapter/CalloutNode.d.ts +3 -3
- package/models/chapter/CalloutNode.js +34 -12
- package/models/chapter/Caret.d.ts +9 -7
- package/models/chapter/Caret.js +11 -6
- package/models/chapter/ChapterNode.d.ts +11 -11
- package/models/chapter/ChapterNode.js +70 -33
- package/models/chapter/CitationsNode.d.ts +3 -3
- package/models/chapter/CitationsNode.js +31 -12
- package/models/chapter/CodeNode.d.ts +11 -6
- package/models/chapter/CodeNode.js +143 -34
- package/models/chapter/CommentNode.d.ts +5 -5
- package/models/chapter/CommentNode.js +29 -13
- package/models/chapter/DefinitionNode.d.ts +2 -2
- package/models/chapter/DefinitionNode.js +15 -7
- package/models/chapter/Edit.d.ts +3 -3
- package/models/chapter/EmbedNode.d.ts +9 -5
- package/models/chapter/EmbedNode.js +108 -35
- package/models/chapter/ErrorNode.d.ts +2 -2
- package/models/chapter/ErrorNode.js +34 -12
- package/models/chapter/FootnoteNode.d.ts +5 -5
- package/models/chapter/FootnoteNode.js +34 -16
- package/models/chapter/FormatNode.d.ts +10 -10
- package/models/chapter/FormatNode.js +237 -106
- package/models/chapter/FormatNode.test.js +87 -45
- package/models/chapter/InlineCodeNode.d.ts +2 -2
- package/models/chapter/InlineCodeNode.js +22 -9
- package/models/chapter/LabelNode.d.ts +4 -4
- package/models/chapter/LabelNode.js +31 -13
- package/models/chapter/LinkNode.d.ts +2 -2
- package/models/chapter/LinkNode.js +21 -9
- package/models/chapter/ListNode.d.ts +8 -8
- package/models/chapter/ListNode.js +99 -38
- package/models/chapter/ListNode.test.js +29 -24
- package/models/chapter/MetadataNode.d.ts +3 -3
- package/models/chapter/MetadataNode.js +13 -5
- package/models/chapter/Node.d.ts +5 -3
- package/models/chapter/Node.js +76 -29
- package/models/chapter/Node.test.js +20 -18
- package/models/chapter/ParagraphNode.d.ts +6 -6
- package/models/chapter/ParagraphNode.js +84 -29
- package/models/chapter/ParagraphNode.test.js +22 -13
- package/models/chapter/Parser.d.ts +25 -25
- package/models/chapter/Parser.js +201 -189
- package/models/chapter/Parser.test.js +16 -16
- package/models/chapter/Position.d.ts +1 -1
- package/models/chapter/QuoteNode.d.ts +6 -6
- package/models/chapter/QuoteNode.js +61 -23
- package/models/chapter/RootNode.d.ts +4 -4
- package/models/chapter/RuleNode.d.ts +2 -2
- package/models/chapter/RuleNode.js +31 -11
- package/models/chapter/TableNode.d.ts +8 -6
- package/models/chapter/TableNode.js +89 -34
- package/models/chapter/TableNode.test.js +22 -24
- package/models/chapter/TextNode.d.ts +6 -6
- package/models/chapter/TextNode.js +72 -32
- package/models/chapter/TextNode.test.js +4 -4
- package/models/loadEdition.d.ts +1 -1
- package/models/loadEdition.js +10 -6
- package/package.json +104 -25
- package/util/getSubdomain.js +8 -6
- package/util/isMobile.js +1 -1
- package/util/mineReference.d.ts +3 -2
- package/util/mineReference.js +67 -29
- package/util/scrollToEyeLevel.js +6 -1
- package/components/chapter/renderPosition.d.ts +0 -3
- package/components/chapter/renderPosition.js +0 -4
- package/components/editor/ToolbarIcon.svelte +0 -22
- package/components/editor/ToolbarIcon.svelte.d.ts +0 -16
- package/components/page/Alert.svelte +0 -11
- package/components/page/Alert.svelte.d.ts +0 -23
- package/components/page/Revisions.svelte +0 -124
- package/components/page/Revisions.svelte.d.ts +0 -14
- package/models/BookLoader.d.ts +0 -2
- package/models/BookLoader.js +0 -67
- package/models/Firestore.d.ts +0 -22
- package/models/Firestore.js +0 -194
- package/models/chapter/ReferenceNode.d.ts +0 -29
- package/models/chapter/ReferenceNode.js +0 -48
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import Node from
|
|
1
|
+
import Node from './Node';
|
|
2
2
|
export default class MetadataNode extends Node {
|
|
3
3
|
#text;
|
|
4
4
|
#meta;
|
|
@@ -7,10 +7,18 @@ export default class MetadataNode extends Node {
|
|
|
7
7
|
this.#text = text;
|
|
8
8
|
this.#meta = meta;
|
|
9
9
|
}
|
|
10
|
-
getMeta() {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
getMeta() {
|
|
11
|
+
return this.#meta;
|
|
12
|
+
}
|
|
13
|
+
getText() {
|
|
14
|
+
return this.#text;
|
|
15
|
+
}
|
|
16
|
+
getChildren() {
|
|
17
|
+
return [this.#text];
|
|
18
|
+
}
|
|
19
|
+
getParentOf(node) {
|
|
20
|
+
return this.#text === node ? this : undefined;
|
|
21
|
+
}
|
|
14
22
|
withChildReplaced(node, replacement) {
|
|
15
23
|
if (this.#text === node && replacement !== undefined)
|
|
16
24
|
return this.withText(replacement);
|
package/models/chapter/Node.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type Caret from
|
|
2
|
-
import type { CaretRange } from
|
|
3
|
-
import type Edit from
|
|
1
|
+
import type Caret from './Caret';
|
|
2
|
+
import type { CaretRange } from './Caret';
|
|
3
|
+
import type Edit from './Edit';
|
|
4
4
|
export default abstract class Node {
|
|
5
5
|
readonly nodeID: number;
|
|
6
6
|
constructor();
|
|
@@ -16,6 +16,8 @@ export default abstract class Node {
|
|
|
16
16
|
traverse(fn: (node: Node, parents: Node[]) => void, parents?: Node[]): void;
|
|
17
17
|
traverseChildren(fn: (node: Node, parents: Node[]) => void, parents: Node[]): void;
|
|
18
18
|
getNodes(): Node[];
|
|
19
|
+
getNodeBefore<Kind extends Node>(node: Node, matcher: (node: Kind) => boolean): Kind | undefined;
|
|
20
|
+
getNodeAfter<Kind extends Node>(node: Node, matcher: (node: Kind) => boolean): Kind | undefined;
|
|
19
21
|
sortRange(range: CaretRange): CaretRange;
|
|
20
22
|
getNode(id: number): Node | undefined;
|
|
21
23
|
getIndexOf(node: Node): number | undefined;
|
package/models/chapter/Node.js
CHANGED
|
@@ -6,7 +6,9 @@ export default class Node {
|
|
|
6
6
|
constructor() {
|
|
7
7
|
this.nodeID = nodeID++;
|
|
8
8
|
}
|
|
9
|
-
getID() {
|
|
9
|
+
getID() {
|
|
10
|
+
return this.nodeID;
|
|
11
|
+
}
|
|
10
12
|
traverse(fn, parents) {
|
|
11
13
|
const path = parents === undefined ? [this] : [...parents, this];
|
|
12
14
|
this.traverseChildren(fn, path);
|
|
@@ -15,22 +17,50 @@ export default class Node {
|
|
|
15
17
|
// Traverses each of the children of this node.
|
|
16
18
|
traverseChildren(fn, parents) {
|
|
17
19
|
const children = this.getChildren();
|
|
18
|
-
children.forEach(child => child.traverse(fn, parents));
|
|
20
|
+
children.forEach((child) => child.traverse(fn, parents));
|
|
19
21
|
}
|
|
20
22
|
// Depth first sequence of all nodes in this tree.
|
|
21
23
|
getNodes() {
|
|
22
24
|
const nodes = [];
|
|
23
|
-
this.traverse(node => nodes.push(node));
|
|
25
|
+
this.traverse((node) => nodes.push(node));
|
|
24
26
|
return nodes;
|
|
25
27
|
}
|
|
28
|
+
getNodeBefore(node, matcher) {
|
|
29
|
+
const nodes = this.getNodes();
|
|
30
|
+
let previous = undefined;
|
|
31
|
+
for (const currentNode of nodes) {
|
|
32
|
+
if (currentNode === node)
|
|
33
|
+
return previous;
|
|
34
|
+
if (matcher(currentNode))
|
|
35
|
+
previous = currentNode;
|
|
36
|
+
}
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
getNodeAfter(node, matcher) {
|
|
40
|
+
const nodes = this.getNodes();
|
|
41
|
+
let found = false;
|
|
42
|
+
for (const currentNode of nodes) {
|
|
43
|
+
if (found && matcher(currentNode))
|
|
44
|
+
return currentNode;
|
|
45
|
+
if (currentNode === node)
|
|
46
|
+
found = true;
|
|
47
|
+
}
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
26
50
|
// Swap them order if this is two text nodes that are reversed.
|
|
27
51
|
sortRange(range) {
|
|
28
52
|
const start = range.start.node;
|
|
29
53
|
const end = range.end.node;
|
|
30
54
|
if (start === end)
|
|
31
55
|
return {
|
|
32
|
-
start: {
|
|
33
|
-
|
|
56
|
+
start: {
|
|
57
|
+
node: start,
|
|
58
|
+
index: Math.min(range.start.index, range.end.index),
|
|
59
|
+
},
|
|
60
|
+
end: {
|
|
61
|
+
node: end,
|
|
62
|
+
index: Math.max(range.start.index, range.end.index),
|
|
63
|
+
},
|
|
34
64
|
};
|
|
35
65
|
// Find the common ancestor of the two nodes.
|
|
36
66
|
const ancestor = start.getCommonAncestor(this, end);
|
|
@@ -44,24 +74,28 @@ export default class Node {
|
|
|
44
74
|
if (startIndex < 0 || endIndex < 0)
|
|
45
75
|
throw Error(`Couldn't find caret range node(s) in this tree.`);
|
|
46
76
|
// If we didn't find them, or the start is before the end, return the given range.
|
|
47
|
-
return startIndex === undefined ||
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
77
|
+
return startIndex === undefined ||
|
|
78
|
+
endIndex === undefined ||
|
|
79
|
+
startIndex < endIndex
|
|
80
|
+
? range
|
|
81
|
+
: // If they're the same node, order the index.
|
|
82
|
+
startIndex === endIndex
|
|
83
|
+
? {
|
|
84
|
+
start: {
|
|
85
|
+
node: range.start.node,
|
|
86
|
+
index: Math.min(range.start.index, range.end.index),
|
|
87
|
+
},
|
|
88
|
+
end: {
|
|
89
|
+
node: range.end.node,
|
|
90
|
+
index: Math.max(range.start.index, range.end.index),
|
|
91
|
+
},
|
|
59
92
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
93
|
+
: // Otherwise, swap the caret positions
|
|
94
|
+
{ start: range.end, end: range.start };
|
|
95
|
+
}
|
|
96
|
+
getNode(id) {
|
|
97
|
+
return this.getNodes().find((n) => n.getID() === id);
|
|
63
98
|
}
|
|
64
|
-
getNode(id) { return this.getNodes().find(n => n.getID() === id); }
|
|
65
99
|
// An index of the given node in the depth-first traversal of the nodes.
|
|
66
100
|
getIndexOf(node) {
|
|
67
101
|
const index = this.getNodes().indexOf(node);
|
|
@@ -70,22 +104,28 @@ export default class Node {
|
|
|
70
104
|
// True if this tree contains the given node.
|
|
71
105
|
contains(node) {
|
|
72
106
|
let found = false;
|
|
73
|
-
this.traverse(n => {
|
|
74
|
-
|
|
107
|
+
this.traverse((n) => {
|
|
108
|
+
if (n === node)
|
|
109
|
+
found = true;
|
|
110
|
+
});
|
|
75
111
|
return found;
|
|
76
112
|
}
|
|
77
113
|
// Returns a list of the given node's parents in this tree, from root to direct parent.
|
|
78
114
|
getParentsOf(node) {
|
|
79
115
|
let parents = undefined;
|
|
80
|
-
this.traverse((n, p) => {
|
|
81
|
-
|
|
116
|
+
this.traverse((n, p) => {
|
|
117
|
+
if (n === node)
|
|
118
|
+
parents = p;
|
|
119
|
+
});
|
|
82
120
|
if (parents === undefined)
|
|
83
121
|
return;
|
|
84
122
|
const withoutNode = [...parents];
|
|
85
123
|
withoutNode.pop();
|
|
86
124
|
return withoutNode;
|
|
87
125
|
}
|
|
88
|
-
getParent(root) {
|
|
126
|
+
getParent(root) {
|
|
127
|
+
return root.getParentOf(this);
|
|
128
|
+
}
|
|
89
129
|
hasAncestor(root, node) {
|
|
90
130
|
let parent = root.getParentOf(this);
|
|
91
131
|
while (parent) {
|
|
@@ -105,7 +145,8 @@ export default class Node {
|
|
|
105
145
|
return undefined;
|
|
106
146
|
}
|
|
107
147
|
isInside(root, type) {
|
|
108
|
-
return this.getClosestParentMatching(root, p => p instanceof type) !==
|
|
148
|
+
return (this.getClosestParentMatching(root, (p) => p instanceof type) !==
|
|
149
|
+
undefined);
|
|
109
150
|
}
|
|
110
151
|
getClosestParentMatching(root, match) {
|
|
111
152
|
let parent = root.getParentOf(this);
|
|
@@ -118,7 +159,9 @@ export default class Node {
|
|
|
118
159
|
}
|
|
119
160
|
getFarthestParentMatching(root, match) {
|
|
120
161
|
const matchingParents = this.getAncestors(root).filter(match);
|
|
121
|
-
return matchingParents.length > 0
|
|
162
|
+
return matchingParents.length > 0
|
|
163
|
+
? matchingParents[matchingParents.length - 1]
|
|
164
|
+
: undefined;
|
|
122
165
|
}
|
|
123
166
|
getAncestors(root) {
|
|
124
167
|
const ancestors = [];
|
|
@@ -161,7 +204,11 @@ export default class Node {
|
|
|
161
204
|
}
|
|
162
205
|
// By default, a node doesn't know how to insert anything into itself. Subclasses
|
|
163
206
|
// are responsible for overriding this if they want to support specific insertions.
|
|
164
|
-
withNodeInserted(caret, node) {
|
|
207
|
+
withNodeInserted(caret, node) {
|
|
208
|
+
caret;
|
|
209
|
+
node;
|
|
210
|
+
return undefined;
|
|
211
|
+
}
|
|
165
212
|
copyRange(range) {
|
|
166
213
|
const sortedRange = this.sortRange(range);
|
|
167
214
|
// Find the common ancestor of the range, then ask it to copy the portion of it selected and produce a node.
|
|
@@ -1,27 +1,29 @@
|
|
|
1
|
-
import { test, expect } from 'vitest'
|
|
1
|
+
import { test, expect } from 'vitest';
|
|
2
2
|
|
|
3
|
-
import TextNode from
|
|
4
|
-
import FormatNode from
|
|
3
|
+
import TextNode from './TextNode';
|
|
4
|
+
import FormatNode from './FormatNode';
|
|
5
5
|
|
|
6
|
-
const textOne = new TextNode(
|
|
7
|
-
const textTwo = new TextNode(
|
|
8
|
-
const textThree = new TextNode(
|
|
9
|
-
const textFour = new TextNode(
|
|
10
|
-
const textFive = new TextNode(
|
|
11
|
-
const bold = new FormatNode(
|
|
12
|
-
const format = new FormatNode(
|
|
6
|
+
const textOne = new TextNode('one');
|
|
7
|
+
const textTwo = new TextNode('two');
|
|
8
|
+
const textThree = new TextNode('three');
|
|
9
|
+
const textFour = new TextNode('four');
|
|
10
|
+
const textFive = new TextNode('five');
|
|
11
|
+
const bold = new FormatNode('*', [textThree, textFour]);
|
|
12
|
+
const format = new FormatNode('', [textOne, textTwo, bold, textFive]);
|
|
13
13
|
|
|
14
|
-
test(
|
|
15
|
-
expect(
|
|
16
|
-
.
|
|
14
|
+
test('Replace descendants', () => {
|
|
15
|
+
expect(
|
|
16
|
+
format.withNodeReplaced(textThree, new TextNode('hi'))?.toBookdown()
|
|
17
|
+
).toBe('onetwo*hifour*five');
|
|
17
18
|
|
|
18
|
-
expect(
|
|
19
|
-
.
|
|
20
|
-
|
|
19
|
+
expect(
|
|
20
|
+
format.withNodeReplaced(textFive, new TextNode('yo'))?.toBookdown()
|
|
21
|
+
).toBe('onetwo*threefour*yo');
|
|
22
|
+
});
|
|
21
23
|
|
|
22
|
-
test(
|
|
24
|
+
test('Parents', () => {
|
|
23
25
|
const parents = format.getParentsOf(textThree);
|
|
24
26
|
expect(parents?.length).toBe(2);
|
|
25
27
|
expect(parents ? parents[0] : undefined).toBe(format);
|
|
26
28
|
expect(parents ? parents[1] : undefined).toBe(bold);
|
|
27
|
-
})
|
|
29
|
+
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type Node from
|
|
2
|
-
import BlockNode from
|
|
3
|
-
import FormatNode from
|
|
4
|
-
import TextNode from
|
|
5
|
-
import type Caret from
|
|
6
|
-
import type { CaretRange } from
|
|
1
|
+
import type Node from './Node';
|
|
2
|
+
import BlockNode from './BlockNode';
|
|
3
|
+
import FormatNode from './FormatNode';
|
|
4
|
+
import TextNode from './TextNode';
|
|
5
|
+
import type Caret from './Caret';
|
|
6
|
+
import type { CaretRange } from './Caret';
|
|
7
7
|
export default class ParagraphNode extends BlockNode {
|
|
8
8
|
#private;
|
|
9
9
|
constructor(level?: number, format?: FormatNode);
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import BlockNode from
|
|
2
|
-
import FormatNode from
|
|
3
|
-
import TextNode from
|
|
4
|
-
import AtomNode from
|
|
5
|
-
import MetadataNode from
|
|
1
|
+
import BlockNode from './BlockNode';
|
|
2
|
+
import FormatNode from './FormatNode';
|
|
3
|
+
import TextNode from './TextNode';
|
|
4
|
+
import AtomNode from './AtomNode';
|
|
5
|
+
import MetadataNode from './MetadataNode';
|
|
6
6
|
export default class ParagraphNode extends BlockNode {
|
|
7
7
|
#format;
|
|
8
8
|
#level;
|
|
9
9
|
constructor(level = 0, format) {
|
|
10
10
|
super();
|
|
11
11
|
// Always ensure the paragraphs have an empty space at the begining and end for insertion.
|
|
12
|
-
let adjustedFormat = format ?? new FormatNode(
|
|
12
|
+
let adjustedFormat = format ?? new FormatNode('', [new TextNode()]);
|
|
13
13
|
if (adjustedFormat.getLength() > 0) {
|
|
14
14
|
const first = adjustedFormat.getSegments()[0];
|
|
15
15
|
const last = adjustedFormat.getSegments()[adjustedFormat.getLength() - 1];
|
|
@@ -23,39 +23,86 @@ export default class ParagraphNode extends BlockNode {
|
|
|
23
23
|
this.#format = adjustedFormat;
|
|
24
24
|
this.#level = level;
|
|
25
25
|
}
|
|
26
|
-
getType() {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
26
|
+
getType() {
|
|
27
|
+
return 'paragraph';
|
|
28
|
+
}
|
|
29
|
+
getLevel() {
|
|
30
|
+
return this.#level;
|
|
31
|
+
}
|
|
32
|
+
getFormat() {
|
|
33
|
+
return this.#format;
|
|
34
|
+
}
|
|
35
|
+
getFormats() {
|
|
36
|
+
return [this.#format];
|
|
37
|
+
}
|
|
38
|
+
getChildren() {
|
|
39
|
+
return [this.#format];
|
|
40
|
+
}
|
|
41
|
+
getFirstTextNode() {
|
|
42
|
+
return this.getFormat().getFirstTextNode();
|
|
43
|
+
}
|
|
44
|
+
getLastTextNode() {
|
|
45
|
+
return this.getFormat().getLastTextNode();
|
|
46
|
+
}
|
|
47
|
+
getTextNodes() {
|
|
48
|
+
return this.getNodes().filter((n) => n instanceof TextNode);
|
|
49
|
+
}
|
|
50
|
+
getFirstCaret() {
|
|
51
|
+
return this.#format.getFirstCaret();
|
|
52
|
+
}
|
|
53
|
+
getLastCaret() {
|
|
54
|
+
return this.#format.getLastCaret();
|
|
55
|
+
}
|
|
36
56
|
getSelection() {
|
|
37
57
|
const first = this.getFirstTextNode();
|
|
38
58
|
const last = this.getLastTextNode();
|
|
39
|
-
return {
|
|
59
|
+
return {
|
|
60
|
+
start: { node: first, index: 0 },
|
|
61
|
+
end: { node: last, index: last.getLength() },
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
getParentOf(node) {
|
|
65
|
+
return node === this.#format ? this : this.#format.getParentOf(node);
|
|
40
66
|
}
|
|
41
|
-
getParentOf(node) { return node === this.#format ? this : this.#format.getParentOf(node); }
|
|
42
67
|
toText() {
|
|
43
68
|
return this.#format.toText();
|
|
44
69
|
}
|
|
45
70
|
toBookdown() {
|
|
46
|
-
return (this.#level === 1
|
|
71
|
+
return ((this.#level === 1
|
|
72
|
+
? '# '
|
|
73
|
+
: this.#level === 2
|
|
74
|
+
? '## '
|
|
75
|
+
: this.#level === 3
|
|
76
|
+
? '### '
|
|
77
|
+
: '') + this.#format.toBookdown());
|
|
47
78
|
}
|
|
48
79
|
toHTML() {
|
|
49
|
-
const tag = this.#level === 1
|
|
80
|
+
const tag = this.#level === 1
|
|
81
|
+
? 'h1'
|
|
82
|
+
: this.#level === 2
|
|
83
|
+
? 'h2'
|
|
84
|
+
: this.#level === 3
|
|
85
|
+
? 'h2'
|
|
86
|
+
: 'p';
|
|
50
87
|
return `<${tag}>${this.#format.toHTML()}</${tag}>`;
|
|
51
88
|
}
|
|
52
|
-
withLevel(level) {
|
|
53
|
-
|
|
89
|
+
withLevel(level) {
|
|
90
|
+
return new ParagraphNode(level, this.#format);
|
|
91
|
+
}
|
|
92
|
+
withContent(content) {
|
|
93
|
+
return new ParagraphNode(this.#level, content);
|
|
94
|
+
}
|
|
54
95
|
withParagraphAppended(paragraph) {
|
|
55
|
-
return new ParagraphNode(this.#level, new FormatNode(
|
|
96
|
+
return new ParagraphNode(this.#level, new FormatNode('', [
|
|
97
|
+
...this.#format.getSegments(),
|
|
98
|
+
...paragraph.#format.getSegments(),
|
|
99
|
+
]));
|
|
56
100
|
}
|
|
57
101
|
withParagraphPrepended(paragraph) {
|
|
58
|
-
return new ParagraphNode(this.#level, new FormatNode(
|
|
102
|
+
return new ParagraphNode(this.#level, new FormatNode('', [
|
|
103
|
+
...paragraph.#format.getSegments(),
|
|
104
|
+
...this.#format.getSegments(),
|
|
105
|
+
]));
|
|
59
106
|
}
|
|
60
107
|
split(caret) {
|
|
61
108
|
// If we weren't given a text node, do nothing.
|
|
@@ -66,7 +113,8 @@ export default class ParagraphNode extends BlockNode {
|
|
|
66
113
|
return;
|
|
67
114
|
// If the caret is at the last position of the paragraph, insert a new empty paragraph.
|
|
68
115
|
const lastTextNode = this.getLastTextNode();
|
|
69
|
-
if (caret.node === lastTextNode &&
|
|
116
|
+
if (caret.node === lastTextNode &&
|
|
117
|
+
caret.index === lastTextNode.getLength())
|
|
70
118
|
return [this.copy(), new ParagraphNode()];
|
|
71
119
|
// If the caret is in the first position of the paragraph, insert a new empty paragraph before.
|
|
72
120
|
const firstTextNode = this.getFirstTextNode();
|
|
@@ -77,12 +125,19 @@ export default class ParagraphNode extends BlockNode {
|
|
|
77
125
|
const after = this.#format.withoutContentBefore(caret);
|
|
78
126
|
if (after === undefined || before === undefined)
|
|
79
127
|
return;
|
|
80
|
-
return [
|
|
128
|
+
return [
|
|
129
|
+
new ParagraphNode(this.#level, before),
|
|
130
|
+
new ParagraphNode(this.#level, after),
|
|
131
|
+
];
|
|
132
|
+
}
|
|
133
|
+
copy() {
|
|
134
|
+
return new ParagraphNode(this.#level, this.#format.copy());
|
|
81
135
|
}
|
|
82
|
-
copy() { return new ParagraphNode(this.#level, this.#format.copy()); }
|
|
83
136
|
withChildReplaced(node, replacement) {
|
|
84
|
-
return node === this.#format &&
|
|
85
|
-
|
|
137
|
+
return node === this.#format &&
|
|
138
|
+
(replacement instanceof FormatNode || replacement === undefined)
|
|
139
|
+
? new ParagraphNode(this.#level, replacement)
|
|
140
|
+
: undefined;
|
|
86
141
|
}
|
|
87
142
|
withContentInRange(range) {
|
|
88
143
|
const newFormat = this.#format.withContentInRange(range);
|
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
import { test, expect } from 'vitest';
|
|
2
|
-
import FootnoteNode from
|
|
3
|
-
import FormatNode from
|
|
4
|
-
import ParagraphNode from
|
|
5
|
-
import TextNode from
|
|
6
|
-
const firstText = new TextNode(
|
|
2
|
+
import FootnoteNode from './FootnoteNode';
|
|
3
|
+
import FormatNode from './FormatNode';
|
|
4
|
+
import ParagraphNode from './ParagraphNode';
|
|
5
|
+
import TextNode from './TextNode';
|
|
6
|
+
const firstText = new TextNode('This is the first paragraph. What do you think of it?');
|
|
7
7
|
const lastText = new TextNode("This is the second paragraph. I think it's redundant.");
|
|
8
8
|
const combinedText = new TextNode(firstText.getText() + lastText.getText());
|
|
9
|
-
const footnote = new FootnoteNode(new FormatNode(
|
|
10
|
-
const firstParagraph = new ParagraphNode(0, new FormatNode(
|
|
11
|
-
const lastParagraph = new ParagraphNode(0, new FormatNode(
|
|
12
|
-
const combinedParagraph = new ParagraphNode(0, new FormatNode(
|
|
13
|
-
test(
|
|
9
|
+
const footnote = new FootnoteNode(new FormatNode('', [new TextNode('Side note!')]));
|
|
10
|
+
const firstParagraph = new ParagraphNode(0, new FormatNode('', [firstText, footnote]));
|
|
11
|
+
const lastParagraph = new ParagraphNode(0, new FormatNode('', [lastText]));
|
|
12
|
+
const combinedParagraph = new ParagraphNode(0, new FormatNode('', [combinedText, footnote]));
|
|
13
|
+
test('Combine/split', () => {
|
|
14
14
|
expect(firstParagraph.withParagraphAppended(lastParagraph).toBookdown()).toBe(`${firstText.getText()}${footnote.toBookdown()}${lastText.getText()}`);
|
|
15
|
-
const split = combinedParagraph.split({
|
|
15
|
+
const split = combinedParagraph.split({
|
|
16
|
+
node: combinedText,
|
|
17
|
+
index: combinedText.getText().indexOf('.') + 1,
|
|
18
|
+
});
|
|
16
19
|
expect(split).not.toBeUndefined();
|
|
17
20
|
if (split) {
|
|
18
|
-
expect(split[0].toBookdown()).toBe(firstText
|
|
19
|
-
|
|
21
|
+
expect(split[0].toBookdown()).toBe(firstText
|
|
22
|
+
.getText()
|
|
23
|
+
.substring(0, firstText.getText().indexOf('.') + 1));
|
|
24
|
+
expect(split[1].toBookdown()).toBe(firstText
|
|
25
|
+
.getText()
|
|
26
|
+
.substring(firstText.getText().indexOf('.') + 1) +
|
|
27
|
+
lastText.getText() +
|
|
28
|
+
footnote.toBookdown());
|
|
20
29
|
}
|
|
21
30
|
});
|
|
@@ -1,27 +1,26 @@
|
|
|
1
|
-
import type Edition from
|
|
2
|
-
import CalloutNode from
|
|
3
|
-
import ChapterNode from
|
|
4
|
-
import CitationsNode from
|
|
5
|
-
import CodeNode from
|
|
6
|
-
import CommentNode from
|
|
7
|
-
import DefinitionNode from
|
|
8
|
-
import EmbedNode from
|
|
9
|
-
import ErrorNode from
|
|
10
|
-
import FootnoteNode from
|
|
11
|
-
import FormatNode from
|
|
12
|
-
import InlineCodeNode from
|
|
13
|
-
import LabelNode from
|
|
14
|
-
import LinkNode from
|
|
15
|
-
import ListNode from
|
|
16
|
-
import ParagraphNode from
|
|
17
|
-
import QuoteNode from
|
|
18
|
-
import
|
|
19
|
-
import
|
|
20
|
-
import
|
|
21
|
-
import
|
|
22
|
-
import type
|
|
23
|
-
import type
|
|
24
|
-
import type Bookkeeping from "./Bookkeeping";
|
|
1
|
+
import type Edition from '../book/Edition';
|
|
2
|
+
import CalloutNode from './CalloutNode';
|
|
3
|
+
import ChapterNode from './ChapterNode';
|
|
4
|
+
import CitationsNode from './CitationsNode';
|
|
5
|
+
import CodeNode from './CodeNode';
|
|
6
|
+
import CommentNode from './CommentNode';
|
|
7
|
+
import DefinitionNode from './DefinitionNode';
|
|
8
|
+
import EmbedNode from './EmbedNode';
|
|
9
|
+
import ErrorNode from './ErrorNode';
|
|
10
|
+
import FootnoteNode from './FootnoteNode';
|
|
11
|
+
import FormatNode from './FormatNode';
|
|
12
|
+
import InlineCodeNode from './InlineCodeNode';
|
|
13
|
+
import LabelNode from './LabelNode';
|
|
14
|
+
import LinkNode from './LinkNode';
|
|
15
|
+
import ListNode from './ListNode';
|
|
16
|
+
import ParagraphNode from './ParagraphNode';
|
|
17
|
+
import QuoteNode from './QuoteNode';
|
|
18
|
+
import RuleNode from './RuleNode';
|
|
19
|
+
import TableNode from './TableNode';
|
|
20
|
+
import TextNode from './TextNode';
|
|
21
|
+
import type Position from './Position';
|
|
22
|
+
import type BlockNode from './BlockNode';
|
|
23
|
+
import type Bookkeeping from './Bookkeeping';
|
|
25
24
|
export default class Parser {
|
|
26
25
|
book: Edition | undefined;
|
|
27
26
|
text: string;
|
|
@@ -33,9 +32,10 @@ export default class Parser {
|
|
|
33
32
|
static parseChapter(book: Edition | undefined, text: string): ChapterNode;
|
|
34
33
|
static parseFormat(book: Edition | undefined, text: string): FormatNode;
|
|
35
34
|
static parseEmbed(book: Edition | undefined, text: string): EmbedNode | ErrorNode;
|
|
36
|
-
static parseReference(citationID: string, ref: string | Array<string>, edition: Edition, short?: boolean): FormatNode | ErrorNode | ReferenceNode;
|
|
37
35
|
peek(): string | null;
|
|
38
36
|
more(): boolean;
|
|
37
|
+
nextIsEmptyParagraph(): boolean;
|
|
38
|
+
nextIsWhitespace(): boolean;
|
|
39
39
|
read(smarten?: boolean): string | null;
|
|
40
40
|
unread(): void;
|
|
41
41
|
rest(): string;
|