flea-qml 0.0.0-stage → 0.1.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.
Files changed (625) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +478 -2
  3. package/THIRD-PARTY-NOTICES.md +29 -0
  4. package/demos/App.java +5 -0
  5. package/demos/Dockerfile +4 -0
  6. package/demos/Main.kt +3 -0
  7. package/demos/Program.cs +1 -0
  8. package/demos/README.md +12 -0
  9. package/demos/app.dart +3 -0
  10. package/demos/app.deb +0 -0
  11. package/demos/app.js +1 -0
  12. package/demos/backup.tar +0 -0
  13. package/demos/budget.xlsx +0 -0
  14. package/demos/build.sh +2 -0
  15. package/demos/bundle.zip +0 -0
  16. package/demos/clip.mp4 +0 -0
  17. package/demos/data.sqlite +0 -0
  18. package/demos/disk.iso +0 -0
  19. package/demos/engine.cpp +5 -0
  20. package/demos/firmware.bin +0 -0
  21. package/demos/flake.nix +4 -0
  22. package/demos/folder/inside.txt +1 -0
  23. package/demos/font.ttf +0 -0
  24. package/demos/index.html +5 -0
  25. package/demos/index.php +2 -0
  26. package/demos/init.lua +1 -0
  27. package/demos/letter.docx +0 -0
  28. package/demos/lib.rs +3 -0
  29. package/demos/main.c +6 -0
  30. package/demos/main.h +3 -0
  31. package/demos/math-and-diagrams.md +200 -0
  32. package/demos/notes.tar.gz +0 -0
  33. package/demos/notes.txt +3 -0
  34. package/demos/photo.png +0 -0
  35. package/demos/program +2 -0
  36. package/demos/report.pdf +32 -0
  37. package/demos/script.py +1 -0
  38. package/demos/server.go +7 -0
  39. package/demos/settings.json +4 -0
  40. package/demos/slides.pptx +0 -0
  41. package/demos/song.mp3 +0 -0
  42. package/demos/style.css +4 -0
  43. package/demos/tool.rb +1 -0
  44. package/demos/types.ts +2 -0
  45. package/docs/pele.md +23 -0
  46. package/docs/protocol.md +3420 -0
  47. package/docs/temml.md +63 -0
  48. package/index.js +107 -0
  49. package/package.json +34 -4
  50. package/src/archive.js +402 -0
  51. package/src/archiveops.js +697 -0
  52. package/src/backend.js +369 -0
  53. package/src/bulkrename.js +95 -0
  54. package/src/clip-host.js +76 -0
  55. package/src/clip.js +462 -0
  56. package/src/code.js +168 -0
  57. package/src/compare.js +74 -0
  58. package/src/create.js +128 -0
  59. package/src/dirsize.js +147 -0
  60. package/src/figure-svg.js +530 -0
  61. package/src/figure-thread.js +23 -0
  62. package/src/figure.js +132 -0
  63. package/src/find.js +55 -0
  64. package/src/flea.js +39 -0
  65. package/src/fsinfo.js +39 -0
  66. package/src/highlight.js +141 -0
  67. package/src/html.js +52 -0
  68. package/src/kinds.js +89 -0
  69. package/src/listing.js +130 -0
  70. package/src/markdown-html.js +317 -0
  71. package/src/mathml.js +186 -0
  72. package/src/menu.js +180 -0
  73. package/src/meta.js +129 -0
  74. package/src/office.js +810 -0
  75. package/src/order.js +100 -0
  76. package/src/peek.js +49 -0
  77. package/src/pele-wrapper.js +695 -0
  78. package/src/permissions.js +180 -0
  79. package/src/places.js +313 -0
  80. package/src/preview-language.js +10 -0
  81. package/src/transfer.js +669 -0
  82. package/src/trash-record.js +41 -0
  83. package/src/trash.js +210 -0
  84. package/src/trashbrowse.js +326 -0
  85. package/src/uistate.js +393 -0
  86. package/src/uistore.js +168 -0
  87. package/src/vendor/LICENSES/Apache-2.0.txt +202 -0
  88. package/src/vendor/LICENSES/MIT-katex-2015.txt +27 -0
  89. package/src/vendor/LICENSES/MIT-katex.txt +21 -0
  90. package/src/vendor/LICENSES/MIT-mermaid.txt +21 -0
  91. package/src/vendor/LICENSES/MIT-pele.txt +40 -0
  92. package/src/vendor/LICENSES/MIT-perseus.txt +18 -0
  93. package/src/vendor/LICENSES/MIT-temml.txt +21 -0
  94. package/src/vendor/pele.js +145 -0
  95. package/src/vendor/temml.mjs +14708 -0
  96. package/src/watch.js +98 -0
  97. package/src/wayland/client.js +109 -0
  98. package/src/wayland/protocol.js +55 -0
  99. package/src/wayland/protocols/ext-data-control-v1.xml +276 -0
  100. package/src/wayland/protocols/wayland.xml +3248 -0
  101. package/src/wayland/protocols/wlr-data-control-unstable-v1.xml +278 -0
  102. package/src/wayland/resource-io.js +6 -0
  103. package/src/wayland/socket-discovery.js +26 -0
  104. package/src/wayland/transport-posix.js +120 -0
  105. package/src/wayland/transport-win32.js +11 -0
  106. package/src/wayland/transport.js +3 -0
  107. package/src/wayland/win32-resources.js +80 -0
  108. package/src/wayland/win32-wire.js +62 -0
  109. package/test/archive.test.js +80 -0
  110. package/test/bench-markdown-scroll.mjs +190 -0
  111. package/test/clip-host.test.js +113 -0
  112. package/test/code-preview.test.js +35 -0
  113. package/test/compare-ui-paths.test.js +24 -0
  114. package/test/compare.test.js +54 -0
  115. package/test/delete-trash.test.js +67 -0
  116. package/test/dirsize.test.js +138 -0
  117. package/test/file-ops.test.js +241 -0
  118. package/test/find-contents.test.js +161 -0
  119. package/test/find-input.test.js +66 -0
  120. package/test/fixtures/pele-parity.json +1006 -0
  121. package/test/highlight-launcher.test.js +35 -0
  122. package/test/html-preview.test.js +22 -0
  123. package/test/input.test.js +15 -0
  124. package/test/keymap.test.js +26 -0
  125. package/test/language-icons.test.js +36 -0
  126. package/test/launcher.test.js +51 -0
  127. package/test/manual-code-scroll.mjs +28 -0
  128. package/test/manual-column-scroll.mjs +24 -0
  129. package/test/manual-compare-ui.mjs +20 -0
  130. package/test/manual-find-status.mjs +37 -0
  131. package/test/manual-html-security.mjs +23 -0
  132. package/test/manual-html-ui.mjs +30 -0
  133. package/test/manual-syntax-preview.mjs +26 -0
  134. package/test/manual-trash-ui.mjs +86 -0
  135. package/test/markdown-diagrams.test.js +93 -0
  136. package/test/markdown-html.test.js +105 -0
  137. package/test/mathml.test.js +92 -0
  138. package/test/menu-transfer.test.js +57 -0
  139. package/test/office-preview.test.js +154 -0
  140. package/test/pele-parity.test.js +28 -0
  141. package/test/places.test.js +134 -0
  142. package/test/preview-keys.test.js +60 -0
  143. package/test/preview-language.test.js +22 -0
  144. package/test/status-filename.test.js +20 -0
  145. package/test/transfer-replace-merge.test.js +187 -0
  146. package/test/trash-address.test.js +23 -0
  147. package/test/trash-view.test.js +37 -0
  148. package/test/trashbrowse.test.js +135 -0
  149. package/ui/AboutFacts.qml +78 -0
  150. package/ui/ArchiveCards.qml +68 -0
  151. package/ui/ArchiveCompressDialog.qml +378 -0
  152. package/ui/ArchivePasswordDialog.qml +257 -0
  153. package/ui/Backend.qml +771 -0
  154. package/ui/BulkOldNames.qml +47 -0
  155. package/ui/BulkRenameDialog.qml +380 -0
  156. package/ui/CardFrame.qml +67 -0
  157. package/ui/CardScroll.qml +79 -0
  158. package/ui/CheckBox.qml +73 -0
  159. package/ui/ChromeBar.qml +360 -0
  160. package/ui/ChromeButton.qml +131 -0
  161. package/ui/ChromeModes.qml +43 -0
  162. package/ui/CodeLines.qml +256 -0
  163. package/ui/CodeRefusal.qml +52 -0
  164. package/ui/CollideConfirm.qml +147 -0
  165. package/ui/CollideHost.qml +167 -0
  166. package/ui/ColumnPane.qml +523 -0
  167. package/ui/ColumnRow.qml +380 -0
  168. package/ui/ColumnsArea.qml +594 -0
  169. package/ui/ColumnsLanding.qml +147 -0
  170. package/ui/CompareView.qml +321 -0
  171. package/ui/ContextMenu.qml +743 -0
  172. package/ui/ConvertDialog.qml +456 -0
  173. package/ui/CountedWorker.qml +7 -0
  174. package/ui/Crumb.qml +64 -0
  175. package/ui/CrumbDrop.qml +25 -0
  176. package/ui/CsvTable.qml +394 -0
  177. package/ui/CursorMark.qml +41 -0
  178. package/ui/DefaultClaim.qml +130 -0
  179. package/ui/DeviceLock.qml +47 -0
  180. package/ui/DeviceMounts.qml +540 -0
  181. package/ui/DialogButton.qml +150 -0
  182. package/ui/DialogField.qml +147 -0
  183. package/ui/DialogHeader.qml +31 -0
  184. package/ui/DialogScrim.qml +20 -0
  185. package/ui/DialogTitle.qml +37 -0
  186. package/ui/Divider.qml +9 -0
  187. package/ui/DropInto.qml +126 -0
  188. package/ui/DropTarget.qml +35 -0
  189. package/ui/DropboxMark.qml +60 -0
  190. package/ui/EmptyState.qml +150 -0
  191. package/ui/EscapeHint.qml +11 -0
  192. package/ui/FactsTable.qml +54 -0
  193. package/ui/FastScrollHandler.qml +476 -0
  194. package/ui/FatNamesConfirm.qml +157 -0
  195. package/ui/Favourites.qml +143 -0
  196. package/ui/FigureService.qml +120 -0
  197. package/ui/FileDrag.qml +267 -0
  198. package/ui/FilterStrip.qml +133 -0
  199. package/ui/FitMetrics.qml +22 -0
  200. package/ui/FlashDriveRows.qml +137 -0
  201. package/ui/FlashHost.qml +72 -0
  202. package/ui/FlashImageRow.qml +104 -0
  203. package/ui/FlashRunner.qml +119 -0
  204. package/ui/FlashStepRow.qml +172 -0
  205. package/ui/FlashStrip.qml +38 -0
  206. package/ui/FlashView.qml +397 -0
  207. package/ui/FleaMark.qml +88 -0
  208. package/ui/FlyoutFade.qml +23 -0
  209. package/ui/FontPane.qml +170 -0
  210. package/ui/Glass.qml +114 -0
  211. package/ui/GlassTagger.qml +59 -0
  212. package/ui/Glyph.qml +64 -0
  213. package/ui/GlyphSolid.qml +22 -0
  214. package/ui/GridArea.qml +664 -0
  215. package/ui/GridTile.qml +325 -0
  216. package/ui/GvfsBridge.qml +164 -0
  217. package/ui/Header.qml +433 -0
  218. package/ui/HoverTimers.qml +39 -0
  219. package/ui/HtmlClip.qml +30 -0
  220. package/ui/HtmlPane.qml +63 -0
  221. package/ui/HyprlandMark.qml +45 -0
  222. package/ui/Ipc.qml +1005 -0
  223. package/ui/IpcControls.qml +7 -0
  224. package/ui/IpcMenuState.qml +48 -0
  225. package/ui/IpcPreviewState.qml +185 -0
  226. package/ui/JumpPath.qml +51 -0
  227. package/ui/KeymapSheet.qml +561 -0
  228. package/ui/KeymapSheetResult.qml +89 -0
  229. package/ui/KindStack.qml +40 -0
  230. package/ui/LangMark.qml +51 -0
  231. package/ui/LangMarkLoader.qml +26 -0
  232. package/ui/List.qml +480 -0
  233. package/ui/LoadingState.qml +54 -0
  234. package/ui/LocalSend.qml +56 -0
  235. package/ui/LocalSendMark.qml +73 -0
  236. package/ui/MarkdownBlockView.qml +311 -0
  237. package/ui/MarkdownBlocks.qml +35 -0
  238. package/ui/MarkdownFigure.qml +254 -0
  239. package/ui/MarkdownImages.qml +72 -0
  240. package/ui/MarkdownList.qml +81 -0
  241. package/ui/MarkdownMathsText.qml +97 -0
  242. package/ui/MarkdownPane.qml +83 -0
  243. package/ui/MarkdownPictures.qml +41 -0
  244. package/ui/MarkdownQuote.qml +52 -0
  245. package/ui/MarkdownRemote.qml +82 -0
  246. package/ui/MarkdownSource.qml +155 -0
  247. package/ui/MarkdownTable.qml +222 -0
  248. package/ui/MarkdownTableScroll.qml +64 -0
  249. package/ui/MarkdownTableWheel.qml +126 -0
  250. package/ui/MarkdownText.qml +87 -0
  251. package/ui/MarkdownWorker.js +132 -0
  252. package/ui/MatchText.qml +99 -0
  253. package/ui/MediaSession.qml +38 -0
  254. package/ui/MediaSound.qml +26 -0
  255. package/ui/MediaStrip.qml +191 -0
  256. package/ui/MediaTrack.qml +36 -0
  257. package/ui/MediaVolume.qml +54 -0
  258. package/ui/MenuActionDialog.qml +396 -0
  259. package/ui/MenuEdgeFade.qml +24 -0
  260. package/ui/MenuHost.qml +227 -0
  261. package/ui/MenuRow.qml +351 -0
  262. package/ui/MountListing.qml +100 -0
  263. package/ui/NetworkDialog.qml +435 -0
  264. package/ui/NetworkForm.qml +426 -0
  265. package/ui/NetworkMounts.qml +913 -0
  266. package/ui/NetworkPlaces.qml +127 -0
  267. package/ui/OpenWithDialog.qml +613 -0
  268. package/ui/Opener.qml +115 -0
  269. package/ui/Pane.qml +1296 -0
  270. package/ui/PaneMenuActions.qml +527 -0
  271. package/ui/PanePath.qml +90 -0
  272. package/ui/PaneRail.qml +239 -0
  273. package/ui/PaneStates.qml +88 -0
  274. package/ui/PaneSwap.qml +339 -0
  275. package/ui/PaneWire.qml +605 -0
  276. package/ui/ParkedWait.qml +9 -0
  277. package/ui/PathEntry.qml +186 -0
  278. package/ui/PathJump.qml +400 -0
  279. package/ui/PdfViewer.qml +297 -0
  280. package/ui/PermissionsDialog.qml +658 -0
  281. package/ui/PermissionsHeadings.qml +31 -0
  282. package/ui/PhoneMounts.qml +67 -0
  283. package/ui/PickerAnswers.qml +75 -0
  284. package/ui/PickerBox.qml +26 -0
  285. package/ui/PickerChrome.qml +295 -0
  286. package/ui/PickerFilter.qml +97 -0
  287. package/ui/PickerGrid.qml +308 -0
  288. package/ui/PickerHeader.qml +28 -0
  289. package/ui/PickerLifecycle.qml +27 -0
  290. package/ui/PickerList.qml +218 -0
  291. package/ui/PickerListing.qml +149 -0
  292. package/ui/PickerPathBar.qml +127 -0
  293. package/ui/PickerPlaces.qml +189 -0
  294. package/ui/PickerRecent.qml +92 -0
  295. package/ui/PickerSave.qml +101 -0
  296. package/ui/PickerSelection.qml +155 -0
  297. package/ui/PickerWindow.qml +846 -0
  298. package/ui/PowerSectorsReader.qml +10 -0
  299. package/ui/PrebuildDriver.qml +146 -0
  300. package/ui/Preview.qml +1004 -0
  301. package/ui/PreviewAnimation.qml +24 -0
  302. package/ui/PreviewArchive.qml +66 -0
  303. package/ui/PreviewColumn.qml +551 -0
  304. package/ui/PreviewEdge.qml +63 -0
  305. package/ui/PreviewFacts.qml +30 -0
  306. package/ui/PreviewFactsLine.qml +34 -0
  307. package/ui/PreviewHtml.qml +233 -0
  308. package/ui/PreviewImage.qml +253 -0
  309. package/ui/PreviewImagePan.qml +13 -0
  310. package/ui/PreviewImageSharp.qml +32 -0
  311. package/ui/PreviewLines.qml +106 -0
  312. package/ui/PreviewMarkdown.qml +706 -0
  313. package/ui/PreviewMedia.qml +250 -0
  314. package/ui/PreviewPdf.qml +482 -0
  315. package/ui/PreviewScroll.qml +201 -0
  316. package/ui/PreviewSwap.qml +335 -0
  317. package/ui/PreviewText.qml +149 -0
  318. package/ui/ProtocolChip.qml +18 -0
  319. package/ui/QuickLookArchive.qml +38 -0
  320. package/ui/QuickLookBar.qml +103 -0
  321. package/ui/QuickLookPrepare.qml +355 -0
  322. package/ui/QuickLookSwap.qml +10 -0
  323. package/ui/QuickLookWarm.qml +65 -0
  324. package/ui/RailDrop.qml +155 -0
  325. package/ui/RailHeading.qml +19 -0
  326. package/ui/RailPlaces.qml +38 -0
  327. package/ui/RailTrashRow.qml +67 -0
  328. package/ui/RenameField.qml +353 -0
  329. package/ui/RendererRetry.qml +11 -0
  330. package/ui/ResizeHandle.qml +52 -0
  331. package/ui/Reveal.qml +54 -0
  332. package/ui/Row.qml +476 -0
  333. package/ui/RowDrag.qml +213 -0
  334. package/ui/RowDropTarget.qml +27 -0
  335. package/ui/RunCard.qml +286 -0
  336. package/ui/Scripts.qml +65 -0
  337. package/ui/SearchStrip.qml +232 -0
  338. package/ui/SelectionBand.qml +140 -0
  339. package/ui/SelectionPreview.qml +370 -0
  340. package/ui/SettingsFavourite.qml +122 -0
  341. package/ui/SettingsGroup.qml +96 -0
  342. package/ui/SettingsHint.qml +12 -0
  343. package/ui/SettingsMetrics.qml +29 -0
  344. package/ui/SettingsPane.qml +178 -0
  345. package/ui/SettingsPanel.qml +547 -0
  346. package/ui/SettingsRail.qml +128 -0
  347. package/ui/SettingsRow.qml +409 -0
  348. package/ui/SettingsRuler.qml +85 -0
  349. package/ui/SettingsSegment.qml +85 -0
  350. package/ui/ShareBrowser.qml +113 -0
  351. package/ui/ShareLink.qml +67 -0
  352. package/ui/ShelfPins.qml +101 -0
  353. package/ui/Sidebar.qml +732 -0
  354. package/ui/SidebarRow.qml +358 -0
  355. package/ui/Spinner.qml +60 -0
  356. package/ui/StableModel.qml +89 -0
  357. package/ui/StateMessage.qml +84 -0
  358. package/ui/StatusBar.qml +512 -0
  359. package/ui/StatusFileName.qml +27 -0
  360. package/ui/TabBar.qml +673 -0
  361. package/ui/TabDragGeometry.qml +60 -0
  362. package/ui/TagMenuMark.qml +52 -0
  363. package/ui/TagRailSection.qml +53 -0
  364. package/ui/TagSlot.qml +40 -0
  365. package/ui/TagState.qml +150 -0
  366. package/ui/TagSwatch.qml +28 -0
  367. package/ui/Taildrop.qml +86 -0
  368. package/ui/TailscaleMark.qml +50 -0
  369. package/ui/Theme.qml +460 -0
  370. package/ui/ThemeColors.qml +43 -0
  371. package/ui/TransferCard.qml +239 -0
  372. package/ui/TrashConfirm.qml +129 -0
  373. package/ui/TrashDropHandler.qml +11 -0
  374. package/ui/TrashHost.qml +202 -0
  375. package/ui/TrashMonitor.qml +30 -0
  376. package/ui/TrashToolbar.qml +19 -0
  377. package/ui/TrashView.qml +492 -0
  378. package/ui/UnlockDialog.qml +450 -0
  379. package/ui/UnlockHost.qml +206 -0
  380. package/ui/UpdateCheck.qml +97 -0
  381. package/ui/UserDirs.qml +25 -0
  382. package/ui/ViewState.qml +565 -0
  383. package/ui/ViewportScrollBar.qml +195 -0
  384. package/ui/ViewportScrollBars.qml +25 -0
  385. package/ui/WebPreview.qml +33 -0
  386. package/ui/WebPreviewView.qml +26 -0
  387. package/ui/WindowBody.qml +827 -0
  388. package/ui/WindowDrag.qml +35 -0
  389. package/ui/boot/Commons/AudioNodes.qml +50 -0
  390. package/ui/boot/Commons/AudioNodesModel.js +96 -0
  391. package/ui/boot/Commons/Border.qml +243 -0
  392. package/ui/boot/Commons/BorderGeometry.js +373 -0
  393. package/ui/boot/Commons/Color.qml +258 -0
  394. package/ui/boot/Commons/I18n.qml +118 -0
  395. package/ui/boot/Commons/InputDevices.qml +112 -0
  396. package/ui/boot/Commons/InputMethodState.qml +38 -0
  397. package/ui/boot/Commons/IpcRegistry.qml +77 -0
  398. package/ui/boot/Commons/Numbers.js +19 -0
  399. package/ui/boot/Commons/Plural.js +91 -0
  400. package/ui/boot/Commons/ShellIpc.qml +12 -0
  401. package/ui/boot/Commons/Style.qml +561 -0
  402. package/ui/boot/Commons/Translations.qml +100 -0
  403. package/ui/boot/Commons/UntypedInput.qml +152 -0
  404. package/ui/boot/Commons/Util.qml +188 -0
  405. package/ui/boot/Commons/qmldir +13 -0
  406. package/ui/boot/LICENSE-omarchy +20 -0
  407. package/ui/boot/Ui/BackgroundMedia.qml +49 -0
  408. package/ui/boot/Ui/BarIconButton.qml +106 -0
  409. package/ui/boot/Ui/BarIconContent.qml +38 -0
  410. package/ui/boot/Ui/BarIndicator.qml +53 -0
  411. package/ui/boot/Ui/BarWidget.qml +50 -0
  412. package/ui/boot/Ui/BorderOverlay.qml +54 -0
  413. package/ui/boot/Ui/BorderSurface.qml +40 -0
  414. package/ui/boot/Ui/Button.qml +224 -0
  415. package/ui/boot/Ui/ButtonGroup.qml +131 -0
  416. package/ui/boot/Ui/ConfirmDialog.qml +134 -0
  417. package/ui/boot/Ui/CursorSurface.qml +42 -0
  418. package/ui/boot/Ui/Dropdown.qml +245 -0
  419. package/ui/boot/Ui/FilterInput.qml +26 -0
  420. package/ui/boot/Ui/IconContentBounds.qml +141 -0
  421. package/ui/boot/Ui/KeyboardPanel.qml +453 -0
  422. package/ui/boot/Ui/MultiSelect.qml +624 -0
  423. package/ui/boot/Ui/NumberField.qml +86 -0
  424. package/ui/boot/Ui/OpticalGlyph.qml +68 -0
  425. package/ui/boot/Ui/OverlayWindow.qml +102 -0
  426. package/ui/boot/Ui/Panel.qml +60 -0
  427. package/ui/boot/Ui/PanelActionButton.qml +105 -0
  428. package/ui/boot/Ui/PanelController.qml +16 -0
  429. package/ui/boot/Ui/PanelHero.qml +112 -0
  430. package/ui/boot/Ui/PanelKeyCatcher.qml +100 -0
  431. package/ui/boot/Ui/PanelSectionHeader.qml +31 -0
  432. package/ui/boot/Ui/PanelSeparator.qml +19 -0
  433. package/ui/boot/Ui/PanelSlider.qml +156 -0
  434. package/ui/boot/Ui/PanelToolTip.qml +50 -0
  435. package/ui/boot/Ui/PluginBarApi.qml +89 -0
  436. package/ui/boot/Ui/PointerMoveGate.qml +54 -0
  437. package/ui/boot/Ui/PopupCard.qml +181 -0
  438. package/ui/boot/Ui/ScreenMoveRemap.qml +43 -0
  439. package/ui/boot/Ui/SearchableDropdown.qml +354 -0
  440. package/ui/boot/Ui/SizedImage.qml +125 -0
  441. package/ui/boot/Ui/SpeedTestOverlay.qml +412 -0
  442. package/ui/boot/Ui/TextField.qml +58 -0
  443. package/ui/boot/Ui/Toggle.qml +118 -0
  444. package/ui/boot/Ui/ToggleSwitch.qml +115 -0
  445. package/ui/boot/Ui/WidgetButton.qml +172 -0
  446. package/ui/boot/Ui/qmldir +41 -0
  447. package/ui/boot/fleatab.qml +50 -0
  448. package/ui/boot/picker.qml +39 -0
  449. package/ui/boot/shell.qml +122 -0
  450. package/ui/boot/tabtearoff.qml +51 -0
  451. package/ui/js/Anchor.js +379 -0
  452. package/ui/js/AnchorHold.js +162 -0
  453. package/ui/js/Archive.js +157 -0
  454. package/ui/js/ArchiveCard.js +44 -0
  455. package/ui/js/ArchiveOps.js +44 -0
  456. package/ui/js/BackReturn.js +118 -0
  457. package/ui/js/BulkRename.js +100 -0
  458. package/ui/js/Buttons.js +54 -0
  459. package/ui/js/ChromeKeys.js +116 -0
  460. package/ui/js/ClipMarks.js +73 -0
  461. package/ui/js/ClipSelection.js +67 -0
  462. package/ui/js/Clipboard.js +179 -0
  463. package/ui/js/Cloud.js +97 -0
  464. package/ui/js/CodeRuns.js +72 -0
  465. package/ui/js/Collide.js +212 -0
  466. package/ui/js/ColumnFit.js +28 -0
  467. package/ui/js/ColumnMenu.js +111 -0
  468. package/ui/js/Columns.js +298 -0
  469. package/ui/js/ColumnsCarry.js +103 -0
  470. package/ui/js/Compare.js +74 -0
  471. package/ui/js/Contrast.js +157 -0
  472. package/ui/js/ControlReader.js +42 -0
  473. package/ui/js/Convert.js +52 -0
  474. package/ui/js/CopyAs.js +52 -0
  475. package/ui/js/Crumbs.js +178 -0
  476. package/ui/js/Csv.js +231 -0
  477. package/ui/js/Density.js +44 -0
  478. package/ui/js/Devices.js +440 -0
  479. package/ui/js/DirSizes.js +180 -0
  480. package/ui/js/Drag.js +364 -0
  481. package/ui/js/DragOut.js +166 -0
  482. package/ui/js/DropDev.js +52 -0
  483. package/ui/js/Dropbox.js +41 -0
  484. package/ui/js/Eject.js +217 -0
  485. package/ui/js/Errors.js +188 -0
  486. package/ui/js/ExtThumbs.js +115 -0
  487. package/ui/js/Facts.js +402 -0
  488. package/ui/js/FigureDate.js +14 -0
  489. package/ui/js/Filter.js +285 -0
  490. package/ui/js/Find.js +46 -0
  491. package/ui/js/Flash.js +184 -0
  492. package/ui/js/FlashCard.js +79 -0
  493. package/ui/js/FlashEndings.js +125 -0
  494. package/ui/js/FlashPane.js +116 -0
  495. package/ui/js/FleaBin.js +12 -0
  496. package/ui/js/Focus.js +502 -0
  497. package/ui/js/FolderSorts.js +108 -0
  498. package/ui/js/FolderViews.js +44 -0
  499. package/ui/js/Format.js +305 -0
  500. package/ui/js/Fuzzy.js +141 -0
  501. package/ui/js/GlassTag.js +72 -0
  502. package/ui/js/Grid.js +33 -0
  503. package/ui/js/GridGeometry.js +90 -0
  504. package/ui/js/GridNames.js +153 -0
  505. package/ui/js/GvfsBridge.js +200 -0
  506. package/ui/js/HostClipboard.js +29 -0
  507. package/ui/js/Icons.js +218 -0
  508. package/ui/js/Input.js +50 -0
  509. package/ui/js/Jump.js +200 -0
  510. package/ui/js/KeyName.js +64 -0
  511. package/ui/js/Keymap.js +401 -0
  512. package/ui/js/Kinds.js +164 -0
  513. package/ui/js/LICENSES/ISC-lucide.txt +43 -0
  514. package/ui/js/LangMarkPaths.js +47 -0
  515. package/ui/js/LangMarks.js +120 -0
  516. package/ui/js/Lists.js +11 -0
  517. package/ui/js/LocalSend.js +39 -0
  518. package/ui/js/LockedMenu.js +63 -0
  519. package/ui/js/MakeDefault.js +186 -0
  520. package/ui/js/MarkBox.js +7 -0
  521. package/ui/js/Markdown.js +119 -0
  522. package/ui/js/MarkdownLists.js +86 -0
  523. package/ui/js/MarkdownMaths.js +58 -0
  524. package/ui/js/MarkdownPictures.js +32 -0
  525. package/ui/js/MarkdownPrepared.js +139 -0
  526. package/ui/js/MarkdownTableFit.js +34 -0
  527. package/ui/js/Marks.js +148 -0
  528. package/ui/js/Marquee.js +96 -0
  529. package/ui/js/Match.js +93 -0
  530. package/ui/js/Material.js +109 -0
  531. package/ui/js/MdBlocks.js +437 -0
  532. package/ui/js/MdBreak.js +71 -0
  533. package/ui/js/MdChunks.js +70 -0
  534. package/ui/js/MdContainer.js +137 -0
  535. package/ui/js/MdDocument.js +337 -0
  536. package/ui/js/MdEmph.js +97 -0
  537. package/ui/js/MdEntity.js +108 -0
  538. package/ui/js/MdEntityTable.js +223 -0
  539. package/ui/js/MdEscape.js +59 -0
  540. package/ui/js/MdFront.js +37 -0
  541. package/ui/js/MdHold.js +32 -0
  542. package/ui/js/MdHtml.js +307 -0
  543. package/ui/js/MdHtmlBlock.js +290 -0
  544. package/ui/js/MdHtmlHeading.js +53 -0
  545. package/ui/js/MdHtmlImage.js +179 -0
  546. package/ui/js/MdInline.js +154 -0
  547. package/ui/js/MdItems.js +212 -0
  548. package/ui/js/MdLeaf.js +309 -0
  549. package/ui/js/MdLink.js +196 -0
  550. package/ui/js/MdMath.js +67 -0
  551. package/ui/js/MdParagraphs.js +138 -0
  552. package/ui/js/MdRefs.js +232 -0
  553. package/ui/js/MdResolve.js +226 -0
  554. package/ui/js/MdRun.js +300 -0
  555. package/ui/js/MdUrl.js +226 -0
  556. package/ui/js/Menu.js +514 -0
  557. package/ui/js/MenuContext.js +85 -0
  558. package/ui/js/MenuFit.js +13 -0
  559. package/ui/js/MenuRefresh.js +74 -0
  560. package/ui/js/MenuWheel.js +35 -0
  561. package/ui/js/Messages.js +186 -0
  562. package/ui/js/Motion.js +16 -0
  563. package/ui/js/Mounts.js +320 -0
  564. package/ui/js/MouseNav.js +13 -0
  565. package/ui/js/Nav.js +329 -0
  566. package/ui/js/NetFs.js +26 -0
  567. package/ui/js/OpenWith.js +83 -0
  568. package/ui/js/Ops.js +585 -0
  569. package/ui/js/Palette.js +33 -0
  570. package/ui/js/PathBar.js +260 -0
  571. package/ui/js/Permissions.js +179 -0
  572. package/ui/js/Phones.js +112 -0
  573. package/ui/js/Picker.js +353 -0
  574. package/ui/js/PlaceMenu.js +96 -0
  575. package/ui/js/Places.js +265 -0
  576. package/ui/js/PreviewAsk.js +21 -0
  577. package/ui/js/PreviewKeys.js +155 -0
  578. package/ui/js/PreviewSettle.js +29 -0
  579. package/ui/js/PreviewSwap.js +101 -0
  580. package/ui/js/PropertyFacts.js +144 -0
  581. package/ui/js/Protocols.js +296 -0
  582. package/ui/js/QuickLookKinds.js +27 -0
  583. package/ui/js/QuickLookRect.js +24 -0
  584. package/ui/js/RailDrop.js +51 -0
  585. package/ui/js/RailKeys.js +87 -0
  586. package/ui/js/RailMenu.js +133 -0
  587. package/ui/js/Recent.js +135 -0
  588. package/ui/js/RecentMode.js +156 -0
  589. package/ui/js/Reload.js +60 -0
  590. package/ui/js/Renderer.js +9 -0
  591. package/ui/js/RunFile.js +143 -0
  592. package/ui/js/Scripts.js +28 -0
  593. package/ui/js/Scroll.js +304 -0
  594. package/ui/js/ScrollOff.js +69 -0
  595. package/ui/js/Search.js +478 -0
  596. package/ui/js/Selection.js +97 -0
  597. package/ui/js/Settings.js +476 -0
  598. package/ui/js/SettingsAbout.js +97 -0
  599. package/ui/js/SettingsShelf.js +52 -0
  600. package/ui/js/SheetKeys.js +42 -0
  601. package/ui/js/SheetQuery.js +281 -0
  602. package/ui/js/ShelfPile.js +27 -0
  603. package/ui/js/SlowClick.js +53 -0
  604. package/ui/js/SlowOp.js +6 -0
  605. package/ui/js/Sort.js +134 -0
  606. package/ui/js/Startup.js +63 -0
  607. package/ui/js/StateWords.js +17 -0
  608. package/ui/js/Status.js +238 -0
  609. package/ui/js/Swap.js +166 -0
  610. package/ui/js/TabMove.js +39 -0
  611. package/ui/js/Tabs.js +736 -0
  612. package/ui/js/Tags.js +134 -0
  613. package/ui/js/Taildrop.js +128 -0
  614. package/ui/js/Tap.js +174 -0
  615. package/ui/js/TextSize.js +107 -0
  616. package/ui/js/Thumbs.js +158 -0
  617. package/ui/js/Transfer.js +172 -0
  618. package/ui/js/Trash.js +81 -0
  619. package/ui/js/TrashDates.js +47 -0
  620. package/ui/js/TrashDrop.js +64 -0
  621. package/ui/js/UiState.js +438 -0
  622. package/ui/js/Unlock.js +152 -0
  623. package/ui/js/Update.js +130 -0
  624. package/ui/js/UserDirs.js +56 -0
  625. package/ui/qmldir +228 -0
@@ -0,0 +1,137 @@
1
+ .pragma library
2
+
3
+ .import "MdLeaf.js" as Leaf
4
+
5
+ // Prefix readers use byte offsets and absolute tab columns, without copying the remaining line.
6
+ var CODE_INDENT = 4
7
+ var MAX_MARKER_INDENT = 3
8
+ var MAX_MARKER_DIGITS = 9
9
+ var DECIMAL_RADIX = 10
10
+ var MAX_GAP_SCAN = CODE_INDENT + 1
11
+ var MIN_MARKER_GAP = 1
12
+
13
+ // Sample: a tab after two spaces advances to column four.
14
+ function indentationAt(line, view, limit) {
15
+ var stop = limit === undefined ? CODE_INDENT : limit
16
+ var at = view.at
17
+ var width = view.padding
18
+ while (at < line.length && width < stop) {
19
+ var c = line.charAt(at)
20
+ if (c !== " " && c !== "\t")
21
+ break
22
+ width += c === "\t" ? CODE_INDENT - (view.column + width) % CODE_INDENT : 1
23
+ at++
24
+ }
25
+ return { end: at, width: width }
26
+ }
27
+
28
+ function takeIndent(line, view, wanted) {
29
+ var width = Math.min(view.padding, wanted)
30
+ view.padding -= width
31
+ while (view.at < line.length && width < wanted) {
32
+ var c = line.charAt(view.at)
33
+ if (c !== " " && c !== "\t")
34
+ break
35
+ var step = c === "\t" ? CODE_INDENT - (view.column + width) % CODE_INDENT : 1
36
+ view.at++
37
+ width += step
38
+ }
39
+ view.padding += Math.max(0, width - wanted)
40
+ view.column += Math.min(width, wanted)
41
+ }
42
+
43
+ // Sample: ">\ttext" consumes one column after > and retains the tab's remaining columns.
44
+ function quoteAt(line, view) {
45
+ var indent = indentationAt(line, view)
46
+ return indent.width <= MAX_MARKER_INDENT && line.charAt(indent.end) === ">" ? indent.width : -1
47
+ }
48
+
49
+ function takeQuote(line, view, indent) {
50
+ takeIndent(line, view, indent)
51
+ view.at++
52
+ view.column++
53
+ if (line.charAt(view.at) === " " || line.charAt(view.at) === "\t")
54
+ takeIndent(line, view, 1)
55
+ }
56
+
57
+ // Sample: "10.\ttext" starts content at column four, and five gap columns leave indented code.
58
+ function listAt(line, view) {
59
+ var indentation = indentationAt(line, view)
60
+ var at = indentation.end
61
+ var indent = indentation.width
62
+ if (indent > MAX_MARKER_INDENT)
63
+ return null
64
+ var start = at
65
+ var c = line.charAt(at)
66
+ var ordered = c >= "0" && c <= "9"
67
+ if (ordered) {
68
+ while (at - start < MAX_MARKER_DIGITS && line.charAt(at) >= "0" && line.charAt(at) <= "9")
69
+ at++
70
+ if (line.charAt(at) !== "." && line.charAt(at) !== ")")
71
+ return null
72
+ } else if (c !== "-" && c !== "*" && c !== "+") {
73
+ return null
74
+ }
75
+ var mark = line.charAt(at)
76
+ at++
77
+ if (at < line.length && line.charAt(at) !== " " && line.charAt(at) !== "\t")
78
+ return null
79
+ var markerWidth = at - start
80
+ var gapView = { at: at, padding: 0, column: view.column + indent + markerWidth }
81
+ var gap = line.slice(at).trim().length === 0 ? MIN_MARKER_GAP : indentationAt(line, gapView, MAX_GAP_SCAN).width
82
+ var consumedGap = gap > CODE_INDENT ? MIN_MARKER_GAP : gap
83
+ return { indent: indent, ordered: ordered, mark: mark,
84
+ start: ordered ? parseInt(line.slice(start, at - 1), DECIMAL_RADIX) : 0,
85
+ contentCol: indent + markerWidth + consumedGap, markerEnd: at,
86
+ markerColumn: gapView.column, gap: consumedGap }
87
+ }
88
+
89
+ function takeList(line, view, marker) {
90
+ view.at = marker.markerEnd
91
+ view.padding = 0
92
+ view.column = marker.markerColumn
93
+ takeIndent(line, view, marker.gap)
94
+ }
95
+
96
+ // Sample input: "\tbar" read at column 2 answers " bar": the leading tab expands to its own stop, so no importer miscounts it.
97
+ function expandLead(text, column) {
98
+ var out = ""
99
+ var at = 0
100
+ var col = column
101
+ while (at < text.length && (text.charAt(at) === " " || text.charAt(at) === "\t")) {
102
+ var step = text.charAt(at) === "\t" ? CODE_INDENT - col % CODE_INDENT : 1
103
+ out += " ".repeat(step)
104
+ col += step
105
+ at++
106
+ }
107
+ return out + text.slice(at)
108
+ }
109
+
110
+ function textAt(line, view) {
111
+ return " ".repeat(view.padding) + line.slice(view.at)
112
+ }
113
+
114
+ function readListMarker(line) {
115
+ var view = { at: 0, padding: 0, column: 0 }
116
+ var marker = listAt(String(line), view)
117
+ if (marker === null)
118
+ return null
119
+ takeList(line, view, marker)
120
+ return { indent: marker.indent, ordered: marker.ordered, start: marker.start,
121
+ contentCol: marker.contentCol, text: textAt(line, view) }
122
+ }
123
+
124
+ // Sample input: " aaa" with 1 answers " aaa"; a fence opened at that indent drops up to as many spaces from each body line.
125
+ function unindent(text, width) {
126
+ var at = 0
127
+ while (at < width && text.charAt(at) === " ")
128
+ at++
129
+ return text.slice(at)
130
+ }
131
+
132
+ // Sample input: "> q", "- item", "```", "# h" and "***" start a block, so a table stops before them; "bar" does not.
133
+ function startsBlock(line) {
134
+ var view = { at: 0, padding: 0, column: 0 }
135
+ return quoteAt(line, view) >= 0 || listAt(line, view) !== null || Leaf.fenceOpen(line) !== null
136
+ || Leaf.atxHeading(line) !== null || Leaf.isThematic(line)
137
+ }
@@ -0,0 +1,337 @@
1
+ .pragma library
2
+
3
+ // Serialize the block reader's events; all container and code decisions belong to MdBlocks.
4
+ .import "MdLeaf.js" as Leaf
5
+ .import "MdContainer.js" as Container
6
+ .import "MdRun.js" as Run
7
+ .import "MdHtmlImage.js" as HtmlImage
8
+ .import "MdParagraphs.js" as MdParagraphs
9
+ .import "MdHtmlBlock.js" as HtmlBlock
10
+ .import "MdHtmlHeading.js" as HtmlHeading
11
+ .import "MdItems.js" as Items
12
+ .import "MdChunks.js" as Chunks
13
+ .import "MdResolve.js" as Res
14
+ .import "MdMath.js" as Maths
15
+ .import "MdEntity.js" as Ent
16
+
17
+ // The importer joins an HTML block onto the paragraph above it, so a block-level raw tag after a blank line starts its own run.
18
+ // Sample input: "Body.\n\n<div>x</div>" splits before the div; "<table>\n<tr>" keeps its rows together.
19
+ var HTML_BLOCK_AFTER_BLANK = /\n[ \t]*\n+(?= {0,3}<(?:p|div|h[1-6]|hr|table|ul|ol|blockquote|pre)(?=[\s>\/]))/i
20
+
21
+ // Sample input: "one<br />\n two" collapses to "one<br />two"; a blank line after the break stays a paragraph break.
22
+ var BREAK_SOFT_NEWLINE = /(<br \/>)[ \t]*\n(?![ \t]*\n)[ \t]*/g
23
+
24
+ // Items and quotes hold their blocks as parts down to this many levels; deeper text stays one markdown text, which keeps a deep chain linear.
25
+ var NEST_LIMIT = 8
26
+
27
+ // shared is set for the writer of an item's or a quote's parts, which numbers footnotes and tokens with the document's.
28
+ function writer(state, dir, chrome, ink, pass, shared) {
29
+ var out = []
30
+ var run = []
31
+ var tokens = shared !== undefined ? shared.tokens : []
32
+ var cited = shared !== undefined ? shared.cited : []
33
+ var level = shared !== undefined ? shared.level : 0
34
+ function inlineOf(text, citations, literalPlain, bareText, fragment) {
35
+ return Run.parseInline(text, dir, state.defs, state.numbers, chrome, ink, tokens,
36
+ citations === false ? undefined : cited, literalPlain, bareText, fragment)
37
+ }
38
+ // Prose outside every container: a ">" in it, even after a formula's figure, is text and never a quote mark.
39
+ function pushPiece(lines) {
40
+ var text = HtmlBlock.separateBlocks(lines).join("\n")
41
+ // A soft break after a line break collapses, as in a browser, so the next line starts at the text column.
42
+ var pieces = inlineOf(text, undefined, false, true).replace(BREAK_SOFT_NEWLINE, "$1").split(HTML_BLOCK_AFTER_BLANK)
43
+ var maths = Maths.inlineSources(text)
44
+ for (var p = 0; p < pieces.length; p++) {
45
+ if (pieces[p].trim().length === 0)
46
+ continue
47
+ var block = { type: "run", text: pieces[p] }
48
+ // The text's formulas are listed on its first block, so a split never lists one twice.
49
+ if (maths.length > 0)
50
+ block.maths = maths
51
+ maths = []
52
+ out.push(block)
53
+ }
54
+ }
55
+ // An image inside an HTML block leaves it as an image block, since the importer draws no Markdown there.
56
+ function pushImages(lines) {
57
+ var parts = HtmlBlock.splitHtmlImages(lines, dir)
58
+ for (var p = 0; p < parts.length; p++) {
59
+ if (parts[p].block !== undefined)
60
+ out.push(parts[p].block)
61
+ else
62
+ pushPiece(parts[p].lines)
63
+ }
64
+ }
65
+ // A display formula inside a paragraph stands on its own as a figure, the way a display block does.
66
+ function pushRun(lines) {
67
+ var pieces = Maths.splitDisplay(lines.join("\n"))
68
+ if (pieces === null)
69
+ return pushImages(lines)
70
+ for (var p = 0; p < pieces.length; p++) {
71
+ if (pieces[p].math === undefined)
72
+ pushImages(pieces[p].text.split("\n"))
73
+ else if (pieces[p].math !== "")
74
+ out.push({ type: "figure", kind: "math", source: pieces[p].math, display: true })
75
+ }
76
+ }
77
+ // Sample input: the lines "a", "```", "x", "```" answer a run and a fence; null past NEST_LIMIT, where the lines stay one text.
78
+ function partsOf(lines) {
79
+ if (level >= NEST_LIMIT)
80
+ return null
81
+ var own = { defs: state.defs, notes: state.notes, numbers: state.numbers, hidden: {}, escaped: {}, code: {}, dropped: [] }
82
+ var inner = writer(own, dir, chrome, ink, pass, { tokens: tokens, cited: cited, level: level + 1 })
83
+ pass(lines, own, inner.project, false, true)
84
+ return inner.finish()
85
+ }
86
+ function pushAll(blocks) {
87
+ for (var b = 0; b < blocks.length; b++)
88
+ out.push(blocks[b])
89
+ }
90
+ // The blocks an HTML heading draws as, its leading picture an image block; null when its drawn text, references resolved, still holds a picture.
91
+ function headingBlocks(head) {
92
+ var blocks = []
93
+ var inner = head.inner
94
+ var logo = head.align === "right" ? null : HtmlHeading.headingPicture(inner, dir)
95
+ if (logo !== null) {
96
+ if (head.align === "center")
97
+ logo.block.align = "center"
98
+ blocks.push(logo.block)
99
+ inner = logo.rest
100
+ if (inner.trim().length === 0)
101
+ return blocks
102
+ }
103
+ var text = inlineOf(Leaf.headingSafe(inner))
104
+ if (HtmlHeading.DRAWN_PICTURE.test(text))
105
+ return null
106
+ var headBlock = { type: "heading", level: head.level, text: text }
107
+ if (head.align !== null)
108
+ headBlock.align = head.align
109
+ blocks.push(headBlock)
110
+ return blocks
111
+ }
112
+ function flushRun() {
113
+ var plain = []
114
+ var depth = 0
115
+ // cutAfter says after which blanks the paragraph ends; open HTML across the blank joins it instead.
116
+ var cut = MdParagraphs.cutAfter(run)
117
+ function flushPlain() {
118
+ if (plain.length > 0)
119
+ pushRun(plain)
120
+ plain = []
121
+ depth = 0
122
+ }
123
+ for (var i = 0; i < run.length; i++) {
124
+ if (run[i].trim().length === 0) {
125
+ if (cut[i])
126
+ flushPlain()
127
+ else
128
+ plain.push(run[i])
129
+ continue
130
+ }
131
+ // A heading in a lone wrapper lifts with it; one in other open HTML stays in its run, so no wrapper is ever split.
132
+ var lifted = depth === 0 ? HtmlHeading.headingUnit(run, i) : null
133
+ var htmlHead = lifted !== null ? lifted.head : depth === 0 ? HtmlBlock.htmlHeading(run[i]) : null
134
+ var drawn = htmlHead !== null ? headingBlocks(htmlHead) : null
135
+ if (drawn !== null) {
136
+ flushPlain()
137
+ pushAll(drawn)
138
+ if (lifted !== null) {
139
+ i = lifted.end
140
+ plain = lifted.wrapper.slice()
141
+ }
142
+ continue
143
+ }
144
+ var solo = (i === 0 || run[i - 1].trim().length === 0)
145
+ && (i + 1 === run.length || run[i + 1].trim().length === 0)
146
+ var image = solo ? Leaf.standaloneImage(run[i], dir, state.defs) : null
147
+ // A raw image inside its own paragraph or div, on one line or three, is an image block too.
148
+ var unit = image === null ? HtmlImage.imageUnit(run, i, dir) : null
149
+ if (image !== null || unit !== null) {
150
+ if (image !== null)
151
+ image.alt = Res.plainText(inlineOf(image.alt, false, false, false, true))
152
+ flushPlain()
153
+ out.push(image !== null ? image : unit.block)
154
+ if (unit !== null) {
155
+ i = unit.end
156
+ // What its wrapper held under the image is drawn centred under it.
157
+ plain = unit.wrapper.slice()
158
+ }
159
+ } else {
160
+ plain.push(run[i])
161
+ depth = HtmlHeading.nestDepth(run[i], depth)
162
+ }
163
+ }
164
+ flushPlain()
165
+ run = []
166
+ }
167
+ // The underline of a setext heading takes the paragraph above it out of the pending run and draws it as a heading.
168
+ function setext(event) {
169
+ var at = run.length
170
+ while (at > 0 && run[at - 1].trim().length > 0 && !Leaf.isThematic(run[at - 1]))
171
+ at--
172
+ var paragraph = run.slice(at)
173
+ run.length = at
174
+ flushRun()
175
+ var text = Leaf.headingSafe(paragraph.join("\n").trim())
176
+ if (text !== "")
177
+ out.push({ type: "heading", level: Leaf.setextLevel(event.text), text: inlineOf(text) })
178
+ }
179
+ function emit(event) {
180
+ if (event.type === "setext")
181
+ return setext(event)
182
+ if (event.type === "run") {
183
+ var lines = Items.visibleLines(event.lines, state)
184
+ for (var l = 0; l < lines.length; l++)
185
+ run.push(lines[l])
186
+ return
187
+ }
188
+ flushRun()
189
+ if (event.type === "fence") {
190
+ var source = event.lines.map(function (line) { return line.text }).join("\n")
191
+ if (event.figureKind !== "")
192
+ out.push({ type: "figure", kind: event.figureKind, source: source, display: true })
193
+ else
194
+ out.push({ type: "fence", text: source, info: Ent.decodeReferences(event.info) })
195
+ } else if (event.type === "heading") {
196
+ out.push({ type: "heading", level: event.level, text: inlineOf(Leaf.headingSafe(event.text)) })
197
+ } else if (event.type === "table") {
198
+ pushAll(Leaf.chunkTable(Leaf.tableBlock(event.head, event.aligns, event.rows,
199
+ function (text) { return inlineOf(text, true, true) })))
200
+ } else if (event.type === "quote") {
201
+ pushAll(Items.quoteBlocks(event.lines, state, inlineOf, partsOf))
202
+ } else if (event.type === "list") {
203
+ var list = Items.listBlock(event, state, inlineOf, partsOf)
204
+ if (list.items.length > 0)
205
+ pushAll(Chunks.chunkList(list))
206
+ } else {
207
+ out.push(event)
208
+ }
209
+ }
210
+ // The line's text once the list markers and indents around it are gone; a lazy line has none to remove.
211
+ function leadText(event) {
212
+ var lead = event.lead
213
+ return lead.here === lead.n && !lead.lazy
214
+ ? " ".repeat(lead.pad) + Container.expandLead(lead.raw.slice(lead.at), lead.col + lead.pad) : event.text
215
+ }
216
+ // A delimiter row the block reader refused as a table keeps its first dash from the renderer, which would make a table of it.
217
+ function tableless(text) {
218
+ return text.indexOf("|") >= 0 && Leaf.delimAligns(text) !== null ? text.replace("-", "\\-") : text
219
+ }
220
+ var outer = null
221
+ var code = null
222
+ function flushOuter() {
223
+ if (outer !== null)
224
+ emit(outer)
225
+ outer = null
226
+ }
227
+ function flushCode() {
228
+ if (code === null)
229
+ return
230
+ if (code.indented) {
231
+ while (code.lines.length > 0 && code.lines[code.lines.length - 1].text.trim().length === 0)
232
+ code.lines.pop()
233
+ }
234
+ emit(code)
235
+ code = null
236
+ }
237
+ function project(event) {
238
+ if (event.type !== "line") {
239
+ flushOuter()
240
+ flushCode()
241
+ emit(event)
242
+ return
243
+ }
244
+ var top = event.outer
245
+ var group = top === null ? null : top.type === "list" ? top.group : top.id
246
+ if (outer !== null && outer.group !== group)
247
+ flushOuter()
248
+ if (top !== null) {
249
+ flushCode()
250
+ if (outer === null)
251
+ outer = { type: top.type, group: group, lines: [], ordered: top.ordered, start: top.start,
252
+ builder: top.type === "list" ? Items.builder() : null }
253
+ if (event.kind === "codeEnd")
254
+ return
255
+ if (top.type === "quote")
256
+ outer.lines.push({ text: leadText(event), index: event.index, depth: event.lead.n, raw: Items.isRaw(event.kind) })
257
+ else
258
+ outer.builder.add(event, leadText(event))
259
+ return
260
+ }
261
+ if (event.kind === "hidden")
262
+ return
263
+ if (event.kind === "fenceOpen") {
264
+ flushCode()
265
+ code = { type: "fence", lines: [], info: event.info, figureKind: event.figureKind, indented: false }
266
+ } else if (event.kind === "fenceBody" || event.kind === "codeLine") {
267
+ if (code === null)
268
+ code = { type: "fence", lines: [], info: "", figureKind: "", indented: true }
269
+ code.lines.push({ text: event.text, index: event.index })
270
+ } else if (event.kind === "fenceClose" || event.kind === "codeEnd") {
271
+ flushCode()
272
+ } else if (event.kind === "setext") {
273
+ flushCode()
274
+ emit({ type: "setext", text: event.text })
275
+ } else {
276
+ flushCode()
277
+ emit({ type: "run", lines: [{ text: tableless(event.text), index: event.index }] })
278
+ }
279
+ }
280
+ function finish() {
281
+ flushOuter()
282
+ // A fence left open at the end of the text holds no line for the final newline.
283
+ if (code !== null && !code.indented && code.lines.length > 0 && code.lines[code.lines.length - 1].text === "")
284
+ code.lines.pop()
285
+ flushCode()
286
+ flushRun()
287
+ var footItems = []
288
+ // Only the document's own writer lists the notes cited anywhere, parts included.
289
+ for (var i = 0; shared === undefined && i < cited.length; i++) {
290
+ var id = cited[i]
291
+ footItems.push("<sup>" + state.numbers[id] + "</sup> " + inlineOf(state.notes[id].text, false))
292
+ }
293
+ if (footItems.length > 0) {
294
+ out.push({ type: "run", text: "---" })
295
+ out.push({ type: "list", ordered: false, start: 0, items: footItems })
296
+ }
297
+ return out
298
+ }
299
+ // The projection that hands onHead the first n blocks once they are written; written blocks are final, so finish starts with them.
300
+ function headed(n, onHead) {
301
+ var sent = false
302
+ return function (event) {
303
+ project(event)
304
+ if (!sent && out.length >= n) {
305
+ sent = true
306
+ onHead(out.slice(0, n))
307
+ }
308
+ }
309
+ }
310
+ return { project: project, finish: finish, headed: headed }
311
+ }
312
+
313
+ function preparedText(lines, state, dir, defs, chrome, ink) {
314
+ var out = []
315
+ var prose = []
316
+ var tokens = []
317
+ var cited = []
318
+ function flush() {
319
+ if (prose.length > 0)
320
+ out.push(Run.parseInline(prose.join("\n"), dir, defs || state.defs,
321
+ state.numbers, chrome, ink, tokens, cited))
322
+ prose = []
323
+ }
324
+ for (var i = 0; i < lines.length; i++) {
325
+ var line = { text: lines[i], index: i }
326
+ if (state.hidden.hasOwnProperty(line.index))
327
+ continue
328
+ if (state.code.hasOwnProperty(line.index)) {
329
+ flush()
330
+ out.push(line.text)
331
+ } else {
332
+ prose.push(Items.visibleLines([line], state)[0])
333
+ }
334
+ }
335
+ flush()
336
+ return out.join("\n")
337
+ }
@@ -0,0 +1,97 @@
1
+ .pragma library
2
+
3
+ // MdEmph: CommonMark delimiter runs, resolved after the inline scan; a mark that pairs becomes a tag, any other stays text.
4
+ .import "MdEscape.js" as Esc
5
+
6
+ var RULE_OF_THREE = 3
7
+ var STRONG_LENGTH = 2
8
+ var MAX_RUN_LENGTH = 1024
9
+ // Unicode P and S approximated by the blocks that hold them: Latin-1, general punctuation, currency, symbols, CJK, fullwidth.
10
+ var UNICODE_PUNCT = /[¡-©«-±´¶-¸»¿×÷˂-˅˒-˟‐-‧‰-⁞₠-⃀℀-⅏←-⯿⸀-⹿、-〃〈-〠〰・︐-︙︰-﹫!-/:-@[-`{-・¢-○\ud83c-\ud83e]/
11
+ var SPACE = /\s/
12
+
13
+ function isPunctChar(c) {
14
+ return Esc.isAsciiPunct(c.charCodeAt(0)) || UNICODE_PUNCT.test(c)
15
+ }
16
+
17
+ // Sample input: "foo*bar*" at index 3 reads a run of one star, flanked by letters, which can open and close.
18
+ function runAt(body, i, at) {
19
+ var ch = body.charAt(i)
20
+ var j = i + 1
21
+ while (j < body.length && j - i < MAX_RUN_LENGTH && body.charAt(j) === ch)
22
+ j++
23
+ var before = i > 0 ? body.charAt(i - 1) : "\n"
24
+ var after = j < body.length ? body.charAt(j) : "\n"
25
+ var spaceBefore = SPACE.test(before)
26
+ var spaceAfter = SPACE.test(after)
27
+ var punctBefore = isPunctChar(before)
28
+ var punctAfter = isPunctChar(after)
29
+ var left = !spaceAfter && (!punctAfter || spaceBefore || punctBefore)
30
+ var right = !spaceBefore && (!punctBefore || spaceAfter || punctAfter)
31
+ var under = ch === "_"
32
+ return { ch: ch, n: j - i, orig: j - i, at: at, end: j,
33
+ open: under ? left && (!right || punctBefore) : left,
34
+ close: under ? right && (!left || punctAfter) : right,
35
+ before: "", after: "", opens: 0, closes: 0 }
36
+ }
37
+
38
+ // The delimiters from index from on pair as the reference algorithm does, over a linked list so a nested pair never rescans its inside.
39
+ function process(delims, from) {
40
+ var total = delims.length
41
+ var prev = []
42
+ var next = []
43
+ var bottoms = {}
44
+ for (var k = from; k < total; k++) {
45
+ prev[k] = k - 1
46
+ next[k] = k + 1
47
+ }
48
+ var ci = from
49
+ while (ci < total) {
50
+ var closer = delims[ci]
51
+ if (!closer.close || closer.n === 0) {
52
+ ci = next[ci]
53
+ continue
54
+ }
55
+ var key = closer.ch + (closer.orig % RULE_OF_THREE) + (closer.open ? "o" : "c")
56
+ var bottom = bottoms.hasOwnProperty(key) ? bottoms[key] : from - 1
57
+ var oi = prev[ci]
58
+ while (oi > bottom) {
59
+ var cand = delims[oi]
60
+ if (cand.open && cand.n > 0 && cand.ch === closer.ch
61
+ && !((closer.open || cand.close) && (cand.orig + closer.orig) % RULE_OF_THREE === 0
62
+ && !(cand.orig % RULE_OF_THREE === 0 && closer.orig % RULE_OF_THREE === 0)))
63
+ break
64
+ oi = prev[oi]
65
+ }
66
+ if (oi <= bottom) {
67
+ bottoms[key] = prev[ci]
68
+ ci = next[ci]
69
+ continue
70
+ }
71
+ var opener = delims[oi]
72
+ var strong = closer.n >= STRONG_LENGTH && opener.n >= STRONG_LENGTH
73
+ var use = strong ? STRONG_LENGTH : 1
74
+ opener.n -= use
75
+ closer.n -= use
76
+ opener.after = (strong ? "<strong>" : "<em>") + opener.after
77
+ closer.before = closer.before + (strong ? "</strong>" : "</em>")
78
+ opener.opens++
79
+ closer.closes++
80
+ // Everything between the pair can no longer pair: unlink it, and the opener too once it has no marks left.
81
+ next[oi] = ci
82
+ prev[ci] = oi
83
+ if (opener.n === 0) {
84
+ next[prev[oi]] = ci
85
+ prev[ci] = prev[oi]
86
+ }
87
+ if (closer.n === 0)
88
+ ci = next[ci]
89
+ }
90
+ }
91
+
92
+ // Sample input: an unpaired "**" that could open reads "&#42;&#42;", which no renderer pairs again; the "_" in "a_b" stays plain.
93
+ function literal(d) {
94
+ if (d.n === 0)
95
+ return ""
96
+ return d.open || d.close ? Esc.escapeText(d.ch).repeat(d.n) : d.ch.repeat(d.n)
97
+ }
@@ -0,0 +1,108 @@
1
+ .pragma library
2
+
3
+ // MdEntity: backslash escapes and character references in destinations, info strings and running text, decoded here.
4
+ .import "MdEntityTable.js" as Names
5
+
6
+ var REPLACEMENT_CHARACTER = 0xfffd
7
+ var MAX_CODE_POINT = 0x10ffff
8
+ var SURROGATE_START = 0xd800
9
+ var SURROGATE_END = 0xdfff
10
+ // The longest reference is "&CounterClockwiseContourIntegral;" (33 characters), so a window this long holds any one.
11
+ var REFERENCE_WINDOW = 34
12
+ var REFERENCE = /\\([!-\/:-@\[-`{-~])|&(?:#([0-9]{1,7})|#[xX]([0-9a-fA-F]{1,6})|([A-Za-z][A-Za-z0-9]{1,31}));/g
13
+ var REFERENCE_HERE = /^&(?:#([0-9]{1,7})|#[xX]([0-9a-fA-F]{1,6})|([A-Za-z][A-Za-z0-9]{1,31}));/
14
+
15
+ // Sample input: 10 and 0x1F600 answer their characters; 0, a surrogate and a value past U+10FFFF answer U+FFFD.
16
+ function codePointText(code) {
17
+ var valid = code > 0 && code <= MAX_CODE_POINT && (code < SURROGATE_START || code > SURROGATE_END)
18
+ return String.fromCodePoint(valid ? code : REPLACEMENT_CHARACTER)
19
+ }
20
+
21
+ // Sample input: "f&ouml;o\\*" answers "f\u00f6o*"; an unknown name such as "&nosuch;" stays as written.
22
+ function decodeReferences(text) {
23
+ if (text.indexOf("\\") < 0 && text.indexOf("&") < 0)
24
+ return text
25
+ return text.replace(REFERENCE, function (all, escaped, dec, hex, name) {
26
+ if (escaped !== undefined)
27
+ return escaped
28
+ if (name !== undefined) {
29
+ var named = Names.namedValue(name)
30
+ return named === null ? all : named
31
+ }
32
+ return codePointText(dec !== undefined ? parseInt(dec, 10) : parseInt(hex, 16))
33
+ })
34
+ }
35
+
36
+ // Sample input: "a &copy; b" at index 2 answers { text: "\u00a9", end: 8 }; "&nosuch;" and a bare "&" answer null.
37
+ function referenceAt(text, i) {
38
+ var hit = REFERENCE_HERE.exec(text.slice(i, i + REFERENCE_WINDOW))
39
+ if (hit === null)
40
+ return null
41
+ var decoded = hit[3] !== undefined ? Names.namedValue(hit[3])
42
+ : codePointText(hit[1] !== undefined ? parseInt(hit[1], 10) : parseInt(hit[2], 16))
43
+ return decoded === null ? null : { text: decoded, end: i + hit[0].length }
44
+ }
45
+
46
+ // Sample input: "", " " or " " is a piece with nothing drawn on its line.
47
+ var BLANK_PIECE = /^ *$/
48
+ var WHITESPACE_REFERENCE = /[\t\n\r\f]/g
49
+ var HARD_BREAK_PIECE = "<br />"
50
+ // What a line holding only space references keeps, so Qt reads text and the paragraph stays whole.
51
+ var WHOLE_LINE_REFERENCE = "&#32;"
52
+
53
+ // Sample input: after "a" and "\n" a line is blank, after " " it stays blank, after "b" or a token (a number) it is not; "<br />" ends a line.
54
+ function blankAfter(blank, piece) {
55
+ if (typeof piece !== "string")
56
+ return false
57
+ var cut = piece.lastIndexOf("\n")
58
+ if (cut >= 0)
59
+ return BLANK_PIECE.test(piece.slice(cut + 1))
60
+ return piece === HARD_BREAK_PIECE || (blank && BLANK_PIECE.test(piece))
61
+ }
62
+
63
+ // Sample input: lineBlank(lineState(true), ["a", "\n", " "]) answers true; ["a", " "] on a fresh state answers false; lineState(false), a fragment, starts not blank.
64
+ // The state folds each piece once, so it stays linear; lineRestart sets it afresh after a label's pieces were replaced by one.
65
+ function lineState(startsBlank) {
66
+ return { scanned: 0, blank: startsBlank }
67
+ }
68
+
69
+ function lineBlank(state, out) {
70
+ state.scanned = Math.min(state.scanned, out.length)
71
+ for (; state.scanned < out.length; state.scanned++)
72
+ state.blank = blankAfter(state.blank, out[state.scanned])
73
+ return state.blank
74
+ }
75
+
76
+ function lineRestart(state, out, piece) {
77
+ state.blank = blankAfter(false, piece)
78
+ state.scanned = out.length
79
+ }
80
+
81
+ // Sample input: a tab or a newline (the decoded text of "&#9;" and "&#10;") is drawn as one space, any other text is unchanged.
82
+ function drawnText(text) {
83
+ return text.replace(WHITESPACE_REFERENCE, " ")
84
+ }
85
+
86
+ // Sample input: "x &#32;\ny" at 3 answers { text: "", end: 8, trim: 2 }; "x&#32; \ny" at 1 answers { text: "", end: 6, trim: 0 }; "a\n&#32;\nb" at 2 with blank true answers { text: "&#32;", end: 7, trim: 0 }; "&copy;" answers null.
87
+ // A run of space references with the literal spaces inside and after it is one unit: dropped at a line end (the literal spaces after it stay to decide a hard break) and at a line start, else one raw space; a whole-line run stays one reference so Qt sees a non-blank line.
88
+ function spaceRunAt(text, i, out, blank, endsLine) {
89
+ var end = i
90
+ var lastReference = i
91
+ var hit = referenceAt(text, end)
92
+ while (hit !== null && drawnText(hit.text) === " ") {
93
+ end = hit.end
94
+ lastReference = end
95
+ while (text.charAt(end) === " ")
96
+ end++
97
+ hit = referenceAt(text, end)
98
+ }
99
+ if (lastReference === i)
100
+ return null
101
+ if ((end >= text.length && endsLine) || text.charAt(end) === "\n") {
102
+ var trim = 0
103
+ while (trim < out.length && out[out.length - 1 - trim] === " ")
104
+ trim++
105
+ return { text: blank ? WHOLE_LINE_REFERENCE : "", end: lastReference, trim: trim }
106
+ }
107
+ return { text: blank ? "" : " ", end: end, trim: 0 }
108
+ }