bookish-press 0.4.0 → 0.4.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 (394) hide show
  1. package/README.md +3 -1
  2. package/components/Auth.svelte +19 -14
  3. package/components/Auth.svelte.d.ts +4 -4
  4. package/components/Authentication.d.ts +2 -2
  5. package/components/BookPreview.svelte +77 -59
  6. package/components/BookPreview.svelte.d.ts +5 -5
  7. package/components/External.svelte +1 -1
  8. package/components/External.svelte.d.ts +3 -3
  9. package/components/Link.svelte +49 -3
  10. package/components/Link.svelte.d.ts +3 -4
  11. package/components/app/BookList.svelte +19 -0
  12. package/components/app/BookList.svelte.d.ts +18 -0
  13. package/components/app/Button.svelte +49 -0
  14. package/components/app/Button.svelte.d.ts +22 -0
  15. package/components/app/Feedback.svelte +45 -0
  16. package/components/app/Feedback.svelte.d.ts +18 -0
  17. package/components/app/Head.svelte +12 -0
  18. package/components/app/Head.svelte.d.ts +27 -0
  19. package/components/app/Large.svelte +8 -0
  20. package/components/app/Large.svelte.d.ts +27 -0
  21. package/components/app/Lead.svelte +12 -0
  22. package/components/app/Lead.svelte.d.ts +27 -0
  23. package/components/app/Link.svelte +24 -0
  24. package/components/app/Link.svelte.d.ts +20 -0
  25. package/components/app/Options.svelte +24 -0
  26. package/components/app/Options.svelte.d.ts +19 -0
  27. package/components/app/Paragraph.svelte +19 -0
  28. package/components/app/Paragraph.svelte.d.ts +18 -0
  29. package/components/app/Table.svelte +32 -0
  30. package/components/app/Table.svelte.d.ts +27 -0
  31. package/components/app/TextInput.svelte +37 -0
  32. package/components/app/TextInput.svelte.d.ts +22 -0
  33. package/components/app/Writing.svelte +13 -0
  34. package/components/app/Writing.svelte.d.ts +27 -0
  35. package/components/chapter/Atom.svelte +20 -6
  36. package/components/chapter/Atom.svelte.d.ts +3 -3
  37. package/components/chapter/Block.svelte +23 -20
  38. package/components/chapter/Block.svelte.d.ts +4 -4
  39. package/components/chapter/Callout.svelte +38 -7
  40. package/components/chapter/Callout.svelte.d.ts +4 -4
  41. package/components/chapter/CaptionedCode.svelte +66 -23
  42. package/components/chapter/CaptionedCode.svelte.d.ts +4 -4
  43. package/components/chapter/ChapterBody.svelte +61 -9
  44. package/components/chapter/ChapterBody.svelte.d.ts +4 -4
  45. package/components/chapter/Citations.svelte +86 -20
  46. package/components/chapter/Citations.svelte.d.ts +4 -4
  47. package/components/chapter/Code.svelte +152 -21
  48. package/components/chapter/Code.svelte.d.ts +3 -3
  49. package/components/chapter/Comment.svelte +38 -16
  50. package/components/chapter/Comment.svelte.d.ts +3 -3
  51. package/components/chapter/Definition.svelte +52 -18
  52. package/components/chapter/Definition.svelte.d.ts +5 -8
  53. package/components/chapter/Embed.svelte +154 -66
  54. package/components/chapter/Embed.svelte.d.ts +5 -4
  55. package/components/chapter/ErrorMessage.svelte +7 -2
  56. package/components/chapter/ErrorMessage.svelte.d.ts +4 -4
  57. package/components/chapter/ExtendedPrism.d.ts +2 -0
  58. package/components/chapter/ExtendedPrism.js +69 -0
  59. package/components/chapter/Figure.svelte +90 -0
  60. package/components/chapter/Figure.svelte.d.ts +24 -0
  61. package/components/chapter/Footnote.svelte +75 -12
  62. package/components/chapter/Footnote.svelte.d.ts +4 -4
  63. package/components/chapter/Format.svelte +60 -37
  64. package/components/chapter/Format.svelte.d.ts +4 -4
  65. package/components/chapter/InlineCode.svelte +15 -5
  66. package/components/chapter/InlineCode.svelte.d.ts +4 -4
  67. package/components/chapter/Label.svelte +37 -8
  68. package/components/chapter/Label.svelte.d.ts +4 -4
  69. package/components/chapter/Link.svelte +23 -18
  70. package/components/chapter/Link.svelte.d.ts +4 -4
  71. package/components/chapter/List.svelte +75 -8
  72. package/components/chapter/List.svelte.d.ts +4 -4
  73. package/components/chapter/Marginal.svelte +169 -27
  74. package/components/chapter/Marginal.svelte.d.ts +6 -3
  75. package/components/chapter/Paragraph.svelte +74 -6
  76. package/components/chapter/Paragraph.svelte.d.ts +4 -4
  77. package/components/chapter/Positioned.svelte +33 -0
  78. package/components/chapter/Positioned.svelte.d.ts +19 -0
  79. package/components/chapter/Problem.svelte +15 -0
  80. package/components/chapter/Problem.svelte.d.ts +27 -0
  81. package/components/chapter/Python.svelte +68 -21
  82. package/components/chapter/Python.svelte.d.ts +4 -4
  83. package/components/chapter/Quote.svelte +64 -11
  84. package/components/chapter/Quote.svelte.d.ts +4 -4
  85. package/components/chapter/Rule.svelte +12 -1
  86. package/components/chapter/Rule.svelte.d.ts +4 -4
  87. package/components/chapter/Table.svelte +36 -25
  88. package/components/chapter/Table.svelte.d.ts +4 -4
  89. package/components/chapter/Text.svelte +61 -36
  90. package/components/chapter/Text.svelte.d.ts +5 -4
  91. package/components/editor/BookishEditor.svelte +343 -237
  92. package/components/editor/BookishEditor.svelte.d.ts +5 -5
  93. package/components/editor/CalloutEditor.svelte +5 -5
  94. package/components/editor/CalloutEditor.svelte.d.ts +4 -4
  95. package/components/editor/CaptionedCodeEditor.svelte +16 -12
  96. package/components/editor/CaptionedCodeEditor.svelte.d.ts +4 -4
  97. package/components/editor/CaretContext.d.ts +48 -16
  98. package/components/editor/CaretState.d.ts +16 -44
  99. package/components/editor/CaretUtilities.d.ts +2 -2
  100. package/components/editor/CaretView.svelte +80 -0
  101. package/components/editor/CaretView.svelte.d.ts +24 -0
  102. package/components/editor/CitationsEditor.svelte +36 -25
  103. package/components/editor/CitationsEditor.svelte.d.ts +4 -4
  104. package/components/editor/Clipboard.d.ts +2 -2
  105. package/components/editor/Command.d.ts +13 -12
  106. package/components/editor/Commands.d.ts +1 -1
  107. package/components/editor/Commands.js +1114 -571
  108. package/components/editor/ConfirmButton.svelte +18 -12
  109. package/components/editor/ConfirmButton.svelte.d.ts +5 -4
  110. package/components/editor/DefinitionEditor.svelte +29 -21
  111. package/components/editor/DefinitionEditor.svelte.d.ts +4 -4
  112. package/components/editor/EmbedEditor.svelte +93 -43
  113. package/components/editor/EmbedEditor.svelte.d.ts +3 -3
  114. package/components/editor/Icon.svelte +17 -0
  115. package/components/editor/Icon.svelte.d.ts +16 -0
  116. package/components/editor/ImageChooser.svelte +53 -34
  117. package/components/editor/ImageChooser.svelte.d.ts +3 -3
  118. package/components/editor/InlineCodeEditor.svelte +7 -4
  119. package/components/editor/InlineCodeEditor.svelte.d.ts +4 -4
  120. package/components/editor/LabelEditor.svelte +20 -11
  121. package/components/editor/LabelEditor.svelte.d.ts +4 -4
  122. package/components/editor/LanguageEditor.svelte +10 -7
  123. package/components/editor/LanguageEditor.svelte.d.ts +3 -3
  124. package/components/editor/LinkEditor.svelte +64 -39
  125. package/components/editor/LinkEditor.svelte.d.ts +4 -4
  126. package/components/editor/Note.svelte +3 -3
  127. package/components/editor/Note.svelte.d.ts +6 -2
  128. package/components/editor/PositionEditor.svelte +9 -6
  129. package/components/editor/PositionEditor.svelte.d.ts +4 -4
  130. package/components/editor/QuoteEditor.svelte +7 -2
  131. package/components/editor/QuoteEditor.svelte.d.ts +4 -4
  132. package/components/editor/Switch.svelte +55 -28
  133. package/components/editor/Switch.svelte.d.ts +4 -4
  134. package/components/editor/TableEditor.svelte +10 -0
  135. package/components/editor/TableEditor.svelte.d.ts +17 -0
  136. package/components/editor/TextEditor.svelte +83 -45
  137. package/components/editor/TextEditor.svelte.d.ts +5 -4
  138. package/components/editor/Toggle.svelte +11 -8
  139. package/components/editor/Toggle.svelte.d.ts +4 -4
  140. package/components/editor/Toolbar.svelte +192 -144
  141. package/components/editor/Toolbar.svelte.d.ts +5 -8
  142. package/components/editor/ToolbarGroup.svelte +18 -23
  143. package/components/editor/ToolbarGroup.svelte.d.ts +3 -4
  144. package/components/editor/ToolbarSpacer.svelte +8 -1
  145. package/components/editor/ToolbarSpacer.svelte.d.ts +6 -2
  146. package/components/editor/URLEditor.svelte +6 -8
  147. package/components/editor/URLEditor.svelte.d.ts +3 -3
  148. package/components/editor/UndoState.d.ts +3 -3
  149. package/components/editor/icons/annotate.svg +1 -0
  150. package/components/editor/icons/block.svg +1 -0
  151. package/components/editor/icons/bold.svg +1 -0
  152. package/components/editor/icons/bullets.svg +1 -0
  153. package/components/editor/icons/callout.svg +1 -0
  154. package/components/editor/icons/citation.svg +8 -0
  155. package/components/editor/icons/clear.svg +1 -0
  156. package/components/editor/icons/clipboard.svg +1 -0
  157. package/components/editor/icons/code.svg +1 -0
  158. package/components/editor/icons/columnafter.svg +1 -0
  159. package/components/editor/icons/columnbefore.svg +1 -0
  160. package/components/editor/icons/comment.svg +1 -0
  161. package/components/editor/icons/copy.svg +1 -0
  162. package/components/editor/icons/cut.svg +1 -0
  163. package/components/editor/icons/define.svg +7 -0
  164. package/components/editor/icons/deletecolumn.svg +1 -0
  165. package/components/editor/icons/deleterow.svg +1 -0
  166. package/components/editor/icons/footnote.svg +8 -0
  167. package/components/editor/icons/header1.svg +7 -0
  168. package/components/editor/icons/header2.svg +7 -0
  169. package/components/editor/icons/header3.svg +7 -0
  170. package/components/editor/icons/home.svg +1 -0
  171. package/components/editor/icons/indent.svg +1 -0
  172. package/components/editor/icons/italic.svg +1 -0
  173. package/components/editor/icons/label.svg +1 -0
  174. package/components/editor/icons/left.svg +1 -0
  175. package/components/editor/icons/level.svg +1 -0
  176. package/components/editor/icons/link.svg +1 -0
  177. package/components/editor/icons/list.svg +1 -0
  178. package/components/editor/icons/media.svg +1 -0
  179. package/components/editor/icons/middle.svg +1 -0
  180. package/components/editor/icons/numbers.svg +10 -0
  181. package/components/editor/icons/paragraph.svg +1 -0
  182. package/components/editor/icons/paste.svg +10 -0
  183. package/components/editor/icons/quote.svg +1 -0
  184. package/components/editor/icons/redo.svg +1 -0
  185. package/components/editor/icons/right.svg +1 -0
  186. package/components/editor/icons/rowabove.svg +1 -0
  187. package/components/editor/icons/rowbelow.svg +1 -0
  188. package/components/editor/icons/rule.svg +1 -0
  189. package/components/editor/icons/sub.svg +1 -0
  190. package/components/editor/icons/super.svg +1 -0
  191. package/components/editor/icons/table.svg +1 -0
  192. package/components/editor/icons/text.svg +1 -0
  193. package/components/editor/icons/time.svg +1 -0
  194. package/components/editor/icons/undo.svg +1 -0
  195. package/components/editor/icons/unindent.svg +1 -0
  196. package/components/editor/icons/unlink.svg +1 -0
  197. package/components/page/Acknowledgements.svelte +31 -22
  198. package/components/page/Acknowledgements.svelte.d.ts +4 -4
  199. package/components/page/Authors.svelte +34 -14
  200. package/components/page/Authors.svelte.d.ts +6 -6
  201. package/components/page/BulkReferenceEditor.svelte +53 -22
  202. package/components/page/BulkReferenceEditor.svelte.d.ts +4 -4
  203. package/components/page/Chapter.svelte +196 -141
  204. package/components/page/Chapter.svelte.d.ts +3 -3
  205. package/components/page/ChapterContext.d.ts +4 -4
  206. package/components/page/ChapterNumber.svelte +9 -0
  207. package/components/page/ChapterNumber.svelte.d.ts +27 -0
  208. package/components/page/ChapterTitle.svelte +16 -0
  209. package/components/page/ChapterTitle.svelte.d.ts +18 -0
  210. package/components/page/Contexts.d.ts +31 -20
  211. package/components/page/Contexts.js +47 -17
  212. package/components/page/DefinitionView.svelte +115 -86
  213. package/components/page/DefinitionView.svelte.d.ts +3 -3
  214. package/components/page/Description.svelte +27 -18
  215. package/components/page/Description.svelte.d.ts +4 -4
  216. package/components/page/Edition.svelte +127 -74
  217. package/components/page/Edition.svelte.d.ts +4 -4
  218. package/components/page/Editions.svelte +144 -0
  219. package/components/page/Editions.svelte.d.ts +14 -0
  220. package/components/page/Glossary.svelte +57 -48
  221. package/components/page/Glossary.svelte.d.ts +4 -4
  222. package/components/page/Header.svelte +129 -44
  223. package/components/page/Header.svelte.d.ts +6 -6
  224. package/components/page/Index.svelte +114 -80
  225. package/components/page/Index.svelte.d.ts +4 -4
  226. package/components/page/Instructions.svelte +18 -16
  227. package/components/page/Instructions.svelte.d.ts +4 -4
  228. package/components/page/License.svelte +29 -21
  229. package/components/page/License.svelte.d.ts +4 -4
  230. package/components/page/Loading.svelte +102 -12
  231. package/components/page/Loading.svelte.d.ts +6 -2
  232. package/components/page/Media.svelte +77 -51
  233. package/components/page/Media.svelte.d.ts +4 -4
  234. package/components/page/MediaPreview.svelte +26 -8
  235. package/components/page/MediaPreview.svelte.d.ts +3 -3
  236. package/components/page/Muted.svelte +10 -0
  237. package/components/page/Muted.svelte.d.ts +27 -0
  238. package/components/page/Outline.svelte +279 -59
  239. package/components/page/Outline.svelte.d.ts +3 -3
  240. package/components/page/Page.svelte +40 -9
  241. package/components/page/Page.svelte.d.ts +3 -3
  242. package/components/page/PageHeader.svelte +14 -0
  243. package/components/page/PageHeader.svelte.d.ts +18 -0
  244. package/components/page/PageParagraph.svelte +18 -0
  245. package/components/page/PageParagraph.svelte.d.ts +27 -0
  246. package/components/page/PossibleChapter.svelte +7 -7
  247. package/components/page/PossibleChapter.svelte.d.ts +4 -4
  248. package/components/page/PossibleReference.svelte +6 -11
  249. package/components/page/PossibleReference.svelte.d.ts +6 -7
  250. package/components/page/Print.svelte +27 -3
  251. package/components/page/Print.svelte.d.ts +4 -4
  252. package/components/page/Reference.svelte +256 -113
  253. package/components/page/Reference.svelte.d.ts +5 -5
  254. package/components/page/References.svelte +39 -47
  255. package/components/page/References.svelte.d.ts +4 -4
  256. package/components/page/Rows.svelte +54 -0
  257. package/components/page/Rows.svelte.d.ts +27 -0
  258. package/components/page/Search.svelte +86 -63
  259. package/components/page/Search.svelte.d.ts +4 -4
  260. package/components/page/Status.svelte +43 -35
  261. package/components/page/Status.svelte.d.ts +4 -9
  262. package/components/page/SubdomainEditor.svelte +40 -27
  263. package/components/page/SubdomainEditor.svelte.d.ts +4 -4
  264. package/components/page/TableOfContents.svelte +225 -190
  265. package/components/page/TableOfContents.svelte.d.ts +4 -4
  266. package/components/page/TableOfContentsImage.svelte +8 -8
  267. package/components/page/TableOfContentsImage.svelte.d.ts +3 -3
  268. package/components/page/TableOfContentsRow.svelte +96 -33
  269. package/components/page/TableOfContentsRow.svelte.d.ts +4 -4
  270. package/components/page/ThemeEditor.svelte +174 -39
  271. package/components/page/ThemeEditor.svelte.d.ts +4 -4
  272. package/components/page/ThemeEditorPreview.svelte +35 -23
  273. package/components/page/ThemeEditorPreview.svelte.d.ts +5 -5
  274. package/components/page/ThemeSetEditor.svelte +15 -13
  275. package/components/page/ThemeSetEditor.svelte.d.ts +4 -4
  276. package/components/page/ThemeVariableEditor.svelte +24 -15
  277. package/components/page/ThemeVariableEditor.svelte.d.ts +3 -3
  278. package/components/page/Title.svelte +12 -0
  279. package/components/page/Title.svelte.d.ts +27 -0
  280. package/components/page/Unknown.svelte +25 -21
  281. package/components/page/Unknown.svelte.d.ts +4 -4
  282. package/components/page/margins.js +50 -33
  283. package/index.d.ts +14 -0
  284. package/index.js +14 -0
  285. package/models/CRUD.d.ts +17 -0
  286. package/models/CRUD.js +194 -0
  287. package/models/Firebase.js +17 -15
  288. package/models/book/Book.d.ts +24 -28
  289. package/models/book/Book.js +120 -113
  290. package/models/book/BookMedia.d.ts +3 -3
  291. package/models/book/BookMedia.js +22 -16
  292. package/models/book/BookSaveStatus.d.ts +7 -0
  293. package/models/book/BookSaveStatus.js +8 -0
  294. package/models/book/Chapter.d.ts +46 -39
  295. package/models/book/Chapter.js +180 -198
  296. package/models/book/ChapterID.js +7 -7
  297. package/models/book/Definition.d.ts +1 -1
  298. package/models/book/Edition.d.ts +62 -60
  299. package/models/book/Edition.js +385 -303
  300. package/models/book/Reference.d.ts +24 -0
  301. package/models/book/Reference.js +78 -0
  302. package/models/book/Schema.d.ts +169 -0
  303. package/models/book/Schema.js +114 -0
  304. package/models/book/Theme.d.ts +44 -37
  305. package/models/book/Theme.js +452 -52
  306. package/models/book/ThemeColors.d.ts +1 -1
  307. package/models/book/Words.d.ts +2 -0
  308. package/models/book/Words.js +110 -0
  309. package/models/chapter/AtomNode.d.ts +4 -4
  310. package/models/chapter/AtomNode.js +20 -13
  311. package/models/chapter/BlockNode.d.ts +9 -10
  312. package/models/chapter/BlockNode.js +32 -13
  313. package/models/chapter/BlocksNode.d.ts +10 -10
  314. package/models/chapter/BlocksNode.js +315 -120
  315. package/models/chapter/BlocksNode.test.js +494 -228
  316. package/models/chapter/Bookkeeping.d.ts +1 -1
  317. package/models/chapter/CalloutNode.d.ts +3 -3
  318. package/models/chapter/CalloutNode.js +34 -12
  319. package/models/chapter/Caret.d.ts +9 -7
  320. package/models/chapter/Caret.js +11 -6
  321. package/models/chapter/ChapterNode.d.ts +11 -11
  322. package/models/chapter/ChapterNode.js +70 -33
  323. package/models/chapter/CitationsNode.d.ts +3 -3
  324. package/models/chapter/CitationsNode.js +31 -12
  325. package/models/chapter/CodeNode.d.ts +11 -6
  326. package/models/chapter/CodeNode.js +143 -34
  327. package/models/chapter/CommentNode.d.ts +5 -5
  328. package/models/chapter/CommentNode.js +29 -13
  329. package/models/chapter/DefinitionNode.d.ts +2 -2
  330. package/models/chapter/DefinitionNode.js +15 -7
  331. package/models/chapter/Edit.d.ts +3 -3
  332. package/models/chapter/EmbedNode.d.ts +9 -5
  333. package/models/chapter/EmbedNode.js +108 -35
  334. package/models/chapter/ErrorNode.d.ts +2 -2
  335. package/models/chapter/ErrorNode.js +34 -12
  336. package/models/chapter/FootnoteNode.d.ts +5 -5
  337. package/models/chapter/FootnoteNode.js +34 -16
  338. package/models/chapter/FormatNode.d.ts +10 -10
  339. package/models/chapter/FormatNode.js +237 -106
  340. package/models/chapter/FormatNode.test.js +87 -45
  341. package/models/chapter/InlineCodeNode.d.ts +2 -2
  342. package/models/chapter/InlineCodeNode.js +22 -9
  343. package/models/chapter/LabelNode.d.ts +4 -4
  344. package/models/chapter/LabelNode.js +31 -13
  345. package/models/chapter/LinkNode.d.ts +2 -2
  346. package/models/chapter/LinkNode.js +21 -9
  347. package/models/chapter/ListNode.d.ts +8 -8
  348. package/models/chapter/ListNode.js +99 -38
  349. package/models/chapter/ListNode.test.js +29 -24
  350. package/models/chapter/MetadataNode.d.ts +3 -3
  351. package/models/chapter/MetadataNode.js +13 -5
  352. package/models/chapter/Node.d.ts +5 -3
  353. package/models/chapter/Node.js +76 -29
  354. package/models/chapter/Node.test.js +20 -18
  355. package/models/chapter/ParagraphNode.d.ts +6 -6
  356. package/models/chapter/ParagraphNode.js +84 -29
  357. package/models/chapter/ParagraphNode.test.js +22 -13
  358. package/models/chapter/Parser.d.ts +25 -25
  359. package/models/chapter/Parser.js +201 -189
  360. package/models/chapter/Parser.test.js +16 -16
  361. package/models/chapter/Position.d.ts +1 -1
  362. package/models/chapter/QuoteNode.d.ts +6 -6
  363. package/models/chapter/QuoteNode.js +61 -23
  364. package/models/chapter/RootNode.d.ts +4 -4
  365. package/models/chapter/RuleNode.d.ts +2 -2
  366. package/models/chapter/RuleNode.js +31 -11
  367. package/models/chapter/TableNode.d.ts +8 -6
  368. package/models/chapter/TableNode.js +89 -34
  369. package/models/chapter/TableNode.test.js +22 -24
  370. package/models/chapter/TextNode.d.ts +6 -6
  371. package/models/chapter/TextNode.js +72 -32
  372. package/models/chapter/TextNode.test.js +4 -4
  373. package/models/loadEdition.d.ts +1 -1
  374. package/models/loadEdition.js +10 -6
  375. package/package.json +104 -25
  376. package/util/getSubdomain.js +8 -6
  377. package/util/isMobile.js +1 -1
  378. package/util/mineReference.d.ts +3 -2
  379. package/util/mineReference.js +67 -29
  380. package/util/scrollToEyeLevel.js +6 -1
  381. package/components/chapter/renderPosition.d.ts +0 -3
  382. package/components/chapter/renderPosition.js +0 -4
  383. package/components/editor/ToolbarIcon.svelte +0 -22
  384. package/components/editor/ToolbarIcon.svelte.d.ts +0 -16
  385. package/components/page/Alert.svelte +0 -11
  386. package/components/page/Alert.svelte.d.ts +0 -23
  387. package/components/page/Revisions.svelte +0 -124
  388. package/components/page/Revisions.svelte.d.ts +0 -14
  389. package/models/BookLoader.d.ts +0 -2
  390. package/models/BookLoader.js +0 -67
  391. package/models/Firestore.d.ts +0 -22
  392. package/models/Firestore.js +0 -194
  393. package/models/chapter/ReferenceNode.d.ts +0 -29
  394. package/models/chapter/ReferenceNode.js +0 -48
@@ -1,4 +1,4 @@
1
- import Node from "./Node";
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() { return this.#meta; }
11
- getText() { return this.#text; }
12
- getChildren() { return [this.#text]; }
13
- getParentOf(node) { return this.#text === node ? this : undefined; }
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);
@@ -1,6 +1,6 @@
1
- import type Caret from "./Caret";
2
- import type { CaretRange } from "./Caret";
3
- import type Edit from "./Edit";
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;
@@ -6,7 +6,9 @@ export default class Node {
6
6
  constructor() {
7
7
  this.nodeID = nodeID++;
8
8
  }
9
- getID() { return this.nodeID; }
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: { node: start, index: Math.min(range.start.index, range.end.index) },
33
- end: { node: end, index: Math.max(range.start.index, range.end.index) }
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 || endIndex === undefined || startIndex < endIndex ?
48
- range :
49
- // If they're the same node, order the index.
50
- startIndex === endIndex ?
51
- {
52
- start: {
53
- node: range.start.node,
54
- index: Math.min(range.start.index, range.end.index)
55
- },
56
- end: {
57
- node: range.end.node,
58
- index: Math.max(range.start.index, range.end.index)
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
- // Otherwise, swap the caret positions
62
- { start: range.end, end: range.start };
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 => { if (n === node)
74
- found = true; });
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) => { if (n === node)
81
- parents = p; });
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) { return root.getParentOf(this); }
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) !== undefined;
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 ? matchingParents[matchingParents.length - 1] : undefined;
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) { caret; node; return undefined; }
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 "./TextNode";
4
- import FormatNode from "./FormatNode";
3
+ import TextNode from './TextNode';
4
+ import FormatNode from './FormatNode';
5
5
 
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 ]);
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("Replace descendants", () => {
15
- expect(format.withNodeReplaced(textThree, new TextNode("hi"))?.toBookdown())
16
- .toBe("onetwo*hifour*five")
14
+ test('Replace descendants', () => {
15
+ expect(
16
+ format.withNodeReplaced(textThree, new TextNode('hi'))?.toBookdown()
17
+ ).toBe('onetwo*hifour*five');
17
18
 
18
- expect(format.withNodeReplaced(textFive, new TextNode("yo"))?.toBookdown())
19
- .toBe("onetwo*threefour*yo")
20
- })
19
+ expect(
20
+ format.withNodeReplaced(textFive, new TextNode('yo'))?.toBookdown()
21
+ ).toBe('onetwo*threefour*yo');
22
+ });
21
23
 
22
- test("Parents", () => {
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 "./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";
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 "./BlockNode";
2
- import FormatNode from "./FormatNode";
3
- import TextNode from "./TextNode";
4
- import AtomNode from "./AtomNode";
5
- import MetadataNode from "./MetadataNode";
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("", [new TextNode()]);
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() { return "paragraph"; }
27
- getLevel() { return this.#level; }
28
- getFormat() { return this.#format; }
29
- getFormats() { return [this.#format]; }
30
- getChildren() { return [this.#format]; }
31
- getFirstTextNode() { return this.getFormat().getFirstTextNode(); }
32
- getLastTextNode() { return this.getFormat().getLastTextNode(); }
33
- getTextNodes() { return this.getNodes().filter(n => n instanceof TextNode); }
34
- getFirstCaret() { return this.#format.getFirstCaret(); }
35
- getLastCaret() { return this.#format.getLastCaret(); }
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 { start: { node: first, index: 0 }, end: { node: last, index: last.getLength() } };
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 ? "# " : this.#level === 2 ? "## " : this.#level === 3 ? "### " : "") + this.#format.toBookdown();
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 ? "h1" : this.#level === 2 ? "h2" : this.#level === 3 ? "h2" : "p";
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) { return new ParagraphNode(level, this.#format); }
53
- withContent(content) { return new ParagraphNode(this.#level, content); }
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("", [...this.#format.getSegments(), ...paragraph.#format.getSegments()]));
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("", [...paragraph.#format.getSegments(), ...this.#format.getSegments(),]));
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 && caret.index === lastTextNode.getLength())
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 [new ParagraphNode(this.#level, before), new ParagraphNode(this.#level, after)];
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 && (replacement instanceof FormatNode || replacement === undefined) ?
85
- new ParagraphNode(this.#level, replacement) : undefined;
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 "./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?");
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("", [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", () => {
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({ node: combinedText, index: combinedText.getText().indexOf(".") + 1 });
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.getText().substring(0, firstText.getText().indexOf(".") + 1));
19
- expect(split[1].toBookdown()).toBe(firstText.getText().substring(firstText.getText().indexOf(".") + 1) + lastText.getText() + footnote.toBookdown());
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 "../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 ReferenceNode from "./ReferenceNode";
19
- import RuleNode from "./RuleNode";
20
- import TableNode from "./TableNode";
21
- import TextNode from "./TextNode";
22
- import type Position from "./Position";
23
- import type BlockNode from "./BlockNode";
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;