~/f/rstudio/RPMS.2017 ~/f/rstudio ~/f/rstudio RPMS.2017/rstudio-1.4.1717-0.0.x86_64.rpm RPMS/rstudio-1.4.1717-0.0.x86_64.rpm differ: byte 225, line 1 Comparing rstudio-1.4.1717-0.0.x86_64.rpm to rstudio-1.4.1717-0.0.x86_64.rpm comparing the rpm tags of rstudio --- old-rpm-tags +++ new-rpm-tags @@ -1543,7 +1543,7 @@ /usr/libexec/rstudio/www/js/inert-polyfill.min.js 132777e166d15884b14a891aacd314e6311f8993539e8eabf33adb57f0851eb1 0 /usr/libexec/rstudio/www/js/panmirror 0 /usr/libexec/rstudio/www/js/panmirror/panmirror.js d64dc97989c0e6f20b8ac6ebcd4f9daf4cb252beb3dcf492d9c95235bd64c2d2 0 -/usr/libexec/rstudio/www/js/panmirror/panmirror_quantum.js.map 375f8c71c8c38a13078cbbc92983ca3fb661300a43b09c44f03cf1621f4818ba 0 +/usr/libexec/rstudio/www/js/panmirror/panmirror_quantum.js.map 54252e2cccc566c72ab40a6f08d3f9da2fd7ec0dc5b0757aba3f46e1b54ac00a 0 /usr/libexec/rstudio/www/js/panmirror/prosemirror-dev-tools.min.js 9824b68839f97d36106f1149625e3267deee661ba469f556f6378e8686f031b9 0 /usr/libexec/rstudio/www/js/signin.js fbec5a5e32873687e96a4a0f7b7ebd0d502962894bd41268e97237ee25800fdc 0 /usr/libexec/rstudio/www/js/text.min.js c4a439dde03ebbabb987cb548737f63b091c31beefb5ba9fdca7ebcbc6bfb72f 0 comparing rpmtags comparing RELEASE comparing PROVIDES comparing scripts comparing filelist comparing file checksum creating rename script RPM file checksum differs. Extracting packages /usr/libexec/rstudio/www/js/panmirror/panmirror_quantum.js.map differs (UTF-8 Unicode text, with very long lines, with no line terminators) --- old//usr/libexec/rstudio/www/js/panmirror/panmirror_quantum.js.map 2021-10-23 00:00:00.000000000 +0000 +++ new//usr/libexec/rstudio/www/js/panmirror/panmirror_quantum.js.map 2021-10-23 00:00:00.000000000 +0000 @@ -1 +1 @@ -{"version":3,"sources":["src/polyfill/index.ts","src/polyfill/isconnected.ts","src/index.ts","src/polyfill/custom-event.ts","src/editor/editor.ts","src/api/cite.ts","src/api/doi.ts","src/api/ui-dialogs.ts","src/api/pandoc_attr.ts","src/api/extension.ts","src/api/pandoc_capabilities.ts","src/api/pandoc.ts","src/api/quote.ts","src/api/math.ts","src/api/code.ts","src/api/node.ts","src/api/link.ts","src/api/html.ts","src/api/events.ts","src/api/event-types.ts","src/api/pandoc_format.ts","src/api/yaml.ts","src/api/format.ts","src/api/object.ts","src/api/log.ts","src/api/basekeys.ts","src/api/selection.ts","src/api/transaction.ts","src/api/slice.ts","src/api/platform.ts","src/api/outline.ts","src/api/rmd.ts","src/api/mark.ts","src/api/text.ts","src/api/list.ts","src/api/command.ts","src/api/location.ts","src/api/ui.ts","src/api/util.ts","src/api/dom.ts","src/api/scroll.ts","src/api/navigation.ts","src/api/xref.ts","src/api/pandoc_id.ts","src/api/raw.ts","src/api/image.ts","src/api/fixup.ts","src/api/css.ts","src/api/change.ts","src/api/input_rule.ts","src/api/wrap.ts","src/nodes/yaml_metadata/yaml_metadata-title.ts","src/behaviors/outline.ts","src/behaviors/find.ts","src/behaviors/omni_insert/omni_insert.ts","src/api/completion.ts","src/behaviors/omni_insert/omni_insert-completion.tsx","src/api/omni_insert.ts","src/api/placeholder.ts","src/behaviors/completion/completion.ts","src/behaviors/completion/completion-popup.tsx","src/api/widgets/popup.tsx","src/api/promise.ts","src/behaviors/spelling/spelling-interactive.ts","src/behaviors/spelling/spelling.ts","src/api/spelling.ts","src/behaviors/spelling/spelling-realtime.ts","src/pandoc/pandoc_converter.ts","src/api/pandoc_capsule.ts","src/api/base64.ts","src/pandoc/pandoc_to_prosemirror.ts","src/pandoc/pandoc_from_prosemirror.ts","src/api/fragment.ts","src/editor/editor-extensions.ts","src/nodes/text.ts","src/nodes/paragraph.ts","src/api/paragraph.ts","src/nodes/heading.ts","src/nodes/blockquote.ts","src/nodes/code_block.ts","src/nodes/list/list.ts","src/nodes/list/list-commands.ts","src/nodes/list/list-checked.ts","src/nodes/list/list-pandoc.ts","src/nodes/image/image.ts","src/nodes/image/image-dialog.ts","src/nodes/image/image-util.ts","src/nodes/image/image-textsel.ts","src/nodes/image/figure.ts","src/api/decoration.ts","src/nodes/image/image-view.ts","src/nodes/image/image-resize.ts","src/api/widgets/widgets.ts","src/nodes/image/figure-keys.ts","src/nodes/image/image-events.ts","src/nodes/hr.ts","src/nodes/hard_break.ts","src/nodes/null.ts","src/marks/em.ts","src/marks/strong.ts","src/marks/code.ts","src/marks/link/link.ts","src/marks/link/link-command.ts","src/marks/link/link-auto.ts","src/api/clipboard.ts","src/marks/link/link-headings.ts","src/marks/link/link-popup.tsx","src/api/widgets/tooltip.ts","src/api/widgets/button.tsx","src/api/text-popup.ts","src/api/widgets/react.ts","src/api/widgets/decoration.ts","src/behaviors/select_all.ts","src/behaviors/history.ts","src/behaviors/cursor.ts","src/behaviors/clear_formatting.ts","src/behaviors/smarty.ts","src/behaviors/attr_duplicate_id.ts","src/behaviors/trailing_p.ts","src/behaviors/empty_mark.ts","src/behaviors/escape_mark.ts","src/behaviors/code_block_input.ts","src/behaviors/paste_text.ts","src/behaviors/bottom_padding.ts","src/behaviors/insert_symbol/insert_symbol-plugin-symbol.tsx","src/api/unicode.ts","src/behaviors/insert_symbol/insert_symbol-plugin.tsx","src/behaviors/insert_symbol/insert_symbol-popup.tsx","src/api/focus.ts","src/api/widgets/select.tsx","src/api/widgets/text.tsx","src/behaviors/insert_symbol/insert_symbol-grid.tsx","src/behaviors/insert_symbol/insert_symbol-grid-cell.tsx","src/behaviors/insert_symbol/insert_symbol-grid-preview.tsx","src/behaviors/insert_symbol/symbols.ts","src/behaviors/insert_symbol/insert_symbol-plugin-emoji.tsx","src/api/emoji.ts","src/api/emojis-all.ts","src/marks/emoji/emoji.ts","src/marks/emoji/emoji-completion.tsx","src/behaviors/insert_symbol/insert_symbol-emoji-skintone.tsx","src/behaviors/insert_symbol/insert_special_characters.ts","src/behaviors/nbsp.ts","src/behaviors/remove_section.ts","src/marks/strikeout.ts","src/marks/superscript.ts","src/marks/subscript.ts","src/marks/smallcaps.ts","src/marks/underline.ts","src/marks/raw_inline/raw_inline.ts","src/marks/raw_inline/raw_tex.ts","src/api/mark-highlight.ts","src/api/tex.ts","src/marks/raw_inline/raw_html.ts","src/marks/math/math.ts","src/marks/math/math-commands.ts","src/marks/math/math-transaction.ts","src/marks/math/math-highlight.ts","src/marks/math/math-popup.ts","src/marks/math/math-view.ts","src/marks/cite/cite.ts","src/api/bibliography/bibliography.ts","src/api/bibliography/bibliography-provider_local.ts","src/api/path.ts","src/api/bibliography/bibDB.ts","src/api/csl.ts","src/api/crossref.ts","src/api/csl-text.ts","src/api/bibtex/bibtex.ts","src/api/bibtex/fields.ts","src/api/bibtex/language.ts","src/api/bibtex/types.ts","src/api/bibtex/formatting.ts","src/api/bibtex/characters.ts","src/api/bibliography/bibliography-provider_zotero.ts","src/api/zotero.ts","src/marks/cite/cite-completion.tsx","src/api/widgets/completion.tsx","src/marks/cite/cite-bibliography_entry.ts","src/marks/cite/cite-highlight.ts","src/marks/cite/cite-completion_doi.tsx","src/api/widgets/completion-detailed.tsx","src/marks/cite/cite-doi.ts","src/marks/cite/cite-popup.tsx","src/marks/cite/cite-commands.ts","src/behaviors/insert_citation/insert_citation.tsx","src/api/widgets/tag-input.tsx","src/api/widgets/navigation-tree.tsx","src/api/widgets/dialog-buttons.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel.ts","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-bibliography.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-typeahead-search.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-list.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-list-item.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-doi.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-latent-search.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-list-item-detailed.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-crossref.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-pubmed.tsx","src/api/pubmed.ts","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-datacite.tsx","src/api/datacite.ts","src/behaviors/insert_citation/insert_citation-bibliography-picker.tsx","src/api/widgets/checkbox-input.tsx","src/marks/span.ts","src/marks/xref/xref.ts","src/marks/xref/xref-completion.tsx","src/marks/xref/xref-popup.tsx","src/marks/raw_inline/raw_html_comment.ts","src/marks/shortcode.ts","src/nodes/footnote/footnote.ts","src/api/shortcode.ts","src/nodes/footnote/footnote-editor.ts","src/nodes/footnote/footnote-transaction.ts","src/nodes/raw_block.ts","src/nodes/yaml_metadata/yaml_metadata.ts","src/nodes/yaml_metadata/yaml_metadata-capsule.ts","src/nodes/rmd_chunk/rmd_chunk.ts","src/nodes/rmd_chunk/rmd_chunk-image.ts","src/nodes/rmd_chunk/rmd_chunk-capsule.ts","src/nodes/div.ts","src/nodes/line_block.ts","src/nodes/table/table.ts","src/nodes/table/table-commands.ts","src/nodes/table/table-nodes.ts","src/nodes/table/table-pandoc.ts","src/nodes/table/table-columns.ts","src/nodes/table/table-capsule.ts","src/nodes/table/table-contextmenu.ts","src/nodes/table/table-paste.ts","src/nodes/definition_list/definition_list.ts","src/nodes/definition_list/definition_list-commands.ts","src/nodes/definition_list/definition_list-insert.ts","src/nodes/definition_list/definition-list-keys.ts","src/nodes/definition_list/definition_list-inputrule.ts","src/api/position.ts","src/nodes/definition_list/definition_list-pandoc.ts","src/nodes/shortcode_block.ts","src/nodes/html_preserve.ts","src/optional/ace/ace.ts","src/api/cursor.ts","src/optional/ace/ace-render-queue.ts","src/optional/ace/ace-placeholder.ts","src/optional/ace/ace-node-views.ts","src/behaviors/attr_edit/attr_edit.ts","src/behaviors/attr_edit/attr_edit-command.ts","src/behaviors/attr_edit/attr_edit-decoration.tsx","src/editor/editor-theme.ts","src/editor/editor-images.ts","src/editor/editor-menus.ts","src/api/table.ts","src/editor/editor-schema.ts"],"names":["_b0ea","f","r","id","cached","m","exports","Object","isFrozen","input","default","module","editor_1","Editor","UITools","mod","__esModule","value","custom_event_1","__importDefault","isconnected_1","t","_","label","ops","push","op","pop","trys","body","call","thisArg","e","y","done","__spreadArrays","this","s","i","il","arguments","length","Array","k","a","j","jl","defineProperty","prosemirror_inputrules_1","prosemirror_keymap_1","prosemirror_model_1","prosemirror_state_1","prosemirror_view_1","prosemirror_utils_1","cite_1","ui_dialogs_1","find_1","completion_1","spelling_interactive_1","spelling_realtime_1","pandoc_converter_1","EditorCommands","command_1","EditorCommandId","attr","propsToInput","attrPropsToInput","inputToProps","attrInputToProps","pandocAutoIdentifier","text","pandoc_id_1","image","validUnits","percentUnit","css_1","kPercentUnit","unitToPixels","image_1","pixelsToUnit","roundUnit","format","parseFormatConfig","pandoc_format_1","pandocFormatConfigFromCode","citation","citeUI","PluginKey","parent","context","options","pandocFormat","pandocCapabilities","_this","maxContentWidth","events","events_1","DOMEditorEvents","keybindings","initExtensions","editorSchema","extensions","EditorState","create","initialDoc","attributes","dispatchTransaction","bind","EditorDOMParser","schema","view","dom","add","editor_theme_1","defaultTheme","PandocConverter","server","pandoc","setAttribute","addEventListener","event_types_1","ScrollEvent","pandocFmt","editor","_a","spellCheck","codeEditor","rmdImagePreview","hideFormatComment","className","codeChunks","bookdownXRef","bookdownPart","blogdownMathInCode","rmdExtensions","hugoExtensions","__assign","shortcodes","docTypes","ui","images","defaultImages","omni_insert","sent","resolve","event","handler","subscribe","eventName","title","setTitle","state","setMarkdown","markdown","emitUpdate","Promise","doc","line_wrapping","unrecognized","unparsed_meta","loc","tr_1","i_1","getMarkdownTr","canonical","location","pandocConverter","toProsemirror","result","isInitialDoc","plugins","updateState","getEditingLocation","pos","nodeSize","dispatch","applyFixups","fixup_1","FixupContext","Load","emitEvent","StateChangeEvent","tr","getMarkdownCode","prototype","attrs","initial","getMarkdown","__generator","code","outline_1","getEditingOutlineLocation","getHTML","getTitle","getSelection","navigation_id","navigationIdForSelection","setEditingLocation","outlineLocation","previousLocation","getOutline","getFindReplace","selectCurrent","selectFirst","selectNext","selectPrevious","replace","getSpellingDoc","pandocMarks","spelling","spellingInvalidateAllWords","invalidateAllWords","spellingInvalidateWord","word","invalidateWord","extensionFixups","getSelectedText","replaceSelection","marks","selection","$from","replaceSelectionWith","trSetSel","setSelection","sel","getYamlFrontMatter","nodes","yaml_metadata","yaml_1","yamlFrontMatter","applyYamlFrontMatter","yaml","focus","blur","insertChunk","chunkPlaceholder","rowOffset","colOffset","navigate","type","recordCurrent","animate","NavigateEvent","nav","resize","applyFixupsOnResize","ResizeEvent","initFn","getMenus","commands","commandKeys","map","command","keymap","isActive","isEnabled","plural","execute","keepFocus","applyTheme","theme","classList","toggle","darkMode","setMaxContentWidth","maxWidth","minPadding","minContentPadding","syncContentWidth","setKeybindings","keyBindings","reconfigure","createPlugins","getEditorFormat","getPandocFormat","getPandocFormatConfig","isRmd","pandocFormatConfigFromDoc","lastTrSelectionOnly","selectionSet","docChanged","apply","storedMarksSet","getMeta","transaction_1","kFixupTransaction","UpdateEvent","outline_2","previousOutline","OutlineChangeEvent","DispatchEvent","eventType","detail","emit","editor_extensions_1","pandocExtensions","navigation","registerCompletionExtension","register","omni_insert_1","omniInsertExtension","omniInserters","markFilter","registerRealtimeSpelling","registerPlugins","realtimeSpellingPlugin","baseKeysPlugin","baseKeys","appendTransactionsPlugin","appendTransactions","hooks","Plugin","inputRulesPlugin","input_rule_1","markInputRuleFilter","plugin","inputRules","rules","handleTextInput","props","from","to","domEventsPlugin","key","handleDOMEvents","FocusEvent","keydown","prefs","tabKeyMoveFocus","pluginKeys","forEach","keys","ctrlKeyCodes","keyCombo","match","keyCode","toUpperCase","prosemirrorKeydownHandler","keydownHandler","keybindingsPlugin","keyEvent","ctrlKey","keyCommand","defaultKeys","clientWidth","applyPadding","LayoutEvent","fixups","fixup","nodeFromJSON","content","__awaiter","fromProsemirror","outlineNode","reverse","find","node","_super","DOMParser","fromSchema","parse","parseSlice","preserveWhitespace","kInvalidCiteKeyChars","createUniqueCiteId","existingIds","baseId","charCodeAt","char","asciiOnlyBaseId","includes","proposedId","count","safeBaseId","String","fromCharCode","suggestCiteId","csl","citeIdLeading","author","family","literal","shortTitle","substr","Math","min","issued","yearIssued","datePart","formatForPreview","pairs","name","undefined","dateParts","formatIssuedDate","containerTitle","volume","page","cslAny","charAt","slice","URL","DOI","doi_1","urlForDOI","formatAuthors","authors","maxLength","_b","_c","_d","previous","endsWith","index","current","substring","array","addAuthorOrEtAl","previousAuthorStr","newAuthorStr","authorStr","etAlStr","lastSpace","lastIndexOf","etAl","date","singleDatePart","citeProps","suggestedId","previewFields","kCrossrefMatches","findDOI","token","regex","hasDOI","doi","asPandocClass","clz","asHtmlId","startsWith","asHtmlClass","kAlertTypeInfo","kAlertTypeWarning","keyvalue","classes","split","style","pandoc_attr_1","pandocAttrKeyvalueFromText","kv","join","kPandocAttrId","kPandocAttrClasses","kPandocAttrKeyvalue","separator","convertedText","inQuotes","ch","trim","line","parts","kWidthAttrib","kHeightAttrib","kStyleAttrib","kCodeBlockText","kSpanAttr","kSpanChildren","pandocAttrSpec","pandocAttrFrom","pandocAttr","pandocAttrInSpec","spec","tok","c","pandocAttrToDomAttr","marker","domAttr","el","forceAttrs","excludedNames","includedNames","hasAttribute","getAttribute","filter","val","resolveCurrent","remainder","partitioned","partition","base","extension_1","extensionIfEnabled","extension","kPandocAttrExtensions","extensionEnabled","getPandocCapabilities","getCapabilities","version","api_version","output_formats","pandoc_1","parsePandocListOutput","highlight_languages","PandocTokenType","quote_1","math_1","code_1","link_1","tokens","hasOwnProperty","isArray","mapValue","mapToken","mappedTok","tokenHasChildren","imageAttributesAvailable","link_attributes","raw_html","output","entry","kRawBlockFormat","stringifyTokens","unemoji","elem","Str","Space","SoftBreak","LineBreak","kLinkChildren","Span","Quoted","kQuoteType","stringifyMath","Code","kCodeText","forEachToken","mapTokens","tokenTextEscaped","marksByPriority","markWriters","aPriority","priority","QuoteType","DoubleQuote","quotesForType","kSingleQuotes","SingleQuote","kSingleQuoteRegEx","RegExp","begin","end","kDoubleQuotes","fancyQuotesToSimple","Inline","MathType","typeset","math","isConnected","then","timerId_1","setInterval","clearInterval","kMathType","clipboardTextParser","$context","_i","codeViews","codeViewType","codeView","createFromPastePattern","test","textNode","codeNode","nodeType","createAndFill","Slice","Fragment","n","p","canInsertNode","canInsertNodeAtPos","asSelection","$pos","d","depth","canReplaceWith","findTopLevelBodyNodes","predicate","findNodeOfTypeInSelection","foundNode","lastNode","last","nodeIsActive","findSelectedNodeOfType","findParentNode","kLinkTarget","LinkType","ids","headings","findChildren","findChildrenByType","heading","level","textContent","escapeHTMLAttribute","div","appendChild","innerHTML","kHTMLCommentRegEx","isHTMLComment","html","noEmptyAttribs","tag","attribs","selfClosing","DOMSerializer","serializeNode","generateHTML","matchPandocFormatComment","pandocFormatConfigFromYamlInCode","firstYamlBlock","object_1","findValue","yamlMarkdownOptions","yamlFormatConfig","readPandocFormatConfig","mdExtensions","formatConfig","pandocFormatConfigFromCommentInCode","keyValueRegEx","field","fields","keyValueMatch","variables_1","source","obj","toString","mode","asString","rmd_extensions","doctype","str","references","references_location","references_prefix","prefix","toLowerCase","asBoolean","parseExtensions","re","enabled","exec","splitPandocFormatString","optionsPos","indexOf","commonmarkExtensions","rawHTML","format_1","kHugoDocType","kMarkdownGithubFormat","kGfmFormat","kCommonmarkFormat","kCommonmarkXFormat","yamlMetadataNodes","pandocFormatConfigFromYamlInDoc","foundFirstRawInline","config","pandocFormatConfigFromCommentInDoc","warnings","baseName","formatOptions","variant","validOptionNames","fullName","includeTexMathDollars","invalidFormat","invalidOptions","pandocMode","kMarkdownMmdFormat","kMarkdownStrictFormat","kMarkdownVariants","listExtensions","option","pandocFormatWith","hasFencedCodeBlocks","backtick_code_blocks","fenced_code_blocks","isYamlMetadataNode","kYamlMetadataTitleRegex","firstYaml","firstYamlNode","yamlText","updatedYaml","replaceRangeWith","updatedYamlNode","insert","titleFromYamlMetadataNode","titleMatch","yamlMetadataNameValueRegex","valueMatch","parseYaml","kFirstYamlBlockRegex","yamlCode","js_yaml_1","safeLoad","onWarning","log_1","logException","stripYamlDelimeters","yamlParsed","safeDump","object","some","ignoreKey","homeKey","editingNode","head","coordsAtPos","beginDocPos","isOnPreviousLine","setTextSelection","endKey","node_1","editingRootNode","start","endDocPos","top","bottom","arrowBodyNodeBoundary","dir","endOfTextblock","selection_1","selectionIsBodyTopLevel","side","$head","nextRootNode","editingRootNodeClosestToPos","nextPos","currentRootNode","BaseKey","Enter","prosemirror_commands_1","splitBlock","liftEmptyBlock","createParagraphNear","Backspace","selectNodeBackward","joinBackward","deleteSelection","Tab","ShiftTab","Delete","selectNodeForward","joinForward","platform_1","kPlatformMac","Home","End","ArrowLeft","ArrowUp","ArrowDown","ModArrowDown","endTopLevelBodyNodeBoundary","undoInputRule","x","commandMap","baseKey","unshift","values","_e","isTextblock","cursorOffset","parentOffset","nodeText","prosemirror_gapcursor_1","selectionIsWithinRange","range","anchor","nodeWithPos","selectionHasRange","parentNode","GapCursor","NodeSelection","selectionIsEmptyParagraph","slice_1","kPasteTransaction","kSetMarkdownTransaction","kNavigationTransaction","kInsertSymbolTransaction","kInsertCompletionTransaction","MarkTransaction","addMark","mark","removeStoredMark","insertText","transactionsDocChanged","transactions","transaction","transactionsChangeSet","oldState","newState","transactions_1","changeSet","addSteps","mapping","maps","complete","oldSize","old","childCount","curSize","cur","outer","scan","offset","child","sameMarkup","nodesBetween","size","step","sliceContentLength","handlers","handlers_1","nodeAt","nodeFilter","haveChange","changes","change","fromA","toA","checkForChange","append","_loop_1","handlers_2","trTransform","prosemirror_transform_1","Transform","transactionsAreTypingChange","hasNode","descendants","navigator","platform","outlineNodes","bodyNodes","bodyNode","bullet_list","ordered_list","list_item","listItemNode","rmd_chunk","rmdChunkNode","isOutlineNode","kYamlMetadataOutlineItemType","itemsWithPos","getDocumentOutline","item","active","position","kRmdchunkOutlineItemType","chunk","rmd_1","rmdChunkEngineAndLabel","kHeadingOutlineItemType","foundActive","items","getOutlineNodes","findParentNodeOfType","table","activeRmdChunk","rmdNode","rmdChunk","previousRmdChunks","chunks","rmdChunkNodes_1","lines","trimLeft","meta","matchLang","lang","idx","canInsertRmdChunk","insertRmdChunk","toggleBlockType","paragraph","list_1","precedingListItemInsertPos","offsetChars","reduce","rmdText","util_1","uuidv4","prevListItemPos","precedingListItemInsert","selPos","activeChunk","localeCompare","sensitivity","kEvalFalseRegEx","haveTableCellsWithInlineRcode","table_cell","table_header","cell","rangeHasMark","markedNode","markedRange","mark_1","getMarkRange","textBetween","text_1","link","startIndex","startPos","endIndex","isInSet","endPos","markIsActive","empty","storedMarks","markItem","markType","findChildrenByMark","removeMark","validLength","nd","markRange","detectAndApplyMarks","mergedTextNodes","_node","_pos","allowsMarkType","refText","lastIndex","textNodes","nodeIndex","isText","str1","str2","ListType","extendStatics","__extends","b","setPrototypeOf","__proto__","__","constructor","assign","prosemirror_schema_list_1","ui_1","ProsemirrorCommand","omniInsert","MarkCommand","toggleMarkType","NodeCommand","BlockCommand","blockType","toggleType","WrapCommand","wrapType","toggleWrap","scrollIntoView","InsertCharacterCommand","codeRange","defaultToggleMark","pandocAttrAvailable","wrapIn","listType","itemType","blockRange","$to","parentList","isList","validContent","setNodeMarkup","tight","listSpacing","kListSpacingTight","exitNode","sameParent","$anchor","allowKey","endCaptionPos","above","after","abs","dom_1","outlineItemSimillarToNode","outlineItem","docOutlneNode","nodeA","nodeB","scrollTop","docOutlineLocationNode","documentOutline","docOutlineNode","locationIsBetweenDocOutlineNodes","restoreSelection","scroll_1","scrollToPos","cs","getComputedStyle","asNumber","parseFloat","paddingX","paddingLeft","paddingRight","paddingY","paddingTop","paddingBottom","borderY","borderTopWidth","borderBottomWidth","width","offsetWidth","borderX","height","offsetHeight","onElementRemoved","container","onRemoved","mutationsList","mutation","removedNodes","center","parentDiv","findParentNodeOfTypeClosestToPos","resultPos","before","resultNode","nodeDOM","scroller","zenscroll_1","createScroller","containerEl","duration","onDone","intoView","HTMLElement","editingRoot","xref_1","navigateToId","navigateToHref","href","navigateToXRef","xref","xrefPosition","xrefPos","prevPos","max","dest","parentElement","navigateToPos","NavigationType","navigateTo","Pos","Id","Href","navigateToHeading","XRef","raw_1","xrefKey","suffix","colonPos","xrefTypeAndId","xrefInfo","id_1","locator_1","xrefPositionLocators","markType_1","hasXRef","h2","headingLocator","h3","h4","h5","h6","fig","nodeTypes","rmdChunkHasXRef","tab","kTexFormat","cnj","thereomLocator","def","engine","pattern","pandocAsciify","newch","chars","len","asciify","gfmAutoIdentifier","editRawBlockCommand","raw_block","setBlockType","action","rawBlock","raw","prevSel","createRawNode","asyncEditRawBlock","containerWidth","kPixelUnit","ImageType","isValidImageSizeUnit","unit","kValidUnits","imageSizePropWithUnit","prop","isNaturalAspectRatio","dims","defaultValue","naturalWidth","naturalHeight","pixels","round","attrib","_match","p1","p2","removeStyleAttrib","extractSizeStyles","keyvalues","newKeyvalues","getValue","pair","_attrib","setProperty","replaceClassWithStyle","contains","remove","removeAttribute","children_1","children","EditorChangeType","diff_match_patch_1","diffChars","timeout","dmp","diff_match_patch","Diff_Timeout","diff_main","diff","DIFF_INSERT","Insert","DIFF_EQUAL","DIFF_DELETE","regexp","getAttrs","InputRule","Function","textStart","delete","markInputRule","delimiterMarkInputRule","prefixMask","delim","contentPattern","textEnd","maskOffset","noInputRules","marksWithNoInputRules","marksInRange_1","maskedMarkTypes","maskedMarkTypes_1","conditionalWrappingInputRule","wrappingRule","wrappingInputRule","joinPredicate","wrapSentencesTransform","sentence","hardBreak","hardBreakPos","wrapSentences","titleFromState","yamlNodes_2","yamlMetadataTitlePlugin","init","_config","foundTitle","titleLine","yamlNode","hasOutlineIdsTransaction","usedIds","Set","outlineId","setMeta","GoToNextSection","goToOutlineCommand","GoToPreviousChunk","editorOutline","transactionsHaveChange","transactionsAffectOutline","targetType","outline","target","navigation_1","sequence","Map","rootOutlineItem","defaultLevel","typename","sequenceLast","getState","FindPlugin","instance","DecorationSet","updating","update","prevState","clearResultObserver","isResultSelected","scrollToSelectedResult","decorations","resultElement","resultObserverTimer","term","escape","updateResults","selectResult","afterSelection","matchesTerm","selectedText","wrap","searchTo","decorationSet","withResultUpdates","searchFrom","nextDecoration","lastDecoration","tr_3","decoration","tr_4","selectionMarks","marksAcross","replaceAll","replaced","hasTerm","tr_5","clear","kAddToHistoryTransaction","resultDecorations","search","findRegEx","Decoration","inline","class","TextSelection","watchForSelectedResult","MutationObserver","records","observer","ele","isResultNode","observe","childList","window","setTimeout","resultObserver","disconnect","clearTimeout","querySelector","scrollElement","nextParent","offsetParent","caseSensitive","findPlugin","inclusive","parseDOM","toDOM","readers","writer","writeInlines","OmniInsertCommand","inputRuleFilter","completionHandlers","omni_insert_completion_1","omniInsertCompletionHandler","OmniInsert","selectionAllowsCompletions","kCompletionDefaultMaxVisible","prevHandler","scope","Node","replacement","omniInsertCompletions","inserter","keywords","keyword","sort","thenby_1","firstBy","omniInsertGroupCompare","thenBy","omniInsertPriorityCompare","direction","completion","deleteRange","selectionOffset","removeCommandText","component","OmniInserterView","kOmniInsertRegex","isOmniInsertCommandActive","query","placeholder_1","placeholderDecoration","translateText","completions","OmniInsertGroup","placeholder","pluginKey","set","emptyNode","textBefore","completionTextBeforeCursor","prevToken","isPaste","scrollUnsubscribe","removeEventListener","clearCompletions","pluginState","handled","horizontal","completionsActive","kbEvent","insertCompletion","selectedIndex","renderCompletions","forwardKey","completionPageSize","preventDefault","stopPropagation","promise_1","PromiseQueue","resetSelection","setAllCompletions","updatedCompletions","requestVersion_1","setDisplayedCompletions","displayedCompletions","updateCompletions","completionStream_1","stream","filteredCompletions","allCompletions","requestAllCompletions_1","hideNoResults","completionPopup","completion_popup_1","createCompletionPopup","renderCompletionPopup","performCompletionReplacement","CompletionPlugin","__importStar","document","createElement","zIndex","popup","completionPopupSize","positionStyles","selectionCoords","left","innerHeight","innerWidth","cursorCoords","completionPopupPositionStyles","applyStyles","render","react_1","CompletionPopup","destroyCompletionPopup","unmountComponentAtNode","concat","popup_1","Popup","CompletionList","kCompletionDefaultItemHeight","useRef","containerRef","scrollToRow","getElementsByClassName","ref","completionCount","header","completionHeader","headerProps","message","lineHeight","colSpan","completionsHeader","itemHeight","kNoResultsHeight","noResults","completionsNoResults","verticalCompletions","itemEventHandler","completionItemCell","onClick","onMouseMove","onHover","cellWidths","maxVisible","kCompletionDefaultWidth","headerHeight","horizontalCellWidths","total","contentEditable","queue","catch","err","running","reject","dequeue","spelling_1","excludedMarks","onCheckBegin","getWords","excluded","spellingDocPlugin","createAnchor","getText","wordRange","fromCoords","toCoords","spellingDocKey","get","SpellingDocPlugin","checking","anchors","setPosition","getPosition","SpellingAnchor","onCheckEnd","excludeWord","classifier","findBeginWord","findEndWord","beginPos","classifyCharacter","currentPos","advanceToWord","endWordPos","wordText","words","breakWords","hasNext","next","shift","spellcheckerWord","kCharClassWord","kCharClassBoundary","kCharClassNonWord","spelling_2","hasFocus","realtimeEnabled","hasBeenFocused","word_1","wordDecos","decos","prosemirror_changeset_1","ChangeSet","steps","AddMarkStep","RemoveMarkStep","markStep","markRanges","removeRanges_1","fromPos","toPos","addRanges_1","fromB","toB","cursorDecos","cursor","realtimeSpellingKey","contextmenu","spellingSuggestionContextMenuHandler","focusUnsubscribe","updateSpelling","v_1","excludeCursor","ranges","rangeMap","incorrectWords_1","checkWords","wordsToCheck","incorrectWord","ranges_1","menuItems","showContextMenu","clientX","clientY","schema_1","posAtDOM","deco","from_1","to_1","word_2","suggestionList","suggestions","suggestion","menuAction","ignoreWord","pandocPreprocessors","pandocPostprocessors","pandocTokensFilters","pandocBlockReaders","pandocInlineHTMLReaders","original","autoIds","gfm_auto_identifiers","adjustedFormat","preprocessor","blockCapsuleFilters","pandoc_capsule_1","pandocMarkdownWithBlockCapsules","pandoc_to_prosemirror_1","pandocToProsemirror","ast","tokensFilters","blockReaders","inlineHTMLReaders","postprocessor","pandocOptions","referenceLocation","disabledTableTypes","disabledFormatOptions","atxHeaders","dpi","column","parseInt","wrapOptions","astToMarkdown","ext","newFormat","kBlockCapsuleSentinel","handleText","encodedBlockCapsuleRegex","flags","envelopeLen","base64_1","base64Decode","record","fieldValue","blockCapsuleSourceWithoutPrefix","capsuleFilter","p3","p4","originalPos","positions","discard","extract","defaultExtractor","capsule","base64Encode","enclose","encodedRecord","decodeBlockCapsuleText","filters","blockCapsuleTextHandler","textFilter","stripPrefix","CodeBlock","RawBlock","parsePandocBlockCapsule","blockCapsuleParagraphTokenHandler","tokenRegex","Para","codeUnits","Uint16Array","Uint8Array","buffer","bytes","binary","Parser","createHandlers","ParserState","parser","closeNode","addNode","openMark","closeMark","writeText","hasInlineHTMLWriter","writeTokens","logUnrecognized","isNodeOpen","Null","blocks","prevTok","lineBreaks","columnBreaks","sentenceBreaks","targetAst","heading_ids","hasShortcutHeadingLinks","equalsIgnoreCase","autoIdentifier","ascii_identifiers","headingIds","has","toLocaleLowerCase","Link","astBlocks","Header","pandocAttrReadAST","heading_1","kHeadingAttr","kHeadingLevel","kHeadingChildren","resolveHeadingIds","lineWrapping","targetTokens","writeToken","blockCapsule","writeNode","reader","getChildren","this_1","block","blockReaders_1","blockReader","nodeType_2","openNode","Error","code_block","kCodeBlockAttr","readers_1","stack","Mark","none","unrecognizedTokens","merged","info","isInline","addToSet","removeFromSet","openNoteNode","note","maybeMerge","sameSet","pandocFromProsemirror","apiVersion","nodeWriters","notesNode","PandocWriter","writeNodes","notes","initEscapeCharacters","write","writeSpaces","spaceAfter","output_1","spaceBefore","outputText","trimRight","writeArray","writeAttr","preventEscapeCharacters","flushTextRun","textRun_1","smart","manualEscapeCharacters","writeNote","Note","noteBody","fragment","currentChild","childIndex","markedNodes","nextNode","activeMarks","md","fragment_1","fragmentText","escapeSymbols","escaped","escapeCharacters","RawInline","withOption","fill","tex_math_single_backslash","allEscapeCharacters","emjojiMark","emoji","emojihint","paragraph_1","blockquote_1","code_block_1","figure_1","hr_1","hard_break_1","null_1","em_1","strong_1","history_1","select_all_1","cursor_1","clear_formatting_1","smarty_1","attr_duplicate_id_1","trailing_p_1","empty_mark_1","escape_mark_1","code_block_input_1","manager","ExtensionManager","paste_text_1","bottom_padding_1","insert_symbol_plugin_symbol_1","insert_special_characters_1","nbsp_1","remove_section_1","footnote_1","yaml_metadata_1","rmd_chunk_1","table_1","definition_list_1","raw_block_1","shortcode_block_1","html_preserve_1","superscript_1","code_2","codeViewClipboardPlugin","tokensFilter","inlineHTMLReader","blockCapsuleFilter","pandocReaders","collectFrom","pandocMarkWriters","pandocNodeWriters","pandocNodes","code_view","views","attrEditors","collect","appendMarkTransactions","appendMarkTransaction","collector","visitor","results","flatMap","quote","group","Plain","insertParagraph","HeadingCommand","headingCommandFn","heading1OmniInsert","heading1","heading1_dark","heading2OmniInsert","headingOmniInsert","heading2","heading2_dark","heading3","heading4OmniInsert","heading4","heading4_dark","headingName","pandocAttrSupported","pandocAttrParseDom","header_attributes","mmd_header_identifiers","headingAttrs","headingAttr","data-link","partMatch","cut","writeBookdownH1","Heading1","Heading5","Heading6","textblockTypeInputRule","kHeadingLevels","pandocAttrParseText","emptyHeadingPlaceholderPlugin","CodeBlockFormat","codeBlockFormatCommandFn","languages","code_block_dark","fenced_code_attributes","potentialLang","codeBlockProps","dialogs","editCodeBlock","applyProps","newProps","propsWithLangClass","codeBlock","tags","right","editFn","codeNodeSpec","hasAttr","codeBlockLang","attrEditFn","codeBlockAttrEdit","CodeBlockFormatCommand","exitCode","ListNumberStyle","listAttrEdit","capabilities","list_commands_1","editListPropertiesCommandFn","task_lists","fancy_lists","startnum","tasks","checked","list_pandoc_1","readPandocList","number_delim","ListNumberDelim","DefaultDelim","order","number_style","typeToNumberStyle","numberDelim","fancy","DefaultStyle","Decimal","UpperAlpha","LowerRoman","UpperRoman","Example","OrderedList","writePandocOrderedList","nodeViews","ListCommand","BulletList","bulletListOmniInsert","orderedListOmniInsert","ListItemSink","sinkListItem","ListItemLift","liftListItem","ListItemSplit","splitListItem","list_checked_1","CheckedListItemCommand","CheckedListItemToggleCommand","basekeys_1","isNotInHeading","tightFn","listItemType","autoJoin","toggleList","TightListCommand","CheckedListItemNodeView","getPos","disabled","editable","ev","contentDOM","checkedListItemCommandFn","itemNode","setItemChecked","checkedListItemToggleCommandFn","check","baseInputRule","fragmentWithCheck","raw_inline","mappedTokens","lastWasChecked","writeListItemInlines","example","childAttrs","childWithChecked","writePandocListItem","figure","imageAttributes","src","decodeURI","readPandocTitle","alt","requireHTML","writeRawMarkdown","linkTo","writeFigure","writeLink","imageInlineHTMLReader","isImage","image_util_1","inlineHTMLIsImage","imageAttrsFromHTML","imageDOMOutputSpec","imageDOMAttributes","parseFromString","imageCommand","editorUI","img","imgDimensions","selectionIsImageNode","pandocImageHandler","imagePandocOutputWriter","imageNodeAttrsSpec","imageAttr","imageAttrsFromDOM","Image","attr_edit","noDecorator","_schema","imageTextSelectionPlugin","imageEventsPlugin","imagePropsWithSizes","linkMark","Figure","editImage","units","isNaturalHeight","newImage","imageProps","insertAndSelectNode","partitionedKeyvalue","sizeWithUnit","ensureContainerWidth","imagePos","findParentNodeClosestToPos","domAtPos","resizeContainer","elementInnerDimensions","resizeEl","definition_list","convertImagesToFigure","imagesToFiguresTransform","linkAttrs","getMarkAttrs","mappedImagePos","writerHasProhibitedFigureParent","contentElement","kRawBlockContent","html_1","isSingleLineHTML","fixupContext","appendTransaction","figureKeys","image_view_1","imageNodeViewPlugins","ImageNodeView","editorEvents","unregisterWatchImg","implicitFigures","implicit_figures","resizeUI","selectOnClick","imgBroken","onerror","onclick","ondblclick","image_dialog_1","imageDialog","imageDimensionsFromImg","updateImg","figcaption","noPropagateClick","manageFigcaption","ondragstart","initResizeContainer","updateImageSize","destroy","clearSizeOnVisibleTimer","detachResizeUI","selectNode","draggable","image_resize_1","isResizeUICompatible","detach","attachResizeUI","ignoreMutation","mapResourceToURL","updateImageViewSize","isFigure","sizeOnVisibleTimer","imageContainerWidth","noImplicitFigures","emptyFigcaption","selectionInFigcaption","hide","display","minHeight","margin","widthWithUnit","heightWithUnit","overflow","incompatibleWidth","incompatibleHeight","imageNode","imgContainerWidth","updateImageNodeFromShelf","hasPercentWidth","updateImageNodeSize","shelf","onInit","onWidthChanged","onHeightChanged","onUnitsChanged","onEditImage","uiImages","widgets_1","createPopup","editorContainer","updatePosition","editorBox","getBoundingClientRect","imageBox","editingScrollContainerEl","editingRootScrollContainerElement","positionTimer","panel","createHorizontalPanel","addToPanel","widget","addHorizontalPanelCell","paddingSpan","createInputLabel","wLabel","createTextInput","inputClasses","hLabel","hInput","onchange","hAutoLabel","unitsSelect","checkboxWrapper","lockCheckbox","lockLabel","createImageButton","properties","onload","manageUnitsUI","percentSizing","isNaN","getDim","wInput","shelfSizeFromImage","setWidth","setHeight","lock","resizeShelf","sync","lockRatio","prevUnits","widthPixels","widthInUnits","handle","onSizing","onSizingComplete","setPointerCapture","pageX","movedX","startX","movedY","pageY","startY","startWidth","startHeight","onPointerUp","havePointerEvents","releasePointerCapture","pointerId","onPointerMove","onPointerDown","resizeHandle","cssFloat","marginRight","marginLeft","liftStyle","liftImgStyle","widthProp","heightProp","kAlignAttrib","verticalAlign","onDestroyed","observer_1","subtree","button","imageEl","optionEl","widthChars","atEnd","selectFigureCaption","selectFigure","Selection","near","verticalArrowCanAdvanceWithinTextBlock","isWithinEmptyCaption","parentIndex","previousNode","parentTextBlock","figureSelection","nodePos","arrowHandler","ArrowRight","clipboardEvent","clipboardData","types","clipboardUris","uris","handleImageUris","getData","dragEvent","dataTransfer","coordinates","posAtCoords","uriList","droppedUris","imageUris","uri","drop","imageDrop","handlePaste","imagePaste","Content","horizontal_rule_dark","horizontal_rule","HorizontalRule","insertNode","hrOmniInsert","br","ShiftEnter","atom","selectable","Emph","_mark","writeMark","Em","em","Strong","strong","inline_code_attributes","codeAttrs","autolink_bare_uris","citations","linkAttr","data-heading","extraAttr","kLinkTargetUrl","kLinkTargetTitle","linkCommand","onEditLink","result_1","Heading","asyncEditLink","link_dark","clipboard_1","autoLink","headingLink","linkEnd","matchText","copy","fromArray","linkText_1","attrs_1","matchedHeading_1","headingText","headingPos","linkPos","tooltip_1","button_1","linkCmd","removeLinkCmd","kMaxLinkWidth","React","LinkPopup","maxLinkWidth","openURL","clipboard","linkText","isSupported","LinkButton","showCopyButton","ImageButton","on","grav","show","tabIndex","onKeyDown","forwardRef","specKey","dismissOnEdit","makeLinksAccessible","onCmdClick","_oldState","kRestoreLocationTransaction","target_1","decorationPosition_1","decoration_1","textRangePopupDecorationPosition","editorView","ignoreSelection","stopEvent","textPopupDecorator","decorationEl","visibility","reactRenderForEditorView","links","getElementsByTagName","onkeydown","click","ReactDOM","element","editingBox","editingEl","editingBoxStyle","topPadding","popupStyle","rangeCoords","rightPos","prosemirror_history_1","history","SelectAll","selectAll","findBlockNodes","childBlocksSelection","gapArrowHandler","gapCursor","prosemirror_dropcursor_1","dropCursor","$divPos","createGapCursor","mouseEvent","clickPos","$clickPos_1","inside","divNode","stopImmediatePropagation","kFormattingMarks","markName","setStoredMarks","definition_list_term","definition_list_description","nodeRange","targetLiftDepth","liftTarget","lift","clearFormatting","enDash","ellipsis","emDash","hasAttrId","attrNode","mk","markRange_1","scannedRanges","extensionIfPandocAttrEnabled","requiresTrailingP","insertTrailingP","insertTrailingPTransform","firstChild","fencedAttributes","langAttrib","codeBlockInputRuleEnter","canApplyCodeBlockInputRule","pasteTextPlugin","bodyEl","bodyElement","toY","scrollHeight","insert_symbol_plugin_1","symbol_dark","symbol","filterPlaceholderHint","symbolGroups","symbols_1","insertSymbolTransaction","symbolCharacter","searchTerm","UnicodeSymbolDataProvider","symbolGroupNames","symbolGroup","flat","codepoint","groupName","symbols","unicode_1","parseCodepoint","filterText","filteredSymbols","fromCodePoint","Symbol","performInsertSymbol","symbolOmniInsert","InsertSymbolPlugin","isValidCodepoint","hexOnlyText","hexValue","Number","valueOf","showPopup","closePopup","focusChanged","panelPositionStylesForCurrentSelection","react_dom_1","insertSymbolPopup","editorRect","maximumTopPosition","minimumTopPosition","popupTopPosition","maximumLeftPosition","minimumLeftPosition","searchImage","searchPlaceholder","dataProvider","insert_symbol_grid_preview_1","InsertSymbolPopup","popupHeight","popupWidth","useState","setFilterText","selectedSymbolGroup","setSelectedSymbolGroup","selectedSymbolIndex","setSelectedSymbolIndex","preferenceChanged","setPreferenceChanged","symbolDataProvider","getSymbols","useMemo","filterSymbols","useEffect","focusElement","textRef","handleSelectedSymbolCommitted","onInsertSymbol","preferencesProps","onPreferencesChanged","preferenceRef","lastElement","onClose","shiftKey","focus_1","isElementFocused","gridRef","altKey","newIndex","insert_symbol_grid_1","newIndexForKeyboardEvent","gridWidth","TextInput","iconAdornment","onChange","selectRef","selectedOptions","selectedGroupName","symbolIndex","activeElement","SelectInput","characterWidth","onKeyUp","onKeyPress","onFocus","onPaste","SymbolCharacterGrid","columnWidth","floor","numberOfColumns","characterCellData","onSelectionChanged","selectedItemClassName","scrollToItem","rowIndex","symbolCharacters","react_window_1","FixedSizeGrid","columnCount","rowCount","ceil","rowHeight","itemData","SymbolCharacterCell","numberOfCells","prevRow","currentIndex","nextRow","nextPage","prevPage","itemIndex","characterGridCellItemData","onSelectionCommitted","symbolPreviewStyle","fontSize","insert_symbol_emoji_skintone_1","SymbolEmojiPreferencesPanel","bestAlias","aliases","alias","emoji_2","nodeForEmoji","kCategoryAll","emoji_1","emojiCategories","EmojiSymbolDataProvider","skinTone","emojiSkinTone","symbolForEmoji","description","hasMarkdownRepresentation","Emoji","emojiOmniInsert","emojis_all_1","emojis","emojiWithSkinTone","supportsSkinTone","emojiRaw","category","characterForSkinTone","SkinTone","Default","None","hasSkinTone","kEmojiAttr","kEmojiContent","catgegory","categories","emojiString","emojiWithSkinTonePreference","emojiFromChar","emojiAlias","kEmojis_1","emojiForAllSkinTones","Light","MediumLight","Medium","MediumDark","Dark","hint","prompt","emojiMark","emojiChar","emojiFromAlias","emojiName","emojiCompletionHandler","emojiSkintonePreferenceCompletionHandler","charLoc","skinToneEmoji","Save","markTr","markFrom","EmojiView","kEmojiCompletionRegEx","prefix_1","completions_1","setEmojiSkinTone","EmojiSkintonePreferenceHeaderView","kHeaderHeight","pref","kCellWidth","emojiText","selectedSkinTone","setSelectedSkinTone","previewEmoji","setSelectSkinTone","getCurrentSkinToneIndex","previewEmojiWithSkinTones","findIndex","nextSkinTone","selectSkinTone","commitSkinTonePreference","skinToneSelectedClass","handleButtonClick","EmDash","pastePluginKey","transformPastedHTML","highlightNode","forChangedNodes","highlightPluginKey","ReplaceStep","isRemoval","isSectionRemoval","fullySelectedDiv","divSelFrom","divSelTo","fullySelectedDivSection","Strikeout","strikeout","Superscript","superscript","Subscript","subscript","SmallCaps","Smallcaps","smallcaps","RawInlineInsertCommand","defaultFormat","outputFormats","editRawInline","raw_inline_dark","RawInlineCommand","kRawInlineFormat","kRawInlineContent","raw_attribute","rawTexMark","raw_tex","texText","texMatchLength","tex_1","texLength","addStoredMark","startTex","InsertInlineLatexCommand","TexInline","setTexSelectionAfterInsert","raw_inline_1","mark_highlight_1","markHighlightDecorations","latexHighlightingPlugin","splitInvalidatedMarks","texInputRule","braces","highlighter","decorationsForDoc","removeDecorations","addDecorations","markDecorations","rehighlightParent_1","braceLevel","isLetter","inBraces","inBrackets","bracketLevel","rawhtmlMark","endLoc","startLoc","isHTMLTag","close","void","isVoidTag","endTag","tagStartLoc","inSingleQuote","inDoubleQuote","rawHtmlInputRule","isRawHTMLFormat","writeInlineHTML","writeInlneHTML","isSingleTag","data-type","spellcheck","delimiterForType","kMathContent","delimter","mathText","delimiter","InlineMath","DisplayMath","Display","kInlineMathRegex","mathLength","startMath","math_commands_1","InsertInlineMathCommand","InsertDisplayMathCommand","singleLineDisplayMath","math_transaction_1","mathAppendMarkTransaction","math_highlight_1","mathHighlightPlugin","math_popup_1","MathPopupPlugin","math_view_1","mathViewPlugins","allowNewline","insertMathCommand","math_display_dark","math_display","displayMathOmniInsert","para","maths_1","mathRange","mathAttr","selectionIsWithin","lodash_debounce_1","updatePopup","updatePopupTimer","resizeUnsubscribe","mousemove","lastRenderedMath","$mousePos","equationPreview","rangeEndCoords","rangeStartCoords","editingElStyle","styles","inlineMath","error","autoscollPopup","popupBox","mathBottom","editorEl","mathText_1","mathjaxDiv","isActiveTab","_transactions","prevMathRange","delta","verticalArrowHandler","lodash_uniqby_1","bibliography_1","csl_1","kCiteIdBasePattern","bibManager","_event","cite_id","parsedDOI","cite_doi_1","doiFromSlice","doiText","findDoiInLocalBibliography","allowsWrites","citeIdInputRule","citeIdLen","citeIdLength","citeStart","citeEnd","readPandocCite","citeMark","cite","writeCitation","citationPrefix","suppress","citationMode","CitationMode","SuppressAuthor","citeIdMark","citationId","inTextSuffix","AuthorInText","citationSuffix","kNoteCiteRegex","kInTextCiteRegex","kInTextCiteWithSuffixRegEx","kCiteId","provider","load","performCiteCompletionReplacement","existingEntry","bibliographyFiles","writableBibliographyFiles","writableFile","insertCite","writableBiblios","thisWritableBiblio","writable","displayPath","bibliographyFile","fullPath","writableBiblioPath","isProject","project","providerKey","ensureSourcesInBibliography","idText","sources","providersWithWarnings","zoteroUseBetterBibtex","isBibTexBibliography","all","withWarning","warning","warningForProvider","yesNoMessage","every","kCitationIdRegex","citeText","idMark","BibliographyManager","zotero","prefixMatch","Cite","closeCite","parentText","beginBracketPos","cite_commands_1","InsertCitationCommand","bibliographyManager","kFindInTextCiteRegex","kFindFullCiteRegex","citeIdDashInputRule","citationDoiCompletionHandler","citationCompletionHandler","cite_highlight_1","citeHighlightPlugin","cite_popup_1","citePopupPlugin","bibliography_provider_local_1","bibliographyFileForPath","path","bibliographyTypes","defaultBiblioType","bibliographyDefaultType","displayName","kFields","weight","zoteroServer","BibliographyDataProviderZotero","refreshCollectionData","parsedYamlNodes","docPath","providersNeedUpdate","providersEntries","idSort","parseYamlNodes","providers","getDefaultResourceDir","prev","curr","isWritable","hasSources","allSources","kLocalBiliographyProviderKey","sourcesForProvider","sourcesForProviderCollection","collectionKey","localSources","bibFile","localProviders","providerName","prov","dataProviderBibTeX","generateBibTeX","bibDB_1","toBibTeX","warningMessage","warningProvider","findIdInLocalBibliography","searchProviderCollection","searchProvider","searchSources","limit","searchIndex","kSearchOptions","$or","prime","resourcePath","yamlBlocks","parsedYamls","refBlockParsedYamls","parsedYaml","lastReferenceParsedYaml","referenceBlockFromYaml","getBibliography","bibliographiesAbsolute","refBlock","etag","bibliography","updateIndex","collections","collectionKeys","itemsForCollection","project_biblios","kPermissableFileExtensions","projectBiblio","path_1","getExtension","bibliographyFilesFromDocument","BibliographyDataProviderLocal","bibliographyFilesFromDoc","bibliographyValues","valueFromYamlText","bibliographiesRelative","biblioNode","createBiblographyYamlNode","updatedNode","yamlWithBib","addBibliographyToYamlNode","firstBlock","joinPaths","root","expandPaths","rootPath","isAbsolute","isWindows","isWinPathSeparator","CHAR_COLON","CHAR_FORWARD_SLASH","fileName","lastDot","biblatex_csl_converter_1","BibTypes","bibTypeKey","cslType","bibType","misc","keySortOrder","publisher","enumerableCSL","aOrder","bOrder","cslKey","biblatex","BibFieldTypes","bibFieldKey","bibField","cslFieldName","bibFieldDatas","bibFieldData","nodeValue_1","cslDate","edtfDate","cslDateToEDTFDate","options_1","optionKey","options_2","rangeArray","bibDBFieldName","required","optional","eitheror","shouldIncludeField","bibObject","pmNode","csl_text_1","cslTextToProsemirrorNode","nodes_1","BibLatexExporter","bibDB","traditionalNames","cslToBibDB","bibtex_1","bibDbToBibTeX","crossref_1","ensureValidCSLType","cslTypes","crossRefTypeToCSLType","sanitizeForCiteproc","sanitizeProperties","property","license","abstract","cslFromDoc","cslParsedYamls","part","partStr","_f","_g","_h","_j","_k","_l","_m","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","article","articleJournal","articleMagazine","articleNewspaper","review","reviewBook","article_dark","bill","legislation","legalCase","treaty","legal","legal_dark","book","manuscript","thesis","book_dark","broadcast","broadcast_dark","dataset","data","data_dark","entryDictionary","entryEncylopedia","entry_dark","image_dark","map_dark","motionPicture","movie","movie_dark","musicalScore","song","song_dark","post","postWeblog","webpage","web","web_dark","paperConference","interview","pamphlet","personalCommunication","report","speech","other","other_dark","chapter","graphic","patent","kCrossrefItemsPerPage","imageForCrossrefType","crossRefTypes","monograph","journalArticle","journalVolume","journal","journalIssue","proceedingsArticle","dissertation","reportSeries","editedBook","bookChapter","bookSet","bookTrack","referenceBook","referenceEntry","postedContent","standard","standardSeries","peerReview","proceedingsSeries","proceedings","prettyType","bookSection","bookPart","bookSeries","kCslDOMParser","cslDOMParser","tagSpec","sup","sub","spanSpec","nocase","keysToExport","entryObject","csl_type","types_1","typeMapping","bibtex","bib_type","bibTexType","entry_key","fieldsForExport","fieldKey","fields_1","FieldMap","fieldType","typeReader","bibtexKey_1","outputFields","bibtexValue","year","month","formatText","formatRange","formatKey","escapeNonAscii","bibtexEntry","bibtexEntries","toBibtex","entries","bibTexStr","sortedKeys","rawValue","booktitle","number","codePointAt","characterMap","characters_1","ungrouped","latex","thisNodeMarks","closing","closeTags","lastNodeMarks","closeTag","formatting_1","FormattingTags","open","opening","formattedText","verbatim","doNotEscape","names","formattedNames","given","bookauthor","language_1","lanagugeMappings","series","swedish","thai","BibTextTypes","phdthesis","unpublished","inproceedings","techreport","fieldsRequired","fieldsOptional","booklet","fieldsEitherOr","character","decimal","731","780","__rest","kZoteroProviderKey","_ui","_resourcePath","useCache_1","newCollections","specResult","zoteroConfig","getCollections","collectionSpecs","status","collection","existingCollection","allCollections","col","allCollectionSpecs","toBibliographyCollection","hasUpdates","zoteroSpec","parentKey","bibliographyPaths","bibTeX","betterBibtexExport","zotero_1","kZoteroBibTeXTranslator","libraryID","managerEntries","loadedEntries_1","cite_bibliography_entry_1","entryForSource","kCitationCompleteScope","citationCompletions","_state","tokenWithoutEndPunctuation","searchAllSources","insertCitation","CompletionWarningHeaderView","BibliographySourceView","kCiteCompletionWidth","authorsFormatter","issuedDateFormatter","CompletionItemView","imageAdornment","htmlTitle","bibliography_provider_zotero_1","completion_detailed_1","cslEntry","CompletionItemDetailedView","subTitle","bibMgr","citeId","citationHTML","getDocumentPath","JSON","stringify","previewHtml","finalHtml","rootDiv","classNames","ensureSafeLinkIsPresent","url","urlForCitation","CitePopup","Citation","alreadyInCite","includeWrapper","wrapperText","preCiteIdRange","endOfWrapper","initialSelectionKey","selectionKey","setCitationDefaultInText","intextCitationStyle","bibliographySources","bibliographySources_1","citeIdText","performInsertCitations","initiallySelectedNodeKey","doiSourcePanel","crossrefSourcePanel","crossref","pubmedSourcePanel","pubmed","bibliographySourcePanel","InsertCitationPanel","onOk","requiresProgress","bibliographySourceProviders","sourceProvider","isSlowGeneratingBibliographySource","showProgress","toBibliographySource","hideProgress","onCancel","cancel","configuration","insertCitationConfiguration","setInsertCitationConfiguration","treeNode","citationsToAdd","defaultNode","selectedPanelProvider","statusMessage","placeHolderMessage","existingBibliographyFile","createBibliographyFile","changeExtension","citationDefaultInText","setInsertCitationPanelState","insertCitationPanelState","updatedState","displayedCitations","panelRef","defaultResults","insert_citation_source_panel_1","CitationSourceListStatus","streamTimerId","panelProvider","panelForNode","selectedNode","setSelectedPanelProvider","refreshSearchCallback","typeAheadSearch","existingCitationIds","searchResult","existingState","panelHeight","onSearchTermChanged","memoizedTypeaheadSearch","onExecuteSearch","searchCanceled","inProgress","progressMessage","onAddCitation","newCitations","deleteCitation","filteredCitations","totalCitationCount","panelToDisplay","citationProps","navigation_tree_1","NavigationTree","treeSourceData","suggestedPanel","tag_input_1","TagInput","mergedCitationsToAdd","displayText","isEditable","isIdEditable","targetSource","currentlySelectedCitation","onTagValidate","insert_citation_bibliography_picker_1","CitationBibliographyPicker","onCreateBibliographyFileNameChanged","biblographyFile","dialog_buttons_1","DialogButtons","nodeForKey","childNode","selected","toAdd","Tag","onTagDeleted","onTagChanged","editing","setEditing","editingText","setEditingText","setDisplayText","restoreFocusAfterCancel","useLayoutEffect","editTextInput","onEditClick","validationMessage","alert","kAlertTypeError","showingValidationError","commitTagEdit","pathToNode","expanded","visibleNodes","vizNodes","fixedList","stepNode","onSelectedNodeChanged","FixedSizeList","itemCount","itemSize","showSelection","preventFocus","indentLevel","indentStyle","nodeList","allNodes","increment","containsChild","existingSource","imageForType","finalId","rootImageForProvider","zotero_root","bibligraphy","toTree","containers","folderImage","treeMap","currentNode","hasParent","rootNodes","zotero_collection","bibligraphy_folder","folderImageForProvider","local_sources","providerNodes","collectionKeyForNode","useBetterBibTex","zoteroOverlay","toCitationListEntries","_searchTerm","_selectedNode","_existingCitationIds","insert_citation_source_panel_typeahead_search_1","CitationSourceTypeheadSearchPanel","onSelectedIndexChanged","onConfirm","listContainer","searchBoxRef","focusSearch","insert_citation_source_panel_list_1","CitationSourceList","focusPrevious","insert_citation_source_panel_list_item_1","CitationSourcePanelListItem","currentCitation","handleListKeyDown","handleIncrementIndex","itemsPerPage","onBlur","onRemoveCitation","showSeparator","itemProvider","search_progress","citationListData","citationEntry","maxIdLength","e_1","matchExistingSourceCitationListEntry","toCitationListEntry","errorForStatus","insert_citation_source_panel_list_item_detailed_1","pasted","performSearch","lastSearch","initialFocusSet","CitationSourcePanelListItemDetailed","alreadyAdded","doiServer","dedupeCitationIds_1","citationEntries","works","work","coercedCSL","crossrefWork","crossrefWorkTitle","pubMedResult","docs","pubmed_1","pubTypes","doiResult","sanitizedCSL","noResultsMessage","sortFirstAuthor","pubDate","creators","creator","fetchCSL","dataciteResult","familyName","publicationYear","span","getSelectionMarkRange","native_spans","data-span","all_symbols_escapable","stripRefBackslashTransform","potentialXRef","bookdownXRefUI","xref_popup_1","xrefPopupPlugin","xref_completion_1","xrefCompletionHandler","insertRef","cross_reference_dark","cross_reference","FuseIndex","xrefCompletions","xrefView","xrefs","fuse","createIndex","typeQuery","colonLoc","isCaseSensitive","shouldSort","withSavedDocument","refs","kXRefTypes","generic","h1","xrefs_1","xref_2","xrefForId","kMaxWidth","file","InsertHTMLCommentCommand","HTMLComment","raw_html_comment","comment_dark","comment","data-format","isComment","kHTMLCommentMarkRegEx","removeInvalidatedMarks","commentMarkAttribs","detectAndCreateShortcodes","shortcode_1","kShortcodeRegEx","shortcode","noSpelling","excludes","markTr_1","kShortcodePattern","writePandocNote","noteNode","footnote","footnoteOmniInsert","References","footnote_dark","selectedFootnote","findNoteNode","data-ref","data-content","footnote_editor_1","footnoteEditorActivationPlugin","footnoteEditorNodeViews","filterTransaction","footnote_transaction_1","footnoteFilterTransaction","footnoteSelectNoteAppendTransaction","Footnote","canInsertFootnote","edit","selectedNote","footnoteNode","ref_1","matching","ref_2","nodeDecoration","findFootnoteNode","NoteEditorView","footnoteEditorKeyDownHandler","firstNode","lastTextBlock","selectFootnote","findNotesContainer","noteWithPos","footnotes","findAllFootnotes","notesContainer","findAllNotes","toJSON","newNote","fromJSON","allNotes","footnoteFixupTransform","activeNote","RawBlockCommand","rawAttribute","textTrimmed","isSingleLineTex","readPandocRawBlock","isSingleChildParagraph","isParagraphWrappingMultilineRaw","rawTok","FormatRawBlockCommand","HTMLBlock","kHTMLFormat","Blocks","html_block_dark","html_block","TexBlock","tex_block_dark","tex_block","YamlMetadata","yaml_block_dark","yaml_block","yaml_metadata_capsule_1","yamlMetadataBlockCapsuleFilter","YamlMetadataCommand","yaml_metadata_title_1","RmdChunkCommand","Chunks","RChunkCommand","r_chunk_dark","r_chunk","PythonChunkCommand","python_chunk","BashChunkCommand","bash_chunk_dark","bash_chunk","d3_chunk","D3ChunkCommand","StanChunkCommand","StanCodeChunk","stan_chunk","md_index","firstLineMeta","lineNumbers","lineNumberFormatter","lineNumber","lineCount","bookdownTheorems","kBookdownDocType","rmd_chunk_capsule_1","rmdChunkBlockCapsuleFilter","RcppChunkCommand","SQLChunkCommand","rmd_chunk_image_1","RmdChunkImagePreviewPlugin","uiContext","imagePreviewDecorations","isRmdChunkNode","firstLine","widthMatch","width_1","stripQuotes","alignCenter_1","imagePath_1","unsubscribe","watchResource","kBlockCapsuleTextRegEx","kBlockCapsuleType","isFullDivSelection","createDiv","editDiv","defining","data-div","divCommand","Div","indexAfter","canApplyDivInputRule","attribMatch","attrProps","DivCommand","div_dark","LineBlock","line_block","line_block_dark","table_captions","grid_tables","multiline_tables","table_nodes_1","tableNode","tableCaptionNode","tableCellNode","tableHeaderNode","tableRowNode","TableInsertTable","table_commands_1","insertTable","insertTableOmniInsert","TablePreviousCell","prosemirror_tables_1","goToNextCell","TableColumnCommand","TableAddColumnAfter","addColumns","TableAddColumnBefore","TableRowCommand","TableAddRowAfter","addRows","TableAddRowBefore","TableDeleteRow","deleteRow","TableColumnAlignmentCommand","TableAlignColumnRight","CssAlignment","Right","TableAlignColumnCenter","Center","TableAlignColumnDefault","TableToggleCaptionCommand","headerOptional","columnResizing","handleWidth","table_paste_1","tablePaste","table_contextmenu_1","TableContextMenuPlugin","multiline","ModEnter","table_container","table_caption","numRows","rows","cells","cellType","tableCaption","tableContainer","selectionPos","cols","inactive","caption","Lists","table_dark","deleteTable","columns","rect","selectedRect","addRow","alignments_1","rowNode","cellPos","cellOffset","cellNode","align","colIndex","TableToggleHeaderCommand","TableToggleHeader","toggleHeader","isInTable","TableToggleCaption","tr_2","left_1","right_1","selectionCell","tableStart","TableMap","CellSelection","rectBetween","$anchorCell","$headCell","tableGroup","getFromDOM","textAlign","kDefaultCellClasses","Table","table_pandoc_1","readPandocTable","writePandocTableContainer","table_capsule_1","tableBlockCapsuleFilter","colgroup","childElementCount","colpercents","firstRow","colWidth","colWidths","table_columns_1","tableColumnWidths","writePandocTable","writePandocTableCaption","table_row","writePandocTableNodes","writePandocTableHeaderNodes","alignments","AlignLeft","Left","AlignRight","AlignCenter","AlignDefault","tableToken","ColWidth","columnPercents","parseRow","row","captionBlock","lastChild","widths","ColWidthDefault","headerCut","tableColumnAlignments","colwidth","defaultWidth","totalWidth","tables_1","kTableBlockCapsuleType","capsuleText","DefinitionList","definition","unparsedTable_1","TableDeleteColumn","subMenu","TableAlignColumnLeft","menuVisible","sliceHasNode","fixupTableWidths","currentColumn","columnAlignments","headerPos","childPos","definition_lists","definition_list_pandoc_1","writePandocDefinitionListDescription","readPandocDefinitionList","writePandocDefinitionList","definition_list_inputrule_1","definitionInputRule","definition_list_insert_1","insertDefinitionListAppendTransaction","emptyNodePlaceholderPlugin","termText","insertTermText","insertDefinitionList","createDefinitionDescription","definition_list_dark","InsertDefinitionList","InsertDefinitionListItemCommand","createFn","dlTypes","insertPos","InsertDefinitionTerm","InsertDefinitionDescription","lists_1","listPos","list","listParent","listIndex","definitionList","prevCursor","definitionListEnter","parentTerm","selectionNode","isParagraph","isEmpty","position_1","isLastChild","descriptionNode","endOfDescriptionEnter","isOnlyChild","emptyTermBackspace","emptyDescriptionBackspace","advancePos","definitionListShiftTab","backwardPos","prevNode","listNode","depthOffset","isParagraphAfterParagraph","prevPara","writeCurrent","writePandocDefinitionListTerm","kShortcodeBlockCapsuleType","_p3","shortcode_block","borderColorClass","isParaWrappingShortcode","Shortcode","shortcodeNode","htmlPreserveBlockCapsuleFilter","kHtmlPreserveBlockCapsuleType","handleToken","html_preserve","ace_placeholder_1","ace_node_views_1","acePlugins","aceRenderQueue","ace_render_queue_1","AceRenderQueue","aceNodeViews","AceNodeViews","AceNodeView","handleClick","editorOptions","gapCursorPending","selectionMarker","queuedSelection","subscriptions","renderedWidth","scrollRow","mouseDown","preview","AcePlaceholder","getElement","updateMode","onEditorDispatch","initEditor","renderQueue","unsub","_decos","editSession","getDocument","computeChange","AceRange","fromPoints","indexToPosition","findMarkers","removeMarker","findPluginState","markerFrom","markerTo","aceEditor","escaping","require","Range","setSelectionRange","QueuedSelection","pending","_mutation","forwardSelection","asProseMirrorSelection","session","getRange","positionToIndex","highlightSelectionAcross","valueChanged","getContents","replaceWith","scrollParent","offsetTop","viewTop","viewBottom","scrollCursorIntoView","clearSelection","getSession","cursorDirty","addCommand","bindKey","arrowMaybeEscape","backspaceMaybeDeleteNode","undo","redo","win","mac","getCursorPosition","executeSelection","renderer","metrics","$fontMetrics","$observer","setContainer","debounceResize","evt","resizeTimer","setMode","execCommand","getLength","innerText","getCursor","containerRect","cursorRect","down","up","oldEnd","oldVal","newEnd","newVal","nodeBefore","nodeAfter","cursorPos","prevNodePos","nextNodePos","nextNodeTextBlock","nextNodeCode","targetPos","renderCompleted","updateTimer","needsSort","bypass","visible","onUpdate","IntersectionObserver","entries_1","processRenderQueue","isIntersecting","cancelTimer","onScroll","scheduleRender","isRenderCompleted","renderTimer","delayMs","nodeView","prevNodePos_1","nv","ndView","setGapCursorPending","AttrEditCommand","editors","editMarkAttrs","editAttr","attr_edit_1","kEditAttrShortcut","properties_deco_dark","properties_deco","ed","parentWithAttrs","editorNode","attrTags","rightPaddingOffset","attrsEl","attrsNode","offsetParentStyle","AttrEditDecorationPlugin","gutterBackgroundColor","gutterTextColor","textColor","surfaceWidgetTextColor","lightTextColor","linkTextColor","invisibleTextColor","markupTextColor","findTextBackgroundColor","findTextBorderColor","blockBorderColor","focusOutlineColor","paneBorderColor","fixedWidthFont","fixedWidthFontSizePt","proportionalFont","proportionalFontSizePt","atomColor","tagColor","attributeColor","hrColor","linkColor","errorColor","setStyleElement","css","styleEl","getElementById","defaults","backgroundColor","borderBackgroundColor","placeholderTextColor","selectionColor","cursorColor","metadataBackgroundColor","chunkBackgroundColor","spanBackgroundColor","divBackgroundColor","commentColor","commentBackgroundColor","nodeSelectionColor","padding","copy_png_1","properties_png_1","properties_deco_png_1","properties_deco_dark_png_1","removelink_png_1","runchunk_png_1","runprevchunks_png_1","search_png_1","search_progress_gif_1","generic_png_1","heading1_png_1","heading1_dark_png_1","heading2_png_1","heading2_dark_png_1","heading3_png_1","heading3_dark_png_1","heading4_png_1","heading4_dark_png_1","bullet_list_png_1","bullet_list_dark_png_1","ordered_list_png_1","ordered_list_dark_png_1","blockquote_png_1","blockquote_dark_png_1","math_inline_png_1","math_inline_dark_png_1","math_display_png_1","math_display_dark_png_1","html_block_png_1","html_block_dark_png_1","line_block_png_1","line_block_dark_png_1","emoji_png_1","emoji_dark_png_1","comment_png_1","comment_dark_png_1","div_png_1","div_dark_png_1","code_block_png_1","code_block_dark_png_1","footnote_png_1","footnote_dark_png_1","citation_png_1","citation_dark_png_1","cross_reference_png_1","cross_reference_dark_png_1","symbol_png_1","symbol_dark_png_1","table_png_1","table_dark_png_1","definition_list_png_1","definition_list_dark_png_1","horizontal_rule_png_1","horizontal_rule_dark_png_1","image_png_1","image_dark_png_1","link_png_1","link_dark_png_1","paragraph_png_1","paragraph_dark_png_1","raw_block_png_1","raw_block_dark_png_1","raw_inline_png_1","raw_inline_dark_png_1","tex_block_png_1","tex_block_dark_png_1","yaml_block_png_1","yaml_block_dark_png_1","python_chunk_png_1","sql_chunk_png_1","d3_chunk_png_1","stan_chunk_png_1","bash_chunk_png_1","bash_chunk_dark_png_1","r_chunk_png_1","r_chunk_dark_png_1","rcpp_chunk_png_1","rcpp_chunk_dark_png_1","heading3_dark","bullet_list_dark","ordered_list_dark","blockquote","blockquote_dark","math_inline","math_inline_dark","emoji_dark","citation_dark","paragraph_dark","raw_block_dark","sql_chunk","rcpp_chunk_dark","book_dark_png_1","formatMenu","Underline","ListItemCheck","ListItemCheckToggle","EditListProperties","Blockquote","haveAnyOf","HTMLInline","ClearFormatting","AttrEdit","RCodeChunk","PythonCodeChunk","BashCodeChunk","RcppCodeChunk","SQLCodeChunk","D3CodeChunk","DefinitionTerm","DefinitionDescription","ParagraphInsert","InsertDiv","commands_1","editorMenus","TableDeleteTable"],"mappings":"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A,IAEF,MACA,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACHA,EAAQ,IACR,MAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,UACH,KACAA,EAAA,IAEF,WACE,KACAA,EAAA,IAEF,MACA,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,KAEFA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,UACH,UACA,KAEF,KAAK,KACLA,EAAK,IACL,WACE,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,KAEF,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,SACH,SACA,IAEF,KAAK,KACL,KAAK,UACH,KACAA,EAAA,IAEF,MACA,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,WACE,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACHA,EAAQ,IACR,MAEF,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,SACH,SACA,IAEF,KAAK,KACL,KAAK,UACH,UACA,KAEFA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,UACH,UACA,KAEF,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,UACH,KACAA,EAAA,IAEF,MACA,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACHA,EAAQ,IACR,MAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACHA,EAAQ,IACR,MAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,UACH,KACAA,EAAA,IAEF,WACE,UACA,KAEF,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,IACAA,EAAA,IAEF,MACA,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACH,WACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACHA,EAAQ,IACR,MAEF,KAAK,KACLA,EAAK,IACH,WACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,KACAA,EAAA,IAEF,MACA,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,UACH,UACA,KAEF,KAAK,KACLA,EAAK,IACL,WACE,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,KAEF,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,SACH,SACA,KAEF,KAAK,KACL,KAAK,KACHA,EAAQ,IACR,MAEF,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACHA,EAAQ,IACR,MAEF,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,SACH,SACA,KAEF,KAAK,KACL,KAAK,UACH,UACA,KAEFA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,UACH,UACA,KAEF,KAAK,KACHA,EAAQ,I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EtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO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CEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,OAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,M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,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6BA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BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oBACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,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UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,YAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,YAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,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AA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,eAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,eAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,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UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,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","sourcesContent":["/*\n * index.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport polyfillIsConnected from './isconnected';\nimport polyfillCustomEvent from './custom-event';\n\nfunction polyfill() {\n polyfillIsConnected();\n polyfillCustomEvent();\n}\n\nexport default polyfill;\n","/*\n * Node.isConnected polyfill for IE and EdgeHTML\n * 2020-02-04\n *\n * By Eli Grey, https://eligrey.com\n * Public domain.\n * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n */\n\nfunction polyfill() {\n if (!('isConnected' in Node.prototype)) {\n Object.defineProperty(Node.prototype, 'isConnected', {\n get() {\n return (\n !this.ownerDocument ||\n !(\n // tslint:disable-next-line: no-bitwise\n (this.ownerDocument.compareDocumentPosition(this) & this.DOCUMENT_POSITION_DISCONNECTED)\n )\n );\n },\n });\n }\n}\n\nexport default polyfill;\n","// apply polyfills\nimport polyfill from './polyfill/index';\npolyfill();\n\n// objects instantiated by the IDE\nexport { Editor, UITools } from './editor/editor';\n","/**\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent\n *\n * From https://developer.mozilla.org/en-US/docs/MDN/About:\n * \"Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/\"\n */\nexport default function() {\n if (typeof window.CustomEvent === 'function') return false;\n\n function CustomEvent(event: any, params: any) {\n params = params || { bubbles: false, cancelable: false, detail: null };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n }\n\n window.CustomEvent = CustomEvent as any;\n}\n","/*\n * editor.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { inputRules } from 'prosemirror-inputrules';\nimport { keydownHandler } from 'prosemirror-keymap';\nimport { Node as ProsemirrorNode, Schema, DOMParser, ParseOptions } from 'prosemirror-model';\nimport { EditorState, Plugin, PluginKey, TextSelection, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport 'prosemirror-view/style/prosemirror.css';\n\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { citeUI } from '../api/cite';\nimport { EditorOptions } from '../api/options';\nimport { ProsemirrorCommand, CommandFn, EditorCommand } from '../api/command';\nimport { EditorUI } from '../api/ui';\nimport {\n attrPropsToInput,\n attrInputToProps,\n AttrProps,\n AttrEditInput,\n InsertCiteProps,\n InsertCiteUI,\n} from '../api/ui-dialogs';\n\nimport { Extension } from '../api/extension';\nimport { PandocWriterOptions } from '../api/pandoc';\nimport { PandocCapabilities, getPandocCapabilities } from '../api/pandoc_capabilities';\nimport { fragmentToHTML } from '../api/html';\nimport { DOMEditorEvents, EventType, EventHandler } from '../api/events';\nimport {\n ScrollEvent,\n UpdateEvent,\n OutlineChangeEvent,\n StateChangeEvent,\n ResizeEvent,\n LayoutEvent,\n FocusEvent,\n DispatchEvent,\n NavigateEvent,\n BlurEvent,\n} from '../api/event-types';\nimport {\n PandocFormat,\n resolvePandocFormat,\n PandocFormatConfig,\n pandocFormatConfigFromCode,\n pandocFormatConfigFromDoc,\n} from '../api/pandoc_format';\nimport { baseKeysPlugin } from '../api/basekeys';\nimport {\n appendTransactionsPlugin,\n appendMarkTransactionsPlugin,\n kFixupTransaction,\n kAddToHistoryTransaction,\n kSetMarkdownTransaction,\n} from '../api/transaction';\nimport { EditorOutline, getOutlineNodes, EditingOutlineLocation, getEditingOutlineLocation } from '../api/outline';\nimport { EditingLocation, getEditingLocation, setEditingLocation } from '../api/location';\nimport { navigateTo, NavigationType } from '../api/navigation';\nimport { FixupContext } from '../api/fixup';\nimport { unitToPixels, pixelsToUnit, roundUnit, kValidUnits } from '../api/image';\nimport { kPercentUnit } from '../api/css';\nimport { EditorFormat } from '../api/format';\nimport { diffChars, EditorChange } from '../api/change';\nimport { markInputRuleFilter } from '../api/input_rule';\nimport { editorMath } from '../api/math';\nimport { EditorEvents } from '../api/events';\nimport { insertRmdChunk } from '../api/rmd';\nimport { EditorServer } from '../api/server';\nimport { pandocAutoIdentifier } from '../api/pandoc_id';\nimport { wrapSentences } from '../api/wrap';\nimport { yamlFrontMatter, applyYamlFrontMatter } from '../api/yaml';\nimport { EditorSpellingDoc } from '../api/spelling';\n\nimport { getTitle, setTitle } from '../nodes/yaml_metadata/yaml_metadata-title';\nimport { getOutline } from '../behaviors/outline';\nimport {\n FindOptions,\n find,\n matchCount,\n selectFirst,\n selectNext,\n selectPrevious,\n replace,\n replaceAll,\n clear,\n selectCurrent,\n} from '../behaviors/find';\n\nimport { omniInsertExtension } from '../behaviors/omni_insert/omni_insert';\nimport { completionExtension } from '../behaviors/completion/completion';\n\nimport { getSpellingDoc } from '../behaviors/spelling/spelling-interactive';\nimport { realtimeSpellingPlugin, invalidateAllWords, invalidateWord } from '../behaviors/spelling/spelling-realtime';\n\nimport { PandocConverter, PandocLineWrapping } from '../pandoc/pandoc_converter';\n\nimport { ExtensionManager, initExtensions } from './editor-extensions';\nimport { defaultTheme, EditorTheme, applyTheme, applyPadding } from './editor-theme';\nimport { defaultEditorUIImages } from './editor-images';\nimport { editorMenus, EditorMenus } from './editor-menus';\nimport { editorSchema } from './editor-schema';\n\n// import styles before extensions so they can be overriden by extensions\nimport './styles/frame.css';\nimport './styles/styles.css';\n\nexport interface EditorCode {\n code: string;\n selection_only: boolean;\n location: EditingOutlineLocation;\n}\n\nexport interface EditorSetMarkdownResult {\n // editor view of markdown (as it will be persisted)\n canonical: string;\n\n // line wrapping\n line_wrapping: PandocLineWrapping;\n\n // unrecoginized pandoc tokens\n unrecognized: string[];\n\n // unparsed meta\n unparsed_meta: { [key: string]: any };\n\n // updated outline \n location: EditingOutlineLocation;\n}\n\nexport interface EditorContext {\n readonly server: EditorServer;\n readonly ui: EditorUI;\n readonly hooks?: EditorHooks;\n readonly extensions?: readonly Extension[];\n}\n\nexport interface EditorHooks {\n isEditable?: () => boolean;\n}\n\nexport interface EditorKeybindings {\n [id: string]: string[];\n}\n\nexport interface EditorSelection {\n from: number;\n to: number;\n navigation_id: string | null;\n}\n\nexport interface EditorFindReplace {\n find: (term: string, options: FindOptions) => boolean;\n matches: () => number;\n selectFirst: () => boolean;\n selectCurrent: () => boolean;\n selectNext: () => boolean;\n selectPrevious: () => boolean;\n replace: (text: string) => boolean;\n replaceAll: (text: string) => number;\n clear: () => boolean;\n}\n\nexport { EditorCommandId as EditorCommands } from '../api/command';\n\nexport interface UIToolsAttr {\n propsToInput(attr: AttrProps): AttrEditInput;\n inputToProps(input: AttrEditInput): AttrProps;\n pandocAutoIdentifier(text: string): string;\n}\n\nexport interface UIToolsImage {\n validUnits(): string[];\n percentUnit(): string;\n unitToPixels(value: number, unit: string, containerWidth: number): number;\n pixelsToUnit(pixels: number, unit: string, containerWidth: number): number;\n roundUnit(value: number, unit: string): string;\n}\n\nexport interface UIToolsFormat {\n parseFormatConfig(markdown: string, isRmd: boolean): PandocFormatConfig;\n}\n\nexport interface UIToolsSource {\n diffChars(from: string, to: string, timeout: number): EditorChange[];\n}\n\nexport interface UIToolsCitation {\n citeUI(citeProps: InsertCiteProps): InsertCiteUI;\n}\n\nexport class UITools {\n public readonly attr: UIToolsAttr;\n public readonly image: UIToolsImage;\n public readonly format: UIToolsFormat;\n public readonly source: UIToolsSource;\n public readonly citation: UIToolsCitation;\n\n constructor() {\n this.attr = {\n propsToInput: attrPropsToInput,\n inputToProps: attrInputToProps,\n pandocAutoIdentifier: (text: string) => pandocAutoIdentifier(text, false),\n };\n\n this.image = {\n validUnits: () => kValidUnits,\n percentUnit: () => kPercentUnit,\n unitToPixels,\n pixelsToUnit,\n roundUnit,\n };\n\n this.format = {\n parseFormatConfig: pandocFormatConfigFromCode,\n };\n\n this.source = {\n diffChars,\n };\n\n this.citation = {\n citeUI,\n };\n }\n}\n\nconst keybindingsPlugin = new PluginKey('keybindings');\n\nexport class Editor {\n // core context passed from client\n private readonly parent: HTMLElement;\n private readonly context: EditorContext;\n private readonly events: EditorEvents;\n\n // options (derived from defaults + config)\n private readonly options: EditorOptions;\n\n // format (pandocFormat includes additional diagnostics based on the validity of\n // provided mode + extensions)\n private readonly format: EditorFormat;\n private readonly pandocFormat: PandocFormat;\n\n // pandoc capabilities\n private pandocCapabilities: PandocCapabilities;\n\n // core prosemirror state/behaviors\n private readonly extensions: ExtensionManager;\n private readonly schema: Schema;\n private state: EditorState;\n private readonly view: EditorView;\n private readonly pandocConverter: PandocConverter;\n\n // setting via setKeybindings forces reconfiguration of EditorState\n // with plugins recreated\n private keybindings: EditorKeybindings;\n\n // content width constraints (if unset uses default editor CSS)\n private maxContentWidth = 0;\n private minContentPadding = 0;\n\n // keep track of whether the last transaction was selection-only\n private lastTrSelectionOnly = false;\n\n // create the editor -- note that the markdown argument does not substitute for calling\n // setMarkdown, rather it's used to read the format comment to determine how to\n // initialize the various editor features\n public static async create(\n parent: HTMLElement,\n context: EditorContext,\n format: EditorFormat,\n options: EditorOptions,\n ): Promise {\n // provide option defaults\n options = {\n autoFocus: false,\n spellCheck: false,\n codeEditor: 'codemirror',\n rmdImagePreview: false,\n hideFormatComment: false,\n className: '',\n ...options,\n };\n\n // provide format defaults\n format = {\n pandocMode: format.pandocMode || 'markdown',\n pandocExtensions: format.pandocExtensions || '',\n rmdExtensions: {\n codeChunks: false,\n bookdownXRef: false,\n bookdownXRefUI: false,\n bookdownPart: false,\n blogdownMathInCode: false,\n ...format.rmdExtensions,\n },\n hugoExtensions: {\n shortcodes: false,\n ...format.hugoExtensions,\n },\n docTypes: format.docTypes || [],\n };\n\n // provide context defaults\n const defaultImages = defaultEditorUIImages();\n context = {\n ...context,\n ui: {\n ...context.ui,\n images: {\n ...defaultImages,\n ...context.ui.images,\n omni_insert: {\n ...defaultImages.omni_insert,\n ...context.ui.images,\n },\n citations: {\n ...defaultImages.citations,\n ...context.ui.images,\n },\n },\n },\n };\n\n // resolve the format\n const pandocFmt = await resolvePandocFormat(context.server.pandoc, format);\n\n // get pandoc capabilities\n const pandocCapabilities = await getPandocCapabilities(context.server.pandoc);\n\n // create editor\n const editor = new Editor(parent, context, options, format, pandocFmt, pandocCapabilities);\n\n // return editor\n return Promise.resolve(editor);\n }\n\n private constructor(\n parent: HTMLElement,\n context: EditorContext,\n options: EditorOptions,\n format: EditorFormat,\n pandocFormat: PandocFormat,\n pandocCapabilities: PandocCapabilities,\n ) {\n // initialize references\n this.parent = parent;\n this.events = new DOMEditorEvents(parent);\n this.context = context;\n this.options = options;\n this.format = format;\n this.keybindings = {};\n this.pandocFormat = pandocFormat;\n this.pandocCapabilities = pandocCapabilities;\n\n // create core extensions\n this.extensions = this.initExtensions();\n\n // create schema\n this.schema = editorSchema(this.extensions);\n\n // register completion handlers (done in a separate step b/c omni insert\n // completion handlers require access to the initializezd commands that\n // carry omni insert info)\n this.registerCompletionExtension();\n\n // register realtime spellchecking (done in a separate step b/c it\n // requires access to PandocMark definitions to determine which\n // marks to exclude from spellchecking)\n this.registerRealtimeSpelling();\n\n // create state\n this.state = EditorState.create({\n schema: this.schema,\n doc: this.initialDoc(),\n plugins: this.createPlugins(),\n });\n\n // additional dom attributes for editor node\n const attributes: { [name: string]: string } = {};\n if (options.className) {\n attributes.class = options.className;\n }\n\n // create view\n this.view = new EditorView(this.parent, {\n state: this.state,\n dispatchTransaction: this.dispatchTransaction.bind(this),\n domParser: new EditorDOMParser(this.schema),\n attributes,\n });\n\n // add custom restoreFocus handler to the view -- this provides a custom\n // handler for RStudio's FocusContext, necessary because the default\n // ProseMirror dom mutation handler picks up the focus and changes the\n // selection.\n Object.defineProperty(this.view.dom, 'restoreFocus', {\n value: () => {\n this.focus();\n },\n });\n\n // add proportinal font class to parent\n this.parent.classList.add('pm-proportional-font');\n\n // apply default theme\n this.applyTheme(defaultTheme());\n\n // create pandoc translator\n this.pandocConverter = new PandocConverter(\n this.schema,\n this.extensions,\n context.server.pandoc,\n this.pandocCapabilities,\n );\n\n // focus editor immediately if requested\n if (this.options.autoFocus) {\n setTimeout(() => {\n this.focus();\n }, 10);\n }\n\n // disale spellcheck if requested\n if (!this.options.spellCheck) {\n this.parent.setAttribute('spellcheck', 'false');\n }\n\n {\n // scroll event optimization, as recommended by\n // https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let ticking = false;\n this.parent.addEventListener(\n 'scroll',\n () => {\n if (!ticking) {\n window.requestAnimationFrame(() => {\n this.emitEvent(ScrollEvent);\n ticking = false;\n });\n ticking = true;\n }\n },\n { capture: true },\n );\n }\n }\n\n public destroy() {\n this.view.destroy();\n }\n\n public subscribe(event: EventType | string, handler: EventHandler): VoidFunction {\n if (typeof event === 'string') {\n return this.events.subscribe({ eventName: event }, handler);\n } else {\n return this.events.subscribe(event, handler);\n }\n }\n\n public setTitle(title: string) {\n const tr = setTitle(this.state, title);\n if (tr) {\n this.view.dispatch(tr);\n }\n }\n\n public async setMarkdown(\n markdown: string,\n options: PandocWriterOptions,\n emitUpdate: boolean,\n ): Promise {\n // get the result\n const result = await this.pandocConverter.toProsemirror(markdown, this.pandocFormat);\n const { doc, line_wrapping, unrecognized, unparsed_meta } = result;\n\n // if we are preserving history but the existing doc is empty then create a new state\n // (resets the undo stack so that the initial setting of the document can't be undone)\n if (this.isInitialDoc()) {\n this.state = EditorState.create({\n schema: this.state.schema,\n doc,\n plugins: this.state.plugins,\n });\n this.view.updateState(this.state);\n } else {\n // note current editing location\n const loc = this.getEditingLocation();\n\n // replace the top level nodes in the doc\n const tr = this.state.tr;\n tr.setMeta(kSetMarkdownTransaction, true);\n let i = 0;\n tr.doc.descendants((node, pos) => {\n const mappedPos = tr.mapping.map(pos);\n tr.replaceRangeWith(mappedPos, mappedPos + node.nodeSize, doc.child(i));\n i++;\n return false;\n });\n // set selection to previous location if it's still valid\n if (loc.pos < tr.doc.nodeSize) {\n // eat exceptions that might result from an invalid position\n try {\n setTextSelection(loc.pos)(tr);\n } catch(e) {\n // do-nothing, this error can happen and shouldn't result in \n // a failure to setMarkdown\n }\n }\n // dispatch\n this.view.dispatch(tr);\n }\n\n // apply fixups\n this.applyFixups(FixupContext.Load);\n\n // notify listeners if requested\n if (emitUpdate) {\n this.emitEvent(UpdateEvent);\n this.emitEvent(OutlineChangeEvent);\n this.emitEvent(StateChangeEvent);\n }\n\n // return our current markdown representation (so the caller know what our\n // current 'view' of the doc as markdown looks like\n const getMarkdownTr = this.state.tr;\n const canonical = await this.getMarkdownCode(getMarkdownTr, options);\n const location = getEditingOutlineLocation(this.state);\n\n // return\n return {\n canonical,\n line_wrapping,\n unrecognized,\n unparsed_meta,\n location\n };\n }\n\n // flag indicating whether we've ever had setMarkdown (currently we need this\n // because getMarkdown can only be called after setMarkdown b/c it needs\n // the API version retreived in setMarkdown -- we should remedy this)\n public isInitialDoc() {\n return this.state.doc.attrs.initial;\n }\n\n public async getMarkdown(options: PandocWriterOptions): Promise {\n // get the code\n const tr = this.state.tr;\n const code = await this.getMarkdownCode(tr, options);\n\n // return code + perhaps outline location\n return {\n code,\n selection_only: this.lastTrSelectionOnly,\n location: getEditingOutlineLocation(this.state),\n };\n }\n\n public getEditingOutlineLocation(): EditingOutlineLocation {\n return getEditingOutlineLocation(this.state);\n }\n\n public getHTML(): string {\n return fragmentToHTML(this.state.schema, this.state.doc.content);\n }\n\n public getTitle() {\n return getTitle(this.state);\n }\n\n public getSelection(): EditorSelection {\n const { from, to } = this.state.selection;\n return {\n from,\n to,\n navigation_id: navigationIdForSelection(this.state),\n };\n }\n\n public getEditingLocation(): EditingLocation {\n return getEditingLocation(this.view);\n }\n\n public setEditingLocation(outlineLocation?: EditingOutlineLocation, previousLocation?: EditingLocation) {\n setEditingLocation(this.view, outlineLocation, previousLocation);\n }\n\n public getOutline(): EditorOutline {\n return getOutline(this.state) || [];\n }\n\n public getFindReplace(): EditorFindReplace {\n return {\n find: (term: string, options: FindOptions) => find(this.view, term, options),\n matches: () => matchCount(this.view),\n selectCurrent: () => selectCurrent(this.view),\n selectFirst: () => selectFirst(this.view),\n selectNext: () => selectNext(this.view),\n selectPrevious: () => selectPrevious(this.view),\n replace: (text: string) => replace(this.view, text),\n replaceAll: (text: string) => replaceAll(this.view, text),\n clear: () => clear(this.view),\n };\n }\n\n public getSpellingDoc(): EditorSpellingDoc {\n return getSpellingDoc(this.view, this.extensions.pandocMarks(), this.context.ui.spelling);\n }\n\n public spellingInvalidateAllWords() {\n invalidateAllWords(this.view);\n }\n\n public spellingInvalidateWord(word: string) {\n invalidateWord(this.view, word);\n }\n\n // get a canonical version of the passed markdown. this method doesn't mutate the\n // visual editor's state/view (it's provided as a performance optimiation for when\n // source mode is configured to save a canonical version of markdown)\n public async getCanonical(markdown: string, options: PandocWriterOptions): Promise {\n // convert to prosemirror doc\n const result = await this.pandocConverter.toProsemirror(markdown, this.pandocFormat);\n\n // create a state for this doc\n const state = EditorState.create({\n schema: this.schema,\n doc: result.doc,\n plugins: this.state.plugins,\n });\n\n // apply load fixups (eumlating what a full round trip will do)\n const tr = state.tr;\n this.extensionFixups(tr, FixupContext.Load);\n\n // return markdown (will apply save fixups)\n return this.getMarkdownCode(tr, options);\n }\n\n public getSelectedText(): string {\n return this.state.doc.textBetween(this.state.selection.from, this.state.selection.to);\n }\n\n public replaceSelection(value: string): void {\n // retrieve properties we need from selection\n const { from, empty } = this.view.state.selection;\n\n // retrieve selection marks\n const marks = this.view.state.selection.$from.marks();\n\n // insert text\n const tr = this.view.state.tr.replaceSelectionWith(this.view.state.schema.text(value, marks), false);\n this.view.dispatch(tr);\n\n // update selection if necessary\n if (!empty) {\n const sel = TextSelection.create(this.view.state.doc, from, from + value.length);\n const trSetSel = this.view.state.tr.setSelection(sel);\n this.view.dispatch(trSetSel);\n }\n }\n\n public getYamlFrontMatter() {\n if (this.schema.nodes.yaml_metadata) {\n return yamlFrontMatter(this.view.state.doc);\n } else {\n return '';\n }\n }\n\n public applyYamlFrontMatter(yaml: string) {\n if (this.schema.nodes.yaml_metadata) {\n applyYamlFrontMatter(this.view, yaml);\n }\n }\n\n public focus() {\n this.view.focus();\n }\n\n public blur() {\n (this.view.dom as HTMLElement).blur();\n }\n\n public insertChunk(chunkPlaceholder: string, rowOffset: number, colOffset: number) {\n const insertCmd = insertRmdChunk(chunkPlaceholder, rowOffset, colOffset);\n insertCmd(this.view.state, this.view.dispatch, this.view);\n this.focus();\n }\n\n public navigate(type: NavigationType, location: string, recordCurrent = true, animate = false) {\n // perform navigation\n const nav = navigateTo(this.view, type, location, animate);\n\n // emit event\n if (nav !== null) {\n if (!recordCurrent) {\n nav.prevPos = -1;\n }\n this.emitEvent(NavigateEvent, nav);\n }\n }\n\n public resize() {\n this.syncContentWidth();\n this.applyFixupsOnResize();\n this.emitEvent(ResizeEvent);\n }\n\n public enableDevTools(initFn: (view: EditorView, stateClass: any) => void) {\n initFn(this.view, { EditorState });\n }\n\n public getMenus(): EditorMenus {\n return editorMenus(this.context.ui, this.commands());\n }\n\n public commands(): EditorCommand[] {\n // get keybindings (merge user + default)\n const commandKeys = this.commandKeys();\n\n return this.extensions.commands(this.schema).map((command: ProsemirrorCommand) => {\n return {\n id: command.id,\n keymap: commandKeys[command.id],\n isActive: () => command.isActive(this.state),\n isEnabled: () => command.isEnabled(this.state),\n plural: () => command.plural(this.state),\n execute: () => {\n command.execute(this.state, this.view.dispatch, this.view);\n if (command.keepFocus) {\n this.focus();\n }\n },\n };\n });\n }\n\n public applyTheme(theme: EditorTheme) {\n // set global mode classes\n this.parent.classList.toggle('pm-dark-mode', !!theme.darkMode);\n this.parent.classList.toggle('pm-solarized-mode', !!theme.solarizedMode);\n // apply the rest of the theme\n applyTheme(theme);\n }\n\n public setMaxContentWidth(maxWidth: number, minPadding = 10) {\n this.maxContentWidth = maxWidth;\n this.minContentPadding = minPadding;\n this.syncContentWidth();\n }\n\n public setKeybindings(keyBindings: EditorKeybindings) {\n // validate that all of these keys can be rebound\n\n this.keybindings = keyBindings;\n this.state = this.state.reconfigure({\n schema: this.state.schema,\n plugins: this.createPlugins(),\n });\n }\n\n public getEditorFormat() {\n return this.format;\n }\n\n public getPandocFormat() {\n return this.pandocFormat;\n }\n\n public getPandocFormatConfig(isRmd: boolean): PandocFormatConfig {\n return pandocFormatConfigFromDoc(this.state.doc, isRmd);\n }\n\n private dispatchTransaction(tr: Transaction) {\n // track previous outline\n const previousOutline = getOutline(this.state);\n\n // track whether this was a selection-only transaction\n this.lastTrSelectionOnly = tr.selectionSet && !tr.docChanged;\n\n // apply the transaction\n this.state = this.state.apply(tr);\n this.view.updateState(this.state);\n\n // notify listeners of state change\n this.emitEvent(StateChangeEvent);\n\n // notify listeners of updates\n if (tr.docChanged || tr.storedMarksSet) {\n // fire updated (unless this was a fixup)\n if (!tr.getMeta(kFixupTransaction)) {\n this.emitEvent(UpdateEvent);\n }\n\n // fire outline changed if necessary\n if (getOutline(this.state) !== previousOutline) {\n this.emitEvent(OutlineChangeEvent);\n }\n }\n\n this.emitEvent(DispatchEvent, tr);\n\n this.emitEvent(LayoutEvent);\n }\n\n private emitEvent(eventType: EventType, detail?: TDetail) {\n this.events.emit(eventType, detail);\n }\n\n private initExtensions() {\n return initExtensions(\n {\n format: this.format,\n options: this.options,\n ui: this.context.ui,\n math: this.context.ui.math.typeset ? editorMath(this.context.ui) : undefined,\n events: {\n subscribe: this.subscribe.bind(this),\n emit: this.emitEvent.bind(this),\n },\n pandocExtensions: this.pandocFormat.extensions,\n pandocCapabilities: this.pandocCapabilities,\n server: this.context.server,\n navigation: {\n navigate: this.navigate.bind(this),\n },\n },\n this.context.extensions,\n );\n }\n\n private registerCompletionExtension() {\n // mark filter used to screen completions from noInputRules marks\n const markFilter = markInputRuleFilter(this.schema, this.extensions.pandocMarks());\n\n // register omni insert extension\n this.extensions.register([\n omniInsertExtension(this.extensions.omniInserters(this.schema), markFilter, this.context.ui),\n ]);\n\n // register completion extension\n this.extensions.register([\n completionExtension(this.extensions.completionHandlers(), markFilter, this.context.ui, this.events),\n ]);\n }\n\n private registerRealtimeSpelling() {\n this.extensions.registerPlugins(\n [realtimeSpellingPlugin(this.schema, this.extensions.pandocMarks(), this.context.ui, this.events)],\n true,\n );\n }\n\n private createPlugins(): Plugin[] {\n return [\n baseKeysPlugin(this.extensions.baseKeys(this.schema)),\n this.keybindingsPlugin(),\n appendTransactionsPlugin(this.extensions.appendTransactions(this.schema)),\n appendMarkTransactionsPlugin(this.extensions.appendMarkTransactions(this.schema)),\n ...this.extensions.plugins(this.schema),\n this.inputRulesPlugin(),\n this.editablePlugin(),\n this.domEventsPlugin(),\n ];\n }\n\n private editablePlugin() {\n const hooks = this.context.hooks || {};\n return new Plugin({\n key: new PluginKey('editable'),\n props: {\n editable: hooks.isEditable || (() => true),\n },\n });\n }\n\n private inputRulesPlugin() {\n // filter for disabling input rules for selected marks\n const markFilter = markInputRuleFilter(this.schema, this.extensions.pandocMarks());\n\n // create the defautl inputRules plugin\n const plugin = inputRules({ rules: this.extensions.inputRules(this.schema) });\n const handleTextInput = plugin.props.handleTextInput!;\n\n // override to disable input rules as requested\n // https://github.com/ProseMirror/prosemirror-inputrules/commit/b4bf67623aa4c4c1e096c20aa649c0e63751f337\n plugin.props.handleTextInput = (view: EditorView, from: number, to: number, text: string) => {\n if (!markFilter(view.state)) {\n return false;\n }\n return handleTextInput(view, from, to, text);\n };\n return plugin;\n }\n\n private domEventsPlugin(): Plugin {\n return new Plugin({\n key: new PluginKey('domevents'),\n props: {\n handleDOMEvents: {\n blur: (view: EditorView, event: Event) => {\n this.emitEvent(BlurEvent);\n return false;\n },\n focus: (view: EditorView, event: Event) => {\n this.emitEvent(FocusEvent, view.state.doc);\n return false;\n },\n keydown: (view: EditorView, event: Event) => {\n const kbEvent = event as KeyboardEvent;\n if (kbEvent.key === 'Tab' && this.context.ui.prefs.tabKeyMoveFocus()) {\n return true;\n } else {\n return false;\n }\n },\n },\n },\n });\n }\n\n private keybindingsPlugin(): Plugin {\n // get keybindings (merge user + default)\n const commandKeys = this.commandKeys();\n\n // command keys from extensions\n const pluginKeys: { [key: string]: CommandFn } = {};\n const commands = this.extensions.commands(this.schema);\n commands.forEach((command: ProsemirrorCommand) => {\n const keys = commandKeys[command.id];\n if (keys) {\n keys.forEach((key: string) => {\n pluginKeys[key] = command.execute;\n });\n }\n });\n\n // for windows desktop, build a list of control key handlers b/c qtwebengine\n // ends up corrupting ctrl+ keys so they don't hit the ace keybinding\n // (see: https://github.com/rstudio/rstudio/issues/7142)\n const ctrlKeyCodes: { [key: string]: CommandFn } = {};\n Object.keys(pluginKeys).forEach(keyCombo => {\n const match = keyCombo.match(/^Mod-([a-z\\\\])$/);\n if (match) {\n const key = match[1];\n const keyCode = key === '\\\\' ? 'Backslash' : `Key${key.toUpperCase()}`;\n ctrlKeyCodes[keyCode] = pluginKeys[keyCombo];\n }\n });\n\n // create default prosemirror handler\n const prosemirrorKeydownHandler = keydownHandler(pluginKeys);\n\n // return plugin\n return new Plugin({\n key: keybindingsPlugin,\n props: {\n handleKeyDown: (view: EditorView, event: KeyboardEvent) => {\n // workaround for Ctrl+ keys on windows desktop\n if (this.context.ui.context.isWindowsDesktop()) {\n const keyEvent = event as KeyboardEvent;\n if (keyEvent.ctrlKey) {\n const keyCommand = ctrlKeyCodes[keyEvent.code];\n if (keyCommand && keyCommand(this.view.state)) {\n keyCommand(this.view.state, this.view.dispatch, this.view);\n return true;\n }\n }\n }\n // default handling\n return prosemirrorKeydownHandler(view, event);\n },\n },\n });\n }\n\n private commandKeys(): { [key: string]: readonly string[] } {\n // start with keys provided within command definitions\n const commands = this.extensions.commands(this.schema);\n const defaultKeys = commands.reduce((keys: { [key: string]: readonly string[] }, command: ProsemirrorCommand) => {\n keys[command.id] = command.keymap;\n return keys;\n }, {});\n\n // merge with user keybindings\n return {\n ...defaultKeys,\n ...this.keybindings,\n };\n }\n\n // update parent padding based on content width settings (if specified)\n private syncContentWidth() {\n if (this.maxContentWidth && this.parent.clientWidth) {\n const minContentPadding = this.minContentPadding || 10;\n const parentWidth = this.parent.clientWidth;\n if (parentWidth > this.maxContentWidth + 2 * minContentPadding) {\n applyPadding(`calc((100% - ${this.maxContentWidth}px)/2)`);\n } else {\n applyPadding(this.minContentPadding + 'px');\n }\n }\n }\n\n private applyFixupsOnResize() {\n const docChanged = this.applyFixups(FixupContext.Resize);\n if (!docChanged) {\n // If applyFixupsOnResize returns true, then layout has already\n // been fired; if it hasn't, we must do so now\n this.emitEvent(LayoutEvent);\n }\n }\n\n private applyFixups(context: FixupContext) {\n let tr = this.state.tr;\n tr = this.extensionFixups(tr, context);\n if (tr.docChanged) {\n tr.setMeta(kAddToHistoryTransaction, false);\n tr.setMeta(kFixupTransaction, true);\n this.view.dispatch(tr);\n return true;\n }\n return false;\n }\n\n private extensionFixups(tr: Transaction, context: FixupContext) {\n this.extensions.fixups(this.schema, this.view).forEach(fixup => {\n tr = fixup(tr, context);\n });\n return tr;\n }\n\n private initialDoc(): ProsemirrorNode {\n return this.schema.nodeFromJSON({\n type: 'doc',\n attrs: {\n initial: true,\n },\n content: [\n { type: 'body', content: [{ type: 'paragraph' }] },\n { type: 'notes', content: [] },\n ],\n });\n }\n\n private async getMarkdownCode(tr: Transaction, options: PandocWriterOptions) {\n // apply save fixups\n this.extensionFixups(tr, FixupContext.Save);\n\n // apply sentence wrapping if requested\n if (options.wrap === 'sentence') {\n wrapSentences(tr);\n }\n\n // get code\n return this.pandocConverter.fromProsemirror(tr.doc, this.pandocFormat, options);\n }\n}\n\nfunction navigationIdForSelection(state: EditorState): string | null {\n const outline = getOutlineNodes(state.doc);\n const outlineNode = outline.reverse().find(node => node.pos < state.selection.from);\n if (outlineNode) {\n return outlineNode.node.attrs.navigation_id;\n } else {\n return null;\n }\n}\n\n// custom DOMParser that preserves all whitespace (required by display math marks)\nclass EditorDOMParser extends DOMParser {\n constructor(schema: Schema) {\n super(schema, DOMParser.fromSchema(schema).rules);\n }\n public parse(dom: Node, options?: ParseOptions) {\n return super.parse(dom, { ...options, preserveWhitespace: 'full' });\n }\n\n public parseSlice(dom: Node, options?: ParseOptions) {\n return super.parseSlice(dom, { ...options, preserveWhitespace: 'full' });\n }\n}\n","/*\n * cite.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { CSLName, CSLDate, CSL } from './csl';\nimport { InsertCiteProps, InsertCiteUI } from './ui-dialogs';\nimport { urlForDOI } from './doi';\n\nexport const kInvalidCiteKeyChars = /[\\]\\[\\s@',\\\\\\#}{~%&\\$\\^_]/g;\nconst kCiteIdLeadingLength = 8;\n\nexport function createUniqueCiteId(existingIds: string[], baseId: string): string {\n let count = 0;\n\n // Remove any non-8bit ascii characters\n let asciiOnlyBaseId = '';\n for (let i = 0; i < baseId.length; i++) {\n const char = baseId.charCodeAt(i);\n if (char <= 255) {\n asciiOnlyBaseId = asciiOnlyBaseId + String.fromCharCode(char);\n }\n }\n\n // If there are no characters left, just used a placeholder\n if (asciiOnlyBaseId.length === 0) {\n asciiOnlyBaseId = 'cite';\n }\n\n // The base ID but with invalid characters replaced\n let safeBaseId = asciiOnlyBaseId.replace(kInvalidCiteKeyChars, '');\n\n // Ensure that this is a valid citation, stripping any invalid characters\n let proposedId = safeBaseId;\n\n // If there is a conflict with an existing id, we will append\n // the following character and try again. If the conflict continues with\n // the postfix character added, we'll increment and keep going through the\n // alphabet\n const disambiguationStartCharacter = 97; // a\n\n while (existingIds.includes(proposedId)) {\n // If we've wrapped around to a and we haven't found a unique entry\n // Add an 'a' to the end and try again. Will ultimately create an entry like\n // Teague2012aaaf\n if (count !== 0 && count % 26 === 0) {\n safeBaseId = safeBaseId + String.fromCharCode(disambiguationStartCharacter);\n }\n\n const postfix = String.fromCharCode(disambiguationStartCharacter + (count % 26));\n proposedId = safeBaseId + postfix;\n count++;\n }\n return proposedId;\n}\n\n// Suggests a bibliographic identifier based upon the source\nexport function suggestCiteId(existingIds: string[], csl: CSL) {\n const author = csl.author;\n const issued = csl.issued;\n\n // Try to get the last name\n let citeIdLeading = '';\n if (author && author.length > 0) {\n if (author[0].family) {\n citeIdLeading = author[0].family;\n } else if (author[0].literal) {\n citeIdLeading = author[0].literal;\n }\n }\n\n // If we can't use author information, try using short title,\n // the title, or perhaps the type to construct a leading part of the\n // citeId.\n if (citeIdLeading.length === 0) {\n const shortTitle = csl['short-title'];\n if (shortTitle && shortTitle?.length > 0) {\n citeIdLeading = shortTitle.substr(0, Math.min(kCiteIdLeadingLength, shortTitle.length));\n } else if (csl.title) {\n citeIdLeading = csl.title.substr(0, Math.min(kCiteIdLeadingLength, csl.title.length));\n } else {\n citeIdLeading = csl.type;\n }\n }\n\n // Try to get the publication year\n let datePart = '';\n if (issued && issued['date-parts'] && issued['date-parts'].length > 0) {\n const yearIssued = issued['date-parts'][0][0];\n // Sometimes, data arrives with a null value, ignore null\n if (yearIssued) {\n datePart = yearIssued + '';\n }\n }\n\n // Create a deduplicated string against the existing entries\n let baseId = `${citeIdLeading.toLowerCase()}${datePart}`;\n if (baseId.length === 0) {\n baseId = 'untitled';\n }\n\n return createUniqueCiteId(existingIds, baseId);\n}\n\nexport interface CiteField {\n name: string;\n value: string;\n}\n\nexport function urlForCitation(csl: CSL): string | undefined {\n if (csl.URL) {\n return csl.URL;\n } else if (csl.DOI) {\n return urlForDOI(csl.DOI);\n }\n}\n\nexport function formatForPreview(csl: CSL): CiteField[] {\n const pairs = new Array();\n if (csl.title) {\n pairs.push({ name: 'Title', value: csl.title });\n }\n pairs.push({ name: 'Authors', value: formatAuthors(csl.author, 255) });\n if (csl.issued && isValidDate(csl.issued)) {\n pairs.push({ name: 'Issue Date', value: formatIssuedDate(csl.issued) });\n }\n\n const containerTitle = csl['container-title'];\n if (containerTitle) {\n pairs.push({ name: 'Publication', value: containerTitle });\n }\n\n const volume = csl.volume;\n if (volume) {\n pairs.push({ name: 'Volume', value: volume });\n }\n\n const page = csl.page;\n if (page) {\n pairs.push({ name: 'Page(s)', value: page });\n }\n\n const cslAny = csl as { [key: string]: any };\n Object.keys(csl).forEach(key => {\n if (!kFilteredFields.includes(key)) {\n const value = cslAny[key];\n // Don't display complex fields or fields that aren't strings\n if (typeof value === 'string') {\n // Capitalize preview names\n const name = key.charAt(0).toUpperCase() + key.slice(1);\n pairs.push({ name, value });\n }\n }\n });\n\n return pairs;\n}\n\nconst kFilteredFields = [\n 'id',\n 'title',\n 'author',\n 'issued',\n 'container-title',\n 'volume',\n 'page',\n 'abstract',\n 'provider',\n];\n\n// Sometimes, data arrives with a null value\n// This function will validate that the year (required) doesn't\n// contain null\nfunction isValidDate(date: CSLDate): boolean {\n const dateParts = date['date-parts'];\n if (dateParts) {\n const invalidElement = dateParts.find(datePart => datePart[0] === null);\n return invalidElement === undefined;\n }\n return true;\n}\n\n// TODO: Needs to support localization of the templated strings\nconst kEtAl = 'et al.';\nexport function formatAuthors(authors?: CSLName[], maxLength?: number): string {\n // No author(s) specified\n if (!authors || authors.length === 0) {\n return '';\n }\n\n return authors\n .map(author => {\n if (author.literal?.length) {\n return author.literal;\n } else if (author.given?.length && author.family?.length) {\n // Family and Given name\n return `${author.family}, ${author.given.substring(0, 1)}`;\n } else if (author.family?.length) {\n // Family name only\n return `${author.family}`;\n } else {\n return '';\n }\n })\n .reduce((previous, current, index, array) => {\n // Ignore any additional authors if the string\n // exceeds the maximum length\n if ((maxLength && previous.length >= maxLength) || previous.endsWith(kEtAl)) {\n return previous;\n }\n\n if (index === 0) {\n // Too long, truncate\n if (maxLength && current.length > maxLength) {\n return `${current.substring(0, maxLength - 1)}…`;\n }\n // The first author\n return current;\n } else if (index > 0 && index === array.length - 1) {\n // The last author\n return addAuthorOrEtAl(previous, `${previous}, and ${current}`, maxLength);\n } else {\n // Middle authors\n return addAuthorOrEtAl(previous, `${previous}, ${current}`, maxLength);\n }\n });\n}\n\nfunction addAuthorOrEtAl(previousAuthorStr: string, newAuthorStr: string, maxLength?: number) {\n // if adding the string would make it too long, truncate\n if (maxLength && newAuthorStr.length > maxLength) {\n return etAl(previousAuthorStr, maxLength);\n }\n return newAuthorStr;\n}\n\nfunction etAl(authorStr: string, maxLength: number) {\n // First try just using et al., then shorten existing\n // author to accomodate\n const etAlStr = `${authorStr} ${kEtAl}`;\n if (maxLength && etAlStr.length > maxLength) {\n // First try to truncate to a space\n const lastSpace = authorStr.lastIndexOf(' ');\n if (lastSpace) {\n return `${authorStr.substr(0, lastSpace)} ${kEtAl}`;\n } else {\n // As a last resort, truncate with ellipsis\n const excessLength = etAlStr.length - maxLength - 1;\n return `${authorStr.substr(0, authorStr.length - excessLength)}… ${kEtAl}`;\n }\n }\n return etAlStr;\n}\n\n// TODO: Needs to support localization of the templated strings\nexport function formatIssuedDate(date: CSLDate | undefined): string {\n // No issue date for this\n if (!date) {\n return '';\n }\n\n const dateParts = date['date-parts'];\n if (dateParts) {\n switch (dateParts.length) {\n // There is a date range\n case 2:\n return `${dateParts[0][0]}-${dateParts[1][0]}`;\n // Only a single date\n case 1:\n // Note that it is possible to receive an entry with a single null entry\n // For examples:\n // 10.1163/1874-6772_seg_a44_588\n const singleDatePart = dateParts[0][0];\n return `${singleDatePart ? singleDatePart : ''}`;\n\n // Seems like a malformed date :(\n case 0:\n default:\n return '';\n }\n }\n return '';\n}\n\nexport function citeUI(citeProps: InsertCiteProps): InsertCiteUI {\n if (citeProps.csl) {\n const suggestedId = suggestCiteId(citeProps.existingIds, citeProps.csl);\n const previewFields = formatForPreview(citeProps.csl);\n return {\n suggestedId,\n previewFields,\n };\n } else {\n // This should never happen - this function should always be called with a work\n return {\n suggestedId: '',\n previewFields: [],\n };\n }\n}\n","/*\n * doi.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport interface DOIResult {\n status: 'ok' | 'notfound' | 'nohost' | 'error';\n message: any | null;\n error: string;\n}\n\nexport interface DOIServer {\n fetchCSL: (doi: string, progressDelay: number) => Promise;\n}\n\n// ^10.\\d{4,9}/[-._;()/:A-Z0-9]+$\n// Core regexes come from https://www.crossref.org/blog/dois-and-matching-regular-expressions/\nconst kModernCrossrefDOIRegex = /10.\\d{4,9}\\/[-._;()/:A-Z0-9]+$/i;\nconst kEarlyWileyCrossrefDOIRegex = /10.1002\\/[^\\s]+$/i;\nconst kOtherCrossrefDOIRegex1 = /10.\\\\d{4}\\/\\d+-\\d+X?(\\d+)\\d+<[\\d\\w]+:[\\d\\w]*>\\d+.\\d+.\\w+;\\d$/i;\nconst kOtherCrossrefDOIRegex2 = /10.1021\\/\\w\\w\\d+$/i;\nconst kOtherCrossrefDOIRegex3 = /10.1207\\/[\\w\\d]+\\&\\d+_\\d+$/i;\n\nconst kCrossrefMatches = [\n kModernCrossrefDOIRegex,\n kEarlyWileyCrossrefDOIRegex,\n kOtherCrossrefDOIRegex1,\n kOtherCrossrefDOIRegex2,\n kOtherCrossrefDOIRegex3,\n];\n\n// Determines whether a a given string may be a DOI\n// Note that this will validate the form of the string, but not\n// whether it is actually a registered DOI\nexport function hasDOI(token: string): boolean {\n return findDOI(token) !== undefined;\n}\n\nexport function findDOI(token: string): string | undefined {\n let match = null;\n kCrossrefMatches.find(regex => {\n match = token.match(regex);\n return match && match[0].length > 0;\n });\n\n if (match === null) {\n return undefined;\n } else {\n return match[0];\n }\n}\n\nexport function urlForDOI(doi: string): string {\n return `https://doi.org/${doi}`;\n}\n","/*\n * ui-dialogs.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { LinkTargets, LinkCapabilities, LinkType } from './link';\nimport { ImageDimensions } from './image';\nimport { ListCapabilities, ListType } from './list';\nimport { TableCapabilities } from './table';\nimport { CSL } from './csl';\nimport { CiteField } from './cite';\nimport { kStyleAttrib, attrPartitionKeyvalue, pandocAttrKeyvalueFromText } from './pandoc_attr';\n\nexport interface EditorDialogs {\n alert: AlertFn;\n yesNoMessage: YesNoMessageFn;\n editLink: LinkEditorFn;\n editImage: ImageEditorFn;\n editCodeBlock: CodeBlockEditorFn;\n editList: ListEditorFn;\n editAttr: AttrEditorFn;\n editSpan: AttrEditorFn;\n editDiv: DivAttrEditorFn;\n editRawInline: RawFormatEditorFn;\n editRawBlock: RawFormatEditorFn;\n insertTable: InsertTableFn;\n insertCite: InsertCiteFn;\n htmlDialog: EditorHTMLDialogFn;\n}\n\nexport type EditorHTMLDialogFn = (\n title: string,\n okText: string | null,\n create: EditorHTMLDialogCreateFn,\n focus: VoidFunction,\n validate: EditorHTMLDialogValidateFn,\n) => Promise;\n\nexport type EditorHTMLDialogCreateFn = (\n containerWidth: number,\n containerHeight: number,\n confirm: VoidFunction,\n cancel: VoidFunction,\n showProgress: (message: string) => void,\n hideProgress: VoidFunction,\n) => HTMLElement;\n\nexport type EditorHTMLDialogValidateFn = () => string | null;\n\nexport const kAlertTypeInfo = 1;\nexport const kAlertTypeWarning = 2;\nexport const kAlertTypeError = 3;\n\nexport type AlertFn = (message: string, title: string, type: number) => Promise;\n\nexport type YesNoMessageFn = (\n message: string,\n title: string,\n type: number,\n yesLabel: string,\n noLabel: string,\n) => Promise;\n\nexport type AttrEditorFn = (attr: AttrProps, idHint?: string) => Promise;\n\nexport type DivAttrEditorFn = (attr: AttrProps, removeEnabled: boolean) => Promise;\n\nexport type LinkEditorFn = (\n link: LinkProps,\n targets: LinkTargets,\n capabilities: LinkCapabilities,\n) => Promise;\n\nexport type ImageEditorFn = (\n image: ImageProps,\n dims: ImageDimensions | null,\n editAttributes: boolean,\n) => Promise;\n\nexport type CodeBlockEditorFn = (\n codeBlock: CodeBlockProps,\n attributes: boolean,\n languages: string[],\n) => Promise;\n\nexport type ListEditorFn = (list: ListProps, capabilities: ListCapabilities) => Promise;\n\nexport type RawFormatEditorFn = (raw: RawFormatProps, outputFormats: string[]) => Promise;\n\nexport type InsertTableFn = (capabilities: TableCapabilities) => Promise;\n\nexport type InsertCiteFn = (props: InsertCiteProps) => Promise;\n\nexport interface AttrProps {\n readonly id?: string;\n readonly classes?: string[];\n readonly keyvalue?: Array<[string, string]>;\n}\n\nexport interface AttrEditResult {\n readonly action: 'edit' | 'remove';\n readonly attr: AttrProps;\n}\n\nexport interface LinkProps extends AttrProps {\n readonly type: LinkType;\n readonly text: string;\n readonly href: string;\n readonly heading?: string;\n readonly title?: string;\n}\n\nexport interface LinkEditResult {\n readonly action: 'edit' | 'remove';\n readonly link: LinkProps;\n}\n\nexport interface ImageProps extends AttrProps {\n src: string | null;\n title?: string;\n alt?: string;\n linkTo?: string;\n width?: number;\n height?: number;\n units?: string;\n lockRatio?: boolean;\n}\n\nexport type ImageEditResult = ImageProps;\n\nexport interface CodeBlockProps extends AttrProps {\n lang: string;\n}\n\nexport type CodeBlockEditResult = CodeBlockProps;\n\nexport interface ListProps {\n type: ListType;\n tight: boolean;\n order: number;\n number_style: string;\n number_delim: string;\n}\n\nexport type ListEditResult = ListProps;\n\nexport interface InsertTableResult {\n rows: number;\n cols: number;\n header: boolean;\n caption?: string;\n}\n\nexport interface InsertCiteProps {\n doi: string;\n existingIds: string[];\n bibliographyFiles: string[];\n provider?: string;\n csl?: CSL;\n citeUI?: InsertCiteUI;\n}\n\nexport interface InsertCiteUI {\n suggestedId: string;\n previewFields: CiteField[];\n}\n\nexport interface InsertCiteResult {\n id: string;\n bibliographyFile: string;\n csl: CSL;\n}\n\nexport interface RawFormatProps {\n content: string;\n format: string;\n}\n\nexport interface RawFormatResult {\n readonly action: 'edit' | 'remove';\n readonly raw: RawFormatProps;\n}\n\nexport interface AttrEditInput {\n id?: string;\n classes?: string;\n style?: string;\n keyvalue?: string;\n}\n\nexport function attrInputToProps(attr: AttrEditInput): AttrProps {\n const classes = attr.classes ? attr.classes.split(/\\s+/) : [];\n let keyvalue: Array<[string, string]> | undefined;\n if (attr.keyvalue || attr.style) {\n let text = attr.keyvalue || '';\n if (attr.style) {\n text += `\\nstyle=${attr.style}\\n`;\n }\n keyvalue = pandocAttrKeyvalueFromText(text, '\\n');\n }\n return {\n id: asPandocId(attr.id || ''),\n classes: classes.map(asPandocClass),\n keyvalue,\n };\n}\n\nfunction asPandocId(id: string) {\n return id.replace(/^#/, '');\n}\n\nfunction asPandocClass(clz: string) {\n return clz.replace(/^\\./, '');\n}\n\nexport function attrPropsToInput(attr: AttrProps): AttrEditInput {\n let style: string | undefined;\n let keyvalue: string | undefined;\n if (attr.keyvalue) {\n const partitionedKeyvalue = attrPartitionKeyvalue([kStyleAttrib], attr.keyvalue);\n if (partitionedKeyvalue.partitioned.length > 0) {\n style = partitionedKeyvalue.partitioned[0][1];\n }\n keyvalue = attrTextFromKeyvalue(partitionedKeyvalue.base);\n }\n\n return {\n id: asHtmlId(attr.id) || undefined,\n classes: attr.classes ? attr.classes.map(asHtmlClass).join(' ') : undefined,\n style,\n keyvalue,\n };\n}\n\nfunction attrTextFromKeyvalue(keyvalue: Array<[string, string]>) {\n return keyvalue.map(kv => `${kv[0]}=${kv[1]}`).join('\\n');\n}\n\nfunction asHtmlId(id: string | undefined) {\n if (id) {\n if (id.startsWith('#')) {\n return id;\n } else {\n return '#' + id;\n }\n } else {\n return id;\n }\n}\n\nfunction asHtmlClass(clz: string | undefined) {\n if (clz) {\n if (clz.startsWith('.')) {\n return clz;\n } else {\n return '.' + clz;\n }\n } else {\n return clz;\n }\n}\n","/*\n * pandoc_attr.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { NodeSpec, MarkSpec } from 'prosemirror-model';\n\nimport { PandocToken, PandocExtensions } from './pandoc';\nimport { extensionEnabled, extensionIfEnabled, Extension } from './extension';\n\nexport const kPandocAttrId = 0;\nexport const kPandocAttrClasses = 1;\nexport const kPandocAttrKeyvalue = 2;\n\nconst kDataPmPandocAttr = 'data-pm-pandoc-attr';\n\nexport const kWidthAttrib = 'width';\nexport const kHeightAttrib = 'height';\nexport const kStyleAttrib = 'style';\nexport const kAlignAttrib = 'align';\n\nexport const kCodeBlockAttr = 0;\nexport const kCodeBlockText = 1;\n\nexport const kSpanAttr = 0;\nexport const kSpanChildren = 1;\n\nexport interface PandocAttr {\n id: string;\n classes: string[];\n keyvalue: Array<[string, string]>;\n}\n\nexport const pandocAttrSpec = {\n id: { default: null },\n classes: { default: [] },\n keyvalue: { default: [] },\n};\n\nexport function pandocAttrAvailable(attrs: any) {\n return !!attrs.id || (attrs.classes && attrs.classes.length > 0) || (attrs.keyvalue && attrs.keyvalue.length > 0);\n}\n\nexport function pandocAttrFrom(attrs: any) {\n const pandocAttr: any = {};\n if (attrs.id) {\n pandocAttr.id = attrs.id;\n }\n if (attrs.classes) {\n pandocAttr.classes = attrs.classes;\n }\n if (attrs.keyvalue) {\n pandocAttr.keyvalue = attrs.keyvalue;\n }\n\n return pandocAttr;\n}\n\nexport function pandocAttrInSpec(spec: NodeSpec | MarkSpec) {\n const keys = Object.keys((spec.attrs as object) || {});\n return keys.includes('id') && keys.includes('classes') && keys.includes('keyvalue');\n}\n\nexport function pandocAttrReadAST(tok: PandocToken, index: number) {\n const pandocAttr = tok.c[index];\n return {\n id: pandocAttr[kPandocAttrId] || undefined,\n classes: pandocAttr[kPandocAttrClasses],\n keyvalue: pandocAttr[kPandocAttrKeyvalue],\n };\n}\n\nexport function pandocAttrToDomAttr(attrs: any, marker = true) {\n // id and class\n const domAttr: any = {};\n if (attrs.id) {\n domAttr.id = attrs.id;\n }\n if (attrs.classes && attrs.classes.length > 0) {\n domAttr.class = attrs.classes.join(' ');\n }\n\n // keyvalue pairs\n attrs.keyvalue.forEach((keyvalue: [string, string]) => {\n domAttr[keyvalue[0]] = keyvalue[1];\n });\n\n // marker\n if (marker) {\n domAttr[kDataPmPandocAttr] = '1';\n }\n\n return domAttr;\n}\n\nexport function pandocAttrParseDom(el: Element, attrs: { [key: string]: string | null }, forceAttrs = false) {\n // exclude any keys passed to us\n const excludedNames = Object.keys(attrs);\n\n // if this isn't from a prosemirror pandoc node then include only src and alt\n const includedNames: string[] = [];\n if (!forceAttrs && !el.hasAttribute(kDataPmPandocAttr)) {\n includedNames.push('src', 'alt');\n }\n\n // read attributes\n const attr: any = {};\n attr.classes = [];\n attr.keyvalue = [];\n el.getAttributeNames().forEach(name => {\n const value: string = el.getAttribute(name) as string;\n // exclude attributes already parsed and prosemirror internal attributes\n if (excludedNames.indexOf(name) === -1 && !name.startsWith('data-pm')) {\n // if we have an include filter then use it\n if (!includedNames.length || includedNames.includes(name)) {\n if (name === 'id') {\n attr.id = value;\n } else if (name === 'class') {\n attr.classes = value\n .split(/\\s+/)\n .filter(val => !!val.length)\n .filter(val => !val.startsWith('pm-'));\n } else {\n attr.keyvalue.push([name, value]);\n }\n }\n }\n });\n return attr;\n}\n\nexport function pandocAttrParseText(attr: string): PandocAttr | null {\n attr = attr.trim();\n\n let id = '';\n const classes: string[] = [];\n let remainder = '';\n\n let current = '';\n const resolveCurrent = () => {\n const resolve = current;\n current = '';\n\n if (resolve.length === 0) {\n return true;\n } else if (resolve.startsWith('#')) {\n if (id.length === 0 && resolve.length > 1) {\n id = resolve.substr(1);\n return true;\n } else {\n return false;\n }\n } else if (resolve.startsWith('.')) {\n if (resolve.length > 1) {\n classes.push(resolve.substr(1));\n return true;\n } else {\n return false;\n }\n } else {\n remainder = resolve;\n return true;\n }\n };\n\n for (let i = 0; i < attr.length; i++) {\n let inQuotes = false;\n const ch = attr[i];\n inQuotes = ch === '\"' ? !inQuotes : inQuotes;\n if (ch !== ' ' && !inQuotes) {\n current += ch;\n } else if (resolveCurrent()) {\n // if we have a remainder then the rest of the string is the remainder\n if (remainder.length > 0) {\n remainder = remainder + attr.substr(i);\n break;\n }\n } else {\n return null;\n }\n }\n\n if (resolveCurrent()) {\n if (id.length === 0 && classes.length === 0) {\n remainder = attr;\n }\n return {\n id,\n classes,\n keyvalue: remainder.length > 0 ? pandocAttrKeyvalueFromText(remainder, ' ') : [],\n };\n } else {\n return null;\n }\n}\n\nexport function pandocAttrKeyvalueFromText(text: string, separator: ' ' | '\\n'): Array<[string, string]> {\n // if the separator is a space then convert unquoted spaces to newline\n if (separator === ' ') {\n let convertedText = '';\n let inQuotes = false;\n for (let i = 0; i < text.length; i++) {\n let ch = text.charAt(i);\n if (ch === '\"') {\n inQuotes = !inQuotes;\n } else if (ch === ' ' && !inQuotes) {\n ch = '\\n';\n }\n convertedText += ch;\n }\n text = convertedText;\n }\n\n const lines = text.trim().split('\\n');\n return lines.map(line => {\n const parts = line.trim().split('=');\n return [parts[0], (parts[1] || '').replace(/^\"/, '').replace(/\"$/, '')];\n });\n}\n\nexport interface AttrKeyvaluePartitioned {\n base: Array<[string, string]>;\n partitioned: Array<[string, string]>;\n}\n\nexport function attrPartitionKeyvalue(partition: string[], keyvalue: Array<[string, string]>): AttrKeyvaluePartitioned {\n const base = new Array<[string, string]>();\n const partitioned = new Array<[string, string]>();\n\n keyvalue.forEach(kv => {\n if (partition.includes(kv[0])) {\n partitioned.push(kv);\n } else {\n base.push(kv);\n }\n });\n\n return {\n base,\n partitioned,\n };\n}\n\nexport function extensionIfPandocAttrEnabled(extension: Extension) {\n return extensionIfEnabled(extension, kPandocAttrExtensions);\n}\n\nexport function pandocAttrEnabled(pandocExtensions: PandocExtensions) {\n return extensionEnabled(pandocExtensions, kPandocAttrExtensions);\n}\n\nconst kPandocAttrExtensions = [\n 'link_attributes',\n 'mmd_link_attributes',\n 'mmd_header_identifiers',\n 'header_attributes',\n 'fenced_code_attributes',\n 'inline_code_attributes',\n 'bracketed_spans',\n 'native_spans',\n 'fenced_divs',\n 'native_divs',\n];\n","/*\n * extension.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { InputRule } from 'prosemirror-inputrules';\nimport { Schema } from 'prosemirror-model';\nimport { Plugin } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { ProsemirrorCommand } from './command';\nimport { PandocMark } from './mark';\nimport { PandocNode } from './node';\nimport { EditorUI } from './ui';\nimport { BaseKeyBinding } from './basekeys';\nimport { AppendTransactionHandler, AppendMarkTransactionHandler } from './transaction';\nimport { EditorOptions } from './options';\nimport { PandocExtensions } from './pandoc';\nimport { FixupFn } from './fixup';\nimport { EditorEvents } from './events';\nimport { PandocCapabilities } from './pandoc_capabilities';\nimport { EditorFormat } from './format';\nimport { MarkInputRuleFilter } from './input_rule';\nimport { CompletionHandler } from './completion';\nimport { EditorNavigation } from './navigation';\nimport { EditorMath } from './math';\nimport { EditorServer } from './server';\n\nexport interface Extension {\n marks?: PandocMark[];\n nodes?: PandocNode[];\n baseKeys?: (schema: Schema) => readonly BaseKeyBinding[];\n inputRules?: (schema: Schema, markFilter: MarkInputRuleFilter) => readonly InputRule[];\n commands?: (schema: Schema) => readonly ProsemirrorCommand[];\n plugins?: (schema: Schema) => readonly Plugin[];\n appendTransaction?: (schema: Schema) => readonly AppendTransactionHandler[];\n appendMarkTransaction?: (schema: Schema) => readonly AppendMarkTransactionHandler[];\n fixups?: (schema: Schema, view: EditorView) => Readonly;\n completionHandlers?: () => readonly CompletionHandler[];\n}\n\nexport interface ExtensionContext {\n pandocExtensions: PandocExtensions;\n pandocCapabilities: PandocCapabilities;\n server: EditorServer;\n ui: EditorUI;\n math?: EditorMath;\n format: EditorFormat;\n options: EditorOptions;\n events: EditorEvents;\n navigation: EditorNavigation;\n}\n\nexport type ExtensionFn = (context: ExtensionContext) => Extension | null;\n\n// create an ExtensionFn for a given extension and format option that must be enabled\nexport function extensionIfEnabled(extension: Extension, name: string | string[]) {\n return (context: ExtensionContext) => {\n if (extensionEnabled(context.pandocExtensions, name)) {\n return extension;\n } else {\n return null;\n }\n };\n}\n\nexport function extensionEnabled(pandocExtensions: PandocExtensions, name: string | string[]) {\n // match single extension name\n if (typeof name === 'string') {\n if (pandocExtensions[name]) {\n return true;\n }\n\n // match any one of several names\n } else if (Array.isArray(name)) {\n for (const nm of name) {\n if (pandocExtensions[nm]) {\n return true;\n }\n }\n }\n\n return false;\n}\n","/*\n * pandoc_capabilities.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { PandocServer, parsePandocListOutput, PandocApiVersion } from './pandoc';\n\nexport interface PandocCapabilitiesResult {\n version: string;\n api_version: PandocApiVersion;\n output_formats: string;\n highlight_languages: string;\n}\n\nexport interface PandocCapabilities {\n version: string;\n api_version: PandocApiVersion;\n output_formats: string[];\n highlight_languages: string[];\n}\n\nexport async function getPandocCapabilities(server: PandocServer) {\n const result = await server.getCapabilities();\n return {\n version: result.version,\n api_version: result.api_version,\n output_formats: parsePandocListOutput(result.output_formats),\n highlight_languages: parsePandocListOutput(result.highlight_languages),\n };\n}\n","/*\n * pandoc.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Fragment, Mark, Node as ProsemirrorNode, Schema, NodeType } from 'prosemirror-model';\n\nimport { PandocAttr, pandocAttrReadAST, kSpanChildren, kSpanAttr } from './pandoc_attr';\nimport { PandocCapabilitiesResult } from './pandoc_capabilities';\nimport { kQuoteType, kQuoteChildren, QuoteType } from './quote';\nimport { BibliographyResult } from './bibliography/bibliography-provider_local';\n\nimport { stringifyMath } from './math';\nimport { kCodeText } from './code';\nimport { kLinkChildren } from './link';\n\nexport interface PandocServer {\n getCapabilities(): Promise;\n markdownToAst(markdown: string, format: string, options: string[]): Promise;\n astToMarkdown(ast: PandocAst, format: string, options: string[]): Promise;\n listExtensions(format: string): Promise;\n getBibliography(\n file: string | null,\n bibliography: string[],\n refBlock: string | null,\n etag: string | null,\n ): Promise;\n addToBibliography(\n bibliography: string,\n project: boolean,\n id: string,\n sourceAsJson: string,\n sourceAsBibTeX: string,\n ): Promise;\n citationHTML(file: string | null, sourceAsJson: string, csl: string | null): Promise;\n}\n\nexport interface PandocWriterReferencesOptions {\n location?: string; // block | section | document\n prefix?: string;\n}\n\nexport interface PandocWriterOptions {\n atxHeaders?: boolean;\n references?: PandocWriterReferencesOptions;\n wrap?: string;\n dpi?: number;\n}\n\nexport interface PandocExtensions {\n abbreviations: boolean;\n all_symbols_escapable: boolean;\n amuse: boolean;\n angle_brackets_escapable: boolean;\n ascii_identifiers: boolean;\n auto_identifiers: boolean;\n autolink_bare_uris: boolean;\n backtick_code_blocks: boolean;\n blank_before_blockquote: boolean;\n blank_before_header: boolean;\n bracketed_spans: boolean;\n citations: boolean;\n compact_definition_lists: boolean;\n definition_lists: boolean;\n east_asian_line_breaks: boolean;\n emoji: boolean;\n empty_paragraphs: boolean;\n epub_html_exts: boolean;\n escaped_line_breaks: boolean;\n example_lists: boolean;\n fancy_lists: boolean;\n fenced_code_attributes: boolean;\n fenced_code_blocks: boolean;\n fenced_divs: boolean;\n footnotes: boolean;\n four_space_rule: boolean;\n gfm_auto_identifiers: boolean;\n grid_tables: boolean;\n hard_line_breaks: boolean;\n header_attributes: boolean;\n ignore_line_breaks: boolean;\n implicit_figures: boolean;\n implicit_header_references: boolean;\n inline_code_attributes: boolean;\n inline_notes: boolean;\n intraword_underscores: boolean;\n latex_macros: boolean;\n line_blocks: boolean;\n link_attributes: boolean;\n lists_without_preceding_blankline: boolean;\n literate_haskell: boolean;\n markdown_attribute: boolean;\n markdown_in_html_blocks: boolean;\n mmd_header_identifiers: boolean;\n mmd_link_attributes: boolean;\n mmd_title_block: boolean;\n multiline_tables: boolean;\n native_divs: boolean;\n native_spans: boolean;\n native_numbering: boolean;\n ntb: boolean;\n old_dashes: boolean;\n pandoc_title_block: boolean;\n pipe_tables: boolean;\n raw_attribute: boolean;\n raw_html: boolean;\n raw_tex: boolean;\n shortcut_reference_links: boolean;\n simple_tables: boolean;\n smart: boolean;\n space_in_atx_header: boolean;\n spaced_reference_links: boolean;\n startnum: boolean;\n strikeout: boolean;\n subscript: boolean;\n superscript: boolean;\n styles: boolean;\n task_lists: boolean;\n table_captions: boolean;\n tex_math_dollars: boolean;\n tex_math_double_backslash: boolean;\n tex_math_single_backslash: boolean;\n yaml_metadata_block: boolean;\n gutenberg: boolean;\n // attributes: boolean; (not yet)\n [key: string]: boolean;\n}\n\nexport function imageAttributesAvailable(pandocExtensions: PandocExtensions) {\n return pandocExtensions.link_attributes || pandocExtensions.raw_html;\n}\n\nexport function parsePandocListOutput(output: string) {\n return output.split(/\\r?\\n/).filter(entry => entry.length);\n}\n\nexport interface PandocAst {\n blocks: PandocToken[];\n 'pandoc-api-version': PandocApiVersion;\n meta: any;\n heading_ids?: string[]; // used only for reading not writing\n}\n\nexport type PandocApiVersion = number[];\n\nexport interface PandocToken {\n t: string;\n c?: any;\n}\n\n// https://github.com/jgm/pandoc-types/blob/master/Text/Pandoc/Definition.hs\nexport enum PandocTokenType {\n Str = 'Str',\n Space = 'Space',\n Strong = 'Strong',\n Emph = 'Emph',\n Code = 'Code',\n Superscript = 'Superscript',\n Subscript = 'Subscript',\n Strikeout = 'Strikeout',\n SmallCaps = 'SmallCaps',\n Underline = 'Underline',\n Quoted = 'Quoted',\n RawInline = 'RawInline',\n RawBlock = 'RawBlock',\n LineBlock = 'LineBlock',\n Para = 'Para',\n Plain = 'Plain',\n Header = 'Header',\n CodeBlock = 'CodeBlock',\n BlockQuote = 'BlockQuote',\n BulletList = 'BulletList',\n OrderedList = 'OrderedList',\n DefinitionList = 'DefinitionList',\n Image = 'Image',\n Link = 'Link',\n Note = 'Note',\n Cite = 'Cite',\n Table = 'Table',\n AlignRight = 'AlignRight',\n AlignLeft = 'AlignLeft',\n AlignDefault = 'AlignDefault',\n AlignCenter = 'AlignCenter',\n ColWidth = 'ColWidth',\n ColWidthDefault = 'ColWidthDefault',\n HorizontalRule = 'HorizontalRule',\n LineBreak = 'LineBreak',\n SoftBreak = 'SoftBreak',\n Math = 'Math',\n InlineMath = 'InlineMath',\n DisplayMath = 'DisplayMath',\n Div = 'Div',\n Span = 'Span',\n Null = 'Null',\n}\n\nexport interface PandocTokenReader {\n // pandoc token name (e.g. \"Str\", \"Emph\", etc.)\n readonly token: PandocTokenType;\n\n // If present, gives a chance for the reader to decide whether it actually\n // wants to handle the token, based on factors other than the PandocTokenType\n readonly match?: (tok: PandocToken) => boolean;\n\n // one and only one of these values must also be set\n readonly text?: boolean;\n readonly node?: string;\n readonly block?: string;\n readonly mark?: string;\n readonly code_block?: boolean;\n\n // functions for getting attributes and children\n getAttrs?: (tok: PandocToken) => any;\n getChildren?: (tok: PandocToken) => any[];\n getText?: (tok: PandocToken) => string;\n\n // lower-level handler function that overrides the above handler attributes\n // (they are ignored when handler is specified)\n handler?: (schema: Schema) => (writer: ProsemirrorWriter, tok: PandocToken) => void;\n\n // post-processor for performing fixups that rely on seeing the entire\n // document (e.g. recognizing implicit header references)\n postprocessor?: PandocPostprocessorFn;\n}\n\n// constants used to read the contents of raw blocks\nexport const kRawBlockFormat = 0;\nexport const kRawBlockContent = 1;\n\n// filter sequences of tokens (e.g. for reducing some adjacent tokens to a single token)\nexport type PandocTokensFilterFn = (tokens: PandocToken[], writer: ProsemirrorWriter) => PandocToken[];\n\n// special reader that gets a first shot at blocks (i.e. to convert a para w/ a single image into a figure)\nexport type PandocBlockReaderFn = (schema: Schema, tok: PandocToken, writer: ProsemirrorWriter) => boolean;\n\n// reader that gets a first shot at inline html (e.g. image node parsing an tag)\nexport type PandocInlineHTMLReaderFn = (schema: Schema, html: string, writer?: ProsemirrorWriter) => boolean;\n\nexport interface ProsemirrorWriter {\n // open (then close) a node container\n openNode(type: NodeType, attrs: {}): void;\n closeNode(): ProsemirrorNode;\n\n // special open call for note node containers\n openNoteNode(ref: string): void;\n\n // add a node to the current container\n addNode(type: NodeType, attrs: {}, content: ProsemirrorNode[]): ProsemirrorNode | null;\n\n // open and close marks\n openMark(mark: Mark): void;\n closeMark(mark: Mark): void;\n\n // add text to the current node using the current mark set\n writeText(text: string): void;\n\n // write tokens into the current node\n writeTokens(tokens: PandocToken[]): void;\n\n // see if any inline HTML readers want to handle this html\n hasInlineHTMLWriter(html: string): boolean;\n writeInlineHTML(html: string): void;\n\n // log an unrecoginzed token type\n logUnrecognized(token: string): void;\n\n // query whether a given node type is open\n // (useful for e.g. conditional behavior when in a list or table)\n isNodeOpen(type: NodeType): boolean;\n}\n\nexport interface PandocNodeWriter {\n readonly name: string;\n readonly write: PandocNodeWriterFn;\n}\n\nexport type PandocNodeWriterFn = (output: PandocOutput, node: ProsemirrorNode) => void;\n\nexport type PandocPreprocessorFn = (markdown: string) => string;\n\nexport type PandocPostprocessorFn = (doc: ProsemirrorNode) => ProsemirrorNode;\n\nexport interface PandocMarkWriter {\n // pandoc mark name\n readonly name: string;\n\n // The 'priority' property allows us to dicate the order of nesting\n // for marks (this is required b/c Prosemirror uses a flat structure\n // whereby multiple marks are attached to text nodes). This allows us\n // to e.g. ensure that strong and em always occur outside code.\n readonly priority: number;\n\n // writer function\n readonly write: PandocMarkWriterFn;\n}\n\nexport type PandocMarkWriterFn = (output: PandocOutput, mark: Mark, parent: Fragment) => void;\n\nexport type PandocOutputOption = 'writeSpaces';\n\nexport interface PandocOutput {\n extensions: PandocExtensions;\n write(value: any): void;\n writeToken(type: PandocTokenType, content?: (() => void) | any): void;\n writeMark(type: PandocTokenType, parent: Fragment, expelEnclosingWhitespace?: boolean): void;\n writeArray(content: () => void): void;\n writeAttr(id?: string, classes?: string[], keyvalue?: [[string, string]]): void;\n writeText(text: string | null): void;\n writeLink(href: string, title: string, attr: PandocAttr | null, f: () => void): void;\n writeNode(node: ProsemirrorNode): void;\n writeNodes(parent: ProsemirrorNode): void;\n writeNote(note: ProsemirrorNode): void;\n writeInlines(fragment: Fragment): void;\n writeRawMarkdown(markdown: Fragment | string, escapeSymbols?: boolean): void;\n withOption(option: PandocOutputOption, value: boolean, f: () => void): void;\n}\n\n// collect the text from a collection of pandoc ast\n// elements (ignores marks, useful for ast elements\n// that support marks but whose prosemirror equivalent\n// does not, e.g. image alt text)\n// https://github.com/jgm/pandoc/blob/83880b0dbc318703babfbb6905b1046fa48f1216/src/Text/Pandoc/Shared.hs#L439\nexport function stringifyTokens(c: PandocToken[], unemoji = false): string {\n return c\n .map(elem => {\n if (elem.t === PandocTokenType.Str) {\n return elem.c;\n } else if (\n elem.t === PandocTokenType.Space ||\n elem.t === PandocTokenType.SoftBreak ||\n elem.t === PandocTokenType.LineBreak\n ) {\n return ' ';\n } else if (elem.t === PandocTokenType.Link) {\n return stringifyTokens(elem.c[kLinkChildren]);\n } else if (elem.t === PandocTokenType.Span) {\n const attr = pandocAttrReadAST(elem, kSpanAttr);\n if (unemoji && attr.classes && attr.classes[0] === 'emoji') {\n return attr.keyvalue[0][1];\n } else {\n return stringifyTokens(elem.c[kSpanChildren]);\n }\n } else if (elem.t === PandocTokenType.Quoted) {\n const type = elem.c[kQuoteType].t;\n const quote = type === QuoteType.SingleQuote ? \"'\" : '\"';\n return quote + stringifyTokens(elem.c[kQuoteChildren]) + quote;\n } else if (elem.t === PandocTokenType.Math) {\n return stringifyMath(elem);\n } else if (elem.t === PandocTokenType.Code) {\n return elem.c[kCodeText];\n } else if (elem.c) {\n return stringifyTokens(elem.c);\n } else {\n return '';\n }\n })\n .join('');\n}\n\nexport function forEachToken(tokens: PandocToken[], f: (tok: PandocToken) => void) {\n mapTokens(tokens, (tok: PandocToken) => {\n f(tok);\n return tok;\n });\n}\n\nexport function mapTokens(tokens: PandocToken[], f: (tok: PandocToken) => PandocToken) {\n function isToken(val: any) {\n if (val !== null && typeof val === 'object') {\n return val.hasOwnProperty('t');\n } else {\n return false;\n }\n }\n\n function tokenHasChildren(tok: PandocToken) {\n return tok !== null && typeof tok === 'object' && Array.isArray(tok.c);\n }\n\n function mapValue(val: any): any {\n if (isToken(val)) {\n return mapToken(val);\n } else if (Array.isArray(val)) {\n return val.map(mapValue);\n } else {\n return val;\n }\n }\n\n function mapToken(tok: PandocToken): PandocToken {\n const mappedTok = f(tok);\n if (tokenHasChildren(mappedTok)) {\n mappedTok.c = mappedTok.c.map(mapValue);\n }\n return mappedTok;\n }\n\n return tokens.map(mapToken);\n}\n\nexport function tokenTextEscaped(t: PandocToken) {\n return t.c.replace(/\\\\/g, `\\\\\\\\`);\n}\n\n// sort marks by priority (in descending order)\nexport function marksByPriority(marks: Mark[], markWriters: { [key: string]: PandocMarkWriter }) {\n return marks.sort((a: Mark, b: Mark) => {\n const aPriority = markWriters[a.type.name].priority;\n const bPriority = markWriters[b.type.name].priority;\n if (aPriority < bPriority) {\n return 1;\n } else if (bPriority < aPriority) {\n return -1;\n } else {\n return 0;\n }\n });\n}\n","/*\n * quote.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport const kQuoteType = 0;\nexport const kQuoteChildren = 1;\n\nexport enum QuoteType {\n SingleQuote = 'SingleQuote',\n DoubleQuote = 'DoubleQuote',\n}\n\nexport function quotesForType(type: QuoteType) {\n const dblQuote = type === QuoteType.DoubleQuote;\n return {\n begin: dblQuote ? '“' : '‘',\n end: dblQuote ? '”' : '’',\n };\n}\n\n// create regexs for removing quotes\nconst kSingleQuotes = quotesForType(QuoteType.SingleQuote);\nconst kSingleQuoteRegEx = new RegExp(`[${kSingleQuotes.begin}${kSingleQuotes.end}]`, 'g');\nconst kDoubleQuotes = quotesForType(QuoteType.DoubleQuote);\nconst kDoubleQuoteRegEx = new RegExp(`[${kDoubleQuotes.begin}${kDoubleQuotes.end}]`, 'g');\n\nexport function fancyQuotesToSimple(text: string) {\n return text.replace(kSingleQuoteRegEx, \"'\").replace(kDoubleQuoteRegEx, '\"');\n}\n","/*\n * math.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorUI } from './ui';\nimport { PandocToken } from './pandoc';\n\nexport const kMathType = 0;\nexport const kMathContent = 1;\n\nexport enum MathType {\n Inline = 'InlineMath',\n Display = 'DisplayMath',\n}\n\nexport interface EditorMath {\n typeset: (el: HTMLElement, math: string, priority: boolean) => Promise;\n}\n\nexport function editorMath(ui: EditorUI): EditorMath {\n // return a promise that will typeset this node's math (including retrying as long as is\n // required if the element is not yet connected to the DOM)\n return {\n typeset: (el: HTMLElement, math: string, priority: boolean): Promise => {\n return new Promise(resolve => {\n // regular typeset if we are already connected\n if (el.isConnected) {\n ui.math.typeset!(el, math, priority).then(resolve);\n } else {\n // otherwise wait 100ms then retry\n const timerId = setInterval(() => {\n if (el.isConnected) {\n clearInterval(timerId);\n ui.math.typeset!(el, math, priority).then(resolve);\n }\n }, 100);\n }\n });\n },\n };\n}\n\nexport function delimiterForType(type: string) {\n if (type === MathType.Inline) {\n return '$';\n } else {\n return '$$';\n }\n}\n\nexport function stringifyMath(tok: PandocToken) {\n const delimter = delimiterForType(tok.c[kMathType].t);\n return delimter + tok.c[kMathContent] + delimter;\n}\n","/*\n * code.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Plugin, PluginKey } from 'prosemirror-state';\n\nimport { CodeViewOptions, canInsertNodeAtPos } from './node';\nimport { ResolvedPos, Slice, Fragment } from 'prosemirror-model';\n\nexport const kCodeAttr = 0;\nexport const kCodeText = 1;\n\nexport function codeNodeSpec() {\n return {\n content: 'text*',\n group: 'block',\n marks: '',\n code: true,\n defining: true,\n isolating: true,\n };\n}\n\nexport function codeViewClipboardPlugin(codeViews: { [key: string]: CodeViewOptions }) {\n return new Plugin({\n key: new PluginKey('code-view-clipboard'),\n props: {\n clipboardTextParser: (text: string, $context: ResolvedPos): any => {\n // see if any of the code views want to handle this text\n for (const codeViewType of Object.keys(codeViews)) {\n const codeView = codeViews[codeViewType];\n if (codeView.createFromPastePattern && codeView.createFromPastePattern.test(text)) {\n const schema = $context.node().type.schema;\n const nodeType = schema.nodes[codeViewType];\n if (canInsertNodeAtPos($context, nodeType)) {\n const textNode = schema.text(text);\n const codeNode = nodeType.createAndFill({}, textNode);\n return new Slice(Fragment.from(codeNode), 0, 0);\n }\n }\n }\n return null;\n },\n },\n });\n}\n","/*\n * node.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, NodeSpec, NodeType, ResolvedPos, Slice } from 'prosemirror-model';\nimport { EditorState, Selection, NodeSelection } from 'prosemirror-state';\nimport {\n findParentNode,\n findSelectedNodeOfType,\n ContentNodeWithPos,\n NodeWithPos,\n findParentNodeOfType,\n findChildrenByType,\n findChildren,\n findParentNodeOfTypeClosestToPos,\n} from 'prosemirror-utils';\n\nimport { EditorView } from 'prosemirror-view';\n\nimport {\n PandocTokenReader,\n PandocNodeWriterFn,\n PandocPreprocessorFn,\n PandocBlockReaderFn,\n PandocInlineHTMLReaderFn,\n PandocTokensFilterFn,\n} from './pandoc';\nimport { PandocBlockCapsuleFilter } from './pandoc_capsule';\n\nimport { AttrEditOptions } from './attr_edit';\nimport { CommandFn } from './command';\nimport { ExecuteRmdChunkFn } from './rmd';\n\nexport interface PandocNode {\n readonly name: string;\n readonly spec: NodeSpec;\n readonly code_view?: CodeViewOptions;\n readonly attr_edit?: () => AttrEditOptions | null;\n readonly pandoc: {\n readonly readers?: readonly PandocTokenReader[];\n readonly writer?: PandocNodeWriterFn;\n readonly preprocessor?: PandocPreprocessorFn;\n readonly tokensFilter?: PandocTokensFilterFn;\n readonly blockReader?: PandocBlockReaderFn;\n readonly inlineHTMLReader?: PandocInlineHTMLReaderFn;\n readonly blockCapsuleFilter?: PandocBlockCapsuleFilter;\n };\n}\n\nexport interface CodeViewOptions {\n lang: (node: ProsemirrorNode, content: string) => string | null;\n attrEditFn?: CommandFn;\n createFromPastePattern?: RegExp;\n classes?: string[];\n borderColorClass?: string;\n firstLineMeta?: boolean;\n lineNumbers?: boolean;\n bookdownTheorems?: boolean;\n lineNumberFormatter?: (lineNumber: number, lineCount?: number, line?: string) => string;\n}\n\nexport type NodeTraversalFn = (\n node: Node,\n pos: number,\n parent: Node,\n index: number,\n) => boolean | void | null | undefined;\n\nexport function findTopLevelBodyNodes(doc: ProsemirrorNode, predicate: (node: ProsemirrorNode) => boolean) {\n const body = findChildrenByType(doc, doc.type.schema.nodes.body, false)[0];\n const offset = body.pos + 1;\n const nodes = findChildren(body.node, predicate, false);\n return nodes.map(value => ({ ...value, pos: value.pos + offset }));\n}\n\nexport function findNodeOfTypeInSelection(selection: Selection, type: NodeType): ContentNodeWithPos | undefined {\n return findSelectedNodeOfType(type)(selection) || findParentNode((n: ProsemirrorNode) => n.type === type)(selection);\n}\n\nexport function firstNode(parent: NodeWithPos, predicate: (node: ProsemirrorNode) => boolean) {\n let foundNode: NodeWithPos | undefined;\n parent.node.descendants((node, pos) => {\n if (!foundNode) {\n if (predicate(node)) {\n foundNode = {\n node,\n pos: parent.pos + 1 + pos,\n };\n return false;\n }\n } else {\n return false;\n }\n });\n return foundNode;\n}\n\nexport function lastNode(parent: NodeWithPos, predicate: (node: ProsemirrorNode) => boolean) {\n let last: NodeWithPos | undefined;\n parent.node.descendants((node, pos) => {\n if (predicate(node)) {\n last = {\n node,\n pos: parent.pos + 1 + pos,\n };\n }\n });\n return last;\n}\n\nexport function nodeIsActive(state: EditorState, type: NodeType, attrs = {}) {\n const predicate = (n: ProsemirrorNode) => n.type === type;\n const node = findSelectedNodeOfType(type)(state.selection) || findParentNode(predicate)(state.selection);\n\n if (!Object.keys(attrs).length || !node) {\n return !!node;\n }\n\n return node.node.hasMarkup(type, attrs);\n}\n\nexport function canInsertNode(context: EditorState | Selection, nodeType: NodeType) {\n const selection = asSelection(context);\n const $from = selection.$from;\n return canInsertNodeAtPos($from, nodeType);\n}\n\nexport function canInsertNodeAtPos($pos: ResolvedPos, nodeType: NodeType) {\n for (let d = $pos.depth; d >= 0; d--) {\n const index = $pos.index(d);\n if ($pos.node(d).canReplaceWith(index, index, nodeType)) {\n return true;\n }\n }\n return false;\n}\n\nexport function canInsertTextNode(context: EditorState | Selection) {\n const selection = asSelection(context);\n return canInsertNode(selection, selection.$head.parent.type.schema.nodes.text);\n}\n\nexport function insertAndSelectNode(view: EditorView, node: ProsemirrorNode) {\n // create new transaction\n const tr = view.state.tr;\n\n // insert the node over the existing selection\n tr.ensureMarks(node.marks);\n tr.replaceSelectionWith(node);\n\n // set selection to inserted node (or don't if our selection calculate was off,\n // as can happen when we insert into a list bullet)\n const selectionPos = tr.doc.resolve(tr.mapping.map(view.state.selection.from, -1));\n const selectionNode = tr.doc.nodeAt(selectionPos.pos);\n if (selectionNode && selectionNode.type === node.type) {\n tr.setSelection(new NodeSelection(selectionPos));\n }\n\n // dispatch transaction\n view.dispatch(tr);\n}\n\nexport function editingRootNode(selection: Selection) {\n const schema = selection.$head.node().type.schema;\n return findParentNodeOfType(schema.nodes.body)(selection) || findParentNodeOfType(schema.nodes.note)(selection);\n}\n\nexport function editingRootNodeClosestToPos($pos: ResolvedPos) {\n const schema = $pos.node().type.schema;\n return (\n findParentNodeOfTypeClosestToPos($pos, schema.nodes.body) ||\n findParentNodeOfTypeClosestToPos($pos, schema.nodes.note)\n );\n}\n\nexport function editingRootScrollContainerElement(view: EditorView) {\n const editingNode = editingRootNode(view.state.selection);\n if (editingNode) {\n const editingEl = view.domAtPos(editingNode.pos + 1).node;\n return editingEl.parentElement;\n } else {\n return undefined;\n }\n}\n\nfunction asSelection(context: EditorState | Selection) {\n return context instanceof EditorState ? context.selection : context;\n}\n","/*\n * link.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { findChildren, findChildrenByType } from 'prosemirror-utils';\n\nexport const kLinkTargetUrl = 0;\nexport const kLinkTargetTitle = 1;\n\nexport const kLinkAttr = 0;\nexport const kLinkChildren = 1;\nexport const kLinkTarget = 2;\n\nexport enum LinkType {\n URL = 0,\n Heading = 1,\n ID = 2,\n}\n\nexport interface LinkCapabilities {\n headings: boolean;\n attributes: boolean;\n text: boolean;\n}\n\nexport interface LinkTargets {\n readonly ids: string[];\n readonly headings: LinkHeadingTarget[];\n}\n\nexport interface LinkHeadingTarget {\n readonly level: number;\n readonly text: string;\n}\n\nexport async function linkTargets(doc: ProsemirrorNode) {\n const ids = findChildren(doc, node => !!node.attrs.id).map(value => value.node.attrs.id);\n\n const headings = findChildrenByType(doc, doc.type.schema.nodes.heading).map(heading => ({\n level: heading.node.attrs.level,\n text: heading.node.textContent,\n }));\n\n return {\n ids,\n headings,\n };\n}\n","/*\n * html.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, DOMSerializer, Fragment } from 'prosemirror-model';\n\nexport const kHTMLCommentRegEx = /(?:^|[^`])()/;\n\nexport function isHTMLComment(html: string) {\n return !!html.match(kHTMLCommentRegEx);\n}\n\nexport function isSingleLineHTML(html: string) {\n return html.trimRight().split('\\n').length === 1;\n}\n\nexport function asHTMLTag(\n tag: string,\n attribs: { [key: string]: string },\n selfClosing = false,\n noEmptyAttribs = false,\n) {\n const attribsHTML = Object.keys(attribs)\n .filter(name => !noEmptyAttribs || attribs[name])\n .map(name => `${name}=\"${escapeHTMLAttribute(attribs[name])}\"`)\n .join(' ');\n return `<${tag} ${attribsHTML}${selfClosing ? '/' : ''}>`;\n}\n\nexport function escapeHTMLAttribute(value: string) {\n return value\n .replace(/&/g, '&') // must be first replacement\n .replace(/'/g, ''')\n .replace(/\"/g, '"')\n .replace(//g, '>');\n}\n\nexport function nodeToHTML(schema: Schema, node: ProsemirrorNode) {\n return generateHTML(() => DOMSerializer.fromSchema(schema).serializeNode(node));\n}\n\nexport function fragmentToHTML(schema: Schema, fragment: Fragment) {\n return generateHTML(() => DOMSerializer.fromSchema(schema).serializeFragment(fragment));\n}\n\nfunction generateHTML(generator: () => Node | DocumentFragment) {\n const div = document.createElement('div');\n const output = generator();\n div.appendChild(output);\n return div.innerHTML;\n}\n","/*\n * events.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\n/**\n * Represents an event type; only a single instance of this should exist per\n * event type (akin to PluginKey) and it should be visible to everyone who wants\n * to subscribe to or emit events of that type. Do not create one of these\n * directly, instead use makeEventType().\n */\nexport interface EventType {\n readonly eventName: string;\n // This field is needed only to prevent TDetail from being ignored by the type\n // checker; if TDetail isn't used, tsc acts as if EventType isn't generic.\n readonly dummy?: TDetail;\n}\n\n/**\n * Type signature of event-handler functions; the TDetail must match with the\n * EventType being subscribed to.\n *\n * (Note that the detail is always optional. I couldn't figure out how to make\n * it mandatory for some event types, forbidden for others, and optional for\n * still others, so it's just optional for everyone.)\n */\nexport type EventHandler = (detail?: TDetail) => void;\n\n/**\n * Generic interface for objects that support eventing.\n *\n * TODO: I don't see a reason why this interface should support both\n * subscription *and* emitting, the latter seems like something private.\n */\nexport interface EditorEvents {\n subscribe(event: EventType, handler: EventHandler): VoidFunction;\n emit(event: EventType, detail?: TDetail): void;\n}\n\n/**\n * Creates a new type of event. Use the TDetail type parameter to indicate the\n * type of data, if any, that event handlers can expect.\n */\nexport function makeEventType(eventName: string) {\n return { eventName: `panmirror${eventName}` } as EventType;\n}\n\n/**\n * An implementation of EditorEvents, using the DOM event system.\n */\nexport class DOMEditorEvents implements EditorEvents {\n private readonly el: HTMLElement;\n\n constructor(el: HTMLElement) {\n this.el = el;\n }\n\n public emit(eventType: EventType, detail?: TDetail) {\n // Note: CustomEvent requires polyfill for IE, see\n // https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent\n const event = new CustomEvent(eventType.eventName, { detail });\n return this.el.dispatchEvent(event);\n }\n\n public subscribe(eventType: EventType, handler: EventHandler) {\n const listener = function(this: any, evt: Event) {\n const detail: TDetail | undefined = (evt as CustomEvent).detail;\n handler.call(this, detail);\n };\n this.el.addEventListener(eventType.eventName, listener);\n return () => {\n this.el.removeEventListener(eventType.eventName, listener);\n };\n }\n}\n","/*\n * event-types.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Transaction } from 'prosemirror-state';\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport { makeEventType } from './events';\nimport { Navigation } from './navigation';\n\nexport const UpdateEvent = makeEventType('Update');\nexport const OutlineChangeEvent = makeEventType('OutlineChange');\nexport const StateChangeEvent = makeEventType('StateChange');\nexport const ResizeEvent = makeEventType('Resize');\nexport const LayoutEvent = makeEventType('Layout');\nexport const ScrollEvent = makeEventType('Scroll');\nexport const BlurEvent = makeEventType('Blur');\nexport const FocusEvent = makeEventType('Focus');\nexport const DispatchEvent = makeEventType('Dispatch');\nexport const NavigateEvent = makeEventType('Navigate');\n","/*\n * pandoc_format.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport { PandocServer, PandocExtensions } from './pandoc';\nimport { EditorFormat, kHugoDocType } from './format';\nimport { firstYamlBlock, yamlMetadataNodes } from './yaml';\nimport { findValue } from './object';\n\nexport const kMarkdownFormat = 'markdown';\nexport const kMarkdownPhpextraFormat = 'markdown_phpextra';\nexport const kMarkdownGithubFormat = 'markdown_github';\nexport const kMarkdownMmdFormat = 'markdown_mmd';\nexport const kMarkdownStrictFormat = 'markdown_strict';\nexport const kGfmFormat = 'gfm';\nexport const kCommonmarkFormat = 'commonmark';\nexport const kCommonmarkXFormat = 'commonmark_x';\n\nexport interface PandocFormat {\n mode: string;\n baseName: string;\n fullName: string;\n extensions: PandocExtensions;\n warnings: PandocFormatWarnings;\n}\n\nexport interface PandocFormatWarnings {\n invalidFormat: string;\n invalidOptions: string[];\n}\n\nexport interface PandocFormatConfig {\n mode?: string;\n extensions?: string;\n rmdExtensions?: string;\n wrap?: string;\n doctypes?: string[];\n references_location?: string;\n references_prefix?: string;\n canonical?: boolean;\n}\n\nexport function matchPandocFormatComment(code: string) {\n const magicCommentRegEx = /^\\s*$/m;\n return code.match(magicCommentRegEx);\n}\n\nexport function pandocFormatConfigFromDoc(doc: ProsemirrorNode, isRmd: boolean) {\n return pandocFormatConfigFromYamlInDoc(doc, isRmd) || pandocFormatConfigFromCommentInDoc(doc) || {};\n}\n\nexport function pandocFormatConfigFromCode(code: string, isRmd: boolean): PandocFormatConfig {\n return pandocFormatConfigFromYamlInCode(code, isRmd) || pandocFormatConfigFromCommentInCode(code) || {};\n}\n\nfunction pandocFormatConfigFromYamlInCode(code: string, isRmd: boolean): PandocFormatConfig | null {\n // get the first yaml block in the file\n const yaml = firstYamlBlock(code);\n\n // did we find yaml?\n if (yaml) {\n // see if we have any md_extensions defined\n const mdExtensions = isRmd ? findValue('md_extensions', yaml?.output) : undefined;\n\n // see if we have any markdown options defined\n let yamlFormatConfig: PandocFormatConfig | undefined;\n const yamlMarkdownOptions = yaml?.editor_options?.markdown;\n if (yamlMarkdownOptions instanceof Object) {\n yamlFormatConfig = readPandocFormatConfig(yamlMarkdownOptions);\n }\n\n // combine and return\n if (mdExtensions || yamlFormatConfig) {\n const formatConfig: PandocFormatConfig = yamlFormatConfig ? yamlFormatConfig : {};\n if (mdExtensions) {\n formatConfig.extensions = mdExtensions + (formatConfig.extensions || '');\n }\n return formatConfig;\n } else {\n return null;\n }\n } else {\n return null;\n }\n}\n\nfunction pandocFormatConfigFromYamlInDoc(doc: ProsemirrorNode, isRmd: boolean): PandocFormatConfig | null {\n const yamlNodes = yamlMetadataNodes(doc);\n if (yamlNodes.length > 0) {\n return pandocFormatConfigFromYamlInCode(yamlNodes[0].node.textContent, isRmd);\n } else {\n return null;\n }\n}\n\nfunction pandocFormatConfigFromCommentInCode(code: string): PandocFormatConfig | null {\n const keyValueRegEx = /^([^:]+):\\s*(.*)$/;\n const match = matchPandocFormatComment(code);\n if (match) {\n const comment = match[1];\n // split into semicolons\n const fields = comment.split(/\\s*;\\s/).map(field => field.trim());\n const variables: { [key: string]: string } = {};\n fields.forEach(field => {\n const keyValueMatch = field.match(keyValueRegEx);\n if (keyValueMatch) {\n variables[keyValueMatch[1].trim()] = keyValueMatch[2].trim();\n }\n });\n return readPandocFormatConfig(variables);\n } else {\n return null;\n }\n}\n\nfunction pandocFormatConfigFromCommentInDoc(doc: ProsemirrorNode): PandocFormatConfig | null {\n let config: PandocFormatConfig | null = null;\n let foundFirstRawInline = false;\n doc.descendants((node, pos) => {\n // don't search once we've found our target\n if (foundFirstRawInline) {\n return false;\n }\n\n // if it's a text node with a raw-html then scan it for the format comment\n const schema = doc.type.schema;\n if (\n node.isText &&\n schema.marks.raw_html_comment &&\n schema.marks.raw_html_comment.isInSet(node.marks) &&\n node.attrs.format\n ) {\n foundFirstRawInline = true;\n config = pandocFormatConfigFromCommentInCode(node.textContent);\n return false;\n } else {\n return true;\n }\n });\n return config;\n}\n\nfunction readPandocFormatConfig(source: { [key: string]: any }) {\n const asString = (obj: any): string => {\n if (typeof obj === 'string') {\n return obj;\n } else if (obj) {\n return obj.toString();\n } else {\n return '';\n }\n };\n\n const asBoolean = (obj: any) => {\n if (typeof obj === 'boolean') {\n return obj;\n } else {\n const str = asString(obj).toLowerCase();\n return str === 'true' || str === '1';\n }\n };\n\n const readWrap = () => {\n const wrap = source.wrap || source.wrap_column || source['fill-column'];\n if (wrap) {\n return asString(wrap);\n } else {\n return undefined;\n }\n };\n\n const formatConfig: PandocFormatConfig = {};\n if (source.mode) {\n formatConfig.mode = asString(source.mode);\n }\n if (source.extensions) {\n formatConfig.extensions = asString(source.extensions);\n }\n if (source.rmd_extensions) {\n formatConfig.rmdExtensions = asString(source.rmd_extensions);\n }\n formatConfig.wrap = readWrap();\n if (source.doctype) {\n formatConfig.doctypes = asString(source.doctype)\n .split(',')\n .map(str => str.trim());\n }\n if (source.references) {\n if (typeof source.references === 'string') {\n formatConfig.references_location = source.references;\n } else {\n formatConfig.references_location = source.references.location;\n formatConfig.references_prefix = source.references.prefix;\n }\n }\n if (source.canonical) {\n formatConfig.canonical = asBoolean(source.canonical);\n }\n return formatConfig;\n}\n\nexport async function resolvePandocFormat(pandoc: PandocServer, format: EditorFormat): Promise {\n // additional markdown variants we support\n const kMarkdownVariants: { [key: string]: string[] } = {\n [kCommonmarkFormat]: commonmarkExtensions(),\n [kCommonmarkXFormat]: commonmarkXExtensions(),\n [kGfmFormat]: gfmExtensions(),\n goldmark: goldmarkExtensions(format),\n blackfriday: blackfridayExtensions(format),\n };\n\n // setup warnings\n const warnings: PandocFormatWarnings = { invalidFormat: '', invalidOptions: [] };\n\n // alias options and basename\n let options = format.pandocExtensions;\n let baseName = format.pandocMode;\n\n // validate the base format (fall back to markdown if it's not known)\n if (\n ![\n kMarkdownFormat,\n kMarkdownPhpextraFormat,\n kMarkdownGithubFormat,\n kMarkdownMmdFormat,\n kMarkdownStrictFormat,\n kGfmFormat,\n kCommonmarkFormat,\n kCommonmarkXFormat\n ]\n .concat(Object.keys(kMarkdownVariants))\n .includes(baseName)\n ) {\n warnings.invalidFormat = baseName;\n baseName = 'markdown';\n }\n\n // format options we will be building\n let formatOptions: string;\n\n // if we are using a variant then get it's base options and merge with user options\n if (kMarkdownVariants[baseName]) {\n const variant = kMarkdownVariants[baseName];\n options = variant.map(option => `${option}`).join('') + options;\n baseName = 'markdown_strict';\n }\n\n // query for format options\n formatOptions = await pandoc.listExtensions(baseName);\n\n // active pandoc extensions\n const pandocExtensions: { [key: string]: boolean } = {};\n\n // first parse extensions for format\n parseExtensions(formatOptions).forEach(option => {\n pandocExtensions[option.name] = option.enabled;\n });\n\n // now parse extensions for user options (validate and build format name)\n const validOptionNames = parseExtensions(formatOptions).map(option => option.name);\n\n let fullName = baseName;\n parseExtensions(options).forEach(option => {\n // validate that the option is valid\n if (validOptionNames.includes(option.name)) {\n // add option\n fullName += (option.enabled ? '+' : '-') + option.name;\n pandocExtensions[option.name] = option.enabled;\n } else {\n warnings.invalidOptions.push(option.name);\n }\n });\n\n // return format name, enabled extensiosn, and warnings\n return {\n mode: format.pandocMode,\n baseName,\n fullName,\n extensions: (pandocExtensions as unknown) as PandocExtensions,\n warnings,\n };\n}\n\nfunction parseExtensions(options: string) {\n // remove any linebreaks\n options = options.split('\\n').join();\n\n // parse into separate entries\n const extensions: Array<{ name: string; enabled: boolean }> = [];\n const re = /([+-])([a-z_]+)/g;\n let match = re.exec(options);\n while (match) {\n extensions.push({ name: match[2], enabled: match[1] === '+' });\n match = re.exec(options);\n }\n\n return extensions;\n}\n\nexport function pandocFormatWith(format: string, prepend: string, append: string) {\n const split = splitPandocFormatString(format);\n return `${split.format}${prepend}${split.options}${append}`;\n}\n\nexport function splitPandocFormatString(format: string) {\n // split out base format from options\n let optionsPos = format.indexOf('-');\n if (optionsPos === -1) {\n optionsPos = format.indexOf('+');\n }\n const base = optionsPos === -1 ? format : format.substr(0, optionsPos);\n const options = optionsPos === -1 ? '' : format.substr(optionsPos);\n return {\n format: base,\n options,\n };\n}\n\nexport function hasFencedCodeBlocks(pandocExtensions: PandocExtensions) {\n return pandocExtensions.backtick_code_blocks || pandocExtensions.fenced_code_blocks;\n}\n\n// e.g. [My Heading] to link to ## My Heading\nexport function hasShortcutHeadingLinks(pandocExtensions: PandocExtensions) {\n return pandocExtensions.implicit_header_references && pandocExtensions.shortcut_reference_links;\n}\n\nfunction commonmarkExtensions(rawHTML = true) {\n const extensions = [\n rawHTML ? '+raw_html' : '-raw_html',\n '+all_symbols_escapable',\n '+backtick_code_blocks',\n '+fenced_code_blocks',\n '+space_in_atx_header',\n '+intraword_underscores',\n '+lists_without_preceding_blankline',\n '+shortcut_reference_links',\n ];\n return extensions;\n}\n\n// https://github.com/jgm/pandoc/commit/0aed9dd589189a9bbe5cae99e0e024e2d4a92c36\nfunction commonmarkXExtensions() {\n const extensions = [\n '+pipe_tables',\n '+raw_html',\n '+auto_identifiers',\n '+strikeout',\n '+task_lists',\n '+emoji',\n '+raw_tex',\n '+smart',\n '+tex_math_dollars',\n '+superscript',\n '+subscript',\n '+definition_lists',\n '+footnotes',\n '+fancy_lists',\n '+fenced_divs',\n '+bracketed_spans',\n '+raw_attribute',\n '+implicit_header_references',\n // '+attributes' (not yet)\n ];\n return extensions;\n}\n\nfunction gfmExtensions() {\n const extensions = [\n ...commonmarkExtensions(),\n '+auto_identifiers',\n '+autolink_bare_uris',\n '+emoji',\n '+gfm_auto_identifiers',\n '+pipe_tables',\n '+strikeout',\n '+task_lists',\n ];\n return extensions;\n}\n\n// https://gohugo.io/getting-started/configuration-markup/#goldmark\n// https://github.com/yuin/goldmark/#html-renderer-options\nfunction goldmarkExtensions(format: EditorFormat) {\n const extensions = [\n // start with commonmark\n ...commonmarkExtensions(false),\n\n // adds most of gfm\n '+pipe_tables',\n '+strikeout',\n '+autolink_bare_uris',\n '+task_lists',\n '+backtick_code_blocks',\n\n // plus some extras\n '+definition_lists',\n '+footnotes',\n '+smart',\n\n // hugo preprocessor supports yaml metadata\n '+yaml_metadata_block',\n ];\n\n if (includeTexMathDollars(format)) {\n extensions.push('+tex_math_dollars');\n }\n\n return extensions;\n}\n\n// https://github.com/russross/blackfriday/tree/v2#extensions\nfunction blackfridayExtensions(format: EditorFormat) {\n const extensions = [\n '+intraword_underscores',\n '+pipe_tables',\n '+backtick_code_blocks',\n '+definition_lists',\n '+footnotes',\n '+autolink_bare_uris',\n '+strikeout',\n '+smart',\n '+yaml_metadata_block',\n ];\n\n if (includeTexMathDollars(format)) {\n extensions.push('+tex_math_dollars');\n }\n\n return extensions;\n}\n\nfunction includeTexMathDollars(format: EditorFormat) {\n // hugo users often sort out some way to include math so we enable it for hugo\n return format.docTypes.includes(kHugoDocType) || format.rmdExtensions.blogdownMathInCode;\n}\n","/*\n * yaml.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { NodeWithPos } from 'prosemirror-utils';\nimport { EditorView } from 'prosemirror-view';\n\nimport yaml from 'js-yaml';\n\nimport { findTopLevelBodyNodes } from './node';\nimport { logException } from './log';\n\nexport const kYamlMetadataTitleRegex = /\\ntitle:(.*)\\n/;\n\n// return yaml front matter (w/o enclosing --)\nexport function yamlFrontMatter(doc: ProsemirrorNode) {\n const firstYaml = firstYamlNode(doc);\n if (firstYaml) {\n return stripYamlDelimeters(firstYaml.node.textContent);\n } else {\n return '';\n }\n}\n\n// set yaml front matter (w/o enclosing ---)\nexport function applyYamlFrontMatter(view: EditorView, yamlText: string) {\n const schema = view.state.schema;\n const updatedYaml = `---\\n${yamlText}---`;\n const updatedYamlNode = schema.nodes.yaml_metadata.createAndFill({}, schema.text(updatedYaml));\n const tr = view.state.tr;\n const firstYaml = firstYamlNode(view.state.doc);\n if (firstYaml) {\n tr.replaceRangeWith(firstYaml.pos, firstYaml.pos + firstYaml.node.nodeSize, updatedYamlNode);\n } else {\n tr.insert(1, updatedYamlNode);\n }\n view.dispatch(tr);\n}\n\nexport function yamlMetadataNodes(doc: ProsemirrorNode) {\n return findTopLevelBodyNodes(doc, isYamlMetadataNode);\n}\n\nexport function isYamlMetadataNode(node: ProsemirrorNode) {\n return node.type === node.type.schema.nodes.yaml_metadata;\n}\n\nexport function titleFromYamlMetadataNode(node: ProsemirrorNode) {\n const titleMatch = node.textContent.match(kYamlMetadataTitleRegex);\n if (titleMatch) {\n let title = titleMatch[1].trim();\n title = title.replace(/^[\"']|[\"']$/g, '');\n title = title.replace(/\\\\\"/g, '\"');\n title = title.replace(/''/g, \"'\");\n return title;\n } else {\n return null;\n }\n}\n\nexport function valueFromYamlText(name: string, yamlText: string) {\n // Must start and end with either a new line or the start/end of line\n const yamlMetadataNameValueRegex = new RegExp(`(?:\\\\n|^)${name}:(.*)(?:\\\\n|$)`);\n\n // Find the name and value\n const valueMatch = yamlText.match(yamlMetadataNameValueRegex);\n if (valueMatch) {\n // Read the matched value\n const valueStr = valueMatch[1].trim();\n\n // Parse the value (could be string, array, etc...)\n const value = parseYaml(valueStr);\n return value;\n } else {\n return null;\n }\n}\n\nconst kFirstYamlBlockRegex = /\\s*---[ \\t]*\\n(?![ \\t]*\\n)([\\W\\w]*?)\\n[\\t >]*(?:---|\\.\\.\\.)[ \\t]*/m;\n\nexport function firstYamlBlock(code: string): { [key: string]: any } | null {\n const match = code.match(kFirstYamlBlockRegex);\n if (match && match.index === 0) {\n const yamlCode = match[1];\n const yamlParsed = parseYaml(yamlCode);\n if (typeof yamlParsed === 'object') {\n return yamlParsed;\n } else {\n return null;\n }\n } else {\n return null;\n }\n}\n\nexport function parseYaml(yamlCode: string) {\n try {\n const yamlParsed = yaml.safeLoad(yamlCode, {\n onWarning: logException,\n });\n return yamlParsed;\n } catch (e) {\n logException(e);\n return null;\n }\n}\n\nexport function toYamlCode(obj: any): string | null {\n try {\n const yamlCode = yaml.safeDump(obj);\n return yamlCode;\n } catch (e) {\n logException(e);\n return null;\n }\n}\n\nexport function stripYamlDelimeters(yamlCode: string) {\n return yamlCode.replace(/^[ \\t-]+\\n/, '').replace(/\\n[ \\t-\\.]+$/, '');\n}\n\nexport interface ParsedYaml {\n yamlCode: string;\n yaml: any;\n node: NodeWithPos;\n}\n\nexport function parseYamlNodes(doc: ProsemirrorNode): ParsedYaml[] {\n const yamlNodes = yamlMetadataNodes(doc);\n\n const parsedYamlNodes = yamlNodes.map(node => {\n const yamlText = node.node.textContent;\n const yamlCode = stripYamlDelimeters(yamlText);\n return { yamlCode, yaml: parseYaml(yamlCode), node };\n });\n return parsedYamlNodes;\n}\n\nfunction firstYamlNode(doc: ProsemirrorNode) {\n const yamlNodes = yamlMetadataNodes(doc);\n if (yamlNodes && yamlNodes.length > 0) {\n return yamlNodes[0];\n } else {\n return '';\n }\n}\n","/*\n * format.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport interface EditorFormat {\n readonly pandocMode: string;\n readonly pandocExtensions: string;\n readonly rmdExtensions: EditorRmdExtensions;\n readonly hugoExtensions: EditorHugoExtensions;\n readonly docTypes: EditorExtendedDocType[];\n}\n\nexport interface EditorRmdExtensions {\n readonly codeChunks?: boolean;\n readonly bookdownXRef?: boolean;\n readonly bookdownXRefUI?: boolean;\n readonly bookdownPart?: boolean;\n readonly blogdownMathInCode?: boolean;\n}\n\nexport interface EditorHugoExtensions {\n readonly shortcodes?: boolean;\n}\n\nexport const kBookdownDocType = 'bookdown';\nexport const kHugoDocType = 'hugo';\n\nexport type EditorExtendedDocType = 'bookdown' | 'hugo';\n","/*\n * object.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport function findValue(key: string, object?: { [key: string]: any }) {\n if (!object) {\n return undefined;\n }\n\n let value;\n\n Object.keys(object).some(k => {\n if (k === key) {\n value = object[k];\n return true;\n }\n if (object[k] && typeof object[k] === 'object') {\n value = findValue(key, object[k]);\n return value !== undefined;\n }\n return false;\n });\n\n return value;\n}\n","/*\n * log.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport function logException(e: Error) {\n // TODO: log exceptions (we don't want to use console.log in production code, so this would\n // utilize some sort of external logging facility)\n // console.log(e);\n}\n","/*\n * basekeys.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport {\n splitBlock,\n liftEmptyBlock,\n createParagraphNear,\n selectNodeBackward,\n joinBackward,\n deleteSelection,\n selectNodeForward,\n joinForward,\n chainCommands,\n} from 'prosemirror-commands';\nimport { undoInputRule } from 'prosemirror-inputrules';\nimport { keymap } from 'prosemirror-keymap';\nimport { EditorState, Transaction, Plugin, Selection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { CommandFn } from './command';\nimport { editingRootNodeClosestToPos, editingRootNode } from './node';\nimport { selectionIsBodyTopLevel } from './selection';\nimport { kPlatformMac } from './platform';\n\nexport enum BaseKey {\n Home = 'Home',\n End = 'End',\n Enter = 'Enter',\n ModEnter = 'Mod-Enter',\n ShiftEnter = 'Shift-Enter',\n Backspace = 'Backspace',\n Delete = 'Delete|Mod-Delete', // Use pipes to register multiple commands\n Tab = 'Tab',\n ShiftTab = 'Shift-Tab',\n ArrowUp = 'Up|ArrowUp',\n ArrowDown = 'Down|ArrowDown',\n ArrowLeft = 'Left|ArrowLeft',\n ArrowRight = 'Right|ArrowRight',\n ModArrowUp = 'Mod-Up|Mod-ArrowUp',\n ModArrowDown = 'Mod-Down|Mod-ArrowDown',\n CtrlHome = 'Ctrl-Home',\n CtrlEnd = 'Ctrl-End',\n ShiftArrowLeft = 'Shift-Left|Shift-ArrowLeft',\n ShiftArrowRight = 'Shift-Right|Shift-ArrowRight',\n AltArrowLeft = 'Alt-Left|Alt-ArrowLeft',\n AltArrowRight = 'Alt-Right|Alt-ArrowRight',\n CtrlArrowLeft = 'Ctrl-Left|Ctrl-ArrowLeft',\n CtrlArrowRight = 'Ctrl-Right|Ctrl-ArrowRight',\n CtrlShiftArrowLeft = 'Ctrl-Shift-Left|Ctrl-Shift-ArrowLeft',\n CtrlShiftArrowRight = 'Ctrl-Shift-Right|Ctrl-Shift-ArrowRight',\n}\n\nexport interface BaseKeyBinding {\n key: BaseKey;\n command: CommandFn;\n}\n\nexport function baseKeysPlugin(keys: readonly BaseKeyBinding[]): Plugin {\n // collect all keys\n const pluginKeys = [\n // base enter key behaviors\n { key: BaseKey.Enter, command: splitBlock },\n { key: BaseKey.Enter, command: liftEmptyBlock },\n { key: BaseKey.Enter, command: createParagraphNear },\n\n // base backspace key behaviors\n { key: BaseKey.Backspace, command: selectNodeBackward },\n { key: BaseKey.Backspace, command: joinBackward },\n { key: BaseKey.Backspace, command: deleteSelection },\n\n // base tab key behavior (ignore)\n { key: BaseKey.Tab, command: ignoreKey },\n { key: BaseKey.ShiftTab, command: ignoreKey },\n\n // base delete key behaviors\n { key: BaseKey.Delete, command: selectNodeForward },\n { key: BaseKey.Delete, command: joinForward },\n { key: BaseKey.Delete, command: deleteSelection },\n\n // base home/end key behaviors (Mac desktop default behavior advances to beginning/end of\n // document, so we provide our own implementation rather than relying on contentEditable)\n kPlatformMac ? { key: BaseKey.Home, command: homeKey } : null,\n kPlatformMac ? { key: BaseKey.End, command: endKey } : null,\n\n // base arrow key behavior (prevent traversing top-level body notes)\n { key: BaseKey.ArrowLeft, command: arrowBodyNodeBoundary('left') },\n { key: BaseKey.ArrowUp, command: arrowBodyNodeBoundary('up') },\n { key: BaseKey.ArrowRight, command: arrowBodyNodeBoundary('right') },\n { key: BaseKey.ArrowDown, command: arrowBodyNodeBoundary('down') },\n { key: BaseKey.ModArrowDown, command: endTopLevelBodyNodeBoundary() },\n { key: BaseKey.CtrlEnd, command: endTopLevelBodyNodeBoundary() },\n\n // merge keys provided by extensions\n ...keys,\n\n // undoInputRule is always the highest priority backspace key\n { key: BaseKey.Backspace, command: undoInputRule },\n ].filter(x => !!x);\n\n // build arrays for each BaseKey type\n const commandMap: { [key: string]: CommandFn[] } = {};\n for (const baseKey of Object.values(BaseKey)) {\n commandMap[baseKey] = [];\n }\n pluginKeys.forEach(key => {\n if (key) {\n commandMap[key.key].unshift(key.command);\n }\n });\n\n const bindings: { [key: string]: CommandFn } = {};\n for (const baseKey of Object.values(BaseKey)) {\n const commands = commandMap[baseKey];\n // baseKey may contain multiple keys, separated by |\n for (const subkey of baseKey.split(/\\|/)) {\n bindings[subkey] = chainCommands(...commands);\n }\n }\n\n // return keymap\n return keymap(bindings);\n}\n\nexport function verticalArrowCanAdvanceWithinTextBlock(selection: Selection, dir: 'up' | 'down') {\n const $head = selection.$head;\n const node = $head.node();\n if (node.isTextblock) {\n const cursorOffset = $head.parentOffset;\n const nodeText = node.textContent;\n if (dir === 'down' && nodeText.substr(cursorOffset).includes('\\n')) {\n return true;\n }\n if (dir === 'up' && nodeText.substr(0, cursorOffset).includes('\\n')) {\n return true;\n }\n }\n return false;\n}\n\ninterface Coords {\n left: number;\n right: number;\n top: number;\n bottom: number;\n}\n\nfunction ignoreKey(state: EditorState, dispatch?: (tr: Transaction) => void) {\n return true;\n}\n\nfunction homeKey(state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) {\n const selection = state.selection;\n const editingNode = editingRootNode(selection);\n if (editingNode && dispatch && view) {\n const head = view.coordsAtPos(selection.head);\n const beginDocPos = editingNode.start;\n for (let pos = selection.from - 1; pos >= beginDocPos; pos--) {\n const coords = view.coordsAtPos(pos);\n if (isOnPreviousLine(head, coords) || pos === beginDocPos) {\n const tr = state.tr;\n setTextSelection(pos + 1)(tr);\n dispatch(tr);\n break;\n }\n }\n }\n return true;\n}\n\nfunction endKey(state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) {\n const selection = state.selection;\n const editingNode = editingRootNode(selection);\n if (editingNode && dispatch && view) {\n const head = view.coordsAtPos(selection.head);\n const endDocPos = editingNode.start + editingNode.node.nodeSize;\n for (let pos = selection.from + 1; pos < endDocPos; pos++) {\n const coords = view.coordsAtPos(pos);\n if (isOnNextLine(head, coords) || pos === endDocPos) {\n const tr = state.tr;\n setTextSelection(pos - 1)(tr);\n dispatch(tr);\n break;\n }\n }\n }\n return true;\n}\n\n// helpers to check for a y coordinate on a diffent line that the selection\n\n// y coorinates are sometimes off by 1 or 2 due to margin/padding (e.g. for\n// inline code spans or spelling marks) so the comparision only succeeds if\n// the vertical extents of the two coords don't overlap. If this proves to\n// still have false positives, we could lookahead to the next a few dozen\n// positions to check if we ever \"return to\" the head's baseline--only a\n// permanent change would indicate that the line has truly changed.\n\nfunction isOnNextLine(head: Coords, pos: Coords) {\n return head.bottom < pos.top;\n}\n\nfunction isOnPreviousLine(head: Coords, pos: Coords) {\n return head.top > pos.bottom;\n}\n\nfunction arrowBodyNodeBoundary(dir: 'up' | 'down' | 'left' | 'right') {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n if (view && view.endOfTextblock(dir) && selectionIsBodyTopLevel(state.selection)) {\n const side = dir === 'left' || dir === 'up' ? -1 : 1;\n const $head = state.selection.$head;\n const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side);\n const currentRootNode = editingRootNodeClosestToPos($head);\n const nextRootNode = editingRootNodeClosestToPos(nextPos.$head);\n return currentRootNode?.node?.type !== nextRootNode?.node?.type;\n } else {\n return false;\n }\n };\n}\n\nfunction endTopLevelBodyNodeBoundary() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const editingNode = editingRootNode(state.selection);\n if (editingNode && selectionIsBodyTopLevel(state.selection)) {\n if (dispatch) {\n const tr = state.tr;\n setTextSelection(editingNode.pos + editingNode.node.nodeSize - 2)(tr).scrollIntoView();\n dispatch(tr);\n }\n return true;\n } else {\n return false;\n }\n };\n}\n","/*\n * selection.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Selection, NodeSelection } from 'prosemirror-state';\nimport { Schema } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\nimport { GapCursor } from 'prosemirror-gapcursor';\n\nimport { NodeWithPos, setTextSelection } from 'prosemirror-utils';\n\nimport { kAddToHistoryTransaction, kRestoreLocationTransaction } from './transaction';\n\nexport function selectionIsWithin(selection: Selection, nodeWithPos: NodeWithPos) {\n const from = nodeWithPos.pos + 1;\n const to = from + nodeWithPos.node.nodeSize;\n return selectionIsWithinRange(selection, { from, to });\n}\n\nexport function selectionHasRange(selection: Selection, range: { from: number; to: number }) {\n return selection.from === range.from && selection.to === range.to;\n}\n\nexport function selectionIsWithinRange(selection: Selection, range: { from: number; to: number }) {\n return selection.anchor >= range.from && selection.anchor <= range.to;\n}\n\nexport function selectionIsBodyTopLevel(selection: Selection) {\n const { $head } = selection;\n const parentNode = $head.node($head.depth - 1);\n return parentNode && \n (parentNode.type === parentNode.type.schema.nodes.body ||\n (selection instanceof GapCursor && parentNode.type === parentNode.type.schema.nodes.doc));\n}\n\nexport function selectionIsImageNode(schema: Schema, selection: Selection) {\n return selection instanceof NodeSelection && [schema.nodes.image, schema.nodes.figure].includes(selection.node.type);\n}\n\nexport function selectionIsEmptyParagraph(schema: Schema, selection: Selection) {\n const { $head } = selection;\n return $head.parent.type === schema.nodes.paragraph && $head.parent.childCount === 0;\n}\n\nexport function restoreSelection(view: EditorView, pos: number) {\n const tr = view.state.tr;\n if (pos < view.state.doc.nodeSize) {\n setTextSelection(pos)(tr);\n tr.setMeta(kAddToHistoryTransaction, false);\n tr.setMeta(kRestoreLocationTransaction, true);\n view.dispatch(tr);\n }\n}\n","/*\n * transaction.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Transaction, EditorState, Plugin, PluginKey, Selection } from 'prosemirror-state';\nimport { Node as ProsemirrorNode, Mark, MarkType, Slice } from 'prosemirror-model';\nimport { ChangeSet } from 'prosemirror-changeset';\nimport { ReplaceStep, Step, Transform } from 'prosemirror-transform';\n\nimport { sliceContentLength } from './slice';\n\nexport const kPasteTransaction = 'paste';\nexport const kSetMarkdownTransaction = 'setMarkdown';\nexport const kAddToHistoryTransaction = 'addToHistory';\nexport const kFixupTransaction = 'docFixup';\nexport const kRestoreLocationTransaction = 'restoreLocation';\nexport const kNavigationTransaction = 'navigationTransaction';\nexport const kInsertSymbolTransaction = 'insertSymbol';\nexport const kInsertCompletionTransaction = 'insertCompletion';\n\nexport type TransactionsFilter = (transactions: Transaction[], oldState: EditorState, newState: EditorState) => boolean;\n\nexport type TransactionNodeFilter = (\n node: ProsemirrorNode,\n pos: number,\n parent: ProsemirrorNode,\n index: number,\n) => boolean;\n\nexport interface AppendTransactionHandler {\n name: string;\n filter?: TransactionsFilter;\n nodeFilter?: TransactionNodeFilter;\n append: (tr: Transaction, transactions: Transaction[], oldState: EditorState, newState: EditorState) => void;\n}\n\n// wrapper for transaction that is guaranteed not to modify the position of any\n// nodes in the document (useful for grouping many disparate handlers that arne't\n// aware of each other's actions onto the same trasaction)\nexport class MarkTransaction {\n private tr: Transaction;\n\n constructor(tr: Transaction) {\n this.tr = tr;\n }\n get doc(): ProsemirrorNode {\n return this.tr.doc;\n }\n get selection(): Selection {\n return this.tr.selection;\n }\n public addMark(from: number, to: number, mark: Mark): this {\n this.tr.addMark(from, to, mark);\n return this;\n }\n public removeMark(from: number, to: number, mark?: Mark | MarkType): this {\n this.tr.removeMark(from, to, mark);\n return this;\n }\n public removeStoredMark(mark: Mark | MarkType): this {\n this.tr.removeStoredMark(mark);\n return this;\n }\n public insertText(text: string, from: number): this {\n this.tr.insertText(text, from, from + text.length);\n return this;\n }\n}\n\nexport interface AppendMarkTransactionHandler {\n name: string;\n filter: (node: ProsemirrorNode, transactions: Transaction[]) => boolean;\n append: (tr: MarkTransaction, node: ProsemirrorNode, pos: number, state: EditorState) => void;\n}\n\nexport function appendMarkTransactionsPlugin(handlers: readonly AppendMarkTransactionHandler[]): Plugin {\n return new Plugin({\n key: new PluginKey('appendMarkTransactions'),\n\n appendTransaction: (transactions: Transaction[], oldState: EditorState, newState: EditorState) => {\n // skip for selection-only changes\n if (!transactionsDocChanged(transactions)) {\n return;\n }\n\n // create transaction\n const tr = newState.tr;\n\n // create markTransaction wrapper\n const markTr = new MarkTransaction(tr);\n\n forChangedNodes(\n oldState,\n newState,\n node => true,\n (node: ProsemirrorNode, pos: number) => {\n for (const handler of handlers) {\n // get a fresh view of the node\n node = tr.doc.nodeAt(pos)!;\n\n // call the handler\n if (handler.filter(node, transactions)) {\n handler.append(markTr, node, pos, newState);\n }\n }\n },\n );\n\n // return transaction\n if (tr.docChanged || tr.selectionSet || tr.storedMarksSet) {\n return tr;\n }\n },\n });\n}\n\nexport function appendTransactionsPlugin(handlers: readonly AppendTransactionHandler[]): Plugin {\n return new Plugin({\n key: new PluginKey('appendTransactions'),\n\n appendTransaction: (transactions: Transaction[], oldState: EditorState, newState: EditorState) => {\n // skip for selection-only changes\n if (!transactionsDocChanged(transactions)) {\n return;\n }\n\n // create transaction\n const tr = newState.tr;\n\n // compute the changeSet\n if (transactionsAreTypingChange(transactions)) {\n const changeSet = transactionsChangeSet(transactions, oldState, newState);\n\n // call each handler\n for (const handler of handlers) {\n // track whether there is a change\n let haveChange = false;\n\n // call filters if we have them\n if (handler.filter || handler.nodeFilter) {\n // first the low-level transaction filter\n if (handler.filter) {\n haveChange = handler.filter(transactions, oldState, newState);\n }\n\n // if that doesn't detect a change then try the nodeFilter if we have one\n if (!haveChange && handler.nodeFilter) {\n const checkForChange = (\n node: ProsemirrorNode,\n pos: number,\n parent: ProsemirrorNode,\n index: number,\n ) => {\n if (handler.nodeFilter!(node, pos, parent, index)) {\n haveChange = true;\n return false;\n }\n };\n\n for (const change of changeSet.changes) {\n oldState.doc.nodesBetween(change.fromA, change.toA, checkForChange);\n newState.doc.nodesBetween(change.fromB, change.toB, checkForChange);\n }\n }\n\n // no filters means we should always run (force haveChange to true)\n } else {\n haveChange = true;\n }\n\n // run the handler if applicable\n if (haveChange) {\n handler.append(tr, transactions, oldState, newState);\n }\n }\n\n // run them all if this is a larger change\n } else {\n handlers.forEach(handler => handler.append(tr, transactions, oldState, newState));\n }\n\n // return transaction\n if (tr.docChanged || tr.selectionSet || tr.storedMarksSet) {\n return tr;\n }\n },\n });\n}\n\nexport function transactionsDocChanged(transactions: Transaction[]) {\n return transactions.some(transaction => transaction.docChanged);\n}\n\nexport function transactionsChangeSet(transactions: Transaction[], oldState: EditorState, newState: EditorState) {\n let changeSet = ChangeSet.create(oldState.doc);\n for (const transaction of transactions) {\n changeSet = changeSet.addSteps(newState.doc, transaction.mapping.maps);\n }\n return changeSet;\n}\n\nexport function trTransform(tr: Transaction, f: (transform: Transform) => void): Transaction {\n // create a new transform so we can do position mapping relative\n // to the actions taken here (b/c the transaction might already\n // have other steps so we can't do tr.mapping.map)\n const newActions = new Transform(tr.doc);\n\n // call the function (passing it a mapping function that uses our newActions)\n f(newActions);\n\n // copy the contents of newActions to the actual transaction\n for (const step of newActions.steps) {\n tr.step(step);\n }\n\n // return the transaction for chaining\n return tr;\n}\n\nexport function transactionsHaveChange(\n transactions: Transaction[],\n oldState: EditorState,\n newState: EditorState,\n predicate: (node: ProsemirrorNode, pos: number, parent: ProsemirrorNode, index: number) => boolean,\n) {\n // screen out transactions with no doc changes\n if (!transactionsDocChanged(transactions)) {\n return false;\n }\n\n // function to check for whether we have a change and set a flag if we do\n let haveChange = false;\n const checkForChange = (node: ProsemirrorNode, pos: number, parent: ProsemirrorNode, index: number) => {\n if (predicate(node, pos, parent, index)) {\n haveChange = true;\n return false;\n }\n };\n\n // for each change in each transaction, check for a node that matches the predicate in either the old or new doc\n const changeSet = transactionsChangeSet(transactions, oldState, newState);\n\n for (const change of changeSet.changes) {\n oldState.doc.nodesBetween(change.fromA, change.toA, checkForChange);\n newState.doc.nodesBetween(change.fromB, change.toB, checkForChange);\n if (haveChange) {\n break;\n }\n }\n\n return haveChange;\n}\n\nexport function forChangedNodes(\n oldState: EditorState | null,\n newState: EditorState,\n predicate: (node: ProsemirrorNode) => boolean,\n f: (node: ProsemirrorNode, pos: number) => boolean | void,\n) {\n let complete = false;\n const handler = (node: ProsemirrorNode, pos: number) => {\n if (complete) {\n return;\n }\n\n if (!predicate || predicate(node)) {\n if (f(node, pos) === false) {\n complete = true;\n }\n }\n };\n\n if (!oldState) {\n newState.doc.descendants(handler);\n } else if (oldState.doc !== newState.doc) {\n changedDescendants(oldState.doc, newState.doc, 0, handler);\n }\n}\n\n// Helper for iterating through the nodes in a document that changed\n// compared to the given previous document. Useful for avoiding\n// duplicate work on each transaction.\n// from: https://github.com/ProseMirror/prosemirror-tables/blob/master/src/fixtables.js\nfunction changedDescendants(\n old: ProsemirrorNode,\n cur: ProsemirrorNode,\n offset: number,\n f: (node: ProsemirrorNode, pos: number) => void,\n) {\n const oldSize = old.childCount;\n const curSize = cur.childCount;\n outer: for (let i = 0, j = 0; i < curSize; i++) {\n const child = cur.child(i);\n for (let scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) {\n if (old.child(scan) === child) {\n j = scan + 1;\n offset += child.nodeSize;\n continue outer;\n }\n }\n f(child, offset);\n if (j < oldSize && old.child(j).sameMarkup(child)) {\n changedDescendants(old.child(j), child, offset + 1, f);\n } else {\n child.nodesBetween(0, child.content.size, f, offset + 1);\n }\n offset += child.nodeSize;\n }\n}\n\nexport function transactionsAreTypingChange(transactions: Transaction[]) {\n if (\n transactions.length === 1 &&\n transactions[0].steps.length === 1 &&\n transactions[0].steps[0] instanceof ReplaceStep\n ) {\n // step to examine\n const step: any = transactions[0].steps[0];\n\n // insert single chraracter or new empty slice (e.g. from enter after a paragraph)\n if (step.from === step.to && sliceContentLength(step.slice) <= 1) {\n return true;\n }\n\n // remove single character\n if (Math.abs(step.from - step.to) === 1 && step.slice.content.size === 0) {\n return true;\n }\n }\n\n return false;\n}\n\nexport interface RangeStep extends Step {\n from: number;\n to: number;\n}\n\nexport interface SliceStep extends RangeStep {\n slice: Slice;\n}\n","/*\n * slice.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Slice, Node as ProsemirrorNode } from 'prosemirror-model';\n\nexport function sliceContentLength(slice: Slice) {\n let length = 0;\n for (let i = 0; i < slice.content.childCount; i++) {\n length += slice.content.child(i).textContent.length;\n }\n return length;\n}\n\nexport function sliceHasNode(slice: Slice, predicate: (node: ProsemirrorNode) => boolean) {\n let hasNode = false;\n slice.content.descendants(node => {\n if (predicate(node)) {\n hasNode = true;\n return false;\n }\n });\n return hasNode;\n}\n","/*\n * platform.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport const kPlatformMac = typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false;\n","/*\n * outline.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorState } from 'prosemirror-state';\n\nimport { NodeWithPos, findChildrenByType } from 'prosemirror-utils';\n\nimport { findTopLevelBodyNodes } from './node';\nimport { titleFromYamlMetadataNode } from './yaml';\nimport { rmdChunkEngineAndLabel } from './rmd';\n\nexport interface EditorOutlineItem {\n navigation_id: string;\n type: EditorOutlineItemType;\n level: number;\n sequence: number;\n title: string;\n children: EditorOutlineItem[];\n}\n\nexport const kHeadingOutlineItemType = 'heading';\nexport const kRmdchunkOutlineItemType = 'rmd_chunk';\nexport const kYamlMetadataOutlineItemType = 'yaml_metadata';\n\nexport type EditorOutlineItemType = 'heading' | 'rmd_chunk' | 'yaml_metadata';\n\nexport type EditorOutline = EditorOutlineItem[];\n\nexport interface EditingOutlineLocationItem {\n type: EditorOutlineItemType;\n level: number;\n title: string;\n active: boolean;\n position: number;\n}\n\nexport interface EditingOutlineLocation {\n items: EditingOutlineLocationItem[];\n}\n\nexport function getEditingOutlineLocation(state: EditorState): EditingOutlineLocation {\n // traverse document outline to get base location info\n const itemsWithPos = getDocumentOutline(state).map(nodeWithPos => {\n const schema = state.schema;\n const node = nodeWithPos.node;\n const item: EditingOutlineLocationItem = {\n type: kYamlMetadataOutlineItemType,\n level: 0,\n title: '',\n active: false,\n position: nodeWithPos.pos,\n };\n if (node.type === schema.nodes.yaml_metadata) {\n item.type = kYamlMetadataOutlineItemType;\n item.title = titleFromYamlMetadataNode(node) || '';\n } else if (node.type === schema.nodes.rmd_chunk) {\n item.type = kRmdchunkOutlineItemType;\n const chunk = rmdChunkEngineAndLabel(node.textContent);\n if (chunk) {\n item.title = chunk.label;\n }\n } else if (node.type === schema.nodes.heading) {\n item.type = kHeadingOutlineItemType;\n item.level = node.attrs.level;\n item.title = node.textContent;\n }\n return {\n item,\n pos: nodeWithPos.pos,\n };\n });\n\n // return the location, set the active item by scanning backwards until\n // we find an item with a position before the cursor\n let foundActive = false;\n const items: EditingOutlineLocationItem[] = [];\n for (let i = itemsWithPos.length - 1; i >= 0; i--) {\n const item = itemsWithPos[i].item;\n if (!foundActive && itemsWithPos[i].pos < state.selection.from) {\n item.active = true;\n foundActive = true;\n }\n items.unshift(item);\n }\n\n // return the outline\n return { items };\n}\n\n// get a document outline that matches the scheme provided in EditingOutlineLocation:\n// - yaml metadata blocks\n// - top-level headings\n// - rmd chunks at the top level or within a top-level list\nexport function getDocumentOutline(state: EditorState): NodeWithPos[] {\n // get top level body nodes\n const schema = state.schema;\n const bodyNodes = findTopLevelBodyNodes(state.doc, node => {\n return [\n schema.nodes.yaml_metadata,\n schema.nodes.rmd_chunk,\n schema.nodes.heading,\n schema.nodes.bullet_list,\n schema.nodes.ordered_list,\n ].includes(node.type);\n });\n\n // reduce (explode lists into contained rmd chunks)\n const outlineNodes: NodeWithPos[] = [];\n bodyNodes.forEach(bodyNode => {\n // explode lists\n if ([schema.nodes.bullet_list, schema.nodes.ordered_list].includes(bodyNode.node.type)) {\n // look for rmd chunks within list items (non-recursive, only want top level)\n findChildrenByType(bodyNode.node, schema.nodes.list_item, false).forEach(listItemNode => {\n findChildrenByType(listItemNode.node, schema.nodes.rmd_chunk, false).forEach(rmdChunkNode => {\n outlineNodes.push({\n node: rmdChunkNode.node,\n pos: bodyNode.pos + 1 + listItemNode.pos + 1 + rmdChunkNode.pos,\n });\n });\n });\n\n // other nodes go straight through\n } else {\n outlineNodes.push(bodyNode);\n }\n });\n\n // return outline nodes\n return outlineNodes;\n}\n\nexport function getOutlineNodes(doc: ProsemirrorNode) {\n return findTopLevelBodyNodes(doc, isOutlineNode);\n}\n\nexport function isOutlineNode(node: ProsemirrorNode) {\n if (node.type.spec.attrs) {\n return node.type.spec.attrs.hasOwnProperty('navigation_id');\n } else {\n return false;\n }\n}\n","/*\n * rmd.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, NodeType } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { GapCursor } from 'prosemirror-gapcursor';\n\nimport {\n findParentNodeOfType,\n findChildrenByType,\n findChildren,\n findChildrenByMark,\n setTextSelection,\n} from 'prosemirror-utils';\n\nimport { getMarkRange } from './mark';\nimport { precedingListItemInsertPos, precedingListItemInsert } from './list';\nimport { toggleBlockType } from './command';\nimport { selectionIsBodyTopLevel } from './selection';\nimport { uuidv4 } from './util';\n\nexport interface EditorRmdChunk {\n lang: string;\n meta: string;\n code: string;\n}\n\nexport type ExecuteRmdChunkFn = (chunk: EditorRmdChunk) => void;\n\nexport function canInsertRmdChunk(state: EditorState) {\n // must either be at the body top level, within a list item, within a div, or within a\n // blockquote (and never within a table)\n const schema = state.schema;\n const within = (nodeType: NodeType) => !!findParentNodeOfType(nodeType)(state.selection);\n if (within(schema.nodes.table)) {\n return false;\n }\n if (\n !selectionIsBodyTopLevel(state.selection) &&\n !within(schema.nodes.list_item) &&\n !within(schema.nodes.blockquote) &&\n schema.nodes.div && !within(schema.nodes.div)\n ) {\n return false;\n }\n\n return true;\n}\n\nexport function insertRmdChunk(chunkPlaceholder: string, rowOffset = 0, colOffset = 0) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const schema = state.schema;\n\n if (\n !(state.selection instanceof GapCursor) &&\n !toggleBlockType(schema.nodes.rmd_chunk, schema.nodes.paragraph)(state) &&\n !precedingListItemInsertPos(state.doc, state.selection)\n ) {\n return false;\n }\n\n // must either be at the body top level, within a list item, within a div, or within a\n // blockquote (and never within a table)\n if (!canInsertRmdChunk(state)) {\n return false;\n }\n\n if (dispatch) {\n // compute offset\n const lines = chunkPlaceholder.split(/\\r?\\n/);\n const lineChars = lines.slice(0, rowOffset).reduce((count, line) => count + line.length + 1, 1);\n const offsetChars = lineChars + colOffset;\n\n // perform insert\n const tr = state.tr;\n const rmdText = schema.text(chunkPlaceholder);\n const rmdNode = schema.nodes.rmd_chunk.create({ navigation_id: uuidv4() }, rmdText);\n const prevListItemPos = precedingListItemInsertPos(tr.doc, tr.selection);\n if (prevListItemPos) {\n precedingListItemInsert(tr, prevListItemPos, rmdNode);\n } else {\n tr.replaceSelectionWith(rmdNode);\n const selPos = tr.selection.from - rmdNode.nodeSize - 1 + offsetChars - 1;\n setTextSelection(selPos)(tr);\n }\n\n dispatch(tr);\n }\n\n return true;\n };\n}\n\nexport function activeRmdChunk(state: EditorState): EditorRmdChunk | null {\n if (state.schema.nodes.rmd_chunk) {\n const rmdNode = findParentNodeOfType(state.schema.nodes.rmd_chunk)(state.selection);\n if (rmdNode) {\n return rmdChunk(rmdNode.node.textContent);\n }\n }\n return null;\n}\n\nexport function previousExecutableRmdChunks(state: EditorState, pos = state.selection.from): EditorRmdChunk[] {\n const activeChunk = activeRmdChunk(state);\n const lang = activeChunk ? activeChunk.lang : 'r';\n const kEvalFalseRegEx = /eval\\s*=\\s*F(?:ALSE)?/;\n return previousRmdChunks(state, pos, chunk => {\n return (\n chunk.lang.localeCompare(lang, undefined, { sensitivity: 'accent' }) === 0 && !kEvalFalseRegEx.test(chunk.meta)\n );\n });\n}\n\nexport function previousRmdChunks(state: EditorState, pos: number, filter?: (chunk: EditorRmdChunk) => boolean) {\n // chunks to return\n const chunks: EditorRmdChunk[] = [];\n\n // find all chunks in the document and return ones before the position that pass the specified filter\n const schema = state.schema;\n const rmdChunkNodes = findChildrenByType(state.doc, schema.nodes.rmd_chunk);\n for (const rmdChunkNode of rmdChunkNodes) {\n if (rmdChunkNode.pos + rmdChunkNode.node.nodeSize > pos) {\n break;\n }\n const chunk = rmdChunk(rmdChunkNode.node.textContent);\n if (chunk && (!filter || filter(chunk))) {\n chunks.push(chunk);\n }\n }\n\n // return chunks\n return chunks;\n}\n\nexport function rmdChunk(code: string): EditorRmdChunk | null {\n let lines = code.trimLeft().split('\\n');\n if (lines.length > 0) {\n const meta = lines[0].replace(/^[\\s`\\{]*(.*?)\\}?\\s*$/, '$1');\n const matchLang = meta.match(/\\w+/);\n const lang = matchLang ? matchLang[0] : '';\n\n // remove lines, other than the first, which are chunk delimiters (start\n // with ```). these are generally unintended but can be accidentally\n // introduced by e.g., pasting a chunk with its delimiters into visual mode,\n // where delimiters are implicit. if these lines aren't removed, they create\n // nested chunks that break parsing and can corrupt the document (see case\n // 8452)\n lines = lines.filter((line, idx) => {\n if (idx === 0) {\n return true;\n }\n return !line.startsWith(\"```\");\n });\n\n // a completely empty chunk (no second line) should be returned\n // as such. if it's not completely empty then append a newline\n // to the result of split (so that the chunk ends w/ a newline)\n const chunkCode = lines.length > 1 ? lines.slice(1).join('\\n') + '\\n' : '';\n\n return {\n lang,\n meta,\n code: chunkCode,\n };\n } else {\n return null;\n }\n}\n\nexport function mergeRmdChunks(chunks: EditorRmdChunk[]) {\n if (chunks.length) {\n const merged = {\n lang: chunks[0].lang,\n meta: '',\n code: '',\n };\n chunks.forEach(chunk => (merged.code += chunk.code + '\\n'));\n return merged;\n } else {\n return null;\n }\n}\n\n/**\n * Attempts to extract the engine name and label from a chunk header.\n * \n * @param text The chunk header, e.g. {r foo}\n * @returns An object with `engine` and `label` properties, or null.\n */\nexport function rmdChunkEngineAndLabel(text: string) {\n // Match the engine and label with a regex\n const match = text.match(/^\\{([a-zA-Z0-9_]+)[\\s,]+([a-zA-Z0-9/._='\"-]+)/);\n if (match) {\n // The second capturing group in the regex matches the first string after\n // the engine. This might be a label (e.g., {r label}), but could also be\n // a chunk option (e.g., {r echo=FALSE}). If it has an =, presume that it's\n // an option.\n if (match[2].indexOf(\"=\") !== -1) {\n return null;\n }\n return {\n engine: match[1],\n label: match[2],\n };\n } else {\n return null;\n }\n}\n\nexport function haveTableCellsWithInlineRcode(doc: ProsemirrorNode) {\n const schema = doc.type.schema;\n const haveRCode = !!doc.type.schema.nodes.rmd_chunk;\n if (haveRCode) {\n const isTableCell = (node: ProsemirrorNode) =>\n node.type === schema.nodes.table_cell || node.type === schema.nodes.table_header;\n return findChildren(doc, isTableCell).some(cell => {\n if (doc.rangeHasMark(cell.pos, cell.pos + cell.node.nodeSize, schema.marks.code)) {\n const markedNodes = findChildrenByMark(cell.node, schema.marks.code, true);\n return markedNodes.some(markedNode => {\n const from = cell.pos + 1 + markedNode.pos;\n const markedRange = getMarkRange(doc.resolve(from), schema.marks.code);\n if (markedRange) {\n const text = doc.textBetween(markedRange.from, markedRange.to);\n return /^r[ #].+$/.test(text);\n } else {\n return false;\n }\n });\n } else {\n return false;\n }\n });\n } else {\n return false;\n }\n}\n","/*\n * mark.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Mark, MarkSpec, MarkType, ResolvedPos, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorState, Selection, Transaction } from 'prosemirror-state';\n\nimport { PandocTokenReader, PandocMarkWriterFn, PandocInlineHTMLReaderFn } from './pandoc';\nimport { mergedTextNodes } from './text';\nimport { findChildrenByMark } from 'prosemirror-utils';\nimport { MarkTransaction } from './transaction';\n\nexport interface PandocMark {\n readonly name: string;\n readonly spec: MarkSpec;\n readonly noInputRules?: boolean;\n readonly noSpelling?: boolean;\n readonly pandoc: {\n readonly readers: readonly PandocTokenReader[];\n readonly inlineHTMLReader?: PandocInlineHTMLReaderFn;\n readonly writer: {\n priority: number;\n write: PandocMarkWriterFn;\n };\n };\n}\n\nexport function markIsActive(context: EditorState | Transaction, type: MarkType) {\n const { from, $from, to, empty } = context.selection;\n\n if (empty) {\n return type && !!type.isInSet(context.storedMarks || $from.marks());\n }\n\n return !!context.doc.rangeHasMark(from, to, type);\n}\n\nexport function getMarkAttrs(doc: ProsemirrorNode, range: { from: number; to: number }, type: MarkType) {\n const { from, to } = range;\n let marks: Mark[] = [];\n\n doc.nodesBetween(from, to, node => {\n marks = [...marks, ...node.marks];\n });\n\n const mark = marks.find(markItem => markItem.type.name === type.name);\n\n if (mark) {\n return mark.attrs;\n }\n\n return {};\n}\n\nexport function getMarkRange($pos?: ResolvedPos, type?: MarkType) {\n if (!$pos || !type) {\n return false;\n }\n\n const start = $pos.parent.childAfter($pos.parentOffset);\n\n if (!start.node) {\n return false;\n }\n\n const link = start.node.marks.find((mark: Mark) => mark.type === type);\n if (!link) {\n return false;\n }\n\n let startIndex = $pos.index();\n let startPos = $pos.start() + start.offset;\n let endIndex = startIndex + 1;\n let endPos = startPos + start.node.nodeSize;\n\n while (startIndex > 0 && link.isInSet($pos.parent.child(startIndex - 1).marks)) {\n startIndex -= 1;\n startPos -= $pos.parent.child(startIndex).nodeSize;\n }\n\n while (endIndex < $pos.parent.childCount && link.isInSet($pos.parent.child(endIndex).marks)) {\n endPos += $pos.parent.child(endIndex).nodeSize;\n endIndex += 1;\n }\n\n return { from: startPos, to: endPos };\n}\n\nexport function getSelectionMarkRange(selection: Selection, markType: MarkType): { from: number; to: number } {\n let range: { from: number; to: number };\n if (selection.empty) {\n range = getMarkRange(selection.$head, markType) as { from: number; to: number };\n } else {\n range = { from: selection.from, to: selection.to };\n }\n return range;\n}\n\nexport function removeInvalidatedMarks(\n tr: MarkTransaction,\n node: ProsemirrorNode,\n pos: number,\n re: RegExp,\n markType: MarkType,\n) {\n re.lastIndex = 0;\n const markedNodes = findChildrenByMark(node, markType, true);\n markedNodes.forEach(markedNode => {\n const from = pos + 1 + markedNode.pos;\n const markedRange = getMarkRange(tr.doc.resolve(from), markType);\n if (markedRange) {\n const text = tr.doc.textBetween(markedRange.from, markedRange.to);\n if (!text.match(re)) {\n tr.removeMark(markedRange.from, markedRange.to, markType);\n tr.removeStoredMark(markType);\n }\n }\n });\n re.lastIndex = 0;\n}\n\nexport function splitInvalidatedMarks(\n tr: MarkTransaction,\n node: ProsemirrorNode,\n pos: number,\n validLength: (text: string) => number,\n markType: MarkType,\n removeMark?: (from: number, to: number) => void,\n) {\n const hasMarkType = (nd: ProsemirrorNode) => markType.isInSet(nd.marks);\n const markedNodes = findChildrenByMark(node, markType, true);\n markedNodes.forEach(markedNode => {\n const mark = hasMarkType(markedNode.node);\n if (mark) {\n const from = pos + 1 + markedNode.pos;\n const markRange = getMarkRange(tr.doc.resolve(from), markType);\n if (markRange) {\n const text = tr.doc.textBetween(markRange.from, markRange.to);\n const length = validLength(text);\n if (length > -1 && length !== text.length) {\n if (removeMark) {\n removeMark(markRange.from + length, markRange.to);\n } else {\n tr.removeMark(markRange.from + length, markRange.to, markType);\n }\n }\n }\n }\n });\n}\n\nexport function detectAndApplyMarks(\n tr: MarkTransaction,\n node: ProsemirrorNode,\n pos: number,\n re: RegExp,\n markType: MarkType,\n attrs: (match: RegExpMatchArray) => {},\n filter?: (from: number, to: number) => boolean,\n text?: (match: RegExpMatchArray) => string,\n) {\n re.lastIndex = 0;\n const textNodes = mergedTextNodes(node, (_node: ProsemirrorNode, _pos: number, parentNode: ProsemirrorNode) =>\n parentNode.type.allowsMarkType(markType),\n );\n textNodes.forEach(textNode => {\n re.lastIndex = 0;\n let match = re.exec(textNode.text);\n while (match !== null) {\n const refText = text ? text(match) : match[0];\n const from = pos + 1 + textNode.pos + match.index + (match[0].length - refText.length);\n const to = from + refText.length;\n const range = getMarkRange(tr.doc.resolve(to), markType);\n if (\n (!range || range.from !== from || range.to !== to) &&\n !tr.doc.rangeHasMark(from, to, markType.schema.marks.code)\n ) {\n if (!filter || filter(from, to)) {\n const mark = markType.create(attrs instanceof Function ? attrs(match) : attrs);\n tr.addMark(from, to, mark);\n if (tr.selection.anchor === to) {\n tr.removeStoredMark(mark.type);\n }\n }\n }\n match = re.lastIndex !== 0 ? re.exec(textNode.text) : null;\n }\n });\n re.lastIndex = 0;\n}\n","/*\n * text.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\n\nexport interface TextWithPos {\n readonly text: string;\n readonly pos: number;\n}\n\nexport function mergedTextNodes(\n doc: ProsemirrorNode,\n filter?: (node: ProsemirrorNode, pos: number, parentNode: ProsemirrorNode) => boolean,\n): TextWithPos[] {\n const textNodes: TextWithPos[] = [];\n let nodeIndex = 0;\n doc.descendants((node, pos, parentNode) => {\n if (node.isText) {\n // apply filter\n if (filter && !filter(node, pos, parentNode)) {\n return false;\n }\n\n // join existing contiguous range of text nodes or create a new one\n if (textNodes[nodeIndex]) {\n textNodes[nodeIndex] = {\n text: textNodes[nodeIndex].text + node.text,\n pos: textNodes[nodeIndex].pos,\n };\n } else {\n textNodes[nodeIndex] = {\n text: node.text || '',\n pos,\n };\n }\n } else {\n nodeIndex += 1;\n }\n });\n return textNodes;\n}\n\nexport function stripQuotes(text: string) {\n return text.replace(/[\"']/g, '');\n}\n\nexport function equalsIgnoreCase(str1: string, str2: string) {\n return str1.localeCompare(str2, undefined, { sensitivity: 'accent' }) === 0;\n}\n","/*\n * list.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { Transaction, Selection } from 'prosemirror-state';\n\nimport { findParentNodeOfType, setTextSelection } from 'prosemirror-utils';\n\nexport enum ListType {\n Ordered = 'OrderedList',\n Bullet = 'BulletList',\n}\n\nexport interface ListCapabilities {\n tasks: boolean;\n fancy: boolean;\n example: boolean;\n order: boolean;\n}\n\nexport function isList(node: ProsemirrorNode | null | undefined) {\n if (node) {\n const schema = node.type.schema;\n return node.type === schema.nodes.bullet_list || node.type === schema.nodes.ordered_list;\n } else {\n return false;\n }\n}\n\nexport function precedingListItemInsertPos(doc: ProsemirrorNode, selection: Selection) {\n // selection just be empty\n if (!selection.empty) {\n return null;\n }\n\n // check for insert position in preceding list item (only trigger when\n // the user is at the very beginning of a new bullet)\n const schema = doc.type.schema;\n const $head = selection.$head;\n const parentListItem = findParentNodeOfType(schema.nodes.list_item)(selection);\n if (parentListItem) {\n const $liPos = doc.resolve(parentListItem.pos);\n const listIndex = $liPos.index();\n const parentIndex = $head.index($head.depth - 1);\n const parentOffset = $head.parentOffset;\n if (listIndex > 0 && parentIndex === 0 && parentOffset === 0) {\n const pos = $liPos.pos - 1;\n return pos;\n } else {\n return null;\n }\n } else {\n return null;\n }\n}\n\nexport function precedingListItemInsert(tr: Transaction, pos: number, node: ProsemirrorNode) {\n tr.deleteRange(tr.selection.from, tr.selection.from + 1);\n tr.insert(pos, node);\n setTextSelection(tr.mapping.map(pos), -1)(tr);\n return tr;\n}\n","/*\n * command.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { lift, setBlockType, toggleMark, wrapIn } from 'prosemirror-commands';\nimport { MarkType, Node as ProsemirrorNode, NodeType } from 'prosemirror-model';\nimport { wrapInList, liftListItem } from 'prosemirror-schema-list';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { findParentNode, findParentNodeOfType, setTextSelection } from 'prosemirror-utils';\nimport { EditorView } from 'prosemirror-view';\n\nimport { markIsActive, getMarkRange } from './mark';\nimport { canInsertNode, nodeIsActive } from './node';\nimport { pandocAttrInSpec, pandocAttrAvailable, pandocAttrFrom } from './pandoc_attr';\nimport { isList } from './list';\nimport { OmniInsert } from './omni_insert';\nimport { EditorUIPrefs, kListSpacingTight } from './ui';\nimport { selectionIsWithinRange, selectionHasRange } from './selection';\n\nexport enum EditorCommandId {\n // text editing\n Undo = '201CA961-829E-4708-8FBC-8896FDE85A10',\n Redo = 'B6272475-04E0-48C0-86E3-DAFA763BDF7B',\n SelectAll = 'E42BF0DA-8A02-4FCE-A202-7EA8A4833FC5',\n ClearFormatting = 'C22D8CC4-0A9F-41D5-B540-7DAAAB80F344',\n\n // formatting\n Strong = '83B04020-1195-4A65-8A8E-7C173C87F439',\n Em = '9E1B73E4-8140-43C3-92E4-A5E2583F40E6',\n Code = '32621150-F829-4B8F-B5BD-627FABBBCF53',\n Strikeout = 'D5F0225B-EC73-4600-A1F3-01F418EE8CB4',\n Superscript = '0200D2FC-B5AF-423B-8B7A-4A7FC3DAA6AF',\n Subscript = '3150428F-E468-4E6E-BF53-A2713E59B4A0',\n Smallcaps = '41D8030F-5E8B-48F2-B1EE-6BC40FD502E4',\n Underline = '7F0E6AE2-08F4-4594-9BA2-E6B8B27FA8F7',\n Paragraph = '20EC2695-75CE-4DCD-A644-266E9F5F5913',\n Heading1 = '5B77642B-923D-4440-B85D-1A27C9CF9D77',\n Heading2 = '42985A4B-6BF2-4EEF-AA30-3E84A8B9111C',\n Heading3 = '3F84D9DF-5EF6-484C-8615-BAAE2AC9ECE2',\n Heading4 = 'DA76731D-1D84-4DBA-9BEF-A6F73536F0B9',\n Heading5 = '59E24247-A140-466A-BC96-3C8ADABB57A5',\n Heading6 = 'DB495DF5-8501-43C7-AE07-59CE9D9C373D',\n CodeBlock = '3BA12A49-3E29-4ABC-9A49-436A3B49B880',\n CodeBlockFormat = '07A6F2AA-01DC-41D7-9F01-AA91EAD856EE',\n Blockquote = 'AF0717E7-E4BA-4909-9F10-17EB757CDD0F',\n LineBlock = 'F401687C-B995-49AF-B2B0-59C158174FD5',\n AttrEdit = '0F8A254D-9272-46BF-904D-3A9D68B91032',\n Span = '852CF3E3-8A2B-420D-BD95-F79C54118E7E',\n Div = '15EDB8F1-6015-4DA9-AE50-5987B24C1D96',\n InsertDiv = 'ACA1521B-8875-4113-9D43-B47F0038B19F',\n\n // lists\n BulletList = 'D897FD2B-D6A4-44A7-A404-57B5251FBF64',\n OrderedList = '3B8B82D5-7B6C-4480-B7DD-CF79C6817980',\n TightList = 'A32B668F-74F3-43D7-8759-6576DDE1D603',\n ListItemSink = '7B503FA6-6576-4397-89EF-37887A1B2EED',\n ListItemLift = '53F89F57-22E2-4FCC-AF71-3E382EC10FC8',\n ListItemSplit = '19BBD87F-96D6-4276-B7B8-470652CF4106',\n ListItemCheck = '2F6DA9D8-EE57-418C-9459-50B6FD84137F',\n ListItemCheckToggle = '34D30F3D-8441-44AD-B75A-415DA8AC740B',\n EditListProperties = 'E006A68C-EA39-4954-91B9-DDB07D1CBDA2',\n\n // tables\n TableInsertTable = 'FBE39613-2DAA-445D-9E92-E1EABFB33E2C',\n TableToggleHeader = 'A5EDA226-A3CA-4C1B-8D4D-C2675EF51AFF',\n TableToggleCaption = 'C598D85C-E15C-4E10-9850-95882AEC7E60',\n TableNextCell = '14299819-3E19-4A27-8D0B-8035315CF0B4',\n TablePreviousCell = '0F041FB5-0203-4FF1-9D13-B16606A80F3E',\n TableAddColumnBefore = '2447B81F-E07A-4C7D-8026-F2B148D5FF4A',\n TableAddColumnAfter = 'ED86CFAF-D0B3-4B1F-9BB8-89987A939C8C',\n TableDeleteColumn = 'B3D077BC-DD51-4E3A-8AD4-DE5DE686F7C4',\n TableAddRowBefore = 'E97FB318-4052-41E5-A2F5-55B64E9826A5',\n TableAddRowAfter = '3F28FA24-4BDD-4C13-84FF-9C5E1D4B04D6',\n TableDeleteRow = '5F3B4DCD-5006-43A5-A069-405A946CAC68',\n TableDeleteTable = '116D1E68-9315-4FEB-B6A0-AD25B3B9C881',\n TableAlignColumnLeft = '0CD6A2A4-06F9-435D-B8C9-070B22B19D8',\n TableAlignColumnRight = '86D90C12-BB12-4A9D-802F-D00EB7CEF2C5',\n TableAlignColumnCenter = '63333996-2F65-4586-8494-EA9CAB5A7751',\n TableAlignColumnDefault = '7860A9C1-60AF-40AD-9EB8-A10F6ADF25C5',\n\n // insert\n OmniInsert = '12F96C13-38C1-4266-A0A1-E871D8C709FB',\n Link = '842FCB9A-CA61-4C5F-A0A0-43507B4B3FA9',\n RemoveLink = '072D2084-218D-4A34-AF1F-7E196AF684B2',\n Image = '808220A3-2B83-4CB6-BCC1-46565D54FA47',\n Footnote = '1D1A73C0-F0E1-4A0F-BEBC-08398DE14A4D',\n ParagraphInsert = '4E68830A-3E68-450A-B3F3-2591F4EB6B9A',\n HorizontalRule = 'EAA7115B-181C-49EC-BDB1-F0FF10369278',\n YamlMetadata = '431B5A45-1B25-4A55-9BAF-C0FE95D9B2B6',\n Shortcode = '0FDDA7E8-419D-4A5D-A1F5-74061466655D',\n InlineMath = 'A35C562A-0BD6-4B14-93D5-6FF3BE1A0C8A',\n DisplayMath = '3E36BA99-2AE9-47C3-8C85-7CC5314A88DF',\n Citation = 'EFFCFC81-F2E7-441E-B7FA-C693146B4185',\n CrossReference = '48CEED4F-1D18-4AF9-8686-9FEB5DF6BCC8',\n DefinitionList = 'CFAB8F4D-3350-4398-9754-8DE0FB95167B',\n DefinitionTerm = '204D1A8F-8EE6-424A-8E69-99768C85B39E',\n DefinitionDescription = 'F0738D83-8E11-4CB5-B958-390190A2D7DD',\n Symbol = '1419765F-6E4A-4A4C-8670-D9E8578EA996',\n Emoji = 'F73896A2-02CC-4E5D-A596-78444A1D2A37',\n EmDash = '5B0DD33B-6209-4713-B8BB-60B5CA0BC3B3',\n EnDash = 'C32AFE32-0E57-4A16-9C39-88EB1D82B8B4',\n NonBreakingSpace = 'CF6428AB-F36E-446C-8661-2781B2CD1169',\n HardLineBreak = '3606FF87-866C-4729-8F3F-D065388FC339',\n\n // raw\n TexInline = 'CFE8E9E5-93BA-4FFA-9A77-BA7EFC373864',\n TexBlock = 'BD11A6A7-E528-40A2-8139-3F8F5F556ED2',\n HTMLComment = 'F973CBA4-2882-4AC5-A642-47F4733EBDD4',\n HTMLInline = 'C682C6B5-E58D-498C-A38F-FB07BEC3A82D',\n HTMLBlock = '6F9F64AF-711F-4F91-8642-B51C41717F31',\n RawInline = '984167C8-8582-469C-97D8-42CB12773657',\n RawBlock = 'F5757992-4D33-45E6-86DC-F7D7B174B1EC',\n\n // chunk\n RCodeChunk = 'EBFD21FF-4A6E-4D88-A2E0-B38470B00BB9',\n BashCodeChunk = '5FBB7283-E8AB-450C-9359-A4658CBCD136',\n D3CodeChunk = 'C73CA46C-B56F-40B6-AEFA-DDBB30CA8C08',\n PythonCodeChunk = '42A7A138-421A-4DCF-8A88-FE2F8EC5B8F6',\n RcppCodeChunk = '6BD2810B-6B20-4358-8AA4-74BBFFC92AC3',\n SQLCodeChunk = '41D61FD2-B56B-48A7-99BC-2F60BC0D9F78',\n StanCodeChunk = '65D33344-CBE9-438C-B337-A538F8D7FCE5',\n ExecuteCurentRmdChunk = '31C799F3-EF18-4F3A-92E6-51F7A3193A1B',\n ExecuteCurrentPreviousRmdChunks = 'D3FDE96-0264-4364-ADFF-E87A75405B0B',\n\n // outline\n GoToNextSection = 'AE827BDA-96F8-4E84-8030-298D98386765',\n GoToPreviousSection = 'E6AA728C-2B75-4939-9123-0F082837ACDF',\n GoToNextChunk = '50DD6E51-13B5-4F1E-A46B-6A33EB1609D9',\n GoToPreviousChunk = '8D105D33-78FE-4A98-8195-6B71361424C5'\n}\n\nexport interface EditorCommand {\n readonly id: EditorCommandId;\n readonly keymap: readonly string[];\n readonly isEnabled: () => boolean;\n readonly isActive: () => boolean;\n readonly plural: () => number;\n readonly execute: () => void;\n}\n\nexport class ProsemirrorCommand {\n public readonly id: EditorCommandId;\n public readonly keymap: readonly string[];\n public readonly execute: CommandFn;\n public readonly omniInsert?: OmniInsert;\n public readonly keepFocus: boolean;\n\n constructor(\n id: EditorCommandId,\n keymap: readonly string[],\n execute: CommandFn,\n omniInsert?: OmniInsert,\n keepFocus?: boolean,\n ) {\n this.id = id;\n this.keymap = keymap;\n this.execute = execute;\n this.omniInsert = omniInsert;\n this.keepFocus = !(keepFocus === false);\n }\n\n public isEnabled(state: EditorState): boolean {\n return this.execute(state);\n }\n\n public isActive(state: EditorState): boolean {\n return false;\n }\n\n public plural(state: EditorState): number {\n return 1;\n }\n}\n\nexport class MarkCommand extends ProsemirrorCommand {\n public readonly markType: MarkType;\n public readonly attrs: object;\n\n constructor(id: EditorCommandId, keymap: string[], markType: MarkType, attrs = {}) {\n super(id, keymap, toggleMarkType(markType, attrs) as CommandFn);\n this.markType = markType;\n this.attrs = attrs;\n }\n\n public isActive(state: EditorState) {\n return markIsActive(state, this.markType);\n }\n}\n\nexport class NodeCommand extends ProsemirrorCommand {\n public readonly nodeType: NodeType;\n public readonly attrs: object;\n\n constructor(\n id: EditorCommandId,\n keymap: string[],\n nodeType: NodeType,\n attrs: object,\n execute: CommandFn,\n omniInsert?: OmniInsert,\n ) {\n super(id, keymap, execute, omniInsert);\n this.nodeType = nodeType;\n this.attrs = attrs;\n }\n\n public isActive(state: EditorState) {\n return nodeIsActive(state, this.nodeType, this.attrs);\n }\n}\n\nexport class BlockCommand extends NodeCommand {\n constructor(\n id: EditorCommandId,\n keymap: string[],\n blockType: NodeType,\n toggleType: NodeType,\n attrs = {},\n omniInsert?: OmniInsert,\n ) {\n super(id, keymap, blockType, attrs, toggleBlockType(blockType, toggleType, attrs), omniInsert);\n }\n}\n\nexport class WrapCommand extends NodeCommand {\n constructor(id: EditorCommandId, keymap: string[], wrapType: NodeType, attrs = {}, omniInsert?: OmniInsert) {\n super(id, keymap, wrapType, attrs, toggleWrap(wrapType, attrs), omniInsert);\n }\n}\n\nexport class InsertCharacterCommand extends ProsemirrorCommand {\n constructor(id: EditorCommandId, ch: string, keymap: string[]) {\n super(id, keymap, (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // enable/disable command\n const schema = state.schema;\n if (!canInsertNode(state, schema.nodes.text)) {\n return false;\n }\n if (dispatch) {\n const tr = state.tr;\n tr.replaceSelectionWith(schema.text(ch), true).scrollIntoView();\n dispatch(tr);\n }\n\n return true;\n });\n }\n}\n\nexport type CommandFn = (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => boolean;\n\nexport function toggleMarkType(markType: MarkType, attrs?: { [key: string]: any }) {\n const defaultToggleMark = toggleMark(markType, attrs);\n\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // disallow non-code marks when the selection is contained within a code mark\n // (this is a pandoc constraint). note that we can allow them if the selection\n // contains the code mark range entirely (as in that case the code mark will\n // nest within the other mark)\n if (markType !== state.schema.marks.code) {\n if (markIsActive(state, state.schema.marks.code)) {\n const codeRange = getMarkRange(state.selection.$anchor, state.schema.marks.code);\n if (\n codeRange &&\n selectionIsWithinRange(state.selection, codeRange) &&\n !selectionHasRange(state.selection, codeRange)\n ) {\n return false;\n }\n }\n }\n\n // default implementation\n return defaultToggleMark(state, dispatch);\n };\n}\n\nexport function toggleList(listType: NodeType, itemType: NodeType, prefs: EditorUIPrefs): CommandFn {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const { selection } = state;\n const { $from, $to } = selection;\n const range = $from.blockRange($to);\n\n if (!range) {\n return false;\n }\n\n const parentList = findParentNode(isList)(selection);\n\n if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {\n if (isList(parentList.node) && listType.validContent(parentList.node.content)) {\n if (parentList.node.type !== listType) {\n if (dispatch) {\n const tr: Transaction = state.tr;\n const attrs: { [key: string]: any } = {};\n if (parentList.node.attrs.tight) {\n attrs.tight = true;\n }\n tr.setNodeMarkup(parentList.pos, listType, attrs);\n dispatch(tr);\n }\n return true;\n } else {\n return liftListItem(itemType)(state, dispatch);\n }\n }\n }\n\n // if we are in a heading then this isn't valid\n if (findParentNodeOfType(state.schema.nodes.heading)(state.selection)) {\n return false;\n }\n\n // reflect tight preference\n const tight = prefs.listSpacing() === kListSpacingTight;\n\n return wrapInList(listType, { tight })(state, dispatch);\n };\n}\n\nexport function toggleBlockType(type: NodeType, toggletype: NodeType, attrs = {}): CommandFn {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (!dispatch) {\n return type === toggletype || setBlockType(type, { ...attrs })(state, dispatch);\n }\n\n // if the type has pandoc attrs then see if we can transfer from the existing node\n let pandocAttr: any = {};\n if (pandocAttrInSpec(type.spec)) {\n const predicate = (n: ProsemirrorNode) => pandocAttrAvailable(n.attrs);\n const node = findParentNode(predicate)(state.selection);\n if (node) {\n pandocAttr = pandocAttrFrom(node.node.attrs);\n }\n }\n\n return setBlockType(type, { ...attrs, ...pandocAttr })(state, dispatch);\n };\n}\n\nexport function toggleWrap(type: NodeType, attrs?: { [key: string]: any }): CommandFn {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const isActive = nodeIsActive(state, type, attrs);\n\n if (isActive) {\n return lift(state, dispatch);\n }\n\n return wrapIn(type, attrs)(state, dispatch);\n };\n}\n\nexport function insertNode(nodeType: NodeType, attrs = {}): CommandFn {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (!canInsertNode(state, nodeType)) {\n return false;\n }\n\n if (dispatch) {\n dispatch(state.tr.replaceSelectionWith(nodeType.create(attrs)));\n }\n\n return true;\n };\n}\n\nexport function exitNode(\n nodeType: NodeType,\n depth: number,\n allowKey: boolean,\n filter = (_node: ProsemirrorNode) => true,\n) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // must be within the node type and pass the filter\n const { $head, $anchor } = state.selection;\n if ($head.parent.type !== nodeType || !filter($head.parent)) {\n return false;\n }\n\n // must be empty and entirely contained by the node\n if (!$head.sameParent($anchor) || !state.selection.empty) {\n return !allowKey;\n }\n\n // must be at the end of the node\n const node = findParentNodeOfType(nodeType)(state.selection)!;\n const endCaptionPos = node.pos + node.node.nodeSize - 1;\n if (state.selection.from !== endCaptionPos) {\n return !allowKey;\n }\n\n // insert must be valid in container above\n const above = $head.node(depth);\n const after = $head.indexAfter(depth);\n const type = above.contentMatchAt(after).defaultType!;\n if (!above.canReplaceWith(after, after, type)) {\n return !allowKey;\n }\n\n // perform insert\n if (dispatch) {\n const tr = state.tr;\n const pos = node.pos + node.node.nodeSize + (Math.abs(depth) - 1);\n tr.insert(pos, type.create());\n setTextSelection(pos, 1)(tr);\n dispatch(tr.scrollIntoView());\n }\n\n return true;\n };\n}\n","import { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\nimport { NodeWithPos } from 'prosemirror-utils';\n\nimport { bodyElement } from './dom';\nimport {\n kYamlMetadataOutlineItemType,\n kHeadingOutlineItemType,\n kRmdchunkOutlineItemType,\n EditingOutlineLocation,\n getDocumentOutline,\n EditingOutlineLocationItem,\n} from './outline';\nimport { restoreSelection } from './selection';\nimport { scrollToPos } from './scroll';\n\nexport interface EditingLocation {\n pos: number;\n scrollTop: number;\n}\n\nexport function getEditingLocation(view: EditorView): EditingLocation {\n const pos = view.state.selection.from;\n const bodyEl = bodyElement(view);\n const scrollTop = bodyEl.scrollTop;\n return { pos, scrollTop };\n}\n\nexport function setEditingLocation(\n view: EditorView,\n outlineLocation?: EditingOutlineLocation,\n previousLocation?: EditingLocation,\n) {\n // get the current document outline\n const documentOutline = getDocumentOutline(view.state);\n\n // if all of the types and levels match up to the active outline item,\n // then we have a candidate match\n let docOutlineLocationNode: NodeWithPos | undefined;\n\n if (outlineLocation) {\n for (let i = 0; i < outlineLocation.items.length && i < documentOutline.length; i++) {\n // get the item and it's peer\n const item = outlineLocation.items[i];\n const docOutlineNode = documentOutline[i];\n\n // if they don't match then bail (can't resolve different interpretations of the outline)\n if (!outlineItemSimillarToNode(item, docOutlineNode.node)) {\n break;\n }\n\n // if this is the active item\n if (item.active) {\n // see if the previous location is actually a better target (because it's between this location and\n // the next outline node). in that case we don't set the target node and we leave the restorePos\n // at the previous location\n if (!locationIsBetweenDocOutlineNodes(docOutlineNode, documentOutline[i + 1], previousLocation)) {\n // set the target\n docOutlineLocationNode = docOutlineNode;\n\n // if this is an rmd chunk then advance to the second line\n if (docOutlineNode.node.type === view.state.schema.nodes.rmd_chunk) {\n const chunkText = docOutlineNode.node.textContent;\n const newlineIdx = chunkText.indexOf('\\n');\n if (newlineIdx !== -1) {\n docOutlineLocationNode.pos += newlineIdx + 2;\n }\n }\n }\n\n break;\n }\n }\n }\n\n // do the restore\n if (docOutlineLocationNode) {\n restoreSelection(view, docOutlineLocationNode.pos);\n scrollToPos(view, docOutlineLocationNode.pos);\n } else if (previousLocation) {\n restoreSelection(view, previousLocation.pos);\n bodyElement(view).scrollTop = previousLocation.scrollTop;\n }\n}\n\nfunction outlineItemSimillarToNode(outlineItem: EditingOutlineLocationItem, docOutlneNode: ProsemirrorNode) {\n const schema = docOutlneNode.type.schema;\n if (outlineItem.type === kYamlMetadataOutlineItemType) {\n return docOutlneNode.type === schema.nodes.yaml_metadata;\n } else if (outlineItem.type === kRmdchunkOutlineItemType) {\n return docOutlneNode.type === schema.nodes.rmd_chunk;\n } else if (outlineItem.type === kHeadingOutlineItemType) {\n return docOutlneNode.type === schema.nodes.heading && docOutlneNode.attrs.level === outlineItem.level;\n } else {\n return false;\n }\n}\n\nfunction locationIsBetweenDocOutlineNodes(nodeA: NodeWithPos, nodeB?: NodeWithPos, location?: EditingLocation) {\n // bail if we don't have all the arguments\n if (!nodeB || !location) {\n return false;\n }\n return nodeA.pos < location.pos && nodeB.pos > location.pos;\n}\n","/*\n * ui.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { SkinTone } from './emoji';\nimport { EditorRmdChunk } from './rmd';\nimport { XRef } from './xref';\n\nimport { EditorUIImages } from './ui-images';\nimport { EditorDialogs } from './ui-dialogs';\nimport { EditorUISpelling } from './spelling';\n\nexport interface EditorUI {\n dialogs: EditorDialogs;\n display: EditorDisplay;\n math: EditorUIMath;\n context: EditorUIContext;\n prefs: EditorUIPrefs;\n images: EditorUIImages;\n chunks: EditorUIChunks;\n spelling: EditorUISpelling;\n}\n\n/**\n * Callbacks supplied to the host to interact with a code chunk and its output.\n */\nexport interface EditorUIChunkCallbacks {\n getPos: () => number;\n scrollIntoView: (ele: HTMLElement) => void;\n scrollCursorIntoView: () => void;\n}\n\nexport interface EditorUIChunks {\n // create a code chunk editor\n createChunkEditor: (type: string, index: number, callbacks: EditorUIChunkCallbacks) => ChunkEditor;\n}\n\nexport interface ChunkEditor {\n editor: unknown;\n setMode(mode: string): void;\n executeSelection(): void;\n element: HTMLElement;\n destroy(): void;\n}\n\nexport interface EditorUIContext {\n // check if we are the active tab\n isActiveTab: () => boolean;\n\n // get the path to the current document\n getDocumentPath: () => string | null;\n\n // ensure the edited document is saved on the server before proceeding\n // (note this just means that the server has a copy of it for e.g.\n // indexing xrefs, from the user's standpoint the doc is still dirty)\n withSavedDocument: () => Promise;\n\n // get the default directory for resources (e.g. where relative links point to)\n getDefaultResourceDir: () => string;\n\n // map from a filesystem path to a resource reference\n mapPathToResource: (path: string) => string;\n\n // map from a resource reference (e.g. images/foo.png) to a URL we can use in the document\n mapResourceToURL: (path: string) => string;\n\n // watch a resource for changes (returns an unsubscribe function)\n watchResource: (path: string, notify: VoidFunction) => VoidFunction;\n\n // translate a string\n translateText: (text: string) => string;\n\n // are there dropped uris available?\n droppedUris: () => string[] | null;\n\n // uris from the clipboard\n clipboardUris: () => Promise;\n\n // image from the clipboard (returned as file path)\n clipboardImage: () => Promise;\n\n // resolve image uris (make relative, copy to doc local 'images' dir, etc)\n resolveImageUris: (uris: string[]) => Promise;\n\n // are we running in windows desktop mode?\n isWindowsDesktop: () => boolean;\n}\n\nexport interface EditorMenuItem {\n text?: string;\n exec?: VoidFunction;\n command?: string;\n separator?: boolean;\n subMenu?: {\n items: EditorMenuItem[];\n };\n}\n\nexport interface EditorUIMath {\n typeset?: (el: HTMLElement, text: string, priority: boolean) => Promise;\n}\n\nexport interface EditorDisplay {\n openURL: (url: string) => void;\n navigateToXRef: (file: string, xref: XRef) => void;\n showContextMenu?: (items: EditorMenuItem[], clientX: number, clientY: number) => Promise;\n}\n\nexport const kListSpacingTight = 'tight';\nexport const kListSpacingSpaced = 'spaced';\nexport type ListSpacing = 'tight' | 'spaced';\n\nexport interface EditorUIPrefs {\n darkMode: () => boolean;\n listSpacing: () => ListSpacing;\n equationPreview: () => boolean;\n tabKeyMoveFocus: () => boolean;\n emojiSkinTone: () => SkinTone;\n setEmojiSkinTone: (skinTone: SkinTone) => void;\n zoteroUseBetterBibtex: () => boolean;\n setBibliographyDefaultType: (type: string) => void;\n bibliographyDefaultType: () => string;\n citationDefaultInText: () => boolean;\n setCitationDefaultInText: (value: boolean) => void;\n}\n","/*\n * util.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\n// tslint:disable:no-bitwise\nexport function uuidv4() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n","/*\n * dom.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\n\nexport function bodyElement(view: EditorView): HTMLElement {\n return view.dom.firstChild as HTMLElement;\n}\n\nexport function isElementVisible(el: HTMLElement) {\n return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n}\n\nexport function elementInnerDimensions(el: HTMLElement) {\n const cs = getComputedStyle(el);\n\n const asNumber = (x: string | null) => (x ? parseFloat(x) : 0);\n const paddingX = asNumber(cs.paddingLeft) + asNumber(cs.paddingRight);\n const paddingY = asNumber(cs.paddingTop) + asNumber(cs.paddingBottom);\n const borderX = asNumber(cs.borderLeftWidth) + asNumber(cs.borderRightWidth);\n const borderY = asNumber(cs.borderTopWidth) + asNumber(cs.borderBottomWidth);\n\n return {\n width: el.offsetWidth - paddingX - borderX,\n height: el.offsetHeight - paddingY - borderY,\n };\n}\n\nexport function onElementRemoved(container: Node, el: HTMLElement, onRemoved: VoidFunction) {\n const observer = new MutationObserver(mutationsList => {\n mutationsList.forEach(mutation => {\n mutation.removedNodes.forEach(node => {\n if (node === el) {\n onRemoved();\n }\n });\n });\n });\n observer.observe(container, { attributes: false, childList: true, subtree: true });\n}\n","/*\n * scroll.ts\n *\n * Copyright (C) 2019-20 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\nimport { findParentNodeOfTypeClosestToPos } from 'prosemirror-utils';\n\nimport zenscroll from 'zenscroll';\n\nimport { editingRootNodeClosestToPos, editingRootNode } from './node';\n\nexport function scrollIntoView(\n view: EditorView,\n pos: number,\n center = true,\n duration?: number,\n offset?: number,\n onDone?: VoidFunction,\n) {\n // resolve position and determine container\n const $pos = view.state.doc.resolve(pos);\n const container = editingRootNodeClosestToPos($pos);\n\n // if we have a container then do the scroll\n if (container) {\n const schema = view.state.schema;\n const containerEl = view.nodeDOM(container.pos) as HTMLElement;\n const parentList = findParentNodeOfTypeClosestToPos($pos, [schema.nodes.ordered_list, schema.nodes.bullet_list]);\n const parentDiv = schema.nodes.div ? findParentNodeOfTypeClosestToPos($pos, schema.nodes.div) : undefined;\n const resultPos = parentList || parentDiv ? $pos.before(2) : $pos.before();\n const resultNode = view.nodeDOM(resultPos) as HTMLElement;\n if (container && resultNode) {\n const scroller = zenscroll.createScroller(containerEl, duration, offset);\n if (center) {\n scroller.center(resultNode, duration, offset, onDone);\n } else {\n scroller.intoView(resultNode, duration, onDone);\n }\n }\n }\n}\n\nexport function scrollToPos(view: EditorView, pos: number, duration?: number, offset?: number, onDone?: VoidFunction) {\n const node = view.nodeDOM(pos);\n if (node instanceof HTMLElement) {\n const editingRoot = editingRootNode(view.state.selection)!;\n const container = view.nodeDOM(editingRoot.pos) as HTMLElement;\n const scroller = zenscroll.createScroller(container, duration, offset);\n if (duration) {\n scroller.to(node, duration, onDone);\n } else {\n scroller.to(node, 0, onDone);\n }\n }\n}\n","/*\n * navigation.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\n\nimport { setTextSelection, Predicate, findChildren, findDomRefAtPos } from 'prosemirror-utils';\n\nimport zenscroll from 'zenscroll';\n\nimport { editingRootNode } from './node';\nimport { kNavigationTransaction } from './transaction';\nimport { xrefPosition } from './xref';\n\nexport interface EditorNavigation {\n navigate: (type: NavigationType, location: string, animate?: boolean) => void;\n}\n\nexport enum NavigationType {\n Pos = 'pos',\n Id = 'id',\n Href = 'href',\n Heading = 'heading',\n XRef = 'xref',\n}\n\nexport interface Navigation {\n pos: number;\n prevPos: number;\n}\n\nexport function navigateTo(\n view: EditorView,\n type: NavigationType,\n location: string,\n animate = true,\n): Navigation | null {\n switch (type) {\n case NavigationType.Pos:\n return navigateToPos(view, parseInt(location, 10), animate);\n case NavigationType.Id:\n return navigateToId(view, location, animate);\n case NavigationType.Href:\n return navigateToHref(view, location, animate);\n case NavigationType.Heading:\n return navigateToHeading(view, location, animate);\n case NavigationType.XRef:\n return navigateToXRef(view, location, animate);\n default:\n return null;\n }\n}\n\nexport function navigateToId(view: EditorView, id: string, animate = true): Navigation | null {\n return navigate(view, node => id === node.attrs.navigation_id, animate);\n}\n\nexport function navigateToHref(view: EditorView, href: string, animate = true): Navigation | null {\n return navigate(view, node => node.attrs.id === href, animate);\n}\n\nexport function navigateToHeading(view: EditorView, heading: string, animate = true): Navigation | null {\n return navigate(\n view,\n node => {\n return (\n node.type === view.state.schema.nodes.heading &&\n node.textContent.localeCompare(heading, undefined, { sensitivity: 'accent' }) === 0\n );\n },\n animate,\n );\n}\n\nexport function navigateToXRef(view: EditorView, xref: string, animate = true): Navigation | null {\n const xrefPos = xrefPosition(view.state.doc, xref);\n if (xrefPos !== -1) {\n return navigateToPos(view, xrefPos, animate);\n } else {\n return null;\n }\n}\n\nexport function navigateToPos(view: EditorView, pos: number, animate = true): Navigation | null {\n // get previous position\n const prevPos = view.state.selection.from;\n\n // need to target at least the body\n pos = Math.max(pos, 2);\n\n // set selection\n const tr = view.state.tr;\n setTextSelection(pos)(tr);\n tr.setMeta(kNavigationTransaction, true);\n view.dispatch(tr);\n\n // find a targetable dom node at the position\n const node = findDomRefAtPos(pos, view.domAtPos.bind(view));\n if (node instanceof HTMLElement) {\n // auto-scroll to position (delay so we can grab the focus, as autoscrolling\n // doesn't seem to work unless you have the focus)\n setTimeout(() => {\n view.focus();\n const editingRoot = editingRootNode(view.state.selection)!;\n const container = view.nodeDOM(editingRoot.pos) as HTMLElement;\n const scroller = zenscroll.createScroller(container, 700, 20);\n // some nodes' DOM elements are grandchildren rather than direct children\n // of the scroll container; move up a level if this is the case\n let dest = node;\n if (node.parentElement && \n node.parentElement.parentElement &&\n node.parentElement.parentElement.parentElement === container) {\n dest = node.parentElement;\n }\n if (animate) {\n scroller.to(dest);\n } else {\n scroller.to(dest, 0);\n }\n }, 200);\n\n return { pos, prevPos };\n } else {\n return null;\n }\n}\n\nfunction navigate(view: EditorView, predicate: Predicate, animate = true): Navigation | null {\n const result = findChildren(view.state.doc, predicate);\n if (result.length) {\n // pos points immediately before the node so add 1 to it\n const pos = result[0].pos + 1;\n return navigateToPos(view, pos, animate);\n } else {\n return null;\n }\n}\n","/*\n * xref.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, MarkType } from 'prosemirror-model';\n\nimport { findChildrenByMark } from 'prosemirror-utils';\n\nimport { pandocAutoIdentifier } from './pandoc_id';\nimport { rmdChunkEngineAndLabel } from './rmd';\nimport { kTexFormat } from './raw';\n\nexport interface XRefServer {\n indexForFile: (file: string) => Promise;\n xrefForId: (file: string, id: string) => Promise;\n}\n\nexport interface XRefs {\n baseDir: string;\n refs: XRef[];\n}\n\nexport interface XRef {\n file: string;\n type: string;\n id: string;\n suffix: string;\n title?: string;\n}\n\nexport function xrefKey(xref: XRef) {\n // headings don't include their type in the key\n const key = /^h\\d$/.test(xref.type)\n ? xref.id\n : // no colon if there is no type\n xref.type.length > 0\n ? `${xref.type}:${xref.id}`\n : xref.id;\n\n // return key with suffix\n return key + xref.suffix;\n}\n\nexport function xrefPosition(doc: ProsemirrorNode, xref: string): number {\n // -1 if not found\n let xrefPos = -1;\n\n // get type and id\n const xrefInfo = xrefTypeAndId(xref);\n if (xrefInfo) {\n const { type, id } = xrefInfo;\n const locator = xrefPositionLocators[type];\n if (locator) {\n // if this locator finds by mark then look at doc for marks\n if (locator.markType) {\n const schema = doc.type.schema;\n const markType = schema.marks[locator.markType];\n const markedNodes = findChildrenByMark(doc, markType, true);\n markedNodes.forEach(markedNode => {\n // bail if we already found it\n if (xrefPos !== -1) {\n return false;\n }\n // see if we can locate the xref\n if (locator.hasXRef(markedNode.node, id, markType)) {\n xrefPos = markedNode.pos;\n }\n });\n } \n if (xrefPos === -1 && locator.nodeTypes) {\n // otherwise recursively examine nodes to find the xref\n doc.descendants((node, pos) => {\n // bail if we already found it\n if (xrefPos !== -1) {\n return false;\n }\n // see if we can locate the xref\n if (locator.nodeTypes!.includes(node.type.name) && locator.hasXRef(node, id)) {\n xrefPos = pos;\n return false;\n }\n });\n }\n }\n }\n\n // return the position\n return xrefPos;\n}\n\nfunction xrefTypeAndId(xref: string) {\n const colonPos = xref.indexOf(':');\n if (colonPos !== -1) {\n return {\n type: xref.substring(0, colonPos),\n id: xref.substring(colonPos + 1),\n };\n } else {\n return null;\n }\n}\n\ninterface XRefPositionLocator {\n markType?: string;\n nodeTypes?: string[];\n hasXRef: (node: ProsemirrorNode, id: string, markType?: MarkType) => boolean;\n}\n\nconst xrefPositionLocators: { [key: string]: XRefPositionLocator } = {\n h1: headingLocator(),\n h2: headingLocator(),\n h3: headingLocator(),\n h4: headingLocator(),\n h5: headingLocator(),\n h6: headingLocator(),\n fig: {\n nodeTypes: ['rmd_chunk'],\n hasXRef: (node: ProsemirrorNode, id: string) => rmdChunkHasXRef(node, 'r', id, /^\\{.*[ ,].*fig\\.cap\\s*=.*\\}\\s*\\n/m),\n },\n tab: {\n nodeTypes: ['rmd_chunk', 'table_container'],\n hasXRef: (node: ProsemirrorNode, id: string) => {\n if (node.type.name === 'rmd_chunk') {\n return rmdChunkHasXRef(node, 'r', id, /kable\\s*\\([\\s\\S]*caption/);\n } else if (node.type.name === 'table_container') {\n const caption = node.child(1);\n const match = caption.textContent.match(/^\\s*\\(#tab\\:([a-zA-Z0-9\\/-]+)\\)\\s*(.*)$/);\n return !!match && match[1].localeCompare(id, undefined, { sensitivity: 'accent' }) === 0;\n } else {\n return false;\n }\n },\n },\n eq: {\n nodeTypes: ['raw_block'],\n markType: 'math',\n hasXRef: (node: ProsemirrorNode, id: string, markType?: MarkType) => {\n // if it's not a mark then ensure it is tex format before proceeding\n if (!markType && (node.attrs.format !== kTexFormat)) {\n return false;\n }\n const match = node.textContent.match(/^.*\\(\\\\#eq:([a-zA-Z0-9\\/-]+)\\).*$/m);\n return !!match && match[1].localeCompare(id, undefined, { sensitivity: 'accent' }) === 0;\n },\n },\n thm: thereomLocator('theorem'),\n lem: thereomLocator('lemma'),\n cor: thereomLocator('corollary'),\n prp: thereomLocator('proposition'),\n cnj: thereomLocator('conjecture'),\n def: thereomLocator('definition'),\n exr: thereomLocator('exercise'),\n};\n\nfunction rmdChunkHasXRef(node: ProsemirrorNode, engine: string, label: string, pattern?: RegExp) {\n const chunk = rmdChunkEngineAndLabel(node.textContent);\n const match = node.textContent.match(/^\\{([a-zA-Z0-9_]+)[\\s,]+([a-zA-Z0-9/-]+)/);\n if (chunk) {\n return (\n chunk.engine.localeCompare(engine, undefined, { sensitivity: 'accent' }) === 0 &&\n chunk.label === label &&\n (!pattern || !!node.textContent.match(pattern))\n );\n } else {\n return false;\n }\n}\n\nfunction headingLocator() {\n return {\n nodeTypes: ['heading'],\n hasXRef: (node: ProsemirrorNode, id: string) => {\n // note we use default pandoc auto id semantics here no matter what the documnet\n // happens to use b/c our xref indexing code also does this (so only ids generated\n // using the 'standard' rules will be in the index)\n return node.attrs.id === id || pandocAutoIdentifier(node.textContent, false) === id;\n },\n };\n}\n\nfunction thereomLocator(engine: string) {\n return {\n nodeTypes: ['rmd_chunk'],\n hasXRef: (node: ProsemirrorNode, id: string) => {\n // look for conventional engine/label\n if (rmdChunkHasXRef(node, engine, id)) {\n return true;\n } else {\n // look for explicit label= syntax\n const match = node.textContent.match(/^\\{([a-zA-Z0-9_]+)[\\s,]+label\\s*=\\s*['\"]([^\"']+)['\"].*\\}/);\n return !!match && match[1].localeCompare(engine, undefined, { sensitivity: 'accent' }) === 0 && match[2] === id;\n }\n },\n };\n}\n","/*\n * pandoc_id.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\n// emulate pandoc behavior (https://pandoc.org/MANUAL.html#headings-and-sections)\nexport function pandocAutoIdentifier(text: string, asciify: boolean) {\n if (asciify) {\n text = pandocAsciify(text);\n }\n\n return (\n text\n // Remove all non-alphanumeric characters, except underscores, hyphens, and periods.\n .replace(/[!\"#$%&')*+,\\/:;<=>?@\\[\\\\\\]^`{|}~]/g, '') // filterPunct\n\n // Replace all spaces with hyphens\n .replace(/\\s/g, '-')\n\n // Convert all alphabetic characters to lowercase\n .toLowerCase()\n\n // Remove everything up to the first letter\n .replace(/^[^A-Za-z]+/, '')\n );\n}\n\n// emulate github behavior (note that unemoji should be done prior to calling this)\n// https://pandoc.org/MANUAL.html#extension-gfm_auto_identifiers\n// https://github.com/jgm/pandoc/blob/83880b0dbc318703babfbb6905b1046fa48f1216/src/Text/Pandoc/Shared.hs#L539\nexport function gfmAutoIdentifier(text: string, asciify: boolean) {\n if (asciify) {\n text = pandocAsciify(text);\n }\n\n return text\n .replace(/[!\"#$%&')*+,\\.\\/:;<=>?@\\[\\\\\\]^`{|}~]/g, '') // filterPunct (all but underscore and hyphen)\n .replace(/\\s/g, '-') // spaceToDash\n .toLowerCase(); // toLower\n}\n\n// https://github.com/jgm/pandoc/blob/a5fa55969f1b4afc0ca3e38be50b69c65d43a460/src/Text/Pandoc/Asciify.hs\nexport function pandocAsciify(text: string) {\n const chars: number[] = [];\n const len = text.length;\n let newch;\n for (let i = 0; i < len; i++) {\n newch = '';\n const ch = text.charCodeAt(i);\n switch (ch) {\n case 192:\n case 193:\n case 194:\n case 195:\n case 196:\n case 197:\n case 256:\n case 258:\n case 260:\n case 461:\n case 512:\n case 514:\n case 550:\n case 7680:\n case 7840:\n case 7842:\n newch = 'A';\n break;\n\n case 7682:\n case 7684:\n case 7686:\n newch = 'B';\n break;\n\n case 199:\n case 262:\n case 264:\n case 266:\n case 268:\n newch = 'C';\n break;\n\n case 270:\n case 7690:\n case 7692:\n case 7694:\n case 7696:\n case 7698:\n newch = 'D';\n break;\n\n case 200:\n case 201:\n case 203:\n case 274:\n case 276:\n case 278:\n case 280:\n case 282:\n case 516:\n case 518:\n case 552:\n case 7704:\n case 7706:\n case 7864:\n case 7866:\n case 7868:\n newch = 'E';\n break;\n\n case 7710:\n newch = 'F';\n break;\n\n case 284:\n case 286:\n case 288:\n case 290:\n case 486:\n case 500:\n case 7712:\n newch = 'G';\n break;\n\n case 292:\n case 542:\n case 7714:\n case 7716:\n case 7718:\n case 7720:\n case 7722:\n newch = 'H';\n break;\n\n case 204:\n case 205:\n case 206:\n case 207:\n case 296:\n case 298:\n case 300:\n case 302:\n case 304:\n case 463:\n case 520:\n case 522:\n case 7724:\n case 7880:\n case 7882:\n newch = 'I';\n break;\n\n case 308:\n newch = 'J';\n break;\n\n case 310:\n case 488:\n case 7728:\n case 7730:\n case 7732:\n case 8490:\n newch = 'K';\n break;\n\n case 313:\n case 315:\n case 317:\n case 7734:\n case 7738:\n case 7740:\n newch = 'L';\n break;\n\n case 7742:\n case 7744:\n case 7746:\n newch = 'M';\n break;\n\n case 209:\n case 323:\n case 325:\n case 327:\n case 504:\n case 7748:\n case 7750:\n case 7752:\n case 7754:\n newch = 'N';\n break;\n\n case 210:\n case 211:\n case 212:\n case 213:\n case 214:\n case 332:\n case 334:\n case 336:\n case 416:\n case 465:\n case 490:\n case 524:\n case 526:\n case 558:\n case 7884:\n case 7886:\n newch = 'O';\n break;\n\n case 7764:\n case 7766:\n newch = 'P';\n break;\n\n case 340:\n case 342:\n case 344:\n case 528:\n case 530:\n case 7768:\n case 7770:\n case 7774:\n newch = 'R';\n break;\n\n case 346:\n case 348:\n case 350:\n case 352:\n case 536:\n case 7776:\n case 7778:\n newch = 'S';\n break;\n\n case 354:\n case 356:\n case 538:\n case 7786:\n case 7788:\n case 7790:\n case 7792:\n newch = 'T';\n break;\n\n case 217:\n case 218:\n case 219:\n case 220:\n case 360:\n case 362:\n case 364:\n case 366:\n case 368:\n case 370:\n case 431:\n case 467:\n case 532:\n case 534:\n case 7794:\n case 7796:\n case 7798:\n case 7908:\n case 7910:\n newch = 'U';\n break;\n\n case 7804:\n case 7806:\n newch = 'V';\n break;\n\n case 372:\n case 7808:\n case 7810:\n case 7812:\n case 7814:\n case 7816:\n newch = 'W';\n break;\n\n case 7818:\n case 7820:\n newch = 'X';\n break;\n\n case 221:\n case 374:\n case 376:\n case 562:\n case 7822:\n case 7922:\n case 7924:\n case 7926:\n case 7928:\n newch = 'Y';\n break;\n\n case 377:\n case 379:\n case 381:\n case 7824:\n case 7826:\n case 7828:\n newch = 'Z';\n break;\n\n case 224:\n case 225:\n case 226:\n case 227:\n case 228:\n case 229:\n case 257:\n case 259:\n case 261:\n case 462:\n case 513:\n case 515:\n case 551:\n case 553:\n case 7681:\n case 7841:\n case 7843:\n newch = 'a';\n break;\n\n case 7683:\n case 7685:\n case 7687:\n newch = 'b';\n break;\n\n case 231:\n case 263:\n case 265:\n case 267:\n case 269:\n newch = 'c';\n break;\n\n case 271:\n case 7691:\n case 7693:\n case 7695:\n case 7697:\n case 7699:\n newch = 'd';\n break;\n\n case 232:\n case 233:\n case 234:\n case 235:\n case 275:\n case 277:\n case 279:\n case 281:\n case 283:\n case 517:\n case 519:\n case 7705:\n case 7707:\n case 7865:\n case 7867:\n case 7869:\n newch = 'e';\n break;\n\n case 7711:\n newch = 'f';\n break;\n\n case 285:\n case 287:\n case 289:\n case 291:\n case 487:\n case 501:\n case 7713:\n newch = 'g';\n break;\n\n case 293:\n case 543:\n case 7715:\n case 7717:\n case 7719:\n case 7721:\n case 7723:\n case 7830:\n newch = 'h';\n break;\n\n case 236:\n case 237:\n case 238:\n case 239:\n case 297:\n case 299:\n case 301:\n case 303:\n case 305:\n case 464:\n case 521:\n case 523:\n case 7725:\n case 7881:\n case 7883:\n newch = 'i';\n break;\n\n case 309:\n case 496:\n newch = 'j';\n break;\n\n case 311:\n case 489:\n case 7729:\n case 7731:\n case 7733:\n newch = 'k';\n break;\n\n case 314:\n case 316:\n case 318:\n case 7735:\n case 7739:\n case 7741:\n newch = 'l';\n break;\n\n case 7743:\n case 7745:\n case 7747:\n newch = 'm';\n break;\n\n case 241:\n case 324:\n case 326:\n case 328:\n case 505:\n case 7749:\n case 7751:\n case 7753:\n case 7755:\n newch = 'n';\n break;\n\n case 242:\n case 243:\n case 244:\n case 245:\n case 246:\n case 333:\n case 335:\n case 337:\n case 417:\n case 432:\n case 466:\n case 491:\n case 525:\n case 527:\n case 559:\n case 7885:\n case 7887:\n newch = 'o';\n break;\n\n case 7765:\n case 7767:\n newch = 'p';\n break;\n\n case 341:\n case 343:\n case 345:\n case 529:\n case 531:\n case 7769:\n case 7771:\n case 7775:\n newch = 'r';\n break;\n\n case 347:\n case 349:\n case 351:\n case 353:\n case 537:\n case 7777:\n case 7779:\n newch = 's';\n break;\n\n case 355:\n case 357:\n case 539:\n case 7787:\n case 7789:\n case 7791:\n case 7793:\n case 7831:\n newch = 't';\n break;\n\n case 249:\n case 250:\n case 251:\n case 252:\n case 361:\n case 363:\n case 365:\n case 367:\n case 369:\n case 371:\n case 468:\n case 533:\n case 535:\n case 7795:\n case 7797:\n case 7799:\n case 7909:\n case 7911:\n newch = 'u';\n break;\n\n case 7805:\n case 7807:\n newch = 'v';\n break;\n\n case 373:\n case 7809:\n case 7811:\n case 7813:\n case 7815:\n case 7817:\n case 7832:\n newch = 'w';\n break;\n\n case 7819:\n case 7821:\n newch = 'x';\n break;\n\n case 253:\n case 255:\n case 375:\n case 563:\n case 7833:\n case 7923:\n case 7925:\n case 7927:\n case 7929:\n newch = 'y';\n break;\n\n case 378:\n case 380:\n case 382:\n case 7825:\n case 7827:\n case 7829:\n newch = 'z';\n break;\n\n case 894:\n newch = ';';\n break;\n\n case 8175:\n newch = '`';\n break;\n\n case 8800:\n newch = '=';\n break;\n\n case 8814:\n newch = '<';\n break;\n\n case 8815:\n newch = '>';\n break;\n }\n if (newch) {\n chars.push(newch.charCodeAt(0));\n } else {\n chars.push(ch);\n }\n }\n\n // return string\n return String.fromCharCode(...chars);\n}\n","/*\n * raw.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { Schema } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\n\nimport { findParentNodeOfType, setTextSelection } from 'prosemirror-utils';\n\nimport { EditorUI } from './ui';\nimport { setBlockType } from 'prosemirror-commands';\n\nexport const kTexFormat = 'tex';\nexport const kHTMLFormat = 'html';\nexport const kHTML4Format = 'html4';\nexport const kHTML5Format = 'html5';\n\nexport function isRawHTMLFormat(format: string) {\n return [kHTMLFormat, kHTML4Format, kHTML5Format].includes(format);\n}\n\nexport function editRawBlockCommand(ui: EditorUI, outputFormats: string[]) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const schema = state.schema;\n\n // enable if we are either inside a raw block or we can insert a raw block\n const rawBlock = findParentNodeOfType(schema.nodes.raw_block)(state.selection);\n\n if (!rawBlock && !setBlockType(schema.nodes.raw_block, { format: 'html' })(state)) {\n return false;\n }\n\n async function asyncEditRawBlock() {\n if (dispatch) {\n // get existing attributes (if any)\n const raw = {\n format: '',\n content: '',\n };\n if (rawBlock) {\n raw.format = rawBlock.node.attrs.format;\n }\n\n // show dialog\n const result = await ui.dialogs.editRawBlock(raw, outputFormats);\n if (result) {\n const tr = state.tr;\n\n // remove means convert the block to text\n if (rawBlock) {\n const range = { from: rawBlock.pos, to: rawBlock.pos + rawBlock.node.nodeSize };\n if (result.action === 'remove') {\n tr.setBlockType(range.from, range.to, schema.nodes.paragraph);\n } else if (result.action === 'edit') {\n tr.setNodeMarkup(range.from, rawBlock.node.type, { format: result.raw.format });\n setTextSelection(tr.selection.from - 1, -1)(tr);\n }\n } else {\n insertRawNode(tr, result.raw.format);\n }\n\n dispatch(tr);\n }\n }\n\n if (view) {\n view.focus();\n }\n }\n asyncEditRawBlock();\n\n return true;\n };\n}\n\n// function to create a raw node\nfunction createRawNode(schema: Schema, format: string) {\n return schema.nodes.raw_block.create({ format })!;\n}\n\n// function to create and insert a raw node, then set selection inside of it\nfunction insertRawNode(tr: Transaction, format: string) {\n const schema = tr.doc.type.schema;\n const prevSel = tr.selection;\n tr.replaceSelectionWith(createRawNode(schema, format), false);\n setTextSelection(tr.mapping.map(prevSel.from), -1)(tr);\n}\n","/*\n * image.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { kPixelUnit, kPercentUnit } from './css';\n\nconst kDpi = 96;\n\n// https://github.com/jgm/pandoc/blob/master/src/Text/Pandoc/ImageSize.hs\nexport const kValidUnits = [kPixelUnit, 'in', 'cm', 'mm', kPercentUnit];\n\nexport enum ImageType {\n Image,\n Figure,\n}\n\nexport interface ImageDimensions {\n naturalWidth: number | null;\n naturalHeight: number | null;\n containerWidth: number;\n}\n\nexport function isValidImageSizeUnit(unit: string) {\n return kValidUnits.includes(unit);\n}\n\nexport function imageSizePropWithUnit(prop: string | null) {\n if (prop) {\n const match = prop.match(/(^\\d*\\.?\\d*)(.*)$/);\n if (match) {\n return {\n size: parseFloat(match[1]),\n unit: match[2],\n };\n } else {\n return null;\n }\n } else {\n return null;\n }\n}\n\nexport function isNaturalAspectRatio(width: number, height: number, dims: ImageDimensions, defaultValue: boolean) {\n if (dims.naturalWidth && dims.naturalHeight) {\n const diff = Math.abs(width / height - dims.naturalWidth / dims.naturalHeight);\n return diff <= 0.01 * (width / height);\n } else {\n // no naturalWidth or naturalHeight, return default\n return defaultValue;\n }\n}\n\nexport function unitToPixels(value: number, unit: string, containerWidth: number) {\n let pixels;\n switch (unit) {\n case 'in':\n pixels = value * kDpi;\n break;\n case 'mm':\n pixels = value * (kDpi / 25.4);\n break;\n case 'cm':\n pixels = value * (kDpi / 2.54);\n break;\n case kPercentUnit:\n pixels = (value / 100) * ensureContainerWidth(containerWidth);\n break;\n case kPixelUnit:\n default:\n pixels = value;\n break;\n }\n return Math.round(pixels);\n}\n\nexport function pixelsToUnit(pixels: number, unit: string, containerWidth: number) {\n switch (unit) {\n case 'in':\n return pixels / kDpi;\n case 'mm':\n return (pixels / kDpi) * 25.4;\n case 'cm':\n return (pixels / kDpi) * 2.54;\n case kPercentUnit:\n return (pixels / ensureContainerWidth(containerWidth)) * 100;\n case kPixelUnit:\n default:\n return pixels;\n }\n}\n\nexport function roundUnit(value: number, unit: string) {\n switch (unit) {\n case 'in':\n return value.toFixed(2);\n case 'cm':\n return value.toFixed(1);\n default:\n return Math.round(value).toString();\n }\n}\n\n// sometime when we are called before the DOM renders the containerWidth\n// is 0, in this case provide a default of 1000\nexport function ensureContainerWidth(containerWidth: number) {\n return containerWidth || 1000;\n}\n","/*\n * extension.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Transaction } from 'prosemirror-state';\n\nexport enum FixupContext {\n Load,\n Save,\n Resize,\n}\n\nexport type FixupFn = (tr: Transaction, fixupContext: FixupContext) => Transaction;\n","/*\n * css.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { kWidthAttrib, kHeightAttrib, kStyleAttrib } from './pandoc_attr';\n\nexport const kPercentUnit = '%';\nexport const kPixelUnit = 'px';\nexport function removeStyleAttrib(style: string, attrib: string, handler?: (attrib: string, value: string) => void) {\n const pattern = '(' + attrib + ')\\\\:\\\\s*([^;]+);?';\n const regex = new RegExp(pattern, 'g');\n return style.replace(regex, (_match, p1, p2) => {\n if (handler) {\n handler(p1, p2);\n }\n return '';\n });\n}\n\nexport function extractSizeStyles(keyvalues: Array<[string, string]> | undefined) {\n if (!keyvalues) {\n return keyvalues;\n }\n\n let newKeyvalues = keyvalues;\n\n const getValue = (key: string) => {\n const pair = newKeyvalues.find(keyvalue => keyvalue[0] === key);\n return pair ? pair[1] : null;\n };\n\n const setValue = (key: string, value: string | null) => {\n newKeyvalues = newKeyvalues.filter(keyvalue => keyvalue[0] !== key);\n if (value) {\n newKeyvalues.push([key, value]);\n }\n };\n\n let width = getValue(kWidthAttrib);\n let height = getValue(kHeightAttrib);\n let style = getValue(kStyleAttrib);\n\n if (style) {\n style = removeStyleAttrib(style, kWidthAttrib, (_attrib, value) => {\n if (!width) {\n width = value;\n }\n });\n style = removeStyleAttrib(style, kHeightAttrib, (_attrib, value) => {\n if (!height) {\n height = value;\n }\n });\n\n // remove leading ; from style\n style = style.replace(/^\\s*;+\\s*/, '').trimLeft();\n }\n\n setValue(kWidthAttrib, width);\n setValue(kHeightAttrib, height);\n setValue(kStyleAttrib, style);\n\n return newKeyvalues;\n}\n\nexport function applyStyles(el: HTMLElement, classes?: string[], style?: { [key: string]: string }) {\n if (classes) {\n if (classes) {\n classes.forEach(clz => el.classList.add(clz));\n }\n }\n if (style) {\n Object.keys(style).forEach(name => {\n el.style.setProperty(name, style[name]);\n });\n }\n}\n\nexport function replaceClassWithStyle(el: HTMLElement, className: string, style: { [key: string]: string }) {\n if (el.classList.contains(className)) {\n el.classList.remove(className);\n if (el.classList.length === 0) {\n el.removeAttribute('class');\n }\n\n Object.keys(style).forEach(name => {\n el.style.setProperty(name, style[name]);\n });\n }\n const children: any = el.children;\n for (const child of children) {\n replaceClassWithStyle(child, className, style);\n }\n}\n","/*\n * diff.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { diff_match_patch, DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT } from 'diff-match-patch';\n\nexport enum EditorChangeType {\n Insert = 1,\n Equal = 0,\n Delete = -1,\n}\n\nexport interface EditorChange {\n type: EditorChangeType;\n value: string;\n}\n\nexport function diffChars(from: string, to: string, timeout: number): EditorChange[] {\n const dmp = new diff_match_patch();\n dmp.Diff_Timeout = timeout;\n const diff = dmp.diff_main(from, to);\n dmp.diff_cleanupSemantic(diff);\n return diff.map(d => {\n let type: EditorChangeType;\n switch (d[0]) {\n case DIFF_INSERT:\n type = EditorChangeType.Insert;\n break;\n case DIFF_EQUAL:\n type = EditorChangeType.Equal;\n break;\n case DIFF_DELETE:\n type = EditorChangeType.Delete;\n break;\n default:\n throw new Error('Unexpected diff type: ' + d[0]);\n }\n return {\n type,\n value: d[1],\n };\n });\n}\n","/*\n * input_rule.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { Schema, MarkType, NodeType, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { InputRule, wrappingInputRule } from 'prosemirror-inputrules';\n\nimport { PandocMark, markIsActive } from './mark';\n\nexport function markInputRule(\n regexp: RegExp,\n markType: MarkType,\n filter: MarkInputRuleFilter,\n getAttrs?: ((match: string[]) => object) | object,\n) {\n return new InputRule(regexp, (state: EditorState, match: string[], start: number, end: number) => {\n if (!filter(state, start, end)) {\n return null;\n }\n\n const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n const tr = state.tr;\n if (match[1]) {\n const textStart = start + match[0].indexOf(match[1]);\n const textEnd = textStart + match[1].length;\n if (textEnd < end) {\n tr.delete(textEnd, end);\n }\n if (textStart > start) {\n tr.delete(start, textStart);\n }\n end = start + match[1].length;\n }\n const mark = markType.create(attrs);\n tr.addMark(start, end, mark);\n tr.removeStoredMark(mark); // Do not continue with mark.\n return tr;\n });\n}\n\nexport function delimiterMarkInputRule(\n delim: string,\n markType: MarkType,\n filter: MarkInputRuleFilter,\n prefixMask?: string,\n noEnclosingWhitespace?: boolean,\n) {\n // create distinct patterns depending on whether we allow enclosing whitespace\n const contentPattern = noEnclosingWhitespace\n ? `[^\\\\s${delim}][^${delim}]+[^\\\\s${delim}]|[^\\\\s${delim}]{1,2}`\n : `[^${delim}]+`;\n\n // if there is no prefix mask then this is simple regex we can pass to markInputRule\n if (!prefixMask) {\n const regexp = `(?:${delim})(${contentPattern})(?:${delim})$`;\n return markInputRule(new RegExp(regexp), markType, filter);\n\n // otherwise we need custom logic to get mark placement/eliding right\n } else {\n // build regex\n const regexp = `(^|[^${prefixMask}])(?:${delim})(${contentPattern})(?:${delim})$`;\n\n // return rule\n return new InputRule(new RegExp(regexp), (state: EditorState, match: string[], start: number, end: number) => {\n if (!filter(state, start, end)) {\n return null;\n }\n\n // init transaction\n const tr = state.tr;\n\n // compute offset for mask (should be zero if this was the beginning of a line,\n // in all other cases it would be the length of the any mask found).\n const maskOffset = match[1].length;\n\n // position of text to be formatted\n const textStart = start + match[0].indexOf(match[2]);\n const textEnd = textStart + match[2].length;\n\n // remove trailing markdown\n tr.delete(textEnd, end);\n\n // update start/end to reflect the leading mask which we want to leave alone\n start = start + maskOffset;\n end = start + match[2].length;\n\n // remove leading markdown\n tr.delete(start, textStart);\n\n // add mark\n const mark = markType.create();\n tr.addMark(start, end, mark);\n\n // remove stored mark so typing continues w/o the mark\n tr.removeStoredMark(mark);\n\n // return transaction\n return tr;\n });\n }\n}\n\nexport type MarkInputRuleFilter = (context: EditorState | Transaction, from?: number, to?: number) => boolean;\n\nexport function markInputRuleFilter(schema: Schema, marks: readonly PandocMark[]): MarkInputRuleFilter {\n const maskedMarkTypes = marksWithNoInputRules(schema, marks);\n\n return (context: EditorState | Transaction, from?: number, to?: number) => {\n if (from !== undefined && to !== undefined && from !== to) {\n const marksInRange: MarkType[] = [];\n context.doc.nodesBetween(from, to, node => {\n node.marks.forEach(mark => marksInRange.push(mark.type));\n });\n return !marksInRange.some(markType => maskedMarkTypes.includes(markType));\n }\n if (from === undefined) {\n for (const markType of maskedMarkTypes) {\n if (markIsActive(context, markType)) {\n return false;\n }\n }\n }\n return true;\n };\n}\n\nexport function conditionalWrappingInputRule(\n regexp: RegExp,\n nodeType: NodeType,\n predicate: (state: EditorState) => boolean,\n getAttrs?: { [key: string]: any } | ((p: string[]) => { [key: string]: any } | null | undefined),\n joinPredicate?: (p1: string[], p2: ProsemirrorNode) => boolean,\n): InputRule {\n const wrappingRule: any = wrappingInputRule(regexp, nodeType, getAttrs, joinPredicate);\n return new InputRule(regexp, (state: EditorState, match: string[], start: number, end: number) => {\n if (!predicate(state)) {\n return null;\n }\n return wrappingRule.handler(state, match, start, end);\n });\n}\n\nfunction marksWithNoInputRules(schema: Schema, marks: readonly PandocMark[]): MarkType[] {\n const disabledMarks: MarkType[] = [];\n marks.forEach((mark: PandocMark) => {\n if (mark.noInputRules) {\n disabledMarks.push(schema.marks[mark.name]);\n }\n });\n return disabledMarks;\n}\n","/*\n * wrap.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Transaction } from 'prosemirror-state';\nimport { Transform } from 'prosemirror-transform';\n\nimport { split } from 'sentence-splitter';\n\nimport { trTransform } from './transaction';\nimport { findChildrenByType, findParentNodeOfTypeClosestToPos } from 'prosemirror-utils';\n\nexport function wrapSentences(tr: Transaction) {\n trTransform(tr, wrapSentencesTransform);\n}\n\nfunction wrapSentencesTransform(tr: Transform) {\n // find all paragraphs in doc\n const schema = tr.doc.type.schema;\n const paragraphs = findChildrenByType(tr.doc, schema.nodes.paragraph);\n\n // insert linebreaks in paragraphs (go backwards to preserve positions)\n paragraphs.reverse().forEach(paragraph => {\n // don't break sentences inside tight list items\n const $pos = tr.doc.resolve(paragraph.pos);\n const parent = $pos.node($pos.depth);\n if (parent.type === schema.nodes.list_item && $pos.node($pos.depth - 1).attrs.tight) {\n return;\n }\n\n // don't break sentences inside tables\n if (schema.nodes.table && findParentNodeOfTypeClosestToPos($pos, schema.nodes.table)) {\n return;\n }\n\n // don't break bookdown text references\n const textContent = paragraph.node.textContent;\n if (/^\\(ref\\:[^\\s]+\\)\\s+[^\\s]/.test(textContent)) {\n return;\n }\n\n // break sentences in text\n const parts = split(textContent);\n parts\n .reverse()\n .filter(part => part.type === 'Sentence')\n .forEach(sentence => {\n // don't break sentence if at least one mark is active\n if (tr.doc.resolve(paragraph.pos + sentence.range[1] + 1).marks().length === 0) {\n const hardBreak = schema.text('\\n');\n const hardBreakPos = paragraph.pos + sentence.range[1] + 2;\n tr.insert(hardBreakPos, hardBreak);\n }\n });\n });\n}\n","/*\n * yaml_metadata-title.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Plugin, PluginKey, Transaction, EditorState } from 'prosemirror-state';\n\nimport { transactionsAreTypingChange, transactionsHaveChange } from '../../api/transaction';\nimport {\n isYamlMetadataNode,\n yamlMetadataNodes,\n kYamlMetadataTitleRegex,\n titleFromYamlMetadataNode,\n} from '../../api/yaml';\n\nconst plugin = new PluginKey('yaml-metadata-title');\n\nexport function yamlMetadataTitlePlugin() {\n return new Plugin({\n key: plugin,\n state: {\n init(_config, state: EditorState) {\n return titleFromState(state);\n },\n\n apply(tr: Transaction, title: string, oldState: EditorState, newState: EditorState) {\n const transactions = [tr];\n\n // doc didn't change, return existing title\n if (!tr.docChanged) {\n return title;\n\n // non-typing change, do a full rescan\n } else if (!transactionsAreTypingChange(transactions)) {\n return titleFromState(newState);\n\n // change that affects a yaml metadata block, do a full rescan\n } else if (transactionsHaveChange(transactions, oldState, newState, isYamlMetadataNode)) {\n return titleFromState(newState);\n }\n\n // otherwise return the existing title\n else {\n return title;\n }\n },\n },\n });\n}\n\nexport function getTitle(state: EditorState) {\n return plugin.getState(state);\n}\n\nexport function setTitle(state: EditorState, title: string) {\n // alias schema\n const schema = state.schema;\n\n // no-op if yaml_metadata isn't available\n if (!schema.nodes.yaml_metadata) {\n return;\n }\n\n // create transaction\n const tr = state.tr;\n\n // escape quotes in title then build the title line\n const escapedTitle = title.replace(/\"/g, `\\\\\"`);\n const titleLine = `\\ntitle: \"${escapedTitle}\"\\n`;\n\n // attempt to update existing title\n const yamlNodes = yamlMetadataNodes(tr.doc);\n let foundTitle = false;\n for (const yaml of yamlNodes) {\n const titleMatch = yaml.node.textContent.match(kYamlMetadataTitleRegex);\n if (titleMatch) {\n const updatedMetadata = yaml.node.textContent.replace(kYamlMetadataTitleRegex, titleLine);\n const updatedNode = schema.nodes.yaml_metadata.createAndFill({}, schema.text(updatedMetadata));\n tr.replaceRangeWith(yaml.pos, yaml.pos + yaml.node.nodeSize, updatedNode);\n foundTitle = true;\n break;\n }\n }\n\n // if we didn't find a title then inject one at the top\n if (!foundTitle) {\n const yamlText = schema.text(`---${titleLine}---`);\n const yamlNode = schema.nodes.yaml_metadata.create({}, yamlText);\n tr.insert(1, yamlNode);\n }\n\n // return transaction\n return tr;\n}\n\nfunction titleFromState(state: EditorState) {\n const yamlNodes = yamlMetadataNodes(state.doc);\n for (const yaml of yamlNodes) {\n const title = titleFromYamlMetadataNode(yaml.node);\n if (title) {\n return title;\n }\n }\n return '';\n}\n","/*\n * oultine.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Plugin, PluginKey, EditorState, Transaction } from 'prosemirror-state';\nimport { Schema, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\n\nimport { NodeWithPos } from 'prosemirror-utils';\n\nimport { Extension } from '../api/extension';\nimport { transactionsHaveChange, kSetMarkdownTransaction } from '../api/transaction';\nimport { findTopLevelBodyNodes } from '../api/node';\nimport { uuidv4 } from '../api/util';\nimport {\n EditorOutlineItem,\n EditorOutlineItemType,\n EditorOutline,\n isOutlineNode,\n getEditingOutlineLocation,\n getDocumentOutline,\n} from '../api/outline';\nimport { navigateToPos } from '../api/navigation';\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\nimport { rmdChunkEngineAndLabel } from '../api/rmd';\n\nconst kOutlineIdsTransaction = 'OutlineIds';\n\nconst plugin = new PluginKey('outline');\n\nconst extension: Extension = {\n appendTransaction: (schema: Schema) => {\n return [\n {\n name: 'outline',\n filter: hasOutlineIdsTransaction,\n nodeFilter: isOutlineNode,\n append: (tr: Transaction) => {\n const usedIds = new Set();\n const needsOutlineId = (node: ProsemirrorNode) => {\n if (isOutlineNode(node)) {\n if (node.attrs.navigation_id === null) {\n return true;\n } else if (usedIds.has(node.attrs.navigation_id)) {\n return true;\n } else {\n usedIds.add(node.attrs.navigation_id);\n return false;\n }\n } else {\n return false;\n }\n };\n const needsOutlineIdNodes = findTopLevelBodyNodes(tr.doc, needsOutlineId);\n needsOutlineIdNodes.forEach(outlineId => {\n tr.setNodeMarkup(outlineId.pos, outlineId.node.type, {\n ...outlineId.node.attrs,\n navigation_id: uuidv4(),\n });\n tr.setMeta(kOutlineIdsTransaction, true);\n });\n },\n },\n ];\n },\n\n commands: () => {\n return [\n new ProsemirrorCommand(EditorCommandId.GoToNextSection, ['Mod-PageDown'], goToOutlineCommand('next', 'section')),\n new ProsemirrorCommand(EditorCommandId.GoToPreviousSection, ['Mod-PageUp'], goToOutlineCommand('previous', 'section')),\n new ProsemirrorCommand(EditorCommandId.GoToNextChunk, [], goToOutlineCommand('next', 'chunk')),\n new ProsemirrorCommand(EditorCommandId.GoToPreviousChunk, [], goToOutlineCommand('previous', 'chunk')),\n ];\n },\n\n plugins: (schema: Schema) => {\n return [\n new Plugin({\n key: plugin,\n\n // track editor outline as state changes\n state: {\n init: (_config, state: EditorState) => {\n return editorOutline(state);\n },\n apply: (tr: Transaction, value: EditorOutline, oldState: EditorState, newState: EditorState) => {\n if (transactionsAffectOutline([tr], oldState, newState)) {\n return editorOutline(newState);\n } else {\n return value; // don't need to map b/c there are no positions in the data structure\n }\n },\n },\n }),\n ];\n },\n};\n\nexport function goToOutlineCommand(dir: 'next' | 'previous', targetType: 'chunk' | 'section') {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n if (dispatch && view) {\n let outline = getDocumentOutline(state);\n if (dir === 'previous') {\n outline = outline.reverse();\n }\n const target = outline.find(nodeWithPos => {\n // if we are only targeting chunks, do not navigate to other types, and vice versa\n let isChunk = nodeWithPos.node.type === state.schema.nodes.rmd_chunk;\n if (isChunk !== (targetType === 'chunk')) {\n return false;\n }\n\n if (dir === 'next') {\n return nodeWithPos.pos > state.selection.head;\n } else {\n return nodeWithPos.pos < state.selection.head - 1;\n }\n });\n if (target) {\n navigateToPos(view, target.pos, false);\n }\n }\n return true;\n };\n}\n\nfunction editorOutline(state: EditorState): EditorOutline {\n // get all of the headings (bail if there are none)\n const doc = state.doc;\n const outlineNodes = findTopLevelBodyNodes(doc, isOutlineNode);\n if (!outlineNodes.length) {\n return [];\n }\n\n // create mapping of node type names to their current sequence\n const sequence = new Map();\n\n // function to create an outline item from a node\n const editorOutlineItem = (nodeWithPos: NodeWithPos, defaultLevel: number) => {\n const typename = nodeWithPos.node.type.name;\n\n // build sequence (ordinal of entry within node type)\n let sequenceLast = sequence.get(typename);\n if (sequenceLast === undefined) {\n sequenceLast = 0;\n }\n const sequenceNext = sequenceLast + 1;\n sequence.set(typename, sequenceNext);\n\n const item = {\n navigation_id: nodeWithPos.node.attrs.navigation_id,\n type: nodeWithPos.node.type.name as EditorOutlineItemType,\n level: nodeWithPos.node.attrs.level || defaultLevel,\n title: nodeWithPos.node.type.spec.code ? nodeWithPos.node.type.name : nodeWithPos.node.textContent,\n sequence: sequenceNext,\n children: [],\n };\n \n // if this is an R Markdown chunk, extract the title from the chunk\n if (nodeWithPos.node.type.name === 'rmd_chunk') {\n const chunk = rmdChunkEngineAndLabel(nodeWithPos.node.textContent);\n if (chunk) {\n item.title = chunk.label;\n }\n }\n return item; \n };\n\n // extract the outline\n const rootOutlineItem: EditorOutlineItem = {\n navigation_id: '',\n type: '' as EditorOutlineItemType,\n level: 0,\n sequence: 0,\n title: '',\n children: [],\n };\n const containers: EditorOutlineItem[] = [];\n containers.push(rootOutlineItem);\n const top = () => containers[containers.length - 1];\n outlineNodes.forEach(nodeWithPos => {\n // get outline item from document node\n const outlineItem = editorOutlineItem(nodeWithPos, top().level + 1);\n\n // pop containers until we reach <= our level\n while (outlineItem.level <= top().level) {\n containers.pop();\n }\n\n // add the outline node\n top().children.push(outlineItem);\n\n // make it the the active container if it's a heading\n if (outlineItem.type === 'heading') {\n containers.push(outlineItem);\n }\n });\n\n // return children of root\n return rootOutlineItem.children;\n}\n\nfunction hasOutlineIdsTransaction(transactions: Transaction[]) {\n return transactions.some(tr => tr.getMeta(kOutlineIdsTransaction));\n}\n\nfunction transactionsAffectOutline(transactions: Transaction[], oldState: EditorState, newState: EditorState) {\n return (\n transactions.some(tr => tr.getMeta(kSetMarkdownTransaction)) ||\n hasOutlineIdsTransaction(transactions) ||\n transactionsHaveChange(transactions, oldState, newState, isOutlineNode)\n );\n}\n\nexport function getOutline(state: EditorState): EditorOutline {\n return plugin.getState(state)!;\n}\n\nexport default extension;\n","/*\n * find.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Extension } from '../api/extension';\nimport { Plugin, PluginKey, EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { DecorationSet, Decoration, EditorView } from 'prosemirror-view';\n\nimport { mergedTextNodes } from '../api/text';\nimport { kAddToHistoryTransaction } from '../api/transaction';\nimport { editingRootNode } from '../api/node';\nimport zenscroll from 'zenscroll';\n\nconst key = new PluginKey('find-plugin');\n\nclass FindPlugin extends Plugin {\n private term: string = '';\n private options: FindOptions = {};\n private updating: boolean = false;\n\n // The HTML element containing the last known selected search result\n private resultElement: HTMLElement|null = null;\n\n // A DOM mutation observer that watches for search results to be rendered\n private resultObserver: MutationObserver|null = null;\n\n // The ID for a timer that ensures the resultObserver completes quickly\n private resultObserverTimer: number = 0;\n\n constructor() {\n super({\n key,\n state: {\n init: (_config: { [key: string]: any }, instance: EditorState) => {\n return DecorationSet.empty;\n },\n apply: (tr: Transaction, old: DecorationSet, oldState: EditorState, newState: EditorState) => {\n if (this.updating) {\n return this.resultDecorations(tr);\n } else {\n return DecorationSet.empty;\n }\n },\n },\n view: () => ({\n update: (view: EditorView, prevState: EditorState) => {\n // Clear any previous search result observer\n this.clearResultObserver();\n\n // If there is a search result selected, navigate to it\n if (this.isResultSelected(view.state)) {\n this.scrollToSelectedResult(view, null);\n }\n },\n }),\n props: {\n decorations: (state: EditorState) => {\n return key.getState(state);\n },\n },\n });\n }\n\n public find(term: string, options: FindOptions) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (dispatch) {\n this.term = !options.regex ? term.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, (escape: string) => {\n return '\\\\u' + ('0000' + escape.charCodeAt(0).toString(16)).slice(-4);\n }) : term;\n this.options = options;\n this.updateResults(state, dispatch);\n }\n return true;\n };\n }\n\n public matchCount(state: EditorState) {\n return key.getState(state)!.find().length;\n }\n\n public selectFirst() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n const decorations: Decoration[] = key.getState(state)!.find(0);\n if (decorations.length === 0) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n this.selectResult(tr, decorations[0]);\n this.withResultUpdates(() => {\n dispatch(tr);\n });\n }\n\n return true;\n };\n }\n\n public selectCurrent() {\n return this.selectNext(false);\n }\n\n public selectNext(afterSelection = true) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n const selectedText = state.doc.textBetween(state.selection.from, state.selection.to);\n const searchFrom = afterSelection\n ? this.matchesTerm(selectedText)\n ? state.selection.to + 1\n : state.selection.to\n : state.selection.from;\n\n const decorationSet = key.getState(state)!;\n let decorations: Decoration[] = decorationSet.find(searchFrom);\n if (decorations.length === 0) {\n // check for wrapping\n if (this.options.wrap) {\n const searchTo = this.matchesTerm(selectedText) ? state.selection.from - 1 : state.selection.from;\n decorations = decorationSet.find(0, searchTo);\n if (decorations.length === 0) {\n return false;\n }\n // no wrapping\n } else {\n return false;\n }\n }\n\n if (dispatch) {\n const tr = state.tr;\n this.selectResult(tr, decorations[0]);\n this.withResultUpdates(() => {\n dispatch(tr);\n });\n }\n return true;\n };\n }\n\n public selectPrevious() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // sort out where we are searching up to\n const selectedText = state.doc.textBetween(state.selection.from, state.selection.to);\n const searchTo = this.matchesTerm(selectedText) ? state.selection.from - 1 : state.selection.from;\n\n // get all decorations up to the current selection\n const decorationSet = key.getState(state)!;\n let decorations: Decoration[] = decorationSet.find(0, searchTo);\n if (decorations.length === 0) {\n // handle wrapping\n if (this.options.wrap) {\n const searchFrom = this.matchesTerm(selectedText) ? state.selection.to + 1 : state.selection.to;\n decorations = decorationSet.find(searchFrom);\n if (decorations.length === 0) {\n return false;\n }\n // no wrapping\n } else {\n return false;\n }\n }\n\n // find the one closest to the beginning of the current selection\n if (dispatch) {\n // now we need to find the decoration with the largest from value\n const decoration = decorations.reduce((lastDecoration, nextDecoration) => {\n if (nextDecoration.from > lastDecoration.from) {\n return nextDecoration;\n } else {\n return lastDecoration;\n }\n });\n\n const tr = state.tr;\n this.selectResult(tr, decoration);\n this.withResultUpdates(() => {\n dispatch(tr);\n });\n }\n return true;\n };\n }\n\n public replace(text: string) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (!this.isResultSelected(state)) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n const selectionMarks = tr.selection.$from.marksAcross(tr.selection.$to);\n tr.replaceSelectionWith(state.schema.text(text, selectionMarks), false);\n this.withResultUpdates(() => {\n dispatch(tr);\n });\n }\n\n return true;\n };\n }\n\n public replaceAll(text: string) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n \n let replaced = 0;\n\n if (!this.hasTerm()) {\n return replaced;\n }\n\n if (dispatch) {\n const tr = state.tr;\n\n const decorationSet = key.getState(state)!;\n\n const decorations: Decoration[] = decorationSet.find(0);\n decorations.forEach(decoration => {\n const from = tr.mapping.map(decoration.from);\n const to = tr.mapping.map(decoration.to);\n tr.insertText(text, from, to);\n replaced += 1;\n });\n this.withResultUpdates(() => {\n dispatch(tr);\n });\n }\n\n return replaced;\n };\n }\n\n public clear() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (dispatch) {\n this.term = '';\n this.options = {};\n this.updateResults(state, dispatch);\n }\n return true;\n };\n }\n\n private updateResults(state: EditorState, dispatch: (tr: Transaction) => void) {\n this.withResultUpdates(() => {\n const tr = state.tr;\n tr.setMeta(kAddToHistoryTransaction, false);\n dispatch(tr);\n });\n }\n\n private resultDecorations(tr: Transaction): DecorationSet {\n // bail if no search term\n if (!this.hasTerm()) {\n return DecorationSet.empty;\n }\n\n // decorations to return\n const decorations: Decoration[] = [];\n\n // merge text nodes\n const textNodes = mergedTextNodes(tr.doc);\n\n textNodes.forEach(textNode => {\n const search = this.findRegEx();\n if (!search) {\n return;\n }\n\n let m;\n // tslint:disable-next-line no-conditional-assignment\n while ((m = search.exec(textNode.text))) {\n if (m[0] === '') {\n break;\n }\n const from = textNode.pos + m.index;\n const to = textNode.pos + m.index + m[0].length;\n const classes = ['pm-find-text'];\n if (from === tr.selection.from && to === tr.selection.to) {\n classes.push('pm-selected-text');\n }\n decorations.push(Decoration.inline(from, to, { class: classes.join(' ') }));\n }\n });\n\n // return as decoration set\n return decorations.length ? DecorationSet.create(tr.doc, decorations) : DecorationSet.empty;\n }\n\n private withResultUpdates(f: () => void) {\n this.updating = true;\n f();\n this.updating = false;\n }\n\n private selectResult(tr: Transaction, decoration: Decoration) {\n const selection = new TextSelection(tr.doc.resolve(decoration.from), tr.doc.resolve(decoration.to));\n return tr.setSelection(selection).scrollIntoView();\n }\n\n private isResultSelected(state: EditorState) {\n if (this.hasTerm()) {\n const selectedText = state.doc.textBetween(state.selection.from, state.selection.to);\n return this.matchesTerm(selectedText);\n } else {\n return false;\n }\n }\n\n /**\n * Watch for a search result to appear in the DOM. When it does, scroll it\n * into view.\n * \n * @param view The current EditorView \n */\n private watchForSelectedResult(view: EditorView) {\n // Clear any previous result observer\n this.clearResultObserver();\n\n // Create a new result observer to watch for results to be rendered\n this.resultObserver = new MutationObserver((records: MutationRecord[], observer: MutationObserver) => {\n let resultElement:HTMLElement|null = null;\n\n // Predicate for testing a node to see if it looks like the active search result\n const isResultNode = (node: Node): boolean => {\n if (node.nodeType !== node.ELEMENT_NODE) {\n return false;\n }\n const ele = node as HTMLElement;\n return ele.classList.contains('pm-find-text') && \n ele.classList.contains('pm-selected-text');\n };\n\n // Examine each mutation record to see if it's the one we're looking for\n records.forEach((mutation) => {\n switch(mutation.type) {\n case 'childList':\n // Case 1: a new search result node was added to the DOM\n mutation.addedNodes.forEach((node) => {\n if (isResultNode(node)) {\n resultElement = node as HTMLElement;\n }\n });\n break;\n case 'attributes':\n // Case 2: an existing node gained a \"class\" attribute and is now an\n // active search result\n if (isResultNode(mutation.target)) {\n resultElement = mutation.target as HTMLElement;\n }\n break;\n }\n });\n\n // If we found a result element, scroll it into view and turn off the DOM\n // observer. (If we didn't find one, it may be an irrelevant DOM mutation,\n // so ignore it.)\n if (resultElement) {\n this.scrollToSelectedResult(view, resultElement);\n this.clearResultObserver();\n }\n });\n\n const editingRoot = editingRootNode(view.state.selection);\n if (editingRoot) {\n const container = view.nodeDOM(editingRoot.pos) as HTMLElement;\n\n // Begin observing the editing surface for DOM mutations\n this.resultObserver.observe(container, {\n subtree: true,\n childList: true,\n attributeFilter: ['class'] // Only interested in changes to the \"class\" attribute\n });\n\n // The search results should appear quickly (we're really just waiting for\n // a render loop). If the observer runs for longer than 1s, just cancel\n // it, as it consumes resources and anything observed is likely to be\n // spurious.\n this.resultObserverTimer = window.setTimeout(() => {\n this.clearResultObserver();\n }, 1000);\n }\n }\n\n /**\n * Cleans all state related to the search result DOM observer\n */\n private clearResultObserver() {\n // Disconnect the result observer if running\n if (this.resultObserver !== null) {\n this.resultObserver.disconnect();\n this.resultObserver = null;\n }\n\n // Remove the result observer timer if running\n if (this.resultObserverTimer !== 0) {\n window.clearTimeout(this.resultObserverTimer);\n this.resultObserverTimer = 0;\n }\n }\n\n /**\n * Scrolls the selected search result into view.\n * \n * @param view The EditorView on which to act\n * @param resultElement The HTML element containing the search result, if known\n */\n private scrollToSelectedResult(view: EditorView, resultElement: HTMLElement|null) {\n const editingRoot = editingRootNode(view.state.selection);\n if (editingRoot) {\n const container = view.nodeDOM(editingRoot.pos) as HTMLElement;\n\n if (resultElement === null) {\n // Attempt to find a result element to scroll to if we weren't given one\n resultElement = container.querySelector(\".pm-find-text.pm-selected-text\");\n }\n\n if (resultElement === null || resultElement === this.resultElement) {\n // If we didn't find a result element, or if we found a stale one\n // (hasn't changed), defer scrolling until it has been rendered. This is\n // most common when the search result is inside an Ace editor chunk,\n // which puts the result in the DOM on a deferred render loop.\n this.watchForSelectedResult(view);\n return;\n } \n\n this.resultElement = resultElement;\n\n // Starting offset for scroll position \n let offset = 100;\n\n // Zenscroll can only scroll to a direct child element of the scroll\n // container, but the element containing the search result may be deeply\n // nested in the container. Walk up the DOM tree, summing the offsets,\n // until we get to an element that's actually a child of the scroll\n // container. \n let scrollElement = resultElement;\n while (scrollElement.offsetParent?.parentElement !== container) {\n offset += scrollElement.offsetTop;\n const nextParent = scrollElement.offsetParent;\n if (nextParent === null) {\n break;\n } \n scrollElement = nextParent as HTMLElement;\n }\n\n // Perform the scroll to the element's container plus its offset inside\n // the container.\n const scroller = zenscroll.createScroller(container);\n scroller.center(scrollElement, 350, offset);\n }\n }\n\n private hasTerm() {\n return this.term.length > 0;\n }\n\n private matchesTerm(text: string) {\n if (this.hasTerm()) {\n const regex = this.findRegEx();\n if (regex) {\n return regex.test(text);\n } else {\n return false;\n }\n } else {\n return false;\n }\n }\n\n private findRegEx() {\n try {\n return new RegExp(this.term, !this.options.caseSensitive ? 'gui' : 'gu');\n } catch {\n return null;\n }\n }\n}\n\nconst extension: Extension = {\n plugins: () => {\n return [new FindPlugin()];\n },\n};\n\nexport interface FindOptions {\n regex?: boolean;\n caseSensitive?: boolean;\n wrap?: boolean;\n}\n\nexport function find(view: EditorView, term: string, options: FindOptions): boolean {\n return findPlugin(view).find(term, options)(view.state, view.dispatch);\n}\n\nexport function matchCount(view: EditorView): number {\n return findPlugin(view).matchCount(view.state);\n}\n\nexport function selectFirst(view: EditorView): boolean {\n return findPlugin(view).selectFirst()(view.state, view.dispatch);\n}\n\nexport function selectCurrent(view: EditorView): boolean {\n return findPlugin(view).selectCurrent()(view.state, view.dispatch);\n}\n\nexport function selectNext(view: EditorView): boolean {\n return findPlugin(view).selectNext()(view.state, view.dispatch);\n}\n\nexport function selectPrevious(view: EditorView): boolean {\n return findPlugin(view).selectPrevious()(view.state, view.dispatch);\n}\n\nexport function replace(view: EditorView, text: string): boolean {\n return findPlugin(view).replace(text)(view.state, view.dispatch);\n}\n\nexport function replaceAll(view: EditorView, text: string) {\n return findPlugin(view).replaceAll(text)(view.state, view.dispatch);\n}\n\nexport function clear(view: EditorView): boolean {\n return findPlugin(view).clear()(view.state, view.dispatch);\n}\n\nexport function findPluginState(state: EditorState): DecorationSet | null | undefined {\n return key.getState(state);\n}\n\nfunction findPlugin(view: EditorView): FindPlugin {\n return key.get(view.state) as FindPlugin;\n}\n\nexport default extension;\n","/*\n * omni_insert.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\nimport { DOMOutputSpecArray, Mark, Fragment } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { PandocOutput } from '../../api/pandoc';\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { selectionAllowsCompletions } from '../../api/completion';\nimport { OmniInserter } from '../../api/omni_insert';\nimport { MarkInputRuleFilter } from '../../api/input_rule';\nimport { EditorUI } from '../../api/ui';\n\nimport { omniInsertCompletionHandler } from './omni_insert-completion';\nimport { Extension } from '../../api/extension';\nimport { markIsActive } from '../../api/mark';\n\nexport function markOmniInsert() {\n return {\n marks: [\n {\n name: 'omni_insert',\n spec: {\n inclusive: true,\n noInputRules: true,\n parseDOM: [{ tag: \"span[class*='omni_insert']\" }],\n toDOM(): DOMOutputSpecArray {\n return ['span', { class: 'omni_insert' }];\n },\n },\n pandoc: {\n readers: [],\n writer: {\n priority: 30,\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\n output.writeInlines(parent);\n },\n },\n },\n },\n ],\n };\n}\n\nexport function omniInsertExtension(\n omniInserters: OmniInserter[],\n inputRuleFilter: MarkInputRuleFilter,\n ui: EditorUI,\n): Extension {\n return {\n commands: () => [new OmniInsertCommand(inputRuleFilter)],\n completionHandlers: () => [omniInsertCompletionHandler(omniInserters, ui)],\n };\n}\n\nclass OmniInsertCommand extends ProsemirrorCommand {\n constructor(markFilter: MarkInputRuleFilter) {\n super(\n EditorCommandId.OmniInsert,\n ['Mod-/'],\n (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // check whether selection allows completions\n if (!selectionAllowsCompletions(state.selection)) {\n return false;\n }\n\n // if the marks is already active then bail\n if (markIsActive(state, state.schema.marks.omni_insert)) {\n return false;\n }\n\n // check the mark filter\n if (!markFilter(state)) {\n return false;\n }\n\n if (dispatch) {\n const mark = state.schema.marks.omni_insert.create();\n const node = state.schema.text('/', [mark]);\n const tr = state.tr;\n tr.replaceSelectionWith(node, false);\n dispatch(tr);\n }\n\n return true;\n },\n );\n }\n}\n","/*\n * completion.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Selection, EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\nimport { EditorView, DecorationSet } from 'prosemirror-view';\n\nimport { canInsertNode } from './node';\nimport { EditorUI } from './ui';\nimport { kInsertCompletionTransaction } from './transaction';\n\nexport const kCompletionDefaultItemHeight = 22;\nexport const kCompletionDefaultMaxVisible = 10;\nexport const kCompletionDefaultWidth = 180;\n\nexport interface CompletionContext {\n isPaste: boolean;\n}\n\nexport interface CompletionsStream {\n items: T[];\n stream: () => T[] | null;\n}\n\nexport type Completions = T[] | CompletionsStream;\n\nexport interface CompletionResult {\n pos: number;\n offset?: number;\n token: string;\n completions: (state: EditorState, context: CompletionContext) => Promise;\n decorations?: DecorationSet;\n}\n\nexport interface CompletionHeaderProps {\n ui: EditorUI;\n message?: string;\n}\n\nexport interface CompletionHandler {\n // unique id\n id: string;\n\n // An optional scope for this completion handler. Completions\n // triggered by a transaction will filter completion handlers\n // that share a scope with the completion handler that originated\n // a transaction.\n scope?: string;\n\n // filter for determing whether we can call this handler from a given context (default is to\n // never offer completions if a mark with noInputRules is active). set to null to\n // allow completion anywhere\n enabled?: ((context: EditorState | Transaction) => boolean) | null;\n\n // return a set of completions for the given context. text is the text before\n // before the cursor in the current node (but no more than 500 characters)\n completions(text: string, context: EditorState | Transaction): CompletionResult | null;\n\n // filter a previously returned set of completions\n filter?: (completions: T[], state: EditorState, token: string, prevToken?: string) => T[] | null;\n\n // provide a completion replacement as a string or node (can be passed null if the popup was dismissed)\n replacement?(schema: Schema, completion: T | null): string | ProsemirrorNode | null;\n\n // lower level replacement handler (can be passed null if the popup was dismissed)\n replace?(view: EditorView, pos: number, completion: T | null): Promise;\n\n // completion view\n view: {\n // optional header component (will go inside a )\n header?: () =>\n | {\n component: React.FC | React.ComponentClass;\n height: number;\n message?: string;\n }\n | undefined;\n\n // react compontent type for viewing the item\n component: React.FC | React.ComponentClass;\n\n key: (completion: T) => any;\n\n // width of completion item (defaults to 180).\n width?: number;\n\n // height of completion item (defaults to 22px)\n height?: number;\n\n // use horizontal orientation (defaults to false)\n // (optionally provide a set of item widths)\n horizontal?: boolean;\n horizontalItemWidths?: number[];\n\n // maximum number of visible items (defaults to 10). note that\n // this only applies to completion poupups w/ vertical orientation\n // (scrolling is not supported for horizontal orientation)\n maxVisible?: number;\n\n // hide 'no results' (default false)\n hideNoResults?: boolean;\n };\n}\n\nexport function selectionAllowsCompletions(selection: Selection) {\n const schema = selection.$head.parent.type.schema;\n\n // non empty selections don't have completions\n if (!selection.empty) {\n return false;\n }\n\n // must be able to insert text\n if (!canInsertNode(selection, schema.nodes.text)) {\n return false;\n }\n\n // must not be in a code mark\n if (schema.marks.code && !!schema.marks.code.isInSet(selection.$from.marks())) {\n return false;\n }\n\n // must not be in a code node\n if (selection.$head.parent.type.spec.code) {\n return false;\n }\n\n return true;\n}\n\n// Determine whether two completionHandlers share the same scope. By default\n// completion handlers will share scope only if they share an id, but handlers\n// can provide a scope if they'd like to coordinate.\nexport function completionsShareScope(handler: CompletionHandler, prevHandler?: CompletionHandler) {\n // There is no previous handler, not shared\n if (!prevHandler) {\n return false;\n }\n\n // Previous handler with the same scope as the current handler\n if (prevHandler.scope && prevHandler.scope === handler.scope) {\n return true;\n } else {\n // Previous handler has the same id as the current handler\n return prevHandler.id === handler.id;\n }\n}\n\nexport function performCompletionReplacement(tr: Transaction, pos: number, replacement: ProsemirrorNode | string) {\n // set selection to area we will be replacing\n tr.setSelection(new TextSelection(tr.doc.resolve(pos), tr.selection.$head));\n\n // ensure we have a node\n if (replacement instanceof ProsemirrorNode) {\n // combine it's marks w/ whatever is active at the selection\n const marks = tr.selection.$head.marks();\n\n // set selection and replace it\n tr.replaceSelectionWith(replacement, false);\n\n // propapate marks\n marks.forEach(mark => tr.addMark(pos, tr.selection.to, mark));\n } else {\n tr.insertText(replacement);\n }\n\n // mark the transaction as an completion insertion\n tr.setMeta(kInsertCompletionTransaction, true);\n}\n","/*\n * omni_insert.tsx\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorState, Selection, Transaction } from 'prosemirror-state';\nimport { EditorView, DecorationSet } from 'prosemirror-view';\n\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport React from 'react';\nimport { firstBy } from 'thenby';\n\nimport { OmniInserter, omniInsertGroupCompare, omniInsertPriorityCompare } from '../../api/omni_insert';\nimport { CompletionHandler, CompletionResult } from '../../api/completion';\n\nimport { EditorUI } from '../../api/ui';\nimport { placeholderDecoration, emptyNodePlaceholderPlugin } from '../../api/placeholder';\nimport { kAddToHistoryTransaction } from '../../api/transaction';\n\nimport './omni_insert-completion.css';\n\nexport function omniInsertCompletionHandler(\n omniInserters: OmniInserter[],\n ui: EditorUI,\n): CompletionHandler {\n return {\n id: 'E305158D-20D6-474D-84E6-06607CA58578',\n\n completions: omniInsertCompletions(omniInserters, ui),\n\n filter: (completions: OmniInserter[], state: EditorState, token: string) => {\n // match contents of name or keywords (and verify the command is enabled)\n return completions\n .filter(inserter => {\n return (\n token.length === 0 ||\n inserter.name.toLowerCase().indexOf(token) !== -1 ||\n inserter.keywords?.some(keyword => keyword.indexOf(token) !== -1)\n );\n })\n .filter(inserter => {\n return inserter.command(state);\n })\n .sort(\n firstBy(omniInsertGroupCompare)\n .thenBy(omniInsertPriorityCompare, { direction: 'desc' })\n .thenBy('name'),\n );\n },\n\n replace(view: EditorView, pos: number, completion: OmniInserter | null) {\n // helper to remove command text\n const removeCommandText = () => {\n const tr = view.state.tr;\n tr.deleteRange(pos, view.state.selection.head);\n tr.setMeta(kAddToHistoryTransaction, false);\n view.dispatch(tr);\n };\n\n // execute command if provided\n if (completion) {\n // remove existing text\n removeCommandText();\n\n // execute the command\n completion.command(view.state, view.dispatch, view);\n\n // perform any requested selection offset\n if (completion.selectionOffset) {\n const tr = view.state.tr;\n setTextSelection(tr.selection.from + completion.selectionOffset)(tr);\n tr.setMeta(kAddToHistoryTransaction, false);\n view.dispatch(tr);\n }\n\n // if this is a dismiss of an omni_insert mark then the command\n // isn't part of 'natural' typing into the document, so remove it\n } else if (isOmniInsertCommandActive(view.state.selection)) {\n removeCommandText();\n }\n return Promise.resolve();\n },\n\n view: {\n component: OmniInserterView,\n key: command => command.id,\n width: 320,\n height: 46,\n maxVisible: 5,\n },\n };\n}\n\nconst kOmniInsertRegex = /\\/([\\w]*)$/;\n\nfunction omniInsertCompletions(omniInserters: OmniInserter[], ui: EditorUI) {\n return (text: string, context: EditorState | Transaction): CompletionResult | null => {\n const match = text.match(kOmniInsertRegex);\n if (match) {\n // we need to either be at the beginning of our parent, OR the omni_insert mark needs\n // to be active (that indicates that we entered omni insert mode via a user command)\n if (match.index !== 0 && !isOmniInsertCommandActive(context.selection)) {\n return null;\n }\n\n // capture query (note that no query returns all).\n const query = match[1].toLowerCase();\n\n // include a decoration if the query is empty\n const decorations =\n query.length === 0\n ? DecorationSet.create(context.doc, [\n placeholderDecoration(context.selection.head, ui.context.translateText(' type to search...')),\n ])\n : undefined;\n\n // return the completion result\n return {\n // match at the /\n pos: context.selection.head - match[0].length,\n\n // unique identifier for this request\n token: query,\n\n // return all omniInserters (will refine via filter)\n completions: (state: EditorState) => {\n return Promise.resolve(omniInserters);\n },\n\n // search placehodler decorator if there is no query\n decorations,\n };\n } else {\n return null;\n }\n };\n}\n\nconst OmniInserterView: React.FC = inserter => {\n return (\n \n \n \n \n \n \n \n
\n \"\"\n \n
{inserter.name}
\n
{inserter.description}
\n
\n );\n};\n\nfunction isOmniInsertCommandActive(selection: Selection) {\n const schema = selection.$head.parent.type.schema;\n return schema.marks.omni_insert.isInSet(selection.$head.marks());\n}\n","/*\n * omni_insert.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { CommandFn } from './command';\n\n// descriptive info for omni insert\nexport interface OmniInsert {\n name: string;\n keywords?: string[];\n description: string;\n group: OmniInsertGroup;\n priority?: number;\n selectionOffset?: number;\n image: () => string;\n}\n\n// descriptive info + ability to identify/execute\nexport interface OmniInserter extends OmniInsert {\n id: string;\n command: CommandFn;\n}\n\nexport enum OmniInsertGroup {\n Headings = 'Headings',\n Chunks = 'Chunks',\n Lists = 'Lists',\n Math = 'Math',\n References = 'References',\n Content = 'Content',\n Blocks = 'Blocks',\n}\n\nconst omniInsertGroupOrder = new Map(Object.keys(OmniInsertGroup).map((key, index) => [key, index]));\n\nexport function omniInsertGroupCompare(a: OmniInsert, b: OmniInsert) {\n return omniInsertGroupOrder.get(a.group)! - omniInsertGroupOrder.get(b.group)!;\n}\n\nexport function omniInsertPriorityCompare(a: OmniInsert, b: OmniInsert) {\n return (a.priority || 0) - (b.priority || 0);\n}\n","/*\n * placeholder.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, NodeType } from 'prosemirror-model';\nimport { EditorState, Transaction, Plugin, PluginKey } from 'prosemirror-state';\nimport { DecorationSet, Decoration, EditorView } from 'prosemirror-view';\n\nimport { findParentNode } from 'prosemirror-utils';\n\nimport { EditorUI } from './ui';\n\nexport function emptyNodePlaceholderPlugin(nodeType: NodeType, placeholder: (node: ProsemirrorNode) => string) {\n const pluginKey = new PluginKey(nodeType.name + '-empty-placeholder');\n\n return new Plugin({\n key: pluginKey,\n state: {\n init(_config: { [key: string]: any }, instance: EditorState) {\n return DecorationSet.empty;\n },\n apply(tr: Transaction, set: DecorationSet, oldState: EditorState, newState: EditorState) {\n // check for empty parent of our type\n const emptyNode = findParentNode(node => node.type === nodeType && node.childCount === 0)(tr.selection);\n if (emptyNode) {\n const decoration = placeholderDecoration(emptyNode.pos + 1, placeholder(emptyNode.node));\n return DecorationSet.create(tr.doc, [decoration]);\n } else {\n return DecorationSet.empty;\n }\n },\n },\n props: {\n decorations(state: EditorState) {\n return pluginKey.getState(state);\n },\n },\n });\n}\n\nexport function placeholderDecoration(pos: number, text: string) {\n return Decoration.widget(pos, (_view: EditorView, _getPos: () => number) => {\n const placeholder = window.document.createElement('span');\n placeholder.classList.add('pm-placeholder-text-color');\n placeholder.innerText = text;\n return placeholder;\n });\n}\n\nexport function iconAndTextPlaceholderDecoration(pos: number, icon: string, text: string) {\n return Decoration.widget(pos, (_view: EditorView, _getPos: () => number) => {\n const container = window.document.createElement('span');\n\n const iconImg = window.document.createElement('img');\n iconImg.classList.add('pm-placeholder-icon');\n iconImg.setAttribute('src', icon);\n\n const message = window.document.createElement('span');\n message.classList.add('pm-placeholder-text-color');\n message.classList.add('pm-placeholder-text');\n message.innerText = text;\n\n container.appendChild(iconImg);\n container.appendChild(message);\n return container;\n });\n}\n\nexport function searchPlaceholderDecoration(pos: number, ui: EditorUI, text?: string) {\n return iconAndTextPlaceholderDecoration(pos, ui.images.search!, text || '');\n}\n","/*\n * completion.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\n// TODO: it may be that we need to not do full re-requests from the filter\n// when we have streamed results (as they can cause reset of the allCompletions)\n\nimport { Plugin, PluginKey, Transaction, Selection, EditorState } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport {\n CompletionHandler,\n selectionAllowsCompletions,\n kCompletionDefaultMaxVisible,\n completionsShareScope,\n performCompletionReplacement,\n CompletionResult,\n Completions,\n CompletionsStream,\n} from '../../api/completion';\nimport { EditorEvents } from '../../api/events';\nimport { ScrollEvent } from '../../api/event-types';\n\nimport { createCompletionPopup, renderCompletionPopup, destroyCompletionPopup } from './completion-popup';\nimport { EditorUI } from '../../api/ui';\nimport { PromiseQueue } from '../../api/promise';\nimport { MarkInputRuleFilter } from '../../api/input_rule';\nimport { kInsertCompletionTransaction, kPasteTransaction } from '../../api/transaction';\n\ninterface CompletionState {\n handler?: CompletionHandler;\n result?: CompletionResult;\n prevToken?: string;\n isPaste?: boolean;\n}\n\nexport function completionExtension(\n handlers: readonly CompletionHandler[],\n inputRuleFilter: MarkInputRuleFilter,\n ui: EditorUI,\n events: EditorEvents,\n) {\n return {\n plugins: () => [new CompletionPlugin(handlers, inputRuleFilter, ui, events)],\n };\n}\n\nconst key = new PluginKey('completion');\n\nclass CompletionPlugin extends Plugin {\n // editor ui\n private readonly ui: EditorUI;\n\n // editor view\n private view: EditorView | null = null;\n\n // popup elemeent\n private completionPopup: HTMLElement | null = null;\n\n // currently selected index and last set of completions are held as transient\n // state because they can't be derived from the document state (selectedIndex\n // is derived from out of band user keyboard gestures and completions may\n // have required fulfilling an external promise). also use a version counter\n // used to invalidate async completion requests that are fulfilled after\n // an update has occurred\n private version = 0;\n private allCompletions: any[] = [];\n private completions: any[] = [];\n private horizontal = false;\n private selectedIndex = 0;\n\n // serialize async completion requests\n private completionQueue = new PromiseQueue();\n\n // events we need to unsubscribe from\n private readonly scrollUnsubscribe: VoidFunction;\n\n constructor(\n handlers: readonly CompletionHandler[],\n inputRuleFilter: MarkInputRuleFilter,\n ui: EditorUI,\n events: EditorEvents,\n ) {\n super({\n key,\n state: {\n init: () => ({}),\n apply: (tr: Transaction, prevState: CompletionState) => {\n // if we don't have a view then bail\n if (!this.view) {\n return {};\n }\n\n // selection only changes dismiss any active completion\n if (!tr.docChanged && !tr.storedMarksSet && tr.selectionSet) {\n return {};\n }\n\n // check whether completions are valid here\n if (!selectionAllowsCompletions(tr.selection)) {\n return {};\n }\n\n // calcluate text before cursor\n const textBefore = completionTextBeforeCursor(tr.selection);\n\n // if there is no text then don't handle it\n if (textBefore.length === 0) {\n return {};\n }\n\n const isPaste = tr.getMeta(kPasteTransaction) === true;\n\n // check for a handler that can provide completions at the current selection\n for (const handler of handlers) {\n // first check if the handler is enabled (null means use inputRuleFilter)\n if (handler.enabled === null || (handler.enabled ? handler.enabled(tr) : inputRuleFilter(tr))) {\n const result = handler.completions(textBefore, tr);\n if (result) {\n // check if the previous state had a completion from the same handler\n let prevToken: string | undefined;\n\n // If this completion shares scope with the previous completion\n // and this is a completion transaction, skip\n if (tr.getMeta(kInsertCompletionTransaction) && completionsShareScope(handler, prevState.handler)) {\n continue;\n }\n\n if (handler.id === prevState.handler?.id) {\n // pass the prevToken on if the completion was for the same position\n if (result.pos === prevState.result?.pos) {\n prevToken = prevState.result.token;\n }\n }\n\n // return state\n return { handler, result, prevToken, isPaste };\n }\n }\n }\n\n // no handler found\n return {};\n },\n },\n\n view: () => ({\n update: (view: EditorView) => {\n // increment version\n this.version++;\n\n // set view\n this.view = view;\n\n // update completions\n this.updateCompletions(view, true);\n },\n\n destroy: () => {\n // unsubscribe from events\n this.scrollUnsubscribe();\n window.document.removeEventListener('focusin', this.clearCompletions);\n\n // tear down the popup\n this.clearCompletions();\n },\n }),\n\n props: {\n decorations: (state: EditorState) => {\n const pluginState = key.getState(state);\n return pluginState?.result?.decorations;\n },\n\n handleDOMEvents: {\n keydown: (view: EditorView, event: Event) => {\n const kbEvent = event as KeyboardEvent;\n\n let handled = false;\n\n // determine meaning of keys based on orientation\n const forwardKey = this.horizontal ? 'ArrowRight' : 'ArrowDown';\n const backwardKey = this.horizontal ? 'ArrowLeft' : 'ArrowUp';\n\n if (this.completionsActive()) {\n switch (kbEvent.key) {\n case 'Escape':\n this.dismissCompletions();\n handled = true;\n break;\n case 'Enter':\n case 'Tab':\n this.insertCompletion(view, this.selectedIndex);\n handled = true;\n break;\n case backwardKey:\n this.selectedIndex = Math.max(this.selectedIndex - 1, 0);\n this.renderCompletions(view);\n handled = true;\n break;\n case forwardKey:\n this.selectedIndex = Math.min(this.selectedIndex + 1, this.completions.length - 1);\n this.renderCompletions(view);\n handled = true;\n break;\n case 'PageUp':\n this.selectedIndex = Math.max(this.selectedIndex - this.completionPageSize(), 0);\n this.renderCompletions(view);\n handled = true;\n break;\n case 'PageDown':\n this.selectedIndex = Math.min(\n this.selectedIndex + this.completionPageSize(),\n this.completions.length - 1,\n );\n this.renderCompletions(view);\n handled = true;\n break;\n case 'End':\n this.selectedIndex = this.completions.length - 1;\n this.renderCompletions(view);\n handled = true;\n break;\n case 'Home':\n this.selectedIndex = 0;\n this.renderCompletions(view);\n handled = true;\n break;\n }\n }\n\n // supress event if we handled it\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n // return status\n return handled;\n },\n },\n },\n });\n\n // capture reference to ui\n this.ui = ui;\n\n // hide completions when we scroll or the focus changes\n this.clearCompletions = this.clearCompletions.bind(this);\n this.scrollUnsubscribe = events.subscribe(ScrollEvent, this.clearCompletions);\n window.document.addEventListener('focusin', this.clearCompletions);\n }\n\n private updateCompletions(view: EditorView, resetSelection: boolean) {\n const state = key.getState(view.state);\n\n if (state?.handler && state?.result) {\n // track the request version to invalidate the result if an\n // update happens after it goes into flight\n const requestVersion = this.version;\n\n // make an async request for the completions, update allCompletions,\n // and then apply any filter we have (allows the completer to just return\n // everything from the aysnc query and fall back to the filter for refinement)\n const requestAllCompletions = async () => {\n // fetch completions\n const completions = await state.result!.completions(view.state, { isPaste: state.isPaste === true });\n\n // if we don't have a handler or result then return\n if (!state.handler || !state.result) {\n return;\n }\n\n // function to update completions\n const updateCompletions = (updatedCompletions: any[]) => {\n // save completions\n this.setAllCompletions(updatedCompletions, !!state.handler?.view.horizontal, resetSelection);\n\n // display if the request still maps to the current state\n if (state.handler && state.result && this.version === requestVersion) {\n // if there is a filter then call it and update displayed completions\n const displayedCompletions = state.handler.filter\n ? state.handler.filter(this.allCompletions, view.state, state.result.token)\n : null;\n if (displayedCompletions) {\n this.setDisplayedCompletions(displayedCompletions, !!state.handler.view.horizontal, resetSelection);\n }\n\n this.renderCompletions(view);\n }\n };\n\n // if we got an array, just set it. if we got a stream then poll it for it's update\n if (Array.isArray(completions)) {\n updateCompletions(completions);\n } else {\n const completionStream = completions as CompletionsStream;\n updateCompletions(completionStream.items);\n const pollingInterval = setInterval(() => {\n // if the document has been updated then invalidate\n if (this.version !== requestVersion) {\n clearInterval(pollingInterval);\n } else {\n // otherwise check the stream\n const result = completionStream.stream();\n if (result) {\n clearInterval(pollingInterval);\n updateCompletions(result);\n }\n }\n }, 300);\n }\n };\n\n // first see if we can do this exclusively via filter\n if (state.prevToken && state.handler.filter) {\n this.completionQueue.enqueue(async () => {\n // display if the request still maps to the current state\n if (state.handler && state.result && this.version === requestVersion) {\n const filteredCompletions = state.handler.filter!(\n this.allCompletions,\n view.state,\n state.result.token,\n state.prevToken,\n );\n\n // got a hit from the filter!\n if (filteredCompletions) {\n this.setDisplayedCompletions(filteredCompletions, !!state.handler.view.horizontal, resetSelection);\n this.renderCompletions(view);\n\n // couldn't use the filter, do a full request for all completions (so long as we aren't\n // already waiting on a strea,)\n } else {\n await requestAllCompletions();\n }\n }\n });\n } else {\n // no prevToken or no filter for this handler, request everything\n this.completionQueue.enqueue(requestAllCompletions);\n }\n } else {\n // no handler/result for this document state\n this.clearCompletions();\n }\n }\n\n private renderCompletions(view: EditorView) {\n const state = key.getState(view.state);\n\n if (state && state.handler && (this.completions.length > 0 || !state.handler.view.hideNoResults)) {\n const props = {\n handler: state.handler!,\n pos: state.result!.pos + (state.result!.offset || 0),\n completions: this.completions,\n selectedIndex: this.selectedIndex,\n noResults: this.ui.context.translateText('No Results'),\n onClick: (index: number) => {\n this.insertCompletion(view, index);\n },\n onHover: (index: number) => {\n this.selectedIndex = index;\n this.renderCompletions(view);\n },\n ui: this.ui,\n };\n\n // create the completion popup if we need to\n if (this.completionPopup === null) {\n this.completionPopup = createCompletionPopup();\n window.document.body.appendChild(this.completionPopup);\n }\n\n // render\n renderCompletionPopup(view, props, this.completionPopup);\n } else {\n // hide\n this.hideCompletionPopup();\n }\n }\n\n private async insertCompletion(view: EditorView, index: number) {\n // default index if not specified\n index = index || this.selectedIndex;\n\n const state = key.getState(view.state);\n if (state && state.handler) {\n // perform replacement\n const result = state.result!;\n\n // check low level handler first\n if (state.handler.replace) {\n // execute replace\n await state.handler.replace(view, result.pos, this.completions[index]);\n\n // use higher level handler\n } else if (state.handler.replacement) {\n // get replacement from handler\n const replacement = state.handler.replacement(view.state.schema, this.completions[index]);\n if (replacement) {\n const tr = view.state.tr;\n performCompletionReplacement(tr, result.pos, replacement);\n view.dispatch(tr);\n }\n }\n // set focus\n view.focus();\n }\n this.clearCompletions();\n }\n\n // explicit user dismiss of completion (e.g. Esc key)\n private async dismissCompletions() {\n // call lower-level replace on any active handler (w/ null). this gives\n // them a chance to dismiss any artifacts that were explicitly inserted\n // to trigger the handler (e.g. a cmd+/ for omni-insert)\n if (this.view) {\n const state = key.getState(this.view.state);\n if (state?.result && state.handler) {\n if (state.handler.replace) {\n await state.handler.replace(this.view, state.result.pos, null);\n } else if (state.handler.replacement) {\n state.handler.replacement(this.view.state.schema, null);\n }\n }\n }\n\n this.clearCompletions();\n }\n\n private clearCompletions() {\n this.setAllCompletions([], false, true);\n this.hideCompletionPopup();\n }\n\n private hideCompletionPopup() {\n if (this.completionPopup) {\n destroyCompletionPopup(this.completionPopup);\n this.completionPopup = null;\n }\n }\n\n private completionsActive() {\n return !!this.completionPopup;\n }\n\n private setAllCompletions(completions: any[], horizontal: boolean, resetSelection: boolean) {\n this.allCompletions = completions;\n this.setDisplayedCompletions(completions, horizontal, resetSelection);\n }\n\n private setDisplayedCompletions(completions: any[], horizontal: boolean, resetSelection: boolean) {\n this.completions = completions;\n this.horizontal = !!horizontal;\n\n // reset selection if requested or if the current index exceeds the # of completions\n if (resetSelection || this.selectedIndex > this.completions.length - 1) {\n this.selectedIndex = 0;\n }\n }\n\n private completionPageSize() {\n if (this.view) {\n const state = key.getState(this.view.state);\n return state?.handler?.view.maxVisible || kCompletionDefaultMaxVisible;\n } else {\n return kCompletionDefaultMaxVisible;\n }\n }\n}\n\n// extract the text before the cursor, dealing with block separators and\n// non-text leaf chracters (this is based on code in prosemirror-inputrules)\nfunction completionTextBeforeCursor(selection: Selection, maxLength = 500) {\n const { $head } = selection;\n return $head.parent.textBetween(\n Math.max(0, $head.parentOffset - maxLength), // start\n $head.parentOffset, // end\n undefined, // block separator\n '\\ufffc', // leaf char\n );\n}\n","/*\n * completion-popup.tsx\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\n\nimport React, { useEffect } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport zenscroll from 'zenscroll';\n\nimport { applyStyles } from '../../api/css';\nimport {\n CompletionHandler,\n kCompletionDefaultItemHeight,\n kCompletionDefaultMaxVisible,\n kCompletionDefaultWidth,\n} from '../../api/completion';\nimport { Popup } from '../../api/widgets/popup';\n\nimport './completion-popup.css';\nimport { EditorUI } from '../../api/ui';\n\nconst kNoResultsHeight = 22;\n\nexport interface CompletionListProps {\n handler: CompletionHandler;\n pos: number;\n completions: any[];\n selectedIndex: number;\n noResults: string;\n onHover: (index: number) => void;\n onClick: (index: number) => void;\n ui: EditorUI;\n}\n\nexport function createCompletionPopup(): HTMLElement {\n const popup = window.document.createElement('div');\n popup.style.position = 'absolute';\n popup.style.zIndex = '900';\n return popup;\n}\n\nexport function renderCompletionPopup(view: EditorView, props: CompletionListProps, popup: HTMLElement) {\n // position popup\n const size = completionPopupSize(props);\n const positionStyles = completionPopupPositionStyles(view, props.pos, size.width, size.height);\n applyStyles(popup, [], positionStyles);\n\n // render popup\n ReactDOM.render(, popup);\n}\n\nexport function destroyCompletionPopup(popup: HTMLElement) {\n ReactDOM.unmountComponentAtNode(popup);\n popup.remove();\n}\n\nconst CompletionPopup: React.FC = props => {\n // main completion popup + class + dark mode if appropriate\n const classes = ['pm-completion-popup'].concat(props.ui.prefs.darkMode() ? ['pm-dark-mode'] : []);\n return (\n \n \n \n );\n};\n\nconst CompletionList: React.FC = props => {\n const size = completionPopupSize(props);\n const itemHeight = props.handler.view.height || kCompletionDefaultItemHeight;\n\n // keep selected index in view\n const containerRef = React.useRef(null);\n useEffect(() => {\n const containerEl = containerRef.current;\n if (containerEl) {\n const rows = containerEl.getElementsByClassName('pm-completion-list-item-row');\n const scrollToRow = rows.item(props.selectedIndex);\n if (scrollToRow) {\n const scroller = zenscroll.createScroller(containerEl);\n scroller.intoView(scrollToRow as HTMLElement);\n }\n }\n }, [props.selectedIndex]);\n\n // item event handler\n const itemEventHandler = (index: number, handler: (index: number) => void) => {\n return (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n handler(index);\n };\n };\n\n // completion source based on orientation\n const completions = props.handler.view.horizontal ? horizontalCompletions : verticalCompletions;\n\n const classes = ['pm-completion-list'].concat(props.handler.view.horizontal ? ['pm-completion-list-horizontal'] : []);\n\n return (\n \n \n {completionsHeader(props.handler, props.completions.length, props)}\n \n {completions(props, itemHeight, itemEventHandler)}\n {props.completions.length === 0 ? completionsNoResults(props) : null}\n \n
\n \n );\n};\n\nfunction completionsHeader(handler: CompletionHandler, completionCount: number, props: CompletionListProps) {\n if (handler.view.header) {\n const completionHeader = handler.view.header ? handler.view.header() : undefined;\n const headerProps = { message: completionHeader?.message, ...props };\n\n if (completionHeader) {\n const header = React.createElement(completionHeader.component, headerProps);\n return (\n \n \n \n {header}\n \n \n \n );\n } else {\n return null;\n }\n } else {\n return null;\n }\n}\n\ntype ItemEventHandler = (index: number, handler: (index: number) => void) => (event: React.MouseEvent) => void;\n\nfunction verticalCompletions(props: CompletionListProps, itemHeight: number, itemEventHandler: ItemEventHandler) {\n return props.completions.map((completion, index) => {\n const { key, cell } = completionItemCell(props, completion, index);\n return (\n \n {cell}\n \n );\n });\n}\n\nfunction horizontalCompletions(props: CompletionListProps, itemHeight: number, itemEventHandler: ItemEventHandler) {\n const cellWidths = horizontalCellWidths(props);\n return (\n \n {props.completions.map((completion, index) => {\n const { cell } = completionItemCell(props, completion, index, cellWidths[index], itemEventHandler);\n return cell;\n })}\n \n );\n}\n\nfunction completionItemCell(\n props: CompletionListProps,\n completion: any,\n index: number,\n width?: number,\n itemEventHandler?: ItemEventHandler,\n) {\n // need to provide key for both wrapper and item\n // https://stackoverflow.com/questions/28329382/understanding-unique-keys-for-array-children-in-react-js#answer-28329550\n const key = props.handler.view.key(completion);\n const item = React.createElement(props.handler.view.component, { ...completion, key });\n const className = 'pm-completion-list-item' + (index === props.selectedIndex ? ' pm-selected-list-item' : '');\n const cell = (\n \n {item}\n \n );\n return { key, cell };\n}\n\nfunction completionsNoResults(props: CompletionListProps) {\n return (\n \n {props.noResults}\n \n );\n}\n\nfunction completionPopupSize(props: CompletionListProps) {\n // kicker for list margins/border/etc\n const kCompletionsChrome = 8;\n\n // get view props (apply defaults)\n let { height: itemHeight = kCompletionDefaultItemHeight } = props.handler.view;\n const { maxVisible = kCompletionDefaultMaxVisible, width = kCompletionDefaultWidth } = props.handler.view;\n\n // add 2px for the border to item heights\n const kBorderPad = 2;\n itemHeight += kBorderPad;\n\n // compute header height\n let headerHeight = 0;\n if (props.handler.view.header) {\n const completionHeader = props.handler.view.header();\n if (completionHeader) {\n headerHeight = completionHeader.height + kBorderPad;\n }\n }\n\n // complete based on horizontal vs. vertical\n if (props.handler.view.horizontal) {\n // horizontal mode can provide explicit item widths\n const kTablePadding = 8;\n const kCellPadding = 8;\n const kCellBorders = 2;\n const totalWidth =\n horizontalCellWidths(props).reduce((total, current) => {\n return total + (current + kCellPadding + kCellBorders);\n }, 0) + kTablePadding;\n\n return {\n width: totalWidth,\n height: headerHeight + itemHeight + kCompletionsChrome,\n };\n } else {\n // compute height (subject it to a minimum require to display 'no results')\n const height =\n headerHeight +\n kCompletionsChrome +\n Math.max(itemHeight * Math.min(maxVisible, props.completions.length), kNoResultsHeight);\n\n // return\n return { width, height };\n }\n}\n\nfunction horizontalCellWidths(props: CompletionListProps) {\n const { width = kCompletionDefaultWidth } = props.handler.view;\n return props.completions.map((_completion, index) => {\n if (props.handler.view.horizontalItemWidths) {\n return props.handler.view.horizontalItemWidths[index] || width;\n } else {\n return width;\n }\n });\n}\n\nfunction completionPopupPositionStyles(view: EditorView, pos: number, width: number, height: number) {\n // some constants\n const kMinimumPaddingToEdge = 5;\n const kCompletionsVerticalPadding = 5;\n\n // default position\n const selectionCoords = view.coordsAtPos(pos);\n\n let top = selectionCoords.bottom + kCompletionsVerticalPadding;\n let left = selectionCoords.left;\n\n // see if we need to be above\n if (top + height + kMinimumPaddingToEdge >= window.innerHeight) {\n top = selectionCoords.top - height - kCompletionsVerticalPadding;\n }\n\n // see if we need to be to the left (use cursor as pos in this case)\n if (left + width + kMinimumPaddingToEdge >= window.innerWidth) {\n const cursorCoords = view.coordsAtPos(view.state.selection.head);\n left = cursorCoords.right - width;\n }\n\n return {\n left: left + 'px',\n top: top + 'px',\n };\n}\n","/*\n * popup.tsx\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport React from 'react';\n\nimport { WidgetProps } from './react';\n\nexport type PopupProps = WidgetProps;\n\nexport const Popup: React.FC = props => {\n const className = ['pm-popup', 'pm-text-color', 'pm-proportional-font', 'pm-pane-border-color', 'pm-background-color']\n .concat(props.classes || [])\n .join(' ');\n\n const style: React.CSSProperties = {\n ...props.style,\n position: 'absolute',\n zIndex: 10,\n };\n\n return (\n
\n {props.children}\n
\n );\n};\n","/*\n * promise.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\ninterface PendingPromise {\n promise: () => Promise;\n resolve: (result: T) => void;\n reject: (reason: any) => void;\n}\n\nexport class PromiseQueue {\n private queue = new Array>();\n private running = false;\n\n public enqueue(promise: () => Promise) {\n return new Promise((resolve, reject) => {\n this.queue.push({\n promise,\n resolve,\n reject,\n });\n this.dequeue();\n });\n }\n\n private dequeue() {\n if (this.running) {\n return false;\n }\n const item = this.queue.shift();\n if (!item) {\n return false;\n }\n try {\n this.running = true;\n item\n .promise()\n .then(value => {\n this.running = false;\n item.resolve(value);\n this.dequeue();\n })\n .catch(err => {\n this.running = false;\n item.reject(err);\n this.dequeue();\n });\n } catch (err) {\n this.running = false;\n item.reject(err);\n this.dequeue();\n }\n return true;\n }\n}\n","/*\n * spelling-doc.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView, DecorationSet, Decoration } from 'prosemirror-view';\nimport { TextSelection, Plugin, PluginKey, EditorState, Transaction } from 'prosemirror-state';\n\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { PandocMark } from '../../api/mark';\nimport {\n EditorWordRange,\n EditorSpellingDoc,\n EditorWordSource,\n EditorAnchor,\n EditorRect,\n EditorUISpelling,\n} from '../../api/spelling';\nimport { scrollIntoView } from '../../api/scroll';\n\nimport { excludedMarks, getWords, spellcheckerWord } from './spelling';\n\n// get the document interface required by interactive spellchecking\n\nexport function getSpellingDoc(\n view: EditorView,\n marks: readonly PandocMark[],\n spelling: EditorUISpelling,\n): EditorSpellingDoc {\n // alias schema\n const schema = view.state.schema;\n\n // intialize marks we don't want to check\n const excluded = excludedMarks(schema, marks);\n\n // check begin\n spellingDocPlugin(view.state).onCheckBegin();\n\n return {\n getWords: (start: number, end: number): EditorWordSource => {\n return getWords(view.state, start, end, spelling, excluded);\n },\n\n createAnchor: (pos: number): EditorAnchor => {\n return spellingDocPlugin(view.state).createAnchor(pos);\n },\n\n shouldCheck: (_wordRange: EditorWordRange): boolean => {\n return true;\n },\n\n setSelection: (wordRange: EditorWordRange) => {\n const tr = view.state.tr;\n tr.setSelection(TextSelection.create(tr.doc, wordRange.start, wordRange.end));\n view.dispatch(tr);\n },\n\n getText: (wordRange: EditorWordRange): string => {\n const word = view.state.doc.textBetween(wordRange.start, wordRange.end);\n return spellcheckerWord(word);\n },\n\n replaceSelection: (text: string) => {\n const tr = view.state.tr;\n const selectionMarks = tr.selection.$from.marks();\n tr.replaceSelectionWith(view.state.schema.text(text, selectionMarks), false);\n view.dispatch(tr);\n },\n\n getCursorPosition: (): number => {\n return view.state.selection.to;\n },\n\n getSelectionStart: (): number => {\n return view.state.selection.from;\n },\n\n getSelectionEnd: (): number => {\n return view.state.selection.to;\n },\n\n getCursorBounds: (): EditorRect => {\n const fromCoords = view.coordsAtPos(view.state.selection.from);\n const toCoords = view.coordsAtPos(view.state.selection.to);\n\n return {\n x: Math.min(fromCoords.left, toCoords.left),\n y: fromCoords.top,\n width: Math.abs(fromCoords.left - toCoords.left),\n height: toCoords.bottom - fromCoords.top,\n };\n },\n\n moveCursorNearTop: () => {\n scrollIntoView(view, view.state.selection.from, false, undefined, 100);\n },\n\n dispose: () => {\n spellingDocPlugin(view.state).onCheckEnd(view);\n },\n };\n}\n\n// companion plugin for SpellingDoc provided above (shows 'fake' selection during\n// interactive spell check dialog and maintains anchor position(s) across\n// transactions that occur while the dialog/doc is active)\n\nconst spellingDocKey = new PluginKey('spelling-doc-plugin');\n\nfunction spellingDocPlugin(state: EditorState) {\n return spellingDocKey.get(state) as SpellingDocPlugin;\n}\n\nexport class SpellingDocPlugin extends Plugin {\n private checking = false;\n private anchors: SpellingAnchor[] = [];\n\n constructor() {\n super({\n key: spellingDocKey,\n state: {\n init: () => {\n return DecorationSet.empty;\n },\n apply: (tr: Transaction, old: DecorationSet, oldState: EditorState, newState: EditorState) => {\n if (this.checking) {\n // map anchors\n this.anchors.forEach(anchor => {\n anchor.setPosition(tr.mapping.map(anchor.getPosition()));\n });\n\n // show selection\n if (!tr.selection.empty) {\n return DecorationSet.create(tr.doc, [\n Decoration.inline(tr.selection.from, tr.selection.to, { class: 'pm-selected-text' }),\n ]);\n }\n }\n\n return DecorationSet.empty;\n },\n },\n props: {\n decorations: (state: EditorState) => {\n return spellingDocKey.getState(state);\n },\n },\n });\n }\n\n public createAnchor(pos: number) {\n const anchor = new SpellingAnchor(pos);\n this.anchors.push(anchor);\n return anchor;\n }\n\n public onCheckBegin() {\n this.checking = true;\n }\n\n public onCheckEnd(view: EditorView) {\n this.checking = false;\n this.anchors = [];\n\n if (!view.state.selection.empty) {\n const tr = view.state.tr;\n setTextSelection(tr.selection.to)(tr);\n view.dispatch(tr);\n }\n }\n}\n\nclass SpellingAnchor implements EditorAnchor {\n private pos = 0;\n constructor(pos: number) {\n this.pos = pos;\n }\n public getPosition() {\n return this.pos;\n }\n public setPosition(pos: number) {\n this.pos = pos;\n }\n}\n\nconst extension = () => {\n return {\n plugins: () => {\n return [new SpellingDocPlugin()];\n },\n };\n};\n\nexport default extension;\n","/*\n * spelling.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { MarkType, Schema, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorState } from 'prosemirror-state';\n\nimport { EditorWordSource, EditorWordRange, EditorUISpelling, kCharClassNonWord } from '../../api/spelling';\nimport { PandocMark, getMarkRange } from '../../api/mark';\n\nexport const beginDocPos = () => 1;\nexport const endDocPos = (doc: ProsemirrorNode) => doc.nodeSize - 2;\n\nexport function getWords(\n state: EditorState,\n start: number,\n end: number,\n spelling: EditorUISpelling,\n excluded: MarkType[],\n): EditorWordSource {\n // provide defaults\n if (start === -1) {\n start = beginDocPos();\n }\n if (end === -1) {\n end = endDocPos(state.doc);\n }\n\n // enlarge range to begin/end\n const beginPos = findBeginWord(state, start, spelling.classifyCharacter);\n const endPos = findEndWord(state, end, spelling.classifyCharacter);\n\n const words: EditorWordRange[] = [];\n let currentPos = beginPos;\n while (currentPos <= endPos) {\n // advance until we find a word\n currentPos = advanceToWord(state, currentPos, spelling.classifyCharacter);\n if (currentPos >= endPos) {\n break;\n }\n\n // find end of word\n const endWordPos = findEndWord(state, currentPos, spelling.classifyCharacter);\n if (endWordPos === currentPos) {\n break;\n }\n\n // add word if it doesn't have an excluded type\n if (!excludeWord(state.doc, currentPos, endWordPos, excluded)) {\n const wordText = state.doc.textBetween(currentPos, endWordPos);\n words.push(\n ...spelling.breakWords(wordText).map(wordRange => {\n return {\n start: currentPos + wordRange.start,\n end: currentPos + wordRange.end,\n };\n }),\n );\n }\n\n // next word\n currentPos = endWordPos;\n }\n\n // return iterator over word range\n return {\n hasNext: () => {\n return words.length > 0;\n },\n next: () => {\n if (words.length > 0) {\n return words.shift()!;\n } else {\n return null;\n }\n },\n };\n}\n\nfunction excludeWord(doc: ProsemirrorNode, from: number, to: number, excluded: MarkType[]) {\n // does it have one of our excluded mark types?\n if (excluded.some(markType => doc.rangeHasMark(from, to, markType))) {\n return true;\n }\n\n // it is in a link mark where the link text is a url?\n const schema = doc.type.schema;\n if (schema.marks.link && doc.rangeHasMark(from, to, schema.marks.link)) {\n const range = getMarkRange(doc.resolve(from), schema.marks.link);\n if (range && /^[a-z]+:\\/\\/.*$/.test(doc.textBetween(range.from, range.to))) {\n return true;\n }\n }\n\n // don't exclude\n return false;\n}\n\nexport function advanceToWord(state: EditorState, pos: number, classifier: (ch: number) => number) {\n while (pos < endDocPos(state.doc)) {\n const nextChar = charAt(state.doc, pos);\n if (classifier(nextChar) !== kCharClassNonWord) {\n break;\n } else {\n pos++;\n }\n }\n return pos;\n}\n\nexport function findBeginWord(state: EditorState, pos: number, classifier: (ch: number) => number) {\n // scan backwards until a non-word character is encountered\n while (pos >= beginDocPos()) {\n const prevChar = charAt(state.doc, pos - 1);\n if (classifier(prevChar) === kCharClassNonWord) {\n break;\n } else {\n pos--;\n }\n }\n // return the position\n return pos;\n}\n\nexport function findEndWord(state: EditorState, pos: number, classifier: (ch: number) => number) {\n // scan forwards until a non-word character is encountered\n while (pos < endDocPos(state.doc)) {\n const nextChar = charAt(state.doc, pos);\n if (classifier(nextChar) === kCharClassNonWord) {\n break;\n } else {\n pos++;\n }\n }\n\n // return the position\n return pos;\n}\n\n// get the chracter code at the specified position, returning character code 32 (a space)\n// for begin/end of document, block boundaries, and non-text leaf nodes\nexport function charAt(doc: ProsemirrorNode, pos: number) {\n if (pos < beginDocPos() || pos >= endDocPos(doc)) {\n return 32; // space for doc boundary\n } else {\n return (doc.textBetween(pos, pos + 1, ' ', ' ') || ' ').charCodeAt(0);\n }\n}\n\nexport function excludedMarks(schema: Schema, marks: readonly PandocMark[]): MarkType[] {\n return marks.filter(mark => mark.noSpelling).map(mark => schema.marks[mark.name]);\n}\n\nexport function spellcheckerWord(word: string) {\n return word.replace(/’/g, \"'\");\n}\n","/*\n * spelling.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport const kCharClassWord = 0;\nexport const kCharClassBoundary = 1;\nexport const kCharClassNonWord = 2;\n\nexport interface EditorUISpelling {\n // realtime interface\n realtimeEnabled: () => boolean;\n checkWords: (words: string[]) => string[];\n suggestionList: (word: string, callback: (suggestions: string[]) => void) => void;\n\n // dictionary\n isWordIgnored: (word: string) => boolean;\n ignoreWord: (word: string) => void;\n unignoreWord: (word: string) => void;\n addToDictionary: (word: string) => void;\n\n // word breaking\n breakWords: (text: string) => EditorWordRange[];\n classifyCharacter: (ch: number) => number;\n}\n\nexport interface EditorAnchor {\n getPosition: () => number;\n}\n\nexport interface EditorRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface EditorWordRange {\n start: number;\n end: number;\n}\n\nexport interface EditorWordSource {\n hasNext: () => boolean;\n next: () => EditorWordRange | null;\n}\n\nexport interface EditorSpellingDoc {\n getWords: (start: number, end: number) => EditorWordSource;\n\n createAnchor: (pos: number) => EditorAnchor;\n\n shouldCheck: (wordRange: EditorWordRange) => boolean;\n setSelection: (wordRange: EditorWordRange) => void;\n getText: (wordRange: EditorWordRange) => string;\n\n getCursorPosition: () => number;\n replaceSelection: (text: string) => void;\n getSelectionStart: () => number;\n getSelectionEnd: () => number;\n\n getCursorBounds: () => EditorRect;\n moveCursorNearTop: () => void;\n\n dispose: () => void;\n}\n","/*\n * spelling-realtime.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, MarkType } from 'prosemirror-model';\nimport { Plugin, PluginKey, EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { DecorationSet, EditorView, Decoration, DecorationAttrs } from 'prosemirror-view';\nimport { AddMarkStep, RemoveMarkStep } from 'prosemirror-transform';\nimport { ChangeSet } from 'prosemirror-changeset';\n\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { FocusEvent } from '../../api/event-types';\nimport { PandocMark } from '../../api/mark';\nimport {\n EditorUISpelling,\n EditorWordRange,\n kCharClassWord\n} from '../../api/spelling';\nimport { EditorEvents } from '../../api/events';\nimport { kAddToHistoryTransaction } from '../../api/transaction';\nimport { EditorUI, EditorMenuItem } from '../../api/ui';\n\nimport { excludedMarks, getWords, spellcheckerWord, findBeginWord, findEndWord, charAt } from './spelling';\n\nconst kUpdateSpellingTransaction = 'updateSpelling';\nconst kInvalidateSpellingWordTransaction = 'invalidateSpellingWord';\nconst kSpellingErrorClass = 'pm-spelling-error';\n\nconst realtimeSpellingKey = new PluginKey('spelling-realtime-plugin');\n\nexport function realtimeSpellingPlugin(\n schema: Schema,\n marks: readonly PandocMark[],\n ui: EditorUI,\n events: EditorEvents,\n) {\n return new RealtimeSpellingPlugin(excludedMarks(schema, marks), ui, events);\n}\n\nexport function invalidateAllWords(view: EditorView) {\n updateSpelling(view);\n}\n\nexport function invalidateWord(view: EditorView, word: string) {\n const tr = view.state.tr;\n tr.setMeta(kInvalidateSpellingWordTransaction, word);\n tr.setMeta(kAddToHistoryTransaction, false);\n view.dispatch(tr);\n}\n\nclass RealtimeSpellingPlugin extends Plugin {\n // track whether we've ever had the focus (don't do any spelling operations until then)\n private hasBeenFocused = true;\n\n private view: EditorView | null = null;\n private readonly ui: EditorUI;\n\n constructor(excluded: MarkType[], ui: EditorUI, events: EditorEvents) {\n super({\n key: realtimeSpellingKey,\n view: (view: EditorView) => {\n this.view = view;\n return {};\n },\n state: {\n init: (_config, state: EditorState) => {\n return DecorationSet.empty;\n },\n apply: (tr: Transaction, old: DecorationSet, oldState: EditorState, newState: EditorState) => {\n // if we somehow manage to get focus w/o our FocusEvent (below) being called then also\n // flip the hasBeenFocused bit here\n if (this.view?.hasFocus()) {\n this.hasBeenFocused = true;\n }\n\n // don't continue if either realtime spelling is disabled or we have never been focused\n if (!this.ui.spelling.realtimeEnabled() || !this.hasBeenFocused) {\n return DecorationSet.empty;\n }\n\n if (tr.getMeta(kUpdateSpellingTransaction)) {\n // explicit update request invalidates any existing decorations (this can happen when\n // we get focus for the very first time or when the main or secondary dictionaries change)\n return DecorationSet.create(newState.doc, spellingDecorations(newState, ui.spelling, excluded));\n } else if (tr.getMeta(kInvalidateSpellingWordTransaction)) {\n // for word invalidations we search through the decorations and remove words that match\n const word = tr.getMeta(kInvalidateSpellingWordTransaction) as string;\n\n // find decorations that have this word and remove them\n const wordDecos = old.find(undefined, undefined, spec => spec.word === word);\n\n // return decorators w/ those words removed\n return old.remove(wordDecos);\n } else if (tr.docChanged) {\n // perform an incremental update of spelling decorations (invalidate and re-scan\n // for decorations in changed ranges)\n\n // start w/ previous state\n let decos = old;\n\n // create change set from transaction\n let changeSet = ChangeSet.create(oldState.doc);\n changeSet = changeSet.addSteps(newState.doc, tr.mapping.maps);\n\n // collect ranges that had mark changes\n const markRanges: Array<{ from: number; to: number }> = [];\n for (const step of tr.steps) {\n if (step instanceof AddMarkStep || step instanceof RemoveMarkStep) {\n const markStep = step as any;\n markRanges.push({ from: markStep.from, to: markStep.to });\n }\n }\n\n // remove ranges = mark ranges + deleted ranges\n const removeRanges = markRanges.concat(\n changeSet.changes.map(change => ({ from: change.fromA, to: change.toA })),\n );\n\n // remove decorations from deleted ranges (expanding ranges to word boundaries)\n for (const range of removeRanges) {\n const fromPos = findBeginWord(oldState, range.from, ui.spelling.classifyCharacter);\n const toPos = findEndWord(oldState, range.to, ui.spelling.classifyCharacter);\n decos = decos.remove(decos.find(fromPos, toPos));\n }\n\n // map decoration positions to new document\n decos = decos.map(tr.mapping, tr.doc);\n\n // add ranges = mark ranges + inserted ranges\n const addRanges = markRanges.concat(\n changeSet.changes.map(change => ({ from: change.fromB, to: change.toB })),\n );\n\n // scan inserted ranges for spelling decorations (don't need to find word boundaries\n // b/c spellingDecorations already does that)\n for (const range of addRanges) {\n decos = decos.add(\n tr.doc,\n spellingDecorations(newState, ui.spelling, excluded, false, range.from - 1, range.to)\n );\n }\n\n // return decorators\n return decos;\n } else if (tr.selectionSet) {\n // if we had previously suppressed a decoration due to typing at the cursor, restore it\n // whenever the selection changes w/o the doc changing\n\n // start with previous state\n let decos = old;\n\n // find any special 'at cursor' errors\n const cursorDecos = decos.find(undefined, undefined, spec => !!spec.cursor);\n if (cursorDecos.length) {\n // there will only be one cursor, capture it's position then remove it\n const word = cursorDecos[0].spec.word as string;\n const { from, to } = cursorDecos[0];\n decos = decos.remove(cursorDecos);\n\n // add it back in as a real spelling error\n decos = decos.add(tr.doc, [Decoration.inline(from, to, { class: kSpellingErrorClass }, { word })]);\n }\n\n // return decorators\n return decos;\n } else {\n // no content or selection change, return old w/o mapping\n return old;\n }\n },\n },\n props: {\n decorations: (state: EditorState) => {\n return realtimeSpellingKey.getState(state);\n },\n handleDOMEvents: {\n contextmenu: spellingSuggestionContextMenuHandler(ui),\n },\n },\n });\n\n // save reference to ui\n this.ui = ui;\n\n // trigger update on first focus\n const focusUnsubscribe = events.subscribe(FocusEvent, () => {\n if (this.view) {\n focusUnsubscribe();\n this.hasBeenFocused = true;\n updateSpelling(this.view);\n\n // call a second time as no words will be cached initially, this simplifies the\n // need for threading a callback through the entire plugin system\n const v = this.view;\n setTimeout(() => updateSpelling(v), 5000);\n }\n });\n }\n}\n\nfunction spellingDecorations(\n state: EditorState,\n spelling: EditorUISpelling,\n excluded: MarkType[],\n excludeCursor = false,\n from = -1,\n to = -1,\n): Decoration[] {\n\n // a map of wordText -> [wordRange...]\n const rangeMap = new Map();\n\n // break words\n const words = getWords(state, from, to, spelling, excluded);\n\n // spell check and return decorations for misspellings\n const decorations: Decoration[] = [];\n\n // words to pass to the spellchecker\n const wordsToCheck: string[] = [];\n\n while (words.hasNext()) {\n const word = words.next()!;\n const wordText = state.doc.textBetween(word.start, word.end);\n\n const ranges = rangeMap.get(wordText) || [];\n ranges.push(word);\n rangeMap.set(wordText, ranges);\n\n wordsToCheck.push(spellcheckerWord(wordText));\n }\n\n const incorrectWords: string[] = spelling.checkWords(wordsToCheck);\n\n for (const incorrectWord of incorrectWords) {\n const ranges: EditorWordRange[] | undefined = rangeMap.get(incorrectWord);\n\n if (!!ranges) {\n for (const range of ranges) {\n const attrs: DecorationAttrs = {};\n const spec: { [key: string]: any } = {\n word: incorrectWord,\n };\n if (excludeCursor && state.selection.head > range.start && state.selection.head <= range.end) {\n spec.cursor = true;\n } else {\n attrs.class = kSpellingErrorClass;\n }\n decorations.push(Decoration.inline(range.start, range.end, attrs, spec));\n }\n }\n }\n\n return decorations;\n}\n\nfunction spellingSuggestionContextMenuHandler(ui: EditorUI) {\n return (view: EditorView, event: Event) => {\n if (!ui.display.showContextMenu) {\n return false;\n }\n\n // helper to create a menu action\n const menuAction = (text: string, action: VoidFunction) => {\n return {\n text,\n exec: () => {\n action();\n view.focus();\n },\n };\n };\n\n // helper to show a context menu and prevent further event handling\n const showContextMenu = (menuItems: EditorMenuItem[]) => {\n // show the menu\n const { clientX, clientY } = event as MouseEvent;\n ui.display.showContextMenu!(menuItems, clientX, clientY);\n };\n\n if (event.target && event.target instanceof Node) {\n // alias schema\n const schema = view.state.schema;\n\n // find the spelling decoration at this position (if any)\n const pos = view.posAtDOM(event.target, 0);\n const deco = realtimeSpellingKey.getState(view.state)!.find(pos, pos);\n if (deco.length) {\n // prevent default handling\n event.stopPropagation();\n event.preventDefault();\n\n // get word\n const { from, to } = deco[0];\n const word = spellcheckerWord(view.state.doc.textBetween(from, to));\n\n const kMaxSuggetions = 5;\n ui.spelling.suggestionList(word, (suggestions: string[]): void => {\n // create menu w/ suggestions\n const menuItems: EditorMenuItem[] = suggestions.slice(0, kMaxSuggetions).map(suggestion => {\n return {\n text: suggestion,\n exec: () => {\n const tr = view.state.tr;\n tr.setSelection(TextSelection.create(tr.doc, from, to));\n const marks = tr.selection.$from.marks();\n tr.replaceSelectionWith(schema.text(suggestion, marks), false);\n setTextSelection(from + suggestion.length)(tr);\n view.dispatch(tr);\n view.focus();\n },\n };\n });\n if (menuItems.length) {\n menuItems.push({ separator: true });\n }\n\n menuItems.push(menuAction(ui.context.translateText('Ignore All'), () => ui.spelling.ignoreWord(word)));\n menuItems.push({ separator: true });\n menuItems.push(\n menuAction(ui.context.translateText('Add to Dictionary'), () => ui.spelling.addToDictionary(word)),\n );\n\n // show context menu\n showContextMenu(menuItems);\n });\n\n return true;\n }\n\n // find the word at this position and see if it's ignored. if so provide an unignore context menu\n const classify = ui.spelling.classifyCharacter;\n const mouseEvent = event as MouseEvent;\n const clickPos = view.posAtCoords({ left: mouseEvent.clientX, top: mouseEvent.clientY });\n if (clickPos) {\n const ch = charAt(view.state.doc, clickPos.pos);\n if (classify(ch) === kCharClassWord) {\n const from = findBeginWord(view.state, clickPos.pos, classify);\n const to = findEndWord(view.state, clickPos.pos, classify);\n const word = spellcheckerWord(view.state.doc.textBetween(from, to));\n\n if (ui.spelling.isWordIgnored(word)) {\n // prevent default handling\n event.stopPropagation();\n event.preventDefault();\n\n showContextMenu([\n menuAction(`${ui.context.translateText('Unignore')} \\'${word}\\'`, () => ui.spelling.unignoreWord(word)),\n ]);\n return true;\n }\n }\n }\n }\n\n return false;\n };\n}\n\nfunction updateSpelling(view: EditorView) {\n const tr = view.state.tr;\n tr.setMeta(kUpdateSpellingTransaction, true);\n tr.setMeta(kAddToHistoryTransaction, false);\n view.dispatch(tr);\n}\n","/*\n * pandoc_converter.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport {\n PandocServer,\n PandocTokenReader,\n PandocNodeWriter,\n PandocMarkWriter,\n PandocPreprocessorFn,\n PandocBlockReaderFn,\n PandocPostprocessorFn,\n PandocInlineHTMLReaderFn,\n PandocWriterOptions,\n PandocTokensFilterFn,\n} from '../api/pandoc';\n\nimport { haveTableCellsWithInlineRcode } from '../api/rmd';\n\nimport { pandocFormatWith, PandocFormat, kGfmFormat, kCommonmarkFormat } from '../api/pandoc_format';\nimport { PandocCapabilities } from '../api/pandoc_capabilities';\nimport { PandocBlockCapsuleFilter, pandocMarkdownWithBlockCapsules } from '../api/pandoc_capsule';\n\nimport { ExtensionManager } from '../editor/editor-extensions';\n\nimport { pandocToProsemirror } from './pandoc_to_prosemirror';\nimport { pandocFromProsemirror } from './pandoc_from_prosemirror';\n\nexport type PandocLineWrapping = 'none' | 'column' | 'sentence';\n\nexport interface PandocToProsemirrorResult {\n doc: ProsemirrorNode;\n line_wrapping: PandocLineWrapping;\n unrecognized: string[];\n unparsed_meta: { [key: string]: any };\n}\n\nexport class PandocConverter {\n private readonly schema: Schema;\n private readonly preprocessors: readonly PandocPreprocessorFn[];\n private readonly postprocessors: readonly PandocPostprocessorFn[];\n private readonly readers: readonly PandocTokenReader[];\n private readonly tokensFilters: readonly PandocTokensFilterFn[];\n private readonly blockReaders: readonly PandocBlockReaderFn[];\n private readonly inlineHTMLReaders: readonly PandocInlineHTMLReaderFn[];\n private readonly blockCapsuleFilters: readonly PandocBlockCapsuleFilter[];\n private readonly nodeWriters: readonly PandocNodeWriter[];\n private readonly markWriters: readonly PandocMarkWriter[];\n private readonly pandoc: PandocServer;\n private readonly pandocCapabilities: PandocCapabilities;\n\n constructor(\n schema: Schema,\n extensions: ExtensionManager,\n pandoc: PandocServer,\n pandocCapabilities: PandocCapabilities,\n ) {\n this.schema = schema;\n\n this.preprocessors = extensions.pandocPreprocessors();\n this.postprocessors = extensions.pandocPostprocessors();\n this.readers = extensions.pandocReaders();\n this.tokensFilters = extensions.pandocTokensFilters();\n this.blockReaders = extensions.pandocBlockReaders();\n this.inlineHTMLReaders = extensions.pandocInlineHTMLReaders();\n this.blockCapsuleFilters = extensions.pandocBlockCapsuleFilters();\n this.nodeWriters = extensions.pandocNodeWriters();\n this.markWriters = extensions.pandocMarkWriters();\n\n this.pandoc = pandoc;\n this.pandocCapabilities = pandocCapabilities;\n }\n\n public async toProsemirror(markdown: string, format: PandocFormat): Promise {\n // save original markdown (for aligning capsule positions)\n const original = markdown;\n\n // adjust format. we always need to *read* raw_html, raw_attribute, and backtick_code_blocks b/c\n // that's how preprocessors hoist content through pandoc into our prosemirror token parser.\n // we always need to read with auto_identifiers so we can catch any auto-generated ids\n // required to fulfill links inside the document (we will strip out heading ids that\n // aren't explicit or a link target using the heading_ids returned with the ast). we also\n // disable 'smart' b/c that causes pandoc to insert non-breaking spaces before selected\n // abbreviations like e.g. rather, we do our own implementation of 'smart' when we read\n // PandocTokenType.Str from the ast\n\n // determine type of auto_ids\n const autoIds = format.extensions.gfm_auto_identifiers ? 'gfm_auto_identifiers' : 'auto_identifiers';\n const targetFormat = adjustedFormat(\n format.fullName,\n ['raw_html', 'raw_attribute', 'backtick_code_blocks', autoIds],\n ['smart'],\n );\n\n // run preprocessors\n this.preprocessors.forEach(preprocessor => {\n markdown = preprocessor(markdown);\n });\n\n // create source capsules\n this.blockCapsuleFilters.forEach(filter => {\n markdown = pandocMarkdownWithBlockCapsules(original, markdown, filter);\n });\n\n const ast = await this.pandoc.markdownToAst(markdown, targetFormat, []);\n const result = pandocToProsemirror(\n ast,\n this.schema,\n format.extensions,\n this.readers,\n this.tokensFilters,\n this.blockReaders,\n this.inlineHTMLReaders,\n this.blockCapsuleFilters,\n );\n\n // run post-processors\n this.postprocessors.forEach(postprocessor => {\n result.doc = postprocessor(result.doc);\n });\n\n // return the doc\n return result;\n }\n\n // NOTE: For a plain markdown file, this is the closest we can come to cannonicalizing w/ just pandoc:\n //\n // pandoc MANUAL.md --to markdown-auto_identifiers-smart -o MANUAL.md --self-contained --atx-headers --wrap=none\n //\n // For R Mardown files, we would need to pull out the Rmd chunks before sending to pandoc.\n //\n\n public async fromProsemirror(\n doc: ProsemirrorNode,\n pandocFormat: PandocFormat,\n options: PandocWriterOptions,\n ): Promise {\n // generate pandoc ast\n const output = pandocFromProsemirror(\n doc,\n this.pandocCapabilities.api_version,\n pandocFormat,\n this.nodeWriters,\n this.markWriters,\n );\n\n // adjust format. we always need to be able to write raw_attribute b/c that's how preprocessors\n // hoist content through pandoc into our prosemirror token parser. since we open this door when\n // reading, users could end up writing raw inlines, and in that case we want them to echo back\n // to the source document just the way they came in. for writing markdown from pm we don't\n // ever want to generate auto identifiers so we disable them here. we also disable smart b/c\n // we do this manually above in pandocFromProsemirror (so we can avoid pandoc's insertion of\n // nbsp's after abbreviations, which is more approriate for final output than editing)\n let format = adjustedFormat(\n pandocFormat.fullName,\n ['raw_html', 'raw_attribute'], // always enable\n ['auto_identifiers', 'gfm_auto_identifiers', 'smart'],\n ); // always disable\n\n // disable selected format options\n format = pandocFormatWith(format, disabledFormatOptions(format, doc), '');\n\n // prepare pandoc options\n let pandocOptions: string[] = [];\n if (!options.atxHeaders) {\n pandocOptions.push('--markdown-headings=setext');\n }\n if (options.dpi) {\n pandocOptions.push('--dpi');\n }\n // default to block level references (validate known types)\n let referenceLocation = 'block';\n if (options.references?.location) {\n referenceLocation = ['block', 'section', 'document'].includes(options.references.location)\n ? options.references.location\n : 'block';\n }\n pandocOptions.push(`--reference-location=${referenceLocation}`);\n\n // references prefix (if any)\n if (options.references?.prefix) {\n pandocOptions.push('--id-prefix', options.references.prefix);\n }\n\n // provide wrap options\n pandocOptions = pandocOptions.concat(wrapOptions(options));\n\n // render to markdown\n const markdown = await this.pandoc.astToMarkdown(output.ast, format, pandocOptions);\n\n // normalize newlines (don't know if pandoc uses \\r\\n on windows)\n return markdown.replace(/\\r\\n|\\n\\r|\\r/g, '\\n');\n }\n}\n\n// adjust the specified format\nfunction adjustedFormat(format: string, extensions: string[], disabled: string[]) {\n let newFormat = pandocFormatWith(\n format,\n '',\n extensions.map(ext => `+${ext}`).join('') + disabled.map(ext => `-${ext}`).join(''),\n );\n\n // any extension specified needs to not have a - anywhere in the format\n extensions.forEach(ext => {\n newFormat = newFormat.replace('-' + ext, '');\n });\n\n return newFormat;\n}\n\nfunction disabledFormatOptions(format: string, doc: ProsemirrorNode) {\n // (prefer pipe and grid tables). users can still force the availability of these by\n // adding those format flags but all known markdown variants that support tables also\n // support pipe tables so this seems unlikely to ever be required.\n let disabledTableTypes = '-simple_tables-multiline_tables';\n\n // if there are tables with inline R code then disable grid tables (as the inline\n // R code will mess up the column boundaries)\n if (haveTableCellsWithInlineRcode(doc)) {\n disabledTableTypes += '-grid_tables';\n }\n\n // gfm and commonmark variants don't allow simple/multiline/grid tables (just pipe tables)\n // and it's an error to even include these in the markdown format specifier -- so for\n // these modes we just nix the disabling\n if (format.startsWith(kGfmFormat) || format.startsWith(kCommonmarkFormat)) {\n disabledTableTypes = '';\n }\n\n // return\n return disabledTableTypes;\n}\n\nfunction wrapOptions(options: PandocWriterOptions) {\n const pandocOptions: string[] = [];\n if (options.wrap) {\n if (options.wrap === 'none' || options.wrap === 'sentence') {\n pandocOptions.push('--wrap=none');\n } else {\n const column = parseInt(options.wrap, 10);\n if (column) {\n pandocOptions.push('--wrap=auto');\n pandocOptions.push(`--columns=${column}`);\n } else {\n pandocOptions.push('--wrap=none');\n }\n }\n } else {\n pandocOptions.push('--wrap=none');\n }\n return pandocOptions;\n}\n","/*\n * pandoc_capsule.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\n\nimport { base64Encode, base64Decode } from './base64';\n\nimport { PandocToken, ProsemirrorWriter, mapTokens, PandocTokenType } from './pandoc';\n\n// constants used for creating/consuming capsules\nconst kFieldDelimiter = '\\n';\nconst kValueDelimiter = ':';\nconst kTypeField = 'type';\nconst kPositionField = 'position';\nconst kPrefixField = 'prefix';\nconst kSourceField = 'source';\nconst kSuffixField = 'suffix';\nconst kBlockCapsuleSentinel = '31B8E172-B470-440E-83D8-E6B185028602'.toLowerCase();\n\n// block capsule\nexport interface PandocBlockCapsule {\n type: string;\n position: number;\n prefix: string;\n source: string;\n suffix: string;\n}\n\n// preserve block source code through markdown parsing (e.g. for yaml metadata or rmd chunks).\n// block capsules remove markdown from the document before pandoc parses it (placing it into\n// a base64 encoded 'capsule'), then unwraps the capsule from the AST. All of this is done\n// by the function in this interface.\nexport interface PandocBlockCapsuleFilter {\n // unique type id for this capsule\n type: string;\n\n // regex that matches a prefix (match[1]), the source to preserve (match[2]), and a suffix (match[3])\n // we need the prefix/suffix for the cases where the preserved source needs to be put back exactly\n // where it came from (e.g. in a multi-line html comment). we also need it to fixup indentation in\n // cases where capsules are unwrapped within a code block or raw block. the prefix and suffix\n // must begin and end (respectively) with newlines, and consist entirely of whitespace (e.g. leading\n // space for indented block or incidental whitespace after block delimiter)\n match: RegExp;\n\n // optional seconary filter expression (applied to a successful match to ensure\n // that matching wasn't overly greedy)\n discard?: RegExp;\n\n // custom function for pulling out the 3 parts from a match (defaults to p1,p2,p3)\n extract?: (\n match: string,\n p1: string,\n p2: string,\n p3: string,\n p4: string,\n ) => { prefix: string; source: string; suffix: string };\n\n // provide a (text) envelope around the capsule, e.g.\n // - newlines to ensure that yaml is parsed as a standalone paragraph;\n // - backticks to ensure an Rmd is structurally parsed by pandoc as a codeblock\n enclose: (capsuleText: string, capsule: PandocBlockCapsule) => string;\n\n // examine a piece of text from within the pandoc ast and, if approproate, substitute any\n // capsules of my type for the original text (otherwise just return the passed string).\n // this method will generally use encodedBlockCapsuleRegex to create a regex to search\n // with, then upon finding a capsule, will unpack it with parsePandocBlockCapsule, compare\n // the type against our own type, and in the case they match do the substitution.\n handleText: (text: string, tok: PandocToken) => string;\n\n // do you want to handle this token as a capsule object? if so return the capsule text\n // (only the filter will know how to extract it from a pandoc token b/c it knows\n // where it was parsed from and what happened in the 'enclose' method)\n handleToken: (tok: PandocToken) => string | null;\n\n // write a capsule as a pandoc node\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => void;\n}\n\n// transform the passed markdown to include base64 encoded block capsules as specified by the\n// provided capsule filter. capsules are used to hoist block types that we don't want pandoc\n// to see (e.g. yaml metadata or Rmd chunks) out of the markdown, only to be re-inserted\n// after pandoc has yielded an ast. block capsules are a single base64 encoded pieced of\n// text that include the original content, the matched prefix and suffix, and a type\n// identifier for orchestrating the unpacking.\nexport function pandocMarkdownWithBlockCapsules(\n original: string,\n markdown: string,\n capsuleFilter: PandocBlockCapsuleFilter,\n) {\n // default extractor\n const defaultExtractor = (match: string, p1: string, p2: string, p3: string) => {\n return {\n prefix: p1,\n source: p2,\n suffix: p3,\n };\n };\n\n // find the original position of all the matches\n const positions: number[] = [];\n let match = capsuleFilter.match.exec(original);\n while (match != null) {\n positions.push(match.index);\n match = capsuleFilter.match.exec(original);\n }\n\n // reset capsule filter match index\n capsuleFilter.match.lastIndex = 0;\n\n // replace all w/ source preservation capsules\n return markdown.replace(capsuleFilter.match, (match: string, p1: string, p2: string, p3: string, p4: string) => {\n // read the original position of the match\n let position = 0;\n const originalPos = positions.shift();\n if (originalPos) {\n position = originalPos;\n }\n\n // if the capsuleFilter has a discard expression then check it\n if (capsuleFilter.discard && !!match.match(capsuleFilter.discard)) {\n return match;\n }\n\n // extract matches\n const extract = capsuleFilter.extract || defaultExtractor;\n const { prefix, source, suffix } = extract(match, p1, p2, p3, p4);\n\n // make the capsule\n const capsule: PandocBlockCapsule = {\n [kTypeField]: capsuleFilter.type,\n [kPositionField]: position,\n [kPrefixField]: prefix,\n [kSourceField]: source,\n [kSuffixField]: suffix,\n };\n\n // construct a field\n const field = (name: string, value: string) => `${name}${kValueDelimiter}${base64Encode(value)}`;\n\n // construct a record\n const record =\n field(kTypeField, capsule.type) +\n kFieldDelimiter +\n field(kPositionField, capsule.position.toString()) +\n kFieldDelimiter +\n field(kPrefixField, capsule.prefix) +\n kFieldDelimiter +\n field(kSourceField, capsule.source) +\n kFieldDelimiter +\n field(kSuffixField, capsule.suffix);\n\n // now base64 encode the entire record (so it can masquerade as a paragraph)\n const encodedRecord = base64Encode(record);\n\n // return capsule, which is:\n // - a base64 encoded record surrounded with a sentinel value\n // - enclosed in a filter specific envelope (used to influence pandoc parsing),\n // - surrounded by the original prefix and suffix\n return (\n prefix +\n capsuleFilter.enclose(\n `${kBlockCapsuleSentinel}${kValueDelimiter}${encodedRecord}${kValueDelimiter}${kBlockCapsuleSentinel}`,\n capsule,\n ) +\n suffix\n );\n });\n}\n\n// block capsules can also end up not as block tokens, but rather as text within another\n// token (e.g. within a backtick code block or raw_block). this function takes a set\n// of pandoc tokens and recursively converts block capsules that aren't of type\n// PandocTokenType.Str (which is what we'd see in a paragraph) into their original form\nexport function resolvePandocBlockCapsuleText(\n tokens: PandocToken[],\n filters: readonly PandocBlockCapsuleFilter[],\n): PandocToken[] {\n // process all tokens\n return mapTokens(tokens, token => {\n // look for non-string pandoc tokens\n if (token.t !== PandocTokenType.Str && token.c) {\n if (typeof token.c === 'string') {\n token.c = decodeBlockCapsuleText(token.c, token, filters);\n } else if (Array.isArray(token.c)) {\n const children = token.c.length;\n for (let i = 0; i < children; i++) {\n if (typeof token.c[i] === 'string') {\n token.c[i] = decodeBlockCapsuleText(token.c[i], token, filters);\n }\n }\n }\n }\n\n return token;\n });\n}\n\n// decode the text capsule by running all of the filters (as there could be nesting)\nexport function decodeBlockCapsuleText(text: string, tok: PandocToken, filters: readonly PandocBlockCapsuleFilter[]) {\n filters.forEach(filter => {\n text = filter.handleText(text, tok);\n });\n return text;\n}\n\nexport function blockCapsuleTextHandler(type: string, pattern: RegExp, textFilter?: (text: string) => string) {\n return (text: string, tok: PandocToken): string => {\n // if this is a code block or raw block then we need to strip the prefix\n // (b/c it could in a blockquote or indented in a list)\n const stripPrefix = tok.t === PandocTokenType.CodeBlock || tok.t === PandocTokenType.RawBlock;\n\n // replace text\n return text.replace(pattern, match => {\n const capsuleText = textFilter ? textFilter(match) : match;\n const capsule = parsePandocBlockCapsule(capsuleText);\n if (capsule.type === type) {\n if (stripPrefix) {\n return blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\n } else {\n return capsule.source;\n }\n } else {\n return match;\n }\n });\n };\n}\n\n// token handler that looks for a paragraph token consisting entirely of a block capsule of our type.\n// if we find that then return the block capsule text\nexport function blockCapsuleParagraphTokenHandler(type: string) {\n const tokenRegex = encodedBlockCapsuleRegex('^', '$');\n return (tok: PandocToken) => {\n if (tok.t === PandocTokenType.Para) {\n if (tok.c.length === 1 && tok.c[0].t === PandocTokenType.Str) {\n const text = tok.c[0].c as string;\n const match = text.match(tokenRegex);\n if (match) {\n const capsuleRecord = parsePandocBlockCapsule(match[0]);\n if (capsuleRecord.type === type) {\n return match[0];\n }\n }\n }\n }\n return null;\n };\n}\n\n// create a regex that can be used to match a block capsule\nexport function encodedBlockCapsuleRegex(prefix?: string, suffix?: string, flags?: string) {\n return new RegExp(\n (prefix || '') +\n kBlockCapsuleSentinel +\n kValueDelimiter +\n '((?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?)' +\n kValueDelimiter +\n kBlockCapsuleSentinel +\n (suffix || ''),\n flags,\n );\n}\n\n// remove encoding envelope then parse the remaining text into a block capsule\nexport function parsePandocBlockCapsule(text: string): PandocBlockCapsule {\n const envelopeLen = kBlockCapsuleSentinel.length + kFieldDelimiter.length;\n const record = text.substring(envelopeLen, text.length - envelopeLen);\n const decodedRecord = base64Decode(record);\n const fields = decodedRecord.split(kFieldDelimiter);\n const fieldValue = (i: number) => base64Decode(fields[i].split(kValueDelimiter)[1]);\n return {\n [kTypeField]: fieldValue(0),\n [kPositionField]: parseInt(fieldValue(1), 10),\n [kPrefixField]: fieldValue(2),\n [kSourceField]: fieldValue(3),\n [kSuffixField]: fieldValue(4),\n };\n}\n\n// provide a version of the block capsule source with the prefix removed\n// from all but the very first line. this allows us to restore the text\n// to the level of indentation implied by the markdown (as opposed to the\n// level found literally in the source file)\nexport function blockCapsuleSourceWithoutPrefix(source: string, prefix: string) {\n // prefix represents the indentation level of the block's source code, strip that\n // same prefix from all the lines of code save for the first one\n const prefixStripRegEx = new RegExp('^' + prefix);\n const lines = source.split('\\n').map((line, index) => {\n return index > 0 ? line.replace(prefixStripRegEx, '') : line;\n });\n return lines.join('\\n');\n}\n","/*\n * base_64.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\n// btoa and atob don't handle unicode strings, see\n// https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/btoa#Unicode_strings\n\n// these functions implement the suggested workaround ()\n\nexport function base64Encode(text: string) {\n const binary = toBinary(text);\n return window.btoa(binary);\n}\n\nexport function base64Decode(encoded: string) {\n const decoded = atob(encoded);\n return fromBinary(decoded);\n}\n\n// convert a Unicode string to a string in which each 16-bit unit occupies only one byte\nfunction toBinary(text: string) {\n const codeUnits = new Uint16Array(text.length);\n for (let i = 0; i < codeUnits.length; i++) {\n codeUnits[i] = text.charCodeAt(i);\n }\n const charCodes = Array.from(new Uint8Array(codeUnits.buffer)).map(code => String.fromCharCode(code));\n return charCodes.join('');\n}\n\n// reverse the conversion\nfunction fromBinary(binary: string) {\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n const charCodes = Array.from(new Uint16Array(bytes.buffer)).map(code => String.fromCharCode(code));\n return charCodes.join('');\n}\n","/*\n * pandoc_to_prosemirror.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Mark, Node as ProsemirrorNode, NodeType, Schema } from 'prosemirror-model';\n\nimport {\n PandocTokenReader,\n PandocToken,\n PandocAst,\n ProsemirrorWriter,\n PandocBlockReaderFn,\n PandocInlineHTMLReaderFn,\n PandocTokensFilterFn,\n PandocTokenType,\n mapTokens,\n stringifyTokens,\n PandocExtensions,\n forEachToken,\n} from '../api/pandoc';\nimport {\n pandocAttrReadAST,\n kCodeBlockAttr,\n kCodeBlockText,\n kPandocAttrClasses,\n kPandocAttrKeyvalue,\n} from '../api/pandoc_attr';\nimport {\n PandocBlockCapsuleFilter,\n parsePandocBlockCapsule,\n resolvePandocBlockCapsuleText,\n decodeBlockCapsuleText,\n} from '../api/pandoc_capsule';\n\nimport { PandocToProsemirrorResult, PandocLineWrapping } from './pandoc_converter';\nimport { kLinkTarget, kLinkTargetUrl, kLinkChildren, kLinkAttr, kLinkTargetTitle } from '../api/link';\nimport { kHeadingAttr, kHeadingLevel, kHeadingChildren } from '../api/heading';\nimport { pandocAutoIdentifier, gfmAutoIdentifier } from '../api/pandoc_id';\nimport { equalsIgnoreCase } from '../api/text';\nimport { hasShortcutHeadingLinks } from '../api/pandoc_format';\n\nexport function pandocToProsemirror(\n ast: PandocAst,\n schema: Schema,\n extensions: PandocExtensions,\n readers: readonly PandocTokenReader[],\n tokensFilters: readonly PandocTokensFilterFn[],\n blockReaders: readonly PandocBlockReaderFn[],\n inlineHTMLReaders: readonly PandocInlineHTMLReaderFn[],\n blockCapsuleFilters: readonly PandocBlockCapsuleFilter[],\n): PandocToProsemirrorResult {\n const parser = new Parser(\n schema,\n extensions,\n readers,\n tokensFilters,\n blockReaders,\n inlineHTMLReaders,\n blockCapsuleFilters,\n );\n return parser.parse(ast);\n}\n\nclass Parser {\n private readonly schema: Schema;\n private readonly extensions: PandocExtensions;\n private readonly tokensFilters: readonly PandocTokensFilterFn[];\n private readonly inlineHTMLReaders: readonly PandocInlineHTMLReaderFn[];\n private readonly blockCapsuleFilters: readonly PandocBlockCapsuleFilter[];\n private readonly handlers: { [token: string]: ParserTokenHandlerCandidate[] };\n\n constructor(\n schema: Schema,\n extensions: PandocExtensions,\n readers: readonly PandocTokenReader[],\n tokensFilters: readonly PandocTokensFilterFn[],\n blockReaders: readonly PandocBlockReaderFn[],\n inlineHTMLReaders: readonly PandocInlineHTMLReaderFn[],\n blockCapsuleFilters: readonly PandocBlockCapsuleFilter[],\n ) {\n this.schema = schema;\n this.extensions = extensions;\n this.tokensFilters = tokensFilters;\n this.inlineHTMLReaders = inlineHTMLReaders;\n // apply block capsule filters in reverse order\n this.blockCapsuleFilters = blockCapsuleFilters.slice().reverse();\n this.handlers = this.createHandlers(readers, blockReaders);\n }\n\n public parse(ast: PandocAst) {\n // create state\n const state: ParserState = new ParserState(this.schema);\n // create writer (compose state w/ writeTokens function)\n const parser = this;\n const writer: ProsemirrorWriter = {\n openNode: state.openNode.bind(state),\n closeNode: state.closeNode.bind(state),\n openNoteNode: state.openNoteNode.bind(state),\n addNode: state.addNode.bind(state),\n openMark: state.openMark.bind(state),\n closeMark: state.closeMark.bind(state),\n writeText: state.writeText.bind(state),\n hasInlineHTMLWriter(html: string) {\n return parser.hasInlineHTMLWriter(html);\n },\n writeInlineHTML(html: string) {\n return parser.writeInlineHTML(this, html);\n },\n writeTokens(tokens: PandocToken[]) {\n parser.writeTokens(this, tokens);\n },\n logUnrecognized: state.logUnrecognized.bind(state),\n isNodeOpen: state.isNodeOpen.bind(state),\n };\n\n // process raw text capsules\n let targetAst = {\n ...ast,\n blocks: resolvePandocBlockCapsuleText(ast.blocks, this.blockCapsuleFilters),\n };\n\n // detect line wrapping\n const lineWrapping = detectLineWrapping(targetAst);\n\n // resolve heading ids\n targetAst = resolveHeadingIds(targetAst, this.extensions);\n\n // write all tokens\n writer.writeTokens(targetAst.blocks);\n\n // return\n return {\n doc: state.doc(),\n line_wrapping: lineWrapping,\n unrecognized: state.unrecognized(),\n unparsed_meta: ast.meta,\n };\n }\n\n private writeTokens(writer: ProsemirrorWriter, tokens: PandocToken[]) {\n // pass through tokens filters\n let targetTokens = tokens;\n this.tokensFilters.forEach(filter => {\n targetTokens = filter(targetTokens, writer);\n });\n\n // process tokens\n targetTokens.forEach(tok => this.writeToken(writer, tok));\n }\n\n private writeToken(writer: ProsemirrorWriter, tok: PandocToken) {\n // process block-level capsules\n for (const filter of this.blockCapsuleFilters) {\n const capsuleText = filter.handleToken?.(tok);\n if (capsuleText) {\n const blockCapsule = parsePandocBlockCapsule(capsuleText);\n // run all of the text filters in case there was nesting\n blockCapsule.source = decodeBlockCapsuleText(blockCapsule.source, tok, this.blockCapsuleFilters);\n filter.writeNode(this.schema, writer, blockCapsule);\n return;\n }\n }\n\n // look for a handler.match function that wants to handle this token\n const handlers = this.handlers[tok.t] || [];\n for (const handler of handlers) {\n // It's not enough for a pandoc reader's preferred token to match the\n // current token; it's possible based on the `match` method for the\n // reader to decline to handle it.\n if (handler.match && handler.match(tok)) {\n handler.handler(writer, tok);\n return;\n }\n }\n\n // if we didn't find one, look for the default handler\n for (const handler of handlers) {\n if (!handler.match) {\n handler.handler(writer, tok);\n return;\n }\n }\n\n // log unrecognized token\n writer.logUnrecognized(tok.t);\n }\n\n private hasInlineHTMLWriter(html: string) {\n for (const reader of this.inlineHTMLReaders) {\n if (reader(this.schema, html)) {\n return true;\n }\n }\n return false;\n }\n\n private writeInlineHTML(writer: ProsemirrorWriter, html: string) {\n for (const reader of this.inlineHTMLReaders) {\n if (reader(this.schema, html, writer)) {\n return;\n }\n }\n }\n\n // create parser token handler functions based on the passed readers\n private createHandlers(readers: readonly PandocTokenReader[], blockReaders: readonly PandocBlockReaderFn[]) {\n const handlers: { [token: string]: ParserTokenHandlerCandidate[] } = {};\n\n for (const reader of readers) {\n // resolve children (provide default impl)\n const getChildren = reader.getChildren || ((tok: PandocToken) => tok.c);\n\n // resolve getAttrs (provide default imple)\n const getAttrs = reader.getAttrs ? reader.getAttrs : (tok: PandocToken) => ({});\n\n let handler: ParserTokenHandler;\n\n // see if there is a low-level handler\n if (reader.handler) {\n handler = reader.handler(this.schema);\n }\n\n // text\n else if (reader.text) {\n handler = (writer: ProsemirrorWriter, tok: PandocToken) => {\n if (reader.getText) {\n const text = reader.getText(tok);\n writer.writeText(text);\n }\n };\n\n // marks\n } else if (reader.mark) {\n handler = (writer: ProsemirrorWriter, tok: PandocToken) => {\n const markType = this.schema.marks[reader.mark as string];\n const mark = markType.create(getAttrs(tok));\n writer.openMark(mark);\n if (reader.getText) {\n writer.writeText(reader.getText(tok));\n } else {\n writer.writeTokens(getChildren(tok));\n }\n writer.closeMark(mark);\n };\n\n // blocks\n } else if (reader.block) {\n const nodeType = this.schema.nodes[reader.block];\n handler = (writer: ProsemirrorWriter, tok: PandocToken) => {\n // give the block readers first crack (e.g. handle a paragraph node with\n // a single image as a figure node)\n for (const blockReader of blockReaders) {\n if (blockReader(this.schema, tok, writer)) {\n return;\n }\n }\n\n writer.openNode(nodeType, getAttrs(tok));\n if (reader.getText) {\n writer.writeText(reader.getText(tok));\n } else {\n writer.writeTokens(getChildren(tok));\n }\n writer.closeNode();\n };\n\n // nodes\n } else if (reader.node) {\n const nodeType = this.schema.nodes[reader.node];\n handler = (writer: ProsemirrorWriter, tok: PandocToken) => {\n if (reader.getChildren) {\n writer.openNode(nodeType, getAttrs(tok));\n writer.writeTokens(getChildren(tok));\n writer.closeNode();\n } else {\n let content: ProsemirrorNode[] = [];\n if (reader.getText) {\n content = [this.schema.text(reader.getText(tok))];\n }\n writer.addNode(nodeType, getAttrs(tok), content);\n }\n };\n\n // code blocks\n } else if (reader.code_block) {\n handler = (writer: ProsemirrorWriter, tok: PandocToken) => {\n // type/attr/text\n const nodeType = this.schema.nodes.code_block;\n const attr: {} = pandocAttrReadAST(tok, kCodeBlockAttr);\n const text = tok.c[kCodeBlockText] as string;\n\n // write node\n writer.openNode(nodeType, attr);\n writer.writeText(text);\n writer.closeNode();\n };\n } else {\n throw new Error('pandoc reader was malformed or unrecognized');\n }\n\n // Ensure an array exists\n handlers[reader.token] = handlers[reader.token] || [];\n\n handlers[reader.token].push({\n match: reader.match,\n handler,\n });\n }\n return handlers;\n }\n}\n\nclass ParserState {\n private readonly schema: Schema;\n private readonly stack: ParserStackElement[];\n private readonly notes: ProsemirrorNode[];\n private marks: Mark[];\n private footnoteNumber: number;\n private unrecognizedTokens: string[];\n\n constructor(schema: Schema) {\n this.schema = schema;\n this.stack = [{ type: this.schema.nodes.body, attrs: {}, content: [] }];\n this.notes = [];\n this.marks = Mark.none;\n this.footnoteNumber = 1;\n this.unrecognizedTokens = [];\n }\n\n public doc(): ProsemirrorNode {\n const content: ProsemirrorNode[] = [];\n content.push(this.top().type.createAndFill(null, this.top().content) as ProsemirrorNode);\n content.push(this.schema.nodes.notes.createAndFill(null, this.notes) as ProsemirrorNode);\n return this.schema.topNodeType.createAndFill({}, content) as ProsemirrorNode;\n }\n\n public unrecognized(): string[] {\n return this.unrecognizedTokens;\n }\n\n public writeText(text: string) {\n if (!text) {\n return;\n }\n const nodes: ProsemirrorNode[] = this.top().content;\n const last: ProsemirrorNode = nodes[nodes.length - 1];\n const node: ProsemirrorNode = this.schema.text(text, this.marks);\n const merged: ProsemirrorNode | undefined = this.maybeMerge(last, node);\n if (last && merged) {\n nodes[nodes.length - 1] = merged;\n } else {\n nodes.push(node);\n }\n }\n\n public addNode(type: NodeType, attrs: {}, content: ProsemirrorNode[]) {\n const node: ProsemirrorNode | null | undefined = type.createAndFill(attrs, content, this.marks);\n if (!node) {\n return null;\n }\n if (this.stack.length) {\n if (type === this.schema.nodes.note) {\n this.notes.push(node);\n } else {\n this.top().content.push(node);\n }\n }\n return node;\n }\n\n public openNode(type: NodeType, attrs: {}) {\n this.stack.push({ type, attrs, content: [] });\n }\n\n public closeNode(): ProsemirrorNode {\n // get node info\n const info: ParserStackElement = this.stack.pop() as ParserStackElement;\n\n // clear marks if the node type isn't inline\n if (!info.type.isInline) {\n if (this.marks.length) {\n this.marks = Mark.none;\n }\n }\n\n return this.addNode(info.type, info.attrs, info.content) as ProsemirrorNode;\n }\n\n public openMark(mark: Mark) {\n this.marks = mark.addToSet(this.marks);\n }\n\n public closeMark(mark: Mark) {\n this.marks = mark.removeFromSet(this.marks);\n }\n\n public openNoteNode(ref: string) {\n this.openNode(this.schema.nodes.note, { ref, number: this.footnoteNumber++ });\n }\n\n public logUnrecognized(type: string) {\n if (!this.unrecognizedTokens.includes(type)) {\n this.unrecognizedTokens.push(type);\n }\n }\n\n public isNodeOpen(type: NodeType) {\n return this.stack.some(value => value.type === type);\n }\n\n private top(): ParserStackElement {\n return this.stack[this.stack.length - 1];\n }\n\n private maybeMerge(a: ProsemirrorNode, b: ProsemirrorNode): ProsemirrorNode | undefined {\n if (a && a.isText && b.isText && Mark.sameSet(a.marks, b.marks)) {\n return this.schema.text(((a.text as string) + b.text) as string, a.marks);\n } else {\n return undefined;\n }\n }\n}\n\n// determine what sort of line wrapping is used within the file\nfunction detectLineWrapping(ast: PandocAst): PandocLineWrapping {\n // look for soft breaks and classify them as column or sentence breaks\n let columnBreaks = 0;\n let sentenceBreaks = 0;\n let prevTok: PandocToken = { t: PandocTokenType.Null };\n forEachToken(ast.blocks, tok => {\n if (tok.t === PandocTokenType.SoftBreak) {\n if (\n prevTok.t === PandocTokenType.Str &&\n typeof prevTok.c === 'string' &&\n ['.', '?', '!'].includes(prevTok.c.charAt(prevTok.c.length - 1))\n ) {\n sentenceBreaks++;\n } else {\n columnBreaks++;\n }\n }\n prevTok = tok;\n });\n\n // need to have > 5 line breaks or more line breaks than blocks to trigger detection\n // (prevents 'over-detection' if there are stray few soft breaks)\n const lineBreaks = columnBreaks + sentenceBreaks;\n if (lineBreaks > 5 || lineBreaks > ast.blocks.length) {\n if (sentenceBreaks > columnBreaks) {\n return 'sentence';\n } else {\n return 'column';\n }\n } else {\n return 'none';\n }\n}\n\n// determine which heading ids are valid based on explicit headings contained in the\n// document and any headings targeted by links. remove any heading ids not so identified\nfunction resolveHeadingIds(ast: PandocAst, extensions: PandocExtensions) {\n // determine function we will use to create auto-identifiers\n const autoIdentifier = extensions.gfm_auto_identifiers ? gfmAutoIdentifier : pandocAutoIdentifier;\n\n // start with ids we know are valid (i.e. ones the user added to the doc)\n const headingIds = new Set((ast.heading_ids || []).map(id => id.toLocaleLowerCase()));\n\n // find ids referenced in links\n let astBlocks = mapTokens(ast.blocks, tok => {\n if (tok.t === PandocTokenType.Link) {\n const target = tok.c[kLinkTarget];\n const href = target[kLinkTargetUrl] as string;\n if (href.startsWith('#')) {\n // if we have support for implicit header references and shortcut reference links,\n // also check to see whether the link text resolves to the target (in that case\n // we don't need the explicit id). note that if that heading has an explicit\n // id defined then we also leave it alone.\n const text = stringifyTokens(tok.c[kLinkChildren], extensions.gfm_auto_identifiers);\n if (\n hasShortcutHeadingLinks(extensions) &&\n equalsIgnoreCase('#' + autoIdentifier(text, extensions.ascii_identifiers), href) &&\n !headingIds.has(href.toLocaleLowerCase())\n ) {\n // return a version of the link w/o the target\n return {\n t: PandocTokenType.Link,\n c: [tok.c[kLinkAttr], tok.c[kLinkChildren], ['#', tok.c[kLinkTarget][kLinkTargetTitle]]],\n };\n\n // otherwise note that it's a valid id\n } else {\n headingIds.add(href.toLocaleLowerCase());\n }\n }\n }\n // default to return token unmodified\n return tok;\n });\n\n // remove any heading ids not created by the user or required by a link\n astBlocks = mapTokens(ast.blocks, tok => {\n if (tok.t === PandocTokenType.Header) {\n const attr = pandocAttrReadAST(tok, kHeadingAttr);\n if (attr.id && !headingIds.has('#' + attr.id.toLocaleLowerCase())) {\n return {\n t: PandocTokenType.Header,\n c: [\n tok.c[kHeadingLevel],\n ['', tok.c[kHeadingAttr][kPandocAttrClasses], tok.c[kHeadingAttr][kPandocAttrKeyvalue]],\n tok.c[kHeadingChildren],\n ],\n };\n }\n }\n // default to just reflecting back the token\n return tok;\n });\n\n // return the ast\n return {\n ...ast,\n blocks: astBlocks,\n heading_ids: undefined,\n };\n}\n\ninterface ParserStackElement {\n type: NodeType;\n attrs: {};\n content: ProsemirrorNode[];\n}\n\ntype ParserTokenHandler = (writer: ProsemirrorWriter, tok: PandocToken) => void;\n\ninterface ParserTokenHandlerCandidate {\n match?: (tok: PandocToken) => boolean;\n handler: ParserTokenHandler;\n}\n","/*\n * pandoc_from_prosemirror.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Fragment, MarkType, Mark } from 'prosemirror-model';\n\nimport {\n PandocAst,\n PandocToken,\n PandocOutput,\n PandocNodeWriterFn,\n PandocNodeWriter,\n PandocMarkWriter,\n PandocApiVersion,\n PandocTokenType,\n PandocOutputOption,\n PandocExtensions,\n marksByPriority,\n} from '../api/pandoc';\n\nimport { PandocFormat, kGfmFormat } from '../api/pandoc_format';\nimport { PandocAttr } from '../api/pandoc_attr';\nimport { fragmentText } from '../api/fragment';\nimport { fancyQuotesToSimple } from '../api/quote';\n\nexport function pandocFromProsemirror(\n doc: ProsemirrorNode,\n apiVersion: PandocApiVersion,\n format: PandocFormat,\n nodeWriters: readonly PandocNodeWriter[],\n markWriters: readonly PandocMarkWriter[],\n) {\n const bodyNode = doc.child(0);\n const notesNode = doc.child(1);\n const writer = new PandocWriter(apiVersion, format, nodeWriters, markWriters, notesNode);\n writer.writeNodes(bodyNode);\n return writer.output();\n}\n\nclass PandocWriter implements PandocOutput {\n private readonly ast: PandocAst;\n private readonly format: PandocFormat;\n private readonly nodeWriters: { [key: string]: PandocNodeWriterFn };\n private readonly markWriters: { [key: string]: PandocMarkWriter };\n private readonly notes: { [key: string]: ProsemirrorNode };\n private readonly containers: any[][];\n private readonly activeMarks: MarkType[];\n private options: { [key: string]: boolean };\n\n public readonly extensions: PandocExtensions;\n\n private readonly escapeCharacters: string[] = [];\n private readonly manualEscapeCharacters: Map = new Map();\n private readonly preventEscapeCharacters: string[] = [];\n\n constructor(\n apiVersion: PandocApiVersion,\n format: PandocFormat,\n nodeWriters: readonly PandocNodeWriter[],\n markWriters: readonly PandocMarkWriter[],\n notes: ProsemirrorNode,\n ) {\n // save format and extensions\n this.format = format;\n this.extensions = format.extensions;\n // compute escape characters based on format\n this.initEscapeCharacters();\n // create maps of node and mark writers\n this.nodeWriters = {};\n nodeWriters.forEach((writer: PandocNodeWriter) => {\n this.nodeWriters[writer.name] = writer.write;\n });\n this.markWriters = {};\n markWriters.forEach((writer: PandocMarkWriter) => {\n this.markWriters[writer.name] = writer;\n });\n // create map of notes\n this.notes = {};\n notes.forEach((note: ProsemirrorNode) => {\n this.notes[note.attrs.ref] = note;\n });\n\n this.ast = {\n blocks: [],\n 'pandoc-api-version': apiVersion,\n meta: {},\n };\n this.containers = [this.ast.blocks];\n this.activeMarks = [];\n this.options = {\n writeSpaces: true,\n };\n }\n\n public output() {\n return {\n ast: this.ast,\n };\n }\n\n public write(value: any) {\n const container = this.containers[this.containers.length - 1];\n container.push(value);\n }\n\n public writeToken(type: PandocTokenType, content?: (() => void) | any) {\n const token: PandocToken = {\n t: type,\n };\n if (content !== undefined) {\n if (typeof content === 'function') {\n token.c = [];\n this.fill(token.c, content);\n } else {\n token.c = content;\n }\n }\n this.write(token);\n }\n\n public writeMark(type: PandocTokenType, parent: Fragment, expelEnclosingWhitespace = true) {\n // expel enclosing whitepsace if requested and if the fragment isn't 100% spaces\n if (expelEnclosingWhitespace) {\n // build output spec\n const output = {\n spaceBefore: false,\n nodes: new Array(),\n spaceAfter: false,\n };\n\n // if we see leading or trailing spaces we need to output them as tokens\n // and substitute text nodes\n parent.forEach((node: ProsemirrorNode, offset: number, index: number) => {\n // check for leading/trailing space in first/last nodes\n if (node.isText) {\n let outputText = node.textContent;\n\n // checking for leading space in first node\n if (output.nodes.length === 0 && node.textContent.match(/^\\s+/)) {\n output.spaceBefore = true;\n outputText = outputText.trimLeft();\n }\n\n // check for trailing space in last node\n if (index === parent.childCount - 1 && node.textContent.match(/\\s+$/)) {\n output.spaceAfter = true;\n outputText = outputText.trimRight();\n }\n\n // check for an entirely blank node\n if (outputText.match(/^\\s*$/)) {\n outputText = '';\n }\n\n // skip the node if it has nothing in it\n if (outputText.length > 0) {\n // if we modified the node's text then create a new node\n if (outputText !== node.textContent) {\n output.nodes.push(node.type.schema.text(outputText, node.marks));\n } else {\n output.nodes.push(node);\n }\n }\n } else {\n output.nodes.push(node);\n }\n });\n\n // output space tokens before/after mark as necessary\n if (output.nodes.length > 0) {\n if (output.spaceBefore) {\n this.writeToken(PandocTokenType.Space);\n }\n this.writeToken(type, () => {\n this.writeInlines(Fragment.from(output.nodes));\n });\n if (output.spaceAfter) {\n this.writeToken(PandocTokenType.Space);\n }\n }\n\n // normal codepath (not expelling existing whitespace)\n } else {\n this.writeToken(type, () => {\n this.writeInlines(parent);\n });\n }\n }\n\n public writeArray(content: () => void) {\n const arr: any[] = [];\n this.fill(arr, content);\n this.write(arr);\n }\n\n public writeAttr(id?: string, classes?: string[], keyvalue?: Array<[string, string]>) {\n this.write([id || '', classes || [], keyvalue || []]);\n }\n\n public writeText(text: string | null) {\n // determine which characters we shouldn't escape\n const preventEscapeCharacters = this.preventEscapeCharacters;\n\n if (text) {\n let textRun = '';\n const flushTextRun = () => {\n if (textRun) {\n // if this is a line block, convert leading nbsp to regular space,\n if (!this.options.writeSpaces) {\n textRun = textRun.replace(/(^|\\n)+(\\u00A0+)/g, (_match, p1, p2) => {\n return p1 + Array(p2.length + 1).join(' ');\n });\n }\n\n // reverse smart punctuation. pandoc does this autmoatically for markdown\n // writing w/ +smart, however this also results in nbsp's being inserted\n // after selected abbreviations like e.g. and Mr., and we don't want that\n // to happen for editing (b/c the nbsp's weren't put there by the user\n // and are not obviously visible)\n if (this.extensions.smart) {\n textRun = textRun\n .replace(/—/g, '---')\n .replace(/–/g, '--')\n .replace(/…/g, '...');\n }\n\n // we explicitly don't want fancy quotes in the editor\n textRun = fancyQuotesToSimple(textRun);\n\n this.writeToken(PandocTokenType.Str, textRun);\n textRun = '';\n }\n };\n for (let i = 0; i < text.length; i++) {\n const ch = text.charAt(i);\n if (this.options.writeSpaces && ch === ' ') {\n flushTextRun();\n this.writeToken(PandocTokenType.Space);\n } else if (preventEscapeCharacters.includes(ch)) {\n flushTextRun();\n this.writeRawMarkdown(ch);\n } else if (this.manualEscapeCharacters.has(ch)) {\n flushTextRun();\n this.writeRawMarkdown(this.manualEscapeCharacters.get(ch)!);\n } else {\n textRun += ch;\n }\n }\n flushTextRun();\n }\n }\n\n public writeLink(href: string, title: string, attr: PandocAttr | null, content: VoidFunction) {\n this.writeToken(PandocTokenType.Link, () => {\n // write attr if provided\n if (attr) {\n this.writeAttr(attr.id, attr.classes, attr.keyvalue);\n } else {\n this.writeAttr();\n }\n // write content\n this.writeArray(() => {\n content();\n });\n\n // write href\n this.write([href || '', title || '']);\n });\n }\n\n public writeNote(note: ProsemirrorNode) {\n // get corresponding note body\n const noteBody = this.notes[note.attrs.ref];\n\n // don't write empty footnotes (otherwise in block or section mode they gobble up the section below them)\n if (noteBody.textContent.trim().length > 0) {\n this.writeToken(PandocTokenType.Note, () => {\n this.writeNodes(noteBody);\n });\n }\n }\n\n public writeNode(node: ProsemirrorNode) {\n this.nodeWriters[node.type.name](this, node);\n }\n\n public writeNodes(parent: ProsemirrorNode) {\n parent.forEach(this.writeNode.bind(this));\n }\n\n public writeInlines(fragment: Fragment) {\n // get the marks from a node that are not already on the stack of active marks\n const nodeMarks = (node: ProsemirrorNode) => {\n // get marks ordered by writer priority\n let marks = marksByPriority(node.marks, this.markWriters);\n\n // remove active marks\n for (const activeMark of this.activeMarks) {\n marks = activeMark.removeFromSet(marks);\n }\n\n // return marks\n return marks;\n };\n\n // helpers to iterate through the nodes (sans any marks already on the stack)\n let currentChild = 0;\n const nextNode = () => {\n const childIndex = currentChild;\n currentChild++;\n return {\n node: fragment.child(childIndex),\n marks: nodeMarks(fragment.child(childIndex)),\n };\n };\n const putBackNode = () => {\n currentChild--;\n };\n\n // iterate through the nodes\n while (currentChild < fragment.childCount) {\n // get the next node\n let next = nextNode();\n\n // if there are active marks then collect them up and call the mark handler\n // with all nodes that it contains, otherwise just process it as a plain\n // unmarked node\n if (next.marks.length > 0) {\n // get the mark and start building a list of marked nodes\n const mark = next.marks[0];\n const markedNodes: ProsemirrorNode[] = [next.node];\n\n // inner iteration to find nodes that have this mark\n while (currentChild < fragment.childCount) {\n next = nextNode();\n if (mark.type.isInSet(next.marks)) {\n markedNodes.push(next.node);\n } else {\n // no mark found, \"put back\" the node\n putBackNode();\n break;\n }\n }\n\n // call the mark writer after noting that this mark is active (which\n // will cause subsequent recursive invocations of this function to\n // not re-process this mark)\n this.activeMarks.push(mark.type);\n this.markWriters[mark.type.name].write(this, mark, Fragment.from(markedNodes));\n this.activeMarks.pop();\n } else {\n // ordinary unmarked node, call the node writer\n this.nodeWriters[next.node.type.name](this, next.node);\n }\n }\n }\n\n public writeRawMarkdown(markdown: Fragment | string, escapeSymbols?: boolean) {\n // collect markdown text if necessary\n let md = markdown instanceof Fragment ? fragmentText(markdown) : markdown;\n\n // escape symbols if requested\n if (escapeSymbols) {\n const escaped: string[] = [];\n for (let i = 0; i < md.length; i++) {\n const ch = md.charAt(i);\n if (this.escapeCharacters.includes(ch)) {\n escaped.push('\\\\' + ch);\n } else {\n escaped.push(ch);\n }\n }\n md = escaped.join('');\n }\n\n this.writeToken(PandocTokenType.RawInline, () => {\n this.write('markdown');\n this.write(md);\n });\n }\n\n public withOption(option: PandocOutputOption, value: boolean, f: () => void) {\n const previousValue = this.options[option];\n this.options[option] = value;\n f();\n this.options[option] = previousValue;\n }\n\n private fill(container: any[], content: () => void) {\n this.containers.push(container);\n content();\n this.containers.pop();\n }\n\n private initEscapeCharacters() {\n // gfm disallows [] escaping so that MediaWiki style page links (e.g. [[MyPage]]) work as expected\n // tex_math_single_backslash does not allow escaping of [] or () (as that conflicts with the math syntax)\n if (this.format.mode === kGfmFormat || this.format.extensions.tex_math_single_backslash) {\n this.preventEscapeCharacters.push('[', ']');\n }\n\n // tex_math_single_backslash does not allow escaping of [] or () (as that conflicts with the math syntax)\n if (this.format.extensions.tex_math_single_backslash) {\n this.preventEscapeCharacters.push('(', ')');\n }\n\n // filter standard escape characters w/ preventEscapeCharacters\n const allEscapeCharacters = ['\\\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!'];\n if (this.format.extensions.angle_brackets_escapable) {\n allEscapeCharacters.push('<');\n }\n this.escapeCharacters.push(...allEscapeCharacters.filter(ch => !this.preventEscapeCharacters.includes(ch)));\n\n // Manual escape characters are ones we can't rely on pandoc to automatically escape (b/c\n // they represent valid syntax for a markdown extension, e.g. '@' for citations).\n // For '@', since we already do special writing for spans we know are citation ids, we can\n // globally prescribe escaping behavior and never stomp over a citation. We also check\n // that '@' can be escaped in the current markdown format, and if not use an html escape.\n const atEscape = this.extensions.all_symbols_escapable ? '\\\\@' : '@';\n this.manualEscapeCharacters.set('@', atEscape);\n }\n}\n","/*\n * fragment.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Fragment } from 'prosemirror-model';\n\nexport function fragmentText(fragment: Fragment, unemoji = false) {\n let text = '';\n fragment.forEach(node => {\n const emjojiMark = node.marks.find(mark => mark.type === node.type.schema.marks.emoji);\n if (unemoji && emjojiMark) {\n return (text = text + (emjojiMark.attrs.emojihint || node.textContent));\n } else {\n return (text = text + node.textContent);\n }\n });\n return text;\n}\n","/*\n * editor-extensions.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { InputRule } from 'prosemirror-inputrules';\nimport { Schema } from 'prosemirror-model';\nimport { Plugin } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { ProsemirrorCommand } from '../api/command';\nimport { PandocMark } from '../api/mark';\nimport { PandocNode, CodeViewOptions } from '../api/node';\nimport { Extension, ExtensionFn, ExtensionContext } from '../api/extension';\nimport { BaseKeyBinding } from '../api/basekeys';\nimport { OmniInserter } from '../api/omni_insert';\nimport { AppendTransactionHandler, AppendMarkTransactionHandler } from '../api/transaction';\nimport { FixupFn } from '../api/fixup';\nimport {\n PandocTokenReader,\n PandocMarkWriter,\n PandocNodeWriter,\n PandocPreprocessorFn,\n PandocPostprocessorFn,\n PandocBlockReaderFn,\n PandocInlineHTMLReaderFn,\n PandocTokensFilterFn,\n} from '../api/pandoc';\nimport { PandocBlockCapsuleFilter } from '../api/pandoc_capsule';\nimport { markInputRuleFilter } from '../api/input_rule';\nimport { CompletionHandler } from '../api/completion';\n\n// required extensions (base non-customiziable pandoc nodes/marks + core behaviors)\nimport nodeText from '../nodes/text';\nimport nodeParagraph from '../nodes/paragraph';\nimport nodeHeading from '../nodes/heading';\nimport nodeBlockquote from '../nodes/blockquote';\nimport nodeCodeBlock from '../nodes/code_block';\nimport nodeLists from '../nodes/list/list';\nimport nodeImage from '../nodes/image/image';\nimport nodeFigure from '../nodes/image/figure';\nimport nodeHr from '../nodes/hr';\nimport nodeHardBreak from '../nodes/hard_break';\nimport nodeNull from '../nodes/null';\nimport markEm from '../marks/em';\nimport markStrong from '../marks/strong';\nimport markCode from '../marks/code';\nimport markLink from '../marks/link/link';\nimport behaviorHistory from '../behaviors/history';\nimport behaviorSelectAll from '../behaviors/select_all';\nimport behaviorCursor from '../behaviors/cursor';\nimport behaviorFind from '../behaviors/find';\nimport behaviorSpellingInteractive from '../behaviors/spelling/spelling-interactive';\nimport behaviorClearFormatting from '../behaviors/clear_formatting';\n\n// behaviors\nimport behaviorSmarty from '../behaviors/smarty';\nimport behaviorAttrDuplicateId from '../behaviors/attr_duplicate_id';\nimport behaviorTrailingP from '../behaviors/trailing_p';\nimport behaviorEmptyMark from '../behaviors/empty_mark';\nimport behaviorEscapeMark from '../behaviors/escape_mark';\nimport behaviorOutline from '../behaviors/outline';\nimport beahviorCodeBlockInput from '../behaviors/code_block_input';\nimport behaviorPasteText from '../behaviors/paste_text';\nimport behaviorBottomPadding from '../behaviors/bottom_padding';\nimport behaviorInsertSymbol from '../behaviors/insert_symbol/insert_symbol-plugin-symbol';\nimport behaviorInsertSymbolEmoji from '../behaviors/insert_symbol/insert_symbol-plugin-emoji';\nimport beahviorInsertSpecialCharacters from '../behaviors/insert_symbol/insert_special_characters';\nimport behaviorNbsp from '../behaviors/nbsp';\nimport behaviorRemoveSection from '../behaviors/remove_section';\n\n// marks\nimport markStrikeout from '../marks/strikeout';\nimport markSuperscript from '../marks/superscript';\nimport markSubscript from '../marks/subscript';\nimport markSmallcaps from '../marks/smallcaps';\nimport markUnderline from '../marks/underline';\nimport markRawInline from '../marks/raw_inline/raw_inline';\nimport markRawTex from '../marks/raw_inline/raw_tex';\nimport markRawHTML from '../marks/raw_inline/raw_html';\nimport markMath from '../marks/math/math';\nimport markCite from '../marks/cite/cite';\nimport markSpan from '../marks/span';\nimport markXRef from '../marks/xref/xref';\nimport markHTMLComment from '../marks/raw_inline/raw_html_comment';\nimport markShortcode from '../marks/shortcode';\nimport markEmoji from '../marks/emoji/emoji';\nimport { markOmniInsert } from '../behaviors/omni_insert/omni_insert';\n\n// nodes\nimport nodeFootnote from '../nodes/footnote/footnote';\nimport nodeRawBlock from '../nodes/raw_block';\nimport nodeYamlMetadata from '../nodes/yaml_metadata/yaml_metadata';\nimport nodeRmdCodeChunk from '../nodes/rmd_chunk/rmd_chunk';\nimport nodeDiv from '../nodes/div';\nimport nodeLineBlock from '../nodes/line_block';\nimport nodeTable from '../nodes/table/table';\nimport nodeDefinitionList from '../nodes/definition_list/definition_list';\nimport nodeShortcodeBlock from '../nodes/shortcode_block';\nimport nodeHtmlPreserve from '../nodes/html_preserve';\n\n// extension/plugin factories\nimport { acePlugins } from '../optional/ace/ace';\nimport { attrEditExtension } from '../behaviors/attr_edit/attr_edit';\nimport { codeViewClipboardPlugin } from '../api/code';\n\nexport function initExtensions(context: ExtensionContext, extensions?: readonly Extension[]): ExtensionManager {\n // create extension manager\n const manager = new ExtensionManager(context);\n\n // required extensions\n manager.register([\n nodeText,\n nodeParagraph,\n nodeHeading,\n nodeBlockquote,\n nodeLists,\n nodeCodeBlock,\n nodeImage,\n nodeFigure,\n nodeHr,\n nodeHardBreak,\n nodeNull,\n markEm,\n markStrong,\n markCode,\n markLink,\n behaviorHistory,\n behaviorSelectAll,\n behaviorCursor,\n behaviorFind,\n behaviorSpellingInteractive,\n behaviorClearFormatting,\n ]);\n\n // optional extensions\n manager.register([\n // behaviors\n behaviorSmarty,\n behaviorAttrDuplicateId,\n behaviorTrailingP,\n behaviorEmptyMark,\n behaviorEscapeMark,\n behaviorOutline,\n beahviorCodeBlockInput,\n behaviorPasteText,\n behaviorBottomPadding,\n behaviorInsertSymbol,\n behaviorInsertSymbolEmoji,\n beahviorInsertSpecialCharacters,\n behaviorNbsp,\n behaviorRemoveSection,\n\n // nodes\n nodeDiv,\n nodeFootnote,\n nodeYamlMetadata,\n nodeRmdCodeChunk,\n nodeTable,\n nodeDefinitionList,\n nodeLineBlock,\n nodeRawBlock,\n nodeShortcodeBlock,\n nodeHtmlPreserve,\n\n // marks\n markUnderline,\n markStrikeout,\n markSuperscript,\n markSubscript,\n markSmallcaps,\n markHTMLComment,\n markRawTex,\n markRawHTML,\n markRawInline,\n markMath,\n markCite,\n markSpan,\n markXRef,\n markShortcode,\n markEmoji,\n markOmniInsert,\n ]);\n\n // register external extensions\n if (extensions) {\n manager.register(extensions);\n }\n\n // additional extensions dervied from other extensions (e.g. extensions that have registered attr editors)\n // note that all of these take a callback to access the manager -- this is so that if an extension earlier\n // in the chain registers something the later extensions are able to see it\n manager.register([\n // bindings to 'Edit Attribute' command and UI adornment\n attrEditExtension(context.pandocExtensions, context.ui, manager.attrEditors()),\n ]);\n\n // additional plugins derived from extensions\n const codeViews = manager.codeViews();\n const plugins: Plugin[] = [];\n if (context.options.codeEditor === 'ace') {\n plugins.push(...acePlugins(codeViews, context));\n }\n plugins.push(codeViewClipboardPlugin(codeViews));\n\n // register plugins\n manager.registerPlugins(plugins);\n\n // return manager\n return manager;\n}\n\nexport class ExtensionManager {\n private context: ExtensionContext;\n private extensions: Extension[];\n\n public constructor(context: ExtensionContext) {\n this.context = context;\n this.extensions = [];\n }\n\n public register(extensions: ReadonlyArray, priority = false): void {\n extensions.forEach(extension => {\n if (typeof extension === 'function') {\n const ext = extension(this.context);\n if (ext) {\n if (priority) {\n this.extensions.unshift(ext);\n } else {\n this.extensions.push(ext);\n }\n }\n } else {\n if (priority) {\n this.extensions.unshift(extension);\n } else {\n this.extensions.push(extension);\n }\n }\n });\n }\n\n public registerPlugins(plugins: Plugin[], priority = false) {\n this.register([{ plugins: () => plugins }], priority);\n }\n\n public pandocMarks(): readonly PandocMark[] {\n return this.collect(extension => extension.marks);\n }\n\n public pandocNodes(): readonly PandocNode[] {\n return this.collect(extension => extension.nodes);\n }\n\n public pandocPreprocessors(): readonly PandocPreprocessorFn[] {\n return this.collectFrom({\n node: node => [node.pandoc.preprocessor],\n });\n }\n\n public pandocPostprocessors(): readonly PandocPostprocessorFn[] {\n return this.pandocReaders().flatMap(reader => (reader.postprocessor ? [reader.postprocessor] : []));\n }\n\n public pandocTokensFilters(): readonly PandocTokensFilterFn[] {\n return this.collectFrom({\n node: node => [node.pandoc.tokensFilter],\n });\n }\n\n public pandocBlockReaders(): readonly PandocBlockReaderFn[] {\n return this.collectFrom({\n node: node => [node.pandoc.blockReader],\n });\n }\n\n public pandocInlineHTMLReaders(): readonly PandocInlineHTMLReaderFn[] {\n return this.collectFrom({\n mark: mark => [mark.pandoc.inlineHTMLReader],\n node: node => [node.pandoc.inlineHTMLReader],\n });\n }\n\n public pandocBlockCapsuleFilters(): readonly PandocBlockCapsuleFilter[] {\n return this.collectFrom({\n node: node => [node.pandoc.blockCapsuleFilter],\n });\n }\n\n public pandocReaders(): readonly PandocTokenReader[] {\n return this.collectFrom({\n mark: mark => mark.pandoc.readers,\n node: node => node.pandoc.readers ?? [],\n });\n }\n\n public pandocMarkWriters(): readonly PandocMarkWriter[] {\n return this.collectFrom({\n mark: mark => [{ name: mark.name, ...mark.pandoc.writer }],\n });\n }\n\n public pandocNodeWriters(): readonly PandocNodeWriter[] {\n return this.collectFrom({\n node: node => {\n return node.pandoc.writer ? [{ name: node.name, write: node.pandoc.writer! }] : [];\n },\n });\n }\n\n public commands(schema: Schema): readonly ProsemirrorCommand[] {\n return this.collect(extension => extension.commands?.(schema));\n }\n\n public omniInserters(schema: Schema): OmniInserter[] {\n const omniInserters: OmniInserter[] = [];\n const commands = this.commands(schema);\n commands.forEach(command => {\n if (command.omniInsert) {\n omniInserters.push({\n ...command.omniInsert,\n id: command.id,\n command: command.execute,\n });\n }\n });\n return omniInserters;\n }\n\n public codeViews() {\n const views: { [key: string]: CodeViewOptions } = {};\n this.pandocNodes().forEach((node: PandocNode) => {\n if (node.code_view) {\n views[node.name] = node.code_view;\n }\n });\n return views;\n }\n\n public attrEditors() {\n return this.collectFrom({\n node: node => [node.attr_edit?.()],\n });\n }\n\n public baseKeys(schema: Schema): readonly BaseKeyBinding[] {\n return this.collect(extension => extension.baseKeys?.(schema));\n }\n\n public appendTransactions(schema: Schema): readonly AppendTransactionHandler[] {\n return this.collect(extension => extension.appendTransaction?.(schema));\n }\n\n public appendMarkTransactions(schema: Schema): readonly AppendMarkTransactionHandler[] {\n return this.collect(extension => extension.appendMarkTransaction?.(schema));\n }\n\n public plugins(schema: Schema): readonly Plugin[] {\n return this.collect(extension => extension.plugins?.(schema));\n }\n\n public fixups(schema: Schema, view: EditorView): readonly FixupFn[] {\n return this.collect(extension => extension.fixups?.(schema, view));\n }\n\n public completionHandlers(): readonly CompletionHandler[] {\n return this.collect(extension => extension.completionHandlers?.());\n }\n\n // NOTE: return value not readonly b/c it will be fed directly to a\n // Prosemirror interface that doesn't take readonly\n public inputRules(schema: Schema): InputRule[] {\n const markFilter = markInputRuleFilter(schema, this.pandocMarks());\n return this.collect(extension => extension.inputRules?.(schema, markFilter));\n }\n\n private collect(collector: (extension: Extension) => readonly T[] | undefined) {\n return this.collectFrom({\n extension: extension => collector(extension) ?? [],\n });\n }\n\n /**\n * Visits extensions in order of registration, providing optional callbacks\n * for extension, mark, and node. The return value of callbacks should be\n * arrays of (T | undefined | null); these will all be concatenated together,\n * with the undefined and nulls filtered out.\n *\n * @param visitor Object containing callback methods for the different\n * extension parts.\n */\n private collectFrom(visitor: {\n extension?: (extension: Extension) => ReadonlyArray;\n mark?: (mark: PandocMark) => ReadonlyArray;\n node?: (node: PandocNode) => ReadonlyArray;\n }): T[] {\n const results: Array = [];\n\n this.extensions.forEach(extension => {\n if (visitor.extension) {\n results.push(...visitor.extension(extension));\n }\n if (visitor.mark && extension.marks) {\n results.push(...extension.marks.flatMap(visitor.mark));\n }\n if (visitor.node && extension.nodes) {\n results.push(...extension.nodes.flatMap(visitor.node));\n }\n });\n\n return results.filter(value => typeof value !== 'undefined' && value !== null) as T[];\n }\n}\n","/*\n * text.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport { PandocOutput, PandocToken, PandocTokenType, ProsemirrorWriter } from '../api/pandoc';\nimport { ExtensionContext } from '../api/extension';\nimport { kQuoteType, QuoteType, kQuoteChildren, fancyQuotesToSimple } from '../api/quote';\n\nconst extension = (context: ExtensionContext) => {\n const readText = (text: string) => {\n // we explicitly don't want fancy quotes in the editor\n text = fancyQuotesToSimple(text);\n\n if (context.pandocExtensions.smart) {\n return text\n .replace(/---/g, '—')\n .replace(/--/g, '–')\n .replace(/\\.\\.\\./g, '…');\n } else {\n return text;\n }\n };\n\n return {\n nodes: [\n {\n name: 'text',\n spec: {\n group: 'inline',\n toDOM(node: ProsemirrorNode): any {\n return node.text;\n },\n },\n pandoc: {\n readers: [\n { token: PandocTokenType.Str, text: true, getText: (t: PandocToken) => readText(t.c) },\n { token: PandocTokenType.Space, text: true, getText: () => ' ' },\n { token: PandocTokenType.SoftBreak, text: true, getText: () => ' ' },\n {\n token: PandocTokenType.Quoted,\n handler: () => (writer: ProsemirrorWriter, tok: PandocToken) => {\n const type = tok.c[kQuoteType].t;\n const quote = type === QuoteType.SingleQuote ? \"'\" : '\"';\n writer.writeTokens([{ t: 'Str', c: quote }, ...tok.c[kQuoteChildren], { t: 'Str', c: quote }]);\n },\n },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n const text = node.textContent;\n output.writeText(text);\n },\n },\n },\n ],\n };\n};\n\nexport default extension;\n","/*\n * paragraph.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\n\nimport { BlockCommand, EditorCommandId, ProsemirrorCommand } from '../api/command';\nimport { Extension } from '../api/extension';\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\nimport { insertParagraph } from '../api/paragraph';\nimport { EditorUI } from '../api/ui';\nimport { OmniInsertGroup } from '../api/omni_insert';\n\nconst extension: Extension = {\n nodes: [\n {\n name: 'paragraph',\n spec: {\n content: 'inline*',\n group: 'block list_item_block',\n parseDOM: [{ tag: 'p' }],\n toDOM() {\n return ['p', 0];\n },\n },\n pandoc: {\n readers: [\n { token: PandocTokenType.Para, block: 'paragraph' },\n { token: PandocTokenType.Plain, block: 'paragraph' },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.Para, () => {\n output.writeInlines(node.content);\n });\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [\n new BlockCommand(EditorCommandId.Paragraph, ['Mod-Alt-0'], schema.nodes.paragraph, schema.nodes.paragraph),\n new InsertParagraphCommand(),\n ];\n },\n};\n\nclass InsertParagraphCommand extends ProsemirrorCommand {\n constructor() {\n super(EditorCommandId.ParagraphInsert, [], insertParagraph);\n }\n}\n\nexport default extension;\n","/*\n * paragraph.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorState, Transaction } from 'prosemirror-state';\n\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { canInsertNode } from './node';\n\nexport function insertParagraph(state: EditorState, dispatch?: (tr: Transaction) => void) {\n const schema = state.schema;\n\n if (!canInsertNode(state, schema.nodes.paragraph)) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n tr.replaceSelectionWith(schema.nodes.paragraph.create());\n setTextSelection(state.selection.from + 1, 1)(tr);\n dispatch(tr);\n }\n\n return true;\n}\n","/*\n * heading.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { textblockTypeInputRule, InputRule } from 'prosemirror-inputrules';\nimport { Node as ProsemirrorNode, Schema, NodeType, Fragment } from 'prosemirror-model';\nimport { EditorState } from 'prosemirror-state';\nimport { findParentNode, findParentNodeOfType } from 'prosemirror-utils';\n\nimport { PandocOutput, PandocToken, PandocTokenType } from '../api/pandoc';\nimport { EditorCommandId, toggleBlockType, ProsemirrorCommand } from '../api/command';\nimport { Extension, ExtensionContext } from '../api/extension';\nimport {\n pandocAttrSpec,\n pandocAttrParseDom,\n pandocAttrToDomAttr,\n pandocAttrReadAST,\n pandocAttrParseText,\n} from '../api/pandoc_attr';\nimport { uuidv4 } from '../api/util';\nimport { EditorUI } from '../api/ui';\nimport { OmniInsert, OmniInsertGroup } from '../api/omni_insert';\nimport { emptyNodePlaceholderPlugin } from '../api/placeholder';\nimport { kHeadingLevel, kHeadingAttr, kHeadingChildren } from '../api/heading';\n\nconst kHeadingLevels = [1, 2, 3, 4, 5, 6];\n\nconst extension = (context: ExtensionContext): Extension => {\n const { pandocExtensions, format, ui } = context;\n\n const headingAttr = pandocExtensions.header_attributes || pandocExtensions.mmd_header_identifiers;\n\n return {\n nodes: [\n {\n name: 'heading',\n spec: {\n attrs: {\n level: { default: 1 },\n link: { default: null },\n navigation_id: { default: null },\n ...(headingAttr ? pandocAttrSpec : {}),\n },\n content: 'inline*',\n group: 'block',\n defining: true,\n parseDOM: [\n { tag: 'h1', getAttrs: headingAttrs(1, headingAttr) },\n { tag: 'h2', getAttrs: headingAttrs(2, headingAttr) },\n { tag: 'h3', getAttrs: headingAttrs(3, headingAttr) },\n { tag: 'h4', getAttrs: headingAttrs(4, headingAttr) },\n { tag: 'h5', getAttrs: headingAttrs(5, headingAttr) },\n { tag: 'h6', getAttrs: headingAttrs(6, headingAttr) },\n ],\n toDOM(node) {\n const attr = headingAttr ? pandocAttrToDomAttr(node.attrs) : {};\n attr.class = (attr.class || '').concat(' pm-heading');\n return [\n 'h' + node.attrs.level,\n {\n 'data-link': node.attrs.link,\n ...attr,\n },\n\n 0,\n ];\n },\n },\n\n attr_edit: () => {\n if (headingAttr) {\n return {\n type: (schema: Schema) => schema.nodes.heading,\n offset: {\n top: 5,\n right: 10,\n },\n };\n } else {\n return null;\n }\n },\n\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Header,\n block: 'heading',\n getAttrs: (tok: PandocToken) => ({\n level: tok.c[kHeadingLevel],\n navigation_id: uuidv4(),\n ...(headingAttr ? pandocAttrReadAST(tok, kHeadingAttr) : {}),\n }),\n getChildren: (tok: PandocToken) => tok.c[kHeadingChildren],\n },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.Header, () => {\n output.write(node.attrs.level);\n if (headingAttr) {\n output.writeAttr(node.attrs.id, node.attrs.classes, node.attrs.keyvalue);\n } else {\n output.writeAttr();\n }\n output.writeArray(() => {\n if (node.attrs.level === 1 && format.rmdExtensions.bookdownPart) {\n writeBookdownH1(output, node);\n } else {\n output.writeInlines(node.content);\n }\n });\n });\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [\n new HeadingCommand(schema, EditorCommandId.Heading1, 1, heading1OmniInsert(ui)),\n new HeadingCommand(schema, EditorCommandId.Heading2, 2, heading2OmniInsert(ui)),\n new HeadingCommand(schema, EditorCommandId.Heading3, 3, heading3OmniInsert(ui)),\n new HeadingCommand(schema, EditorCommandId.Heading4, 4, heading4OmniInsert(ui)),\n new HeadingCommand(schema, EditorCommandId.Heading5, 5),\n new HeadingCommand(schema, EditorCommandId.Heading6, 6),\n ];\n },\n\n inputRules: (schema: Schema) => {\n const rules = [\n textblockTypeInputRule(\n new RegExp('^(#{1,' + kHeadingLevels.length + '})\\\\s$'),\n schema.nodes.heading,\n match => ({\n level: match[1].length,\n navigation_id: uuidv4(),\n }),\n ),\n ];\n\n if (headingAttr) {\n rules.push(headingAttributeInputRule(schema));\n }\n\n return rules;\n },\n\n plugins: (schema: Schema) => {\n return [emptyHeadingPlaceholderPlugin(schema.nodes.heading, ui)];\n },\n };\n};\n\nfunction headingAttributeInputRule(schema: Schema) {\n return new InputRule(/ {([^}]+)}$/, (state: EditorState, match: string[], start: number, end: number) => {\n // only fire in headings\n const heading = findParentNodeOfType(schema.nodes.heading)(state.selection);\n if (heading) {\n // try to parse the attributes\n const attrs = pandocAttrParseText(match[1]);\n if (attrs) {\n const tr = state.tr;\n tr.setNodeMarkup(heading.pos, undefined, {\n ...heading.node.attrs,\n ...attrs,\n });\n tr.deleteRange(start + 1, end);\n return tr;\n } else {\n return null;\n }\n } else {\n return null;\n }\n });\n}\n\nclass HeadingCommand extends ProsemirrorCommand {\n public readonly nodeType: NodeType;\n public readonly level: number;\n\n constructor(schema: Schema, id: EditorCommandId, level: number, omniInsert?: OmniInsert) {\n super(id, ['Mod-Alt-' + level], headingCommandFn(schema, level), omniInsert);\n this.nodeType = schema.nodes.heading;\n this.level = level;\n }\n\n public isActive(state: EditorState) {\n const predicate = (n: ProsemirrorNode) => n.type === this.nodeType && n.attrs.level === this.level;\n const node = findParentNode(predicate)(state.selection);\n return !!node;\n }\n}\n\nfunction heading1OmniInsert(ui: EditorUI) {\n return headingOmniInsert(ui, 1, ui.context.translateText('Top level heading'), [\n ui.images.omni_insert?.heading1!,\n ui.images.omni_insert?.heading1_dark!,\n ]);\n}\n\nfunction heading2OmniInsert(ui: EditorUI) {\n return headingOmniInsert(ui, 2, ui.context.translateText('Section heading'), [\n ui.images.omni_insert?.heading2!,\n ui.images.omni_insert?.heading2_dark!,\n ]);\n}\n\nfunction heading3OmniInsert(ui: EditorUI) {\n return headingOmniInsert(ui, 3, ui.context.translateText('Sub-section heading'), [\n ui.images.omni_insert?.heading3!,\n ui.images.omni_insert?.heading3_dark!,\n ]);\n}\n\nfunction heading4OmniInsert(ui: EditorUI) {\n return headingOmniInsert(ui, 4, ui.context.translateText('Smaller heading'), [\n ui.images.omni_insert?.heading4!,\n ui.images.omni_insert?.heading4_dark!,\n ]);\n}\n\nfunction headingOmniInsert(ui: EditorUI, level: number, description: string, images: [string, string]): OmniInsert {\n return {\n name: headingName(ui, level),\n description,\n group: OmniInsertGroup.Headings,\n image: () => (ui.prefs.darkMode() ? images[1] : images[0]),\n };\n}\n\nfunction headingName(ui: EditorUI, level: number) {\n const kHeadingPrefix = ui.context.translateText('Heading');\n return `${kHeadingPrefix} ${level}`;\n}\n\nfunction headingCommandFn(schema: Schema, level: number) {\n return toggleBlockType(schema.nodes.heading, schema.nodes.paragraph, { level });\n}\n\n// function for getting attrs\nfunction headingAttrs(level: number, pandocAttrSupported: boolean) {\n return (dom: Node | string) => {\n const el = dom as Element;\n return {\n level,\n 'data-link': el.getAttribute('data-link'),\n ...(pandocAttrSupported ? pandocAttrParseDom(el, {}) : {}),\n };\n };\n}\n\nfunction emptyHeadingPlaceholderPlugin(nodeType: NodeType, ui: EditorUI) {\n return emptyNodePlaceholderPlugin(nodeType, node => headingName(ui, node.attrs.level));\n}\n\n// write a bookdown (PART) H1 w/o spurious \\\nfunction writeBookdownH1(output: PandocOutput, node: ProsemirrorNode) {\n // see if this is a (PART\\*). note we also match and replay any text\n // before the first ( in case the cursor sentinel ended up there\n const partMatch = node.textContent.match(/^([^()]*)\\(PART\\\\\\*\\)/);\n if (partMatch) {\n const schema = node.type.schema;\n output.writeInlines(Fragment.from(schema.text(partMatch[1] + '(PART*)')));\n output.writeInlines(node.content.cut(partMatch[0].length));\n } else {\n output.writeInlines(node.content);\n }\n}\n\nexport default extension;\n","/*\n * blockquote.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { wrappingInputRule } from 'prosemirror-inputrules';\nimport { Node as ProsemirrorNode, Schema, DOMOutputSpec } from 'prosemirror-model';\n\nimport { WrapCommand, EditorCommandId } from '../api/command';\nimport { ExtensionContext } from '../api/extension';\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\nimport { EditorUI } from '../api/ui';\nimport { OmniInsertGroup } from '../api/omni_insert';\n\nconst extension = (context: ExtensionContext) => {\n const { ui } = context;\n\n return {\n nodes: [\n {\n name: 'blockquote',\n spec: {\n content: 'block+',\n group: 'block',\n defining: true,\n parseDOM: [{ tag: 'blockquote' }],\n toDOM(): DOMOutputSpec {\n return ['blockquote', { class: 'pm-blockquote pm-block-border-color' }, 0];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.BlockQuote,\n block: 'blockquote',\n },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.BlockQuote, () => {\n output.writeNodes(node);\n });\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [new WrapCommand(EditorCommandId.Blockquote, [], schema.nodes.blockquote, {}, blockquoteOmniInsert(ui))];\n },\n\n inputRules: (schema: Schema) => {\n return [wrappingInputRule(/^\\s*>\\s$/, schema.nodes.blockquote)];\n },\n };\n};\n\nfunction blockquoteOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Blockquote'),\n description: ui.context.translateText('Section quoted from another source'),\n group: OmniInsertGroup.Blocks,\n priority: 8,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.blockquote_dark! : ui.images.omni_insert?.blockquote!),\n };\n}\n\nexport default extension;\n","/*\n * code_block.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\nimport { newlineInCode, exitCode } from 'prosemirror-commands';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { findParentNodeOfType } from 'prosemirror-utils';\n\nimport { BlockCommand, EditorCommandId, ProsemirrorCommand, toggleBlockType } from '../api/command';\nimport { Extension, ExtensionContext } from '../api/extension';\nimport { BaseKey } from '../api/basekeys';\nimport { codeNodeSpec } from '../api/code';\nimport { PandocOutput, PandocTokenType, PandocExtensions } from '../api/pandoc';\nimport { pandocAttrSpec, pandocAttrParseDom, pandocAttrToDomAttr } from '../api/pandoc_attr';\nimport { PandocCapabilities } from '../api/pandoc_capabilities';\nimport { EditorUI } from '../api/ui';\nimport { CodeBlockProps } from '../api/ui-dialogs';\nimport { hasFencedCodeBlocks } from '../api/pandoc_format';\nimport { precedingListItemInsertPos, precedingListItemInsert } from '../api/list';\nimport { EditorOptions } from '../api/options';\nimport { OmniInsertGroup } from '../api/omni_insert';\n\nconst extension = (context: ExtensionContext): Extension => {\n const { pandocExtensions, pandocCapabilities, ui, options } = context;\n\n const hasAttr = hasFencedCodeBlocks(pandocExtensions);\n\n return {\n nodes: [\n {\n name: 'code_block',\n\n spec: {\n ...codeNodeSpec(),\n attrs: { ...(hasAttr ? pandocAttrSpec : {}) },\n parseDOM: [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n getAttrs: (node: Node | string) => {\n if (hasAttr) {\n const el = node as Element;\n return pandocAttrParseDom(el, {});\n } else {\n return {};\n }\n },\n },\n ],\n toDOM(node: ProsemirrorNode) {\n const fontClass = 'pm-fixedwidth-font';\n const attrs = hasAttr\n ? pandocAttrToDomAttr({\n ...node.attrs,\n classes: [...node.attrs.classes, fontClass],\n })\n : {\n class: fontClass,\n };\n return ['pre', attrs, ['code', 0]];\n },\n },\n\n code_view: {\n lang: (node: ProsemirrorNode) => {\n return codeBlockLang(node, options);\n },\n attrEditFn: codeBlockFormatCommandFn(pandocExtensions, ui, pandocCapabilities.highlight_languages),\n },\n\n attr_edit: codeBlockAttrEdit(pandocExtensions, pandocCapabilities, ui),\n\n pandoc: {\n readers: [\n {\n token: PandocTokenType.CodeBlock,\n code_block: true,\n },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.CodeBlock, () => {\n if (hasAttr) {\n const id = pandocExtensions.fenced_code_attributes ? node.attrs.id : '';\n const keyvalue = pandocExtensions.fenced_code_attributes ? node.attrs.keyvalue : [];\n output.writeAttr(id, node.attrs.classes, keyvalue);\n } else {\n output.writeAttr();\n }\n output.write(node.textContent);\n });\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n const commands: ProsemirrorCommand[] = [\n new BlockCommand(EditorCommandId.CodeBlock, [], schema.nodes.code_block, schema.nodes.paragraph, {}),\n ];\n if (hasAttr) {\n commands.push(new CodeBlockFormatCommand(pandocExtensions, ui, pandocCapabilities.highlight_languages));\n }\n return commands;\n },\n\n baseKeys: () => {\n return [\n { key: BaseKey.Enter, command: newlineInCode },\n { key: BaseKey.ModEnter, command: exitCode },\n { key: BaseKey.ShiftEnter, command: exitCode },\n ];\n },\n };\n};\n\nclass CodeBlockFormatCommand extends ProsemirrorCommand {\n constructor(pandocExtensions: PandocExtensions, ui: EditorUI, languages: string[]) {\n super(\n EditorCommandId.CodeBlockFormat,\n ['Shift-Mod-\\\\'],\n codeBlockFormatCommandFn(pandocExtensions, ui, languages),\n {\n name: ui.context.translateText('Code Block...'),\n description: ui.context.translateText('Source code display'),\n group: OmniInsertGroup.Blocks,\n priority: 7,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.code_block_dark! : ui.images.omni_insert?.code_block!,\n },\n );\n }\n}\n\nfunction codeBlockFormatCommandFn(pandocExtensions: PandocExtensions, ui: EditorUI, languages: string[]) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // enable if we are either inside a code block or we can toggle to a code block\n const schema = state.schema;\n const codeBlock = findParentNodeOfType(schema.nodes.code_block)(state.selection);\n if (\n !codeBlock &&\n !toggleBlockType(schema.nodes.code_block, schema.nodes.paragraph)(state) &&\n !precedingListItemInsertPos(state.doc, state.selection)\n ) {\n return false;\n }\n\n async function asyncEditCodeBlock() {\n if (dispatch) {\n // get props to edit\n const codeBlockProps = codeBlock\n ? { ...(codeBlock.node.attrs as CodeBlockProps), lang: '' }\n : defaultCodeBlockProps();\n\n // set lang if the first class is from available languages\n // (alternatively if we don't support attributes then it's\n // automatically considered the language)\n if (codeBlockProps.classes && codeBlockProps.classes.length) {\n const potentialLang = codeBlockProps.classes[0];\n if (!pandocExtensions.fenced_code_attributes || languages.includes(potentialLang)) {\n codeBlockProps.lang = potentialLang;\n codeBlockProps.classes = codeBlockProps.classes.slice(1);\n }\n }\n\n // show dialog\n const result = await ui.dialogs.editCodeBlock(\n codeBlockProps,\n pandocExtensions.fenced_code_attributes,\n languages,\n );\n if (result) {\n // extract lang\n const applyProps = propsWithLangClass(result);\n\n // edit or toggle as appropriate\n if (codeBlock) {\n const tr = state.tr;\n tr.setNodeMarkup(codeBlock.pos, schema.nodes.code_block, applyProps);\n dispatch(tr);\n } else {\n const prevListItemPos = precedingListItemInsertPos(state.doc, state.selection);\n if (prevListItemPos) {\n const tr = state.tr;\n const block = schema.nodes.code_block.create(applyProps);\n precedingListItemInsert(tr, prevListItemPos, block);\n dispatch(tr);\n } else {\n toggleBlockType(schema.nodes.code_block, schema.nodes.paragraph, applyProps)(state, dispatch, view);\n }\n }\n }\n }\n\n if (view) {\n view.focus();\n }\n }\n\n asyncEditCodeBlock();\n\n return true;\n };\n}\n\nfunction defaultCodeBlockProps() {\n return { id: '', classes: [], keyvalue: [], lang: '' };\n}\n\nfunction propsWithLangClass(props: CodeBlockProps) {\n const newProps = { ...props };\n if (newProps.classes && newProps.lang) {\n newProps.classes.unshift(props.lang);\n }\n return newProps;\n}\n\n// determine the code block language. if it's an Rmd example (i.e. with `r ''`) and\n// we have rmdExampleHighlight enabled then use the Rmd chunk language for highlighting\nfunction codeBlockLang(node: ProsemirrorNode, options: EditorOptions) {\n if (node.attrs.classes && node.attrs.classes.length) {\n const lang = node.attrs.classes[0];\n if (options.rmdExampleHighlight && lang === 'md') {\n const match = node.textContent.match(/^```+\\s*\\{([a-zA-Z0-9_]+)( *[ ,].*)?\\}`r ''`/);\n if (match) {\n return match[1];\n }\n }\n return lang;\n } else {\n return null;\n }\n}\n\nfunction codeBlockAttrEdit(pandocExtensions: PandocExtensions, pandocCapabilities: PandocCapabilities, ui: EditorUI) {\n return () => {\n if (hasFencedCodeBlocks(pandocExtensions)) {\n return {\n type: (schema: Schema) => schema.nodes.code_block,\n tags: (node: ProsemirrorNode) => {\n const tags: string[] = [];\n if (node.attrs.id) {\n tags.push(`#${node.attrs.id}`);\n }\n if (node.attrs.classes && node.attrs.classes.length) {\n const lang = node.attrs.classes[0];\n if (pandocCapabilities.highlight_languages.includes(lang) || lang === 'tex') {\n tags.push(lang);\n } else {\n tags.push(`.${lang}`);\n }\n }\n return tags;\n },\n offset: {\n top: 3,\n right: 0,\n },\n editFn: () => codeBlockFormatCommandFn(pandocExtensions, ui, pandocCapabilities.highlight_languages),\n };\n } else {\n return null;\n }\n };\n}\n\nexport default extension;\n","/*\n * list.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\nimport { liftListItem, sinkListItem, splitListItem } from 'prosemirror-schema-list';\nimport { Plugin, PluginKey, EditorState } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { findParentNodeOfType } from 'prosemirror-utils';\n\nimport { Extension, ExtensionContext } from '../../api/extension';\nimport { BaseKey } from '../../api/basekeys';\nimport { EditorUI, kListSpacingTight } from '../../api/ui';\nimport { ListCapabilities } from '../../api/list';\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { PandocTokenType } from '../../api/pandoc';\nimport { kPlatformMac } from '../../api/platform';\nimport { OmniInsertGroup } from '../../api/omni_insert';\nimport { conditionalWrappingInputRule } from '../../api/input_rule';\n\nimport { ListCommand, TightListCommand, EditListPropertiesCommand, editListPropertiesCommandFn } from './list-commands';\n\nimport {\n CheckedListItemNodeView,\n checkedListItemInputRule,\n checkedListInputRule,\n CheckedListItemCommand,\n CheckedListItemToggleCommand,\n} from './list-checked';\n\nimport { writePandocBulletList, writePandocOrderedList, readPandocList } from './list-pandoc';\n\nimport './list-styles.css';\n\nexport enum ListNumberStyle {\n DefaultStyle = 'DefaultStyle',\n Decimal = 'Decimal',\n LowerRoman = 'LowerRoman',\n UpperRoman = 'UpperRoman',\n LowerAlpha = 'LowerAlpha',\n UpperAlpha = 'UpperAlpha',\n Example = 'Example',\n}\n\n// NOTE: HTML output doesn't currently respect this and it's difficult to\n// do with CSS (especially for nested lists). So we allow the user to edit\n// it but it isn't reflected in the editor.\nexport enum ListNumberDelim {\n DefaultDelim = 'DefaultDelim',\n Period = 'Period',\n OneParen = 'OneParen',\n TwoParens = 'TwoParens',\n}\n\nconst plugin = new PluginKey('list');\n\nconst extension = (context: ExtensionContext): Extension => {\n const { pandocExtensions, ui } = context;\n\n // determine list capabilities based on active format options\n const capabilities: ListCapabilities = {\n tasks: pandocExtensions.task_lists,\n fancy: pandocExtensions.fancy_lists,\n /*\n Always disable example lists b/c they don't round trip through the AST:\n - (@good) referenced elsewhere via (@good) just becomes a generic example (@) with \n a literal numeric reference.\n - The writer doesn't preserve the (@) or the (@good) when writing\n */\n // example: pandocExtensions.fancy_lists && pandocExtensions.example_lists,\n example: false,\n order: pandocExtensions.startnum,\n };\n\n return {\n nodes: [\n {\n name: 'list_item',\n spec: {\n content: 'list_item_block block*',\n attrs: {\n checked: { default: null },\n },\n defining: true,\n parseDOM: [\n {\n tag: 'li',\n getAttrs: (dom: Node | string) => {\n const el = dom as Element;\n const attrs: any = {};\n if (capabilities.tasks && el.hasAttribute('data-checked')) {\n attrs.checked = el.getAttribute('data-checked') === 'true';\n }\n return attrs;\n },\n },\n ],\n toDOM(node) {\n const attrs: any = {\n class: 'pm-list-item',\n };\n if (capabilities.tasks && node.attrs.checked !== null) {\n attrs['data-checked'] = node.attrs.checked ? 'true' : 'false';\n }\n return ['li', attrs, 0];\n },\n },\n pandoc: {},\n },\n {\n name: 'bullet_list',\n spec: {\n content: 'list_item+',\n group: 'block',\n attrs: {\n tight: { default: false },\n },\n parseDOM: [\n {\n tag: 'ul',\n getAttrs: (dom: Node | string) => {\n const el = dom as Element;\n const attrs: any = {};\n if (el.hasAttribute('data-tight')) {\n attrs.tight = true;\n }\n return attrs;\n },\n },\n ],\n toDOM(node) {\n const attrs: { [key: string]: string } = {};\n attrs.class = 'pm-list pm-bullet-list';\n if (node.attrs.tight) {\n attrs['data-tight'] = 'true';\n }\n return ['ul', attrs, 0];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.BulletList,\n handler: (schema: Schema) => readPandocList(schema.nodes.bullet_list, capabilities),\n },\n ],\n writer: writePandocBulletList(capabilities),\n },\n\n attr_edit: listAttrEdit('bullet_list', capabilities, ui),\n },\n {\n name: 'ordered_list',\n spec: {\n content: 'list_item+',\n group: 'block',\n attrs: {\n tight: { default: false },\n order: { default: 1 },\n number_style: { default: ListNumberStyle.DefaultStyle },\n number_delim: { default: ListNumberDelim.DefaultDelim },\n },\n parseDOM: [\n {\n tag: 'ol',\n getAttrs(dom: Node | string) {\n const el = dom as Element;\n\n const attrs: any = {};\n attrs.tight = el.hasAttribute('data-tight');\n\n if (capabilities.order) {\n const order: string | null = el.getAttribute('start');\n if (!order) {\n attrs.order = 1;\n } else {\n attrs.order = parseInt(order, 10) || 1;\n }\n }\n\n if (capabilities.fancy) {\n if (capabilities.example && el.getAttribute('data-example')) {\n attrs.number_style = ListNumberStyle.Example;\n } else {\n attrs.number_style = typeToNumberStyle(el.getAttribute('type'));\n }\n const numberDelim = el.getAttribute('data-number-delim');\n if (numberDelim) {\n attrs.number_delim = numberDelim;\n }\n }\n\n return attrs;\n },\n },\n ],\n toDOM(node) {\n const attrs: { [key: string]: string } = {};\n attrs.class = 'pm-list pm-ordered-list';\n if (node.attrs.tight) {\n attrs['data-tight'] = 'true';\n }\n if (capabilities.order && node.attrs.order !== 1) {\n attrs.start = node.attrs.order;\n }\n if (capabilities.fancy) {\n const type = numberStyleToType(node.attrs.number_style);\n if (type) {\n attrs.type = type;\n }\n if (capabilities.example) {\n if (node.attrs.number_style === ListNumberStyle.Example) {\n attrs['data-example'] = '1';\n }\n }\n attrs['data-number-delim'] = node.attrs.number_delim;\n }\n return ['ol', attrs, 0];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.OrderedList,\n handler: (schema: Schema) => readPandocList(schema.nodes.ordered_list, capabilities),\n },\n ],\n writer: writePandocOrderedList(capabilities),\n },\n\n attr_edit: listAttrEdit('ordered_list', capabilities, ui),\n },\n ],\n\n plugins: (schema: Schema) => {\n const plugins: Plugin[] = [];\n if (capabilities.tasks) {\n plugins.push(\n new Plugin({\n key: plugin,\n props: {\n nodeViews: {\n list_item(node: ProsemirrorNode, view: EditorView, getPos: boolean | (() => number)) {\n return new CheckedListItemNodeView(node, view, getPos as () => number);\n },\n },\n },\n }),\n );\n }\n return plugins;\n },\n\n commands: (schema: Schema) => {\n const commands = [\n new ListCommand(\n EditorCommandId.BulletList,\n kPlatformMac ? ['Shift-Mod-8'] : [],\n schema.nodes.bullet_list,\n schema.nodes.list_item,\n bulletListOmniInsert(ui),\n ui.prefs,\n ),\n new ListCommand(\n EditorCommandId.OrderedList,\n kPlatformMac ? ['Shift-Mod-7'] : [],\n schema.nodes.ordered_list,\n schema.nodes.list_item,\n orderedListOmniInsert(ui),\n ui.prefs,\n ),\n new ProsemirrorCommand(EditorCommandId.ListItemSink, ['Tab'], sinkListItem(schema.nodes.list_item)),\n new ProsemirrorCommand(EditorCommandId.ListItemLift, ['Shift-Tab'], liftListItem(schema.nodes.list_item)),\n new ProsemirrorCommand(EditorCommandId.ListItemSplit, ['Enter'], splitListItem(schema.nodes.list_item)),\n new TightListCommand(),\n ];\n if (capabilities.fancy) {\n commands.push(new EditListPropertiesCommand(ui, capabilities));\n }\n if (capabilities.tasks) {\n commands.push(\n new CheckedListItemCommand(schema.nodes.list_item),\n new CheckedListItemToggleCommand(schema.nodes.list_item),\n );\n }\n return commands;\n },\n\n baseKeys: (schema: Schema) => {\n return [\n { key: BaseKey.Enter, command: splitListItem(schema.nodes.list_item) },\n { key: BaseKey.Tab, command: sinkListItem(schema.nodes.list_item) },\n { key: BaseKey.ShiftTab, command: liftListItem(schema.nodes.list_item) },\n ];\n },\n\n inputRules: (schema: Schema) => {\n // reflect tight pref\n const tightFn = () => {\n return {\n tight: ui.prefs.listSpacing() === kListSpacingTight,\n };\n };\n\n const isNotInHeading = (state: EditorState) => {\n return !findParentNodeOfType(schema.nodes.heading)(state.selection);\n };\n\n const rules = [\n conditionalWrappingInputRule(/^\\s*([-+*])\\s$/, schema.nodes.bullet_list, isNotInHeading, tightFn),\n conditionalWrappingInputRule(\n /^(\\d+)\\.\\s$/,\n schema.nodes.ordered_list,\n isNotInHeading,\n match => ({ order: +match[1], tight: tightFn() }),\n (match, node) => node.childCount + node.attrs.order === +match[1],\n ),\n ];\n if (capabilities.tasks) {\n rules.push(checkedListItemInputRule(), checkedListInputRule(schema));\n }\n return rules;\n },\n };\n};\n\nfunction listAttrEdit(type: string, capabilities: ListCapabilities, ui: EditorUI) {\n return () => {\n return {\n type: (schema: Schema) => schema.nodes[type],\n editFn: () => editListPropertiesCommandFn(ui, capabilities),\n offset: {\n top: 5,\n right: 5,\n },\n };\n };\n}\n\nfunction numberStyleToType(style: ListNumberStyle): string | null {\n switch (style) {\n case ListNumberStyle.DefaultStyle:\n case ListNumberStyle.Decimal:\n case ListNumberStyle.Example:\n return 'l';\n case ListNumberStyle.LowerAlpha:\n return 'a';\n case ListNumberStyle.UpperAlpha:\n return 'A';\n case ListNumberStyle.LowerRoman:\n return 'i';\n case ListNumberStyle.UpperRoman:\n return 'I';\n default:\n return null;\n }\n}\n\nfunction typeToNumberStyle(type: string | null): ListNumberStyle {\n switch (type) {\n case 'l':\n return ListNumberStyle.Decimal;\n case 'a':\n return ListNumberStyle.LowerAlpha;\n case 'A':\n return ListNumberStyle.UpperAlpha;\n case 'i':\n return ListNumberStyle.LowerRoman;\n case 'I':\n return ListNumberStyle.UpperRoman;\n default:\n return ListNumberStyle.Decimal;\n }\n}\n\nfunction bulletListOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Bullet List'),\n description: ui.context.translateText('List using bullets for items'),\n group: OmniInsertGroup.Lists,\n priority: 5,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.bullet_list_dark! : ui.images.omni_insert?.bullet_list!),\n };\n}\n\nfunction orderedListOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Numbered List'),\n description: ui.context.translateText('List using numbers for items'),\n group: OmniInsertGroup.Lists,\n priority: 4,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.ordered_list_dark! : ui.images.omni_insert?.ordered_list!,\n };\n}\n\nexport default extension;\n","/*\n * list-commands.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { NodeType, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { autoJoin } from 'prosemirror-commands';\nimport { NodeWithPos, findParentNode } from 'prosemirror-utils';\n\nimport { NodeCommand, toggleList, ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { EditorUI, EditorUIPrefs } from '../../api/ui';\nimport { ListProps } from '../../api/ui-dialogs';\nimport { ListType, ListCapabilities, isList } from '../../api/list';\nimport { OmniInsert } from '../../api/omni_insert';\n\nexport class ListCommand extends NodeCommand {\n constructor(\n id: EditorCommandId,\n keymap: string[],\n listType: NodeType,\n listItemType: NodeType,\n omniInsert: OmniInsert,\n prefs: EditorUIPrefs,\n ) {\n super(id, keymap, listType, {}, autoJoin(toggleList(listType, listItemType, prefs), [listType.name]), omniInsert);\n }\n}\n\nexport class TightListCommand extends ProsemirrorCommand {\n constructor() {\n super(\n EditorCommandId.TightList,\n ['Mod-Alt-9'],\n (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const parentList = findParentNode(isList)(state.selection);\n if (!parentList) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n const node = parentList.node;\n tr.setNodeMarkup(parentList.pos, node.type, {\n ...node.attrs,\n tight: !node.attrs.tight,\n });\n dispatch(tr);\n }\n\n return true;\n },\n );\n }\n\n public isActive(state: EditorState): boolean {\n if (this.isEnabled(state)) {\n const itemNode = findParentNode(isList)(state.selection) as NodeWithPos;\n return itemNode.node.attrs.tight;\n } else {\n return false;\n }\n }\n}\n\nexport function editListPropertiesCommandFn(ui: EditorUI, capabilities: ListCapabilities) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // see if a parent node is a list\n let node: ProsemirrorNode | null = null;\n let pos: number = 0;\n const nodeWithPos = findParentNode(isList)(state.selection);\n if (nodeWithPos) {\n node = nodeWithPos.node;\n pos = nodeWithPos.pos;\n }\n\n // return false (disabled) for no targets\n if (!node) {\n return false;\n }\n\n // execute command when requested\n async function asyncEditList() {\n if (dispatch) {\n await editList(node as ProsemirrorNode, pos, state, dispatch, ui, capabilities);\n if (view) {\n view.focus();\n }\n }\n }\n asyncEditList();\n\n return true;\n };\n}\n\nexport class EditListPropertiesCommand extends ProsemirrorCommand {\n constructor(ui: EditorUI, capabilities: ListCapabilities) {\n super(EditorCommandId.EditListProperties, [], editListPropertiesCommandFn(ui, capabilities));\n }\n}\n\nasync function editList(\n node: ProsemirrorNode,\n pos: number,\n state: EditorState,\n dispatch: (tr: Transaction) => void,\n ui: EditorUI,\n capabilities: ListCapabilities,\n): Promise {\n // get list properties\n const schema = node.type.schema;\n const attrs = node.attrs;\n const props = {\n ...attrs,\n type: node.type === schema.nodes.ordered_list ? ListType.Ordered : ListType.Bullet,\n } as ListProps;\n\n // edit list\n const result = await ui.dialogs.editList(props, capabilities);\n\n // apply result\n if (result) {\n const tr = state.tr;\n const listType = result.type === ListType.Ordered ? schema.nodes.ordered_list : schema.nodes.bullet_list;\n tr.setNodeMarkup(pos, listType, {\n ...attrs,\n ...result,\n });\n dispatch(tr);\n }\n}\n","/*\n * list-checked.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, Fragment, NodeType } from 'prosemirror-model';\nimport { NodeView, EditorView } from 'prosemirror-view';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { findParentNodeOfType, NodeWithPos, setTextSelection } from 'prosemirror-utils';\nimport { InputRule, wrappingInputRule } from 'prosemirror-inputrules';\n\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { PandocToken, mapTokens } from '../../api/pandoc';\n\n// custom NodeView that accomodates display / interaction with item check boxes\nexport class CheckedListItemNodeView implements NodeView {\n public readonly dom: HTMLElement;\n public readonly contentDOM: HTMLElement;\n\n private readonly node: ProsemirrorNode;\n private readonly view: EditorView;\n private readonly getPos: () => number;\n\n constructor(node: ProsemirrorNode, view: EditorView, getPos: () => number) {\n this.node = node;\n this.view = view;\n this.getPos = getPos;\n\n // create root li element\n this.dom = window.document.createElement('li');\n if (node.attrs.tight) {\n this.dom.setAttribute('data-tight', 'true');\n }\n\n const container = window.document.createElement('div');\n container.classList.add('list-item-container');\n this.dom.appendChild(container);\n\n // add checkbox for checked items\n if (node.attrs.checked !== null) {\n this.dom.setAttribute('data-checked', node.attrs.checked ? 'true' : 'false');\n\n // checkbox for editing checked state\n const input = window.document.createElement('input');\n input.classList.add('list-item-checkbox');\n input.setAttribute('type', 'checkbox');\n input.checked = node.attrs.checked;\n input.contentEditable = 'false';\n input.disabled = !(view as any).editable;\n input.addEventListener('mousedown', (ev: Event) => {\n ev.preventDefault(); // don't steal focus\n });\n input.addEventListener('change', (ev: Event) => {\n const tr = view.state.tr;\n tr.setNodeMarkup(getPos(), node.type, {\n ...node.attrs,\n checked: (ev.target as HTMLInputElement).checked,\n });\n setTextSelection(getPos() + 1)(tr);\n view.dispatch(tr);\n });\n container.appendChild(input);\n }\n\n // content div\n const content = window.document.createElement('div');\n content.classList.add('list-item-content');\n this.contentDOM = content;\n container.appendChild(content);\n }\n}\n\n// command to toggle checked list items\nexport function checkedListItemCommandFn(itemType: NodeType) {\n return (state: EditorState, dispatch?: ((tr: Transaction) => void) | undefined) => {\n const itemNode = findParentNodeOfType(itemType)(state.selection);\n if (!itemNode) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n if (itemNode.node.attrs.checked !== null) {\n setItemChecked(tr, itemNode, null);\n } else {\n setItemChecked(tr, itemNode, false);\n }\n\n dispatch(tr);\n }\n\n return true;\n };\n}\n\nexport function checkedListItemToggleCommandFn(itemType: NodeType) {\n return (state: EditorState, dispatch?: ((tr: Transaction) => void) | undefined) => {\n const itemNode = findParentNodeOfType(itemType)(state.selection);\n if (!itemNode || itemNode.node.attrs.checked === null) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n setItemChecked(tr, itemNode, !itemNode.node.attrs.checked);\n dispatch(tr);\n }\n\n return true;\n };\n}\n\nexport class CheckedListItemCommand extends ProsemirrorCommand {\n constructor(itemType: NodeType) {\n super(EditorCommandId.ListItemCheck, [], checkedListItemCommandFn(itemType));\n }\n\n public isActive(state: EditorState): boolean {\n if (this.isEnabled(state)) {\n const itemNode = findParentNodeOfType(state.schema.nodes.list_item)(state.selection) as NodeWithPos;\n return itemNode.node.attrs.checked !== null;\n } else {\n return false;\n }\n }\n}\n\nexport class CheckedListItemToggleCommand extends ProsemirrorCommand {\n private itemType: NodeType;\n\n constructor(itemType: NodeType) {\n super(EditorCommandId.ListItemCheckToggle, [], checkedListItemToggleCommandFn(itemType));\n this.itemType = itemType;\n }\n\n public isActive(state: EditorState): boolean {\n const itemNode = findParentNodeOfType(this.itemType)(state.selection);\n return itemNode && itemNode.node.attrs.checked;\n }\n}\n\n// allow users to type [x] or [ ] to define a checked list item\nexport function checkedListItemInputRule() {\n return new InputRule(/\\[([ x])\\]\\s$/, (state: EditorState, match: string[], start: number, end: number) => {\n const schema = state.schema;\n\n const itemNode = findParentNodeOfType(schema.nodes.list_item)(state.selection);\n if (itemNode) {\n // create transaction\n const tr = state.tr;\n\n // set checked\n setItemChecked(tr, itemNode, match[1]);\n\n // delete entered text\n tr.delete(start, end);\n\n // return transaction\n return tr;\n } else {\n return null;\n }\n });\n}\n\n// allow users to begin a new checked list by typing [x] or [ ] at the beginning of a line\nexport function checkedListInputRule(schema: Schema) {\n // regex to match checked list at the beginning of a line\n const regex = /^\\s*\\[([ x])\\]\\s$/;\n\n // we are going to steal the handler from the base bullet list wrapping input rule\n const baseInputRule: any = wrappingInputRule(regex, schema.nodes.bullet_list);\n\n return new InputRule(regex, (state: EditorState, match: string[], start: number, end: number) => {\n // call the base handler to create the bullet list\n const tr = baseInputRule.handler(state, match, start, end);\n if (tr) {\n // set the checkbox\n const itemNode = findParentNodeOfType(schema.nodes.list_item)(tr.selection);\n if (itemNode) {\n setItemChecked(tr, itemNode, match[1]);\n }\n\n return tr;\n } else {\n return null;\n }\n });\n}\n\nfunction setItemChecked(tr: Transaction, itemNode: NodeWithPos, check: null | boolean | string) {\n tr.setNodeMarkup(itemNode.pos, itemNode.node.type, {\n ...itemNode.node.attrs,\n checked: check === null ? null : typeof check === 'string' ? check === 'x' : check,\n });\n}\n// prepend a check mark to the provided fragment\nexport function fragmentWithCheck(schema: Schema, fragment: Fragment, checked: boolean) {\n // create a raw markdown node with [x] or [ ]\n const mark = schema.marks.raw_inline.create({ format: 'markdown' });\n const check = schema.text((checked ? '[x]' : '[ ]') + ' ', [mark]);\n return Fragment.from(check).append(fragment);\n}\n\nconst kCheckedChar = '☒';\nconst kUncheckedChar = '☐';\n\nexport function tokensWithChecked(tokens: PandocToken[]): { checked: null | boolean; tokens: PandocToken[] } {\n // will set this flag based on inspecting the first Str token\n let checked: null | boolean | undefined;\n let lastWasChecked = false;\n\n // map tokens\n const mappedTokens = mapTokens(tokens, tok => {\n // if the last token was checked then strip the next space\n if (tok.t === 'Space' && lastWasChecked) {\n lastWasChecked = false;\n return {\n t: 'Str',\n c: '',\n };\n }\n\n // derive 'checked' from first chraracter of first Str token encountered\n // if we find checked or unchecked then set the flag and strip off\n // the first 2 chraracters (the check and the space after it)\n else if (tok.t === 'Str' && checked === undefined) {\n let text = tok.c as string;\n if (text.charAt(0) === kCheckedChar) {\n checked = true;\n lastWasChecked = true;\n text = text.slice(1);\n } else if (text.charAt(0) === kUncheckedChar) {\n checked = false;\n lastWasChecked = true;\n text = text.slice(1);\n } else {\n checked = null;\n }\n return {\n t: 'Str',\n c: text,\n };\n } else {\n return tok;\n }\n });\n\n // return\n return {\n checked: checked !== undefined ? checked : null,\n tokens: mappedTokens,\n };\n}\n","/*\n * list-pandoc.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, NodeType, Fragment } from 'prosemirror-model';\n\nimport { PandocOutput, PandocToken, ProsemirrorWriter, PandocTokenType } from '../../api/pandoc';\n\nimport { fragmentWithCheck, tokensWithChecked } from './list-checked';\nimport { ListNumberDelim, ListNumberStyle } from './list';\nimport { ListCapabilities } from '../../api/list';\n\nconst LIST_ATTRIBS = 0;\nconst LIST_CHILDREN = 1;\n\nconst LIST_ATTRIB_ORDER = 0;\nconst LIST_ATTRIB_NUMBER_STYLE = 1;\nconst LIST_ATTRIB_NUMBER_DELIM = 2;\n\n// Note that we are planning on eliminating the markdownOutputFilter after this commit\n// as there will be no more uses of it and it plays poorly w/ e.g. pandoc table output\n// which needs to reliably know the number of characters wide each column will be).\n// (previous uses of markdownOutputFilter were converted to use output.writeRawMarkdown).\n// So, if we are attempting to re-enable example lists b/c there is now round tripping\n// of example lists through the pandoc AST we need an alternative way to fixup\n// example list output (likely a more robust pandoc AST).\nconst kListItemExampleSentinel = '20543127-1873-4833-AC49-5B352CFA2AF5';\nconst kListItemExampleRegex = new RegExp(`\\\\(\\\\d+\\\\) ${kListItemExampleSentinel}`, 'g');\n\nexport function readPandocList(nodeType: NodeType, capabilities: ListCapabilities) {\n // alias schema\n const schema = nodeType.schema;\n\n // default extraction functions\n let getChildren = (tok: PandocToken) => tok.c;\n let getAttrs = (tok: PandocToken): { [key: string]: any } => ({});\n\n // function to read the number style (convert example to default if we\n // don't support example lists)\n const readNumberStyle = (attribs: any) => {\n if (capabilities.fancy) {\n const style = attribs[LIST_ATTRIB_NUMBER_STYLE].t;\n if (style === ListNumberStyle.Example && !capabilities.example) {\n return ListNumberStyle.DefaultStyle;\n } else {\n return style;\n }\n } else {\n return ListNumberStyle.DefaultStyle;\n }\n };\n\n // specialize for ordered_list\n if (nodeType === schema.nodes.ordered_list) {\n getAttrs = (tok: PandocToken) => {\n const attribs = tok.c[LIST_ATTRIBS];\n return {\n order: capabilities.order ? attribs[LIST_ATTRIB_ORDER] : 1,\n number_style: readNumberStyle(attribs),\n number_delim: capabilities.fancy ? attribs[LIST_ATTRIB_NUMBER_DELIM].t : ListNumberDelim.DefaultDelim,\n };\n };\n getChildren = (tok: PandocToken) => tok.c[LIST_CHILDREN];\n }\n\n const listItemNodeType = schema.nodes.list_item;\n return (writer: ProsemirrorWriter, tok: PandocToken) => {\n const children = getChildren(tok);\n const attrs = getAttrs(tok);\n attrs.tight = children.length && children[0].length && children[0][0].t === 'Plain';\n writer.openNode(nodeType, attrs);\n children.forEach((child: PandocToken[]) => {\n // setup tokens/attribs for output\n let tokens = child;\n const childAttrs: { checked: null | boolean } = { checked: null };\n\n // special task list processing if the current format supports task lists\n if (capabilities.tasks) {\n // look for checkbox in first character of child tokens\n // if we see it, remove it and set childAttrs.checked as appropriate\n const childWithChecked = tokensWithChecked(child);\n childAttrs.checked = childWithChecked.checked;\n tokens = childWithChecked.tokens;\n }\n\n // process children\n writer.openNode(listItemNodeType, childAttrs);\n writer.writeTokens(tokens);\n writer.closeNode();\n });\n writer.closeNode();\n };\n}\n\nexport function writePandocOrderedList(capabilities: ListCapabilities) {\n return (output: PandocOutput, node: ProsemirrorNode) => {\n // alias some list options\n const options = listNodeOptions(node, capabilities);\n\n // force delim to two parens for example styles. we do this\n // to simplify the search/replace of example list sentinels\n // during conversion post-processing\n const delim = options.example ? ListNumberDelim.TwoParens : node.attrs.number_delim;\n\n output.writeToken(PandocTokenType.OrderedList, () => {\n output.writeArray(() => {\n output.write(capabilities.order ? node.attrs.order : 1);\n output.writeToken(capabilities.fancy ? node.attrs.number_style : ListNumberStyle.DefaultStyle);\n output.writeToken(capabilities.fancy ? delim : ListNumberDelim.DefaultDelim);\n });\n output.writeArray(() => {\n node.forEach(item => writePandocListItem(output, options, item));\n });\n });\n };\n}\n\nexport function writePandocBulletList(capabilities: ListCapabilities) {\n return (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.BulletList, () => {\n node.forEach(item => writePandocListItem(output, listNodeOptions(node, capabilities), item));\n });\n };\n}\n\nexport function exampleListPandocMarkdownOutputFilter(markdown: string) {\n return markdown.replace(kListItemExampleRegex, '(@) ');\n}\n\ninterface ListNodeOptions {\n tight: boolean;\n example: boolean;\n}\n\nfunction listNodeOptions(node: ProsemirrorNode, capabilities: ListCapabilities): ListNodeOptions {\n const options = {\n tight: node.attrs.tight,\n example: capabilities.example ? node.attrs.number_style === ListNumberStyle.Example : false,\n };\n\n // if it's tight see if we need to override b/c of multiple blocks\n node.forEach(item => {\n if (options.tight && item.childCount > 1) {\n options.tight = false;\n }\n });\n\n return options;\n}\n\nfunction writePandocListItem(output: PandocOutput, options: ListNodeOptions, node: ProsemirrorNode) {\n const checked = node.attrs.checked;\n\n output.writeArray(() => {\n node.forEach((itemNode: ProsemirrorNode, _offset, index) => {\n if (itemNode.type === node.type.schema.nodes.paragraph) {\n const paraItemBlockType = options.tight ? PandocTokenType.Plain : PandocTokenType.Para;\n output.writeToken(paraItemBlockType, () => {\n // for first item block, prepend check mark if we have one\n if (checked !== null && index === 0) {\n writeListItemInlines(\n output,\n options.example,\n fragmentWithCheck(node.type.schema, itemNode.content, checked),\n index,\n );\n } else {\n writeListItemInlines(output, options.example, itemNode.content, index);\n }\n });\n } else {\n output.writeNode(itemNode);\n }\n });\n });\n}\n\nfunction writeListItemInlines(output: PandocOutput, example: boolean, fragment: Fragment, index: number) {\n if (index === 0 && example) {\n output.writeToken(PandocTokenType.Str, kListItemExampleSentinel);\n }\n output.writeInlines(fragment);\n}\n","/*\n * image.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, DOMOutputSpec } from 'prosemirror-model';\nimport { EditorState, NodeSelection, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { Extension, ExtensionContext } from '../../api/extension';\nimport { canInsertNode } from '../../api/node';\nimport { selectionIsImageNode, selectionIsEmptyParagraph } from '../../api/selection';\nimport {\n pandocAttrSpec,\n pandocAttrParseDom,\n pandocAttrToDomAttr,\n pandocAttrReadAST,\n pandocAttrAvailable,\n} from '../../api/pandoc_attr';\nimport {\n PandocOutput,\n PandocTokenType,\n ProsemirrorWriter,\n PandocToken,\n stringifyTokens,\n imageAttributesAvailable,\n} from '../../api/pandoc';\nimport { EditorUI } from '../../api/ui';\nimport { ImageDimensions } from '../../api/image';\nimport { asHTMLTag } from '../../api/html';\nimport { OmniInsertGroup } from '../../api/omni_insert';\n\nimport { imageDialog } from './image-dialog';\nimport { imageDimensionsFromImg, imageContainerWidth, inlineHTMLIsImage } from './image-util';\nimport { imageTextSelectionPlugin } from './image-textsel';\nimport { posHasProhibitedFigureParent } from './figure';\nimport { imageEventsPlugin } from './image-events';\nimport { imageNodeViewPlugins } from './image-view';\n\nconst TARGET_URL = 0;\nconst TARGET_TITLE = 1;\n\nconst IMAGE_ATTR = 0;\nconst IMAGE_ALT = 1;\nconst IMAGE_TARGET = 2;\n\nconst extension = (context: ExtensionContext): Extension => {\n const { pandocExtensions, ui, events } = context;\n\n const imageAttr = imageAttributesAvailable(pandocExtensions);\n\n return {\n nodes: [\n {\n name: 'image',\n spec: {\n inline: true,\n attrs: imageNodeAttrsSpec(false, imageAttr),\n group: 'inline',\n draggable: true,\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs(dom: Node | string) {\n return imageAttrsFromDOM(dom as Element, imageAttr);\n },\n },\n ],\n toDOM(node: ProsemirrorNode) {\n return imageDOMOutputSpec(node, imageAttr);\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Image,\n handler: pandocImageHandler(false, imageAttr),\n },\n ],\n inlineHTMLReader: pandocExtensions.raw_html ? imageInlineHTMLReader : undefined,\n writer: imagePandocOutputWriter(false, ui),\n },\n\n attr_edit: () => ({\n type: (schema: Schema) => schema.nodes.image,\n noDecorator: true,\n editFn: () => imageCommand(ui, imageAttr),\n }),\n },\n ],\n\n commands: (_schema: Schema) => {\n return [\n new ProsemirrorCommand(\n EditorCommandId.Image,\n ['Shift-Mod-i'],\n imageCommand(ui, imageAttr),\n imageOmniInsert(ui),\n ),\n ];\n },\n\n plugins: (schema: Schema) => {\n return [\n imageTextSelectionPlugin(),\n imageEventsPlugin(ui),\n ...imageNodeViewPlugins('image', ui, events, pandocExtensions),\n ];\n },\n };\n};\n\nexport function pandocImageHandler(figure: boolean, imageAttributes: boolean) {\n return (schema: Schema) => (writer: ProsemirrorWriter, tok: PandocToken) => {\n // get attributes\n const target = tok.c[IMAGE_TARGET];\n const attrs = {\n src: decodeURI(target[TARGET_URL]),\n title: readPandocTitle(target[TARGET_TITLE]),\n alt: '',\n ...(imageAttributes ? pandocAttrReadAST(tok, IMAGE_ATTR) : {}),\n };\n\n // add alt as plain text if it's not a figure\n if (!figure) {\n attrs.alt = stringifyTokens(tok.c[IMAGE_ALT]);\n }\n\n // read image and (if appropriate) children\n writer.openNode(figure ? schema.nodes.figure : schema.nodes.image, attrs);\n if (figure) {\n writer.writeTokens(tok.c[IMAGE_ALT]);\n }\n writer.closeNode();\n };\n}\n\nexport function imagePandocOutputWriter(figure: boolean, ui: EditorUI) {\n return (output: PandocOutput, node: ProsemirrorNode) => {\n // default writer for markdown images\n let writer = () => {\n output.writeToken(PandocTokenType.Image, () => {\n if (output.extensions.link_attributes) {\n output.writeAttr(node.attrs.id, node.attrs.classes, node.attrs.keyvalue);\n } else {\n output.writeAttr();\n }\n output.writeArray(() => {\n if (figure) {\n output.writeInlines(node.content);\n } else {\n output.writeText(node.attrs.alt);\n }\n });\n output.write([encodeURI(node.attrs.src), node.attrs.title || '']);\n });\n };\n\n // see if we need to write raw html\n const requireHTML =\n pandocAttrAvailable(node.attrs) && // attribs need to be written\n !output.extensions.link_attributes && // markdown attribs not supported\n output.extensions.raw_html; // raw html is supported\n\n // if we do, then substitute a raw html writer\n if (node.attrs.raw || requireHTML) {\n writer = () => {\n const imgAttr = imageDOMAttributes(node, true, false);\n const html = asHTMLTag('img', imgAttr, true, true);\n output.writeRawMarkdown(html);\n };\n }\n\n // write (wrap in paragraph and possibly link for figures)\n if (figure) {\n let writeFigure = writer;\n if (node.attrs.linkTo) {\n writeFigure = () => {\n output.writeLink(node.attrs.linkTo, '', null, writer);\n };\n }\n output.writeToken(PandocTokenType.Para, writeFigure);\n } else {\n writer();\n }\n };\n}\n\n// parse inline html with as image node\nfunction imageInlineHTMLReader(schema: Schema, html: string, writer?: ProsemirrorWriter) {\n const isImage = inlineHTMLIsImage(html);\n if (!isImage) {\n return false;\n }\n\n if (writer) {\n const attrs = imageAttrsFromHTML(html);\n if (attrs) {\n attrs.raw = true;\n writer.addNode(schema.nodes.image, attrs, []);\n } else {\n return false;\n }\n }\n\n return isImage;\n}\n\nexport function imageDOMOutputSpec(node: ProsemirrorNode, imageAttributes: boolean): DOMOutputSpec {\n return ['img', imageDOMAttributes(node, imageAttributes)];\n}\n\nexport function imageDOMAttributes(\n node: ProsemirrorNode,\n imageAttributes: boolean,\n marker = true,\n): { [key: string]: string } {\n const attr: { [key: string]: string } = {\n src: node.attrs.src,\n };\n const title = node.attrs.title;\n if (title) {\n attr.title = title;\n }\n const alt = node.attrs.alt || node.textContent;\n if (alt) {\n attr.alt = alt;\n }\n\n return {\n ...attr,\n ...(imageAttributes ? pandocAttrToDomAttr(node.attrs, marker) : {}),\n };\n}\n\nexport function imageNodeAttrsSpec(linkTo: boolean, imageAttributes: boolean) {\n return {\n src: {},\n title: { default: null },\n alt: { default: null },\n raw: { default: false },\n ...(linkTo ? { linkTo: { default: null } } : {}),\n ...(imageAttributes ? pandocAttrSpec : {}),\n };\n}\n\nexport function imageAttrsFromDOM(el: Element, imageAttributes: boolean, forceAttrs = false) {\n const attrs: { [key: string]: string | null } = {\n src: el.getAttribute('src') || null,\n title: el.getAttribute('title') || null,\n alt: el.getAttribute('alt') || null,\n };\n return {\n ...attrs,\n ...(imageAttributes ? pandocAttrParseDom(el, attrs, forceAttrs) : {}),\n };\n}\n\nexport function imageAttrsFromHTML(html: string) {\n const parser = new window.DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n if (doc.body && doc.body.firstChild instanceof HTMLImageElement) {\n return imageAttrsFromDOM(doc.body.firstChild, true, true);\n } else {\n return null;\n }\n}\n\nexport function imageCommand(editorUI: EditorUI, imageAttributes: boolean) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const schema = state.schema;\n\n if (!canInsertNode(state, schema.nodes.image) && !canInsertNode(state, schema.nodes.figure)) {\n return false;\n }\n\n if (dispatch && view) {\n // see if we are editing an existing node\n let node: ProsemirrorNode | null = null;\n let nodeType = schema.nodes.image;\n let img: HTMLImageElement | null = null;\n let imgDimensions: ImageDimensions | null = null;\n if (selectionIsImageNode(schema, state.selection)) {\n node = (state.selection as NodeSelection).node;\n nodeType = node.type;\n if (nodeType === schema.nodes.figure) {\n const figure = view.nodeDOM(state.selection.from) as HTMLElement;\n img = figure.firstChild!.firstChild as HTMLImageElement;\n } else {\n const span = view.nodeDOM(state.selection.from) as HTMLElement;\n img = span.firstChild! as HTMLImageElement;\n }\n if (img) {\n const containerWidth = imageContainerWidth(state.selection.from, view);\n imgDimensions = imageDimensionsFromImg(img, containerWidth);\n }\n }\n\n // see if we are in an empty paragraph (in that case insert a figure)\n if (\n selectionIsEmptyParagraph(schema, state.selection) &&\n !posHasProhibitedFigureParent(schema, state.selection.$head)\n ) {\n nodeType = schema.nodes.figure;\n }\n\n // show dialog\n imageDialog(node, imgDimensions, nodeType, view, editorUI, imageAttributes);\n }\n\n return true;\n };\n}\n\nfunction imageOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Image...'),\n description: ui.context.translateText('Figure or inline image'),\n group: OmniInsertGroup.Content,\n priority: 10,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.image_dark! : ui.images.omni_insert?.image!),\n };\n}\n\nfunction readPandocTitle(title: string | null) {\n if (title) {\n return title.replace(/^(fig:)/, '');\n } else {\n return title;\n }\n}\n\nexport default extension;\n","/*\n * image-dialog.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, NodeType, Fragment, Mark } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\n\nimport { insertAndSelectNode } from '../../api/node';\nimport { EditorUI } from '../../api/ui';\nimport { ImageProps } from '../../api/ui-dialogs';\nimport { extractSizeStyles, kPercentUnit, kPixelUnit } from '../../api/css';\nimport { ImageType, ImageDimensions, isNaturalAspectRatio } from '../../api/image';\nimport { kWidthAttrib, kHeightAttrib } from '../../api/pandoc_attr';\n\nimport { imagePropsWithSizes, hasPercentWidth } from './image-util';\n\nexport async function imageDialog(\n node: ProsemirrorNode | null,\n dims: ImageDimensions | null,\n nodeType: NodeType,\n view: EditorView,\n editorUI: EditorUI,\n imageAttributes: boolean,\n) {\n // alias schema\n const schema = view.state.schema;\n\n // if we are being called with an existing node then read it's attributes\n let content = Fragment.empty;\n let image: ImageProps = { src: null };\n let linkMark: Mark | undefined;\n let marks: Mark[] = [];\n if (node && dims && node.type === nodeType) {\n // base attributess\n image = {\n ...(node.attrs as ImageProps),\n alt: nodeType === schema.nodes.figure ? node.textContent : node.attrs.alt,\n };\n\n // move width and height out of style and into keyvalue if necessary\n image = {\n ...image,\n keyvalue: extractSizeStyles(image.keyvalue),\n };\n\n // move width, height, and units out of keyvalue into explicit\n // top level image properties if necessary\n image = imagePropsWithSizes(image, dims);\n\n // record marks / linkTo\n if (nodeType === schema.nodes.image) {\n marks = node.marks;\n linkMark = node.marks.find(mark => mark.type === schema.marks.link);\n if (linkMark) {\n image.linkTo = linkMark.attrs.href;\n }\n }\n\n // content (will be caption for figures)\n content = node.content;\n } else {\n // create a new image\n image = nodeType.create(image).attrs as ImageProps;\n }\n\n // determine the type\n const type = nodeType === view.state.schema.nodes.image ? ImageType.Image : ImageType.Figure;\n\n // edit the image\n const result = await editorUI.dialogs.editImage(image, dims, imageAttributes);\n if (result) {\n // figures treat 'alt' as their content (the caption), but since captions support\n // inline formatting (and the dialog doesn't) we only want to update the\n // content if the alt/caption actually changed (as it will blow away formatting)\n if (type === ImageType.Figure && image.alt !== result.alt) {\n if (result.alt) {\n content = Fragment.from(view.state.schema.text(result.alt));\n } else {\n content = Fragment.empty;\n }\n }\n\n // if we have width and height move them into keyvalue\n let keyvalue = result.keyvalue;\n if (result.units) {\n // no units for px\n const units = result.units && result.units === kPixelUnit ? '' : result.units;\n // width\n if (result.width) {\n let width = result.width;\n if (hasPercentWidth(units)) {\n width = Math.min(width, 100);\n }\n keyvalue = keyvalue || [];\n keyvalue.push([kWidthAttrib, width + units]);\n }\n // only record height if it's not % units and it's not at it's natural height\n if (result.height && units !== kPercentUnit && !isNaturalHeight(result.width, result.height, dims)) {\n keyvalue = keyvalue || [];\n keyvalue.push([kHeightAttrib, result.height + units]);\n }\n }\n\n // merge updated keyvalue\n const imageProps = { ...result, keyvalue };\n\n // update or create link mark as necessary\n if (nodeType === schema.nodes.image) {\n if (linkMark) {\n marks = linkMark.removeFromSet(marks);\n if (imageProps.linkTo) {\n linkMark = linkMark.type.create({ ...linkMark.attrs, href: imageProps.linkTo });\n }\n } else if (imageProps.linkTo) {\n linkMark = schema.marks.link.create({ href: imageProps.linkTo });\n }\n if (imageProps.linkTo && linkMark) {\n marks = linkMark.addToSet(marks);\n }\n }\n\n // create the image\n const newImage = nodeType.createAndFill(imageProps, content, marks);\n\n // insert and select\n if (newImage) {\n insertAndSelectNode(view, newImage);\n }\n }\n\n if (view) {\n view.focus();\n }\n}\n\n// wrapper for isNaturalHeight that handles potentially undefined params\nfunction isNaturalHeight(width: number | undefined, height: number | undefined, dims: ImageDimensions | null) {\n if (width && height && dims) {\n return isNaturalAspectRatio(width, height, dims, false);\n } else {\n return false;\n }\n}\n","/*\n * image-util.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\nimport { findParentNodeClosestToPos } from 'prosemirror-utils';\n\nimport { ImageProps } from '../../api/ui-dialogs';\nimport {\n imageSizePropWithUnit,\n isValidImageSizeUnit,\n ensureContainerWidth,\n isNaturalAspectRatio,\n ImageDimensions,\n} from '../../api/image';\nimport { kWidthAttrib, kHeightAttrib, attrPartitionKeyvalue } from '../../api/pandoc_attr';\nimport { kPercentUnit, kPixelUnit } from '../../api/css';\nimport { elementInnerDimensions } from '../../api/dom';\n\nexport function imagePropsWithSizes(image: ImageProps, dims: ImageDimensions) {\n // pull width, height, and units out of keyvalue if necessary\n // (enables front-ends to provide dedicated UI for width/height)\n // note that if the value doesn't use a unit supported by the\n // UI it's kept within the original keyvalue prop\n if (image.keyvalue) {\n let width: number | undefined;\n let height: number | undefined;\n let units: string | undefined;\n let lockRatio = true;\n const partitionedKeyvalue = attrPartitionKeyvalue([kWidthAttrib, kHeightAttrib], image.keyvalue);\n for (const kv of partitionedKeyvalue.partitioned) {\n const [key, value] = kv;\n let partitioned = false;\n const sizeWithUnit = imageSizePropWithUnit(value);\n if (sizeWithUnit) {\n sizeWithUnit.unit = sizeWithUnit.unit || kPixelUnit;\n if (isValidImageSizeUnit(sizeWithUnit.unit)) {\n if (key === kWidthAttrib) {\n width = sizeWithUnit.size;\n units = sizeWithUnit.unit;\n } else if (key === kHeightAttrib) {\n height = sizeWithUnit.size;\n units = units || sizeWithUnit.unit;\n }\n partitioned = true;\n }\n }\n if (!partitioned) {\n partitionedKeyvalue.base.push(kv);\n }\n }\n if (width && height) {\n lockRatio = isNaturalAspectRatio(width, height, dims, lockRatio);\n }\n return {\n ...image,\n width,\n height,\n units,\n lockRatio,\n keyvalue: partitionedKeyvalue.base,\n };\n } else {\n return image;\n }\n}\n\nexport function imageDimensionsFromImg(img: HTMLImageElement, containerWidth: number) {\n return {\n naturalWidth: img.naturalWidth || null,\n naturalHeight: img.naturalHeight || null,\n containerWidth: ensureContainerWidth(containerWidth),\n };\n}\n\nexport function hasPercentWidth(size: string | null) {\n return !!size && size.endsWith(kPercentUnit);\n}\n\nexport function imageContainerWidth(pos: number, view: EditorView) {\n let containerWidth = (view.dom as HTMLElement).offsetWidth;\n if (containerWidth > 0) {\n if (pos) {\n const imagePos = view.state.doc.resolve(pos);\n const resizeContainer = findParentNodeClosestToPos(imagePos, nd => nd.isBlock);\n if (resizeContainer) {\n const resizeEl = view.domAtPos(resizeContainer.pos + 1);\n containerWidth = elementInnerDimensions(resizeEl.node as HTMLElement).width;\n }\n }\n }\n\n return containerWidth;\n}\n\nexport function inlineHTMLIsImage(html: string) {\n return html\n .trimLeft()\n .toLowerCase()\n .startsWith('({\n key: pluginKey,\n state: {\n init(_config: { [key: string]: any }, instance: EditorState) {\n return DecorationSet.empty;\n },\n apply(tr: Transaction, set: DecorationSet, oldState: EditorState, newState: EditorState) {\n // no decorations for empty or node selection\n if (tr.selection.empty || tr.selection instanceof NodeSelection) {\n return DecorationSet.empty;\n }\n\n const schema = newState.schema;\n const decorations: Decoration[] = [];\n tr.doc.nodesBetween(tr.selection.from, tr.selection.to, (node, pos) => {\n if ([schema.nodes.image, schema.nodes.figure].includes(node.type)) {\n decorations.push(nodeDecoration({ node, pos }, { class: 'pm-image-text-selection' }));\n }\n });\n\n return DecorationSet.create(tr.doc, decorations);\n },\n },\n props: {\n decorations(state: EditorState) {\n return pluginKey.getState(state);\n },\n },\n });\n}\n","/*\n * figure.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, Fragment, ResolvedPos } from 'prosemirror-model';\nimport { Transaction } from 'prosemirror-state';\nimport { Transform } from 'prosemirror-transform';\n\nimport { findChildrenByType, findParentNodeClosestToPos } from 'prosemirror-utils';\n\nimport { Extension, ExtensionContext } from '../../api/extension';\nimport { FixupContext } from '../../api/fixup';\nimport { isSingleLineHTML } from '../../api/html';\nimport { getMarkAttrs } from '../../api/mark';\nimport {\n PandocToken,\n PandocTokenType,\n ProsemirrorWriter,\n kRawBlockContent,\n kRawBlockFormat,\n imageAttributesAvailable,\n} from '../../api/pandoc';\nimport { trTransform } from '../../api/transaction';\n\nimport {\n imageAttrsFromDOM,\n imageNodeAttrsSpec,\n imageDOMOutputSpec,\n imagePandocOutputWriter,\n pandocImageHandler,\n imageAttrsFromHTML,\n imageCommand,\n} from './image';\nimport { inlineHTMLIsImage } from './image-util';\nimport { imageNodeViewPlugins } from './image-view';\nimport { figureKeys } from './figure-keys';\n\nconst extension = (context: ExtensionContext): Extension => {\n const { pandocExtensions, ui, events } = context;\n\n const imageAttr = imageAttributesAvailable(pandocExtensions);\n\n return {\n nodes: [\n {\n name: 'figure',\n spec: {\n attrs: imageNodeAttrsSpec(true, imageAttr),\n content: 'inline*',\n group: 'block',\n draggable: true,\n selectable: true,\n defining: true,\n parseDOM: [\n {\n tag: 'figure',\n contentElement: 'figcaption',\n getAttrs(dom: Node | string) {\n const el = dom as Element;\n const img = el.querySelector('img');\n if (img && img.parentNode === dom) {\n return imageAttrsFromDOM(img, imageAttr);\n } else {\n return {\n src: null,\n title: null,\n };\n }\n },\n },\n ],\n toDOM(node: ProsemirrorNode) {\n return ['figure', imageDOMOutputSpec(node, imageAttr), ['figcaption', { class: 'pm-figcaption' }, 0]];\n },\n },\n pandoc: {\n writer: imagePandocOutputWriter(true, ui),\n\n // intercept paragraphs with a single image and process them as figures\n blockReader: (schema: Schema, tok: PandocToken, writer: ProsemirrorWriter) => {\n // helper to process html image\n const handleHTMLImage = (html: string) => {\n const attrs = imageAttrsFromHTML(html);\n if (attrs) {\n attrs.raw = true;\n writer.addNode(schema.nodes.figure, attrs, []);\n return true;\n } else {\n return false;\n }\n };\n\n // unroll figure from paragraph with single image\n if (isParaWrappingFigure(tok) && !writerHasProhibitedFigureParent(schema, writer)) {\n const handler = pandocImageHandler(true, imageAttr)(schema);\n handler(writer, tok.c[0]);\n return true;\n // unroll figure from html RawBlock with single tag\n } else if (isHTMLImageBlock(tok)) {\n return handleHTMLImage(tok.c[kRawBlockContent]);\n } else {\n return false;\n }\n },\n },\n\n attr_edit: () => ({\n type: (schema: Schema) => schema.nodes.figure,\n editFn: () => imageCommand(ui, imageAttr),\n }),\n },\n ],\n\n fixups: (_schema: Schema) => {\n return [\n (tr: Transaction, fixupContext: FixupContext) => {\n if (fixupContext === FixupContext.Load) {\n return convertImagesToFigure(tr);\n } else {\n return tr;\n }\n },\n ];\n },\n\n appendTransaction: (schema: Schema) => {\n return [\n {\n name: 'figure-convert',\n nodeFilter: node => node.type === schema.nodes.image,\n append: convertImagesToFigure,\n },\n ];\n },\n\n baseKeys: figureKeys,\n\n plugins: (schema: Schema) => {\n return [...imageNodeViewPlugins('figure', ui, events, pandocExtensions)];\n },\n };\n};\n\nexport function posHasProhibitedFigureParent(schema: Schema, $pos: ResolvedPos) {\n return prohibitedFigureParents(schema).some(type => {\n return !!findParentNodeClosestToPos($pos, node => node.type === type);\n });\n}\n\nexport function writerHasProhibitedFigureParent(schema: Schema, writer: ProsemirrorWriter) {\n return prohibitedFigureParents(schema).some(writer.isNodeOpen);\n}\n\nfunction prohibitedFigureParents(schema: Schema) {\n return [schema.nodes.table_cell, schema.nodes.list_item, schema.nodes.definition_list];\n}\n\nfunction convertImagesToFigure(tr: Transaction) {\n return trTransform(tr, imagesToFiguresTransform);\n}\n\nfunction imagesToFiguresTransform(tr: Transform) {\n const schema = tr.doc.type.schema;\n const images = findChildrenByType(tr.doc, schema.nodes.image);\n images.forEach(image => {\n // position reflecting steps already taken in this handler\n const mappedImagePos = tr.mapping.mapResult(image.pos);\n\n // process image so long as it wasn't deleted by a previous step\n if (!mappedImagePos.deleted) {\n // resolve image pos\n const imagePos = tr.doc.resolve(mappedImagePos.pos);\n\n // if it's an image in a standalone paragraph, convert it to a figure\n if (\n imagePos.parent.type === schema.nodes.paragraph &&\n imagePos.parent.childCount === 1 &&\n !posHasProhibitedFigureParent(schema, imagePos)\n ) {\n // figure attributes\n const attrs = image.node.attrs;\n\n // extract linkTo from link mark (if any)\n if (schema.marks.link.isInSet(image.node.marks)) {\n const linkAttrs = getMarkAttrs(\n tr.doc,\n { from: mappedImagePos.pos, to: mappedImagePos.pos + image.node.nodeSize },\n schema.marks.link,\n );\n if (linkAttrs && linkAttrs.href) {\n attrs.linkTo = linkAttrs.href;\n }\n }\n\n // figure content\n const content = attrs.alt ? Fragment.from(schema.text(attrs.alt)) : Fragment.empty;\n\n // replace image with figure\n const figure = schema.nodes.figure.createAndFill(attrs, content);\n if (figure) {\n tr.replaceRangeWith(mappedImagePos.pos, mappedImagePos.pos + image.node.nodeSize, figure);\n }\n }\n }\n });\n}\n\nfunction isParaWrappingFigure(tok: PandocToken) {\n return isSingleChildParagraph(tok) && tok.c[0].t === PandocTokenType.Image;\n}\n\nfunction isHTMLImageBlock(tok: PandocToken) {\n if (tok.t === PandocTokenType.RawBlock) {\n const format = tok.c[kRawBlockFormat];\n const text = tok.c[kRawBlockContent] as string;\n return format === 'html' && isSingleLineHTML(text) && inlineHTMLIsImage(text);\n } else {\n return false;\n }\n}\n\nfunction isSingleChildParagraph(tok: PandocToken) {\n return tok.t === PandocTokenType.Para && tok.c && tok.c.length === 1;\n}\n\nexport default extension;\n","/*\n * decoration.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { NodeWithPos } from 'prosemirror-utils';\nimport { DecorationAttrs, Decoration } from 'prosemirror-view';\n\nexport function nodeDecoration(nodeWithPos: NodeWithPos, attrs: DecorationAttrs) {\n return Decoration.node(nodeWithPos.pos, nodeWithPos.pos + nodeWithPos.node.nodeSize, attrs);\n}\n","/*\n * image-view.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { NodeView, EditorView } from 'prosemirror-view';\nimport { NodeSelection, PluginKey, Plugin } from 'prosemirror-state';\n\nimport { EditorUI } from '../../api/ui';\nimport { ImageType } from '../../api/image';\nimport { PandocExtensions, imageAttributesAvailable } from '../../api/pandoc';\nimport { isElementVisible } from '../../api/dom';\nimport { EditorEvents } from '../../api/events';\nimport { ResizeEvent } from '../../api/event-types';\n\nimport { imageDialog } from './image-dialog';\nimport {\n attachResizeUI,\n initResizeContainer,\n ResizeUI,\n isResizeUICompatible,\n updateImageViewSize,\n} from './image-resize';\nimport { imageDimensionsFromImg, imageContainerWidth } from './image-util';\n\nimport './image-styles.css';\n\nexport function imageNodeViewPlugins(\n type: string,\n ui: EditorUI,\n events: EditorEvents,\n pandocExtensions: PandocExtensions,\n): Plugin[] {\n return [\n new Plugin({\n key: new PluginKey(`${type}-node-view`),\n props: {\n nodeViews: {\n [type]: (node: ProsemirrorNode, view: EditorView, getPos: boolean | (() => number)) => {\n return new ImageNodeView(node, view, getPos as () => number, ui, events, pandocExtensions);\n },\n },\n },\n }),\n ];\n}\n\nclass ImageNodeView implements NodeView {\n // ProseMirror context\n private readonly type: ImageType;\n private node: ProsemirrorNode;\n private readonly view: EditorView;\n private readonly getPos: () => number;\n private readonly editorUI: EditorUI;\n private readonly imageAttributes: boolean;\n private readonly implicitFigures: boolean;\n\n // DOM elements\n public readonly dom: HTMLElement;\n private readonly img: HTMLImageElement;\n public readonly contentDOM: HTMLElement | null;\n private readonly figcaption: HTMLElement | null;\n\n // transient state\n private imgBroken: boolean;\n\n // things to clean up\n private resizeUI: ResizeUI | null;\n private sizeOnVisibleTimer?: number;\n private unregisterOnResize: VoidFunction;\n private unregisterWatchImg: VoidFunction | null = null;\n\n constructor(\n node: ProsemirrorNode,\n view: EditorView,\n getPos: () => number,\n editorUI: EditorUI,\n editorEvents: EditorEvents,\n pandocExtensions: PandocExtensions,\n ) {\n // determine type\n const schema = node.type.schema;\n this.type = node.type === schema.nodes.image ? ImageType.Image : ImageType.Figure;\n\n // save references\n this.node = node;\n this.view = view;\n this.getPos = getPos;\n this.imageAttributes = imageAttributesAvailable(pandocExtensions);\n this.implicitFigures = pandocExtensions.implicit_figures;\n this.editorUI = editorUI;\n this.resizeUI = null;\n this.imgBroken = false;\n\n // set node selection on click\n const selectOnClick = () => {\n const tr = view.state.tr;\n tr.setSelection(NodeSelection.create(view.state.doc, getPos()));\n view.dispatch(tr);\n };\n\n // show image dialog on double-click\n const editOnDblClick = () => {\n selectOnClick();\n imageDialog(\n this.node,\n imageDimensionsFromImg(this.img, this.containerWidth()),\n this.node.type,\n this.view,\n editorUI,\n this.imageAttributes,\n );\n };\n\n // stop propagation from child elmeents that need to handle click\n // (e.g. figcaption element)\n const noPropagateClick = (ev: MouseEvent) => {\n ev.stopPropagation();\n };\n\n // create the image (used by both image and figure node types)\n this.img = document.createElement('img');\n this.img.classList.add('pm-img');\n this.img.onload = () => {\n this.imgBroken = false;\n };\n this.img.onerror = () => {\n this.imgBroken = true;\n };\n this.img.onclick = selectOnClick;\n this.img.ondblclick = editOnDblClick;\n\n // wrap in figure if appropriate\n if (this.type === ImageType.Figure) {\n // create figure wrapper\n this.dom = document.createElement('figure');\n this.dom.classList.add('pm-figure');\n\n // create container\n const container = document.createElement('div');\n container.contentEditable = 'false';\n this.dom.append(container);\n\n // initialize the image\n container.append(this.img);\n this.updateImg();\n\n // create the caption and make it our contentDOM\n this.figcaption = document.createElement('figcaption');\n this.figcaption.classList.add('pm-figcaption');\n this.figcaption.classList.add('pm-node-caption');\n this.figcaption.onclick = noPropagateClick;\n this.figcaption.ondblclick = noPropagateClick;\n this.contentDOM = this.figcaption;\n this.dom.append(this.figcaption);\n\n // manage visibility\n this.manageFigcaption();\n\n // standard inline image\n } else {\n this.dom = document.createElement('span');\n\n this.dom.append(this.img);\n this.updateImg();\n\n this.contentDOM = null;\n this.figcaption = null;\n }\n\n // prevent drag/drop if the event doesn't target the image\n this.dom.ondragstart = (event: DragEvent) => {\n if (event.target !== this.img) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n // init resize if we support imageAttributes\n if (this.imageAttributes) {\n initResizeContainer(this.dom);\n }\n\n // update image size when the image first becomes visible\n this.updateSizeOnVisible();\n\n // update image size whenever the container is resized\n this.unregisterOnResize = editorEvents.subscribe(ResizeEvent, () => {\n this.updateImageSize();\n });\n }\n\n public destroy() {\n if (this.unregisterWatchImg) {\n this.unregisterWatchImg();\n }\n this.unregisterOnResize();\n this.clearSizeOnVisibleTimer();\n this.detachResizeUI();\n }\n\n public selectNode() {\n // mirror default implementation\n this.dom.classList.add('ProseMirror-selectednode');\n if (this.contentDOM || !this.node.type.spec.draggable) {\n this.dom.draggable = true;\n }\n\n // manage figcaption\n this.manageFigcaption();\n\n // attach resize UI\n this.attachResizeUI();\n }\n\n public deselectNode() {\n // mirror default implementation\n this.dom.classList.remove('ProseMirror-selectednode');\n if (this.contentDOM || !this.node.type.spec.draggable) {\n this.dom.draggable = false;\n }\n\n // remove resize UI\n this.detachResizeUI();\n }\n\n // update image with latest node/attributes\n public update(node: ProsemirrorNode) {\n // boilerplate type check\n if (node.type !== this.node.type) {\n return false;\n }\n\n // set new node and update the image\n this.node = node;\n this.updateImg();\n\n // if we already have resize UI then either update it\n // or detach it (if e.g. the units are no longer compatible)\n if (this.resizeUI) {\n if (isResizeUICompatible(this.img!)) {\n this.resizeUI.update();\n } else {\n this.resizeUI.detach();\n this.resizeUI = null;\n }\n // attach if the node is selected\n } else if (this.isNodeSelected()) {\n this.attachResizeUI();\n }\n return true;\n }\n\n // ignore mutations outside of the content dom so sizing actions don't cause PM re-render\n public ignoreMutation(mutation: MutationRecord | { type: 'selection'; target: Element }) {\n return !this.contentDOM || !this.contentDOM.contains(mutation.target);\n }\n\n // map node to img tag\n private updateImg() {\n // unsubscribe from any existing resource watcher\n if (this.unregisterWatchImg) {\n this.unregisterWatchImg();\n }\n\n // map to path reachable within current editing frame\n const src = this.node.attrs.src;\n this.img.src = this.editorUI.context.mapResourceToURL(src);\n\n // if this is a local resource then watch it and update when it changes\n if (!src.match(/^\\w+:\\/\\//)) {\n this.unregisterWatchImg = this.editorUI.context.watchResource(src, () => {\n this.img.src = this.editorUI.context.mapResourceToURL(src);\n });\n }\n\n // title/tooltip\n this.img.title = '';\n if (this.node.attrs.title) {\n this.img.title = this.node.attrs.title;\n }\n\n // ensure alt attribute so that we get default browser broken image treatment\n this.img.alt = this.node.textContent || this.node.attrs.src;\n\n // manage caption visibility\n this.manageFigcaption();\n\n // update size\n this.updateImageSize();\n }\n\n private updateImageSize() {\n const containerWidth = this.img.isConnected ? this.containerWidth() : 0;\n updateImageViewSize(this.node, this.img, this.isFigure() ? this.dom : null, containerWidth);\n }\n\n private updateSizeOnVisible() {\n const updateSizeOnVisible = () => {\n if (isElementVisible(this.img)) {\n this.updateImageSize();\n this.clearSizeOnVisibleTimer();\n }\n };\n this.sizeOnVisibleTimer = window.setInterval(updateSizeOnVisible, 200);\n }\n\n private clearSizeOnVisibleTimer() {\n if (this.sizeOnVisibleTimer) {\n clearInterval(this.sizeOnVisibleTimer);\n this.sizeOnVisibleTimer = undefined;\n }\n }\n\n // attach resize UI if appropriate\n private attachResizeUI() {\n if (this.imageAttributes && !this.imgBroken && isResizeUICompatible(this.img!)) {\n const imageNode = () => ({ pos: this.getPos(), node: this.node });\n const imgContainerWidth = () => this.containerWidth();\n this.resizeUI = attachResizeUI(imageNode, this.dom, this.img!, imgContainerWidth, this.view, this.editorUI);\n }\n }\n\n private detachResizeUI() {\n if (this.resizeUI) {\n this.resizeUI.detach();\n this.resizeUI = null;\n }\n }\n\n private isNodeSelected() {\n return this.dom.classList.contains('ProseMirror-selectednode');\n }\n\n private isFigure() {\n return this.type === ImageType.Figure;\n }\n\n private containerWidth() {\n return imageContainerWidth(this.getPos(), this.view);\n }\n\n private manageFigcaption() {\n // hide the figcaption if appropriate\n const noImplicitFigures = !this.implicitFigures;\n const emptyFigcaption = this.figcaption && this.node.textContent.length === 0;\n const selection = this.view.state.selection;\n const selectionInFigcaption = selection.empty && selection.$head.node() === this.node;\n const hide = noImplicitFigures || (emptyFigcaption && !selectionInFigcaption);\n\n // hide or show if we have a figcaption\n if (this.figcaption) {\n if (noImplicitFigures) {\n this.figcaption.style.display = 'none';\n this.figcaption.contentEditable = 'false';\n } else {\n this.figcaption.contentEditable = hide ? 'false' : 'true';\n this.figcaption.style.height = hide ? '0' : '';\n this.figcaption.style.minHeight = hide ? '0' : '';\n this.figcaption.style.margin = hide ? '0' : '';\n }\n }\n }\n}\n","/*\n * image-resize.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\nimport { NodeWithPos } from 'prosemirror-utils';\nimport { NodeSelection } from 'prosemirror-state';\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport {\n createPopup,\n createHorizontalPanel,\n addHorizontalPanelCell,\n createInputLabel,\n createImageButton,\n createCheckboxInput,\n createSelectInput,\n createTextInput,\n} from '../../api/widgets/widgets';\nimport { EditorUI } from '../../api/ui';\nimport { editingRootScrollContainerElement } from '../../api/node';\nimport { extractSizeStyles, kPercentUnit, kPixelUnit, removeStyleAttrib } from '../../api/css';\nimport {\n imageSizePropWithUnit,\n isNaturalAspectRatio,\n unitToPixels,\n pixelsToUnit,\n roundUnit,\n kValidUnits,\n isValidImageSizeUnit,\n} from '../../api/image';\nimport { kWidthAttrib, kHeightAttrib, kStyleAttrib, kAlignAttrib } from '../../api/pandoc_attr';\nimport { EditorUIImages } from '../../api/ui-images';\n\nimport { imageDialog } from './image-dialog';\nimport { hasPercentWidth, imageDimensionsFromImg } from './image-util';\n\nconst kDataWidth = 'data-width';\nconst kDataHeight = 'data-height';\n\nconst kDefaultContainerDisplay = 'inline-block';\n\nexport function initResizeContainer(container: HTMLElement) {\n // add standard parent class\n container.classList.add('pm-image-resize-container', 'pm-selected-node-outline-color');\n\n // so that we are the offsetParent for the resize handles and shelf\n container.style.position = 'relative';\n\n // so that the container matches the size of the contained image\n container.style.display = kDefaultContainerDisplay;\n\n // so that the handles and shelf can be visible outside the boundaries of the image\n container.style.overflow = 'visible';\n\n // return for convenience\n return container;\n}\n\nexport function isResizeUICompatible(img: HTMLImageElement) {\n // incompatible if it has a width, but not a data-width\n const incompatibleWidth = img.style.width && !img.hasAttribute(kDataWidth);\n\n // incompatible if it has a height, but not a data-height\n const incompatibleHeight = img.style.height && img.style.height !== 'auto' && !img.hasAttribute(kDataHeight);\n\n return !incompatibleWidth && !incompatibleHeight;\n}\n\nexport interface ResizeUI {\n update: () => void;\n detach: () => void;\n}\n\nexport function attachResizeUI(\n imageNode: () => NodeWithPos,\n container: HTMLElement,\n img: HTMLImageElement,\n imgContainerWidth: () => number,\n view: EditorView,\n ui: EditorUI,\n): ResizeUI {\n // indicate that resize ui is active\n container.classList.add('pm-image-resize-active');\n\n // sync current state of shelf to node\n const updateImageNodeFromShelf = () => {\n updateImageNodeSize(\n view,\n imageNode(),\n img,\n imgContainerWidth,\n shelf.props.width(),\n shelf.props.height(),\n shelf.props.units(),\n );\n };\n\n // shelf init\n const onInitShelf = () => {\n // sync props\n shelf.sync();\n\n // default for lockRatio based on naturalWidth/naturalHeight\n const dims = imageDimensionsFromImg(img, imgContainerWidth());\n shelf.props.setLockRatio(isNaturalAspectRatio(shelf.props.width(), shelf.props.height(), dims, true));\n };\n\n // handle width changed from shelf\n const onWidthChanged = () => {\n const width = shelf.props.width();\n const height = shelf.props.lockRatio() ? (img.offsetHeight / img.offsetWidth) * width : shelf.props.height();\n shelf.props.setHeight(height);\n updateImageNodeFromShelf();\n };\n\n // handle height changed from shelf\n const onHeightChanged = () => {\n const height = shelf.props.height();\n const width = shelf.props.lockRatio() ? (img.offsetWidth / img.offsetHeight) * height : shelf.props.width();\n shelf.props.setWidth(width);\n updateImageNodeFromShelf();\n };\n\n // do necessary unit conversion when the units change\n const onUnitsChanged = () => {\n const prevUnits = shelfSizeFromImage(img).unit;\n const containerWidth = imgContainerWidth();\n\n const width = shelf.props.width();\n const widthPixels = unitToPixels(width, prevUnits, containerWidth);\n let widthInUnits = pixelsToUnit(widthPixels, shelf.props.units(), containerWidth);\n if (hasPercentWidth(shelf.props.units()) && widthInUnits > 100) {\n widthInUnits = 100;\n }\n shelf.props.setWidth(widthInUnits);\n\n const height = shelf.props.height();\n const heightPixels = unitToPixels(height, prevUnits, containerWidth);\n shelf.props.setHeight(pixelsToUnit(heightPixels, shelf.props.units(), containerWidth));\n\n updateImageNodeFromShelf();\n };\n\n // handle editImage request from shelf\n const onEditImage = () => {\n const nodeWithPos = imageNode();\n imageDialog(\n nodeWithPos.node,\n imageDimensionsFromImg(img, imgContainerWidth()),\n nodeWithPos.node.type,\n view,\n ui,\n true,\n );\n };\n\n // create resize shelf\n const shelf = resizeShelf(\n view,\n container,\n img,\n onInitShelf,\n onWidthChanged,\n onHeightChanged,\n onUnitsChanged,\n onEditImage,\n ui.images,\n ui.context.translateText,\n );\n\n // create resize handle and add it to the container\n const handle = resizeHandle(\n img,\n imgContainerWidth,\n shelf.props.lockRatio,\n shelf.props.units,\n shelf.sync,\n updateImageNodeFromShelf,\n );\n container.append(handle);\n\n // return functions that can be used to update and detach the ui\n return {\n update: () => {\n shelf.sync();\n },\n detach: () => {\n container.classList.remove('pm-image-resize-active');\n handle.remove();\n shelf.remove();\n },\n };\n}\n\nfunction resizeShelf(\n view: EditorView,\n container: HTMLElement,\n img: HTMLImageElement,\n onInit: () => void,\n onWidthChanged: () => void,\n onHeightChanged: () => void,\n onUnitsChanged: () => void,\n onEditImage: () => void,\n uiImages: EditorUIImages,\n translateText: (text: string) => string,\n) {\n // create resize shelf\n const shelf = createPopup(view, []);\n\n // add the shelf to the editor container (so we don't mutate the editor dom)\n const editorContainer = view.dom.parentNode as HTMLElement;\n editorContainer.appendChild(shelf);\n\n // update shelf absolute position to make sure it's visible\n const updatePosition = () => {\n const kShelfRequiredSize = 333;\n const editorBox = editorContainer.getBoundingClientRect();\n const imageBox = container.getBoundingClientRect();\n shelf.style.top = imageBox.top - editorBox.top + imageBox.height + 6 + 'px';\n const positionLeft = imageBox.left + kShelfRequiredSize < editorBox.right;\n if (positionLeft) {\n shelf.style.right = '';\n shelf.style.left = imageBox.left - editorBox.left + 'px';\n } else {\n shelf.style.left = '';\n shelf.style.right = editorBox.right - imageBox.right + 'px';\n }\n };\n\n // detect when the editing root note scrolls and update the position\n const editingScrollContainerEl = editingRootScrollContainerElement(view);\n if (editingScrollContainerEl) {\n editingScrollContainerEl.addEventListener('scroll', updatePosition);\n }\n\n // update position every 50ms (cleanup drag/drop copy/paste mispositioning)\n const positionTimer = setInterval(updatePosition, 50);\n\n // main panel that holds the controls\n const panel = createHorizontalPanel();\n shelf.append(panel);\n const addToPanel = (widget: HTMLElement, paddingRight: number) => {\n addHorizontalPanelCell(panel, widget);\n if (paddingRight) {\n const paddingSpan = window.document.createElement('span');\n paddingSpan.style.width = paddingRight + kPixelUnit;\n addHorizontalPanelCell(panel, paddingSpan);\n }\n };\n\n // width\n const inputClasses = ['pm-text-color', 'pm-background-color'];\n const wLabel = createInputLabel('w:');\n addToPanel(wLabel, 4);\n const wInput = createTextInput(4, inputClasses);\n wInput.onchange = onWidthChanged;\n addToPanel(wInput, 8);\n\n // height\n const kHeightWidth = '38px';\n const hLabel = createInputLabel('h:');\n addToPanel(hLabel, 4);\n const hInput = createTextInput(4, inputClasses, { width: kHeightWidth });\n hInput.onchange = onHeightChanged;\n addToPanel(hInput, 0);\n const hAutoLabel = createInputLabel('(auto)', ['pm-light-text-color'], { width: kHeightWidth });\n addToPanel(hAutoLabel, 10);\n\n // units\n const unitsSelect = createSelectInput(kValidUnits, inputClasses);\n unitsSelect.onchange = () => {\n // drive focus to width and back to prevent wierd selection change\n // detection condition that causes PM to re-render the node the\n // next time we resize it\n wInput.focus();\n unitsSelect.focus();\n\n // manage UI\n manageUnitsUI();\n\n // notify client\n onUnitsChanged();\n };\n addToPanel(unitsSelect, 12);\n\n // lock ratio\n const checkboxWrapper = window.document.createElement('div');\n const lockCheckbox = createCheckboxInput();\n lockCheckbox.checked = true;\n checkboxWrapper.append(lockCheckbox);\n addToPanel(checkboxWrapper, 4);\n const lockLabel = createInputLabel(translateText('Lock ratio'));\n addToPanel(lockLabel, 20);\n\n // edit button\n const editImage = createImageButton(\n uiImages.properties!,\n ['pm-image-button-edit-properties'],\n translateText('Edit Attributes'),\n );\n editImage.onclick = onEditImage;\n addHorizontalPanelCell(panel, editImage);\n\n // run onInit (wait for image to load if necessary)\n if (img.complete) {\n setTimeout(onInit, 0);\n } else {\n img.onload = onInit;\n }\n\n // function used to manage units ui (percent vs. non-percent)\n const manageUnitsUI = () => {\n const percentSizing = unitsSelect.value === kPercentUnit;\n\n if (percentSizing) {\n lockCheckbox.checked = true;\n lockCheckbox.disabled = true;\n } else {\n lockCheckbox.disabled = false;\n }\n\n hInput.style.display = percentSizing ? 'none' : '';\n hAutoLabel.style.display = percentSizing ? '' : 'none';\n };\n manageUnitsUI();\n\n // helper function to get a dimension (returns null if input not currently valid)\n const getDim = (input: HTMLInputElement) => {\n const value = parseFloat(input.value);\n if (isNaN(value)) {\n return null;\n }\n if (value > 0) {\n return value;\n } else {\n return null;\n }\n };\n\n const setWidth = (width: number) => {\n wInput.value = roundUnit(width, unitsSelect.value);\n };\n const setHeight = (height: number) => {\n hInput.value = roundUnit(height, unitsSelect.value);\n };\n\n return {\n // shelf element\n el: shelf,\n\n // sync the shelf props to the current size/units of the image\n // we don't sync to the node b/c we want to benefit from automatic\n // unit handling in the conversion to the DOM\n sync: () => {\n const size = shelfSizeFromImage(img);\n unitsSelect.value = size.unit;\n setWidth(size.width);\n setHeight(size.height);\n\n // manage units ui\n manageUnitsUI();\n\n // ensure we are positioned correctly (not offscreen, wide enough, etc.)\n updatePosition();\n },\n\n position: () => {\n updatePosition();\n },\n\n remove: () => {\n if (editingScrollContainerEl) {\n editingScrollContainerEl.removeEventListener('scroll', updatePosition);\n }\n clearInterval(positionTimer);\n shelf.remove();\n },\n\n props: {\n width: () => getDim(wInput) || shelfSizeFromImage(img).width,\n setWidth,\n height: () => getDim(hInput) || shelfSizeFromImage(img).height,\n setHeight,\n units: () => unitsSelect.value,\n setUnits: (units: string) => (unitsSelect.value = units),\n lockRatio: () => lockCheckbox.checked,\n setLockRatio: (lock: boolean) => {\n if (!lockCheckbox.disabled) {\n lockCheckbox.checked = lock;\n }\n },\n },\n };\n}\n\nfunction resizeHandle(\n img: HTMLImageElement,\n imgContainerWidth: () => number,\n lockRatio: () => boolean,\n units: () => string,\n onSizing: () => void,\n onSizingComplete: () => void,\n) {\n const handle = document.createElement('span');\n handle.contentEditable = 'false';\n handle.classList.add('pm-image-resize-handle', 'pm-background-color', 'pm-selected-node-border-color');\n handle.style.position = 'absolute';\n handle.style.bottom = '-6px';\n handle.style.right = '-6px';\n handle.style.cursor = 'nwse-resize';\n\n const havePointerEvents = !!document.body.setPointerCapture;\n\n const onPointerDown = (ev: MouseEvent) => {\n ev.preventDefault();\n\n const startWidth = img.offsetWidth;\n const startHeight = img.offsetHeight;\n\n const startX = ev.pageX;\n const startY = ev.pageY;\n\n const containerWidth = imgContainerWidth();\n\n const onPointerMove = (e: MouseEvent) => {\n // detect pointer movement\n const movedX = e.pageX - startX;\n const movedY = e.pageY - startY;\n\n let width;\n let height;\n if (lockRatio()) {\n if (movedX >= movedY) {\n width = startWidth + movedX;\n height = startHeight + movedX * (startHeight / startWidth);\n } else {\n height = startHeight + movedY;\n width = startWidth + movedY * (startWidth / startHeight);\n }\n } else {\n width = startWidth + movedX;\n height = startHeight + movedY;\n }\n\n // determine the new width in units. If it's percent and > 100 then clip\n const widthInUnits = pixelsToUnit(width, units(), containerWidth);\n if (hasPercentWidth(units()) && widthInUnits > 100) {\n width = containerWidth;\n height = width * (startHeight / startWidth);\n }\n\n img.style.width = width + kPixelUnit;\n img.setAttribute(kDataWidth, pixelsToUnit(width, units(), containerWidth) + units());\n img.style.height = height + kPixelUnit;\n img.setAttribute(kDataHeight, pixelsToUnit(height, units(), containerWidth) + units());\n\n onSizing();\n };\n\n const onPointerUp = (e: MouseEvent) => {\n e.preventDefault();\n\n // stop listening to events\n if (havePointerEvents) {\n handle.releasePointerCapture((e as PointerEvent).pointerId);\n handle.removeEventListener('pointermove', onPointerMove);\n handle.removeEventListener('pointerup', onPointerUp);\n } else {\n document.removeEventListener('mousemove', onPointerMove);\n document.removeEventListener('mouseup', onPointerUp);\n }\n\n // update image size\n onSizingComplete();\n };\n\n if (havePointerEvents) {\n handle.setPointerCapture((ev as PointerEvent).pointerId);\n handle.addEventListener('pointermove', onPointerMove);\n handle.addEventListener('pointerup', onPointerUp);\n } else {\n document.addEventListener('mousemove', onPointerMove);\n document.addEventListener('mouseup', onPointerUp);\n }\n };\n\n if (havePointerEvents) {\n handle.addEventListener('pointerdown', onPointerDown);\n } else {\n handle.addEventListener('mousedown', onPointerDown);\n }\n\n return handle;\n}\n\n// derive the shelf size attributes from the image. takes advantage of any data-width\n// or data-height attributes, then falls back to actual offsetWidth/offsetHeight\n// as necessary\nfunction shelfSizeFromImage(img: HTMLImageElement) {\n // get attributes\n const width = img.getAttribute(kDataWidth);\n const height = img.getAttribute(kDataHeight);\n\n // if there is no width and no height, then use naturalWidth/naturalHeight\n if (!width && !height) {\n return {\n width: img.naturalWidth || img.offsetWidth,\n height: img.naturalHeight || img.offsetHeight,\n unit: kPixelUnit,\n };\n\n // read units\n } else {\n let widthWithUnit = imageSizePropWithUnit(width);\n let heightWithUnit = imageSizePropWithUnit(height);\n\n if (!widthWithUnit) {\n widthWithUnit = {\n size: heightWithUnit!.size * (img.offsetWidth / img.offsetHeight),\n unit: heightWithUnit!.unit,\n };\n }\n\n if (!heightWithUnit) {\n heightWithUnit = {\n size: widthWithUnit.size * (img.offsetHeight / img.offsetWidth),\n unit: widthWithUnit.unit,\n };\n }\n\n return {\n width: widthWithUnit.size,\n height: heightWithUnit.size,\n unit: widthWithUnit.unit,\n };\n }\n}\n\nfunction updateImageNodeSize(\n view: EditorView,\n image: NodeWithPos,\n img: HTMLImageElement,\n imgContainerWidth: () => number,\n width: number,\n height: number,\n unit: string,\n) {\n // don't write pixels explicitly\n unit = unit === kPixelUnit ? '' : unit;\n\n // edit width & height in keyvalue\n let keyvalue = extractSizeStyles(image.node.attrs.keyvalue as Array<[string, string]>)!;\n keyvalue = keyvalue.filter(value => ![kWidthAttrib, kHeightAttrib].includes(value[0]));\n keyvalue.push([kWidthAttrib, width + unit]);\n const dims = imageDimensionsFromImg(img, imgContainerWidth());\n if (!hasPercentWidth(width + unit) && !isNaturalAspectRatio(width, height, dims, false)) {\n keyvalue.push([kHeightAttrib, height + unit]);\n }\n\n // create transaction\n const tr = view.state.tr;\n\n // set new attributes\n tr.setNodeMarkup(image.pos, image.node.type, { ...image.node.attrs, keyvalue });\n\n // restore node selection if our tr.setNodeMarkup blew away the selection\n const prevState = view.state;\n if (prevState.selection instanceof NodeSelection && prevState.selection.from === image.pos) {\n tr.setSelection(NodeSelection.create(tr.doc, image.pos));\n }\n\n // dispatch transaction\n view.dispatch(tr);\n}\n\n// update the DOM representation of the image. extracts size-oriented attributes from the node and\n// applies them to the img element (alignment oriented attributes are applied to the figure elmenet)\nexport function updateImageViewSize(\n node: ProsemirrorNode,\n img: HTMLImageElement,\n figure: HTMLElement | null,\n containerWidth: number,\n) {\n // reset attributes (they'll be set to new values below)\n img.removeAttribute(kStyleAttrib);\n img.removeAttribute(kDataWidth);\n img.removeAttribute(kDataHeight);\n\n // reset figure styles (only reset styles that we explicitly set below, b/c some\n // styles may have been set by e.g. the attachResizeUI function)\n if (figure) {\n figure.style.cssFloat = '';\n figure.style.verticalAlign = '';\n figure.style.margin = '';\n figure.style.marginTop = '';\n figure.style.marginBottom = '';\n figure.style.marginRight = '';\n figure.style.marginLeft = '';\n figure.style.padding = '';\n figure.style.paddingTop = '';\n figure.style.paddingBottom = '';\n figure.style.paddingRight = '';\n figure.style.paddingLeft = '';\n figure.style.display = kDefaultContainerDisplay;\n }\n\n // apply keyvalue attribute to image\n if (node.attrs.keyvalue) {\n // factor width & height out of style\n const keyvalue = extractSizeStyles(node.attrs.keyvalue);\n\n // inspect all keys and process width, height, and style\n (keyvalue as Array<[string, string]>).forEach(attr => {\n // alias key and value\n const key = attr[0];\n let value = attr[1];\n\n // set align oriented styles on figure parent\n if (key === kStyleAttrib) {\n if (figure) {\n const liftStyle = (attrib: string, val: string) => figure.style.setProperty(attrib, val);\n value = removeStyleAttrib(value, 'float', liftStyle);\n value = removeStyleAttrib(value, 'vertical-align', liftStyle);\n value = removeStyleAttrib(value, 'padding(?:[\\\\w\\\\-])*', liftStyle);\n removeStyleAttrib(value, 'display', liftStyle); // leave display for lifting by image\n }\n\n // apply selected other styles to the image view (we don't just forward the entire\n // style attribute b/c that would interfere with setting of style props in the\n // width and height cases below). here we should whitelist in all styles we think\n // users might want to see in the editor\n const liftImgStyle = (attrib: string, val: string) => img.style.setProperty(attrib, val);\n value = removeStyleAttrib(value, 'border(?:[\\\\w\\\\-])*', liftImgStyle);\n value = removeStyleAttrib(value, 'margin(?:[\\\\w\\\\-])*', liftImgStyle);\n value = removeStyleAttrib(value, 'display', liftImgStyle);\n } else if (key === kWidthAttrib) {\n // see if this is a unit we can edit\n const widthProp = imageSizePropWithUnit(value);\n if (widthProp) {\n widthProp.unit = widthProp.unit || kPixelUnit;\n if (isValidImageSizeUnit(widthProp.unit)) {\n img.setAttribute(kDataWidth, widthProp.size + widthProp.unit);\n img.style.width = unitToPixels(widthProp.size, widthProp.unit, containerWidth) + kPixelUnit;\n }\n }\n\n // if not, just pass it straight through (editing UI will be disabled)\n if (!img.hasAttribute(kDataWidth)) {\n img.style.width = value;\n }\n } else if (key === kHeightAttrib) {\n // see if this is a unit we can edit\n const heightProp = imageSizePropWithUnit(value);\n if (heightProp) {\n heightProp.unit = heightProp.unit || kPixelUnit;\n if (isValidImageSizeUnit(heightProp.unit)) {\n img.setAttribute(kDataHeight, heightProp.size + heightProp.unit);\n img.style.height = unitToPixels(heightProp.size, heightProp.unit, containerWidth) + kPixelUnit;\n }\n }\n\n // if not, just pass it straight through (editing UI will be disabled)\n if (!img.hasAttribute(kDataHeight)) {\n img.style.height = value;\n }\n\n // use of legacy 'align' attribute is common for some pandoc users\n // so we convert it to the requisite CSS and apply it to the figure container\n } else if (figure && key === kAlignAttrib) {\n switch (value) {\n case 'left':\n case 'right':\n figure.style.cssFloat = value;\n break;\n case 'top':\n case 'bottom':\n case 'middle':\n figure.style.verticalAlign = value;\n break;\n }\n }\n });\n\n // if width is a percentage, then displayed height needs to be 'auto'\n if (hasPercentWidth(img.getAttribute(kDataWidth))) {\n img.style.height = 'auto';\n }\n }\n}\n","/*\n * widgets.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\n\nimport { applyStyles } from '../css';\n\nimport './widgets.css';\n\nexport function createHorizontalPanel() {\n const div = window.document.createElement('div');\n div.classList.add('pm-horizontal-panel');\n return div;\n}\n\nexport function addHorizontalPanelCell(panel: HTMLDivElement, el: HTMLElement) {\n el.classList.add('pm-horizontal-panel-cell');\n panel.append(el);\n}\n\nexport function createPopup(\n view: EditorView,\n classes: string[],\n onDestroyed?: () => void,\n style?: { [key: string]: string },\n) {\n // create popup\n const popup = window.document.createElement('span');\n popup.contentEditable = 'false';\n popup.classList.add(\n 'pm-popup',\n 'pm-text-color',\n 'pm-proportional-font',\n 'pm-pane-border-color',\n 'pm-background-color',\n );\n popup.style.position = 'absolute';\n popup.style.zIndex = '10';\n applyStyles(popup, classes, style);\n\n // create mutation observer that watches for destruction\n if (onDestroyed) {\n const observer = new MutationObserver(mutationsList => {\n mutationsList.forEach(mutation => {\n mutation.removedNodes.forEach(node => {\n if (node === popup) {\n observer.disconnect();\n onDestroyed();\n }\n });\n });\n });\n observer.observe(view.dom, { attributes: false, childList: true, subtree: true });\n }\n\n return popup;\n}\n\nexport function createImageButton(image: string, classes: string[], title: string, style?: { [key: string]: string }) {\n const button = window.document.createElement('button');\n button.classList.add('pm-image-button');\n button.title = title;\n applyStyles(button, classes, style);\n const imageEl = window.document.createElement('img') as HTMLImageElement;\n imageEl.src = image;\n button.append(imageEl);\n return button;\n}\n\nexport function createInputLabel(text: string, classes?: string[], style?: { [key: string]: string }) {\n const label = window.document.createElement('label');\n label.innerText = text;\n label.classList.add('pm-input-label');\n applyStyles(label, classes, style);\n return label;\n}\n\nexport function createSelectInput(options: string[], classes?: string[], style?: { [key: string]: string }) {\n const select = window.document.createElement('select');\n appendOptions(select, options);\n select.classList.add('pm-input-select');\n select.classList.add('pm-pane-border-color');\n applyStyles(select, classes, style);\n return select;\n}\n\nfunction appendOptions(container: HTMLElement, options: string[]) {\n options.forEach(option => {\n const optionEl = window.document.createElement('option');\n optionEl.value = option;\n optionEl.textContent = option;\n container.append(optionEl);\n });\n}\n\nexport function createCheckboxInput(classes?: string[], style?: { [key: string]: string }) {\n const input = window.document.createElement('input');\n input.classList.add('pm-input-checkbox');\n input.type = 'checkbox';\n applyStyles(input, classes, style);\n return input;\n}\n\nexport function createTextInput(widthChars: number, classes?: string[], style?: { [key: string]: string }) {\n const input = document.createElement('input');\n input.type = 'text';\n input.classList.add('pm-input-text');\n input.classList.add('pm-pane-border-color');\n applyStyles(input, classes, style);\n input.style.width = widthChars + 'ch';\n return input;\n}\n","/*\n * figure-keys.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\nimport { EditorState, Transaction, NodeSelection, Selection, TextSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport {\n findParentNodeOfTypeClosestToPos,\n findSelectedNodeOfType,\n setTextSelection,\n ContentNodeWithPos,\n findParentNodeOfType,\n findParentNodeClosestToPos,\n} from 'prosemirror-utils';\n\nimport { BaseKey, verticalArrowCanAdvanceWithinTextBlock } from '../../api/basekeys';\nimport { exitNode } from '../../api/command';\n\nexport function figureKeys(schema: Schema) {\n return [\n { key: BaseKey.Enter, command: exitNode(schema.nodes.figure, -1, false) },\n { key: BaseKey.Backspace, command: backspaceHandler() },\n { key: BaseKey.ArrowLeft, command: arrowHandler('left') },\n { key: BaseKey.ArrowRight, command: arrowHandler('right') },\n { key: BaseKey.ArrowUp, command: arrowHandler('up') },\n { key: BaseKey.ArrowDown, command: arrowHandler('down') },\n ];\n}\n\nfunction backspaceHandler() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // must be an empty selection\n const selection = state.selection;\n if (!selection.empty) {\n return false;\n }\n\n // must be a selection at the beginning of it's parent\n const schema = state.schema;\n const { $head } = state.selection;\n const { parentOffset } = $head;\n if (parentOffset !== 0) {\n return false;\n }\n\n // two scenarios: backspace within empty caption or backspace right after figure\n const isWithinEmptyCaption = $head.parent.type === schema.nodes.figure && $head.parent.childCount === 0;\n if (isWithinEmptyCaption) {\n if (dispatch) {\n // set a node selection for the figure\n const tr = state.tr;\n tr.setSelection(NodeSelection.create(tr.doc, $head.pos - 1));\n dispatch(tr);\n }\n return true;\n } else {\n // check if the previous node is a figure\n const parent = $head.node($head.depth - 1);\n const parentIndex = $head.index($head.depth - 1);\n if (parentIndex > 0) {\n const previousNode = parent.child(parentIndex - 1);\n if (previousNode.type === schema.nodes.figure) {\n if (dispatch) {\n const tr = state.tr;\n\n // if the current node is and empty textblock then remove it\n if ($head.node().childCount === 0) {\n const parentTextBlock = findParentNodeClosestToPos($head, node => node.isTextblock);\n if (parentTextBlock) {\n tr.deleteRange(parentTextBlock.pos, parentTextBlock.pos + parentTextBlock.node.nodeSize);\n }\n }\n\n const nodePos = $head.pos - previousNode.nodeSize - 1;\n const figureSelection = NodeSelection.create(tr.doc, nodePos);\n tr.setSelection(figureSelection);\n dispatch(tr);\n }\n return true;\n }\n }\n }\n\n return false;\n };\n}\n\nfunction arrowHandler(dir: 'up' | 'down' | 'left' | 'right') {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // select figure\n const selectFigure = (figure: ContentNodeWithPos) => {\n if (dispatch) {\n const tr = state.tr;\n const figureSelection = NodeSelection.create(state.doc, figure.pos);\n tr.setSelection(figureSelection).scrollIntoView();\n dispatch(tr);\n }\n };\n\n // select figure caption\n const selectFigureCaption = (figure: ContentNodeWithPos, atEnd = false) => {\n if (dispatch) {\n const tr = state.tr;\n setTextSelection(figure.pos + (atEnd ? figure.node.textContent.length + 1 : 0), 1)(tr);\n dispatch(tr);\n }\n };\n\n // alias schema and selection\n const { schema, selection } = state;\n\n // down/right arrow for node selection w/ caption drives cursor into caption\n if (\n (dir === 'down' || dir === 'right') &&\n selection instanceof NodeSelection &&\n selection.node.type === schema.nodes.figure\n ) {\n const figure = findSelectedNodeOfType(schema.nodes.figure)(selection);\n if (figure && figure.node.childCount > 0) {\n selectFigureCaption(figure);\n return true;\n }\n }\n\n // up/left arrow for selection in caption takes us back to the node selection\n if (\n (dir === 'up' || dir === 'left') &&\n selection instanceof TextSelection &&\n !!findParentNodeOfType(schema.nodes.figure)(selection)\n ) {\n if (dir === 'up' || (dir === 'left' && selection.$head.parentOffset === 0)) {\n const figure = findParentNodeOfType(schema.nodes.figure)(selection);\n if (figure) {\n selectFigure(figure);\n return true;\n }\n }\n\n // normal node traversal\n } else if (selection.empty && view && view.endOfTextblock(dir)) {\n // compute side offset\n const side = dir === 'left' || dir === 'up' ? -1 : 1;\n\n // get selection head\n const { $head } = selection;\n\n // see if this would traverse our type\n const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side);\n if (nextPos.$head) {\n const figure = findParentNodeOfTypeClosestToPos(nextPos.$head, schema.nodes.figure);\n if (figure) {\n // check for e.g. math where you can advance across embedded newlines\n if ((dir === 'up' || dir === 'down') && verticalArrowCanAdvanceWithinTextBlock(state.selection, dir)) {\n return false;\n }\n // arrowing back into a figure with a caption selects the caption\n if (side === -1 && figure.node.childCount > 0) {\n selectFigureCaption(figure, dir === 'left');\n // otherwise select the figure\n } else {\n selectFigure(figure);\n }\n return true;\n }\n }\n }\n\n // not handled\n return false;\n };\n}\n","/*\n * image-events.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\n\nimport { Plugin, PluginKey } from 'prosemirror-state';\nimport { EditorUI } from '../../api/ui';\n\nconst kTextUriList = 'text/uri-list';\nconst kApplicationQtImage = 'application/x-qt-image';\n\nconst pluginKey = new PluginKey('image-events');\n\nexport function imageEventsPlugin(ui: EditorUI) {\n return new Plugin({\n key: pluginKey,\n props: {\n handleDOMEvents: {\n drop: imageDrop(ui),\n },\n handlePaste: imagePaste(ui),\n },\n });\n}\n\nfunction imagePaste(ui: EditorUI) {\n return (view: EditorView, event: Event) => {\n const clipboardEvent = event as ClipboardEvent;\n\n if (clipboardEvent.clipboardData) {\n // detect file pastes where there is no payload, in that case check to see\n // if there is clipboard data we can get from our context (e.g. from Qt)\n if (clipboardEvent.clipboardData.types.includes(kTextUriList)) {\n const uriList = clipboardEvent.clipboardData.getData(kTextUriList);\n if (uriList.length === 0) {\n ui.context.clipboardUris().then(uris => {\n if (uris) {\n handleImageUris(view, view.state.selection.from, event, uris, ui);\n }\n });\n event.preventDefault();\n return true;\n }\n // raw image paste (e.g. from an office doc)\n } else if (clipboardEvent.clipboardData.types.includes('application/x-qt-image')) {\n\n // don't process excel sheets (we want to use their html representation)\n const kTextHtml = \"text/html\";\n if (clipboardEvent.clipboardData.types.includes(kTextHtml) &&\n clipboardEvent.clipboardData.getData(kTextHtml).includes(\"content=Excel.Sheet\")) {\n return false;\n }\n \n ui.context.clipboardImage().then(image => {\n if (image) {\n handleImageUris(view, view.state.selection.from, event, [image], ui);\n }\n });\n event.preventDefault();\n return true;\n }\n }\n\n return false;\n };\n}\n\nfunction imageDrop(ui: EditorUI) {\n return (view: EditorView, event: Event) => {\n // alias to drag event so typescript knows about event.dataTransfer\n const dragEvent = event as DragEvent;\n\n // ensure we have data transfer\n if (!dragEvent.dataTransfer) {\n return false;\n }\n\n // ensure the drop coordinates map to an editor position\n const coordinates = view.posAtCoords({\n left: dragEvent.clientX,\n top: dragEvent.clientY,\n });\n if (!coordinates) {\n return false;\n }\n\n // array of uris\n let uris: string[] | null = null;\n\n // see if this is a drag of uris\n const uriList = dragEvent.dataTransfer.getData(kTextUriList);\n if (uriList) {\n uris = uriList.split('\\r?\\n');\n } else {\n // see if the ui context has some dropped uris\n uris = ui.context.droppedUris();\n }\n\n // process uris if we have them\n if (uris && handleImageUris(view, coordinates.pos, event, uris, ui)) {\n event.preventDefault();\n return true;\n } else {\n return false;\n }\n };\n}\n\nfunction handleImageUris(view: EditorView, pos: number, event: Event, uris: string[], ui: EditorUI): boolean {\n // filter out images\n const imageUris = uris.filter(uri => {\n // get extension and check it it's an image\n // https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types#Common_image_file_types\n const kImageExtensions = [\n 'apng',\n 'bmp',\n 'gif',\n 'ico',\n 'cur',\n 'jpg',\n 'jpeg',\n 'jfif',\n 'pjpeg',\n 'pjp',\n 'png',\n 'svg',\n 'tif',\n 'tiff',\n 'webp',\n ];\n const extension = uri\n .split(/\\./)\n .pop()!\n .toLowerCase();\n return kImageExtensions.includes(extension);\n });\n\n // exit if we have no image uris\n if (imageUris.length === 0) {\n return false;\n }\n\n // resolve image uris then insert them. note that this is done\n // async so we return true indicating we've handled the drop and\n // then we actually do the insertion once it returns\n ui.context.resolveImageUris(imageUris).then(images => {\n const tr = view.state.tr;\n images.forEach(image => {\n const node = view.state.schema.nodes.image.create({ src: image });\n tr.insert(pos, node);\n });\n view.dispatch(tr);\n });\n\n // indicate that we will handle the event\n return true;\n}\n","/*\n * hr.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, DOMOutputSpec } from 'prosemirror-model';\nimport { InputRule } from 'prosemirror-inputrules';\nimport { findParentNodeOfType } from 'prosemirror-utils';\nimport { EditorState } from 'prosemirror-state';\n\nimport { ProsemirrorCommand, insertNode, EditorCommandId } from '../api/command';\nimport { ExtensionContext } from '../api/extension';\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\nimport { EditorUI } from '../api/ui';\nimport { OmniInsertGroup } from '../api/omni_insert';\n\nimport './hr-styles.css';\n\nconst extension = (context: ExtensionContext) => {\n const { ui } = context;\n\n return {\n nodes: [\n {\n name: 'horizontal_rule',\n spec: {\n group: 'block',\n parseDOM: [{ tag: 'hr' }],\n toDOM(): DOMOutputSpec {\n return ['div', ['hr', { class: 'pm-border-background-color' }]];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.HorizontalRule,\n node: 'horizontal_rule',\n },\n ],\n writer: (output: PandocOutput) => {\n output.writeToken(PandocTokenType.HorizontalRule);\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [\n new ProsemirrorCommand(\n EditorCommandId.HorizontalRule,\n [],\n insertNode(schema.nodes.horizontal_rule),\n hrOmniInsert(ui),\n ),\n ];\n },\n\n inputRules: (_schema: Schema) => {\n return [\n new InputRule(/^\\*{3}$/, (state: EditorState, match: string[], start: number, end: number) => {\n const schema = state.schema;\n const paraNode = findParentNodeOfType(schema.nodes.paragraph)(state.selection);\n if (paraNode && state.selection.$anchor.depth === 2) {\n // only in top-level paragraphs\n return state.tr.replaceRangeWith(start, end, schema.nodes.horizontal_rule.create());\n } else {\n return null;\n }\n }),\n ];\n },\n };\n};\n\nfunction hrOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Horizontal Rule'),\n description: ui.context.translateText('Line that spans across the page'),\n group: OmniInsertGroup.Content,\n priority: 1,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.horizontal_rule_dark! : ui.images.omni_insert?.horizontal_rule!,\n };\n}\n\nexport default extension;\n","/*\n * hard_break.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { Extension } from '../api/extension';\nimport { BaseKey } from '../api/basekeys';\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\n\nconst extension: Extension = {\n nodes: [\n {\n name: 'hard_break',\n spec: {\n inline: true,\n group: 'inline',\n selectable: false,\n parseDOM: [{ tag: 'br' }],\n toDOM() {\n return ['br'];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.LineBreak,\n node: 'hard_break',\n },\n ],\n writer: (output: PandocOutput) => {\n output.writeToken(PandocTokenType.LineBreak);\n },\n },\n },\n ],\n\n baseKeys: (_schema: Schema) => {\n return [\n { key: BaseKey.ModEnter, command: hardBreakCommandFn() },\n { key: BaseKey.ShiftEnter, command: hardBreakCommandFn() },\n ];\n },\n};\n\nfunction hardBreakCommandFn() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const br = state.schema.nodes.hard_break;\n if (dispatch) {\n dispatch(state.tr.replaceSelectionWith(br.create()).scrollIntoView());\n }\n return true;\n };\n}\n\nexport default extension;\n","/*\n * null.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Extension } from '../api/extension';\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\n\nimport './null-styles.css';\n\nconst extension: Extension = {\n nodes: [\n {\n name: 'null',\n spec: {\n group: 'block',\n atom: true,\n selectable: false,\n parseDOM: [{ tag: \"div[class*='null-block']\" }],\n toDOM() {\n return ['div', { class: 'null-block' }];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Null,\n node: 'null',\n },\n ],\n writer: (output: PandocOutput) => {\n output.writeToken(PandocTokenType.Null);\n },\n },\n },\n ],\n};\n\nexport default extension;\n","/*\n * em.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, Mark, Fragment } from 'prosemirror-model';\n\nimport { MarkCommand, EditorCommandId } from '../api/command';\nimport { Extension } from '../api/extension';\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\nimport { delimiterMarkInputRule, MarkInputRuleFilter } from '../api/input_rule';\n\nconst extension: Extension = {\n marks: [\n {\n name: 'em',\n spec: {\n group: 'formatting',\n parseDOM: [\n { tag: 'i' },\n { tag: 'em' },\n { style: 'font-weight', getAttrs: (value: string | Node) => (value as string) === 'italic' && null },\n ],\n toDOM() {\n return ['em'];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Emph,\n mark: 'em',\n },\n ],\n writer: {\n priority: 4,\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\n output.writeMark(PandocTokenType.Emph, parent);\n },\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [new MarkCommand(EditorCommandId.Em, ['Mod-i'], schema.marks.em)];\n },\n\n inputRules: (schema: Schema, filter: MarkInputRuleFilter) => {\n return [\n delimiterMarkInputRule('\\\\*', schema.marks.em, filter, '\\\\*-`', true),\n delimiterMarkInputRule('_', schema.marks.em, filter, '\\\\w_`', true),\n ];\n },\n};\n\nexport default extension;\n","/*\n * strong.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, Mark, Fragment } from 'prosemirror-model';\n\nimport { MarkCommand, EditorCommandId } from '../api/command';\nimport { Extension } from '../api/extension';\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\nimport { delimiterMarkInputRule, MarkInputRuleFilter } from '../api/input_rule';\n\nconst extension: Extension = {\n marks: [\n {\n name: 'strong',\n spec: {\n group: 'formatting',\n parseDOM: [\n // This works around a Google Docs misbehavior where pasted content will be inexplicably wrapped in ``\n // tags with a font-weight normal.\n {\n tag: 'b',\n getAttrs: (value: string | Node) => (value as HTMLElement).style.fontWeight !== 'normal' && null,\n },\n { tag: 'strong' },\n {\n style: 'font-weight',\n getAttrs: (value: string | Node) => /^(bold(er)?|[5-9]\\d{2,})$/.test(value as string) && null,\n },\n ],\n toDOM() {\n return ['strong'];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Strong,\n mark: 'strong',\n },\n ],\n writer: {\n priority: 3,\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\n output.writeMark(PandocTokenType.Strong, parent);\n },\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [new MarkCommand(EditorCommandId.Strong, ['Mod-b'], schema.marks.strong)];\n },\n\n inputRules: (schema: Schema, filter: MarkInputRuleFilter) => {\n return [\n delimiterMarkInputRule('\\\\*\\\\*', schema.marks.strong, filter, '`', true),\n delimiterMarkInputRule('__', schema.marks.strong, filter, '\\\\w`', true),\n ];\n },\n};\n\nexport default extension;\n","/*\n * code.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Fragment, Mark, Node as ProsemirrorNode, Schema } from 'prosemirror-model';\n\nimport { MarkCommand, EditorCommandId } from '../api/command';\nimport { Extension, ExtensionContext } from '../api/extension';\nimport { pandocAttrSpec, pandocAttrParseDom, pandocAttrToDomAttr, pandocAttrReadAST } from '../api/pandoc_attr';\nimport { PandocToken, PandocOutput, PandocTokenType } from '../api/pandoc';\n\nimport { kCodeText, kCodeAttr } from '../api/code';\nimport { delimiterMarkInputRule, MarkInputRuleFilter } from '../api/input_rule';\n\nconst extension = (context: ExtensionContext): Extension => {\n const { pandocExtensions } = context;\n\n const codeAttrs = pandocExtensions.inline_code_attributes;\n\n return {\n marks: [\n {\n name: 'code',\n noInputRules: true,\n noSpelling: true,\n spec: {\n group: 'formatting',\n attrs: codeAttrs ? pandocAttrSpec : {},\n parseDOM: [\n {\n tag: 'code',\n getAttrs(dom: Node | string) {\n if (codeAttrs) {\n return pandocAttrParseDom(dom as Element, {});\n } else {\n return {};\n }\n },\n },\n ],\n toDOM(mark: Mark) {\n const fontClass = 'pm-code pm-fixedwidth-font pm-chunk-background-color pm-block-border-color';\n const attrs = codeAttrs\n ? pandocAttrToDomAttr({\n ...mark.attrs,\n classes: [...mark.attrs.classes, fontClass],\n })\n : {\n class: fontClass,\n };\n return ['code', attrs];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Code,\n mark: 'code',\n getText: (tok: PandocToken) => tok.c[kCodeText],\n getAttrs: (tok: PandocToken) => {\n if (codeAttrs) {\n return pandocAttrReadAST(tok, kCodeAttr);\n } else {\n return {};\n }\n },\n },\n ],\n writer: {\n // lowest possible mark priority since it doesn't call writeInlines\n // (so will 'eat' any other marks on the stack)\n priority: 0,\n write: (output: PandocOutput, mark: Mark, parent: Fragment) => {\n // collect code and trim it (pandoc will do this on parse anyway)\n let code = '';\n parent.forEach((node: ProsemirrorNode) => (code = code + node.textContent));\n code = code.trim();\n if (code.length > 0) {\n output.writeToken(PandocTokenType.Code, () => {\n if (codeAttrs) {\n output.writeAttr(mark.attrs.id, mark.attrs.classes, mark.attrs.keyvalue);\n } else {\n output.writeAttr();\n }\n output.write(code);\n });\n }\n },\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [new MarkCommand(EditorCommandId.Code, ['Mod-d'], schema.marks.code)];\n },\n\n inputRules: (schema: Schema, filter: MarkInputRuleFilter) => {\n return [delimiterMarkInputRule('`', schema.marks.code, filter)];\n },\n };\n};\n\nexport default extension;\n","/*\n * link.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Fragment, Mark, Schema } from 'prosemirror-model';\nimport { PluginKey, Plugin } from 'prosemirror-state';\n\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { PandocToken, PandocOutput, PandocTokenType } from '../../api/pandoc';\nimport {\n pandocAttrSpec,\n pandocAttrParseDom,\n pandocAttrToDomAttr,\n pandocAttrReadAST,\n PandocAttr,\n} from '../../api/pandoc_attr';\nimport { Extension, ExtensionContext } from '../../api/extension';\nimport { kLinkTarget, kLinkTargetUrl, kLinkTargetTitle, kLinkAttr, kLinkChildren } from '../../api/link';\nimport { hasShortcutHeadingLinks } from '../../api/pandoc_format';\n\nimport { linkCommand, removeLinkCommand, linkOmniInsert } from './link-command';\nimport { linkInputRules, linkPasteHandler } from './link-auto';\nimport { linkHeadingsPostprocessor, syncHeadingLinksAppendTransaction } from './link-headings';\nimport { linkPopupPlugin } from './link-popup';\n\nimport './link-styles.css';\n\nconst extension = (context: ExtensionContext): Extension => {\n const { pandocExtensions, ui, navigation } = context;\n\n const capabilities = {\n headings: hasShortcutHeadingLinks(pandocExtensions),\n attributes: pandocExtensions.link_attributes,\n text: true,\n };\n const linkAttr = pandocExtensions.link_attributes;\n const autoLink = pandocExtensions.autolink_bare_uris;\n const headingLink = hasShortcutHeadingLinks(pandocExtensions);\n const citations = pandocExtensions.citations;\n\n const excludes = citations ? { excludes: 'cite_id' } : {};\n\n return {\n marks: [\n {\n name: 'link',\n spec: {\n attrs: {\n href: {},\n heading: { default: null },\n title: { default: null },\n ...(linkAttr ? pandocAttrSpec : {}),\n },\n inclusive: false,\n ...excludes,\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs(dom: Node | string) {\n const el = dom as Element;\n const attrs: { [key: string]: string | null } = {\n href: el.getAttribute('href'),\n title: el.getAttribute('title'),\n heading: el.getAttribute('data-heading'),\n };\n return {\n ...attrs,\n ...(linkAttr ? pandocAttrParseDom(el, attrs) : {}),\n };\n },\n },\n ],\n toDOM(mark: Mark) {\n const linkClasses = 'pm-link pm-link-text-color';\n\n let extraAttr: any = {};\n if (linkAttr) {\n extraAttr = pandocAttrToDomAttr({\n ...mark.attrs,\n classes: [...mark.attrs.classes, linkClasses],\n });\n } else {\n extraAttr = { class: linkClasses };\n }\n\n return [\n 'a',\n {\n href: mark.attrs.href,\n title: mark.attrs.title,\n 'data-heading': mark.attrs.heading,\n ...extraAttr,\n },\n ];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Link,\n mark: 'link',\n getAttrs: (tok: PandocToken) => {\n const target = tok.c[kLinkTarget];\n return {\n href: target[kLinkTargetUrl],\n title: target[kLinkTargetTitle] || null,\n ...(linkAttr ? pandocAttrReadAST(tok, kLinkAttr) : {}),\n };\n },\n getChildren: (tok: PandocToken) => tok.c[kLinkChildren],\n\n postprocessor: hasShortcutHeadingLinks(pandocExtensions) ? linkHeadingsPostprocessor : undefined,\n },\n ],\n\n writer: {\n priority: 12,\n write: (output: PandocOutput, mark: Mark, parent: Fragment) => {\n if (mark.attrs.heading) {\n output.writeRawMarkdown('[');\n output.writeInlines(parent);\n output.writeRawMarkdown(']');\n } else {\n output.writeLink(\n mark.attrs.href,\n mark.attrs.title,\n linkAttr ? (mark.attrs as PandocAttr) : null,\n () => {\n output.writeInlines(parent);\n },\n );\n }\n },\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [\n new ProsemirrorCommand(\n EditorCommandId.Link,\n ['Mod-k'],\n linkCommand(schema.marks.link, ui.dialogs.editLink, capabilities),\n linkOmniInsert(ui),\n ),\n new ProsemirrorCommand(EditorCommandId.RemoveLink, [], removeLinkCommand(schema.marks.link)),\n ];\n },\n\n inputRules: linkInputRules(autoLink, headingLink),\n\n appendTransaction: (schema: Schema) =>\n pandocExtensions.implicit_header_references ? [syncHeadingLinksAppendTransaction()] : [],\n\n plugins: (schema: Schema) => {\n const plugins = [\n linkPopupPlugin(\n schema,\n ui,\n navigation,\n linkCommand(schema.marks.link, ui.dialogs.editLink, capabilities),\n removeLinkCommand(schema.marks.link),\n ),\n ];\n if (autoLink) {\n plugins.push(\n new Plugin({\n key: new PluginKey('link-auto'),\n props: {\n transformPasted: linkPasteHandler(schema),\n },\n }),\n );\n }\n return plugins;\n },\n };\n};\n\nexport default extension;\n","/*\n * link-command.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { MarkType } from 'prosemirror-model';\nimport { EditorUI } from '../../api/ui';\nimport { LinkEditorFn, LinkProps } from '../../api/ui-dialogs';\nimport { EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { findChildren } from 'prosemirror-utils';\n\nimport { markIsActive, getMarkAttrs, getSelectionMarkRange, getMarkRange } from '../../api/mark';\n\nimport { linkTargets, LinkCapabilities, LinkType } from '../../api/link';\nimport { OmniInsertGroup } from '../../api/omni_insert';\nimport { equalsIgnoreCase } from '../../api/text';\n\nexport function linkCommand(markType: MarkType, onEditLink: LinkEditorFn, capabilities: LinkCapabilities) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // if the current node doesn't allow this mark return false\n if (!state.selection.$from.node().type.allowsMarkType(markType)) {\n return false;\n }\n\n async function asyncEditLink() {\n if (dispatch) {\n // collect link targets\n const targets = await linkTargets(state.doc);\n\n // get the range of the mark\n const range = getSelectionMarkRange(state.selection, markType);\n\n // get link attributes if we have them\n let link: { [key: string]: any } = {};\n\n // only get text if this is a text selection\n if (state.selection instanceof TextSelection) {\n link.text = state.doc.textBetween(range.from, range.to);\n capabilities.text = true;\n } else {\n capabilities.text = false;\n }\n\n // get other attributes\n if (markIsActive(state, markType)) {\n link = {\n ...link,\n ...getMarkAttrs(state.doc, range, markType),\n };\n } else {\n // if the link text is a URL then make it the default\n if (link.text && link.text.match(/^https?:\\/\\/.*$/)) {\n link.href = link.text;\n }\n }\n\n // determine type\n if (link.heading) {\n link.type = LinkType.Heading;\n } else if (link.href && link.href.startsWith('#')) {\n link.type = LinkType.ID;\n } else {\n link.type = LinkType.URL;\n }\n\n // show edit ui\n const result = await onEditLink({ ...link } as LinkProps, targets, capabilities);\n if (result) {\n const tr = state.tr;\n tr.removeMark(range.from, range.to, markType);\n if (result.action === 'edit') {\n // create the mark\n const mark = markType.create(result.link);\n\n // if the content changed then replace the range, otherwise\n if (capabilities.text && link.text !== result.link.text) {\n const node = markType.schema.text(result.link.text, [mark]);\n // if we are editing an existing link then replace it, otherwise replace the selection\n if (link.href) {\n tr.replaceRangeWith(range.from, range.to, node);\n } else {\n tr.replaceSelectionWith(node, false);\n }\n } else {\n tr.addMark(range.from, range.to, mark);\n }\n\n // if it's a heading link then update heading to indicate it has an associated link\n if (result.link.type === LinkType.Heading) {\n const heading = findChildren(\n tr.doc,\n node =>\n node.type === state.schema.nodes.heading &&\n equalsIgnoreCase(node.textContent, result.link.heading || ''),\n );\n if (heading.length > 0) {\n tr.setNodeMarkup(heading[0].pos, state.schema.nodes.heading, {\n ...heading[0].node.attrs,\n link: result.link.heading,\n });\n }\n }\n }\n dispatch(tr);\n }\n if (view) {\n view.focus();\n }\n }\n }\n asyncEditLink();\n\n return true;\n };\n}\n\nexport function linkOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Link...'),\n description: ui.context.translateText('Link to another location'),\n group: OmniInsertGroup.Content,\n priority: 8,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.link_dark! : ui.images.omni_insert?.link!),\n };\n}\n\nexport function removeLinkCommand(markType: MarkType) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const range = getMarkRange(state.selection.$from, markType);\n if (!range) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n tr.removeMark(range.from, range.to, markType);\n dispatch(tr);\n }\n\n return true;\n };\n}\n","/*\n * link-auto.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\nimport { InputRule } from 'prosemirror-inputrules';\nimport { EditorState } from 'prosemirror-state';\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { markInputRule, MarkInputRuleFilter } from '../../api/input_rule';\nimport { markPasteHandler } from '../../api/clipboard';\n\nexport function linkInputRules(autoLink: boolean, headingLink: boolean) {\n return (schema: Schema, filter: MarkInputRuleFilter) => {\n const rules = [\n // style link\n markInputRule(/(?:(?:^|[^`])<)(https?:\\/\\/[^>]+)(?:>)$/, schema.marks.link, filter, (match: string[]) => ({\n href: match[1],\n })),\n // full markdown link\n markInputRule(/(?:\\[)([^\\]]+)(?:\\]\\()([^)]+)(?:\\))$/, schema.marks.link, filter, (match: string[]) => ({\n href: match[2],\n })),\n ];\n\n if (autoLink) {\n // plain link\n rules.push(\n new InputRule(\n /(^|[^`])(https?:\\/\\/[^\\s]+\\w)[\\.\\?!\\,)]* $/,\n (state: EditorState, match: string[], start: number, end: number) => {\n const tr = state.tr;\n start = start + match[1].length;\n const linkEnd = start + match[2].length;\n tr.addMark(start, linkEnd, schema.marks.link.create({ href: match[2] }));\n tr.removeStoredMark(schema.marks.link);\n tr.insertText(' ');\n setTextSelection(end + 1)(tr);\n return tr;\n },\n ),\n );\n }\n\n return rules;\n };\n}\n\nexport function linkPasteHandler(schema: Schema) {\n return markPasteHandler(/(?:<)?([a-z]+:\\/\\/[^\\s>]+)(?:>)?/g, schema.marks.link, url => ({ href: url }));\n}\n","/*\n * clipboard.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Slice, Fragment, MarkType, Node as ProsemirrorNode } from 'prosemirror-model';\n\n// add marks to plain text pasted into the editor (e.g. urls become links)\n// https://github.com/ProseMirror/prosemirror/issues/90\nexport function markPasteHandler(regexp: RegExp, type: MarkType, getAttrs: (s: string) => {}) {\n const handler = (fragment: Fragment) => {\n regexp.lastIndex = 0;\n\n const nodes: ProsemirrorNode[] = [];\n\n fragment.forEach((child: ProsemirrorNode) => {\n if (child.isText) {\n const { text } = child;\n let pos = 0;\n let match;\n\n do {\n match = regexp.exec(text!);\n if (match) {\n const start = match.index;\n const end = start + match[0].length;\n const matchText = match.length > 1 ? match[1] : match[0];\n const attrs = getAttrs instanceof Function ? getAttrs(matchText) : getAttrs;\n if (start > 0) {\n nodes.push(child.cut(pos, start));\n }\n nodes.push(type.schema.text(matchText).mark(type.create(attrs).addToSet(child.marks)));\n pos = end;\n }\n } while (match);\n\n if (pos < text!.length) {\n nodes.push(child.cut(pos));\n }\n } else {\n nodes.push(child.copy(handler(child.content)));\n }\n });\n\n regexp.lastIndex = 0;\n\n return Fragment.fromArray(nodes);\n };\n\n return (slice: Slice) => new Slice(handler(slice.content), slice.openStart, slice.openEnd);\n}\n","/*\n * link-headings.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { findChildrenByType, findChildrenByMark } from 'prosemirror-utils';\n\nimport { getMarkRange, getMarkAttrs } from '../../api/mark';\nimport { Transaction } from 'prosemirror-state';\nimport { equalsIgnoreCase } from '../../api/text';\n\n// detect links to headings within the doc read from pandoc and update the doc\n// to note those headings in the link attributes\nexport function linkHeadingsPostprocessor(doc: ProsemirrorNode) {\n // alias schema\n const schema = doc.type.schema;\n\n // start with a list of all headings\n const headings = findChildrenByType(doc, schema.nodes.heading);\n\n // find link marks\n findChildrenByMark(doc, schema.marks.link).forEach(link => {\n const markRange = getMarkRange(doc.resolve(link.pos), schema.marks.link);\n if (markRange) {\n const attrs = getMarkAttrs(doc, markRange, schema.marks.link);\n const linkText = doc.textBetween(markRange.from, markRange.to);\n const matchedHeading = headings.find(heading => {\n return equalsIgnoreCase(heading.node.textContent, linkText) && !attrs.title && attrs.href === '#';\n });\n if (matchedHeading) {\n // point the link mark at this heading by name\n doc.nodesBetween(markRange.from, markRange.to, node => {\n const linkMark = node.marks.find(m => m.type === schema.marks.link);\n if (linkMark) {\n linkMark.attrs.heading = matchedHeading.node.textContent;\n }\n });\n\n // update the heading to indicate it has a named link to it\n matchedHeading.node.attrs.link = linkText;\n }\n }\n });\n\n // return doc\n return doc;\n}\n\nexport function syncHeadingLinksAppendTransaction() {\n return {\n name: 'sync-heading-links',\n nodeFilter: (node: ProsemirrorNode) =>\n node.type === node.type.schema.nodes.heading || node.type.schema.marks.link.isInSet(node.marks),\n append: (tr: Transaction) => {\n // alias schema\n const schema = tr.doc.type.schema;\n\n // fix links to be in sync with their text\n const links = findChildrenByMark(tr.doc, schema.marks.link);\n links.forEach(link => {\n const linkPos = tr.mapping.map(link.pos);\n const range = getMarkRange(tr.doc.resolve(linkPos), schema.marks.link);\n if (range) {\n const attrs = getMarkAttrs(tr.doc, range, schema.marks.link);\n const linkText = tr.doc.textBetween(range.from, range.to);\n if (attrs.heading && !equalsIgnoreCase(attrs.heading, linkText)) {\n tr.removeMark(range.from, range.to, schema.marks.link);\n tr.addMark(range.from, range.to, schema.marks.link.create({ ...attrs, heading: linkText }));\n }\n }\n });\n\n // if a heading has deviated from it's link, then update the link\n findChildrenByType(tr.doc, schema.nodes.heading).forEach(heading => {\n const headingPos = tr.mapping.map(heading.pos);\n const headingText = heading.node.textContent;\n const headingLink = heading.node.attrs.link;\n\n if (headingLink && !equalsIgnoreCase(headingLink, headingText) && headingText.length > 0) {\n // set the heading link text\n tr.setNodeMarkup(headingPos, schema.nodes.heading, {\n ...heading.node.attrs,\n link: headingText,\n });\n\n // find links that don't match and update them\n findChildrenByMark(tr.doc, schema.marks.link).forEach(link => {\n const linkPos = tr.mapping.map(link.pos);\n const range = getMarkRange(tr.doc.resolve(linkPos), schema.marks.link);\n if (range) {\n const attrs = getMarkAttrs(tr.doc, range, schema.marks.link);\n if (equalsIgnoreCase(attrs.heading, headingLink)) {\n tr.insertText(headingText, range.from, range.to);\n tr.addMark(\n range.from,\n range.from + headingText.length,\n schema.marks.link.create({ ...attrs, heading: headingText }),\n );\n }\n }\n });\n }\n });\n },\n };\n}\n","/*\n * LinkPopup.tsx\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { DecorationSet, EditorView } from 'prosemirror-view';\nimport { Selection, PluginKey } from 'prosemirror-state';\n\nimport * as React from 'react';\n\nimport ClipboardJS from 'clipboard';\n\nimport { EditorUI } from '../../api/ui';\nimport { LinkProps } from '../../api/ui-dialogs';\nimport { CommandFn } from '../../api/command';\n\nimport { selectionIsImageNode } from '../../api/selection';\n\nimport { showTooltip } from '../../api/widgets/tooltip';\n\nimport { WidgetProps } from '../../api/widgets/react';\nimport { LinkButton, ImageButton } from '../../api/widgets/button';\nimport { Popup } from '../../api/widgets/popup';\nimport { EditorNavigation, NavigationType } from '../../api/navigation';\nimport { Schema } from 'prosemirror-model';\nimport { textPopupDecorationPlugin, TextPopupTarget } from '../../api/text-popup';\n\nexport function linkPopupPlugin(\n schema: Schema,\n ui: EditorUI,\n nav: EditorNavigation,\n linkCmd: CommandFn,\n removeLinkCmd: CommandFn,\n) {\n const kPopupChromeWidth = 70;\n const kMaxLinkWidth = 300;\n const maxWidth = kMaxLinkWidth + kPopupChromeWidth;\n\n return textPopupDecorationPlugin({\n key: new PluginKey('link-popup'),\n markType: schema.marks.link,\n maxWidth,\n createPopup: (view: EditorView, target: TextPopupTarget, style: React.CSSProperties) => {\n return Promise.resolve(\n ,\n );\n },\n specKey: (target: TextPopupTarget) => {\n const linkText = target.attrs.heading ? target.attrs.heading : target.attrs.href;\n return `link:${linkText}`;\n },\n filter: (selection: Selection) => {\n return !selectionIsImageNode(schema, selection);\n },\n onCmdClick: (target: TextPopupTarget) => {\n ui.display.openURL(target.attrs.href);\n },\n });\n}\n\ninterface LinkPopupProps extends WidgetProps {\n link: LinkProps;\n maxLinkWidth: number;\n view: EditorView;\n ui: EditorUI;\n nav: EditorNavigation;\n linkCmd: CommandFn;\n removeLinkCmd: CommandFn;\n}\n\nconst LinkPopup: React.FC = props => {\n // link\n const linkText = props.link.heading ? props.link.heading : props.link.href;\n const onLinkClicked = () => {\n props.view.focus();\n if (props.link.heading) {\n props.nav.navigate(NavigationType.Heading, props.link.heading);\n } else if (props.link.href.startsWith('#')) {\n props.nav.navigate(NavigationType.Href, props.link.href.substr(1));\n } else {\n props.ui.display.openURL(props.link.href);\n }\n };\n\n // copy\n const showCopyButton = !props.link.heading && ClipboardJS.isSupported();\n let clipboard: ClipboardJS;\n const setCopyButton = (button: HTMLButtonElement | null) => {\n if (button) {\n clipboard = new ClipboardJS(button, {\n text: () => linkText,\n });\n clipboard.on('success', () => {\n showTooltip(button, props.ui.context.translateText('Copied to Clipboard'), 's');\n });\n } else {\n if (clipboard) {\n clipboard.destroy();\n }\n }\n };\n\n // remove\n const onRemoveClicked = () => {\n // in rstudio (w/ webkit) removing the link during the click results\n // in a page-navigation! defer to next event cycle to avoid this\n setTimeout(() => {\n props.removeLinkCmd(props.view.state, props.view.dispatch, props.view);\n props.view.focus();\n }, 0);\n };\n\n // edit\n const onEditClicked = () => {\n props.linkCmd(props.view.state, props.view.dispatch, props.view);\n };\n\n return (\n \n \n {showCopyButton ? (\n \n ) : null}\n \n \n \n );\n};\n","/*\n * tooltip.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport tlite from 'tlite';\n\nimport './tooltip.css';\n\nexport function showTooltip(\n el: Element,\n text: string,\n grav: 's' | 'n' | 'e' | 'w' | 'sw' | 'se' | 'nw' | 'ne' = 'n',\n timeout = 2000,\n) {\n el.setAttribute('title', '');\n el.setAttribute('data-tlite', text);\n tlite.show(el, { grav });\n setTimeout(() => tlite.hide(el), timeout);\n}\n","/*\n * button.tsx\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport React from 'react';\n\nimport { WidgetProps } from './react';\n\nexport interface LinkButtonProps extends WidgetProps {\n text: string;\n onClick: () => void;\n title?: string;\n maxWidth?: number;\n}\n\nexport const LinkButton: React.FC = props => {\n const className = ['pm-link', 'pm-link-text-color'].concat(props.classes || []).join(' ');\n\n const style: React.CSSProperties = {\n ...props.style,\n maxWidth: props.maxWidth,\n };\n\n const onClick = (e: React.MouseEvent) => {\n e.preventDefault();\n props.onClick();\n };\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n if (e.keyCode === 32) {\n e.preventDefault();\n props.onClick();\n }\n };\n\n return (\n \n {props.text}\n \n );\n};\n\nexport interface ImageButtonProps extends WidgetProps {\n title: string;\n image: string;\n tabIndex?: number;\n onClick?: () => void;\n}\n\nexport const ImageButton = React.forwardRef((props: ImageButtonProps, ref) => {\n const className = ['pm-image-button'].concat(props.classes || []).join(' ');\n const onClick = (e: React.MouseEvent) => {\n if (props.onClick) {\n e.preventDefault();\n props.onClick();\n }\n };\n return (\n \n {props.title}\n \n );\n});\n\nexport interface TextButtonProps extends WidgetProps {\n title: string;\n onClick?: () => void;\n tabIndex?: number;\n disabled?: boolean;\n}\n\nexport const TextButton = React.forwardRef((props: TextButtonProps, ref) => {\n const className = ['pm-text-button', 'pm-input-button'].concat(props.classes || []).join(' ');\n const onClick = (e: React.MouseEvent) => {\n if (props.onClick) {\n e.preventDefault();\n props.onClick();\n }\n };\n return (\n \n {props.title}\n \n );\n});\n\nexport interface OutlineButtonProps extends WidgetProps {\n title: string;\n onClick?: (event: React.MouseEvent) => void;\n tabIndex?: number;\n}\n\nexport const OutlineButton = React.forwardRef(\n (props: OutlineButtonProps, ref) => {\n const className = ['pm-outline-button', 'pm-input-button', 'pm-input-outline-button']\n .concat(props.classes || [])\n .join(' ');\n return (\n \n {props.title}\n \n );\n },\n);\n","/*\n * TextPopup.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { DecorationSet, Decoration, EditorView } from 'prosemirror-view';\nimport { Selection, Plugin, PluginKey, EditorState, Transaction } from 'prosemirror-state';\n\nimport * as React from 'react';\n\nimport { getMarkRange, getMarkAttrs } from './mark';\nimport { kRestoreLocationTransaction, kNavigationTransaction } from './transaction';\n\nimport { reactRenderForEditorView } from './widgets/react';\nimport { textRangePopupDecorationPosition } from './widgets/decoration';\nimport { kPlatformMac } from './platform';\nimport { MarkType } from 'prosemirror-model';\n\nexport interface TextPopupTarget {\n attrs: AttrsType;\n text: string;\n}\n\nexport interface TextPopupDecoration {\n key: PluginKey;\n markType: MarkType;\n maxWidth: number;\n createPopup: (\n view: EditorView,\n target: TextPopupTarget,\n style: React.CSSProperties,\n ) => Promise;\n dismissOnEdit?: boolean;\n makeLinksAccessible?: boolean;\n specKey?: (target: TextPopupTarget) => string;\n filter?: (selection: Selection) => boolean;\n onCmdClick?: (target: TextPopupTarget) => void;\n}\n\nexport function textPopupDecorationPlugin(deco: TextPopupDecoration): Plugin {\n const {\n key,\n markType,\n maxWidth,\n createPopup,\n specKey,\n dismissOnEdit,\n makeLinksAccessible,\n filter,\n onCmdClick,\n } = deco;\n\n let editorView: EditorView;\n\n return new Plugin({\n key,\n view(view: EditorView) {\n editorView = view;\n return {};\n },\n state: {\n init: (_config: { [key: string]: any }) => {\n return DecorationSet.empty;\n },\n apply: (tr: Transaction, old: DecorationSet, _oldState: EditorState, newState: EditorState) => {\n // if this a restore location or navigation then return empty\n if (tr.getMeta(kRestoreLocationTransaction) || tr.getMeta(kNavigationTransaction)) {\n return DecorationSet.empty;\n }\n\n // if this is doc update and we have dismiss on edit then return empty\n if (dismissOnEdit && tr.docChanged) {\n return DecorationSet.empty;\n }\n\n // if the selection is contained within the mark then show the popup\n const selection = newState.selection;\n\n // TODO JJA: The mark range is undefined when the the selection is 'after' the mark\n // e.g. [@allaire2012|]\n // which means that the preview doesn't show\n const range = getMarkRange(selection.$from, markType);\n\n if (range) {\n // selection has to be bounded by the range\n if (selection.from < range.from || selection.to > range.to) {\n return DecorationSet.empty;\n }\n\n // apply the filter\n if (filter && !filter(selection)) {\n return DecorationSet.empty;\n }\n\n // don't show the link popup if it's positioned at the far left of the mark\n // (awkward when cursor is just left of an image)\n if (selection.empty && range.from === selection.from) {\n return DecorationSet.empty;\n }\n\n // mark target\n const attrs = getMarkAttrs(newState.doc, range, markType);\n const text = newState.doc.textBetween(range.from, range.to);\n const target = { attrs, text };\n\n // compute position (we need this both for setting the styles on the LinkPopup\n // as well as for setting the Decorator pos)\n const decorationPosition = textRangePopupDecorationPosition(editorView, range, maxWidth);\n\n // key if one was provided\n let decoratorSpec: { [key: string]: any } | undefined;\n if (specKey) {\n decoratorSpec = {\n key: decorationPosition.key + specKey(target),\n ignoreSelection: true,\n stopEvent: () => {\n return true;\n },\n };\n }\n\n // create decorator\n const textPopupDecorator = Decoration.widget(\n decorationPosition.pos,\n\n (view: EditorView, getPos: () => number) => {\n // create decorator and render popup into it\n const decorationEl = window.document.createElement('div');\n decorationEl.style.visibility = 'hidden';\n\n // create popup component\n createPopup(view, target, decorationPosition.style).then(popup => {\n if (popup) {\n reactRenderForEditorView(popup, decorationEl, view);\n\n // make sure links responsd to spacebar\n if (makeLinksAccessible) {\n const links = decorationEl.getElementsByTagName('a');\n // tslint:disable-next-line: prefer-for-of\n for (let i = 0; i < links.length; i++) {\n const link = links[0];\n link.onkeydown = (e: KeyboardEvent) => {\n if (e.keyCode === 32) {\n e.preventDefault();\n link.click();\n }\n };\n }\n }\n\n decorationEl.style.visibility = 'visible';\n }\n });\n\n return decorationEl;\n },\n\n decoratorSpec,\n );\n\n // return decorations\n return DecorationSet.create(tr.doc, [textPopupDecorator]);\n } else {\n return DecorationSet.empty;\n }\n },\n },\n props: {\n decorations: (state: EditorState) => {\n return key.getState(state);\n },\n handleClick: onCmdClick\n ? (view: EditorView, pos: number, event: MouseEvent) => {\n const keyPressed = kPlatformMac && event.metaKey;\n if (keyPressed) {\n const attrs = getMarkAttrs(view.state.doc, { from: pos, to: pos }, markType);\n const range = getMarkRange(view.state.doc.resolve(pos));\n if (attrs && range) {\n event.stopPropagation();\n event.preventDefault();\n const text = view.state.doc.textBetween(range.from, range.to);\n onCmdClick({ attrs, text });\n return true;\n }\n }\n return false;\n }\n : undefined,\n },\n });\n}\n","/*\n * react.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\n\nimport { EditorView } from 'prosemirror-view';\n\nexport interface WidgetProps {\n classes?: string[];\n style?: React.CSSProperties;\n}\n\n// Render a react element into a DOM container that will eventually be added to the EditorView.dom\n// this function is necessary for situations where an element is created and then handed to ProseMirror\n// (unattached to the DOM), and then subsequently destoyed/unmounted by ProseMirror. We use a\n// MutationObserver to watch EditorView.dom for the element's removal then in response call\n// ReactDOM.unmountComponentAtNode\nexport function reactRenderForEditorView(element: React.ReactElement, container: HTMLElement, view: EditorView) {\n // render the react element into the container\n const ref = ReactDOM.render(element, container);\n\n // track view dom mutations to determine when ProseMirror has destroyed the element\n // (our cue to unmount/cleanup the react component)\n const observer = new MutationObserver(mutationsList => {\n mutationsList.forEach(mutation => {\n mutation.removedNodes.forEach(node => {\n if (node === container) {\n observer.disconnect();\n ReactDOM.unmountComponentAtNode(container);\n }\n });\n });\n });\n observer.observe(view.dom, { attributes: false, childList: true, subtree: true });\n\n // return the ref\n return ref;\n}\n","/*\n * decoration.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { ResolvedPos } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\n\nimport { editingRootNodeClosestToPos } from '../node';\n\nimport { kPixelUnit } from '../css';\n\nexport interface DecorationPosition {\n pos: number;\n style: { [key: string]: string };\n key: string;\n}\n\nexport function textRangePopupDecorationPosition(\n view: EditorView,\n range: { from: number; to: number },\n maxWidth: number,\n): DecorationPosition {\n // get the (window) DOM coordinates for the start of the range. we use range.from + 1 so\n // that ranges that are at the beginning of a line don't have their position set\n // to the previous line\n const rangeCoords = view.coordsAtPos(range.from + 1);\n\n // get the node, element, coordinates, and style for the current editing root\n const rangePos = view.state.doc.resolve(range.from);\n const editingNode = editingRootNodeClosestToPos(rangePos)!;\n const editingEl = view.domAtPos(editingNode!.pos + 1).node as HTMLElement;\n const editingBox = editingEl.getBoundingClientRect();\n const editingBoxStyle = window.getComputedStyle(editingEl);\n\n // base popup style\n const topPadding = parseInt(editingBoxStyle.paddingTop!, 10) || 0;\n const popupStyle = {\n top: rangeCoords.bottom - editingBox.top - topPadding + 5 + kPixelUnit,\n };\n\n // we need to compute whether the popup will be visible (horizontally), do\n // this by testing whether we have room for the max link width + controls/padding\n let style: { [key: string]: string };\n const positionRight = rangeCoords.left + maxWidth > editingBox.right;\n if (positionRight) {\n const rightCoords = view.coordsAtPos(range.to);\n const rightPos = rangeCoords.top === rightCoords.top ? editingBox.right - rightCoords.right : 0;\n style = {\n ...popupStyle,\n right: rightPos + kPixelUnit,\n };\n } else {\n const marginLeft =\n 'calc(' +\n (rangeCoords.left - editingBox.left) +\n 'px ' +\n ' - ' +\n editingBoxStyle.borderLeftWidth +\n ' - ' +\n editingBoxStyle.paddingLeft +\n ' - ' +\n editingBoxStyle.marginLeft +\n ' - 1ch' +\n ')';\n style = {\n ...popupStyle,\n marginLeft,\n };\n }\n\n // calculate key\n const key = Object.keys(style)\n .map(attrib => `${attrib}=${style[attrib]}`)\n .join(';');\n\n return {\n pos: editingNode.pos + editingNode.node.nodeSize - 1,\n style,\n key,\n };\n}\n\nfunction getEditingBox(view: EditorView, pos$: ResolvedPos) {\n const editingNode = editingRootNodeClosestToPos(pos$);\n const editingEl = view.domAtPos(editingNode!.pos + 1).node as HTMLElement;\n return editingEl.getBoundingClientRect();\n}\n","/*\n * select_all.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { findBlockNodes, ContentNodeWithPos } from 'prosemirror-utils';\n\nimport { Extension } from '../api/extension';\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\nimport { editingRootNode } from '../api/node';\n\nconst extension: Extension = {\n commands: () => {\n return [new ProsemirrorCommand(EditorCommandId.SelectAll, ['Mod-a'], selectAll)];\n },\n};\n\nexport function selectAll(state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) {\n if (dispatch) {\n const editingRoot = editingRootNode(state.selection);\n if (editingRoot) {\n const schema = state.schema;\n const tr = state.tr;\n if (editingRoot.node.type === schema.nodes.note) {\n tr.setSelection(childBlocksSelection(tr.doc, editingRoot));\n } else {\n const start = tr.doc.resolve(editingRoot.pos);\n const end = tr.doc.resolve(editingRoot.pos + editingRoot.node.nodeSize);\n tr.setSelection(new TextSelection(start, end));\n }\n dispatch(tr);\n if (view) {\n // we do this to escape from embedded editors e.g. codemirror\n view.focus();\n }\n }\n }\n return true;\n}\n\nfunction childBlocksSelection(doc: ProsemirrorNode, parent: ContentNodeWithPos) {\n const blocks = findBlockNodes(parent.node);\n const begin = parent.start + blocks[0].pos + 1;\n const lastBlock = blocks[blocks.length - 1];\n const end = parent.start + lastBlock.pos + lastBlock.node.nodeSize;\n return TextSelection.create(doc, begin, end);\n}\n\nexport default extension;\n","/*\n * history.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { history, redo, undo } from 'prosemirror-history';\n\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\nimport { Extension } from '../api/extension';\n\nconst extension: Extension = {\n commands: () => {\n return [\n new ProsemirrorCommand(EditorCommandId.Undo, ['Mod-z'], undo),\n new ProsemirrorCommand(EditorCommandId.Redo, ['Shift-Mod-z'], redo),\n ];\n },\n\n plugins: () => {\n return [history()];\n },\n};\n\nexport default extension;\n","/*\n * cursor.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { PluginKey, Plugin, EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { dropCursor } from 'prosemirror-dropcursor';\nimport { gapCursor, GapCursor } from 'prosemirror-gapcursor';\nimport 'prosemirror-gapcursor/style/gapcursor.css';\n\nimport { findParentNodeOfTypeClosestToPos, findParentNodeOfType, findParentNode } from 'prosemirror-utils';\n\nimport { Extension } from '../api/extension';\nimport { BaseKey, verticalArrowCanAdvanceWithinTextBlock } from '../api/basekeys';\n\nimport './cursor.css';\nimport { ResolvedPos } from 'prosemirror-model';\nimport { isList } from '../api/list';\n\n\nconst extension: Extension = {\n\n baseKeys: () => {\n return [\n { key: BaseKey.ArrowLeft, command: gapArrowHandler('left') },\n { key: BaseKey.ArrowUp, command: gapArrowHandler('up') }\n ];\n },\n\n plugins: () => {\n return [\n gapCursor(), \n dropCursor(),\n new Plugin({\n key: new PluginKey('div-gap-cursor'),\n props: {\n handleDOMEvents: {\n click: gapClickHandler,\n },\n },\n })];\n },\n};\n\nfunction gapArrowHandler(dir: 'up' | 'left') {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n \n\n // function to create a gap cursor\n const createGapCursor = ($pos: ResolvedPos) => {\n if (dispatch) {\n const cursor = new GapCursor($pos, $pos);\n const tr = state.tr;\n tr.setSelection(cursor);\n dispatch(tr);\n }\n return true;\n };\n\n if (state.selection.empty && view && view.endOfTextblock(dir)) {\n \n // get the selection\n const $head = state.selection.$head;\n\n // if we are in a block that handles up/down (e.g. display math)\n // then we don't want to make a gap cursor\n if (dir === 'up' && verticalArrowCanAdvanceWithinTextBlock(state.selection, dir)) {\n return false;\n }\n\n // check if we are in a div\n const div = findParentNodeOfType(state.schema.nodes.div)(state.selection);\n \n // if we are at the very top of a div then create a gap cursor\n if (div) {\n \n const $divPos = state.doc.resolve(div.pos);\n if ($head.index($head.depth - 1) === 0 && !(state.selection instanceof GapCursor)) {\n\n // if we are in a list item the calculations about view.endOfTextblock will be off\n if (findParentNode(isList)(state.selection)) {\n return false;\n }\n\n return createGapCursor(state.doc.resolve($divPos.pos + 1));\n } \n }\n\n // if we are at the top of the document then create a gap cursor\n if (!$head.nodeBefore && ($head.pos <= 2)) {\n return createGapCursor(state.doc.resolve($head.pos - 1));\n }\n \n return false;\n\n } else {\n return false;\n }\n\n \n };\n}\n\n\nfunction gapClickHandler(view: EditorView, event: Event): boolean {\n\n const schema = view.state.schema;\n const mouseEvent = event as MouseEvent;\n const clickPos = view.posAtCoords({ left: mouseEvent.clientX, top: mouseEvent.clientY } );\n\n if (clickPos) {\n\n // resolve click pos\n const $clickPos = view.state.doc.resolve(clickPos.pos); \n\n // create a gap cursor at the click position\n const createGapCursor = () => {\n // focus the view\n view.focus();\n \n // create the gap cursor\n const tr = view.state.tr;\n const cursor = new GapCursor($clickPos, $clickPos); \n tr.setSelection(cursor);\n view.dispatch(tr);\n \n // prevent default event handling\n event.preventDefault();\n event.stopImmediatePropagation();\n return false;\n };\n \n // handle clicks at the top of divs\n if (schema.nodes.div) {\n const div = findParentNodeOfTypeClosestToPos(\n view.state.doc.resolve(clickPos.pos), schema.nodes.div\n );\n if (div && div.pos === clickPos.inside) {\n const divNode = view.nodeDOM(div.start);\n if (divNode instanceof HTMLElement) {\n if (Math.abs(mouseEvent.clientX - divNode.getBoundingClientRect().left) < 150) {\n return createGapCursor();\n }\n }\n }\n }\n\n // handle clicks above body\n // Take this out for now b/c it was interfering with other mouse \n // gestures (e.g. clicking on attr editor). keyboard gestures still\n // work to get to the top of the body\n /*\n if ($clickPos.parent.type === schema.nodes.body &&\n $clickPos.start() === $clickPos.pos) {\n \n return createGapCursor();\n\n }\n */\n }\n\n return false;\n}\n\nexport default extension;\n","/*\n * clear_formatting.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\n\nimport { Extension } from '../api/extension';\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\nimport { liftTarget } from 'prosemirror-transform';\n\n// marks included in clear formatting\nconst kFormattingMarks = ['code', 'em', 'underline', 'smallcaps', 'span', 'strikeout', 'strong', 'superscript', 'subscript'];\n\n// for nodes, all nodes with isTextblock === true will be converted to paragraph, and all\n// nodes in this list will be lifted\nconst kLiftFormattingNodes = ['blockquote', 'line_block', 'div', 'raw_block'];\n\nconst extension: Extension = {\n commands: () => {\n return [new ProsemirrorCommand(EditorCommandId.ClearFormatting, ['Mod-\\\\'], clearFormatting)];\n },\n};\n\nexport function clearFormatting(state: EditorState, dispatch?: (tr: Transaction) => void) {\n if (dispatch) {\n // create transaction\n const tr = state.tr;\n\n // alias schema and selection\n const schema = state.schema;\n const { from, to } = tr.selection;\n\n // clear formatting marks\n kFormattingMarks.forEach(markName => {\n const mark = state.schema.marks[markName];\n if (mark) {\n tr.removeMark(from, to, mark);\n }\n });\n tr.setStoredMarks([]);\n\n // lift / set nodes as required\n tr.doc.nodesBetween(from, to, (node: ProsemirrorNode, pos: number) => {\n // ignore paragraph and text nodes (already have 'cleared' formatting)\n if (node.type === schema.nodes.paragraph || node.type === schema.nodes.text) {\n return;\n }\n\n // pass recursively through list container nodes\n if (\n node.type === schema.nodes.bullet_list ||\n node.type === schema.nodes.ordered_list ||\n node.type === schema.nodes.definition_list ||\n node.type === schema.nodes.definition_list_term ||\n node.type === schema.nodes.definition_list_description\n ) {\n return;\n }\n\n // get node range (map positions)\n const fromPos = tr.doc.resolve(tr.mapping.map(pos + 1));\n const toPos = tr.doc.resolve(tr.mapping.map(pos + node.nodeSize - 1));\n const nodeRange = fromPos.blockRange(toPos);\n\n // process text blocks and blocks that can be lifted (e.g. blockquote)\n if (nodeRange) {\n if (node.type.isTextblock) {\n tr.setNodeMarkup(nodeRange.start, schema.nodes.paragraph);\n } else if (kLiftFormattingNodes.includes(node.type.name)) {\n const targetLiftDepth = liftTarget(nodeRange);\n if (targetLiftDepth || targetLiftDepth === 0) {\n tr.lift(nodeRange, targetLiftDepth);\n }\n }\n }\n });\n\n dispatch(tr);\n }\n\n return true;\n}\n\nexport default extension;\n","/*\n * smarty.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { ellipsis, InputRule } from 'prosemirror-inputrules';\nimport { Plugin, PluginKey, EditorState } from 'prosemirror-state';\nimport { Schema } from 'prosemirror-model';\n\nimport { Extension, extensionIfEnabled } from '../api/extension';\nimport { fancyQuotesToSimple } from '../api/quote';\n\nconst plugin = new PluginKey('smartypaste');\n\n// match enDash but only for lines that aren't an html comment\nconst enDash = new InputRule(/[^!-`]--$/, (state: EditorState, match: string[], start: number, end: number) => {\n const { parent, parentOffset } = state.selection.$head;\n const precedingText = parent.textBetween(0, parentOffset);\n if (precedingText.indexOf('$/;\n\nconst extension = (context: ExtensionContext): Extension | null => {\n const { options, ui } = context;\n\n return {\n marks: [\n {\n name: 'raw_html_comment',\n noInputRules: true,\n noSpelling: true,\n spec: {\n attrs: {\n editing: { default: false },\n format: { default: false },\n },\n inclusive: false,\n excludes: 'formatting',\n parseDOM: [\n {\n tag: \"span[class*='raw-html-comment']\",\n getAttrs(dom: Node | string) {\n const el = dom as Element;\n return {\n editing: el.getAttribute('data-editing') === '1',\n format: el.getAttribute('data-format') === '1',\n };\n },\n },\n ],\n toDOM(mark: Mark) {\n const attr: any = {\n class:\n 'raw-html-comment pm-fixedwidth-font ' +\n (mark.attrs.editing ? 'pm-comment-color pm-comment-background-color' : 'pm-light-text-color') +\n (mark.attrs.format && options.hideFormatComment ? ' pm-comment-hidden' : ''),\n 'data-editing': mark.attrs.editing ? '1' : '0',\n 'data-format': mark.attrs.format ? '1' : '0',\n };\n return ['span', attr];\n },\n },\n pandoc: {\n readers: [],\n inlineHTMLReader: (schema: Schema, html: string, writer?: ProsemirrorWriter) => {\n const isComment = isHTMLComment(html);\n if (!isComment) {\n return false;\n }\n\n if (writer) {\n const mark = schema.marks.raw_html_comment.create(commentMarkAttribs(html));\n writer.openMark(mark);\n writer.writeText(html);\n writer.closeMark(mark);\n }\n\n return isComment;\n },\n writer: {\n priority: 1,\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\n output.writeRawMarkdown(parent);\n },\n },\n },\n },\n ],\n\n appendMarkTransaction: (schema: Schema) => {\n const markType = schema.marks.raw_html_comment;\n const kHTMLCommentMarkRegEx = new RegExp(kHTMLCommentRegEx.source, 'g');\n return [\n {\n name: 'html-editing-comment-marks',\n filter: (node: ProsemirrorNode) => node.isTextblock && node.type.allowsMarkType(markType),\n append: (tr: MarkTransaction, node: ProsemirrorNode, pos: number) => {\n removeInvalidatedMarks(tr, node, pos, kHTMLCommentRegEx, markType);\n detectAndApplyMarks(\n tr,\n tr.doc.nodeAt(pos)!,\n pos,\n kHTMLCommentMarkRegEx,\n markType,\n match => commentMarkAttribs(match[1]),\n () => true,\n match => match[1],\n );\n },\n },\n ];\n },\n\n // insert command\n commands: (schema: Schema) => {\n return [new InsertHTMLCommentCommand(schema, ui)];\n },\n };\n};\n\nexport class InsertHTMLCommentCommand extends ProsemirrorCommand {\n constructor(schema: Schema, ui: EditorUI) {\n super(\n EditorCommandId.HTMLComment,\n ['Shift-Mod-c'],\n (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // make sure we can insert a text node here\n if (!canInsertNode(state, schema.nodes.text)) {\n return false;\n }\n\n // make sure we can apply this mark here\n if (!toggleMarkType(schema.marks.raw_html)(state)) {\n return false;\n }\n\n // make sure the end of the selection (where we will insert the comment)\n // isn't already in a mark of this type\n if (state.doc.rangeHasMark(state.selection.to, state.selection.to + 1, schema.marks.raw_html)) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n\n // set the selection to the end of the current selection (comment 'on' the selection)\n setTextSelection(tr.selection.to)(tr);\n\n // if we have a character right before us then insert a space\n const { parent, parentOffset } = tr.selection.$to;\n const charBefore = parent.textContent.slice(parentOffset - 1, parentOffset);\n if (charBefore.length && charBefore !== ' ') {\n tr.insertText(' ');\n }\n\n // insert the comment\n const comment = '';\n const mark = schema.marks.raw_html_comment.create({ editing: true });\n tr.insert(tr.selection.to, schema.text(comment, [mark]));\n\n // set the selection to the middle of the comment\n tr.setSelection(new TextSelection(tr.doc.resolve(tr.selection.to - (comment.length / 2 - 1))));\n\n // dispatch\n dispatch(tr);\n }\n\n return true;\n },\n {\n name: ui.context.translateText('Comment'),\n description: ui.context.translateText('Editing comment'),\n group: OmniInsertGroup.Content,\n priority: 3,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.comment_dark! : ui.images.omni_insert?.comment!),\n },\n );\n }\n}\n\nfunction commentMarkAttribs(comment: string) {\n return {\n editing: !!comment.match(kHTMLEditingCommentRegEx),\n format: !!matchPandocFormatComment(comment),\n };\n}\n\nexport default extension;\n","/*\n * shortcode.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, Node as ProsemirrorNode, Mark, Fragment } from 'prosemirror-model';\nimport { Transaction } from 'prosemirror-state';\n\nimport { findChildren } from 'prosemirror-utils';\n\nimport { Extension, ExtensionContext } from '../api/extension';\nimport { detectAndApplyMarks, removeInvalidatedMarks } from '../api/mark';\nimport { MarkTransaction } from '../api/transaction';\nimport { FixupContext } from '../api/fixup';\nimport { kShortcodeRegEx } from '../api/shortcode';\nimport { PandocOutput } from '../api/pandoc';\n\nconst extension = (context: ExtensionContext): Extension | null => {\n const { format } = context;\n\n if (!format.hugoExtensions.shortcodes) {\n return null;\n }\n\n return {\n marks: [\n {\n name: 'shortcode',\n noInputRules: true,\n noSpelling: true,\n spec: {\n inclusive: false,\n excludes: 'formatting',\n attrs: {},\n parseDOM: [\n {\n tag: \"span[class*='shortcode']\",\n },\n ],\n toDOM(_mark: Mark) {\n return ['span', { class: 'shortcode pm-markup-text-color pm-fixedwidth-font' }];\n },\n },\n pandoc: {\n readers: [],\n writer: {\n priority: 1,\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\n output.writeRawMarkdown(parent);\n },\n },\n },\n },\n ],\n\n fixups: (schema: Schema) => {\n return [\n (tr: Transaction, fixupContext: FixupContext) => {\n if (fixupContext === FixupContext.Load) {\n // apply marks\n const markType = schema.marks.shortcode;\n const predicate = (node: ProsemirrorNode) => {\n return node.isTextblock && node.type.allowsMarkType(markType);\n };\n const markTr = new MarkTransaction(tr);\n findChildren(tr.doc, predicate).forEach(nodeWithPos => {\n const { pos } = nodeWithPos;\n detectAndCreateShortcodes(schema, markTr, pos);\n });\n }\n return tr;\n },\n ];\n },\n\n appendMarkTransaction: (schema: Schema) => {\n return [\n {\n name: 'shortcode-marks',\n filter: (node: ProsemirrorNode) =>\n node.isTextblock && node.type.allowsMarkType(node.type.schema.marks.shortcode),\n append: (tr: MarkTransaction, node: ProsemirrorNode, pos: number) => {\n removeInvalidatedMarks(tr, node, pos, kShortcodeRegEx, node.type.schema.marks.shortcode);\n detectAndCreateShortcodes(node.type.schema, tr, pos);\n },\n },\n ];\n },\n };\n};\n\nfunction detectAndCreateShortcodes(schema: Schema, tr: MarkTransaction, pos: number) {\n // apply marks wherever they belong\n detectAndApplyMarks(\n tr,\n tr.doc.nodeAt(pos)!,\n pos,\n kShortcodeRegEx,\n schema.marks.shortcode,\n () => ({}),\n () => true,\n match => match[1],\n );\n}\n\nexport default extension;\n","/*\n * footnote.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, Fragment, NodeType, DOMOutputSpec } from 'prosemirror-model';\nimport { Plugin, PluginKey, EditorState, Transaction, TextSelection, Selection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport {\n findChildrenByType,\n findParentNodeOfType,\n findSelectedNodeOfType,\n NodeWithPos,\n findChildren,\n} from 'prosemirror-utils';\n\nimport { ExtensionContext } from '../../api/extension';\nimport { uuidv4 } from '../../api/util';\nimport { PandocOutput, PandocTokenType, ProsemirrorWriter, PandocToken } from '../../api/pandoc';\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { canInsertNode } from '../../api/node';\nimport { EditorUI } from '../../api/ui';\nimport { OmniInsertGroup } from '../../api/omni_insert';\n\nimport {\n footnoteEditorKeyDownHandler,\n footnoteEditorActivationPlugin,\n footnoteEditorNodeViews,\n} from './footnote-editor';\nimport {\n footnoteAppendTransaction,\n footnoteFilterTransaction,\n footnoteSelectNoteAppendTransaction,\n} from './footnote-transaction';\n\nimport './footnote-styles.css';\n\nconst plugin = new PluginKey('footnote');\n\nconst extension = (context: ExtensionContext) => {\n const { pandocExtensions, ui } = context;\n\n if (!pandocExtensions.footnotes) {\n return null;\n }\n\n return {\n nodes: [\n {\n name: 'footnote',\n spec: {\n inline: true,\n attrs: {\n number: { default: 1 },\n ref: {},\n content: { default: '' },\n },\n group: 'inline',\n // atom: true,\n parseDOM: [\n {\n tag: \"span[class*='footnote']\",\n getAttrs(dom: Node | string) {\n const el = dom as Element;\n return {\n ref: el.getAttribute('data-ref'),\n content: el.getAttribute('data-content'),\n };\n },\n },\n ],\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\n return [\n 'span',\n { class: 'footnote pm-footnote', 'data-ref': node.attrs.ref, 'data-content': node.attrs.content },\n node.attrs.number.toString(),\n ];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Note,\n handler: writePandocNote,\n },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeNote(node);\n },\n },\n },\n ],\n\n appendTransaction: (_schema: Schema) => {\n return [footnoteAppendTransaction()];\n },\n\n plugins: (_schema: Schema) => {\n return [\n footnoteEditorActivationPlugin(),\n\n new Plugin({\n key: plugin,\n\n // footnote editor\n props: {\n handleKeyDown: footnoteEditorKeyDownHandler(),\n nodeViews: footnoteEditorNodeViews(),\n },\n\n // footnote transactions (fixups, etc.)\n filterTransaction: footnoteFilterTransaction(),\n appendTransaction: footnoteSelectNoteAppendTransaction(),\n }),\n ];\n },\n\n commands: () => {\n return [\n new ProsemirrorCommand(EditorCommandId.Footnote, ['Shift-Mod-F7'], footnoteCommandFn(), footnoteOmniInsert(ui)),\n ];\n },\n };\n};\n\nfunction writePandocNote(schema: Schema) {\n return (writer: ProsemirrorWriter, tok: PandocToken) => {\n // generate unique id\n const ref = uuidv4();\n\n // add note to notes collection (will be handled specially by closeNode b/c it\n // has schema.nodes.node type)\n writer.openNoteNode(ref);\n writer.writeTokens(tok.c);\n const noteNode = writer.closeNode();\n\n // store json version of node in an attribute of the footnote (we can copy/paste)\n // between different documents\n const content = JSON.stringify(noteNode.content.toJSON());\n\n // add inline node to the body\n writer.addNode(schema.nodes.footnote, { ref, number: noteNode.attrs.number, content }, []);\n };\n}\n\nfunction footnoteCommandFn() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n if (!canInsertFootnote(state)) {\n return false;\n }\n if (dispatch) {\n const tr = state.tr;\n insertFootnote(tr);\n dispatch(tr);\n }\n return true;\n };\n}\n\nfunction footnoteOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Footnote'),\n description: ui.context.translateText('Note placed at the bottom of the page'),\n group: OmniInsertGroup.References,\n priority: 2,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.footnote_dark! : ui.images.omni_insert?.footnote!),\n };\n}\n\nfunction canInsertFootnote(state: EditorState) {\n return (\n canInsertNode(state, state.schema.nodes.footnote) && !findParentNodeOfType(state.schema.nodes.note)(state.selection)\n );\n}\n\nfunction insertFootnote(\n tr: Transaction,\n edit = true,\n content?: Fragment | ProsemirrorNode | ProsemirrorNode[] | undefined,\n): string {\n // resolve content\n const schema = tr.doc.type.schema;\n if (!content) {\n content = schema.nodes.paragraph.create();\n }\n\n // generate note id\n const ref = uuidv4();\n\n // insert empty note\n const notes = findChildrenByType(tr.doc, schema.nodes.notes, true)[0];\n const note = schema.nodes.note.createAndFill({ ref }, content);\n tr.insert(notes.pos + 1, note as ProsemirrorNode);\n\n // insert footnote linked to note\n const footnote = schema.nodes.footnote.create({ ref });\n tr.replaceSelectionWith(footnote, false);\n\n // open note editor\n if (edit) {\n const noteNode = findNoteNode(tr.doc, ref);\n if (noteNode) {\n tr.setSelection(TextSelection.create(tr.doc, noteNode.pos + 1));\n }\n }\n\n // return ref\n return ref;\n}\n\nexport function selectedFootnote(selection: Selection): NodeWithPos | undefined {\n const schema = selection.$head.node().type.schema;\n return findSelectedNodeOfType(schema.nodes.footnote)(selection);\n}\n\nexport function selectedNote(selection: Selection): NodeWithPos | undefined {\n const schema = selection.$head.node().type.schema;\n return findParentNodeOfType(schema.nodes.note)(selection);\n}\n\nexport function findNoteNode(doc: ProsemirrorNode, ref: string): NodeWithPos | undefined {\n return findNodeOfTypeWithRef(doc, doc.type.schema.nodes.note, ref);\n}\n\nexport function findFootnoteNode(doc: ProsemirrorNode, ref: string): NodeWithPos | undefined {\n return findNodeOfTypeWithRef(doc, doc.type.schema.nodes.footnote, ref);\n}\n\nfunction findNodeOfTypeWithRef(doc: ProsemirrorNode, type: NodeType, ref: string): NodeWithPos | undefined {\n const foundNode = findChildren(doc, node => node.type === type && node.attrs.ref === ref, true);\n if (foundNode.length) {\n return foundNode[0];\n } else {\n return undefined;\n }\n}\n\nexport default extension;\n","/*\n * shortcode.ts\n *\n * Copyright (C) 2019-20 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport const kShortcodePattern = '(?:^|[^`])({{([%<])\\\\s+.*?[%>]}})';\nexport const kShortcodeRegEx = new RegExp(kShortcodePattern, 'g');\n","/*\n * footnote-editor.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorView, DecorationSet, NodeView } from 'prosemirror-view';\nimport { findParentNodeOfType, NodeWithPos, findChildrenByType, findChildren } from 'prosemirror-utils';\nimport { EditorState, TextSelection, Plugin, PluginKey, Transaction } from 'prosemirror-state';\n\nimport { nodeDecoration } from '../../api/decoration';\nimport { firstNode, lastNode } from '../../api/node';\nimport { selectionIsWithin } from '../../api/selection';\nimport { scrollIntoView } from '../../api/scroll';\n\nimport { findFootnoteNode, selectedFootnote, selectedNote } from './footnote';\n\nconst key = new PluginKey('footnote-editor-activate');\n\nexport function footnoteEditorActivationPlugin() {\n return new Plugin({\n key,\n state: {\n init(_config: { [key: string]: any }, instance: EditorState) {\n return DecorationSet.empty;\n },\n\n // whenever an edit affecting this mark type occurs then update the decorations\n apply(tr: Transaction, set: DecorationSet, oldState: EditorState, newState: EditorState) {\n if (selectedFootnote(newState.selection) || selectedNote(newState.selection)) {\n // if we are in the same note selection as before just return the set\n if (oldState.selection.$head.node() === newState.selection.$head.node()) {\n return set.map(tr.mapping, tr.doc);\n } else {\n return footnoteEditorDecorations(newState);\n }\n } else {\n return DecorationSet.empty;\n }\n },\n },\n props: {\n decorations(state: EditorState) {\n return key.getState(state);\n },\n },\n\n view: () => ({\n // scroll footnote into view (if necessary) when note editor is active\n update: (view: EditorView) => {\n const note = selectedNote(view.state.selection);\n if (note) {\n const footnote = findFootnoteNode(view.state.doc, note.node.attrs.ref);\n if (footnote) {\n scrollIntoView(view, footnote.pos, false, 0, 30);\n }\n }\n },\n }),\n });\n}\n\n// selection-driven decorations (mostly css classes) required to activate the footnote editor\nfunction footnoteEditorDecorations(state: EditorState) {\n const schema = state.schema;\n\n // see if either a footnote node or note (footnote editor) node has the selection\n let footnoteNode = selectedFootnote(state.selection);\n let noteNode = selectedNote(state.selection);\n\n // if they do then we need to enable footnote editing/behavior by\n // using decorators to inject appropriate css classes\n if (footnoteNode || noteNode) {\n // get body and notes nodes\n const bodyNode = findChildrenByType(state.doc, schema.nodes.body)[0];\n const notesNode = findChildrenByType(state.doc, schema.nodes.notes)[0];\n\n // resolve the specific footnote node or specific note node\n if (footnoteNode) {\n const ref = footnoteNode.node.attrs.ref;\n const matching = findChildren(notesNode.node, node => node.attrs.ref === ref);\n if (matching.length) {\n noteNode = matching[0];\n noteNode.pos = notesNode.pos + 1 + noteNode.pos;\n }\n } else if (noteNode) {\n const ref = noteNode.node.attrs.ref;\n const matching = findChildren(\n state.doc,\n node => node.type === schema.nodes.footnote && node.attrs.ref === ref,\n true,\n );\n if (matching.length) {\n footnoteNode = matching[0];\n }\n }\n\n if (footnoteNode && noteNode) {\n return DecorationSet.create(state.doc, [\n // make notes node visible\n nodeDecoration(noteNode, { class: 'active' }),\n\n // paint outline over footnote\n nodeDecoration(footnoteNode, { class: 'active pm-selected-node-outline-color' }),\n\n // position body and notes nodes for footnote editing\n nodeDecoration(bodyNode, { class: 'editing-footnote pm-pane-border-color' }),\n nodeDecoration(notesNode, { class: 'editing-footnote pm-pane-border-color' }),\n ]);\n } else {\n return DecorationSet.empty;\n }\n } else {\n return DecorationSet.empty;\n }\n}\n\n// node view that display the note number alongside the note content\nexport function footnoteEditorNodeViews() {\n return {\n note(node: ProsemirrorNode, view: EditorView, getPos: boolean | (() => number)) {\n return new NoteEditorView(node, view, getPos as () => number);\n },\n };\n}\n\nclass NoteEditorView implements NodeView {\n public readonly dom: HTMLElement;\n public readonly contentDOM: HTMLElement;\n\n private readonly node: ProsemirrorNode;\n private readonly view: EditorView;\n private readonly getPos: () => number;\n\n constructor(node: ProsemirrorNode, view: EditorView, getPos: () => number) {\n this.node = node;\n this.view = view;\n this.getPos = getPos;\n\n this.dom = window.document.createElement('div');\n this.dom.setAttribute('data-ref', this.node.attrs.ref);\n this.dom.classList.add('note');\n\n const label = window.document.createElement('div');\n label.classList.add('note-label');\n label.contentEditable = 'false';\n label.innerHTML = `

${this.node.attrs.number}:

`;\n this.dom.appendChild(label);\n\n const content = window.document.createElement('div');\n content.classList.add('note-content');\n this.contentDOM = content;\n this.dom.appendChild(content);\n }\n}\n\n// custom handling for arrow keys that cause selection to escape the editor\nexport function footnoteEditorKeyDownHandler() {\n return (view: EditorView, event: KeyboardEvent) => {\n // alias schema & selection\n const schema = view.state.schema;\n const selection = view.state.selection;\n\n // pass if the selection isn't in a note\n const noteNode: NodeWithPos | undefined = findParentNodeOfType(schema.nodes.note)(selection);\n if (!noteNode) {\n return false;\n }\n\n // function to find and move selection to associated footnote\n // will call this from Escape, ArrowLeft, and ArrowUp handlers below\n const selectFootnote = (before = true) => {\n const footnoteNode = findFootnoteNode(view.state.doc, noteNode.node.attrs.ref);\n if (footnoteNode) {\n const tr = view.state.tr;\n tr.setSelection(TextSelection.near(tr.doc.resolve(footnoteNode.pos + (before ? 0 : 1))));\n view.dispatch(tr);\n }\n };\n\n // if this is the Escape key then close the editor\n if (event.key === 'Escape') {\n selectFootnote();\n return true;\n }\n\n // ...otherwise check to see if the user is attempting to arrow out of the footnote\n\n // get first and last text block nodes (bail if we aren't in either)\n const firstTextBlock = firstNode(noteNode, node => node.isTextblock);\n const lastTextBlock = lastNode(noteNode, node => node.isTextblock);\n if (!firstTextBlock && !lastTextBlock) {\n return false;\n }\n\n // exiting from first text block w/ left or up arrow?\n if (firstTextBlock) {\n if (selectionIsWithin(selection, firstTextBlock)) {\n switch (event.key) {\n case 'ArrowLeft':\n if (selection.anchor === firstTextBlock.pos + 1) {\n selectFootnote(true);\n return true;\n }\n break;\n case 'ArrowUp': {\n if (view.endOfTextblock('up')) {\n selectFootnote(true);\n return true;\n }\n break;\n }\n }\n }\n }\n\n // exiting from last text block with right or down arrow?\n if (lastTextBlock) {\n if (selectionIsWithin(selection, lastTextBlock)) {\n switch (event.key) {\n case 'ArrowRight':\n if (selection.anchor === lastTextBlock.pos + lastTextBlock.node.nodeSize - 1) {\n selectFootnote(false);\n return true;\n }\n break;\n case 'ArrowDown': {\n if (view.endOfTextblock('down')) {\n selectFootnote(false);\n return true;\n }\n break;\n }\n }\n }\n }\n\n return false;\n };\n}\n","/*\n * footnote-transaction.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Fragment, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { Transaction, EditorState, TextSelection } from 'prosemirror-state';\nimport {\n findChildrenByType,\n NodeWithPos,\n findSelectedNodeOfType,\n ContentNodeWithPos,\n findParentNodeOfType,\n} from 'prosemirror-utils';\nimport { Transform } from 'prosemirror-transform';\n\nimport { uuidv4 } from '../../api/util';\n\nimport { findNoteNode, selectedNote } from './footnote';\nimport { trTransform } from '../../api/transaction';\n\n// examine transactions and filter out attempts to place foonotes within note bodies\n// (this is not allowed by pandoc markdown)\nexport function footnoteFilterTransaction() {\n return (tr: Transaction, state: EditorState) => {\n const noteWithPos = selectedNote(tr.selection);\n if (noteWithPos && findChildrenByType(noteWithPos.node, state.schema.nodes.footnote).length) {\n return false;\n }\n return true;\n };\n}\n\n// examine editor transactions and append a transaction that handles fixup of footnote numbers,\n// importing of pasted footnotes, selection propagation to the footnote editor, etc.\nexport function footnoteAppendTransaction() {\n const footnoteChange = (node: ProsemirrorNode) => {\n const schema = node.type.schema;\n return node.type === schema.nodes.footnote || node.type === schema.nodes.note;\n };\n\n return {\n name: 'footnote-renumber',\n nodeFilter: footnoteChange,\n append: (tr: Transaction) => {\n const schema = tr.doc.type.schema;\n const activeNote = findParentNodeOfType(schema.nodes.note)(tr.selection);\n trTransform(tr, footnoteFixupTransform(activeNote));\n },\n };\n}\n\nfunction footnoteFixupTransform(activeNote: ContentNodeWithPos | undefined) {\n return (tr: Transform) => {\n // query for notes and footnotes. note that since these are computed at the beginning\n // before any steps are applied, we always need to map their positions before using them\n const schema = tr.doc.type.schema;\n const footnotes = findAllFootnotes(tr.doc);\n const allNotes = findAllNotes(tr.doc);\n\n // iterate through footnotes in the newState\n const refs = new Set();\n footnotes.forEach((footnote, index) => {\n // map position\n footnote.pos = tr.mapping.map(footnote.pos);\n\n // footnote number\n const number = index + 1;\n\n // alias ref and content (either or both may be updated)\n let { ref, content } = footnote.node.attrs;\n\n // we may be creating a new note to append\n let newNote: any;\n\n // get reference to note (if any)\n const note = allNotes.find(noteWithPos => noteWithPos.node.attrs.ref === ref);\n\n // matching note found\n if (note) {\n // map position since we scanned for all of the notes at the top and we may\n // have called tr.insert for a new note below which would have invalidated\n // the positions\n note.pos = tr.mapping.map(note.pos);\n\n // update content if this is a note edit (used to propagate user edits back to data-content)\n if (activeNote && activeNote.node.attrs.ref === ref) {\n content = JSON.stringify(note.node.content.toJSON());\n }\n\n // if we've already processed this ref then it's a duplicate, make a copy w/ a new ref/id\n if (refs.has(ref)) {\n // create a new unique id and change the ref to it\n ref = uuidv4();\n\n // create and insert new note with this id\n newNote = schema.nodes.note.createAndFill({ ref, number }, note.node.content);\n\n // otherwise update the note with the correct number (if necessary)\n } else {\n if (note.node.attrs.number !== number) {\n tr.setNodeMarkup(note.pos, schema.nodes.note, {\n ...note.node.attrs,\n number,\n });\n }\n }\n\n // if there is no note then create one using the content attr\n // (this can happen for a copy/paste operation from another document)\n } else if (content) {\n newNote = schema.nodes.note.createAndFill({ ref, number }, Fragment.fromJSON(schema, JSON.parse(content)));\n }\n\n // insert newNote if necessary\n if (newNote) {\n const notesContainer = findNotesContainer(tr.doc);\n tr.insert(notesContainer.pos + 1, newNote as ProsemirrorNode);\n }\n\n // indicate that we've seen this ref\n refs.add(ref);\n\n // set new footnote markup if necessary\n const attrs = footnote.node.attrs;\n if (ref !== attrs.ref || content !== attrs.content || number !== attrs.number) {\n tr.setNodeMarkup(footnote.pos, schema.nodes.footnote, {\n ...footnote.node.attrs,\n ref,\n content,\n number,\n });\n }\n });\n\n // remove ophraned notes\n for (let i = allNotes.length - 1; i >= 0; i--) {\n const note = allNotes[i];\n note.pos = tr.mapping.map(note.pos);\n const footnote = footnotes.find(fn => fn.node.attrs.ref === note.node.attrs.ref);\n if (!footnote) {\n tr.delete(note.pos, note.pos + note.node.nodeSize);\n }\n }\n };\n}\n\nexport function footnoteSelectNoteAppendTransaction() {\n return (_transactions: Transaction[], _oldState: EditorState, newState: EditorState) => {\n const schema = newState.schema;\n const footnoteNode: NodeWithPos | undefined = findSelectedNodeOfType(schema.nodes.footnote)(newState.selection);\n if (footnoteNode) {\n const tr = newState.tr;\n const ref = footnoteNode.node.attrs.ref;\n const noteNode = findNoteNode(tr.doc, ref);\n if (noteNode) {\n tr.setSelection(TextSelection.near(tr.doc.resolve(noteNode.pos)));\n }\n return tr;\n }\n };\n}\n\nfunction findAllFootnotes(doc: ProsemirrorNode) {\n const schema = doc.type.schema;\n return findChildrenByType(doc, schema.nodes.footnote, true);\n}\n\nfunction findAllNotes(doc: ProsemirrorNode) {\n const schema = doc.type.schema;\n const notesContainer = findNotesContainer(doc);\n const offset = notesContainer.pos + 1;\n const notes = findChildrenByType(notesContainer.node, schema.nodes.note, false);\n return notes.map(note => ({ ...note, pos: note.pos + offset }));\n}\n\nfunction findNotesContainer(doc: ProsemirrorNode) {\n return findChildrenByType(doc, doc.type.schema.nodes.notes, false)[0];\n}\n","/*\n * raw_block.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, NodeType } from 'prosemirror-model';\n\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { setBlockType } from 'prosemirror-commands';\n\nimport { findParentNode } from 'prosemirror-utils';\n\nimport { Extension, ExtensionContext } from '../api/extension';\n\nimport {\n PandocOutput,\n PandocToken,\n PandocTokenType,\n ProsemirrorWriter,\n kRawBlockContent,\n kRawBlockFormat,\n} from '../api/pandoc';\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\n\nimport { EditorUI } from '../api/ui';\nimport { isSingleLineHTML } from '../api/html';\nimport { kHTMLFormat, kTexFormat, editRawBlockCommand, isRawHTMLFormat } from '../api/raw';\nimport { isSingleLineTex } from '../api/tex';\nimport { OmniInsert, OmniInsertGroup } from '../api/omni_insert';\n\nconst extension = (context: ExtensionContext): Extension | null => {\n const { pandocExtensions, pandocCapabilities, ui } = context;\n\n const rawAttribute = pandocExtensions.raw_attribute;\n\n return {\n nodes: [\n {\n name: 'raw_block',\n spec: {\n content: 'text*',\n group: 'block',\n marks: '',\n code: true,\n defining: true,\n isolating: true,\n attrs: {\n format: {},\n },\n parseDOM: [\n {\n tag: \"div[class*='raw-block']\",\n preserveWhitespace: 'full',\n getAttrs: (node: Node | string) => {\n const el = node as Element;\n return {\n format: el.getAttribute('data-format'),\n };\n },\n },\n ],\n toDOM(node: ProsemirrorNode) {\n return [\n 'div',\n {\n class: 'raw-block pm-fixedwidth-font pm-code-block pm-markup-text-color',\n 'data-format': node.attrs.format,\n },\n 0,\n ];\n },\n },\n\n code_view: {\n lang: (node: ProsemirrorNode) => {\n return node.attrs.format;\n },\n attrEditFn: rawAttribute ? editRawBlockCommand(ui, pandocCapabilities.output_formats) : undefined,\n borderColorClass: 'pm-raw-block-border',\n },\n\n attr_edit: () => ({\n type: (schema: Schema) => schema.nodes.raw_block,\n tags: (node: ProsemirrorNode) => [node.attrs.format],\n editFn: rawAttribute\n ? () => editRawBlockCommand(ui, pandocCapabilities.output_formats)\n : () => (state: EditorState) => false,\n }),\n\n pandoc: {\n readers: [\n {\n token: PandocTokenType.RawBlock,\n block: 'raw_block',\n },\n ],\n\n // ensure that usethis badges comment ends up in it's own block\n preprocessor: (markdown: string) => {\n return markdown.replace(/([^\\n])(\\n^$)/gm, (_match, p1, p2) => {\n return p1 + '\\n' + p2;\n });\n },\n\n // we define a custom blockReader here so that we can convert html and tex blocks with\n // a single line of code into paragraph with a raw inline\n blockReader: (schema: Schema, tok: PandocToken, writer: ProsemirrorWriter) => {\n if (tok.t === PandocTokenType.RawBlock) {\n readPandocRawBlock(schema, tok, writer);\n return true;\n } else if (isParagraphWrappingMultilineRaw(tok)) {\n const rawTok = tok.c[0];\n const format = rawTok.c[kRawBlockFormat];\n const content = rawTok.c[kRawBlockContent];\n writer.addNode(schema.nodes.raw_block, { format }, [schema.text(content)]);\n return true;\n } else {\n return false;\n }\n },\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n if (!pandocExtensions.raw_attribute || node.textContent.trim() === '') {\n output.writeToken(PandocTokenType.Para, () => {\n output.writeRawMarkdown(node.textContent);\n });\n } else {\n output.writeToken(PandocTokenType.RawBlock, () => {\n output.write(node.attrs.format);\n output.write(node.textContent);\n });\n }\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n const commands: ProsemirrorCommand[] = [];\n\n commands.push(\n new FormatRawBlockCommand(EditorCommandId.HTMLBlock, kHTMLFormat, schema.nodes.raw_block, {\n name: ui.context.translateText('HTML Block'),\n description: ui.context.translateText('Raw HTML content'),\n group: OmniInsertGroup.Blocks,\n priority: 6,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.html_block_dark! : ui.images.omni_insert?.html_block!,\n }),\n );\n\n if (pandocExtensions.raw_tex) {\n commands.push(\n new FormatRawBlockCommand(EditorCommandId.TexBlock, kTexFormat, schema.nodes.raw_block, {\n name: ui.context.translateText('TeX Block'),\n description: ui.context.translateText('Raw TeX content'),\n group: OmniInsertGroup.Blocks,\n priority: 5,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.tex_block_dark! : ui.images.omni_insert?.tex_block!,\n }),\n );\n }\n\n if (rawAttribute) {\n commands.push(new RawBlockCommand(ui, pandocCapabilities.output_formats));\n }\n\n return commands;\n },\n };\n};\n\nfunction readPandocRawBlock(schema: Schema, tok: PandocToken, writer: ProsemirrorWriter) {\n // single lines of html should be read as inline html (allows for\n // highlighting and more seamless editing experience)\n const format = tok.c[kRawBlockFormat];\n const text = tok.c[kRawBlockContent] as string;\n const textTrimmed = text.trimRight();\n if (isRawHTMLFormat(format) && isSingleLineHTML(textTrimmed) && writer.hasInlineHTMLWriter(textTrimmed)) {\n writer.openNode(schema.nodes.paragraph, {});\n writer.writeInlineHTML(textTrimmed);\n writer.closeNode();\n\n // similarly, single lines of tex should be read as inline tex\n } else if (format === kTexFormat && isSingleLineTex(textTrimmed)) {\n writer.openNode(schema.nodes.paragraph, {});\n const rawTexMark = schema.marks.raw_tex.create();\n writer.openMark(rawTexMark);\n writer.writeText(textTrimmed);\n writer.closeMark(rawTexMark);\n writer.closeNode();\n } else {\n writer.openNode(schema.nodes.raw_block, { format });\n writer.writeText(text);\n writer.closeNode();\n }\n}\n\nfunction isParagraphWrappingMultilineRaw(tok: PandocToken) {\n return isSingleChildParagraph(tok) && \n tok.c[0].t === PandocTokenType.RawInline &&\n isMultilineString(tok.c[0].c[kRawBlockContent]);\n}\n\nfunction isSingleChildParagraph(tok: PandocToken) {\n return tok.t === PandocTokenType.Para && tok.c && tok.c.length === 1;\n}\n\nfunction isMultilineString(str: string) {\n return str.indexOf('\\n') !== -1;\n}\n\n// base class for format specific raw block commands (e.g. html/tex)\nclass FormatRawBlockCommand extends ProsemirrorCommand {\n private format: string;\n private nodeType: NodeType;\n\n constructor(id: EditorCommandId, format: string, nodeType: NodeType, omniInsert?: OmniInsert) {\n super(\n id,\n [],\n (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n if (!this.isActive(state) && !setBlockType(this.nodeType, { format })(state)) {\n return false;\n }\n\n if (dispatch) {\n const schema = state.schema;\n if (this.isActive(state)) {\n setBlockType(schema.nodes.paragraph)(state, dispatch);\n } else {\n setBlockType(this.nodeType, { format })(state, dispatch);\n }\n }\n\n return true;\n },\n omniInsert,\n );\n this.format = format;\n this.nodeType = nodeType;\n }\n\n public isActive(state: EditorState) {\n return !!findParentNode(node => node.type === this.nodeType && node.attrs.format === this.format)(state.selection);\n }\n}\n\n// generic raw block command (shows dialog to allow choosing from among raw formats)\nclass RawBlockCommand extends ProsemirrorCommand {\n constructor(ui: EditorUI, outputFormats: string[]) {\n super(EditorCommandId.RawBlock, [], editRawBlockCommand(ui, outputFormats), {\n name: ui.context.translateText('Raw Block...'),\n description: ui.context.translateText('Raw content block'),\n group: OmniInsertGroup.Blocks,\n priority: 4,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.raw_block_dark! : ui.images.omni_insert?.raw_block!),\n });\n }\n}\n\nexport default extension;\n","/*\n * yaml_metadata.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, DOMOutputSpec, ParseRule } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { ExtensionContext, Extension } from '../../api/extension';\nimport { PandocOutput, PandocTokenType } from '../../api/pandoc';\nimport { EditorUI } from '../../api/ui';\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { canInsertNode } from '../../api/node';\nimport { codeNodeSpec } from '../../api/code';\nimport { selectionIsBodyTopLevel } from '../../api/selection';\nimport { yamlMetadataTitlePlugin } from './yaml_metadata-title';\nimport { yamlMetadataBlockCapsuleFilter } from './yaml_metadata-capsule';\nimport { OmniInsertGroup } from '../../api/omni_insert';\nimport { fragmentText } from '../../api/fragment';\nimport { stripYamlDelimeters } from '../../api/yaml';\n\nconst extension = (context: ExtensionContext): Extension => {\n const { ui } = context;\n\n return {\n nodes: [\n {\n name: 'yaml_metadata',\n\n spec: {\n ...codeNodeSpec(),\n attrs: {\n navigation_id: { default: null },\n },\n parseDOM: [\n {\n tag: \"div[class*='yaml-block']\",\n preserveWhitespace: 'full',\n } as ParseRule,\n ],\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\n return ['div', { class: 'yaml-block pm-code-block' }, 0];\n },\n },\n\n code_view: {\n lang: () => 'yaml-frontmatter',\n classes: ['pm-metadata-background-color', 'pm-yaml-metadata-block'],\n },\n\n pandoc: {\n blockCapsuleFilter: yamlMetadataBlockCapsuleFilter(),\n\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.Para, () => {\n const yaml = '---\\n' + stripYamlDelimeters(fragmentText(node.content)) + '\\n---';\n output.writeRawMarkdown(yaml);\n });\n },\n },\n },\n ],\n\n commands: () => {\n return [new YamlMetadataCommand(ui)];\n },\n\n plugins: () => [yamlMetadataTitlePlugin()],\n };\n};\n\nclass YamlMetadataCommand extends ProsemirrorCommand {\n constructor(ui: EditorUI) {\n super(\n EditorCommandId.YamlMetadata,\n [],\n (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const schema = state.schema;\n\n if (!canInsertNode(state, schema.nodes.yaml_metadata)) {\n return false;\n }\n\n // only allow inserting at the top level\n if (!selectionIsBodyTopLevel(state.selection)) {\n return false;\n }\n\n // create yaml metadata text\n if (dispatch) {\n const tr = state.tr;\n const kYamlLeading = '---\\n';\n const kYamlTrailing = '\\n---';\n const yamlText = schema.text(kYamlLeading + kYamlTrailing);\n const yamlNode = schema.nodes.yaml_metadata.create({}, yamlText);\n tr.replaceSelectionWith(yamlNode);\n setTextSelection(tr.mapping.map(state.selection.from) - kYamlTrailing.length - 1)(tr);\n dispatch(tr);\n }\n\n return true;\n },\n {\n name: ui.context.translateText('YAML'),\n description: ui.context.translateText('YAML metadata block'),\n group: OmniInsertGroup.Blocks,\n priority: 3,\n selectionOffset: -4,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.yaml_block_dark! : ui.images.omni_insert?.yaml_block!,\n },\n );\n }\n}\n\nexport default extension;\n","/*\n * yaml_metadata-capsule.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\n\nimport { ProsemirrorWriter } from '../../api/pandoc';\nimport { uuidv4 } from '../../api/util';\nimport {\n encodedBlockCapsuleRegex,\n blockCapsuleSourceWithoutPrefix,\n PandocBlockCapsule,\n blockCapsuleParagraphTokenHandler,\n blockCapsuleTextHandler,\n} from '../../api/pandoc_capsule';\n\nconst kYamlBlocksRegex = /(^)(---[ \\t]*\\n(?![ \\t]*\\n)[\\W\\w]*?\\n(?:---|\\.\\.\\.))([ \\t]*)$/gm;\n\nconst kYamlDiscardRegex = /^([\\t >]*)`{3,}/m;\n\nexport function yamlMetadataBlockCapsuleFilter() {\n const kYamlMetadataCapsuleType = 'E1819605-0ACD-4FAE-8B99-9C1B7BD7C0F1'.toLowerCase();\n\n return {\n type: kYamlMetadataCapsuleType,\n\n match: kYamlBlocksRegex,\n\n // if there was an unterminated yaml block inside a code block (followed by more yaml,\n // perhaps in yet another code block) then the main regex eats the code block boundary.\n // provide a discard expression that excludes any yaml block that has what appears\n // to be a fenced code block boundary\n discard: kYamlDiscardRegex,\n\n // add a newline to ensure that if the metadata block has text right\n // below it we still end up in our own pandoc paragarph block\n enclose: (capsuleText: string) => capsuleText + '\\n',\n // globally replace any instances of our block capsule found in text\n handleText: blockCapsuleTextHandler(\n kYamlMetadataCapsuleType,\n encodedBlockCapsuleRegex(undefined, '\\\\n', 'gm'),\n (text: string) => text.substring(0, text.length - 1), // trim off newline\n ),\n\n // we are looking for a paragraph token consisting entirely of a\n // block capsule of our type. if find that then return the block\n // capsule text\n handleToken: blockCapsuleParagraphTokenHandler(kYamlMetadataCapsuleType),\n\n // write as yaml_metadata\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\n writer.openNode(schema.nodes.yaml_metadata, {\n navigation_id: uuidv4(),\n md_index: capsule.position,\n });\n // write the lines w/o the source-level prefix\n writer.writeText(blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix));\n writer.closeNode();\n },\n };\n}\n","/*\n * rmd_chunk.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\n\nimport { Extension, ExtensionContext } from '../../api/extension';\nimport { PandocOutput, PandocTokenType } from '../../api/pandoc';\n\nimport { codeNodeSpec } from '../../api/code';\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\n\nimport { EditorUI } from '../../api/ui';\nimport { kBookdownDocType } from '../../api/format';\nimport { rmdChunk, insertRmdChunk } from '../../api/rmd';\nimport { OmniInsertGroup } from '../../api/omni_insert';\n\nimport { RmdChunkImagePreviewPlugin } from './rmd_chunk-image';\nimport { rmdChunkBlockCapsuleFilter } from './rmd_chunk-capsule';\n\nimport './rmd_chunk-styles.css';\n\nconst extension = (context: ExtensionContext): Extension | null => {\n const { ui, options, format } = context;\n\n if (!format.rmdExtensions.codeChunks) {\n return null;\n }\n\n return {\n nodes: [\n {\n name: 'rmd_chunk',\n spec: {\n ...codeNodeSpec(),\n attrs: {\n navigation_id: { default: null },\n md_index: { default: 0 },\n },\n parseDOM: [\n {\n tag: \"div[class*='rmd-chunk']\",\n preserveWhitespace: 'full',\n },\n ],\n toDOM(node: ProsemirrorNode) {\n return ['div', { class: 'rmd-chunk pm-code-block' }, 0];\n },\n },\n\n code_view: {\n firstLineMeta: true,\n lineNumbers: true,\n lineNumberFormatter: (lineNumber: number, lineCount?: number, line?: string) => {\n if (lineNumber === 1) {\n return '';\n } else {\n return lineNumber - 1 + '';\n }\n },\n bookdownTheorems: format.docTypes.includes(kBookdownDocType),\n classes: ['pm-chunk-background-color'],\n lang: (_node: ProsemirrorNode, content: string) => {\n const match = content.match(/^\\{([a-zA-Z0-9_]+)/);\n if (match) {\n return match[1];\n } else {\n return null;\n }\n },\n createFromPastePattern: /^\\{([a-zA-Z0-9_]+).*}.*?\\n/m,\n },\n\n pandoc: {\n blockCapsuleFilter: rmdChunkBlockCapsuleFilter(),\n\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.Para, () => {\n const parts = rmdChunk(node.textContent);\n if (parts) {\n output.writeRawMarkdown('```{' + parts.meta + '}\\n' + parts.code + '```\\n');\n }\n });\n },\n },\n },\n ],\n\n commands: (_schema: Schema) => {\n const commands = [\n new RChunkCommand(ui),\n new PythonChunkCommand(ui),\n new BashChunkCommand(ui),\n new RcppChunkCommand(ui),\n new SQLChunkCommand(ui),\n new D3ChunkCommand(ui),\n new StanChunkCommand(ui),\n ];\n return commands;\n },\n\n plugins: (_schema: Schema) => {\n if (options.rmdImagePreview) {\n return [new RmdChunkImagePreviewPlugin(ui.context)];\n } else {\n return [];\n }\n },\n };\n};\n\nclass RmdChunkCommand extends ProsemirrorCommand {\n constructor(\n ui: EditorUI,\n id: EditorCommandId,\n keymap: string[],\n priority: number,\n lang: string,\n placeholder: string,\n image: () => string,\n rowOffset = 1,\n colOffset = 0,\n selectionOffset?: number,\n ) {\n super(id, keymap, insertRmdChunk(placeholder, rowOffset, colOffset), {\n name: `${lang} ${ui.context.translateText('Code Chunk')}`,\n description: `${ui.context.translateText('Executable')} ${lang} ${ui.context.translateText('chunk')}`,\n group: OmniInsertGroup.Chunks,\n priority,\n selectionOffset: selectionOffset || colOffset || placeholder.length,\n image,\n });\n }\n}\n\nclass RChunkCommand extends RmdChunkCommand {\n constructor(ui: EditorUI) {\n super(ui, EditorCommandId.RCodeChunk, ['Mod-Alt-i'], 10, 'R', '{r}\\n', () =>\n ui.prefs.darkMode() ? ui.images.omni_insert!.r_chunk_dark! : ui.images.omni_insert!.r_chunk!,\n );\n }\n}\n\nclass PythonChunkCommand extends RmdChunkCommand {\n constructor(ui: EditorUI) {\n super(\n ui,\n EditorCommandId.PythonCodeChunk,\n [],\n 8,\n 'Python',\n '{python}\\n',\n () => ui.images.omni_insert!.python_chunk!,\n );\n }\n}\n\nclass BashChunkCommand extends RmdChunkCommand {\n constructor(ui: EditorUI) {\n super(ui, EditorCommandId.BashCodeChunk, [], 7, 'Bash', '{bash}\\n', () =>\n ui.prefs.darkMode() ? ui.images.omni_insert!.bash_chunk_dark! : ui.images.omni_insert!.bash_chunk!,\n );\n }\n}\n\nclass RcppChunkCommand extends RmdChunkCommand {\n constructor(ui: EditorUI) {\n super(ui, EditorCommandId.RcppCodeChunk, [], 6, 'Rcpp', '{Rcpp}\\n', () =>\n ui.prefs.darkMode() ? ui.images.omni_insert!.rcpp_chunk_dark! : ui.images.omni_insert!.rcpp_chunk!,\n );\n }\n}\n\nclass SQLChunkCommand extends RmdChunkCommand {\n constructor(ui: EditorUI) {\n super(\n ui,\n EditorCommandId.SQLCodeChunk,\n [],\n 5,\n 'SQL',\n '{sql connection=}\\n',\n () => ui.images.omni_insert!.sql_chunk!,\n 0,\n 16,\n );\n }\n}\n\nclass D3ChunkCommand extends RmdChunkCommand {\n constructor(ui: EditorUI) {\n super(ui, EditorCommandId.D3CodeChunk, [], 4, 'D3', '{d3 data=}\\n', () => ui.images.omni_insert!.d3_chunk!, 0, 9);\n }\n}\n\nclass StanChunkCommand extends RmdChunkCommand {\n constructor(ui: EditorUI) {\n super(\n ui,\n EditorCommandId.StanCodeChunk,\n [],\n 7,\n 'Stan',\n '{stan output.var=}\\n',\n () => ui.images.omni_insert!.stan_chunk!,\n 0,\n 17,\n );\n }\n}\n\nexport default extension;\n","/*\n * rmd_chunk-image.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { Plugin, PluginKey, Transaction, EditorState } from 'prosemirror-state';\nimport { DecorationSet, Decoration, EditorView } from 'prosemirror-view';\n\nimport { findChildrenByType, setTextSelection } from 'prosemirror-utils';\n\nimport { transactionsAreTypingChange, transactionsHaveChange } from '../../api/transaction';\nimport { EditorUIContext } from '../../api/ui';\nimport { stripQuotes } from '../../api/text';\nimport { onElementRemoved } from '../../api/dom';\n\nconst key = new PluginKey('rmd-chunk-image-preview');\n\nexport class RmdChunkImagePreviewPlugin extends Plugin {\n constructor(uiContext: EditorUIContext) {\n super({\n key,\n state: {\n init: (_config: { [key: string]: any }, state: EditorState) => {\n return imagePreviewDecorations(state, uiContext);\n },\n apply: (tr: Transaction, old: DecorationSet, oldState: EditorState, newState: EditorState) => {\n const transactions = [tr];\n\n // doc didn't change, return existing decorations\n if (!tr.docChanged) {\n return old.map(tr.mapping, tr.doc);\n\n // non-typing change, do a full rescan\n } else if (!transactionsAreTypingChange(transactions)) {\n return imagePreviewDecorations(newState, uiContext);\n\n // change that affects a rmd chunk block, do a full rescan\n } else if (transactionsHaveChange(transactions, oldState, newState, isRmdChunkNode)) {\n return imagePreviewDecorations(newState, uiContext);\n }\n\n // otherwise return the existing set (mapped)\n else {\n return old.map(tr.mapping, tr.doc);\n }\n },\n },\n props: {\n decorations: (state: EditorState) => {\n return key.getState(state);\n },\n },\n });\n }\n}\n\nfunction imagePreviewDecorations(state: EditorState, uiContext: EditorUIContext) {\n // find all rmd code chunks with knitr::include_graphics\n const decorations: Decoration[] = [];\n findChildrenByType(state.doc, state.schema.nodes.rmd_chunk).forEach(rmdChunk => {\n // look for a line with knitr::include_graphics\n const match = rmdChunk.node.textContent.match(/^(knitr::)?include_graphics\\((['\"])([^\\2]+)\\2/m);\n if (match) {\n // see if we can also find an out.width on the first line\n let width = '';\n const firstLine = rmdChunk.node.textContent.split(/\\r?\\n/)[0];\n const widthMatch = firstLine.match(/^\\s*\\{[r|R][, ].*out\\.width\\s*=\\s*([^ ,$]+).*}/);\n if (widthMatch) {\n width = stripQuotes(widthMatch[1].trim());\n // revert if they are using out.width = NULL\n if (width === 'NULL') {\n width = '';\n }\n }\n\n // see if we can find fig.align='center'\n const alignCenter = !!firstLine.match(/^\\s*\\{[r|R][, ].*fig\\.align\\s*=\\s*['\"]?center['\"]?/);\n\n const imagePath = match[3];\n const decoration = Decoration.widget(\n rmdChunk.pos + rmdChunk.node.nodeSize,\n (view: EditorView, getPos: () => number) => {\n const container = window.document.createElement('div');\n container.style.marginTop = '-1.5em'; // to bridge back to the codemirror block\n // which has a margin-block-end of 1em\n container.classList.add('pm-image-preview');\n container.classList.add('pm-block-border-color');\n const img = window.document.createElement('img');\n if (alignCenter) {\n img.classList.add('pm-image-centered');\n }\n\n img.src = uiContext.mapResourceToURL(imagePath);\n\n // watch for changes to the file\n const unsubscribe = uiContext.watchResource(imagePath, () => {\n img.src = uiContext.mapResourceToURL(imagePath);\n });\n onElementRemoved(view.dom, container, unsubscribe);\n\n if (width) {\n img.setAttribute('width', width);\n }\n img.draggable = false;\n img.onload = () => {\n img.alt = '';\n };\n img.onerror = () => {\n img.alt = ` ${uiContext.translateText('Image not found')}: ${imagePath}`;\n };\n // select rmd_chunk for clicks on the preview image\n img.onclick = () => {\n const tr = view.state.tr;\n setTextSelection(getPos() - 1)(tr);\n view.dispatch(tr);\n };\n container.append(img);\n return container;\n },\n { key: imagePath + 'width:' + width + 'center:' + alignCenter },\n );\n decorations.push(decoration);\n }\n });\n\n // return decorations\n return DecorationSet.create(state.doc, decorations);\n}\n\nfunction isRmdChunkNode(node: ProsemirrorNode) {\n return node.type === node.type.schema.nodes.rmd_chunk;\n}\n","/*\n * rmd_chunk-capsule.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\n\nimport { PandocBlockCapsule, parsePandocBlockCapsule, blockCapsuleSourceWithoutPrefix } from '../../api/pandoc_capsule';\nimport { PandocToken, PandocTokenType, ProsemirrorWriter } from '../../api/pandoc';\nimport { pandocAttrReadAST, kCodeBlockAttr, PandocAttr, kCodeBlockText } from '../../api/pandoc_attr';\nimport { uuidv4 } from '../../api/util';\n\nexport function rmdChunkBlockCapsuleFilter() {\n // (note that this constant is also defined in VisualMode.java)\n const kBlockCapsuleType = 'F3175F2A-E8A0-4436-BE12-B33925B6D220'.toLowerCase();\n const kBlockCapsuleTextRegEx = new RegExp('```' + kBlockCapsuleType + '\\\\n[ \\\\t>]*([^`]+)\\\\n[ \\\\t>]*```', 'g');\n\n return {\n type: kBlockCapsuleType,\n\n match: /^([\\t >]*)(```+\\s*\\{[a-zA-Z0-9_]+(?: *[ ,].*?)?\\}[ \\t]*\\n(?:[\\t >]*```+|[\\W\\w]*?\\n[\\t >]*```+))([ \\t]*)$/gm,\n\n // textually enclose the capsule so that pandoc parses it as the type of block we want it to\n // (in this case a code block). we use the capsule prefix here to make sure that the code block's\n // content and end backticks match the indentation level of the first line correctly\n enclose: (capsuleText: string, capsule: PandocBlockCapsule) =>\n '```' + kBlockCapsuleType + '\\n' + capsule.prefix + capsuleText + '\\n' + capsule.prefix + '```',\n // look for one of our block capsules within pandoc ast text (e.g. a code or raw block)\n // and if we find it, parse and return the original source code\n handleText: (text: string, tok: PandocToken) => {\n // if this is a code block then we need to strip the prefix\n const stripPrefix = tok.t === PandocTokenType.CodeBlock;\n\n return text.replace(kBlockCapsuleTextRegEx, (_match, p1) => {\n const capsuleText = p1;\n const capsule = parsePandocBlockCapsule(capsuleText);\n if (stripPrefix) {\n return blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\n } else {\n return capsule.source;\n }\n });\n },\n\n // look for a block capsule of our type within a code block (indicated by the\n // presence of a special css class)\n handleToken: (tok: PandocToken) => {\n if (tok.t === PandocTokenType.CodeBlock) {\n const attr = pandocAttrReadAST(tok, kCodeBlockAttr) as PandocAttr;\n if (attr.classes.includes(kBlockCapsuleType)) {\n return tok.c[kCodeBlockText];\n }\n }\n return null;\n },\n\n // write the node as an rmd_chunk, being careful to remove the backticks\n // preserved as part of the source, and striping out the base indentation\n // level implied by the prefix\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\n // open node\n writer.openNode(schema.nodes.rmd_chunk, {\n navigation_id: uuidv4(),\n md_index: capsule.position,\n });\n\n // source still has leading and trailing backticks, remove them\n const source = capsule.source.replace(/^```+/, '').replace(/\\n[\\t >]*```+$/, '');\n\n // write the lines w/o the source-level prefix\n writer.writeText(blockCapsuleSourceWithoutPrefix(source, capsule.prefix));\n\n // all done\n writer.closeNode();\n },\n };\n}\n","/*\n * div.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, DOMOutputSpec, ResolvedPos } from 'prosemirror-model';\nimport { EditorState, Transaction, Plugin, PluginKey, NodeSelection, TextSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { findParentNodeOfType, ContentNodeWithPos } from 'prosemirror-utils';\nimport { wrapIn } from 'prosemirror-commands';\nimport { liftTarget } from 'prosemirror-transform';\n\nimport { ExtensionContext, Extension } from '../api/extension';\nimport {\n pandocAttrSpec,\n pandocAttrToDomAttr,\n pandocAttrParseDom,\n pandocAttrReadAST,\n pandocAttrFrom,\n pandocAttrAvailable,\n PandocAttr,\n} from '../api/pandoc_attr';\nimport { PandocOutput, PandocTokenType, PandocToken } from '../api/pandoc';\nimport { ProsemirrorCommand, EditorCommandId, toggleWrap } from '../api/command';\nimport { EditorUI } from '../api/ui';\nimport { OmniInsertGroup, OmniInsert } from '../api/omni_insert';\nimport { markIsActive } from '../api/mark';\nimport { BaseKey } from '../api/basekeys';\nimport { attrInputToProps } from '../api/ui-dialogs';\n\nimport './div-styles.css';\n\nconst DIV_ATTR = 0;\nconst DIV_CHILDREN = 1;\n\nconst extension = (context: ExtensionContext) : Extension | null => {\n const { pandocExtensions, ui } = context;\n\n if (!pandocExtensions.fenced_divs && !pandocExtensions.native_divs) {\n return null;\n }\n\n return {\n nodes: [\n {\n name: 'div',\n spec: {\n attrs: {\n ...pandocAttrSpec,\n },\n defining: true,\n content: 'block+',\n group: 'block list_item_block',\n parseDOM: [\n {\n tag: 'div[data-div=\"1\"]',\n getAttrs(dom: Node | string) {\n const attrs: {} = { 'data-div': 1 };\n return {\n ...attrs,\n ...pandocAttrParseDom(dom as Element, attrs),\n };\n },\n },\n ],\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\n const attr = {\n 'data-div': '1',\n ...pandocAttrToDomAttr({\n ...node.attrs,\n classes: [...node.attrs.classes, 'pm-div', 'pm-div-background-color'],\n }),\n };\n return ['div', attr, 0];\n },\n },\n\n attr_edit: () => ({\n type: (schema: Schema) => schema.nodes.div,\n editFn: () => divCommand(ui, true),\n offset: {\n top: 3,\n right: 0\n }\n }),\n\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Div,\n block: 'div',\n getAttrs: (tok: PandocToken) => ({\n ...pandocAttrReadAST(tok, DIV_ATTR),\n }),\n getChildren: (tok: PandocToken) => tok.c[DIV_CHILDREN],\n },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.Div, () => {\n output.writeAttr(node.attrs.id, node.attrs.classes, node.attrs.keyvalue);\n output.writeArray(() => {\n output.writeNodes(node);\n });\n });\n },\n },\n },\n ],\n\n baseKeys: () => {\n return [\n { key: BaseKey.Enter, command: divInputRuleEnter() },\n ];\n },\n\n commands: () => {\n return [\n // turn current block into a div\n new DivCommand(EditorCommandId.Div, ui, true),\n\n // insert a div\n new DivCommand(EditorCommandId.InsertDiv, ui, false, {\n name: ui.context.translateText('Div...'),\n description: ui.context.translateText('Block containing other content'),\n group: OmniInsertGroup.Blocks,\n priority: 1,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.div_dark! : ui.images.omni_insert?.div!),\n }),\n ];\n },\n\n plugins: (schema: Schema) => {\n return [\n new Plugin({\n key: new PluginKey(\"div-selection\"),\n appendTransaction: (_transactions: Transaction[], _oldState: EditorState, newState: EditorState) => {\n if (newState.selection.empty) {\n return;\n }\n const divNode = findParentNodeOfType(schema.nodes.div)(newState.selection);\n if (divNode && \n (newState.selection.anchor === divNode.start + 1) &&\n newState.selection.head === divNode.pos + divNode.node.nodeSize - 2) {\n const tr = newState.tr;\n const sel = TextSelection.create(tr.doc, divNode.start, divNode.start + divNode.node.nodeSize - 1);\n tr.setSelection(sel);\n return tr;\n }\n }\n }),\n ];\n },\n };\n};\n\n\nfunction divCommand(ui: EditorUI, allowEdit: boolean) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // two different modes:\n // - editing attributes of an existing div\n // - wrapping (a la blockquote)\n const schema = state.schema;\n const div = allowEdit ? findParentNodeOfType(schema.nodes.div)(state.selection) : undefined;\n if (!div && !toggleWrap(schema.nodes.div)(state)) {\n return false;\n }\n\n async function asyncEditDiv() {\n if (dispatch) {\n // selecting nothing or entire div means edit, selecting text outside of a\n // div or a subset of an existing div means create new one\n const editMode = div && (state.selection.empty || isFullDivSelection(div, state));\n if (editMode) {\n await editDiv(ui, state, dispatch, div!);\n } else {\n await createDiv(ui, state, dispatch);\n }\n if (view) {\n view.focus();\n }\n }\n }\n asyncEditDiv();\n\n return true;\n };\n}\n\nclass DivCommand extends ProsemirrorCommand {\n constructor(id: EditorCommandId, ui: EditorUI, allowEdit: boolean, omniInsert?: OmniInsert) {\n super(id, [], divCommand(ui, allowEdit), omniInsert);\n }\n}\n\nasync function editDiv(ui: EditorUI, state: EditorState, dispatch: (tr: Transaction) => void, div: ContentNodeWithPos) {\n const attr = pandocAttrFrom(div.node.attrs);\n const result = await ui.dialogs.editDiv(attr, pandocAttrAvailable(attr));\n if (result) {\n const tr = state.tr;\n if (result.action === 'edit') {\n tr.setNodeMarkup(div.pos, div.node.type, result.attr);\n dispatch(tr);\n } else if (result.action === 'remove') {\n const fromPos = tr.doc.resolve(div.pos + 1);\n const toPos = tr.doc.resolve(div.pos + div.node.nodeSize - 1);\n const nodeRange = fromPos.blockRange(toPos);\n if (nodeRange) {\n const targetLiftDepth = liftTarget(nodeRange);\n if (targetLiftDepth || targetLiftDepth === 0) {\n tr.lift(nodeRange, targetLiftDepth);\n }\n }\n dispatch(tr);\n }\n }\n}\n\nasync function createDiv(ui: EditorUI, state: EditorState, dispatch: (tr: Transaction) => void) {\n const result = await ui.dialogs.editDiv({}, false);\n if (result) {\n wrapIn(state.schema.nodes.div)(state, (tr: Transaction) => {\n const div = findParentNodeOfType(state.schema.nodes.div)(tr.selection)!;\n tr.setNodeMarkup(div.pos, div.node.type, result.attr);\n dispatch(tr);\n });\n }\n}\n\nfunction isFullDivSelection(div: ContentNodeWithPos, state: EditorState) {\n const divStart = div.pos;\n const divEnd = div.pos + div.node.nodeSize;\n return state.selection.from - 2 === divStart && state.selection.to + 2 === divEnd;\n}\n\nfunction divInputRuleEnter() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // see if the parent consist of a pending code block input rule\n const schema = state.schema;\n\n // selection must be empty\n if (!state.selection.empty) {\n return false;\n }\n\n // full text of parent must meet the pattern\n // eslint-disable-next-line no-useless-escape\n const match = state.selection.$head.parent.textContent.match(/^:{3,}(\\s+({.*?}|\\S+)?[\\s:]*)?$/);\n if (!match) {\n return false;\n }\n\n // no inline code marks\n if (markIsActive(state, schema.marks.code)) {\n return false;\n }\n\n // must be able to perform the replacement\n if (!canApplyDivInputRule(state)) {\n return false;\n }\n\n // execute\n if (dispatch) {\n // if it's just followed by whitespace then don't do it\n if (match[1] && match[1].trim().length === 0) {\n return false;\n }\n\n // parse attributes\n const attrs: PandocAttr = pandocAttrFrom({});\n const attribMatch = match[2];\n if (attribMatch) {\n const bracesMatch = attribMatch.match(/^{(.*?)}$/);\n if (bracesMatch) {\n const pandocAttrsText = bracesMatch[1];\n const pandocAttrsMatch = pandocAttrsText.match(/^\\s*(#\\S+)?\\s*((?:\\.\\S+\\s*)*)?(.*)?$/);\n if (pandocAttrsMatch) {\n const attrProps = attrInputToProps({ id: pandocAttrsMatch[1], classes: pandocAttrsMatch[2] });\n attrs.id = attrProps.id || '';\n attrs.classes = attrProps.classes || [];\n }\n } else {\n attrs.classes = [attribMatch];\n }\n }\n\n wrapIn(state.schema.nodes.div)(state, (tr: Transaction) => {\n const div = findParentNodeOfType(state.schema.nodes.div)(tr.selection)!;\n tr.setNodeMarkup(div.pos, div.node.type, attrs);\n const $head = tr.selection.$head;\n const start = $head.start();\n const end = start + $head.parent.textContent.length;\n tr.deleteRange(start, end);\n dispatch(tr);\n });\n }\n\n return true;\n };\n}\n\nfunction canReplaceNodeWithDiv(schema: Schema, $pos: ResolvedPos) {\n return $pos.node(-1).canReplaceWith($pos.index(-1), $pos.indexAfter(-1), schema.nodes.div);\n}\n\nfunction canApplyDivInputRule(state: EditorState) {\n const schema = state.schema;\n const { $head } = state.selection;\n return canReplaceNodeWithDiv(schema, $head);\n}\n\nexport default extension;\n","/*\n * line_block.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, DOMOutputSpec } from 'prosemirror-model';\n\nimport { ExtensionContext } from '../api/extension';\nimport { PandocOutput, PandocTokenType, PandocToken } from '../api/pandoc';\n\nimport { EditorCommandId, WrapCommand } from '../api/command';\nimport { OmniInsertGroup } from '../api/omni_insert';\n\nimport './line_block-styles.css';\n\nconst extension = (context: ExtensionContext) => {\n const { pandocExtensions, ui } = context;\n\n if (!pandocExtensions.line_blocks) {\n return null;\n }\n\n return {\n nodes: [\n {\n name: 'line_block',\n spec: {\n content: 'paragraph+',\n group: 'block',\n defining: true,\n parseDOM: [\n {\n tag: \"div[class*='line-block']\",\n },\n ],\n toDOM(): DOMOutputSpec {\n return ['div', { class: 'line-block pm-line-block pm-block-border-color pm-margin-bordered' }, 0];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.LineBlock,\n block: 'line_block',\n getChildren: (tok: PandocToken) => {\n return tok.c.map((line: PandocToken[]) => ({ t: PandocTokenType.Para, c: line }));\n },\n },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.withOption('writeSpaces', false, () => {\n output.writeToken(PandocTokenType.LineBlock, () => {\n node.forEach(line => {\n output.writeArray(() => {\n output.writeInlines(line.content);\n });\n });\n });\n });\n },\n },\n },\n ],\n commands: (schema: Schema) => {\n return [\n new WrapCommand(\n EditorCommandId.LineBlock,\n [],\n schema.nodes.line_block,\n {},\n {\n name: ui.context.translateText('Line Block'),\n description: ui.context.translateText('Preserve leading spaces and line breaks'),\n group: OmniInsertGroup.Blocks,\n priority: 2,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.line_block_dark! : ui.images.omni_insert?.line_block!,\n },\n ),\n ];\n },\n };\n};\n\nexport default extension;\n","/*\n * table.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\nimport { Transaction } from 'prosemirror-state';\nimport { Transform } from 'prosemirror-transform';\nimport { tableEditing, columnResizing, goToNextCell, deleteColumn, deleteRow } from 'prosemirror-tables';\n\nimport { findChildrenByType } from 'prosemirror-utils';\n\nimport { EditorUI } from '../../api/ui';\nimport { Extension, ExtensionContext } from '../../api/extension';\nimport { PandocExtensions } from '../../api/pandoc';\nimport { BaseKey } from '../../api/basekeys';\nimport { ProsemirrorCommand, EditorCommandId, exitNode } from '../../api/command';\nimport { TableCapabilities } from '../../api/table';\nimport { trTransform } from '../../api/transaction';\nimport { PandocCapabilities } from '../../api/pandoc_capabilities';\n\nimport {\n insertTable,\n deleteTable,\n deleteTableCaption,\n addRows,\n addColumns,\n TableColumnAlignmentCommand,\n TableRowCommand,\n TableColumnCommand,\n TableToggleHeaderCommand,\n TableToggleCaptionCommand,\n CssAlignment,\n insertTableOmniInsert,\n} from './table-commands';\n\nimport {\n tableContainerNode,\n tableNode,\n tableCaptionNode,\n tableCellNode,\n tableHeaderNode,\n tableRowNode,\n} from './table-nodes';\n\nimport { fixupTableWidths } from './table-columns';\nimport { TableContextMenuPlugin } from './table-contextmenu';\nimport { tablePaste } from './table-paste';\n\nimport 'prosemirror-tables/style/tables.css';\nimport './table-styles.css';\n\nconst extension = (context: ExtensionContext): Extension | null => {\n const { pandocExtensions, ui } = context;\n\n // not enabled if there are no tables enabled\n if (\n !pandocExtensions.grid_tables &&\n !pandocExtensions.pipe_tables &&\n !pandocExtensions.simple_tables &&\n !pandocExtensions.multiline_tables\n ) {\n return null;\n }\n\n // define table capabilities\n const capabilities: TableCapabilities = {\n captions: pandocExtensions.table_captions,\n headerOptional: pandocExtensions.grid_tables,\n multiline: pandocExtensions.multiline_tables || pandocExtensions.grid_tables,\n };\n\n return {\n nodes: [\n tableContainerNode,\n tableNode,\n tableCaptionNode,\n tableCellNode(pandocExtensions.grid_tables),\n tableHeaderNode,\n tableRowNode,\n ],\n\n commands: (_schema: Schema) => {\n const commands = [\n new ProsemirrorCommand(\n EditorCommandId.TableInsertTable,\n ['Alt-Mod-t'],\n insertTable(capabilities, ui),\n insertTableOmniInsert(ui),\n ),\n new ProsemirrorCommand(EditorCommandId.TableNextCell, ['Tab'], goToNextCell(1)),\n new ProsemirrorCommand(EditorCommandId.TablePreviousCell, ['Shift-Tab'], goToNextCell(-1)),\n new TableColumnCommand(EditorCommandId.TableAddColumnAfter, [], addColumns(true)),\n new TableColumnCommand(EditorCommandId.TableAddColumnBefore, [], addColumns(false)),\n new TableColumnCommand(EditorCommandId.TableDeleteColumn, [], deleteColumn),\n new TableRowCommand(EditorCommandId.TableAddRowAfter, [], addRows(true)),\n new TableRowCommand(EditorCommandId.TableAddRowBefore, [], addRows(false)),\n new TableRowCommand(EditorCommandId.TableDeleteRow, [], deleteRow),\n new ProsemirrorCommand(EditorCommandId.TableDeleteTable, [], deleteTable()),\n new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnLeft, CssAlignment.Left),\n new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnRight, CssAlignment.Right),\n new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnCenter, CssAlignment.Center),\n new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnDefault, null),\n ];\n if (capabilities.captions) {\n commands.push(new TableToggleCaptionCommand());\n }\n if (capabilities.headerOptional) {\n commands.push(new TableToggleHeaderCommand());\n }\n return commands;\n },\n\n plugins: (schema: Schema) => {\n return [\n columnResizing({\n handleWidth: 5,\n }),\n tableEditing(),\n tablePaste(),\n new TableContextMenuPlugin(schema, ui),\n ];\n },\n\n baseKeys: (schema: Schema) => {\n // core keys\n const keys = [\n { key: BaseKey.Backspace, command: deleteTableCaption() },\n { key: BaseKey.Enter, command: exitNode(schema.nodes.table_caption, -2, false) },\n { key: BaseKey.Tab, command: goToNextCell(1) },\n { key: BaseKey.ShiftTab, command: goToNextCell(-1) },\n ];\n\n // turn enter key variations into tab if we don't support multi-line\n if (!capabilities.multiline) {\n keys.push({ key: BaseKey.Enter, command: goToNextCell(1) });\n keys.push({ key: BaseKey.ShiftEnter, command: goToNextCell(-11) });\n keys.push({ key: BaseKey.ModEnter, command: goToNextCell(1) });\n }\n\n return keys;\n },\n\n fixups: (_schema: Schema, view: EditorView) => {\n return [fixupTableWidths(view)];\n },\n\n appendTransaction: (_schema: Schema) => {\n return [\n {\n name: 'table-repair',\n nodeFilter: node => node.type === node.type.schema.nodes.table,\n append: (tr: Transaction) => {\n trTransform(tr, tableRepairTransform);\n },\n },\n ];\n },\n };\n};\n\nfunction tableRepairTransform(tr: Transform) {\n const schema = tr.doc.type.schema;\n const tables = findChildrenByType(tr.doc, schema.nodes.table);\n tables.forEach(table => {\n // map the position\n const pos = tr.mapping.map(table.pos);\n\n // get containing node (pos is right before the table)\n const containingNode = tr.doc.resolve(pos).node();\n\n // table with no container\n if (containingNode.type !== schema.nodes.table_container) {\n // add the container\n const caption = schema.nodes.table_caption.createAndFill({ inactive: true }, undefined)!;\n const container = schema.nodes.table_container.createAndFill({}, [table.node, caption])!;\n tr.replaceWith(pos, pos + table.node.nodeSize, container);\n }\n\n // table with no content (possible w/ half caption leftover)\n else if (table.node.firstChild && table.node.firstChild.childCount === 0) {\n // delete the table (and container if necessary)\n const hasContainer = containingNode.type === schema.nodes.table_container;\n if (hasContainer) {\n tr.deleteRange(pos - 1, pos - 1 + containingNode.nodeSize);\n } else {\n tr.deleteRange(pos, table.node.nodeSize);\n }\n }\n });\n}\n\nexport default extension;\n","/*\n * table-commands.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\nimport { Node as ProsemirrorNode, Fragment } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { findParentNodeOfType, setTextSelection, findChildrenByType } from 'prosemirror-utils';\nimport {\n isInTable,\n Rect,\n TableMap,\n selectionCell,\n CellSelection,\n toggleHeader,\n addRow,\n addColumn,\n} from 'prosemirror-tables';\n\nimport { EditorUI } from '../../api/ui';\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { canInsertNode } from '../../api/node';\nimport { TableCapabilities } from '../../api/table';\nimport { OmniInsertGroup } from '../../api/omni_insert';\n\nexport function insertTable(capabilities: TableCapabilities, ui: EditorUI) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const schema = state.schema;\n\n // can we insert?\n if (!canInsertNode(state, schema.nodes.table_container)) {\n return false;\n }\n\n // is the selection inside a table caption? if it is then we can't insert\n // as it will \"split\" the table_container in such a way that an invalid\n // table will be created\n if (findParentNodeOfType(schema.nodes.table_caption)(state.selection)) {\n return false;\n }\n\n async function asyncInsertTable() {\n if (dispatch) {\n const result = await ui.dialogs.insertTable(capabilities);\n if (result) {\n // create cells\n const numRows = result.rows + (result.header ? 1 : 0);\n const rows: ProsemirrorNode[] = [];\n for (let r = 0; r < numRows; r++) {\n const cells: ProsemirrorNode[] = [];\n const cellType = r === 0 && result.header ? schema.nodes.table_header : schema.nodes.table_cell;\n for (let c = 0; c < result.cols; c++) {\n const content =\n cellType === schema.nodes.table_header\n ? schema.text(`${ui.context.translateText('Col')}${c + 1}`)\n : Fragment.empty;\n cells.push(cellType.createAndFill({}, schema.nodes.paragraph.createAndFill({}, content)!)!);\n }\n rows.push(schema.nodes.table_row.createAndFill({}, cells)!);\n }\n\n // create table\n const table = schema.nodes.table.createAndFill({}, rows)!;\n const tableCaption = schema.nodes.table_caption.createAndFill(\n { inactive: !result.caption },\n result.caption ? schema.text(result.caption) : undefined,\n )!;\n const tableContainer = schema.nodes.table_container.createAndFill({}, [table, tableCaption])!;\n\n // insert\n const tr = state.tr;\n tr.replaceSelectionWith(tableContainer);\n\n // select first cell\n const selectionPos = tr.mapping.map(state.selection.from, -1);\n setTextSelection(selectionPos)(tr).scrollIntoView();\n\n // dispatch & focus\n dispatch(tr);\n }\n if (view) {\n view.focus();\n }\n }\n }\n asyncInsertTable();\n\n return true;\n };\n}\n\nexport function insertTableOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Table'),\n description: ui.context.translateText('Content in rows and columns'),\n group: OmniInsertGroup.Lists,\n priority: 1,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.table_dark! : ui.images.omni_insert?.table!),\n };\n}\n\nexport function deleteTable() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n const schema = state.schema;\n const container = findParentNodeOfType(schema.nodes.table_container)(state.selection);\n if (container) {\n if (dispatch) {\n const tr = state.tr;\n tr.delete(container.pos, container.pos + container.node.nodeSize);\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n return false;\n };\n}\n\nexport function deleteTableCaption() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // must be a selection within an empty table caption\n const schema = state.schema;\n const { $head } = state.selection;\n if ($head.parent.type !== schema.nodes.table_caption || $head.parent.childCount !== 0) {\n return false;\n }\n\n if (dispatch) {\n // set the caption to inactive\n const tr = state.tr;\n const caption = $head.parent;\n tr.setNodeMarkup($head.pos - 1, schema.nodes.table_caption, {\n ...caption.attrs,\n inactive: true,\n });\n setTextSelection($head.pos - 1, -1)(tr);\n dispatch(tr);\n }\n\n return true;\n };\n}\n\nexport function addColumns(after: boolean) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (!isInTable(state)) {\n return false;\n }\n if (dispatch) {\n let tr = state.tr;\n const rect = selectedRect(state);\n const columns = rect.right - rect.left;\n for (let i = 0; i < columns; i++) {\n tr = addColumn(tr, rect, after ? rect.right : rect.left);\n }\n dispatch(tr);\n }\n return true;\n };\n}\n\nexport function addRows(after: boolean) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (!isInTable(state)) {\n return false;\n }\n if (dispatch) {\n // add the rows\n let tr = state.tr;\n const rect = selectedRect(state);\n const rows = rect.bottom - rect.top;\n for (let i = 0; i < rows; i++) {\n tr = addRow(tr, rect, after ? rect.bottom : rect.top);\n }\n\n // sync column alignments for table\n const table = findParentNodeOfType(state.schema.nodes.table)(tr.selection);\n if (table) {\n const alignments = new Array(rect.map.width);\n table.node.forEach((rowNode, rowOffset, rowIndex) => {\n rowNode.forEach((cellNode, cellOffset, colIndex) => {\n const cellPos = table.pos + 1 + rowOffset + 1 + cellOffset;\n if (rowIndex === 0) {\n const cell = tr.doc.nodeAt(cellPos);\n alignments[colIndex] = cell?.attrs.align || null;\n } else {\n tr.setNodeMarkup(cellPos, cellNode.type, {\n ...cellNode.attrs,\n align: alignments[colIndex] || null,\n });\n }\n });\n });\n }\n\n dispatch(tr);\n }\n return true;\n };\n}\n\nexport class TableToggleHeaderCommand extends ProsemirrorCommand {\n constructor() {\n super(EditorCommandId.TableToggleHeader, [], toggleHeader('row'));\n }\n\n public isActive(state: EditorState): boolean {\n if (!isInTable(state)) {\n return false;\n }\n const { table } = selectedRect(state);\n const firstCell = table.firstChild!.firstChild!;\n return firstCell.type === state.schema.nodes.table_header;\n }\n}\n\nexport class TableToggleCaptionCommand extends ProsemirrorCommand {\n constructor() {\n super(\n EditorCommandId.TableToggleCaption,\n [],\n (state: EditorState, dispatch?: (tr: Transaction, view?: EditorView) => void) => {\n if (!isInTable(state)) {\n return false;\n }\n const caption = this.tableCaptionNode(state);\n if (!caption) {\n return false;\n }\n\n if (dispatch) {\n const focus = caption.node.attrs.inactive;\n const tr = state.tr;\n tr.setNodeMarkup(caption.pos + 1, state.schema.nodes.table_caption, {\n ...caption.node.attrs,\n inactive: !caption.node.attrs.inactive,\n });\n if (focus) {\n setTextSelection(caption.pos + 1)(tr).scrollIntoView();\n }\n dispatch(tr);\n }\n\n return true;\n },\n );\n }\n\n public isActive(state: EditorState): boolean {\n if (!isInTable(state)) {\n return false;\n }\n\n const caption = this.tableCaptionNode(state);\n if (!caption) {\n return false;\n }\n\n return !caption.node.attrs.inactive;\n }\n\n private tableCaptionNode(state: EditorState) {\n const container = findParentNodeOfType(state.schema.nodes.table_container)(state.selection);\n if (container) {\n const caption = findChildrenByType(container.node, state.schema.nodes.table_caption);\n return {\n node: caption[0].node,\n pos: container.pos + caption[0].pos,\n };\n } else {\n return undefined;\n }\n }\n}\n\nexport enum CssAlignment {\n Left = 'left',\n Right = 'right',\n Center = 'center',\n}\n\nexport class TableRowCommand extends ProsemirrorCommand {\n public plural(state: EditorState) {\n if (!isInTable(state)) {\n return 1;\n }\n\n const rect = selectedRect(state);\n return rect.bottom - rect.top;\n }\n}\n\nexport class TableColumnCommand extends ProsemirrorCommand {\n public plural(state: EditorState) {\n if (!isInTable(state)) {\n return 1;\n }\n\n const rect = selectedRect(state);\n return rect.right - rect.left;\n }\n}\n\nexport class TableColumnAlignmentCommand extends ProsemirrorCommand {\n private readonly align: CssAlignment | null;\n\n constructor(id: EditorCommandId, align: CssAlignment | null) {\n super(id, [], (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (!isInTable(state)) {\n return false;\n }\n\n if (dispatch) {\n const { table, tableStart, left, right } = selectedRect(state);\n const tr = state.tr;\n table.forEach((rowNode, rowOffset) => {\n rowNode.forEach((cellNode, cellOffset, i) => {\n if (i >= left && i < right) {\n const cellPos = tableStart + 1 + rowOffset + cellOffset;\n tr.setNodeMarkup(cellPos, cellNode.type, {\n ...cellNode.attrs,\n align,\n });\n }\n });\n });\n dispatch(tr);\n }\n\n return true;\n });\n this.align = align;\n }\n\n public isActive(state: EditorState): boolean {\n if (!isInTable(state)) {\n return false;\n }\n const { table, top, left } = selectedRect(state);\n const cell = table.child(top).child(left);\n return cell.attrs.align === this.align;\n }\n}\n\n// from: https://github.com/ProseMirror/prosemirror-tables/blob/master/src/commands.js\n\ninterface SelectedRect extends Rect {\n tableStart: number;\n map: TableMap;\n table: ProsemirrorNode;\n}\n\nfunction selectedRect(state: EditorState): SelectedRect {\n const sel = state.selection;\n const $pos = selectionCell(state)!;\n const table = $pos.node(-1);\n const tableStart = $pos.start(-1);\n const map = TableMap.get(table);\n let rect: Rect;\n if (sel instanceof CellSelection) {\n rect = map.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart);\n } else {\n rect = map.findCell($pos.pos - tableStart);\n }\n return {\n ...rect,\n tableStart,\n map,\n table,\n };\n}\n","/*\n * table-nodes.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { tableNodes } from 'prosemirror-tables';\nimport { Node as ProsemirrorNode, DOMOutputSpec } from 'prosemirror-model';\n\nimport { PandocTokenType } from '../../api/pandoc';\n\nimport {\n readPandocTable,\n writePandocTableContainer,\n writePandocTable,\n writePandocTableCaption,\n writePandocTableNodes,\n writePandocTableHeaderNodes,\n} from './table-pandoc';\nimport { tableColumnWidths } from './table-columns';\nimport { tableBlockCapsuleFilter } from './table-capsule';\n\nexport const kDefaultCellClasses = 'pm-table-cell pm-block-border-color';\n\nconst nodes = tableNodes({\n tableGroup: 'block',\n cellContent: 'block+',\n cellAttributes: {\n align: {\n default: null,\n getFromDOM(dom: Element) {\n return (dom as HTMLElement).style.textAlign || null;\n },\n setDOMAttr(value, attrs) {\n if (value) {\n attrs.style = (attrs.style || '') + `text-align: ${value};`;\n }\n },\n },\n className: {\n default: kDefaultCellClasses,\n getFromDOM(dom: Element) {\n return (dom as HTMLElement).className;\n },\n setDOMAttr(value, attrs) {\n attrs.class = kDefaultCellClasses;\n },\n },\n },\n});\n\nexport const tableContainerNode = {\n name: 'table_container',\n spec: {\n content: 'table table_caption',\n group: 'block',\n parseDOM: [{ tag: \"div[class*='table-container']\" }],\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\n return ['div', { class: 'table-container pm-table-container' }, 0];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Table,\n handler: readPandocTable,\n },\n ],\n writer: writePandocTableContainer,\n blockCapsuleFilter: tableBlockCapsuleFilter(),\n },\n};\n\nexport const tableNode = {\n name: 'table',\n spec: {\n ...nodes.table,\n attrs: {\n ...nodes.table.attrs,\n width: { default: null },\n colpercents: { default: null },\n },\n parseDOM: [\n {\n tag: 'table',\n getAttrs: (dom: Node | string) => {\n const el = dom as HTMLElement;\n\n // shared colpercents\n let colpercents: number[] | null = null;\n\n // if we have a colgroup w/ widths then read percents from there\n // \n const colgroup = el.getElementsByTagName('colgroup');\n if (colgroup.length) {\n const cols = colgroup[0].childElementCount;\n colpercents = new Array(cols).fill(0);\n for (let i = 0; i < cols; i++) {\n const col = colgroup[0].children.item(i) as HTMLElement;\n if (col.style.width) {\n colpercents[i] = (parseInt(col.style.width, 10) || 0) / 100;\n }\n }\n if (colpercents.every(value => !!value)) {\n return {\n colpercents,\n };\n }\n }\n\n // otherwise read from data-colwidth\n let width: number | null = null;\n const rows = el.getElementsByTagName('tr');\n if (rows.length) {\n const firstRow = rows.item(0)!;\n const numCells = firstRow.cells.length;\n const colWidths = new Array(numCells).fill(0);\n for (let i = 0; i < numCells; i++) {\n const cell = firstRow.cells.item(i)!;\n const colWidth = cell.getAttribute('data-colwidth');\n if (colWidth) {\n colWidths[i] = Number(colWidth);\n }\n }\n if (colWidths.every(colWidth => colWidth > 0)) {\n width = colWidths.reduce((total, value) => total + value, 0);\n colpercents = colWidths.map(colWidth => colWidth / width!);\n }\n }\n\n return {\n width,\n colpercents,\n };\n },\n },\n ],\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\n const attrs: any = {};\n if (node.attrs.width) {\n attrs['data-width'] = node.attrs.width.toString();\n }\n attrs['data-colpercents'] = tableColumnWidths(node).join(',');\n return ['table', attrs, ['tbody', 0]];\n },\n },\n pandoc: {\n writer: writePandocTable,\n },\n};\n\nexport const tableCaptionNode = {\n name: 'table_caption',\n spec: {\n attrs: {\n inactive: { default: false },\n },\n content: 'inline*',\n parseDOM: [\n {\n tag: \"p[class*='table-caption']\",\n getAttrs(dom: Node | string) {\n return {\n inactive: (dom as HTMLElement).classList.contains('table-caption-inactive'),\n };\n },\n },\n ],\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\n const classes = ['table-caption', 'pm-node-caption'];\n if (node.attrs.inactive) {\n classes.push('table-caption-inactive');\n }\n return ['p', { class: classes.join(' ') }, 0];\n },\n },\n pandoc: {\n writer: writePandocTableCaption,\n },\n};\n\nexport const tableRowNode = {\n name: 'table_row',\n spec: nodes.table_row,\n pandoc: {\n writer: writePandocTableNodes,\n },\n};\n\nexport const tableCellNode = (blocks: boolean) => ({\n name: 'table_cell',\n spec: {\n ...nodes.table_cell,\n content: blocks ? 'block+' : 'paragraph',\n },\n pandoc: {\n writer: writePandocTableNodes,\n },\n});\n\nexport const tableHeaderNode = {\n name: 'table_header',\n spec: nodes.table_header,\n pandoc: {\n writer: writePandocTableHeaderNodes,\n },\n};\n","/*\n * table-pandoc.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, NodeType, Node as ProsemirrorNode, Fragment } from 'prosemirror-model';\n\nimport { ProsemirrorWriter, PandocToken, PandocTokenType, PandocOutput } from '../../api/pandoc';\n\nimport { CssAlignment } from './table-commands';\nimport { tableColumnAlignments, tableColumnWidths } from './table-columns';\n\n// attributes\nconst kTableAttr = 0;\n\n// caption\nconst kTableCaption = 1;\nconst kTableCaptionShort = 0; // [Inline]\nconst kTableCaptionFull = 1; // [Block]\n\n// columdefs\nconst kTableColSpec = 2;\nconst kTableColSpecAlign = 0;\nconst kTableColSpecWidth = 1;\n\n// table head\nconst kTableHead = 3;\nconst kTableHeadAttr = 0;\nconst kTableHeadRows = 1; // [Row]\n\n// table body\nconst kTableBody = 4;\nconst kTableBodyAttr = 0;\nconst kTableBodyRowHeadNumColumns = 1;\nconst kTableBodyRowHead = 2;\nconst kTableBodyRows = 3; // [Row]\n\n// table foot\nconst kTableFoot = 5;\nconst kTableFootAttr = 0;\nconst kTableFootRows = 1; // [Row]\n\n// table row\nconst kTableRowAttr = 0;\nconst kTableRowCells = 1; // [Cell]\n\n// table cell\nconst kTableCellAttr = 0;\nconst kTableCellAlignments = 1;\nconst kTableCellRowSpan = 2;\nconst kTableCellColSpan = 3;\nconst KTableCellContents = 4; // [Block]\n\n\nexport function readPandocTable(schema: Schema) {\n return (writer: ProsemirrorWriter, tok: PandocToken) => {\n // get alignments and columns widths\n const alignments = columnCssAlignments(tok);\n const colpercents = columnPercents(tok);\n\n // helper function to parse a table row\n const parseRow = (row: any[], cellType: NodeType) => {\n const cells: any[] = row[kTableRowCells];\n if (cells.length) {\n writer.openNode(schema.nodes.table_row, {});\n cells.forEach((cell: any[], i) => {\n writer.openNode(cellType, { align: alignments[i] });\n writer.writeTokens(cell[KTableCellContents]);\n writer.closeNode();\n });\n writer.closeNode();\n }\n };\n\n // open table container node\n writer.openNode(schema.nodes.table_container, {});\n\n // open table node\n writer.openNode(schema.nodes.table, { colpercents });\n\n // parse column headers\n const head = tok.c[kTableHead] as any[];\n const firstRow = head[kTableHeadRows][0];\n if (firstRow && firstRow[kTableRowCells].some((cell: any[]) => cell[KTableCellContents].length > 0)) {\n parseRow(firstRow, schema.nodes.table_header);\n }\n\n // parse table rows\n const body = tok.c[kTableBody][0] as any[];\n body[kTableBodyRows].forEach((row: any[]) => {\n parseRow(row, schema.nodes.table_cell);\n });\n\n // close table node\n writer.closeNode();\n\n // read caption\n const caption = tok.c[kTableCaption][kTableCaptionFull];\n const captionBlock: PandocToken[] = caption.length ? caption[0].c : [];\n writer.openNode(schema.nodes.table_caption, { inactive: captionBlock.length === 0 });\n writer.writeTokens(captionBlock);\n writer.closeNode();\n\n // close table container node\n writer.closeNode();\n };\n}\n\nexport function writePandocTableContainer(output: PandocOutput, node: ProsemirrorNode) {\n const caption = node.lastChild!;\n const table = node.firstChild!;\n\n output.writeToken(PandocTokenType.Table, () => {\n\n // write empty attributes\n output.writeAttr();\n\n // write caption\n output.writeNode(caption);\n\n // write table\n output.writeNode(table);\n });\n}\n\nexport function writePandocTable(output: PandocOutput, node: ProsemirrorNode) {\n const firstRow = node.firstChild!;\n\n // get alignments and column widths\n const alignments = tableColumnAlignments(node);\n const widths = tableColumnWidths(node);\n\n // write colspcs\n // TODO: Columns are coming out ColWidthDefault\n output.writeArray(() => {\n alignments.forEach((align, i) => {\n output.writeArray(() => {\n output.writeToken(align);\n if (widths[i] === 0) {\n output.writeToken(PandocTokenType.ColWidthDefault);\n } else {\n output.writeToken(PandocTokenType.ColWidth, widths[i]);\n }\n });\n });\n });\n\n\n // write header row if necessary\n const headerCut = firstRow.firstChild!.type === node.type.schema.nodes.table_header ? 1 : 0;\n output.writeArray(() => {\n output.writeAttr();\n output.writeArray(() => {\n writePandocTableRow(output, firstRow, headerCut === 0);\n });\n });\n\n // write table body\n output.writeArray(() => {\n output.writeArray(() => {\n output.writeAttr();\n output.write(0);\n output.writeArray(() => { /* */ });\n // write rows\n output.writeArray(() => {\n for (let i = headerCut; i < node.childCount; i++) {\n writePandocTableRow(output, node.content.child(i));\n }\n });\n });\n });\n\n // write table footer\n output.writeArray(() => {\n output.writeAttr();\n output.writeArray(() => { /* */ });\n });\n\n\n}\n\nexport function writePandocTableCaption(output: PandocOutput, node: ProsemirrorNode) {\n output.writeArray(() => {\n output.write(null);\n output.writeArray(() => {\n if (!node.attrs.inactive && node.childCount > 0) {\n output.writeToken(PandocTokenType.Plain, () => {\n output.writeInlines(node.content);\n });\n }\n });\n });\n}\n\nexport function writePandocTableNodes(output: PandocOutput, node: ProsemirrorNode) {\n output.writeArray(() => {\n output.writeNodes(node);\n });\n}\n\nexport function writePandocTableHeaderNodes(output: PandocOutput, node: ProsemirrorNode) {\n output.writeArray(() => {\n if (node.textContent.length > 0) {\n output.writeNodes(node);\n } else {\n // write a paragraph containing a space (this is an attempt to fix an issue where\n // empty headers don't get correct round-tripping)\n output.writeToken(PandocTokenType.Para, () => {\n output.writeRawMarkdown(' ');\n });\n }\n });\n}\n\nfunction writePandocTableRow(output: PandocOutput, node: ProsemirrorNode, empty = false) {\n output.writeArray(() => {\n output.writeAttr();\n output.writeArray(() => {\n node.forEach((cellNode) => {\n output.writeArray(() => {\n output.writeAttr();\n output.writeToken(PandocTokenType.AlignDefault);\n output.write(1);\n output.write(1);\n if (!empty) {\n output.writeNode(cellNode);\n } else {\n output.writeArray(() => {\n output.writeInlines(Fragment.empty);\n });\n }\n });\n });\n });\n });\n}\n\n\nfunction columnCssAlignments(tableToken: PandocToken) {\n return tableToken.c[kTableColSpec].map((spec: any) => {\n const alignment = spec[kTableColSpecAlign];\n switch (alignment.t) {\n case PandocTokenType.AlignLeft:\n return CssAlignment.Left;\n case PandocTokenType.AlignRight:\n return CssAlignment.Right;\n case PandocTokenType.AlignCenter:\n return CssAlignment.Center;\n case PandocTokenType.AlignDefault:\n default:\n return null;\n }\n });\n}\n\nfunction columnPercents(tableToken: PandocToken): number[] {\n return tableToken.c[kTableColSpec].map((spec: any) => {\n const width = spec[kTableColSpecWidth];\n return width.t === PandocTokenType.ColWidth ? width.c : 0;\n });\n}\n","/*\n * table-columns.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\nimport { Transaction } from 'prosemirror-state';\nimport { findChildrenByType } from 'prosemirror-utils';\n\nimport { PandocTokenType } from '../../api/pandoc';\n\nimport { CssAlignment } from './table-commands';\n\nexport function tableColumnAlignments(node: ProsemirrorNode) {\n // get the first row (schema requires at least 1 row)\n const firstRow = node.firstChild!;\n\n // determine # of columns\n const cols = firstRow.childCount;\n\n // return alignments\n const alignments = new Array(cols);\n for (let i = 0; i < cols; i++) {\n const cell = firstRow.child(i);\n const align: CssAlignment = cell.attrs.align;\n switch (align) {\n case CssAlignment.Left:\n alignments[i] = PandocTokenType.AlignLeft;\n break;\n case CssAlignment.Right:\n alignments[i] = PandocTokenType.AlignRight;\n break;\n case CssAlignment.Center:\n alignments[i] = PandocTokenType.AlignCenter;\n break;\n case null:\n default:\n alignments[i] = PandocTokenType.AlignDefault;\n break;\n }\n }\n return alignments;\n}\n\nexport function tableColumnWidths(node: ProsemirrorNode) {\n // get the first row (schema requires at least 1 row)\n const firstRow = node.firstChild!;\n\n // determine # of columns\n const cols = firstRow.childCount;\n\n // width percentages\n let widths = new Array(cols).fill(0);\n\n // take note of explicitly sized columns\n const totalWidth = node.attrs.width;\n let availableWidth = totalWidth;\n let colsWithWidth = 0;\n for (let i = 0; i < cols; i++) {\n const col = firstRow.child(i);\n if (col.attrs.colwidth && col.attrs.colwidth[0]) {\n widths[i] = col.attrs.colwidth[0];\n colsWithWidth++;\n availableWidth -= widths[i];\n }\n }\n\n // allocate remaining widths if we have at least 1 sized columns (otherwise\n // we leave all of the widths at 0 which results in no sizing)\n if (colsWithWidth > 0) {\n if (availableWidth > 0) {\n const defaultWidth = availableWidth / (cols - colsWithWidth);\n for (let i = 0; i < cols; i++) {\n const col = firstRow.child(i);\n if (!col.attrs.colwidth || !col.attrs.colwidth[0]) {\n widths[i] = defaultWidth;\n }\n }\n }\n\n // convert widths to percentages\n widths = widths.map(width => width / totalWidth);\n }\n\n return widths;\n}\n\nexport function fixupTableWidths(view: EditorView) {\n return (tr: Transaction) => {\n const schema = tr.doc.type.schema;\n\n // don't do fixup if we aren't connected to the DOM\n if (!view.dom || !view.dom.isConnected) {\n return tr;\n }\n\n const tables = findChildrenByType(tr.doc, schema.nodes.table);\n for (const table of tables) {\n // get table width\n const el = view.domAtPos(table.pos).node as HTMLElement;\n const containerWidth = table.node.attrs.width || el.clientWidth;\n if (containerWidth === 0) {\n continue;\n }\n\n // resolve colpercents (read by tokenzier)\n const colpercents = table.node.attrs.colpercents;\n if (colpercents) {\n // for each row\n table.node.forEach((rowNode, rowOffset, r) => {\n // for each cell\n rowNode.forEach((cellNode, cellOffset, c) => {\n const cellPos = table.pos + 1 + rowOffset + 1 + cellOffset;\n const colWidth = [colpercents[c] * containerWidth];\n if (colWidth !== cellNode.attrs.colwidth) {\n tr.setNodeMarkup(cellPos, cellNode.type, {\n ...cellNode.attrs,\n colwidth: colWidth,\n });\n }\n });\n });\n }\n\n if (containerWidth !== table.node.attrs.width || colpercents) {\n tr.setNodeMarkup(table.pos, schema.nodes.table, {\n ...table.node.attrs,\n width: containerWidth,\n colpercents: null,\n });\n }\n }\n return tr;\n };\n}\n","/*\n * table-capsule.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, DOMParser } from 'prosemirror-model';\n\nimport {\n PandocBlockCapsuleFilter,\n PandocBlockCapsule,\n blockCapsuleParagraphTokenHandler,\n encodedBlockCapsuleRegex,\n blockCapsuleTextHandler,\n blockCapsuleSourceWithoutPrefix,\n parsePandocBlockCapsule,\n} from '../../api/pandoc_capsule';\nimport { ProsemirrorWriter, PandocToken, PandocTokenType } from '../../api/pandoc';\nimport { kHTMLFormat } from '../../api/raw';\n\nexport function tableBlockCapsuleFilter(): PandocBlockCapsuleFilter {\n const kTableBlockCapsuleType = '8EF5A772-DD63-4622-84BF-AF1995A1B2B9'.toLowerCase();\n const pagraphTokenCapsuleHandler = blockCapsuleParagraphTokenHandler(kTableBlockCapsuleType);\n const tokenRegex = encodedBlockCapsuleRegex('^', '$');\n\n return {\n type: kTableBlockCapsuleType,\n\n match: /^([\\t >]*)()([ \\t]*)$/gm,\n\n // textually enclose the capsule so that pandoc parses it as the type of block we want it to\n // (in this case we don't do anything because pandoc would have written this table as a\n // semantically standalone block)\n enclose: (capsuleText: string, capsule: PandocBlockCapsule) => {\n return capsuleText;\n },\n\n // look for one of our block capsules within pandoc ast text (e.g. a code or raw block)\n // and if we find it, parse and return the original source code\n handleText: blockCapsuleTextHandler(kTableBlockCapsuleType, encodedBlockCapsuleRegex(undefined, undefined, 'gm')),\n\n // we are looking for a paragraph token consisting entirely of a block capsule of our type.\n // if find that then return the block capsule text\n handleToken: (tok: PandocToken) => {\n // first check for a paragraph\n const capsuleText = pagraphTokenCapsuleHandler(tok);\n if (capsuleText) {\n return capsuleText;\n }\n\n // now look for a definition list (which is what a table with a caption parses as)\n if (tok.t === PandocTokenType.DefinitionList) {\n if (tok.c.length === 1) {\n const definition = tok.c[0];\n if (definition[0][0].t === PandocTokenType.Str) {\n const term = definition[0][0].c as string;\n const match = term.match(tokenRegex);\n if (match) {\n const capsuleRecord = parsePandocBlockCapsule(term);\n if (capsuleRecord.type === kTableBlockCapsuleType) {\n return term;\n }\n }\n }\n }\n }\n\n return null;\n },\n\n // write the node as a table (parse the html)\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\n // remove the source prefix\n const source = blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\n\n // fallback to write as raw html\n const writeAsRawHTML = () => {\n writer.openNode(schema.nodes.raw_block, { format: kHTMLFormat });\n writer.writeText(source);\n writer.closeNode();\n };\n\n // parse the table from the string\n const parser = new window.DOMParser();\n const doc = parser.parseFromString(capsule.source, 'text/html');\n if (doc.body && doc.body.firstChild instanceof HTMLTableElement) {\n // get prosemirror dom parser\n const prosemirrorDomParser = DOMParser.fromSchema(schema);\n\n // get unparsed (by prosemirror) table\n const unparsedTable = doc.body.firstChild;\n\n // ensure that table cells all have content\n const ensureCellContent = (tag: string) => {\n const cells = unparsedTable.getElementsByTagName(tag);\n for (let i = 0; i < cells.length; i++) {\n const cell = cells.item(i)!;\n if (cell.children.length === 0) {\n cell.append(window.document.createElement('p'));\n }\n }\n };\n ensureCellContent('td');\n ensureCellContent('th');\n\n // extract caption element\n let captionElement: HTMLTableCaptionElement | null = null;\n const captionCollection = unparsedTable.getElementsByTagName('caption');\n if (captionCollection.length) {\n captionElement = captionCollection.item(0);\n if (captionElement) {\n captionElement.remove();\n }\n }\n\n // determine caption (either empty or parsed from element)\n let caption = schema.nodes.table_caption.create({ inactive: true });\n if (captionElement) {\n const captionSlice = prosemirrorDomParser.parseSlice(captionElement);\n caption = schema.nodes.table_caption.createAndFill({ inactive: false }, captionSlice.content)!;\n }\n\n // parse the prosemirror table element\n const slice = prosemirrorDomParser.parseSlice(doc.body);\n if (slice.content.firstChild && slice.content.firstChild.type === schema.nodes.table) {\n const table = slice.content.firstChild;\n writer.addNode(schema.nodes.table_container, {}, [table, caption]);\n } else {\n writeAsRawHTML();\n }\n\n // fallback to writing as raw_html (round-trip unmodified)\n } else {\n writeAsRawHTML();\n }\n },\n };\n}\n","/*\n * table-contextmenu.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Plugin, PluginKey, Transaction, EditorState } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { Schema } from 'prosemirror-model';\nimport { isInTable } from 'prosemirror-tables';\n\nimport { EditorUI } from '../../api/ui';\nimport { EditorCommandId } from '../../api/command';\n\nexport class TableContextMenuPlugin extends Plugin {\n private menuVisible = false;\n\n constructor(_schema: Schema, ui: EditorUI) {\n super({\n key: new PluginKey('table-contextmenu'),\n\n props: {\n handleDOMEvents: {\n contextmenu: (view: EditorView, event: Event) => {\n // only trigger when in table\n if (!isInTable(view.state)) {\n return false;\n }\n\n const asyncShowTableContextMenu = async () => {\n const menu = [\n { command: EditorCommandId.TableAddRowBefore },\n { command: EditorCommandId.TableAddRowAfter },\n { separator: true },\n { command: EditorCommandId.TableAddColumnBefore },\n { command: EditorCommandId.TableAddColumnAfter },\n { separator: true },\n { command: EditorCommandId.TableDeleteRow },\n { command: EditorCommandId.TableDeleteColumn },\n { separator: true },\n { command: EditorCommandId.TableDeleteTable },\n { separator: true },\n {\n text: ui.context.translateText('Align Column'),\n subMenu: {\n items: [\n { command: EditorCommandId.TableAlignColumnLeft },\n { command: EditorCommandId.TableAlignColumnCenter },\n { command: EditorCommandId.TableAlignColumnRight },\n { separator: true },\n { command: EditorCommandId.TableAlignColumnDefault },\n ],\n },\n },\n { separator: true },\n { command: EditorCommandId.TableToggleHeader },\n { command: EditorCommandId.TableToggleCaption },\n ];\n\n const { clientX, clientY } = event as MouseEvent;\n await ui.display.showContextMenu!(menu, clientX, clientY);\n this.menuVisible = false;\n };\n\n if (ui.display.showContextMenu) {\n this.menuVisible = true;\n asyncShowTableContextMenu();\n event.stopPropagation();\n event.preventDefault();\n return true;\n } else {\n return false;\n }\n },\n },\n },\n\n // prevent selection while the context menu is visible (the right-click\n // that invokes the context menu ends up resetting the selection, which\n // makes the selection-based commands behave incorrectly when multiple\n // rows or columns are selected)\n filterTransaction: (tr: Transaction, state: EditorState) => {\n if (this.menuVisible && isInTable(state)) {\n return !(tr.selectionSet && !tr.docChanged && !tr.storedMarksSet);\n } else {\n return true;\n }\n },\n });\n }\n}\n","/*\n * table-paste.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Plugin, PluginKey, Transaction, EditorState } from 'prosemirror-state';\nimport { Slice, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\n\nimport { sliceHasNode } from '../../api/slice';\n\nimport { fixupTableWidths } from './table-columns';\nimport { forChangedNodes } from '../../api/transaction';\n\nimport { kDefaultCellClasses } from './table-nodes';\n\nexport function tablePaste() {\n return new Plugin({\n key: new PluginKey('table-paste'),\n props: {\n handlePaste: (view: EditorView, _event: Event, slice: Slice) => {\n // if the slice contains a table then we handle it\n if (sliceHasNode(slice, node => node.type === node.type.schema.nodes.table)) {\n // based on https://github.com/ProseMirror/prosemirror-view/blob/fb799aae4e9dd5cfc256708a6845d76aaaf145bf/src/input.js#L503-L510\n const tr = view.state.tr.replaceSelection(slice);\n view.dispatch(\n tr\n .scrollIntoView()\n .setMeta('paste', true)\n .setMeta('tablePaste', true)\n .setMeta('uiEvent', 'paste'),\n );\n view.dispatch(fixupTableWidths(view)(view.state.tr));\n return true;\n } else {\n return false;\n }\n },\n },\n appendTransaction: (transactions: Transaction[], oldState: EditorState, newState: EditorState) => {\n // alias schema\n const schema = newState.schema;\n\n // only process table paste transactions\n if (!transactions.some(transaction => transaction.getMeta('tablePaste'))) {\n return null;\n }\n\n // cleanup table by converting the first row to header cells, ensuring that column alignments\n // are derived from the alignment of the first row, and applying the standard cell class names\n const tr = newState.tr;\n forChangedNodes(\n oldState,\n newState,\n node => node.type === node.type.schema.nodes.table,\n (node, pos) => {\n let firstRow: ProsemirrorNode;\n let currentColumn = 0;\n const columnAlignments: string[] = [];\n\n node.descendants((childNode, childPos, parent) => {\n // if this is a row then reset the current column to 0\n if (childNode.type === schema.nodes.table_row) {\n currentColumn = 0;\n }\n\n // first thing we will encounter in traveral is the first row, note that and move along to cells\n if (!firstRow) {\n // note first row\n firstRow = childNode;\n\n // children of the first row are the headers\n } else if (parent === firstRow) {\n // collect alignment (will be applied below to cells in this column)\n columnAlignments.push(childNode.attrs.align);\n\n // convert to a table header w/ default class\n const headerPos = pos + 1 + childPos;\n tr.setNodeMarkup(headerPos, schema.nodes.table_header, {\n ...childNode.attrs,\n className: kDefaultCellClasses,\n });\n\n // normal cell - apply the requisite alignment and give it the default class\n } else if (childNode.type === schema.nodes.table_cell) {\n // determine alignment\n const align = columnAlignments[currentColumn] || null;\n\n // apply markup\n const cellPos = pos + 1 + childPos;\n tr.setNodeMarkup(cellPos, schema.nodes.table_cell, {\n ...childNode.attrs,\n align,\n className: kDefaultCellClasses,\n });\n }\n\n // if this is a cell then advance the current column\n if (childNode.type === schema.nodes.table_header || childNode.type === schema.nodes.table_cell) {\n currentColumn++;\n }\n });\n },\n );\n\n if (tr.docChanged) {\n return tr;\n }\n },\n });\n}\n","/*\n * definition_list.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, DOMOutputSpec } from 'prosemirror-model';\n\nimport { PandocTokenType } from '../../api/pandoc';\nimport { ExtensionContext } from '../../api/extension';\nimport { BaseKey } from '../../api/basekeys';\n\nimport { InsertDefinitionList, InsertDefinitionDescription, InsertDefinitionTerm } from './definition_list-commands';\n\nimport {\n definitionListEnter,\n definitionListBackspace,\n definitionListTab,\n definitionListShiftTab,\n} from './definition-list-keys';\n\nimport { definitionInputRule } from './definition_list-inputrule';\n\nimport { insertDefinitionListAppendTransaction } from './definition_list-insert';\nimport {\n readPandocDefinitionList,\n writePandocDefinitionList,\n writePandocDefinitionListTerm,\n writePandocDefinitionListDescription,\n} from './definition_list-pandoc';\n\nimport './definition_list-styles.css';\nimport { emptyNodePlaceholderPlugin } from '../../api/placeholder';\n\nconst extension = (context: ExtensionContext) => {\n const { pandocExtensions, ui } = context;\n\n if (!pandocExtensions.definition_lists) {\n return null;\n }\n\n return {\n nodes: [\n {\n name: 'definition_list_term',\n spec: {\n content: 'inline*',\n isolating: true,\n parseDOM: [{ tag: 'dt' }],\n toDOM(): DOMOutputSpec {\n return ['dt', { class: 'pm-definition-term' }, 0];\n },\n },\n pandoc: {\n writer: writePandocDefinitionListTerm,\n },\n },\n {\n name: 'definition_list_description',\n spec: {\n content: 'block+',\n parseDOM: [{ tag: 'dd' }],\n toDOM(): DOMOutputSpec {\n return ['dd', { class: 'pm-definition-description pm-block-border-color pm-margin-bordered' }, 0];\n },\n },\n pandoc: {\n writer: writePandocDefinitionListDescription,\n },\n },\n {\n name: 'definition_list',\n spec: {\n content: '(definition_list_term definition_list_description*)+',\n group: 'block',\n defining: true,\n parseDOM: [{ tag: 'dl' }],\n toDOM(): DOMOutputSpec {\n return ['dl', { class: 'pm-definition-list' }, 0];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.DefinitionList,\n handler: readPandocDefinitionList,\n },\n ],\n\n writer: writePandocDefinitionList,\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [\n new InsertDefinitionList(ui),\n new InsertDefinitionTerm(schema, ui),\n new InsertDefinitionDescription(schema),\n ];\n },\n\n baseKeys: (_schema: Schema) => {\n return [\n { key: BaseKey.Enter, command: definitionListEnter() },\n { key: BaseKey.Backspace, command: definitionListBackspace() },\n { key: BaseKey.Tab, command: definitionListTab() },\n { key: BaseKey.ShiftTab, command: definitionListShiftTab() },\n ];\n },\n\n inputRules: (_schema: Schema) => {\n return [definitionInputRule()];\n },\n\n appendTransaction: (_schema: Schema) => {\n return [insertDefinitionListAppendTransaction()];\n },\n\n plugins: (schema: Schema) => {\n return [emptyNodePlaceholderPlugin(schema.nodes.definition_list_term, () => ui.context.translateText('Term'))];\n },\n };\n};\n\nexport default extension;\n","/*\n * definition_list-commands.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { Schema, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { findParentNodeOfType, setTextSelection } from 'prosemirror-utils';\n\nimport { canInsertNode } from '../../api/node';\nimport { insertDefinitionList } from './definition_list-insert';\nimport { EditorUI } from '../../api/ui';\nimport { OmniInsertGroup } from '../../api/omni_insert';\n\nexport class InsertDefinitionList extends ProsemirrorCommand {\n constructor(ui: EditorUI) {\n super(\n EditorCommandId.DefinitionList,\n [],\n (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const schema = state.schema;\n\n if (\n findParentNodeOfType(schema.nodes.definition_list)(state.selection) ||\n !canInsertNode(state, schema.nodes.definition_list)\n ) {\n return false;\n }\n\n // new definition list\n if (dispatch) {\n const tr = state.tr;\n\n // create new list\n const termText = insertTermText(ui);\n const term = schema.text(termText);\n insertDefinitionList(tr, [\n schema.nodes.definition_list_term.createAndFill({}, term),\n createDefinitionDescription(schema),\n ]);\n const start = state.selection.from;\n tr.setSelection(TextSelection.create(tr.doc, start, start + termText.length + 1)).scrollIntoView();\n dispatch(tr);\n }\n return true;\n },\n // omni insert\n {\n name: ui.context.translateText('Definition List'),\n description: ui.context.translateText('List with a definition for each item'),\n group: OmniInsertGroup.Lists,\n priority: 3,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.definition_list_dark! : ui.images.omni_insert?.definition_list!,\n },\n );\n }\n}\n\nclass InsertDefinitionListItemCommand extends ProsemirrorCommand {\n constructor(id: EditorCommandId, createFn: () => ProsemirrorNode) {\n super(id, [], (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const schema = state.schema;\n\n if (!findParentNodeOfType(schema.nodes.definition_list)(state.selection)) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n const dlTypes = [schema.nodes.definition_list_term, schema.nodes.definition_list_description];\n const parent = findParentNodeOfType(dlTypes)(state.selection)!;\n const insertPos = parent.pos + parent.node.nodeSize;\n const insertNode = createFn();\n tr.insert(insertPos, insertNode);\n if (insertNode.textContent.length > 1) {\n tr.setSelection(TextSelection.create(tr.doc, insertPos, insertPos + insertNode.textContent.length + 1));\n } else {\n setTextSelection(insertPos, 1)(tr);\n }\n tr.scrollIntoView();\n\n dispatch(tr);\n }\n\n return true;\n });\n }\n}\n\nexport class InsertDefinitionTerm extends InsertDefinitionListItemCommand {\n constructor(schema: Schema, ui: EditorUI) {\n super(EditorCommandId.DefinitionTerm, () => {\n const term = schema.text(insertTermText(ui));\n return schema.nodes.definition_list_term.createAndFill({}, term)!;\n });\n }\n}\n\nexport class InsertDefinitionDescription extends InsertDefinitionListItemCommand {\n constructor(schema: Schema) {\n super(EditorCommandId.DefinitionDescription, () => {\n return createDefinitionDescription(schema);\n });\n }\n}\n\nfunction insertTermText(ui: EditorUI) {\n return ui.context.translateText('term');\n}\n\nfunction createDefinitionDescription(schema: Schema) {\n return schema.nodes.definition_list_description.createAndFill({}, schema.nodes.paragraph.create())!;\n}\n","/*\n * definition_list-insert.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { Transaction } from 'prosemirror-state';\nimport { setTextSelection } from 'prosemirror-utils';\nimport { findChildrenByType } from 'prosemirror-utils';\nimport { trTransform } from '../../api/transaction';\nimport { Transform } from 'prosemirror-transform';\n\nexport function insertDefinitionList(tr: Transaction, items: ProsemirrorNode[]) {\n const schema = items[0].type.schema;\n const definitionList = schema.nodes.definition_list.createAndFill({}, items)!;\n const prevCursor = tr.selection.to;\n tr.replaceSelectionWith(definitionList);\n setTextSelection(tr.mapping.map(prevCursor) - 1, -1)(tr).scrollIntoView();\n return tr;\n}\n\nexport function insertDefinitionListAppendTransaction() {\n return {\n name: 'definition-list-join',\n nodeFilter: (node: ProsemirrorNode) => node.type === node.type.schema.nodes.definition_list,\n append: (tr: Transaction) => {\n // if a transaction creates 2 adjacent definition lists then join them\n trTransform(tr, joinDefinitionListsTransform);\n },\n };\n}\n\nfunction joinDefinitionListsTransform(tr: Transform) {\n const nodeType = tr.doc.type.schema.nodes.definition_list;\n const lists = findChildrenByType(tr.doc, nodeType, true);\n for (const list of lists) {\n // NOTE: no mapping (checking for deletion + getting the updated\n // position) is required here because we only ever do one transform\n // (see return after tr.join below)\n const listPos = tr.doc.resolve(list.pos + 1);\n const listIndex = listPos.index(listPos.depth - 1);\n const listParent = listPos.node(listPos.depth - 1);\n if (listIndex + 1 < listParent.childCount) {\n const nextNode = listParent.child(listIndex + 1);\n if (nextNode.type === nodeType) {\n tr.join(list.pos + list.node.nodeSize);\n return;\n }\n }\n }\n}\n","/*\n * definition_list-keys.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport {\n findParentNodeOfType,\n findParentNodeOfTypeClosestToPos,\n setTextSelection,\n hasParentNodeOfType,\n ContentNodeWithPos,\n} from 'prosemirror-utils';\n\nimport { isLastChild, isOnlyChild } from '../../api/position';\n\nexport function definitionListEnter() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // process if we are within a definition list\n const schema = state.schema;\n const parentDL = findParentNodeOfType(schema.nodes.definition_list)(state.selection);\n if (!parentDL) {\n return false;\n }\n\n // handle only empty selections\n if (!state.selection.empty) {\n return false;\n }\n\n // handle enter in either a term or definition\n const parentTerm = findParentNodeOfType(schema.nodes.definition_list_term)(state.selection);\n if (parentTerm) {\n return termEnter(parentTerm, state, dispatch);\n\n // enter in trailing empty description paragraph (append a term)\n } else if (isTrailingEmptyParagraph(state)) {\n if (dispatch) {\n endOfDescriptionEnter(state, dispatch);\n }\n return true;\n } else {\n return false;\n }\n };\n}\n\nexport function definitionListBackspace() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // process if we are within a definition item\n const schema = state.schema;\n const dlTypes = [schema.nodes.definition_list_term, schema.nodes.definition_list_description];\n const parentTerm = findParentNodeOfType(dlTypes)(state.selection);\n if (!parentTerm) {\n return false;\n }\n\n if (parentTerm.node.type === schema.nodes.definition_list_term) {\n // if it's empty\n if (parentTerm.node.childCount === 0) {\n if (dispatch) {\n emptyTermBackspace(state, dispatch);\n }\n return true;\n }\n } else {\n // if the enclosing description is empty then delete it\n if (parentTerm.node.textContent.length === 0) {\n if (dispatch) {\n emptyDescriptionBackspace(parentTerm, state, dispatch);\n }\n\n return true;\n }\n }\n\n return false;\n };\n}\n\nexport function definitionListTab() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // process if we are within a definition_term\n const schema = state.schema;\n const dlTypes = [schema.nodes.definition_list_term, schema.nodes.definition_list_description];\n const parentTerm = findParentNodeOfType(dlTypes)(state.selection);\n if (!parentTerm) {\n return false;\n }\n\n // advance past node\n if (dispatch) {\n const tr = state.tr;\n const advancePos = parentTerm.pos + parentTerm.node.nodeSize;\n setTextSelection(advancePos, 1)(tr).scrollIntoView();\n dispatch(tr);\n }\n\n return true;\n };\n}\n\nexport function definitionListShiftTab() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // process if we are within a definition_term\n const schema = state.schema;\n const dlTypes = [schema.nodes.definition_list_term, schema.nodes.definition_list_description];\n const parentTerm = findParentNodeOfType(dlTypes)(state.selection);\n if (!parentTerm) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n const backwardPos = state.doc.resolve(parentTerm.pos - 1);\n const prevNode = findParentNodeOfTypeClosestToPos(backwardPos, dlTypes);\n if (prevNode) {\n setTextSelection(prevNode.start, 1)(tr).scrollIntoView();\n } else {\n const listNode = findParentNodeOfType(schema.nodes.definition_list)(tr.selection)!;\n setTextSelection(listNode.pos, -1)(tr).scrollIntoView();\n }\n\n dispatch(tr);\n }\n\n return true;\n };\n}\n\nfunction termEnter(term: ContentNodeWithPos, state: EditorState, dispatch?: (tr: Transaction) => void) {\n const schema = state.schema;\n const $head = state.selection.$head;\n\n // only handle empty selections\n if (!state.selection.empty) {\n return false;\n }\n\n // if we are empty then it's an exit (delete the term)\n const isEmpty = term.node.textContent.length === 0;\n if (isEmpty) {\n if (dispatch) {\n const tr = state.tr;\n tr.deleteRange(term.pos, term.pos + term.node.nodeSize);\n tr.replaceSelectionWith(schema.nodes.paragraph.create());\n setTextSelection(tr.mapping.map(state.selection.from), 1)(tr);\n dispatch(tr);\n }\n return true;\n\n // variable handling for non-empty\n } else {\n // selection at the beginning means insert another term above\n if ($head.parentOffset === 0) {\n if (dispatch) {\n const tr = state.tr;\n const insertPos = tr.selection.$head.before($head.depth);\n tr.insert(insertPos, schema.nodes.definition_list_term.create());\n dispatch(tr);\n }\n return true;\n\n // selection at the end means insert a description below\n } else if ($head.parentOffset === term.node.textContent.length) {\n if (dispatch) {\n const tr = state.tr;\n const insertPos = tr.selection.$head.after($head.depth);\n tr.insert(\n insertPos,\n schema.nodes.definition_list_description.createAndFill({}, schema.nodes.paragraph.create())!,\n );\n setTextSelection(insertPos, 1)(tr).scrollIntoView();\n dispatch(tr);\n }\n return true;\n }\n }\n\n return false;\n}\n\nfunction emptyTermBackspace(state: EditorState, dispatch: (tr: Transaction) => void) {\n const { $head } = state.selection;\n const tr = state.tr;\n // if it's the only child then delete the entire list\n if (isOnlyChild($head)) {\n const start = $head.start($head.depth - 1) - 1;\n tr.deleteRange(start, start + $head.node($head.depth - 1).nodeSize);\n } else {\n const start = $head.start($head.depth) - 1;\n tr.deleteRange(start, start + $head.node($head.depth).nodeSize);\n }\n dispatch(tr);\n}\n\nfunction endOfDescriptionEnter(state: EditorState, dispatch: (tr: Transaction) => void) {\n const schema = state.schema;\n const { $head } = state.selection;\n const selectionNode = $head.node($head.depth);\n\n const tr = state.tr;\n\n // if the parent description is empty then delete it\n let start = null;\n const descriptionNode = $head.node($head.depth - 1);\n if (descriptionNode.textContent.trim().length === 0) {\n start = $head.start($head.depth - 1) - 1;\n tr.deleteRange(start, start + descriptionNode.nodeSize);\n\n // only if at very end\n if (isLastChild($head, 2)) {\n const insertPos = tr.mapping.map($head.after($head.depth - 2));\n tr.insert(insertPos, schema.nodes.paragraph.create());\n setTextSelection(insertPos, 1)(tr).scrollIntoView();\n }\n\n // otherwise just delete the paragraph and insert a term\n } else {\n start = $head.start($head.depth) - 1;\n tr.deleteRange(start, start + selectionNode.nodeSize);\n start = tr.mapping.map(start);\n tr.insert(start + 1, schema.nodes.definition_list_term.create());\n setTextSelection(start, 1)(tr).scrollIntoView();\n }\n\n dispatch(tr);\n}\n\nfunction emptyDescriptionBackspace(\n description: ContentNodeWithPos,\n state: EditorState,\n dispatch: (tr: Transaction) => void,\n) {\n const tr = state.tr;\n tr.deleteRange(description.pos, description.pos + description.node.nodeSize);\n dispatch(tr);\n}\n\nfunction isTrailingEmptyParagraph(state: EditorState) {\n const { $head } = state.selection;\n const selectionNode = $head.node($head.depth);\n const isParagraph = selectionNode.type === state.schema.nodes.paragraph;\n const isEmpty = selectionNode.textContent.trim().length === 0;\n return isParagraph && isEmpty && isLastChild($head);\n}\n\n// eslint-disable-next-line\nfunction selectionCrossesListBoundary(state: EditorState) {\n const { $head, $anchor } = state.selection;\n const headInDL = hasParentNodeOfType(state.schema.nodes.definition_list)(TextSelection.near($head));\n const anchorInDL = hasParentNodeOfType(state.schema.nodes.definition_list)(TextSelection.near($anchor));\n return headInDL !== anchorInDL;\n}\n","/*\n * definition_list-inputrule.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { InputRule } from 'prosemirror-inputrules';\nimport { EditorState } from 'prosemirror-state';\nimport { setTextSelection, findParentNodeOfTypeClosestToPos } from 'prosemirror-utils';\n\nimport { insertDefinitionList } from './definition_list-insert';\n\nexport function definitionInputRule() {\n return new InputRule(/^:[ ]+$/, (state: EditorState, match: string[], start: number, end: number) => {\n const schema = state.schema;\n\n // if we are inside a definiition list description this means start a new description\n const { $head } = state.selection;\n const container = $head.node($head.depth - 1);\n const parent = $head.node($head.depth);\n\n // must be just ': '\n if (parent.textContent.trim() !== ':') {\n return null;\n }\n\n // check for : within a definition list description\n if (container.type === schema.nodes.definition_list_description && parent.type === schema.nodes.paragraph) {\n const tr = state.tr;\n const startPos = $head.start($head.depth) - 1;\n tr.deleteRange(startPos, startPos + $head.node($head.depth).nodeSize);\n const insertPos = tr.mapping.map(startPos) + 1;\n tr.insert(\n insertPos,\n schema.nodes.definition_list_description.createAndFill({}, schema.nodes.paragraph.create())!,\n );\n setTextSelection(insertPos, 1)(tr).scrollIntoView();\n return tr;\n\n // check for : in a paragraph immediately after another paragraph\n } else if (container.type !== schema.nodes.definition_list_description && isParagraphAfterParagraph(state)) {\n const prevPara = findParentNodeOfTypeClosestToPos(state.doc.resolve(start - 2), schema.nodes.paragraph);\n if (prevPara) {\n const tr = state.tr;\n tr.deleteRange(prevPara.start, end);\n insertDefinitionList(tr, [\n schema.nodes.definition_list_term.createAndFill({}, prevPara.node.content)!,\n schema.nodes.definition_list_description.createAndFill({}, schema.nodes.paragraph.create())!,\n ]);\n return tr;\n } else {\n return null;\n }\n } else {\n return null;\n }\n });\n}\n\nfunction isParagraphAfterParagraph(state: EditorState) {\n const schema = state.schema;\n const { $head } = state.selection;\n\n // check if the selection is in a paragraph\n const selectionInParagraph = $head.node($head.depth).type === schema.nodes.paragraph;\n if (!selectionInParagraph) {\n return false;\n }\n\n // check if the previous node is a paragraph\n const parent = $head.node($head.depth - 1);\n const parentIndex = $head.index($head.depth - 1);\n return parentIndex > 0 && parent.child(parentIndex - 1).type === schema.nodes.paragraph;\n}\n","/*\n * position.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { ResolvedPos } from 'prosemirror-model';\n\nexport function isOnlyChild(pos: ResolvedPos, depthOffset = 1) {\n return pos.node(pos.depth - depthOffset).childCount === 1;\n}\n\nexport function isLastChild(pos: ResolvedPos, depthOffset = 1) {\n return pos.index(pos.depth - depthOffset) === pos.node(pos.depth - depthOffset).childCount - 1;\n}\n","/*\n * definition_list-pandoc.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport { ProsemirrorWriter, PandocToken, PandocOutput, PandocTokenType } from '../../api/pandoc';\n\nexport function readPandocDefinitionList(schema: Schema) {\n return (writer: ProsemirrorWriter, tok: PandocToken) => {\n writer.openNode(schema.nodes.definition_list, {});\n\n const definitions = tok.c;\n definitions.forEach((definition: [PandocToken[], PandocToken[][]]) => {\n const term = definition[0];\n writer.openNode(schema.nodes.definition_list_term, {});\n writer.writeTokens(term);\n writer.closeNode();\n\n const descriptions = definition[1];\n descriptions.forEach(description => {\n writer.openNode(schema.nodes.definition_list_description, {});\n writer.writeTokens(description);\n writer.closeNode();\n });\n });\n writer.closeNode();\n };\n}\n\nexport function writePandocDefinitionList(output: PandocOutput, node: ProsemirrorNode) {\n output.writeToken(PandocTokenType.DefinitionList, () => {\n // collect terms and descriptions\n const currentDefinition: {\n term?: ProsemirrorNode;\n descriptions: ProsemirrorNode[];\n } = { descriptions: new Array() };\n\n // functions to manipulate current definition\n function writeCurrent() {\n if (currentDefinition.term) {\n output.writeArray(() => {\n output.writeNode(currentDefinition.term!);\n output.writeArray(() => {\n currentDefinition.descriptions.forEach(description => {\n output.writeNode(description);\n });\n });\n });\n }\n }\n\n // write the list\n node.forEach(child => {\n if (child.type === child.type.schema.nodes.definition_list_term) {\n writeCurrent();\n currentDefinition.term = child;\n currentDefinition.descriptions = [];\n } else {\n currentDefinition.descriptions.push(child);\n }\n });\n writeCurrent();\n });\n}\n\nexport function writePandocDefinitionListTerm(output: PandocOutput, node: ProsemirrorNode) {\n output.writeArray(() => {\n output.writeInlines(node.content);\n });\n}\n\nexport function writePandocDefinitionListDescription(output: PandocOutput, node: ProsemirrorNode) {\n output.writeArray(() => {\n output.writeNodes(node);\n });\n}\n","/*\n * shortcode_block.ts\n *\n * Copyright (C) 2019-20 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\n\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { PandocOutput, PandocTokenType, PandocToken, stringifyTokens, ProsemirrorWriter } from '../api/pandoc';\n\nimport { kHugoDocType } from '../api/format';\n\nimport { Extension, ExtensionContext } from '../api/extension';\nimport { codeNodeSpec } from '../api/code';\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\nimport { canInsertNode } from '../api/node';\nimport { kShortcodeRegEx } from '../api/shortcode';\nimport {\n PandocBlockCapsuleFilter,\n blockCapsuleParagraphTokenHandler,\n encodedBlockCapsuleRegex,\n PandocBlockCapsule,\n blockCapsuleTextHandler,\n blockCapsuleSourceWithoutPrefix,\n} from '../api/pandoc_capsule';\n\nconst extension = (context: ExtensionContext): Extension | null => {\n const { format } = context;\n\n // return null if no shortcodes\n if (!format.hugoExtensions.shortcodes) {\n return null;\n }\n\n return {\n nodes: [\n {\n name: 'shortcode_block',\n\n spec: {\n ...codeNodeSpec(),\n attrs: {},\n parseDOM: [\n {\n tag: \"div[class*='shortcode-block']\",\n preserveWhitespace: 'full',\n },\n ],\n toDOM(node: ProsemirrorNode) {\n return ['div', { class: 'shortcode-block pm-fixedwidth-font pm-code-block pm-markup-text-color' }, 0];\n },\n },\n\n code_view: {\n lang: () => 'text',\n borderColorClass: 'pm-raw-block-border',\n },\n\n attr_edit: () => ({\n type: (schema: Schema) => schema.nodes.shortcode_block,\n tags: () => ['shortcode'],\n editFn: () => () => false,\n }),\n\n pandoc: {\n // unroll shortcode from paragraph with single shortcode\n blockReader: (schema: Schema, tok: PandocToken, writer: ProsemirrorWriter) => {\n if (isParaWrappingShortcode(tok)) {\n const text = stringifyTokens(tok.c);\n writer.addNode(schema.nodes.shortcode_block, {}, [schema.text(text)]);\n return true;\n } else {\n return false;\n }\n },\n\n // capture shortcuts w/ begin/end tags\n blockCapsuleFilter: shortcodeBlockCapsuleFilter(),\n\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.Para, () => {\n output.writeRawMarkdown(node.content);\n });\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n // only create command for hugo doc types\n if (!format.docTypes.includes(kHugoDocType)) {\n return [];\n }\n\n return [\n new ProsemirrorCommand(\n EditorCommandId.Shortcode,\n [],\n (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // enable/disable command\n if (!canInsertNode(state, schema.nodes.shortcode_block)) {\n return false;\n }\n if (dispatch) {\n const tr = state.tr;\n const shortcode = '{{< >}}';\n const shortcodeNode = schema.nodes.shortcode_block.create({}, schema.text(shortcode));\n tr.replaceSelectionWith(shortcodeNode);\n setTextSelection(tr.mapping.map(state.selection.from) - shortcode.length / 2 - 1)(tr);\n dispatch(tr);\n }\n return true;\n },\n ),\n ];\n },\n };\n};\n\nfunction isParaWrappingShortcode(tok: PandocToken) {\n if (tok.t === PandocTokenType.Para) {\n // qualify that this paragraph has text that begins with {{< (so that\n // we don't end up scanning every token of every paragraph )\n const children: PandocToken[] = tok.c;\n if (tok.c.length > 1) {\n const [first, second] = tok.c;\n const firstText = first.t === PandocTokenType.Str ? first.c : second.c;\n if (typeof firstText === 'string' && firstText.startsWith('{{<')) {\n const text = stringifyTokens(children);\n return !!text.match(kShortcodeRegEx);\n }\n }\n }\n return false;\n}\n\nexport function shortcodeBlockCapsuleFilter(): PandocBlockCapsuleFilter {\n const kShortcodeBlockCapsuleType = 'B65B58FD-D707-4C30-8C97-3D99ACF9A157'.toLowerCase();\n\n return {\n type: kShortcodeBlockCapsuleType,\n\n // eslint-disable-next-line no-useless-escape\n match: /^([\\t >]*)(\\{\\{<\\s+([^\\/][^\\t ]+).*?>\\}\\}[ \\t]*\\n(?![ \\t]*\\n)[\\W\\w]*?\\n[\\t >]*\\{\\{<\\s+\\/\\3\\s+>\\}\\})([ \\t]*)$/gm,\n\n extract: (_match: string, p1: string, p2: string, _p3: string, p4: string) => {\n return {\n prefix: p1,\n source: p2,\n suffix: p4,\n };\n },\n\n // textually enclose the capsule so that pandoc parses it as the type of block we want it to\n // (in this case we don't do anything because pandoc would have written this table as a\n // semantically standalone block)\n enclose: (capsuleText: string, capsule: PandocBlockCapsule) => {\n return capsuleText;\n },\n\n // look for one of our block capsules within pandoc ast text (e.g. a code or raw block)\n // and if we find it, parse and return the original source code\n handleText: blockCapsuleTextHandler(\n kShortcodeBlockCapsuleType,\n encodedBlockCapsuleRegex(undefined, undefined, 'gm'),\n ),\n\n // we are looking for a paragraph token consisting entirely of a block capsule of our type.\n // if find that then return the block capsule text\n handleToken: blockCapsuleParagraphTokenHandler(kShortcodeBlockCapsuleType),\n\n // write the node\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\n // remove the source prefix\n const source = blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\n\n // write the node\n writer.addNode(schema.nodes.shortcode_block, {}, [schema.text(source)]);\n },\n };\n}\n\nexport default extension;\n","/*\n * html_preserve.ts\n *\n * Copyright (C) 2019-20 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\n\nimport { PandocOutput, PandocTokenType, ProsemirrorWriter } from '../api/pandoc';\nimport { Extension, ExtensionContext } from '../api/extension';\nimport { codeNodeSpec } from '../api/code';\n\nimport {\n PandocBlockCapsuleFilter,\n blockCapsuleParagraphTokenHandler,\n encodedBlockCapsuleRegex,\n PandocBlockCapsule,\n blockCapsuleTextHandler,\n blockCapsuleSourceWithoutPrefix,\n} from '../api/pandoc_capsule';\n\nconst extension = (context: ExtensionContext): Extension | null => {\n const { format } = context;\n\n return {\n nodes: [\n {\n name: 'html_preserve',\n\n spec: {\n ...codeNodeSpec(),\n attrs: {},\n parseDOM: [\n {\n tag: \"div[class*='pm-html-preserve']\",\n preserveWhitespace: 'full',\n },\n ],\n toDOM(node: ProsemirrorNode) {\n return ['div', { class: 'pm-html-preserve pm-fixedwidth-font pm-code-block pm-markup-text-color' }, 0];\n },\n },\n\n code_view: {\n lang: () => 'html',\n borderColorClass: 'pm-raw-block-border',\n },\n\n attr_edit: () => ({\n type: (schema: Schema) => schema.nodes.html_preserve,\n tags: () => ['html_preserve'],\n editFn: () => () => false,\n }),\n\n pandoc: {\n // capture shortcuts w/ begin/end tags\n blockCapsuleFilter: htmlPreserveBlockCapsuleFilter(),\n\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.Para, () => {\n output.writeRawMarkdown(node.content);\n });\n },\n },\n },\n ],\n };\n};\n\nexport function htmlPreserveBlockCapsuleFilter(): PandocBlockCapsuleFilter {\n const kHtmlPreserveBlockCapsuleType = '83CFCBF3-0429-4822-AAC6-D6F31591AEA8'.toLowerCase();\n\n return {\n type: kHtmlPreserveBlockCapsuleType,\n\n // eslint-disable-next-line no-useless-escape\n match: /^([\\t >]*)([\\W\\w]*?)([ \\t]*)$/gm,\n\n extract: (_match: string, p1: string, p2: string, p3: string) => {\n return {\n prefix: p1,\n source: p2,\n suffix: p3,\n };\n },\n\n // textually enclose the capsule so that pandoc parses it as the type of block we want it to\n // (in this case we don't do anything because pandoc would have written this as a\n // semantically standalone block)\n enclose: (capsuleText: string, capsule: PandocBlockCapsule) => {\n return capsuleText;\n },\n\n // look for one of our block capsules within pandoc ast text (e.g. a code or raw block)\n // and if we find it, parse and return the original source code\n handleText: blockCapsuleTextHandler(\n kHtmlPreserveBlockCapsuleType,\n encodedBlockCapsuleRegex(undefined, undefined, 'gm'),\n ),\n\n // we are looking for a paragraph token consisting entirely of a block capsule of our type.\n // if find that then return the block capsule text\n handleToken: blockCapsuleParagraphTokenHandler(kHtmlPreserveBlockCapsuleType),\n\n // write the node\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\n // remove the source prefix\n const source = blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\n\n // write the node\n writer.addNode(schema.nodes.html_preserve, {}, [schema.text(source)]);\n },\n };\n}\n\nexport default extension;\n","/*\n * ace.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport {\n Plugin,\n PluginKey,\n TextSelection,\n EditorState,\n Transaction,\n Selection,\n NodeSelection,\n} from 'prosemirror-state';\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorView, NodeView, Decoration } from 'prosemirror-view';\nimport { undo, redo } from 'prosemirror-history';\nimport { exitCode } from 'prosemirror-commands';\nimport { keymap } from 'prosemirror-keymap';\nimport { undoInputRule } from 'prosemirror-inputrules';\nimport { GapCursor } from 'prosemirror-gapcursor';\n\nimport { CodeViewOptions, editingRootNode } from '../../api/node';\nimport { insertParagraph } from '../../api/paragraph';\nimport { createImageButton } from '../../api/widgets/widgets';\nimport { EditorUI, ChunkEditor } from '../../api/ui';\nimport { EditorOptions } from '../../api/options';\nimport { EditorEvents } from '../../api/events';\nimport { kPlatformMac } from '../../api/platform';\nimport { rmdChunk, previousExecutableRmdChunks, mergeRmdChunks } from '../../api/rmd';\nimport { ExtensionContext } from '../../api/extension';\nimport { DispatchEvent, ResizeEvent, ScrollEvent } from '../../api/event-types';\nimport { verticalArrowCanAdvanceWithinTextBlock } from '../../api/basekeys';\nimport { handleArrowToAdjacentNode } from '../../api/cursor';\n\nimport { selectAll } from '../../behaviors/select_all';\nimport { findPluginState } from '../../behaviors/find';\n\nimport { AceRenderQueue } from './ace-render-queue';\nimport { AcePlaceholder } from './ace-placeholder';\nimport { AceNodeViews } from './ace-node-views';\n\nimport zenscroll from 'zenscroll';\n\nimport './ace.css';\n\nconst plugin = new PluginKey('ace');\n\nexport function acePlugins(codeViews: { [key: string]: CodeViewOptions }, context: ExtensionContext): Plugin[] {\n // shared services\n const aceRenderQueue = new AceRenderQueue(context.events);\n const aceNodeViews = new AceNodeViews();\n\n // build nodeViews\n const nodeTypes = Object.keys(codeViews);\n const nodeViews: {\n [name: string]: (node: ProsemirrorNode, view: EditorView, getPos: boolean | (() => number)) => NodeView;\n } = {};\n nodeTypes.forEach(name => {\n nodeViews[name] = (node: ProsemirrorNode, view: EditorView, getPos: boolean | (() => number)) => {\n return new AceNodeView(\n node,\n view,\n getPos as () => number,\n context,\n codeViews[name],\n aceRenderQueue,\n aceNodeViews,\n );\n };\n });\n\n return [\n new Plugin({\n key: plugin,\n props: {\n nodeViews,\n handleDOMEvents: {\n click: aceNodeViews.handleClick.bind(aceNodeViews),\n },\n },\n }),\n // arrow in and out of editor\n keymap({\n ArrowLeft: arrowHandler('left', nodeTypes),\n ArrowRight: arrowHandler('right', nodeTypes),\n ArrowUp: arrowHandler('up', nodeTypes),\n ArrowDown: arrowHandler('down', nodeTypes),\n }),\n ];\n}\n\n/**\n * Represents a selection that was applied prior to the editor rendering (needs\n * to be applied when the editor rendering completes)\n */\nclass QueuedSelection {\n constructor(public readonly anchor: number, public readonly head: number) {}\n}\n\nexport class AceNodeView implements NodeView {\n public readonly getPos: () => number;\n public node: ProsemirrorNode;\n public readonly dom: HTMLElement;\n\n private readonly view: EditorView;\n private readonly ui: EditorUI;\n private readonly nodeViews: AceNodeViews;\n private readonly renderQueue: AceRenderQueue;\n private chunk?: ChunkEditor;\n private aceEditor?: AceAjax.Editor;\n private editSession?: AceAjax.IEditSession;\n private readonly editorOptions: EditorOptions;\n private readonly options: CodeViewOptions;\n private readonly events: EditorEvents;\n\n private updating: boolean;\n private escaping: boolean;\n private gapCursorPending: boolean;\n private mouseDown: boolean;\n private mode: string;\n private findMarkers: number[];\n private selectionMarker: number | null;\n private queuedSelection: QueuedSelection | null;\n private resizeTimer: number;\n private renderedWidth: number;\n private scrollRow: number;\n private cursorDirty: boolean;\n\n private readonly subscriptions: VoidFunction[];\n\n constructor(\n node: ProsemirrorNode,\n view: EditorView,\n getPos: () => number,\n context: ExtensionContext,\n options: CodeViewOptions,\n renderQueue: AceRenderQueue,\n nodeViews: AceNodeViews,\n ) {\n // context\n const ui = context.ui;\n const editorOptions = context.options;\n\n // Store for later\n this.node = node;\n this.view = view;\n this.ui = context.ui;\n this.events = context.events;\n this.getPos = getPos;\n\n // Initialize values\n this.mode = '';\n this.escaping = false;\n this.gapCursorPending = false;\n this.findMarkers = [];\n this.selectionMarker = null;\n this.renderQueue = renderQueue;\n this.nodeViews = nodeViews;\n this.queuedSelection = null;\n this.subscriptions = [];\n this.resizeTimer = 0;\n this.renderedWidth = 0;\n this.scrollRow = -1;\n this.cursorDirty = false;\n this.mouseDown = false;\n\n // options\n this.editorOptions = editorOptions;\n this.options = options;\n\n // The editor's outer node is our DOM representation\n this.dom = document.createElement('div');\n this.dom.classList.add('pm-code-editor');\n this.dom.classList.add('pm-ace-editor');\n this.dom.classList.add('pm-ace-editor-inactive');\n this.dom.classList.add(options.borderColorClass || 'pm-block-border-color');\n if (this.options.classes) {\n this.options.classes.forEach(className => this.dom.classList.add(className));\n }\n\n // Create a preview of the text (will be shown until editor is fully initialized)\n const preview = new AcePlaceholder(node.textContent);\n this.dom.appendChild(preview.getElement());\n\n // Style the first line differently if requested\n if (options.firstLineMeta) {\n this.dom.classList.add('pm-ace-first-line-meta');\n }\n\n // update mode\n this.updateMode();\n\n // observe all editor dispatches\n this.subscriptions.push(\n this.events.subscribe(DispatchEvent, (tr: Transaction | undefined) => {\n if (tr) {\n this.onEditorDispatch(tr);\n }\n }),\n );\n\n // This flag is used to avoid an update loop between the outer and\n // inner editor\n this.updating = false;\n\n if (renderQueue.isRenderCompleted()) {\n // All editors have been rendered and the queue is empty; initialize\n // directly (this happens when e.g., inserting code chunks interactively\n // after the document is fully rendered)\n this.initEditor();\n } else {\n // Rendering is not complete; add to the queue\n renderQueue.add(this);\n }\n\n // add ourselves to the list of all ace node views\n this.nodeViews.add(this);\n }\n\n public destroy() {\n // Unsubscribe from events\n this.subscriptions.forEach(unsub => unsub());\n\n // Clean up attached editor instance when it's removed from the DOM\n if (this.chunk) {\n this.chunk.destroy();\n }\n\n // remove ourselves from the list of all ace node views\n this.nodeViews.remove(this);\n }\n\n public update(node: ProsemirrorNode, _decos: Decoration[]) {\n if (node.type !== this.node.type) {\n return false;\n }\n if (!this.editSession) {\n return false;\n }\n this.node = node;\n this.updateMode();\n\n const AceRange = window.require('ace/range').Range;\n const doc = this.editSession.getDocument();\n\n const change = computeChange(this.editSession.getValue(), node.textContent);\n if (change) {\n this.updating = true;\n const range = AceRange.fromPoints(doc.indexToPosition(change.from, 0), doc.indexToPosition(change.to, 0));\n this.editSession.replace(range, change.text);\n this.updating = false;\n }\n\n // Clear any previously rendered find markers\n this.findMarkers.forEach(id => {\n if (this.editSession) {\n this.editSession.removeMarker(id);\n }\n });\n this.findMarkers = [];\n\n // Get all of the find results inside this node\n const decorations = findPluginState(this.view.state);\n if (decorations) {\n const decos = decorations?.find(this.getPos(), this.getPos() + node.nodeSize - 1);\n\n // If we got results, render them\n if (decos) {\n decos.forEach((deco: any) => {\n if (!this.editSession) {\n return;\n }\n\n // Calculate from/to position for result marker (adjust for zero based column)\n const markerFrom = doc.indexToPosition(deco.from - this.getPos(), 0);\n markerFrom.column--;\n const markerTo = doc.indexToPosition(deco.to - this.getPos(), 0);\n markerTo.column--;\n const range = AceRange.fromPoints(markerFrom, markerTo);\n\n // Create the search result marker and add it to the rendered set\n const markerId = this.editSession.addMarker(range, deco.type.attrs.class, 'result', true);\n this.findMarkers.push(markerId);\n });\n }\n }\n\n return true;\n }\n\n public setSelection(anchor: number, head: number) {\n // We haven't drawn the editor yet, so queue the selection until we can\n // apply it.\n if (!this.aceEditor || !this.editSession) {\n this.queuedSelection = new QueuedSelection(anchor, head);\n return;\n }\n if (!this.escaping && !this.gapCursorPending) {\n this.aceEditor.focus();\n }\n this.updating = true;\n const doc = this.editSession.getDocument();\n const AceRange = window.require('ace/range').Range;\n const range = AceRange.fromPoints(doc.indexToPosition(anchor, 0), doc.indexToPosition(head, 0));\n this.editSession.getSelection().setSelectionRange(range);\n this.updating = false;\n }\n\n public setGapCursorPending(pending: boolean) {\n this.gapCursorPending = pending;\n }\n\n public selectNode() {\n if (this.aceEditor) {\n this.aceEditor.focus();\n }\n }\n\n public stopEvent() {\n return true;\n }\n\n public ignoreMutation(_mutation: MutationRecord | { type: 'selection'; target: Element }) {\n return true;\n }\n\n private onEditorDispatch(tr: Transaction) {\n if (!tr.docChanged && tr.selectionSet) {\n this.highlightSelectionAcross(tr.selection);\n }\n }\n\n private forwardSelection() {\n // ignore if we don't have focus\n if (!this.chunk || !this.chunk.element.contains(window.document.activeElement)) {\n return;\n }\n\n const state = this.view.state;\n const selection = this.asProseMirrorSelection(state.doc);\n if (selection && !selection.eq(state.selection)) {\n this.view.dispatch(state.tr.setSelection(selection));\n }\n }\n\n private asProseMirrorSelection(doc: ProsemirrorNode) {\n if (!this.editSession) {\n return null;\n }\n const offset = this.getPos() + 1;\n const session = this.editSession;\n const range = session.getSelection().getRange();\n const anchor = session.getDocument().positionToIndex(range.start, 0) + offset;\n const head = session.getDocument().positionToIndex(range.end, 0) + offset;\n return TextSelection.create(doc, anchor, head);\n }\n\n // detect the entire editor being selected across, in which case we add an ace marker\n // visually indicating that the text is selected\n private highlightSelectionAcross(selection: Selection) {\n if (!this.aceEditor || !this.editSession) {\n return;\n }\n\n // clear any existing selection marker\n if (this.selectionMarker !== null) {\n this.editSession.removeMarker(this.selectionMarker);\n this.selectionMarker = null;\n }\n\n // check for selection spanning us\n const pos = this.getPos();\n if (selection.from < pos && selection.to > pos + this.node.nodeSize) {\n const doc = this.editSession.getDocument();\n const AceRange = window.require('ace/range').Range;\n const range = AceRange.fromPoints(doc.indexToPosition(0, 0), doc.indexToPosition(this.node.nodeSize - 1, 0));\n this.selectionMarker = this.editSession.addMarker(range, 'pm-selected-text', 'selection', true);\n }\n }\n\n private valueChanged() {\n const change = computeChange(this.node.textContent, this.getContents());\n if (change) {\n // update content\n const start = this.getPos() + 1;\n if (!isNaN(start)) {\n const tr = this.view.state.tr.replaceWith(\n start + change.from,\n start + change.to,\n change.text ? this.node.type.schema.text(change.text) : null,\n );\n this.view.dispatch(tr);\n }\n }\n this.updateMode();\n }\n\n /**\n * Scrolls a child of the editor chunk into view.\n *\n * @param ele The child to scroll.\n */\n private scrollIntoView(ele: HTMLElement) {\n const editingRoot = editingRootNode(this.view.state.selection);\n if (editingRoot) {\n const container = this.view.nodeDOM(editingRoot.pos) as HTMLElement;\n const scroller = zenscroll.createScroller(container);\n\n let top = 0;\n\n // The DOM node representing this editor chunk (this.dom) may not be a\n // direct child of the scrollable container. If it isn't, walk up the DOM\n // tree until we find the main content node (pm-content), which is the\n // offset parent against which we need to compute scroll position.\n let scrollParent = this.dom;\n while (scrollParent.offsetParent != null &&\n !scrollParent.offsetParent.classList.contains(\"pm-content\"))\n {\n top += scrollParent.offsetTop;\n scrollParent = scrollParent.offsetParent as HTMLElement;\n }\n\n // Since the element we want to scroll into view is not a direct child of\n // the scrollable container, do a little math to figure out the\n // destination scroll position.\n top += ele.offsetTop + scrollParent.offsetTop;\n const bottom = top + ele.offsetHeight;\n const viewTop = container.scrollTop;\n const viewBottom = container.scrollTop + container.offsetHeight;\n\n // Scroll based on element's current position and size\n if (top > viewTop && bottom < viewBottom) {\n // Element is already fully contained in the viewport\n return;\n } else if (ele.offsetHeight > container.offsetHeight) {\n // Element is taller than the viewport, so show the first part of it\n scroller.toY(top);\n } else if (top < viewTop) {\n // Element is above viewport, so scroll it into view\n scroller.toY(top);\n } else if (bottom > viewBottom) {\n // Part of the element is beneath the viewport, so scroll just enough to\n // bring it into view\n scroller.toY(container.scrollTop - (viewBottom - bottom));\n }\n }\n }\n\n /**\n * Initializes the editing surface by creating and injecting an Ace editor\n * instance from the host.\n */\n public initEditor() {\n // skip if we're already initialized\n if (this.aceEditor) {\n return;\n }\n\n // call host factory to instantiate editor\n this.chunk = this.ui.chunks.createChunkEditor('ace', this.node.attrs.md_index, {\n getPos: () => this.getPos(),\n scrollIntoView: ele => this.scrollIntoView(ele),\n scrollCursorIntoView: () => this.scrollCursorIntoView(),\n });\n\n // populate initial contents\n this.aceEditor = this.chunk.editor as AceAjax.Editor;\n this.updating = true;\n this.aceEditor.setValue(this.node.textContent);\n this.updating = false;\n\n this.aceEditor.clearSelection();\n\n // cache edit session for convenience; most operations happen on the session\n this.editSession = this.aceEditor.getSession();\n\n // remove the preview and recreate chunk toolbar\n this.dom.innerHTML = '';\n this.dom.appendChild(this.chunk.element);\n\n // Propagate updates from the code editor to ProseMirror\n this.aceEditor.on('changeSelection', () => {\n if (!this.updating) {\n this.forwardSelection();\n }\n });\n this.aceEditor.on('change', () => {\n if (!this.updating) {\n this.valueChanged();\n }\n });\n\n // Forward selection we we receive it\n this.aceEditor.on('focus', () => {\n this.dom.classList.remove('pm-ace-editor-inactive');\n this.forwardSelection();\n });\n\n this.aceEditor.on('blur', () => {\n // Add a class to editor; this class contains CSS rules that hide editor\n // components that Ace cannot hide natively (such as the cursor,\n // matching bracket indicator, and active selection)\n this.dom.classList.add('pm-ace-editor-inactive');\n });\n\n // If the cursor moves and we're in focus, ensure that the cursor is\n // visible. Ace's own cursor visiblity mechanisms don't work in embedded\n // editors.\n this.aceEditor.getSelection().on('changeCursor', () => {\n if (this.dom.contains(document.activeElement) && !this.mouseDown) {\n this.cursorDirty = true;\n }\n });\n\n this.aceEditor.renderer.on('afterRender', () => {\n // If the cursor position is dirty and the mouse is not down, scroll the\n // cursor into view. Don't scroll while the mouse is down, as it will be\n // treated as a click-and-drag by Ace.\n if (this.cursorDirty && !this.mouseDown) {\n this.scrollCursorIntoView();\n this.cursorDirty = false;\n }\n });\n\n // Add custom escape commands for movement keys (left/right/up/down); these\n // will check to see whether the movement should leave the editor, and if\n // so will do so instead of moving the cursor.\n this.aceEditor.commands.addCommand({\n name: 'leftEscape',\n bindKey: 'Left',\n exec: () => {\n this.arrowMaybeEscape('char', -1, 'gotoleft');\n },\n });\n this.aceEditor.commands.addCommand({\n name: 'rightEscape',\n bindKey: 'Right',\n exec: () => {\n this.arrowMaybeEscape('char', 1, 'gotoright');\n },\n });\n this.aceEditor.commands.addCommand({\n name: 'upEscape',\n bindKey: 'Up',\n exec: () => {\n this.arrowMaybeEscape('line', -1, 'golineup');\n },\n });\n this.aceEditor.commands.addCommand({\n name: 'downEscape',\n bindKey: 'Down',\n exec: () => {\n this.arrowMaybeEscape('line', 1, 'golinedown');\n },\n });\n\n // Pressing Backspace in the editor when it's empty should delete it.\n this.aceEditor.commands.addCommand({\n name: 'backspaceDeleteNode',\n bindKey: 'Backspace',\n exec: () => {\n this.backspaceMaybeDeleteNode();\n },\n });\n\n // Handle undo/redo in ProseMirror\n this.aceEditor.commands.addCommand({\n name: 'undoProsemirror',\n bindKey: {\n win: 'Ctrl-Z',\n mac: 'Command-Z',\n },\n exec: () => {\n if (undo(this.view.state, this.view.dispatch)) {\n this.view.focus();\n }\n },\n });\n this.aceEditor.commands.addCommand({\n name: 'redoProsemirror',\n bindKey: {\n win: 'Ctrl-Shift-Z|Ctrl-Y',\n mac: 'Command-Shift-Z|Command-Y',\n },\n exec: () => {\n if (redo(this.view.state, this.view.dispatch)) {\n this.view.focus();\n }\n },\n });\n\n // Handle Select All in ProseMirror\n this.aceEditor.commands.addCommand({\n name: 'selectAllProsemirror',\n bindKey: {\n win: 'Ctrl-A',\n mac: 'Command-A',\n },\n exec: () => {\n if (selectAll(this.view.state, this.view.dispatch, this.view)) {\n this.view.focus();\n }\n },\n });\n\n // Handle shortcuts for moving focus out of the code editor and into\n // ProseMirror\n this.aceEditor.commands.addCommand({\n name: 'exitCodeBlock',\n bindKey: 'Shift-Enter',\n exec: () => {\n if (exitCode(this.view.state, this.view.dispatch)) {\n this.view.focus();\n }\n },\n });\n\n // Create a command for inserting paragraphs from the code editor\n this.aceEditor.commands.addCommand({\n name: 'insertParagraph',\n bindKey: {\n win: 'Ctrl-\\\\',\n mac: 'Command-\\\\',\n },\n exec: () => {\n if (insertParagraph(this.view.state, this.view.dispatch)) {\n this.view.focus();\n }\n },\n });\n\n // Line-by-line execution\n this.aceEditor.commands.addCommand({\n name: 'executeSelection',\n bindKey: {\n win: 'Ctrl-Enter',\n mac: 'Ctrl-Enter|Command-Enter',\n },\n exec: () => {\n if (this.chunk && this.aceEditor) {\n // Record the position prior to execution\n const pos = this.aceEditor.getCursorPosition();\n\n // Execute the selection\n this.chunk.executeSelection();\n\n // If the cursor stayed on the last line, step out of the code block\n // if we're not at the end of the doc (this is a no-op when not on the\n // last line, and mirrors the behavior when stepping past the end of\n // chunks in the code editor)\n if (pos.row === this.aceEditor.getCursorPosition().row) {\n this.arrowMaybeEscape('line', 1);\n }\n }\n },\n });\n\n // If an attribute editor function was supplied, bind it to F4\n if (this.options.attrEditFn) {\n this.aceEditor.commands.addCommand({\n name: 'editAttributes',\n bindKey: 'F4',\n exec: () => {\n this.options.attrEditFn!(this.view.state, this.view.dispatch, this.view);\n },\n });\n }\n\n // Apply editor mode\n if (this.mode) {\n this.chunk.setMode(this.mode);\n }\n\n // Disconnect font metrics system after render loop\n (this.aceEditor.renderer as any).on('afterRender', () => {\n // Update known rendered width\n if (this.chunk) {\n this.renderedWidth = this.chunk.element.offsetWidth;\n }\n\n window.setTimeout(() => {\n if (this.aceEditor) {\n const metrics = (this.aceEditor.renderer as any).$fontMetrics;\n if (metrics && metrics.$observer) {\n metrics.$observer.disconnect();\n }\n }\n }, 0);\n });\n\n // Hook up the container to the render queue\n const editingRoot = editingRootNode(this.view.state.selection)!;\n const container = this.view.nodeDOM(editingRoot.pos) as HTMLElement;\n if (container.parentElement) {\n this.renderQueue.setContainer(container);\n }\n\n // Forward selection, if we have one (this can be set while the editor is\n // waiting to render)\n if (this.queuedSelection) {\n this.setSelection(this.queuedSelection.anchor, this.queuedSelection.head);\n this.queuedSelection = null;\n }\n\n // Subscribe to resize event; will reflow the editor to wrap properly at the\n // new width\n this.subscriptions.push(\n this.events.subscribe(ResizeEvent, () => {\n this.debounceResize();\n }),\n );\n\n // Subscribe to scroll event; invalidates the row we're scrolled to so\n // scrollback will be triggered if necessary (after e.g., typing after\n // scrolling offscreen)\n this.subscriptions.push(\n this.events.subscribe(ScrollEvent, () => {\n this.scrollRow = -1;\n }),\n );\n\n // Keep track of mouse state so we can avoid e.g., autoscrolling while the\n // mouse is down\n this.dom.addEventListener(\"mousedown\", (evt) => {\n this.mouseDown = true;\n });\n this.dom.addEventListener(\"mouseup\", (evt) => {\n this.mouseDown = false;\n });\n this.dom.addEventListener(\"mouseleave\", (evt) => {\n // Treat mouse exit as an up since it will cause us to miss the up event\n this.mouseDown = false;\n });\n }\n\n /**\n * Debounced version of editor resize; ensures we don't aggressively resize\n * while size is still changing.\n */\n private debounceResize() {\n // Clear any previously running resize timer\n if (this.resizeTimer !== 0) {\n window.clearTimeout(this.resizeTimer);\n }\n\n // Create a new resize timer\n this.resizeTimer = window.setTimeout(() => {\n if (this.chunk && this.aceEditor) {\n // If the width we last rendered is different than our current width,\n // trigger an Ace resize event (causes editor to reflow wrapped text)\n if (this.renderedWidth !== this.chunk.element.offsetWidth) {\n this.aceEditor.resize();\n }\n }\n this.resizeTimer = 0;\n }, 500);\n }\n\n private updateMode() {\n // get lang\n const lang = this.options.lang(this.node, this.getContents());\n\n if (lang !== null && this.mode !== lang) {\n if (this.chunk) {\n this.chunk.setMode(lang);\n }\n this.mode = lang;\n }\n }\n\n private backspaceMaybeDeleteNode() {\n // if the node is empty and we execute a backspace then delete the node\n if (this.node.childCount === 0) {\n // if there is an input rule we just executed then use this to undo it\n if (undoInputRule(this.view.state)) {\n undoInputRule(this.view.state, this.view.dispatch);\n this.view.focus();\n } else {\n const tr = this.view.state.tr;\n tr.delete(this.getPos(), this.getPos() + this.node.nodeSize);\n tr.setSelection(TextSelection.near(tr.doc.resolve(this.getPos()), -1));\n this.view.dispatch(tr);\n this.view.focus();\n }\n } else if (this.aceEditor) {\n this.aceEditor.execCommand('backspace');\n }\n }\n\n // Checks to see whether an arrow key should escape the editor or not. If so,\n // sends the focus to the right node; if not, executes the given Ace command\n // (to perform the arrow key's usual action)\n private arrowMaybeEscape(unit: string, dir: number, command?: string) {\n if (!this.aceEditor || !this.editSession) {\n return;\n }\n const pos = this.aceEditor.getCursorPosition();\n const lastrow = this.editSession.getLength() - 1;\n if (\n !this.aceEditor.getSelection().isEmpty() ||\n pos.row !== (dir < 0 ? 0 : lastrow) ||\n (unit === 'char' && pos.column !== (dir < 0 ? 0 : this.editSession.getDocument().getLine(pos.row).length))\n ) {\n // this movement is happening inside the editor itself. don't escape\n // the editor; just execute the underlying command\n if (command) {\n this.aceEditor.execCommand(command);\n }\n return;\n }\n\n // the cursor is about to leave the editor region; flag this to avoid side\n // effects\n this.escaping = true;\n\n // ensure we are focused\n this.view.focus();\n\n // handle arrow key\n handleArrowToAdjacentNode(this.getPos(), dir, this.view.state, this.view.dispatch);\n\n // set focus\n this.view.focus();\n this.escaping = false;\n }\n\n private getContents(): string {\n if (this.editSession) {\n return this.editSession.getValue();\n } else {\n return this.dom.innerText;\n }\n }\n\n /**\n * Ensures that the Ace cursor is visible in the scrollable region of the document.\n */\n private scrollCursorIntoView(): void {\n // No need to try to enforce cursor position if we're already scrolled to\n // this row\n if (this.editSession && this.editSession.getSelection().getCursor().row === this.scrollRow) {\n return;\n }\n\n // Ensure we still have focus before proceeding\n if (this.dom.contains(document.activeElement)) {\n\n // Find the element containing the rendered virtual cursor \n const cursor = this.dom.querySelector(\".ace_cursor\");\n if (cursor === null) {\n return;\n }\n\n // Ace doesn't actually move the cursor but uses CSS translations to\n // make it appear in the right place, so we need to use the somewhat\n // expensive getBoundingClientRect call to get a resolved position.\n // (The alternative would be parse the translate: transform(10px 20px))\n // call from the style property.)\n const editingRoot = editingRootNode(this.view.state.selection)!;\n const container = this.view.nodeDOM(editingRoot.pos) as HTMLElement;\n const containerRect = container.getBoundingClientRect();\n const cursorRect = cursor.getBoundingClientRect();\n\n // Scrolling down?\n const down = cursorRect.bottom + 10 - containerRect.bottom;\n if (down > 0) {\n container.scrollTop += down;\n } else {\n // Scrolling up?\n const up = containerRect.top + 10 - cursorRect.top;\n if (up > 0) {\n container.scrollTop -= up;\n }\n }\n\n // Update cached scroll row so we don't unnecessarily redo these\n // computations\n if (this.editSession) {\n this.scrollRow = this.editSession.getSelection().getCursor().row;\n }\n }\n }\n}\n\nfunction computeChange(oldVal: string, newVal: string) {\n if (oldVal === newVal) {\n return null;\n }\n let start = 0;\n let oldEnd = oldVal.length;\n let newEnd = newVal.length;\n while (start < oldEnd && oldVal.charCodeAt(start) === newVal.charCodeAt(start)) {\n ++start;\n }\n while (oldEnd > start && newEnd > start && oldVal.charCodeAt(oldEnd - 1) === newVal.charCodeAt(newEnd - 1)) {\n oldEnd--;\n newEnd--;\n }\n return {\n from: start,\n to: oldEnd,\n text: newVal.slice(start, newEnd),\n };\n}\n\nfunction arrowHandler(dir: 'up' | 'down' | 'left' | 'right', nodeTypes: string[]) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n if (state.selection.empty && !(state.selection instanceof GapCursor) && view && view.endOfTextblock(dir)) {\n const side = dir === 'left' || dir === 'up' ? -1 : 1;\n const $head = state.selection.$head;\n const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side);\n if (nextPos.$head && nodeTypes.includes(nextPos.$head.parent.type.name)) {\n // check for e.g. math where you can advance across embedded newlines\n if ((dir === 'up' || dir === 'down') && verticalArrowCanAdvanceWithinTextBlock(state.selection, dir)) {\n return false;\n }\n if (dispatch) {\n dispatch(state.tr.setSelection(nextPos));\n }\n return true;\n }\n }\n return false;\n };\n}\n","/*\n * cursor.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorState, Transaction, NodeSelection, Selection } from 'prosemirror-state';\nimport { GapCursor } from 'prosemirror-gapcursor';\n\nexport function handleArrowToAdjacentNode(\n nodePos: number,\n dir: number,\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n): boolean {\n // resolve the node and position\n const node = state.doc.nodeAt(nodePos);\n if (!node) {\n return false;\n }\n const $pos = state.doc.resolve(nodePos);\n\n // helpers to figure out the nature of prev/next nodes\n const prevNodeSelectable = () => {\n return $pos.nodeBefore && $pos.nodeBefore.type.spec.selectable;\n };\n const nextNodeSelectable = () => {\n const nextNode = state.doc.nodeAt(nodePos + node.nodeSize);\n return nextNode?.type.spec.selectable;\n };\n const prevNodeTextBlock = () => {\n return $pos.nodeBefore && $pos.nodeBefore.isTextblock;\n };\n const nextNodeTextBlock = () => {\n const nextNode = state.doc.nodeAt(nodePos + node.nodeSize);\n return nextNode?.isTextblock;\n };\n const prevNodeCode = () => {\n return $pos.nodeBefore && !!$pos.nodeBefore.type.spec.code;\n };\n const nextNodeCode = () => {\n const nextNode = state.doc.nodeAt(nodePos + node.nodeSize);\n return !!nextNode?.type.spec.code;\n };\n\n // see if we can get a new selection\n const tr = state.tr;\n let selection: Selection | undefined;\n\n // if we are going backwards and there is no previous position, then return a gap cursor\n if (dir < 0 && !$pos.nodeBefore) {\n selection = new GapCursor(tr.doc.resolve(nodePos), tr.doc.resolve(nodePos));\n\n // if we are going forwards and there is no next position, then return a gap cursor\n } else if (dir > 0 && !$pos.nodeAfter) {\n const cursorPos = nodePos + node.nodeSize;\n selection = new GapCursor(tr.doc.resolve(cursorPos), tr.doc.resolve(cursorPos));\n\n // if we are going backwards and the previous node can take node selections then select it\n } else if (dir < 0 && prevNodeSelectable()) {\n const prevNodePos = nodePos - $pos.nodeBefore!.nodeSize;\n selection = NodeSelection.create(tr.doc, prevNodePos);\n\n // if we are going forwards and the next node can take node selections then select it\n } else if (dir >= 0 && nextNodeSelectable()) {\n const nextNodePos = nodePos + node.nodeSize;\n selection = NodeSelection.create(tr.doc, nextNodePos);\n\n // if we are going backwards and the previous node is not a text block then create a gap cursor\n } else if (dir < 0 && (!prevNodeTextBlock() || prevNodeCode())) {\n selection = new GapCursor(tr.doc.resolve(nodePos), tr.doc.resolve(nodePos));\n\n // if we are going forwards and the next node is not a text block then create a gap cursor\n } else if (dir >= 0 && (!nextNodeTextBlock() || nextNodeCode())) {\n const endPos = nodePos + node.nodeSize;\n selection = new GapCursor(tr.doc.resolve(endPos), tr.doc.resolve(endPos));\n\n // otherwise use text selection handling (handles forward/backward text selections)\n } else {\n const targetPos = nodePos + (dir < 0 ? 0 : node.nodeSize);\n const targetNode = tr.doc.nodeAt(targetPos);\n if (targetNode) {\n selection = Selection.near(tr.doc.resolve(targetPos), dir);\n }\n }\n\n if (selection) {\n if (dispatch) {\n tr.setSelection(selection);\n dispatch(tr);\n }\n return true;\n } else {\n return false;\n }\n}\n","/*\n * ace-render-queue.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { AceNodeView } from './ace';\nimport { EditorEvents } from '../../api/events';\nimport { ScrollEvent, UpdateEvent } from '../../api/event-types';\n\n/**\n * Represents a queue of Ace editor instances that are rendered asynchronously.\n */\nexport class AceRenderQueue {\n private readonly renderQueue: AceNodeView[] = [];\n\n private renderCompleted: boolean = false;\n private renderTimer: number = 0;\n private updateTimer: number = 0;\n private container?: HTMLElement;\n private needsSort: boolean = true;\n private bypass: number = 5;\n private observer?: IntersectionObserver;\n private visible: boolean = true;\n private readonly subscriptions: VoidFunction[] = [];\n\n constructor(private events: EditorEvents) {\n // Begin listening for scroll and update events so we can manage the queue\n // accordingly\n this.subscriptions.push(\n events.subscribe(ScrollEvent, () => {\n this.onScroll();\n }),\n );\n this.subscriptions.push(\n events.subscribe(UpdateEvent, () => {\n this.onUpdate();\n }),\n );\n }\n\n /**\n * Sets (or replaces) the scroll container hosting the render queue. The\n * scroll container is used to prioritize the queue (i.e. objects in the\n * viewport or close to it are to be given more priority).\n *\n * @param container The HTML element of the scroll container\n */\n public setContainer(container: HTMLElement) {\n // Skip if we're already looking at this container\n if (this.container === container) {\n return;\n }\n\n // Clean up observer on any previous container\n if (this.observer) {\n this.observer.disconnect();\n }\n\n // Save reference to container\n this.container = container;\n\n // Create intersection observer to ensure that we don't needlessly churn\n // through renders while offscreen.\n this.observer = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n for (const entry of entries) {\n if (entry.isIntersecting && !this.visible) {\n // We just became visible; process the render queue now.\n this.visible = true;\n this.processRenderQueue();\n }\n if (!entry.isIntersecting && this.visible) {\n // We just lost visibility; end processing of the render queue. (Note\n // that we only do this when connected to the DOM as another reason\n // the element can become invisible is ProseMirror swapping it out\n // internally.)\n if (this.container?.parentElement) {\n this.visible = false;\n this.cancelTimer();\n }\n }\n }\n },\n {\n root: null,\n },\n );\n\n // Begin observing intersection events in container\n this.observer.observe(container);\n }\n\n /**\n * Invoke when the editor surface is scrolled\n */\n private onScroll() {\n // Whenever a scroll event occurs, we need to re-sort the queue so that\n // objects in or closest to the viewport are given priority.\n this.needsSort = true;\n\n // If we don't think we're visible but we're scrolling and have height,\n // then we are in fact visible. (This catches a case where the\n // intsersection observer created below doesn't fire for visiblity\n // changes.)\n if (!this.visible && this.container && this.container.offsetHeight > 0) {\n this.visible = true;\n this.processRenderQueue();\n }\n }\n\n /**\n * Invoke when the document has changed\n */\n private onUpdate() {\n // Debounce update timer. This timer is used to prevent the CPU intensive\n // editor rendering from happening while the user is actively updating the\n // document.\n if (this.updateTimer !== 0) {\n window.clearTimeout(this.updateTimer);\n }\n this.updateTimer = window.setTimeout(() => {\n this.updateTimer = 0;\n // Process queue immediately if we have one\n this.scheduleRender(0);\n }, 1000);\n }\n\n /**\n * Indicates whether the render queue has a scroll container defined\n */\n public hasContainer(): boolean {\n if (this.container) {\n return true;\n }\n return false;\n }\n\n /**\n * Indicates whether the rendering is finished.\n */\n public isRenderCompleted(): boolean {\n return this.renderCompleted;\n }\n\n /**\n * Adds a node view to the render queue\n */\n public add(view: AceNodeView) {\n // We allow the first few code blocks to render synchronously instead of\n // being dumped into the queue for later processing. This slightly increases\n // startup time but prevents the flicker that would otherwise occur as\n // editors render one by one.\n if (this.bypass > 0) {\n this.bypass--;\n view.initEditor();\n return;\n }\n\n this.renderQueue.push(view);\n\n // Defer/debounce rendering of editors until event loop finishes\n if (this.renderTimer === 0) {\n this.scheduleRender(0);\n }\n }\n\n /**\n * Processes the queue of editor instances that need to be rendered.\n */\n private processRenderQueue() {\n // No work to do if queue is empty\n if (this.renderQueue.length === 0) {\n return;\n }\n\n // Don't render while hidden; it wastes resources plus can result in\n // incorrect sizing calculations\n if (!this.visible) {\n return;\n }\n\n // Don't render while the user is actively updating the document (it makes\n // the interface sluggish)\n if (this.updateTimer !== 0) {\n return;\n }\n\n // Compute offset for sorting (based on scroll position)\n let offset = 0;\n if (this.container) {\n offset = this.container.scrollTop;\n }\n\n // Sort the queue if required\n if (this.needsSort) {\n // Sort the render queue based on distance from the top of the viewport\n this.renderQueue.sort((a, b) => {\n return Math.abs(a.dom.offsetTop - offset) - Math.abs(b.dom.offsetTop - offset);\n });\n\n // Clear flag so we don't sort the queue on every render\n this.needsSort = false;\n }\n\n // Pop the next view (editor instance) to be rendered off the stack.\n // Fast-forward past instances that no longer have a position; these can\n // accumulate when NodeViews are added to the render queue but replaced\n // (by a document rebuild) before they have a chance to render.\n let view: AceNodeView | undefined;\n while ((view === null || view === undefined || view.getPos() === undefined) &&\n this.renderQueue.length > 0) {\n view = this.renderQueue.shift();\n }\n\n // Render this view\n if (view) {\n view.initEditor();\n }\n\n if (this.renderQueue.length > 0) {\n // There are still remaining editors to be rendered, so process again on\n // the next event loop.\n //\n // If these editors are near the viewport, render them as soon as\n // possible; otherwise, let the render proceed at a slower pace to\n // increase responsiveness.\n let delayMs = 1000;\n if (this.container) {\n const distance = Math.abs(this.renderQueue[0].dom.offsetTop - offset);\n if (distance < this.container.offsetHeight * 2) {\n // Container is near the viewport, so render it ASAP\n delayMs = 0;\n }\n }\n this.scheduleRender(delayMs);\n } else {\n // No remaining editors; we're done.\n this.renderCompleted = true;\n this.destroy();\n }\n }\n\n /**\n * Cancels the timer that is responsible for triggering the processing of the\n * next unit in the render queue.\n */\n private cancelTimer() {\n if (this.renderTimer !== 0) {\n window.clearTimeout(this.renderTimer);\n this.renderTimer = 0;\n }\n }\n\n /**\n * Reschedules a pending render, or schedules a new one.\n */\n private scheduleRender(delayMs: number) {\n this.cancelTimer();\n this.renderTimer = window.setTimeout(() => {\n this.processRenderQueue();\n this.renderTimer = 0;\n }, delayMs);\n }\n\n /**\n * Cleans up the render queue instance\n */\n private destroy() {\n // Cancel any pending renders\n this.cancelTimer();\n\n // Clear any pending update timer\n if (this.updateTimer !== 0) {\n window.clearTimeout(this.updateTimer);\n }\n\n // Remove event subscriptions\n this.subscriptions.forEach(unsub => unsub());\n\n // Clean up resize observer\n if (this.observer) {\n this.observer.disconnect();\n }\n }\n}\n","/*\n * ace-placeholder.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\n/**\n * Represents a placeholder (preview) rendering of an Ace editor. Since Ace\n * editors are somewhat expensive to draw, this placeholder is used in place\n * of a real editor instance to make code visible and allow for correct height\n * computations.\n */\nexport class AcePlaceholder {\n private readonly element: HTMLElement;\n\n constructor(content: string) {\n const ele = document.createElement('pre');\n ele.innerText = content;\n ele.className = 'ace_editor';\n this.element = ele;\n }\n\n public getElement() {\n return this.element;\n }\n}\n","/*\n * ace-node-views.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { GapCursor } from 'prosemirror-gapcursor';\nimport { AceNodeView } from './ace';\nimport { EditorView } from 'prosemirror-view';\n\n/**\n * Track all Ace node view instances to implement additional behavior\n * (e.g. gap cursor for clicks between editor instances)\n */\n\nexport class AceNodeViews {\n private nodeViews: AceNodeView[];\n\n constructor() {\n this.nodeViews = [];\n }\n public add(nodeView: AceNodeView) {\n this.nodeViews.push(nodeView);\n }\n\n public remove(nodeView: AceNodeView) {\n const index = this.nodeViews.indexOf(nodeView);\n if (index >= 0) {\n this.nodeViews.splice(index, 1);\n }\n }\n\n public handleClick(view: EditorView, event: Event): boolean {\n // alias to mouseEvent\n const mouseEvent = event as MouseEvent;\n\n // see if the click is between 2 contiguously located node views\n for (const nodeView of this.nodeViews) {\n // gap cursor we might detect\n let gapCursor: GapCursor | null = null;\n\n // get the position\n const pos = nodeView.getPos();\n const $pos = view.state.doc.resolve(pos);\n\n // if the previous node is code, see if the click is between the 2 nodes\n if ($pos.nodeBefore && $pos.nodeBefore.type.spec.code) {\n // get our bounding rect\n const dom = nodeView.dom;\n const nodeViewRect = dom.getBoundingClientRect();\n\n // get the previous node's bounding rect\n const prevNodePos = pos - $pos.nodeBefore!.nodeSize;\n const prevNodeView = this.nodeViews.find(nv => nv.getPos() === prevNodePos);\n if (prevNodeView) {\n const prevNodeRect = prevNodeView.dom.getBoundingClientRect();\n\n // check for a click between the two nodes\n const mouseY = mouseEvent.clientY;\n if (mouseY > prevNodeRect.top + prevNodeRect.height && mouseY < nodeViewRect.top) {\n gapCursor = new GapCursor($pos, $pos);\n }\n }\n\n // if there is no previous node and the click is above us then gap cursor above\n // (only do this if the cursor is within 150 pixels of the left edge)\n } else if (\n !$pos.nodeBefore &&\n $pos.depth === 1 &&\n mouseEvent.clientY < nodeView.dom.getBoundingClientRect().top &&\n Math.abs(mouseEvent.clientX - nodeView.dom.getBoundingClientRect().left) < 150\n ) {\n gapCursor = new GapCursor($pos, $pos);\n }\n\n // return gapCursor if we found one\n if (gapCursor) {\n const tr = view.state.tr;\n\n // notify the node views that we are setting a gap cursor\n this.nodeViews.forEach(ndView => ndView.setGapCursorPending(true));\n\n // ensure the view is focused\n view.focus();\n\n // set the selection\n tr.setSelection(gapCursor);\n view.dispatch(tr);\n\n // notify the node views that we are done setting the gap cursor\n this.nodeViews.forEach(ndView => ndView.setGapCursorPending(false));\n\n // prevent default event handling\n event.preventDefault();\n event.stopImmediatePropagation();\n return true;\n }\n }\n\n return false;\n }\n}\n","/*\n * attr_edit.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\n\nimport { EditorUI } from '../../api/ui';\nimport { pandocAttrEnabled } from '../../api/pandoc_attr';\n\nimport { AttrEditCommand } from './attr_edit-command';\nimport { AttrEditOptions } from '../../api/attr_edit';\nimport { PandocExtensions } from '../../api/pandoc';\nimport { AttrEditDecorationPlugin } from './attr_edit-decoration';\nimport { Extension } from '../../api/extension';\nimport { hasFencedCodeBlocks } from '../../api/pandoc_format';\n\nexport const kEditAttrShortcut = 'F4';\n\nexport function attrEditExtension(\n pandocExtensions: PandocExtensions,\n ui: EditorUI,\n editors: AttrEditOptions[],\n): Extension {\n const hasAttr = pandocAttrEnabled(pandocExtensions) || hasFencedCodeBlocks(pandocExtensions);\n\n return {\n commands: (_schema: Schema) => {\n if (hasAttr) {\n return [new AttrEditCommand(ui, pandocExtensions, editors)];\n } else {\n return [];\n }\n },\n\n plugins: (_schema: Schema) => {\n if (hasAttr) {\n return [new AttrEditDecorationPlugin(ui, pandocExtensions, editors)];\n } else {\n return [];\n }\n },\n };\n}\n","/*\n * attr_edit-command.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorState, Transaction, NodeSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { Mark, Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport { findParentNodeOfType, NodeWithPos } from 'prosemirror-utils';\n\nimport { EditorUI } from '../../api/ui';\nimport { pandocAttrInSpec } from '../../api/pandoc_attr';\nimport { getSelectionMarkRange } from '../../api/mark';\nimport { EditorCommandId, ProsemirrorCommand } from '../../api/command';\n\nimport { kEditAttrShortcut } from './attr_edit';\nimport { AttrEditOptions } from '../../api/attr_edit';\nimport { pandocAutoIdentifier, gfmAutoIdentifier } from '../../api/pandoc_id';\nimport { PandocExtensions } from '../../api/pandoc';\nimport { fragmentText } from '../../api/fragment';\n\nexport class AttrEditCommand extends ProsemirrorCommand {\n constructor(ui: EditorUI, pandocExtensions: PandocExtensions, editors: AttrEditOptions[]) {\n super(EditorCommandId.AttrEdit, [kEditAttrShortcut], attrEditCommandFn(ui, pandocExtensions, editors));\n }\n}\n\nexport function attrEditCommandFn(\n ui: EditorUI, \n pandocExtensions: PandocExtensions, \n editors: AttrEditOptions[]\n) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // see if there is an active mark with attrs or a parent node with attrs\n const marks = state.storedMarks || state.selection.$head.marks();\n const mark = marks.find((m: Mark) => pandocAttrInSpec(m.type.spec));\n\n let node: ProsemirrorNode | null = null;\n let pos: number = 0;\n // node selection of node with attributes\n if (state.selection instanceof NodeSelection && pandocAttrInSpec(state.selection.node.type.spec)) {\n node = state.selection.node;\n pos = state.selection.$anchor.pos;\n } else {\n // selection inside node with editable attributes\n const nodeTypes = editors.map(editor => editor.type(state.schema));\n const parentWithAttrs = findParentNodeOfType(nodeTypes)(state.selection);\n if (parentWithAttrs) {\n node = parentWithAttrs.node;\n pos = parentWithAttrs.pos;\n }\n }\n\n // return false (disabled) for no targets\n if (!mark && !node) {\n return false;\n }\n\n // if this is a node and we have a custom attribute editor then just delegate to that\n if (node) {\n const editor = editors.find(ed => ed.type(state.schema) === node!.type)!;\n if (editor && editor.editFn) {\n return editor.editFn()(state, dispatch, view);\n }\n }\n\n // edit attributes\n async function asyncEditAttrs() {\n if (dispatch) {\n if (mark) {\n await editMarkAttrs(mark, state, dispatch, ui);\n } else {\n await editNodeAttrs(node!, pos, state, dispatch, ui, pandocExtensions);\n }\n if (view) {\n view.focus();\n }\n }\n }\n asyncEditAttrs();\n\n // return true\n return true;\n };\n}\n\nexport function attrEditNodeCommandFn(nodeWithPos: NodeWithPos, \n ui: EditorUI, \n pandocExtensions: PandocExtensions, \n editors: AttrEditOptions[]) {\n \n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n\n // alias\n const { node, pos } = nodeWithPos;\n\n // registered editor\n const editor = editors.find(ed => ed.type(state.schema) === node!.type)!;\n if (editor && editor.editFn) {\n return editor.editFn()(state, dispatch, view);\n }\n\n // generic editor\n async function asyncEditAttrs() {\n if (dispatch) {\n await editNodeAttrs(node!, pos, state, dispatch, ui, pandocExtensions);\n if (view) {\n view.focus();\n }\n }\n }\n asyncEditAttrs();\n\n // return true\n return true;\n };\n}\n\nasync function editMarkAttrs(\n mark: Mark,\n state: EditorState,\n dispatch: (tr: Transaction) => void,\n ui: EditorUI,\n): Promise {\n const attrs = mark.attrs;\n const markType = mark.type;\n const result = await ui.dialogs.editAttr({ ...attrs });\n if (result) {\n const tr = state.tr;\n const range = getSelectionMarkRange(state.selection, markType);\n tr.removeMark(range.from, range.to, markType);\n tr.addMark(\n range.from,\n range.to,\n markType.create({\n ...attrs,\n ...result.attr,\n }),\n );\n dispatch(tr);\n }\n}\n\nasync function editNodeAttrs(\n node: ProsemirrorNode,\n pos: number,\n state: EditorState,\n dispatch: (tr: Transaction) => void,\n ui: EditorUI,\n pandocExtensions: PandocExtensions,\n): Promise {\n const attrs = node.attrs;\n const result = await ui.dialogs.editAttr({ ...attrs }, idHint(node, pandocExtensions));\n if (result) {\n dispatch(\n state.tr.setNodeMarkup(pos, node.type, {\n ...attrs,\n ...result.attr,\n }),\n );\n }\n}\n\nfunction idHint(node: ProsemirrorNode, pandocExtensions: PandocExtensions) {\n if (node.type === node.type.schema.nodes.heading) {\n const unemoji = pandocExtensions.gfm_auto_identifiers;\n const text = fragmentText(node.content, unemoji);\n\n if (pandocExtensions.gfm_auto_identifiers) {\n return gfmAutoIdentifier(text, pandocExtensions.ascii_identifiers);\n } else {\n return pandocAutoIdentifier(text, pandocExtensions.ascii_identifiers);\n }\n } else {\n return undefined;\n }\n}\n","/*\n * attr_edit-decoration.tsx\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Plugin, PluginKey, Transaction, EditorState } from 'prosemirror-state';\nimport { DecorationSet, EditorView, Decoration } from 'prosemirror-view';\n\nimport * as React from 'react';\n\nimport { EditorUI } from '../../api/ui';\nimport { AttrEditOptions } from '../../api/attr_edit';\nimport { ImageButton } from '../../api/widgets/button';\nimport { CommandFn } from '../../api/command';\nimport { AttrProps } from '../../api/ui-dialogs';\nimport { WidgetProps, reactRenderForEditorView } from '../../api/widgets/react';\nimport { PandocExtensions } from '../../api/pandoc';\n\nimport { kEditAttrShortcut } from './attr_edit';\nimport { attrEditNodeCommandFn } from './attr_edit-command';\n\nimport './attr_edit-decoration.css';\n\ninterface AttrEditDecorationProps extends WidgetProps {\n tags: string[];\n attrs: AttrProps;\n editFn: CommandFn;\n view: EditorView;\n ui: EditorUI;\n}\n\nconst AttrEditDecoration: React.FC = props => {\n const buttonTitle = `${props.ui.context.translateText('Edit Attributes')} (${kEditAttrShortcut})`;\n\n const onClick = () => {\n props.editFn(props.view.state, props.view.dispatch, props.view);\n };\n\n return (\n
\n {props.tags.length\n ? props.tags.map(tag => {\n return (\n \n {tag}\n \n );\n })\n : null}\n {props.editFn(props.view.state) ? (\n \n ) : null}\n
\n );\n};\n\nconst key = new PluginKey('attr_edit_decoration');\n\nexport class AttrEditDecorationPlugin extends Plugin {\n constructor(ui: EditorUI, pandocExtensions: PandocExtensions, editors: AttrEditOptions[]) {\n super({\n key,\n state: {\n init: (_config: { [key: string]: any }) => {\n return DecorationSet.empty;\n },\n apply: (tr: Transaction, old: DecorationSet, _oldState: EditorState, newState: EditorState) => {\n // node types\n const schema = newState.schema;\n const nodeTypes = editors.map(ed => ed.type(schema));\n\n // decorations to return\n const decorations: Decoration[] = [];\n\n // start from current selection\n const $head = tr.selection.$head;\n\n for (let i=1; i<=$head.depth; i++) {\n\n const parentWithAttrs = { node: $head.node(i), pos: $head.before(i) };\n if (!nodeTypes.includes(parentWithAttrs.node.type)) {\n continue;\n }\n\n // get editor\n const editor = editors.find(ed => ed.type(schema) === parentWithAttrs.node.type)!;\n\n // screen for noDecorator\n if (editor.noDecorator) {\n continue;\n }\n\n // provide some editor defaults\n editor.tags =\n editor.tags ||\n (editorNode => {\n const attrTags = [];\n if (editorNode.attrs.id) {\n attrTags.push(`#${editorNode.attrs.id}`);\n }\n if (editorNode.attrs.classes && editorNode.attrs.classes.length) {\n attrTags.push(`${editorNode.attrs.classes.map((clz: string) => '.' + clz).join(' ')}`);\n }\n return attrTags;\n });\n editor.offset = editor.offset || { top: 0, right: 0 };\n\n // get editFn\n const editFn = (editorUI: EditorUI) => attrEditNodeCommandFn(parentWithAttrs, editorUI, pandocExtensions, editors);\n\n // get attrs/tags\n const node = parentWithAttrs.node;\n const attrs = node.attrs;\n const tags = editor.tags(node);\n\n // attr_edit controls\n const attrEditDecoration = Decoration.widget(\n parentWithAttrs.pos,\n (view: EditorView, getPos: () => number) => {\n // does the offsetParent have any right padding we need to offset for?\n // we normally use right: 5px for positioning but that is relative to\n // the edge of the offsetParent. However, some offset parents (e.g. a\n // td or a nested div) have their own internal padding to account for\n // so we look for it here\n let rightPaddingOffset = 0;\n const attrsNode = view.nodeDOM(getPos());\n if (attrsNode) {\n const attrsEl = attrsNode as HTMLElement;\n if (attrsEl.offsetParent) {\n const offsetParentStyle = window.getComputedStyle(attrsEl.offsetParent);\n rightPaddingOffset = -parseInt(offsetParentStyle.paddingRight!, 10) || 0;\n }\n }\n\n // cacculate position offsets\n const baseOffset = editor.offset || { top: 0, right: 0 };\n const xOffset = baseOffset.right + rightPaddingOffset;\n const yOffset = baseOffset.top + 6;\n const cssProps: React.CSSProperties = {\n transform: `translate(${xOffset}px,-${yOffset}px)`,\n };\n\n // create attr edit react component\n const attrEdit = (\n \n );\n\n // create decorator and render attr editor into it\n const decoration = window.document.createElement('div');\n reactRenderForEditorView(attrEdit, decoration, view);\n\n return decoration;\n },\n {\n // re-use existing instance for same tags\n key: `tags:${tags.join('/')}`,\n ignoreSelection: true,\n stopEvent: () => {\n return true;\n },\n },\n );\n\n decorations.push(attrEditDecoration);\n }\n\n \n // return decorations\n return DecorationSet.create(tr.doc, decorations);\n },\n },\n props: {\n decorations: (state: EditorState) => {\n return key.getState(state);\n },\n },\n });\n }\n}\n","/*\n * editor-theme.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport interface EditorTheme {\n darkMode: boolean;\n solarizedMode: boolean;\n cursorColor: string;\n selectionColor: string;\n nodeSelectionColor: string;\n backgroundColor: string;\n metadataBackgroundColor: string;\n chunkBackgroundColor: string;\n spanBackgroundColor: string;\n divBackgroundColor: string;\n commentColor: string;\n commentBackgroundColor: string;\n gutterBackgroundColor: string;\n gutterTextColor: string;\n textColor: string;\n lightTextColor: string;\n placeholderTextColor: string;\n invisibleTextColor: string;\n linkTextColor: string;\n surfaceWidgetTextColor: string;\n markupTextColor: string;\n findTextBackgroundColor: string;\n findTextBorderColor: string;\n borderBackgroundColor: string;\n blockBorderColor: string;\n focusOutlineColor: string;\n paneBorderColor: string;\n fixedWidthFont: string;\n fixedWidthFontSizePt: number;\n proportionalFont: string;\n proportionalFontSizePt: number;\n code: CodeTheme;\n}\n\nexport interface CodeTheme {\n keywordColor: string;\n atomColor: string;\n numberColor: string;\n variableColor: string;\n defColor: string;\n operatorColor: string;\n commentColor: string;\n stringColor: string;\n metaColor: string;\n builtinColor: string;\n bracketColor: string;\n tagColor: string;\n attributeColor: string;\n hrColor: string;\n linkColor: string;\n errorColor: string;\n}\n\nexport function defaultTheme(): EditorTheme {\n return {\n darkMode: false,\n solarizedMode: false,\n cursorColor: 'black',\n selectionColor: '#8cf',\n nodeSelectionColor: 'rgb(102,155,243)',\n backgroundColor: 'white',\n metadataBackgroundColor: 'rgb(255, 255, 255)',\n chunkBackgroundColor: 'rgb(251,251,251)',\n spanBackgroundColor: '#fff8dc',\n divBackgroundColor: 'rgb(243, 243, 243)',\n commentColor: '#3c4c72',\n commentBackgroundColor: '#FFECCB',\n gutterBackgroundColor: '#f0f0f0',\n gutterTextColor: '#333',\n textColor: 'black',\n surfaceWidgetTextColor: 'rgba(0,0,0,0.5)',\n lightTextColor: 'rgb(60, 76, 114)',\n linkTextColor: '#106ba3',\n placeholderTextColor: 'gray',\n invisibleTextColor: 'rgb(191, 191, 191)',\n markupTextColor: 'rgb(185, 6, 144)',\n findTextBackgroundColor: 'rgb(250, 250, 255)',\n findTextBorderColor: 'rgb(200, 200, 250)',\n borderBackgroundColor: '#ddd',\n blockBorderColor: '#ddd',\n focusOutlineColor: '#5d84cd',\n paneBorderColor: 'silver',\n fixedWidthFont: 'monospace, monospace',\n fixedWidthFontSizePt: 9,\n proportionalFont: '\"Lucida Sans\", \"DejaVu Sans\", \"Lucida Grande\", \"Segoe UI\", Verdana, Helvetica, sans-serif',\n proportionalFontSizePt: 10,\n code: {\n keywordColor: 'rgb(0, 0, 255)',\n atomColor: 'rgb(88, 92, 246)',\n numberColor: 'rgb(0, 0, 205)',\n variableColor: 'rgb(0, 0, 0)',\n defColor: 'rgb(0, 0, 0)',\n operatorColor: 'rgb(104, 118, 135)',\n commentColor: 'rgb(76, 136, 107)',\n stringColor: 'rgb(3, 106, 7)',\n metaColor: 'rgb(0, 0, 0)',\n builtinColor: 'rgb(0, 0, 0)',\n bracketColor: 'rgb(104, 118, 135)',\n tagColor: 'rgb(0, 22, 142)',\n attributeColor: 'rgb(0, 0, 0)',\n hrColor: 'rgb(0, 0, 0)',\n linkColor: 'rgb(0, 0, 255)',\n errorColor: 'rgb(197, 6, 11)',\n },\n };\n}\n\nexport function applyTheme(theme: EditorTheme) {\n // merge w/ defaults\n const defaults = defaultTheme();\n theme = {\n ...defaults,\n ...theme,\n code: {\n ...defaults.code,\n ...theme.code,\n },\n };\n\n // generate theme css\n const themeCss = `\n .pm-default-theme .pm-background-color {\n background-color: ${defaults.backgroundColor} !important;\n }\n .pm-default-theme .pm-text-color {\n color: ${defaults.textColor} !important;\n }\n .pm-default-theme .pm-border-background-color {\n background-color: ${defaults.borderBackgroundColor} !important;\n }\n .pm-default-theme .pm-input-text {\n border-color: ${defaults.paneBorderColor} !important\n }\n .pm-default-theme .pm-block-border-color {\n border-color: ${defaults.blockBorderColor} !important;\n }\n .pm-default-theme .pm-input-outline-button {\n color: ${defaults.textColor};\n border-color: ${defaults.textColor};\n background-color: ${defaults.backgroundColor};\n }\n .pm-default-theme .pm-selected-navigation-tree-item {\n background-color: ${defaults.findTextBackgroundColor} !important;\n border-color: ${defaults.findTextBorderColor} !important;\n }\n .pm-default-theme .pm-navigation-tree-item {\n border-color: ${defaults.backgroundColor} !important;\n }\n .pm-default-theme .pm-block-border-color {\n border-color: ${defaults.blockBorderColor} !important;\n }\n .pm-default-theme .pm-focus-outline-color {\n border-color: ${defaults.focusOutlineColor} !important;\n }\n .pm-default-theme .pm-input-button {\n border-color: ${defaults.borderBackgroundColor};\n background-color: ${defaults.backgroundColor};\n }\n .pm-default-theme .pm-placeholder-text-color {\n color: ${defaults.placeholderTextColor} !important;\n }\n .pm-default-theme .pm-background-color *::selection {\n background-color: ${defaults.selectionColor} !important;\n }\n .pm-default-theme .pm-find-text,\n .pm-default-theme .pm-list-item-selected,\n .pm-default-theme .pm-grid-item-selected {\n background-color: ${defaults.findTextBackgroundColor} !important;\n box-shadow: 0 0 0 1px ${defaults.findTextBorderColor}; \n border-radius: 3px;\n }\n .pm-default-theme .pm-rstudio-button {\n border-color: DarkGray !important;\n }\n .pm-cursor-color {\n caret-color: ${theme.cursorColor}\n }\n .pm-background-color {\n background-color: ${theme.backgroundColor} !important;\n }\n .pm-metadata-background-color {\n background-color: ${theme.metadataBackgroundColor} !important;\n }\n .pm-chunk-background-color {\n background-color: ${theme.chunkBackgroundColor} !important;\n }\n .pm-span-background-color {\n background-color: ${theme.spanBackgroundColor} !important;\n }\n .pm-div-background-color {\n background-color: ${theme.divBackgroundColor} !important;\n }\n .pm-nbsp-background-color {\n background-color: ${theme.spanBackgroundColor} !important;\n }\n .pm-comment-color {\n color: ${theme.commentColor} !important;\n }\n .pm-comment-background-color {\n background-color: ${theme.commentBackgroundColor} !important;\n }\n .pm-text-color {\n color: ${theme.textColor} !important;\n }\n .pm-surface-widget-text-color {\n color: ${theme.surfaceWidgetTextColor} !important;\n }\n .pm-light-text-color {\n color: ${theme.lightTextColor} !important;\n }\n .pm-placeholder-text-color {\n color: ${theme.placeholderTextColor} !important;\n }\n .pm-invisible-text-color {\n color: ${theme.invisibleTextColor} !important;\n }\n .pm-link-text-color {\n color: ${theme.linkTextColor} !important;\n }\n .pm-markup-text-color {\n color: ${theme.markupTextColor} !important;\n }\n .pm-find-text,\n .pm-list-item-selected,\n .pm-grid-item-selected {\n background-color: ${theme.findTextBackgroundColor} !important;\n box-shadow: 0 0 0 1px ${theme.findTextBorderColor}; \n border-radius: 3px;\n }\n .pm-selected-text {\n background-color: ${theme.selectionColor} !important;\n }\n .pm-selected-list-item {\n background-color: ${theme.findTextBackgroundColor} !important;\n border: 1px solid ${theme.findTextBorderColor} !important;\n border-radius: 3px;\n }\n .pm-dark-mode .pm-selected-list-item {\n background-color: ${theme.chunkBackgroundColor} !important;\n border: 1px solid transparent !important;\n }\n .pm-navigation-tree-item {\n border: 1px solid ${theme.backgroundColor} !important;\n border-radius: 3px;\n margin-left: 2px;\n margin-right: 2px;\n }\n .pm-selected-navigation-tree-item {\n background-color: ${theme.findTextBackgroundColor} !important;\n border: 1px solid ${theme.findTextBorderColor} !important;\n border-radius: 3px;\n margin-left: 2px;\n margin-right: 2px;\n }\n .pm-border-background-color {\n background-color: ${theme.borderBackgroundColor}!important;\n }\n .pm-block-border-color {\n border-color: ${theme.blockBorderColor} !important;\n }\n .pm-focus-outline-color {\n border-color: ${theme.focusOutlineColor} !important;\n }\n .pm-pane-border-color {\n border-color: ${theme.paneBorderColor} !important;\n }\n .pm-div .pm-div {\n border-color: ${theme.focusOutlineColor} !important;\n }\n .pm-raw-block-border {\n border-color: ${theme.markupTextColor} !important;\n }\n .pm-popup {\n box-shadow: 0 1px 3px ${theme.blockBorderColor} !important;\n }\n .pm-selected-node-outline-color,\n .ProseMirror-selectednode {\n outline-color: ${theme.nodeSelectionColor} !important;\n }\n .pm-selected-node-border-color {\n border-color: ${theme.nodeSelectionColor} !important;\n }\n .pm-dark-mode .pm-selected-node-outline-color,\n .pm-dark-mode .ProseMirror-selectednode {\n outline-color: ${theme.nodeSelectionColor} !important;\n }\n .pm-dark-mode .pm-selected-node-border-color {\n border-color: ${theme.nodeSelectionColor} !important;\n }\n .pm-background-color *::selection {\n background-color: ${theme.selectionColor} !important;\n }\n .pm-background-color *::-moz-selection {\n background-color: ${theme.selectionColor} !important;\n }\n .pm-fixedwidth-font {\n font-family: ${theme.fixedWidthFont} !important;\n font-size: ${theme.fixedWidthFontSizePt}pt !important;\n }\n .pm-proportional-font {\n font-family: ${theme.proportionalFont} !important;\n font-size: ${theme.proportionalFontSizePt}pt !important;\n }\n .pm-emoji-font {\n font-family: ${theme.fixedWidthFont} !important;\n }\n .pm-input-text {\n border-color: ${theme.paneBorderColor};\n }\n .pm-input-button {\n border-color: ${theme.borderBackgroundColor};\n background-color: ${theme.backgroundColor};\n }\n .pm-input-outline-button {\n color: ${theme.textColor};\n border-color: ${theme.textColor};\n background-color: ${theme.backgroundColor};\n }\n .pm-ace-first-line-meta .ace_text-layer .ace_line_group:first-child,\n .pm-ace-first-line-meta .ace_text-layer .ace_line_group:first-child span {\n color: ${theme.lightTextColor} !important;\n }\n .ProseMirror-gapcursor:after {\n border-top: 1px solid ${theme.textColor};\n }\n `;\n\n // set style\n setStyleElement('pm-editor-theme-styles-id', themeCss);\n}\n\nexport function applyPadding(padding: string) {\n const paddingCss = `\n .pm-editing-root-node {\n padding-left: ${padding} !important;\n padding-right: ${padding} !important;\n }\n `;\n setStyleElement('pm-editor-padding-styles-id', paddingCss);\n}\n\nfunction setStyleElement(id: string, css: string) {\n // get access to style element (create if necessary)\n let styleEl = window.document.getElementById(id);\n if (styleEl === null) {\n styleEl = window.document.createElement('style');\n styleEl.setAttribute('id', id);\n styleEl.setAttribute('type', 'text/css');\n window.document.head.appendChild(styleEl);\n }\n\n // set css\n styleEl.innerHTML = css;\n}\n","/*\n * editor-images.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorUIImages } from '../api/ui-images';\n\nimport copyImage from './images/copy.png';\nimport propertiesImage from './images/properties.png';\nimport propertiesDecoImage from './images/properties_deco.png';\nimport propertiesDecoDarkImage from './images/properties_deco_dark.png';\nimport removelinkImage from './images/removelink.png';\nimport runchunkImage from './images/runchunk.png';\nimport runprevchunksImage from './images/runprevchunks.png';\nimport searchImage from './images/search.png';\nimport searchProgressImage from './images/search_progress.gif';\n\nimport omniInsertGenericImage from './images/omni_insert/generic.png';\nimport heading1Image from './images/omni_insert/heading1.png';\nimport heading1DarkImage from './images/omni_insert/heading1_dark.png';\nimport heading2Image from './images/omni_insert/heading2.png';\nimport heading2DarkImage from './images/omni_insert/heading2_dark.png';\nimport heading3Image from './images/omni_insert/heading3.png';\nimport heading3DarkImage from './images/omni_insert/heading3_dark.png';\nimport heading4Image from './images/omni_insert/heading4.png';\nimport heading4DarkImage from './images/omni_insert/heading4_dark.png';\nimport bulletListImage from './images/omni_insert/bullet_list.png';\nimport bulletListDarkImage from './images/omni_insert/bullet_list_dark.png';\nimport orderedListImage from './images/omni_insert/ordered_list.png';\nimport orderedListDarkImage from './images/omni_insert/ordered_list_dark.png';\nimport blockquoteImage from './images/omni_insert/blockquote.png';\nimport blockquoteDarkImage from './images/omni_insert/blockquote_dark.png';\nimport mathInlineImage from './images/omni_insert/math_inline.png';\nimport mathInlineDarkImage from './images/omni_insert/math_inline_dark.png';\nimport mathDisplayImage from './images/omni_insert/math_display.png';\nimport mathDisplayDarkImage from './images/omni_insert/math_display_dark.png';\nimport htmlBlockImage from './images/omni_insert/html_block.png';\nimport htmlBlockDarkImage from './images/omni_insert/html_block_dark.png';\nimport lineBlockImage from './images/omni_insert/line_block.png';\nimport lineBlockDarkImage from './images/omni_insert/line_block_dark.png';\nimport emojiImage from './images/omni_insert/emoji.png';\nimport emojiDarkImage from './images/omni_insert/emoji_dark.png';\nimport commentImage from './images/omni_insert/comment.png';\nimport commentDarkImage from './images/omni_insert/comment_dark.png';\nimport divImage from './images/omni_insert/div.png';\nimport divDarkImage from './images/omni_insert/div_dark.png';\nimport codeBlockImage from './images/omni_insert/code_block.png';\nimport codeBlockDarkImage from './images/omni_insert/code_block_dark.png';\nimport footnoteImage from './images/omni_insert/footnote.png';\nimport footnoteDarkImage from './images/omni_insert/footnote_dark.png';\nimport citationImage from './images/omni_insert/citation.png';\nimport citationDarkImage from './images/omni_insert/citation_dark.png';\nimport crossReferenceImage from './images/omni_insert/cross_reference.png';\nimport crossReferenceDarkImage from './images/omni_insert/cross_reference_dark.png';\nimport symbolImage from './images/omni_insert/symbol.png';\nimport symbolDarkImage from './images/omni_insert/symbol_dark.png';\nimport tableImage from './images/omni_insert/table.png';\nimport tableDarkImage from './images/omni_insert/table_dark.png';\nimport definitionListImage from './images/omni_insert/definition_list.png';\nimport definitionListDarkImage from './images/omni_insert/definition_list_dark.png';\nimport horizontalRuleImage from './images/omni_insert/horizontal_rule.png';\nimport horizontalRuleDarkImage from './images/omni_insert/horizontal_rule_dark.png';\nimport imgImage from './images/omni_insert/image.png';\nimport imgDarkImage from './images/omni_insert/image_dark.png';\nimport linkImage from './images/omni_insert/link.png';\nimport linkDarkImage from './images/omni_insert/link_dark.png';\nimport paragraphImage from './images/omni_insert/paragraph.png';\nimport paragraphDarkImage from './images/omni_insert/paragraph_dark.png';\nimport rawBlockImage from './images/omni_insert/raw_block.png';\nimport rawBlockDarkImage from './images/omni_insert/raw_block_dark.png';\nimport rawInlineImage from './images/omni_insert/raw_inline.png';\nimport rawInlineDarkImage from './images/omni_insert/raw_inline_dark.png';\nimport texBlockImage from './images/omni_insert/tex_block.png';\nimport texBlockDarkImage from './images/omni_insert/tex_block_dark.png';\nimport yamlBlockImage from './images/omni_insert/yaml_block.png';\nimport yamlBlockDarkImage from './images/omni_insert/yaml_block_dark.png';\nimport pythonChunkImage from './images/omni_insert/python_chunk.png';\nimport sqlChunkImage from './images/omni_insert/sql_chunk.png';\nimport d3ChunkImage from './images/omni_insert/d3_chunk.png';\nimport stanChunkImage from './images/omni_insert/stan_chunk.png';\nimport bashChunkImage from './images/omni_insert/bash_chunk.png';\nimport bashChunkDarkImage from './images/omni_insert/bash_chunk_dark.png';\nimport rChunkImage from './images/omni_insert/r_chunk.png';\nimport rChunkDarkImage from './images/omni_insert/r_chunk_dark.png';\nimport rcppChunkImage from './images/omni_insert/rcpp_chunk.png';\nimport rcppChunkDarkImage from './images/omni_insert/rcpp_chunk_dark.png';\n\nimport articleImage from './images/citations/article.png';\nimport articleDarkImage from './images/citations/article_dark.png';\nimport bookImage from './images/citations/book.png';\nimport bookDarkImage from './images/citations/book_dark.png';\nimport broadcastImage from './images/citations/broadcast.png';\nimport broadcastDarkImage from './images/citations/broadcast_dark.png';\nimport dataImage from './images/citations/data.png';\nimport dataDarkImage from './images/citations/data_dark.png';\nimport entryImage from './images/citations/entry.png';\nimport entryDarkImage from './images/citations/entry_dark.png';\nimport imageImage from './images/citations/image.png';\nimport imageDarkImage from './images/citations/image_dark.png';\nimport legalImage from './images/citations/legal.png';\nimport legalDarkImage from './images/citations/legal_dark.png';\nimport mapImage from './images/citations/map.png';\nimport mapDarkImage from './images/citations/map_dark.png';\nimport movieImage from './images/citations/movie.png';\nimport movieDarkImage from './images/citations/movie_dark.png';\nimport otherImage from './images/citations/other.png';\nimport otherDarkImage from './images/citations/other_dark.png';\nimport songImage from './images/citations/song.png';\nimport songDarkImage from './images/citations/song_dark.png';\nimport webImage from './images/citations/web.png';\nimport webDarkImage from './images/citations/web_dark.png';\nimport zoteroOverlayImage from './images/citations/zotero-overlay.png';\nimport localSourcesImage from './images/citations/insert/local-sources.png';\nimport bibliographyImage from './images/citations/insert/bibliography.png';\nimport bibliographyFolderImage from './images/citations/insert/bibliography-folder.png';\nimport zoteroRootImage from './images/citations/insert/zotero-root.png';\nimport zoteroLibraryImage from './images/citations/insert/zotero-library.png';\nimport zoteroCollectionImage from './images/citations/insert/zotero-collection.png';\nimport doiImage from './images/citations/insert/doi.png';\nimport crossRefImage from './images/citations/insert/crossref.png';\nimport pubmedImage from './images/citations/insert/pubmed.png';\nimport dataciteImage from './images/citations/insert/datacite.png';\n\nimport tagDelete from './images/widgets/tag-delete.png';\nimport tagEdit from './images/widgets/tag-edit.png';\n\nexport function defaultEditorUIImages(): EditorUIImages {\n return {\n copy: copyImage,\n properties: propertiesImage,\n properties_deco: propertiesDecoImage,\n properties_deco_dark: propertiesDecoDarkImage,\n removelink: removelinkImage,\n runchunk: runchunkImage,\n runprevchunks: runprevchunksImage,\n search: searchImage,\n search_progress: searchProgressImage,\n omni_insert: {\n generic: omniInsertGenericImage,\n heading1: heading1Image,\n heading1_dark: heading1DarkImage,\n heading2: heading2Image,\n heading2_dark: heading2DarkImage,\n heading3: heading3Image,\n heading3_dark: heading3DarkImage,\n heading4: heading4Image,\n heading4_dark: heading4DarkImage,\n bullet_list: bulletListImage,\n bullet_list_dark: bulletListDarkImage,\n ordered_list: orderedListImage,\n ordered_list_dark: orderedListDarkImage,\n blockquote: blockquoteImage,\n blockquote_dark: blockquoteDarkImage,\n math_inline: mathInlineImage,\n math_inline_dark: mathInlineDarkImage,\n math_display: mathDisplayImage,\n math_display_dark: mathDisplayDarkImage,\n html_block: htmlBlockImage,\n html_block_dark: htmlBlockDarkImage,\n line_block: lineBlockImage,\n line_block_dark: lineBlockDarkImage,\n emoji: emojiImage,\n emoji_dark: emojiDarkImage,\n comment: commentImage,\n comment_dark: commentDarkImage,\n div: divImage,\n div_dark: divDarkImage,\n code_block: codeBlockImage,\n code_block_dark: codeBlockDarkImage,\n footnote: footnoteImage,\n footnote_dark: footnoteDarkImage,\n citation: citationImage,\n citation_dark: citationDarkImage,\n cross_reference: crossReferenceImage,\n cross_reference_dark: crossReferenceDarkImage,\n symbol: symbolImage,\n symbol_dark: symbolDarkImage,\n table: tableImage,\n table_dark: tableDarkImage,\n definition_list: definitionListImage,\n definition_list_dark: definitionListDarkImage,\n horizontal_rule: horizontalRuleImage,\n horizontal_rule_dark: horizontalRuleDarkImage,\n image: imgImage,\n image_dark: imgDarkImage,\n link: linkImage,\n link_dark: linkDarkImage,\n paragraph: paragraphImage,\n paragraph_dark: paragraphDarkImage,\n raw_block: rawBlockImage,\n raw_block_dark: rawBlockDarkImage,\n raw_inline: rawInlineImage,\n raw_inline_dark: rawInlineDarkImage,\n tex_block: texBlockImage,\n tex_block_dark: texBlockDarkImage,\n yaml_block: yamlBlockImage,\n yaml_block_dark: yamlBlockDarkImage,\n python_chunk: pythonChunkImage,\n sql_chunk: sqlChunkImage,\n d3_chunk: d3ChunkImage,\n stan_chunk: stanChunkImage,\n bash_chunk: bashChunkImage,\n bash_chunk_dark: bashChunkDarkImage,\n r_chunk: rChunkImage,\n r_chunk_dark: rChunkDarkImage,\n rcpp_chunk: rcppChunkImage,\n rcpp_chunk_dark: rcppChunkDarkImage,\n },\n citations: {\n article: articleImage,\n article_dark: articleDarkImage,\n book: bookImage,\n book_dark: bookDarkImage,\n broadcast: broadcastImage,\n broadcast_dark: broadcastDarkImage,\n data: dataImage,\n data_dark: dataDarkImage,\n entry: entryImage,\n entry_dark: entryDarkImage,\n image: imageImage,\n image_dark: imageDarkImage,\n legal: legalImage,\n legal_dark: legalDarkImage,\n map: mapImage,\n map_dark: mapDarkImage,\n movie: movieImage,\n movie_dark: movieDarkImage,\n other: otherImage,\n other_dark: otherDarkImage,\n song: songImage,\n song_dark: songDarkImage,\n web: webImage,\n web_dark: webDarkImage,\n zoteroOverlay: zoteroOverlayImage,\n local_sources: localSourcesImage,\n bibligraphy: bibliographyImage,\n bibligraphy_folder: bibliographyFolderImage,\n zotero_library: zoteroLibraryImage,\n zotero_collection: zoteroCollectionImage,\n zotero_root: zoteroRootImage,\n doi: doiImage,\n crossref: crossRefImage,\n pubmed: pubmedImage,\n datacite: dataciteImage,\n },\n widgets: {\n tag_delete: tagDelete,\n tag_edit: tagEdit,\n },\n };\n}\n","/*\n * editor-menus.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorMenuItem, EditorUI } from '../api/ui';\nimport { tableMenu } from '../api/table';\nimport { EditorCommandId, EditorCommand } from '../api/command';\nimport { Editor } from './editor';\n\nexport interface EditorMenus {\n format: EditorMenuItem[];\n insert: EditorMenuItem[];\n table: EditorMenuItem[];\n}\n\nexport function editorMenus(ui: EditorUI, commands: EditorCommand[]) {\n return {\n format: formatMenu(ui, commands),\n insert: insertMenu(ui, commands),\n table: tableMenu(true, ui),\n };\n}\n\nfunction formatMenu(ui: EditorUI, commands: EditorCommand[]) {\n return [\n { command: EditorCommandId.Strong },\n { command: EditorCommandId.Em },\n { command: EditorCommandId.Underline },\n { command: EditorCommandId.Code },\n {\n text: ui.context.translateText('Text'),\n subMenu: {\n items: [\n { command: EditorCommandId.Strikeout },\n { command: EditorCommandId.Superscript },\n { command: EditorCommandId.Subscript },\n { command: EditorCommandId.Smallcaps },\n ],\n },\n },\n { separator: true },\n {\n text: ui.context.translateText('Bullets & Numbering'),\n subMenu: {\n items: [\n { command: EditorCommandId.BulletList },\n { command: EditorCommandId.OrderedList },\n { separator: true },\n { command: EditorCommandId.TightList },\n { separator: true },\n { command: EditorCommandId.ListItemCheck },\n { command: EditorCommandId.ListItemCheckToggle },\n { separator: true },\n { command: EditorCommandId.ListItemSink },\n { command: EditorCommandId.ListItemLift },\n { separator: true },\n { command: EditorCommandId.EditListProperties },\n ],\n },\n },\n { separator: true },\n { command: codeBlockCommand(commands) },\n { command: EditorCommandId.Blockquote },\n { command: EditorCommandId.LineBlock },\n { separator: haveAnyOf(commands, EditorCommandId.Div, EditorCommandId.Span) },\n { command: EditorCommandId.Div },\n { command: EditorCommandId.Span },\n { separator: true },\n {\n text: ui.context.translateText('Raw'),\n subMenu: {\n items: [\n { command: EditorCommandId.HTMLInline },\n { command: EditorCommandId.HTMLBlock },\n { separator: true },\n { command: EditorCommandId.TexInline },\n { command: EditorCommandId.TexBlock },\n { separator: true },\n { command: EditorCommandId.RawInline },\n { command: EditorCommandId.RawBlock },\n ],\n },\n },\n { separator: true },\n { command: EditorCommandId.ClearFormatting },\n { separator: true },\n { command: EditorCommandId.AttrEdit },\n ];\n}\n\nfunction insertMenu(ui: EditorUI, commands: EditorCommand[]) {\n return [\n { command: EditorCommandId.OmniInsert },\n ...(haveAnyOf(commands, EditorCommandId.RCodeChunk, EditorCommandId.PythonCodeChunk)\n ? [\n { separator: true },\n {\n text: ui.context.translateText('Code Chunk'),\n subMenu: {\n items: [\n { command: EditorCommandId.RCodeChunk },\n { separator: true },\n { command: EditorCommandId.PythonCodeChunk },\n { command: EditorCommandId.BashCodeChunk },\n { command: EditorCommandId.RcppCodeChunk },\n { command: EditorCommandId.SQLCodeChunk },\n { command: EditorCommandId.D3CodeChunk },\n { command: EditorCommandId.StanCodeChunk },\n ],\n },\n },\n ]\n : []),\n { separator: true },\n { command: EditorCommandId.Citation },\n { command: EditorCommandId.CrossReference },\n { command: EditorCommandId.Footnote },\n { separator: true },\n { command: EditorCommandId.Image },\n { command: EditorCommandId.Link },\n { command: EditorCommandId.HorizontalRule },\n ...(haveAnyOf(commands, EditorCommandId.DefinitionList)\n ? [\n { separator: true },\n {\n text: ui.context.translateText('Definition'),\n subMenu: {\n items: [\n { command: EditorCommandId.DefinitionList },\n { separator: true },\n { command: EditorCommandId.DefinitionTerm },\n { command: EditorCommandId.DefinitionDescription },\n ],\n },\n },\n ]\n : []),\n { separator: true },\n { command: EditorCommandId.InlineMath },\n { command: EditorCommandId.DisplayMath },\n { separator: true },\n {\n text: ui.context.translateText('Special Characters'),\n subMenu: {\n items: [\n { command: EditorCommandId.Emoji },\n { command: EditorCommandId.Symbol },\n { separator: true },\n { command: EditorCommandId.EnDash },\n { command: EditorCommandId.EmDash },\n { separator: true },\n { command: EditorCommandId.NonBreakingSpace },\n { separator: true },\n { command: EditorCommandId.HardLineBreak },\n ],\n },\n },\n { separator: true },\n { command: EditorCommandId.ParagraphInsert },\n { command: EditorCommandId.CodeBlockFormat },\n { command: EditorCommandId.InsertDiv },\n { command: EditorCommandId.YamlMetadata },\n { separator: true },\n { command: EditorCommandId.Shortcode },\n { separator: true },\n { command: EditorCommandId.HTMLComment },\n ];\n}\n\nfunction haveAnyOf(commands: EditorCommand[], ...ids: EditorCommandId[]) {\n for (const command of commands) {\n if (ids.includes(command.id)) {\n return true;\n }\n }\n return false;\n}\n\nfunction codeBlockCommand(commands: EditorCommand[]) {\n return haveAnyOf(commands, EditorCommandId.CodeBlockFormat)\n ? EditorCommandId.CodeBlockFormat\n : EditorCommandId.CodeBlock;\n}\n","/*\n * table.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorCommandId } from './command';\nimport { EditorUI } from './ui';\n\nexport interface TableCapabilities {\n captions: boolean;\n headerOptional: boolean;\n multiline: boolean;\n}\n\nexport function tableMenu(insert: boolean, ui: EditorUI) {\n return [\n ...(insert ? [{ command: EditorCommandId.TableInsertTable }] : []),\n { command: EditorCommandId.TableAddRowBefore },\n { command: EditorCommandId.TableAddRowAfter },\n { separator: true },\n { command: EditorCommandId.TableAddColumnBefore },\n { command: EditorCommandId.TableAddColumnAfter },\n { separator: true },\n { command: EditorCommandId.TableDeleteRow },\n { command: EditorCommandId.TableDeleteColumn },\n { separator: true },\n { command: EditorCommandId.TableDeleteTable },\n { separator: true },\n {\n text: ui.context.translateText('Align Column'),\n subMenu: {\n items: [\n { command: EditorCommandId.TableAlignColumnLeft },\n { command: EditorCommandId.TableAlignColumnCenter },\n { command: EditorCommandId.TableAlignColumnRight },\n { separator: true },\n { command: EditorCommandId.TableAlignColumnDefault },\n ],\n },\n },\n { separator: true },\n { command: EditorCommandId.TableToggleHeader },\n { command: EditorCommandId.TableToggleCaption },\n ];\n}\n","/*\n * editor-schema.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, NodeSpec, MarkSpec, Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport { ExtensionManager } from './editor-extensions';\nimport { PandocNode } from '../api/node';\nimport { PandocMark } from '../api/mark';\n\nexport function editorSchema(extensions: ExtensionManager): Schema {\n // build in doc node + nodes from extensions\n const nodes: { [name: string]: NodeSpec } = {\n doc: {\n attrs: {\n initial: { default: false },\n },\n content: 'body notes',\n },\n\n body: {\n content: 'block+',\n isolating: true,\n parseDOM: [{ tag: 'div[class*=\"body\"]' }],\n toDOM() {\n return [\n 'div',\n { class: 'body pm-cursor-color pm-text-color pm-background-color pm-editing-root-node' },\n ['div', { class: 'pm-content' }, 0],\n ];\n },\n },\n\n notes: {\n content: 'note*',\n parseDOM: [{ tag: 'div[class*=\"notes\"]' }],\n toDOM() {\n return [\n 'div',\n { class: 'notes pm-cursor-color pm-text-color pm-background-color pm-editing-root-node' },\n ['div', { class: 'pm-content' }, 0],\n ];\n },\n },\n\n note: {\n content: 'block+',\n attrs: {\n ref: {},\n number: { default: 1 },\n },\n isolating: true,\n parseDOM: [\n {\n tag: 'div[class*=\"note\"]',\n getAttrs(dom: Node | string) {\n const el = dom as Element;\n return {\n ref: el.getAttribute('data-ref'),\n };\n },\n },\n ],\n toDOM(node: ProsemirrorNode) {\n return [\n 'div',\n { 'data-ref': node.attrs.ref, class: 'note pm-footnote-body', 'data-number': node.attrs.number },\n 0,\n ];\n },\n },\n };\n extensions.pandocNodes().forEach((node: PandocNode) => {\n nodes[node.name] = node.spec;\n });\n\n // marks from extensions\n const marks: { [name: string]: MarkSpec } = {};\n extensions.pandocMarks().forEach((mark: PandocMark) => {\n marks[mark.name] = mark.spec;\n });\n\n // allow code to exclude marks that don't support input rules\n // (e.g. marks that denote a special escape sequences from markdown,\n // like raw_tex, raw_html, shortcodes, xrefs, math, etc.)\n if (marks.code) {\n const excludeInCode = extensions\n .pandocMarks()\n .filter(mark => mark.noInputRules && mark.name !== 'code')\n .map(mark => mark.name)\n .join(' ');\n marks.code.excludes = excludeInCode;\n }\n\n // return schema\n return new Schema({\n nodes,\n marks,\n });\n}\n"]} \ No newline at end of file +{"version":3,"sources":["src/polyfill/index.ts","src/polyfill/isconnected.ts","src/index.ts","src/polyfill/custom-event.ts","src/editor/editor.ts","src/api/cite.ts","src/api/doi.ts","src/api/ui-dialogs.ts","src/api/pandoc_attr.ts","src/api/extension.ts","src/api/pandoc_capabilities.ts","src/api/pandoc.ts","src/api/quote.ts","src/api/math.ts","src/api/code.ts","src/api/node.ts","src/api/link.ts","src/api/html.ts","src/api/events.ts","src/api/event-types.ts","src/api/pandoc_format.ts","src/api/yaml.ts","src/api/format.ts","src/api/object.ts","src/api/log.ts","src/api/basekeys.ts","src/api/selection.ts","src/api/transaction.ts","src/api/slice.ts","src/api/platform.ts","src/api/outline.ts","src/api/rmd.ts","src/api/mark.ts","src/api/text.ts","src/api/list.ts","src/api/command.ts","src/api/location.ts","src/api/ui.ts","src/api/util.ts","src/api/dom.ts","src/api/scroll.ts","src/api/navigation.ts","src/api/xref.ts","src/api/pandoc_id.ts","src/api/raw.ts","src/api/image.ts","src/api/fixup.ts","src/api/css.ts","src/api/change.ts","src/api/input_rule.ts","src/api/wrap.ts","src/nodes/yaml_metadata/yaml_metadata-title.ts","src/behaviors/outline.ts","src/behaviors/find.ts","src/behaviors/omni_insert/omni_insert.ts","src/api/completion.ts","src/behaviors/omni_insert/omni_insert-completion.tsx","src/api/omni_insert.ts","src/api/placeholder.ts","src/behaviors/completion/completion.ts","src/behaviors/completion/completion-popup.tsx","src/api/widgets/popup.tsx","src/api/promise.ts","src/behaviors/spelling/spelling-interactive.ts","src/behaviors/spelling/spelling.ts","src/api/spelling.ts","src/behaviors/spelling/spelling-realtime.ts","src/pandoc/pandoc_converter.ts","src/api/pandoc_capsule.ts","src/api/base64.ts","src/pandoc/pandoc_to_prosemirror.ts","src/pandoc/pandoc_from_prosemirror.ts","src/api/fragment.ts","src/editor/editor-extensions.ts","src/nodes/text.ts","src/nodes/paragraph.ts","src/api/paragraph.ts","src/nodes/heading.ts","src/nodes/blockquote.ts","src/nodes/code_block.ts","src/nodes/list/list.ts","src/nodes/list/list-commands.ts","src/nodes/list/list-checked.ts","src/nodes/list/list-pandoc.ts","src/nodes/image/image.ts","src/nodes/image/image-dialog.ts","src/nodes/image/image-util.ts","src/nodes/image/image-textsel.ts","src/nodes/image/figure.ts","src/api/decoration.ts","src/nodes/image/image-view.ts","src/nodes/image/image-resize.ts","src/api/widgets/widgets.ts","src/nodes/image/figure-keys.ts","src/nodes/image/image-events.ts","src/nodes/hr.ts","src/nodes/hard_break.ts","src/nodes/null.ts","src/marks/em.ts","src/marks/strong.ts","src/marks/code.ts","src/marks/link/link.ts","src/marks/link/link-command.ts","src/marks/link/link-auto.ts","src/api/clipboard.ts","src/marks/link/link-headings.ts","src/marks/link/link-popup.tsx","src/api/widgets/tooltip.ts","src/api/widgets/button.tsx","src/api/text-popup.ts","src/api/widgets/react.ts","src/api/widgets/decoration.ts","src/behaviors/select_all.ts","src/behaviors/history.ts","src/behaviors/cursor.ts","src/behaviors/clear_formatting.ts","src/behaviors/smarty.ts","src/behaviors/attr_duplicate_id.ts","src/behaviors/trailing_p.ts","src/behaviors/empty_mark.ts","src/behaviors/escape_mark.ts","src/behaviors/code_block_input.ts","src/behaviors/paste_text.ts","src/behaviors/bottom_padding.ts","src/behaviors/insert_symbol/insert_symbol-plugin-symbol.tsx","src/api/unicode.ts","src/behaviors/insert_symbol/insert_symbol-plugin.tsx","src/behaviors/insert_symbol/insert_symbol-popup.tsx","src/api/focus.ts","src/api/widgets/select.tsx","src/api/widgets/text.tsx","src/behaviors/insert_symbol/insert_symbol-grid.tsx","src/behaviors/insert_symbol/insert_symbol-grid-cell.tsx","src/behaviors/insert_symbol/insert_symbol-grid-preview.tsx","src/behaviors/insert_symbol/symbols.ts","src/behaviors/insert_symbol/insert_symbol-plugin-emoji.tsx","src/api/emoji.ts","src/api/emojis-all.ts","src/marks/emoji/emoji.ts","src/marks/emoji/emoji-completion.tsx","src/behaviors/insert_symbol/insert_symbol-emoji-skintone.tsx","src/behaviors/insert_symbol/insert_special_characters.ts","src/behaviors/nbsp.ts","src/behaviors/remove_section.ts","src/marks/strikeout.ts","src/marks/superscript.ts","src/marks/subscript.ts","src/marks/smallcaps.ts","src/marks/underline.ts","src/marks/raw_inline/raw_inline.ts","src/marks/raw_inline/raw_tex.ts","src/api/mark-highlight.ts","src/api/tex.ts","src/marks/raw_inline/raw_html.ts","src/marks/math/math.ts","src/marks/math/math-commands.ts","src/marks/math/math-transaction.ts","src/marks/math/math-highlight.ts","src/marks/math/math-popup.ts","src/marks/math/math-view.ts","src/marks/cite/cite.ts","src/api/bibliography/bibliography.ts","src/api/bibliography/bibliography-provider_local.ts","src/api/path.ts","src/api/bibliography/bibDB.ts","src/api/csl.ts","src/api/crossref.ts","src/api/csl-text.ts","src/api/bibtex/bibtex.ts","src/api/bibtex/fields.ts","src/api/bibtex/language.ts","src/api/bibtex/types.ts","src/api/bibtex/formatting.ts","src/api/bibtex/characters.ts","src/api/bibliography/bibliography-provider_zotero.ts","src/api/zotero.ts","src/marks/cite/cite-completion.tsx","src/api/widgets/completion.tsx","src/marks/cite/cite-bibliography_entry.ts","src/marks/cite/cite-highlight.ts","src/marks/cite/cite-completion_doi.tsx","src/api/widgets/completion-detailed.tsx","src/marks/cite/cite-doi.ts","src/marks/cite/cite-popup.tsx","src/marks/cite/cite-commands.ts","src/behaviors/insert_citation/insert_citation.tsx","src/api/widgets/tag-input.tsx","src/api/widgets/navigation-tree.tsx","src/api/widgets/dialog-buttons.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel.ts","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-bibliography.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-typeahead-search.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-list.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-list-item.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-doi.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-latent-search.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-list-item-detailed.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-crossref.tsx","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-pubmed.tsx","src/api/pubmed.ts","src/behaviors/insert_citation/source_panels/insert_citation-source-panel-datacite.tsx","src/api/datacite.ts","src/behaviors/insert_citation/insert_citation-bibliography-picker.tsx","src/api/widgets/checkbox-input.tsx","src/marks/span.ts","src/marks/xref/xref.ts","src/marks/xref/xref-completion.tsx","src/marks/xref/xref-popup.tsx","src/marks/raw_inline/raw_html_comment.ts","src/marks/shortcode.ts","src/nodes/footnote/footnote.ts","src/api/shortcode.ts","src/nodes/footnote/footnote-editor.ts","src/nodes/footnote/footnote-transaction.ts","src/nodes/raw_block.ts","src/nodes/yaml_metadata/yaml_metadata.ts","src/nodes/yaml_metadata/yaml_metadata-capsule.ts","src/nodes/rmd_chunk/rmd_chunk.ts","src/nodes/rmd_chunk/rmd_chunk-image.ts","src/nodes/rmd_chunk/rmd_chunk-capsule.ts","src/nodes/div.ts","src/nodes/line_block.ts","src/nodes/table/table.ts","src/nodes/table/table-commands.ts","src/nodes/table/table-nodes.ts","src/nodes/table/table-pandoc.ts","src/nodes/table/table-columns.ts","src/nodes/table/table-capsule.ts","src/nodes/table/table-contextmenu.ts","src/nodes/table/table-paste.ts","src/nodes/definition_list/definition_list.ts","src/nodes/definition_list/definition_list-commands.ts","src/nodes/definition_list/definition_list-insert.ts","src/nodes/definition_list/definition-list-keys.ts","src/nodes/definition_list/definition_list-inputrule.ts","src/api/position.ts","src/nodes/definition_list/definition_list-pandoc.ts","src/nodes/shortcode_block.ts","src/nodes/html_preserve.ts","src/optional/ace/ace.ts","src/api/cursor.ts","src/optional/ace/ace-render-queue.ts","src/optional/ace/ace-placeholder.ts","src/optional/ace/ace-node-views.ts","src/behaviors/attr_edit/attr_edit.ts","src/behaviors/attr_edit/attr_edit-command.ts","src/behaviors/attr_edit/attr_edit-decoration.tsx","src/editor/editor-theme.ts","src/editor/editor-images.ts","src/editor/editor-menus.ts","src/api/table.ts","src/editor/editor-schema.ts"],"names":["_e9a6","f","r","id","cached","m","exports","Object","isFrozen","input","default","module","editor_1","Editor","UITools","mod","__esModule","value","custom_event_1","__importDefault","isconnected_1","t","_","label","ops","push","op","pop","trys","body","call","thisArg","e","y","done","__spreadArrays","this","s","i","il","arguments","length","Array","k","a","j","jl","defineProperty","prosemirror_inputrules_1","prosemirror_keymap_1","prosemirror_model_1","prosemirror_state_1","prosemirror_view_1","prosemirror_utils_1","cite_1","ui_dialogs_1","find_1","completion_1","spelling_interactive_1","spelling_realtime_1","pandoc_converter_1","EditorCommands","command_1","EditorCommandId","attr","propsToInput","attrPropsToInput","inputToProps","attrInputToProps","pandocAutoIdentifier","text","pandoc_id_1","image","validUnits","percentUnit","css_1","kPercentUnit","unitToPixels","image_1","pixelsToUnit","roundUnit","format","parseFormatConfig","pandoc_format_1","pandocFormatConfigFromCode","citation","citeUI","PluginKey","parent","context","options","pandocFormat","pandocCapabilities","_this","maxContentWidth","events","events_1","DOMEditorEvents","keybindings","initExtensions","editorSchema","extensions","EditorState","create","initialDoc","attributes","dispatchTransaction","bind","EditorDOMParser","schema","view","dom","add","editor_theme_1","defaultTheme","PandocConverter","server","pandoc","setAttribute","addEventListener","event_types_1","ScrollEvent","pandocFmt","editor","_a","spellCheck","codeEditor","rmdImagePreview","hideFormatComment","className","codeChunks","bookdownXRef","bookdownPart","blogdownMathInCode","rmdExtensions","hugoExtensions","__assign","shortcodes","docTypes","ui","images","defaultImages","omni_insert","sent","resolve","event","handler","subscribe","eventName","title","setTitle","state","setMarkdown","markdown","emitUpdate","Promise","doc","line_wrapping","unrecognized","unparsed_meta","loc","tr_1","i_1","getMarkdownTr","canonical","location","pandocConverter","toProsemirror","result","isInitialDoc","plugins","updateState","getEditingLocation","pos","nodeSize","dispatch","applyFixups","fixup_1","FixupContext","Load","emitEvent","StateChangeEvent","tr","getMarkdownCode","prototype","attrs","initial","getMarkdown","__generator","code","outline_1","getEditingOutlineLocation","getHTML","getTitle","getSelection","navigation_id","navigationIdForSelection","setEditingLocation","outlineLocation","previousLocation","getOutline","getFindReplace","selectCurrent","selectFirst","selectNext","selectPrevious","replace","getSpellingDoc","pandocMarks","spelling","spellingInvalidateAllWords","invalidateAllWords","spellingInvalidateWord","word","invalidateWord","extensionFixups","getSelectedText","replaceSelection","marks","selection","$from","replaceSelectionWith","trSetSel","setSelection","sel","getYamlFrontMatter","nodes","yaml_metadata","yaml_1","yamlFrontMatter","applyYamlFrontMatter","yaml","focus","blur","insertChunk","chunkPlaceholder","rowOffset","colOffset","navigate","type","recordCurrent","animate","NavigateEvent","nav","resize","applyFixupsOnResize","ResizeEvent","initFn","getMenus","commands","commandKeys","map","command","keymap","isActive","isEnabled","plural","execute","keepFocus","applyTheme","theme","classList","toggle","darkMode","setMaxContentWidth","maxWidth","minPadding","minContentPadding","syncContentWidth","setKeybindings","keyBindings","reconfigure","createPlugins","getEditorFormat","getPandocFormat","getPandocFormatConfig","isRmd","pandocFormatConfigFromDoc","lastTrSelectionOnly","selectionSet","docChanged","apply","storedMarksSet","getMeta","transaction_1","kFixupTransaction","UpdateEvent","outline_2","previousOutline","OutlineChangeEvent","DispatchEvent","eventType","detail","emit","editor_extensions_1","pandocExtensions","navigation","registerCompletionExtension","register","omni_insert_1","omniInsertExtension","omniInserters","markFilter","registerRealtimeSpelling","registerPlugins","realtimeSpellingPlugin","baseKeysPlugin","baseKeys","appendTransactionsPlugin","appendTransactions","hooks","Plugin","inputRulesPlugin","input_rule_1","markInputRuleFilter","plugin","inputRules","rules","handleTextInput","props","from","to","domEventsPlugin","key","handleDOMEvents","FocusEvent","keydown","prefs","tabKeyMoveFocus","pluginKeys","forEach","keys","ctrlKeyCodes","keyCombo","match","keyCode","toUpperCase","prosemirrorKeydownHandler","keydownHandler","keybindingsPlugin","keyEvent","ctrlKey","keyCommand","defaultKeys","clientWidth","applyPadding","LayoutEvent","fixups","fixup","nodeFromJSON","content","__awaiter","fromProsemirror","outlineNode","reverse","find","node","_super","DOMParser","fromSchema","parse","parseSlice","preserveWhitespace","kInvalidCiteKeyChars","createUniqueCiteId","existingIds","baseId","charCodeAt","char","asciiOnlyBaseId","includes","proposedId","count","safeBaseId","String","fromCharCode","suggestCiteId","csl","citeIdLeading","author","family","literal","shortTitle","substr","Math","min","issued","yearIssued","datePart","formatForPreview","pairs","name","undefined","dateParts","formatIssuedDate","containerTitle","volume","page","cslAny","charAt","slice","URL","DOI","doi_1","urlForDOI","formatAuthors","authors","maxLength","_b","_c","_d","previous","endsWith","index","current","substring","array","addAuthorOrEtAl","previousAuthorStr","newAuthorStr","authorStr","etAlStr","lastSpace","lastIndexOf","etAl","date","singleDatePart","citeProps","suggestedId","previewFields","kCrossrefMatches","findDOI","token","regex","hasDOI","doi","asPandocClass","clz","asHtmlId","startsWith","asHtmlClass","kAlertTypeInfo","kAlertTypeWarning","keyvalue","classes","split","style","pandoc_attr_1","pandocAttrKeyvalueFromText","kv","join","kPandocAttrId","kPandocAttrClasses","kPandocAttrKeyvalue","separator","convertedText","inQuotes","ch","trim","line","parts","kWidthAttrib","kHeightAttrib","kStyleAttrib","kCodeBlockText","kSpanAttr","kSpanChildren","pandocAttrSpec","pandocAttrFrom","pandocAttr","pandocAttrInSpec","spec","tok","c","pandocAttrToDomAttr","marker","domAttr","el","forceAttrs","excludedNames","includedNames","hasAttribute","getAttribute","filter","val","resolveCurrent","remainder","partitioned","partition","base","extension_1","extensionIfEnabled","extension","kPandocAttrExtensions","extensionEnabled","getPandocCapabilities","getCapabilities","version","api_version","output_formats","pandoc_1","parsePandocListOutput","highlight_languages","PandocTokenType","quote_1","math_1","code_1","link_1","tokens","hasOwnProperty","isArray","mapValue","mapToken","mappedTok","tokenHasChildren","imageAttributesAvailable","link_attributes","raw_html","output","entry","kRawBlockFormat","stringifyTokens","unemoji","elem","Str","Space","SoftBreak","LineBreak","kLinkChildren","Span","Quoted","kQuoteType","stringifyMath","Code","kCodeText","forEachToken","mapTokens","tokenTextEscaped","marksByPriority","markWriters","aPriority","priority","QuoteType","DoubleQuote","quotesForType","kSingleQuotes","SingleQuote","kSingleQuoteRegEx","RegExp","begin","end","kDoubleQuotes","fancyQuotesToSimple","Inline","MathType","typeset","math","isConnected","then","timerId_1","setInterval","clearInterval","kMathType","clipboardTextParser","$context","_i","codeViews","codeViewType","codeView","createFromPastePattern","test","textNode","codeNode","nodeType","createAndFill","Slice","Fragment","n","p","canInsertNode","canInsertNodeAtPos","asSelection","$pos","d","depth","canReplaceWith","findTopLevelBodyNodes","predicate","findNodeOfTypeInSelection","foundNode","lastNode","last","nodeIsActive","findSelectedNodeOfType","findParentNode","kLinkTarget","LinkType","ids","headings","findChildren","findChildrenByType","heading","level","textContent","escapeHTMLAttribute","div","appendChild","innerHTML","kHTMLCommentRegEx","isHTMLComment","html","noEmptyAttribs","tag","attribs","selfClosing","DOMSerializer","serializeNode","generateHTML","matchPandocFormatComment","pandocFormatConfigFromYamlInCode","firstYamlBlock","object_1","findValue","yamlMarkdownOptions","yamlFormatConfig","readPandocFormatConfig","mdExtensions","formatConfig","pandocFormatConfigFromCommentInCode","keyValueRegEx","field","fields","keyValueMatch","variables_1","source","obj","toString","mode","asString","rmd_extensions","doctype","str","references","references_location","references_prefix","prefix","toLowerCase","asBoolean","parseExtensions","re","enabled","exec","splitPandocFormatString","optionsPos","indexOf","commonmarkExtensions","rawHTML","format_1","kHugoDocType","kMarkdownGithubFormat","kGfmFormat","kCommonmarkFormat","kCommonmarkXFormat","yamlMetadataNodes","pandocFormatConfigFromYamlInDoc","foundFirstRawInline","config","pandocFormatConfigFromCommentInDoc","warnings","baseName","formatOptions","variant","validOptionNames","fullName","includeTexMathDollars","invalidFormat","invalidOptions","pandocMode","kMarkdownMmdFormat","kMarkdownStrictFormat","kMarkdownVariants","listExtensions","option","pandocFormatWith","hasFencedCodeBlocks","backtick_code_blocks","fenced_code_blocks","isYamlMetadataNode","kYamlMetadataTitleRegex","firstYaml","firstYamlNode","yamlText","updatedYaml","replaceRangeWith","updatedYamlNode","insert","titleFromYamlMetadataNode","titleMatch","yamlMetadataNameValueRegex","valueMatch","parseYaml","kFirstYamlBlockRegex","yamlCode","js_yaml_1","safeLoad","onWarning","log_1","logException","stripYamlDelimeters","yamlParsed","safeDump","object","some","ignoreKey","homeKey","editingNode","head","coordsAtPos","beginDocPos","isOnPreviousLine","setTextSelection","endKey","node_1","editingRootNode","start","endDocPos","top","bottom","arrowBodyNodeBoundary","dir","endOfTextblock","selection_1","selectionIsBodyTopLevel","side","$head","nextRootNode","editingRootNodeClosestToPos","nextPos","currentRootNode","BaseKey","Enter","prosemirror_commands_1","splitBlock","liftEmptyBlock","createParagraphNear","Backspace","selectNodeBackward","joinBackward","deleteSelection","Tab","ShiftTab","Delete","selectNodeForward","joinForward","platform_1","kPlatformMac","Home","End","ArrowLeft","ArrowUp","ArrowDown","ModArrowDown","endTopLevelBodyNodeBoundary","undoInputRule","x","commandMap","baseKey","unshift","values","_e","isTextblock","cursorOffset","parentOffset","nodeText","prosemirror_gapcursor_1","selectionIsWithinRange","range","anchor","nodeWithPos","selectionHasRange","parentNode","GapCursor","NodeSelection","selectionIsEmptyParagraph","slice_1","kPasteTransaction","kSetMarkdownTransaction","kNavigationTransaction","kInsertSymbolTransaction","kInsertCompletionTransaction","MarkTransaction","addMark","mark","removeStoredMark","insertText","transactionsDocChanged","transactions","transaction","transactionsChangeSet","oldState","newState","transactions_1","changeSet","addSteps","mapping","maps","complete","oldSize","old","childCount","curSize","cur","outer","scan","offset","child","sameMarkup","nodesBetween","size","step","sliceContentLength","handlers","handlers_1","nodeAt","nodeFilter","haveChange","changes","change","fromA","toA","checkForChange","append","_loop_1","handlers_2","trTransform","prosemirror_transform_1","Transform","transactionsAreTypingChange","hasNode","descendants","navigator","platform","outlineNodes","bodyNodes","bodyNode","bullet_list","ordered_list","list_item","listItemNode","rmd_chunk","rmdChunkNode","isOutlineNode","kYamlMetadataOutlineItemType","itemsWithPos","getDocumentOutline","item","active","position","kRmdchunkOutlineItemType","chunk","rmd_1","rmdChunkEngineAndLabel","kHeadingOutlineItemType","foundActive","items","getOutlineNodes","findParentNodeOfType","table","activeRmdChunk","rmdNode","rmdChunk","previousRmdChunks","chunks","rmdChunkNodes_1","lines","trimLeft","meta","matchLang","lang","idx","canInsertRmdChunk","insertRmdChunk","toggleBlockType","paragraph","list_1","precedingListItemInsertPos","offsetChars","reduce","rmdText","util_1","uuidv4","prevListItemPos","precedingListItemInsert","selPos","activeChunk","localeCompare","sensitivity","kEvalFalseRegEx","haveTableCellsWithInlineRcode","table_cell","table_header","cell","rangeHasMark","markedNode","markedRange","mark_1","getMarkRange","textBetween","text_1","link","startIndex","startPos","endIndex","isInSet","endPos","markIsActive","empty","storedMarks","markItem","markType","findChildrenByMark","removeMark","validLength","nd","markRange","detectAndApplyMarks","mergedTextNodes","_node","_pos","allowsMarkType","refText","lastIndex","textNodes","nodeIndex","isText","str1","str2","ListType","extendStatics","__extends","b","setPrototypeOf","__proto__","__","constructor","assign","prosemirror_schema_list_1","ui_1","ProsemirrorCommand","omniInsert","MarkCommand","toggleMarkType","NodeCommand","BlockCommand","blockType","toggleType","WrapCommand","wrapType","toggleWrap","scrollIntoView","InsertCharacterCommand","codeRange","defaultToggleMark","pandocAttrAvailable","wrapIn","listType","itemType","blockRange","$to","parentList","isList","validContent","setNodeMarkup","tight","listSpacing","kListSpacingTight","exitNode","sameParent","$anchor","allowKey","endCaptionPos","above","after","abs","dom_1","outlineItemSimillarToNode","outlineItem","docOutlneNode","nodeA","nodeB","scrollTop","docOutlineLocationNode","documentOutline","docOutlineNode","locationIsBetweenDocOutlineNodes","restoreSelection","scroll_1","scrollToPos","cs","getComputedStyle","asNumber","parseFloat","paddingX","paddingLeft","paddingRight","paddingY","paddingTop","paddingBottom","borderY","borderTopWidth","borderBottomWidth","width","offsetWidth","borderX","height","offsetHeight","onElementRemoved","container","onRemoved","mutationsList","mutation","removedNodes","center","parentDiv","findParentNodeOfTypeClosestToPos","resultPos","before","resultNode","nodeDOM","scroller","zenscroll_1","createScroller","containerEl","duration","onDone","intoView","HTMLElement","editingRoot","xref_1","navigateToId","navigateToHref","href","navigateToXRef","xref","xrefPosition","xrefPos","prevPos","max","dest","parentElement","navigateToPos","NavigationType","navigateTo","Pos","Id","Href","navigateToHeading","XRef","raw_1","xrefKey","suffix","colonPos","xrefTypeAndId","xrefInfo","id_1","locator_1","xrefPositionLocators","markType_1","hasXRef","h2","headingLocator","h3","h4","h5","h6","fig","nodeTypes","rmdChunkHasXRef","tab","kTexFormat","cnj","thereomLocator","def","engine","pattern","pandocAsciify","newch","chars","len","asciify","gfmAutoIdentifier","editRawBlockCommand","raw_block","setBlockType","action","rawBlock","raw","prevSel","createRawNode","asyncEditRawBlock","containerWidth","kPixelUnit","ImageType","isValidImageSizeUnit","unit","kValidUnits","imageSizePropWithUnit","prop","isNaturalAspectRatio","dims","defaultValue","naturalWidth","naturalHeight","pixels","round","attrib","_match","p1","p2","removeStyleAttrib","extractSizeStyles","keyvalues","newKeyvalues","getValue","pair","_attrib","setProperty","replaceClassWithStyle","contains","remove","removeAttribute","children_1","children","EditorChangeType","diff_match_patch_1","diffChars","timeout","dmp","diff_match_patch","Diff_Timeout","diff_main","diff","DIFF_INSERT","Insert","DIFF_EQUAL","DIFF_DELETE","regexp","getAttrs","InputRule","Function","textStart","delete","markInputRule","delimiterMarkInputRule","prefixMask","delim","contentPattern","textEnd","maskOffset","noInputRules","marksWithNoInputRules","marksInRange_1","maskedMarkTypes","maskedMarkTypes_1","conditionalWrappingInputRule","wrappingRule","wrappingInputRule","joinPredicate","wrapSentencesTransform","sentence","hardBreak","hardBreakPos","wrapSentences","titleFromState","yamlNodes_2","yamlMetadataTitlePlugin","init","_config","foundTitle","titleLine","yamlNode","hasOutlineIdsTransaction","usedIds","Set","outlineId","setMeta","GoToNextSection","goToOutlineCommand","GoToPreviousChunk","editorOutline","transactionsHaveChange","transactionsAffectOutline","targetType","outline","target","navigation_1","sequence","Map","rootOutlineItem","defaultLevel","typename","sequenceLast","getState","FindPlugin","instance","DecorationSet","updating","update","prevState","clearResultObserver","isResultSelected","scrollToSelectedResult","decorations","resultElement","resultObserverTimer","term","escape","updateResults","selectResult","afterSelection","matchesTerm","selectedText","wrap","searchTo","decorationSet","withResultUpdates","searchFrom","nextDecoration","lastDecoration","tr_3","decoration","tr_4","selectionMarks","marksAcross","replaceAll","replaced","hasTerm","tr_5","clear","kAddToHistoryTransaction","resultDecorations","search","findRegEx","Decoration","inline","class","TextSelection","watchForSelectedResult","MutationObserver","records","observer","ele","isResultNode","observe","childList","window","setTimeout","resultObserver","disconnect","clearTimeout","querySelector","scrollElement","nextParent","offsetParent","caseSensitive","findPlugin","inclusive","parseDOM","toDOM","readers","writer","writeInlines","OmniInsertCommand","inputRuleFilter","completionHandlers","omni_insert_completion_1","omniInsertCompletionHandler","OmniInsert","selectionAllowsCompletions","kCompletionDefaultMaxVisible","prevHandler","scope","Node","replacement","omniInsertCompletions","inserter","keywords","keyword","sort","thenby_1","firstBy","omniInsertGroupCompare","thenBy","omniInsertPriorityCompare","direction","completion","deleteRange","selectionOffset","removeCommandText","component","OmniInserterView","kOmniInsertRegex","isOmniInsertCommandActive","query","placeholder_1","placeholderDecoration","translateText","completions","OmniInsertGroup","placeholder","pluginKey","set","emptyNode","textBefore","completionTextBeforeCursor","prevToken","isPaste","scrollUnsubscribe","removeEventListener","clearCompletions","pluginState","handled","horizontal","completionsActive","kbEvent","insertCompletion","selectedIndex","renderCompletions","forwardKey","completionPageSize","preventDefault","stopPropagation","promise_1","PromiseQueue","resetSelection","setAllCompletions","updatedCompletions","requestVersion_1","setDisplayedCompletions","displayedCompletions","updateCompletions","completionStream_1","stream","filteredCompletions","allCompletions","requestAllCompletions_1","hideNoResults","completionPopup","completion_popup_1","createCompletionPopup","renderCompletionPopup","performCompletionReplacement","CompletionPlugin","__importStar","document","createElement","zIndex","popup","completionPopupSize","positionStyles","selectionCoords","left","innerHeight","innerWidth","cursorCoords","completionPopupPositionStyles","applyStyles","render","react_1","CompletionPopup","destroyCompletionPopup","unmountComponentAtNode","concat","popup_1","Popup","CompletionList","kCompletionDefaultItemHeight","useRef","containerRef","scrollToRow","getElementsByClassName","ref","completionCount","header","completionHeader","headerProps","message","lineHeight","colSpan","completionsHeader","itemHeight","kNoResultsHeight","noResults","completionsNoResults","verticalCompletions","itemEventHandler","completionItemCell","onClick","onMouseMove","onHover","cellWidths","maxVisible","kCompletionDefaultWidth","headerHeight","horizontalCellWidths","total","contentEditable","queue","catch","err","running","reject","dequeue","spelling_1","excludedMarks","onCheckBegin","getWords","excluded","spellingDocPlugin","createAnchor","getText","wordRange","fromCoords","toCoords","spellingDocKey","get","SpellingDocPlugin","checking","anchors","setPosition","getPosition","SpellingAnchor","onCheckEnd","excludeWord","classifier","findBeginWord","findEndWord","beginPos","classifyCharacter","currentPos","advanceToWord","endWordPos","wordText","words","breakWords","hasNext","next","shift","spellcheckerWord","kCharClassWord","kCharClassBoundary","kCharClassNonWord","spelling_2","hasFocus","realtimeEnabled","hasBeenFocused","word_1","wordDecos","decos","prosemirror_changeset_1","ChangeSet","steps","AddMarkStep","RemoveMarkStep","markStep","markRanges","removeRanges_1","fromPos","toPos","addRanges_1","fromB","toB","cursorDecos","cursor","realtimeSpellingKey","contextmenu","spellingSuggestionContextMenuHandler","focusUnsubscribe","updateSpelling","v_1","excludeCursor","ranges","rangeMap","incorrectWords_1","checkWords","wordsToCheck","incorrectWord","ranges_1","menuItems","showContextMenu","clientX","clientY","schema_1","posAtDOM","deco","from_1","to_1","word_2","suggestionList","suggestions","suggestion","menuAction","ignoreWord","pandocPreprocessors","pandocPostprocessors","pandocTokensFilters","pandocBlockReaders","pandocInlineHTMLReaders","original","autoIds","gfm_auto_identifiers","adjustedFormat","preprocessor","blockCapsuleFilters","pandoc_capsule_1","pandocMarkdownWithBlockCapsules","pandoc_to_prosemirror_1","pandocToProsemirror","ast","tokensFilters","blockReaders","inlineHTMLReaders","postprocessor","pandocOptions","referenceLocation","disabledTableTypes","disabledFormatOptions","atxHeaders","dpi","column","parseInt","wrapOptions","astToMarkdown","ext","newFormat","kBlockCapsuleSentinel","handleText","encodedBlockCapsuleRegex","flags","envelopeLen","base64_1","base64Decode","record","fieldValue","blockCapsuleSourceWithoutPrefix","capsuleFilter","p3","p4","originalPos","positions","discard","extract","defaultExtractor","capsule","base64Encode","enclose","encodedRecord","decodeBlockCapsuleText","filters","blockCapsuleTextHandler","textFilter","stripPrefix","CodeBlock","RawBlock","parsePandocBlockCapsule","blockCapsuleParagraphTokenHandler","tokenRegex","Para","codeUnits","Uint16Array","Uint8Array","buffer","bytes","binary","Parser","createHandlers","ParserState","parser","closeNode","addNode","openMark","closeMark","writeText","hasInlineHTMLWriter","writeTokens","logUnrecognized","isNodeOpen","Null","blocks","prevTok","lineBreaks","columnBreaks","sentenceBreaks","targetAst","heading_ids","hasShortcutHeadingLinks","equalsIgnoreCase","autoIdentifier","ascii_identifiers","headingIds","has","toLocaleLowerCase","Link","astBlocks","Header","pandocAttrReadAST","heading_1","kHeadingAttr","kHeadingLevel","kHeadingChildren","resolveHeadingIds","lineWrapping","targetTokens","writeToken","blockCapsule","writeNode","reader","getChildren","this_1","block","blockReaders_1","blockReader","nodeType_2","openNode","Error","code_block","kCodeBlockAttr","readers_1","stack","Mark","none","unrecognizedTokens","merged","info","isInline","addToSet","removeFromSet","openNoteNode","note","maybeMerge","sameSet","pandocFromProsemirror","apiVersion","nodeWriters","notesNode","PandocWriter","writeNodes","notes","initEscapeCharacters","write","writeSpaces","spaceAfter","output_1","spaceBefore","outputText","trimRight","writeArray","writeAttr","preventEscapeCharacters","flushTextRun","textRun_1","smart","manualEscapeCharacters","writeNote","Note","noteBody","fragment","currentChild","childIndex","markedNodes","nextNode","activeMarks","md","fragment_1","fragmentText","escapeSymbols","escaped","escapeCharacters","RawInline","withOption","fill","tex_math_single_backslash","allEscapeCharacters","emjojiMark","emoji","emojihint","paragraph_1","blockquote_1","code_block_1","figure_1","hr_1","hard_break_1","null_1","em_1","strong_1","history_1","select_all_1","cursor_1","clear_formatting_1","smarty_1","attr_duplicate_id_1","trailing_p_1","empty_mark_1","escape_mark_1","code_block_input_1","manager","ExtensionManager","paste_text_1","bottom_padding_1","insert_symbol_plugin_symbol_1","insert_special_characters_1","nbsp_1","remove_section_1","footnote_1","yaml_metadata_1","rmd_chunk_1","table_1","definition_list_1","raw_block_1","shortcode_block_1","html_preserve_1","superscript_1","code_2","codeViewClipboardPlugin","tokensFilter","inlineHTMLReader","blockCapsuleFilter","pandocReaders","collectFrom","pandocMarkWriters","pandocNodeWriters","pandocNodes","code_view","views","attrEditors","collect","appendMarkTransactions","appendMarkTransaction","collector","visitor","results","flatMap","quote","group","Plain","insertParagraph","HeadingCommand","headingCommandFn","heading1OmniInsert","heading1","heading1_dark","heading2OmniInsert","headingOmniInsert","heading2","heading2_dark","heading3","heading4OmniInsert","heading4","heading4_dark","headingName","pandocAttrSupported","pandocAttrParseDom","header_attributes","mmd_header_identifiers","headingAttrs","headingAttr","data-link","partMatch","cut","writeBookdownH1","Heading1","Heading5","Heading6","textblockTypeInputRule","kHeadingLevels","pandocAttrParseText","emptyHeadingPlaceholderPlugin","CodeBlockFormat","codeBlockFormatCommandFn","languages","code_block_dark","fenced_code_attributes","potentialLang","codeBlockProps","dialogs","editCodeBlock","applyProps","newProps","propsWithLangClass","codeBlock","tags","right","editFn","codeNodeSpec","hasAttr","codeBlockLang","attrEditFn","codeBlockAttrEdit","CodeBlockFormatCommand","exitCode","ListNumberStyle","listAttrEdit","capabilities","list_commands_1","editListPropertiesCommandFn","task_lists","fancy_lists","startnum","tasks","checked","list_pandoc_1","readPandocList","number_delim","ListNumberDelim","DefaultDelim","order","number_style","typeToNumberStyle","numberDelim","fancy","DefaultStyle","Decimal","UpperAlpha","LowerRoman","UpperRoman","Example","OrderedList","writePandocOrderedList","nodeViews","ListCommand","BulletList","bulletListOmniInsert","orderedListOmniInsert","ListItemSink","sinkListItem","ListItemLift","liftListItem","ListItemSplit","splitListItem","list_checked_1","CheckedListItemCommand","CheckedListItemToggleCommand","basekeys_1","isNotInHeading","tightFn","listItemType","autoJoin","toggleList","TightListCommand","CheckedListItemNodeView","getPos","disabled","editable","ev","contentDOM","checkedListItemCommandFn","itemNode","setItemChecked","checkedListItemToggleCommandFn","check","baseInputRule","fragmentWithCheck","raw_inline","mappedTokens","lastWasChecked","writeListItemInlines","example","childAttrs","childWithChecked","writePandocListItem","figure","imageAttributes","src","decodeURI","readPandocTitle","alt","requireHTML","writeRawMarkdown","linkTo","writeFigure","writeLink","imageInlineHTMLReader","isImage","image_util_1","inlineHTMLIsImage","imageAttrsFromHTML","imageDOMOutputSpec","imageDOMAttributes","parseFromString","imageCommand","editorUI","img","imgDimensions","selectionIsImageNode","pandocImageHandler","imagePandocOutputWriter","imageNodeAttrsSpec","imageAttr","imageAttrsFromDOM","Image","attr_edit","noDecorator","_schema","imageTextSelectionPlugin","imageEventsPlugin","imagePropsWithSizes","linkMark","Figure","editImage","units","isNaturalHeight","newImage","imageProps","insertAndSelectNode","partitionedKeyvalue","sizeWithUnit","ensureContainerWidth","imagePos","findParentNodeClosestToPos","domAtPos","resizeContainer","elementInnerDimensions","resizeEl","definition_list","convertImagesToFigure","imagesToFiguresTransform","linkAttrs","getMarkAttrs","mappedImagePos","writerHasProhibitedFigureParent","contentElement","kRawBlockContent","html_1","isSingleLineHTML","fixupContext","appendTransaction","figureKeys","image_view_1","imageNodeViewPlugins","ImageNodeView","editorEvents","unregisterWatchImg","implicitFigures","implicit_figures","resizeUI","selectOnClick","imgBroken","onerror","onclick","ondblclick","image_dialog_1","imageDialog","imageDimensionsFromImg","updateImg","figcaption","noPropagateClick","manageFigcaption","ondragstart","initResizeContainer","updateImageSize","destroy","clearSizeOnVisibleTimer","detachResizeUI","selectNode","draggable","image_resize_1","isResizeUICompatible","detach","attachResizeUI","ignoreMutation","mapResourceToURL","updateImageViewSize","isFigure","sizeOnVisibleTimer","imageContainerWidth","noImplicitFigures","emptyFigcaption","selectionInFigcaption","hide","display","minHeight","margin","widthWithUnit","heightWithUnit","overflow","incompatibleWidth","incompatibleHeight","imageNode","imgContainerWidth","updateImageNodeFromShelf","hasPercentWidth","updateImageNodeSize","shelf","onInit","onWidthChanged","onHeightChanged","onUnitsChanged","onEditImage","uiImages","widgets_1","createPopup","editorContainer","updatePosition","editorBox","getBoundingClientRect","imageBox","editingScrollContainerEl","editingRootScrollContainerElement","positionTimer","panel","createHorizontalPanel","addToPanel","widget","addHorizontalPanelCell","paddingSpan","createInputLabel","wLabel","createTextInput","inputClasses","hLabel","hInput","onchange","hAutoLabel","unitsSelect","checkboxWrapper","lockCheckbox","lockLabel","createImageButton","properties","onload","manageUnitsUI","percentSizing","isNaN","getDim","wInput","shelfSizeFromImage","setWidth","setHeight","lock","resizeShelf","sync","lockRatio","prevUnits","widthPixels","widthInUnits","handle","onSizing","onSizingComplete","setPointerCapture","pageX","movedX","startX","movedY","pageY","startY","startWidth","startHeight","onPointerUp","havePointerEvents","releasePointerCapture","pointerId","onPointerMove","onPointerDown","resizeHandle","cssFloat","marginRight","marginLeft","liftStyle","liftImgStyle","widthProp","heightProp","kAlignAttrib","verticalAlign","onDestroyed","observer_1","subtree","button","imageEl","optionEl","widthChars","atEnd","selectFigureCaption","selectFigure","Selection","near","verticalArrowCanAdvanceWithinTextBlock","isWithinEmptyCaption","parentIndex","previousNode","parentTextBlock","figureSelection","nodePos","arrowHandler","ArrowRight","clipboardEvent","clipboardData","types","clipboardUris","uris","handleImageUris","getData","dragEvent","dataTransfer","coordinates","posAtCoords","uriList","droppedUris","imageUris","uri","drop","imageDrop","handlePaste","imagePaste","Content","horizontal_rule_dark","horizontal_rule","HorizontalRule","insertNode","hrOmniInsert","br","ShiftEnter","atom","selectable","Emph","_mark","writeMark","Em","em","Strong","strong","inline_code_attributes","codeAttrs","autolink_bare_uris","citations","linkAttr","data-heading","extraAttr","kLinkTargetUrl","kLinkTargetTitle","linkCommand","onEditLink","result_1","Heading","asyncEditLink","link_dark","clipboard_1","autoLink","headingLink","linkEnd","matchText","copy","fromArray","linkText_1","attrs_1","matchedHeading_1","headingText","headingPos","linkPos","tooltip_1","button_1","linkCmd","removeLinkCmd","kMaxLinkWidth","React","LinkPopup","maxLinkWidth","openURL","clipboard","linkText","isSupported","LinkButton","showCopyButton","ImageButton","on","grav","show","tabIndex","onKeyDown","forwardRef","specKey","dismissOnEdit","makeLinksAccessible","onCmdClick","_oldState","kRestoreLocationTransaction","target_1","decorationPosition_1","decoration_1","textRangePopupDecorationPosition","editorView","ignoreSelection","stopEvent","textPopupDecorator","decorationEl","visibility","reactRenderForEditorView","links","getElementsByTagName","onkeydown","click","ReactDOM","element","editingBox","editingEl","editingBoxStyle","topPadding","popupStyle","rangeCoords","rightPos","prosemirror_history_1","history","SelectAll","selectAll","findBlockNodes","childBlocksSelection","gapArrowHandler","gapCursor","prosemirror_dropcursor_1","dropCursor","$divPos","createGapCursor","mouseEvent","clickPos","$clickPos_1","inside","divNode","stopImmediatePropagation","kFormattingMarks","markName","setStoredMarks","definition_list_term","definition_list_description","nodeRange","targetLiftDepth","liftTarget","lift","clearFormatting","enDash","ellipsis","emDash","hasAttrId","attrNode","mk","markRange_1","scannedRanges","extensionIfPandocAttrEnabled","requiresTrailingP","insertTrailingP","insertTrailingPTransform","firstChild","fencedAttributes","langAttrib","codeBlockInputRuleEnter","canApplyCodeBlockInputRule","pasteTextPlugin","bodyEl","bodyElement","toY","scrollHeight","insert_symbol_plugin_1","symbol_dark","symbol","filterPlaceholderHint","symbolGroups","symbols_1","insertSymbolTransaction","symbolCharacter","searchTerm","UnicodeSymbolDataProvider","symbolGroupNames","symbolGroup","flat","codepoint","groupName","symbols","unicode_1","parseCodepoint","filterText","filteredSymbols","fromCodePoint","Symbol","performInsertSymbol","symbolOmniInsert","InsertSymbolPlugin","isValidCodepoint","hexOnlyText","hexValue","Number","valueOf","showPopup","closePopup","focusChanged","panelPositionStylesForCurrentSelection","react_dom_1","insertSymbolPopup","editorRect","maximumTopPosition","minimumTopPosition","popupTopPosition","maximumLeftPosition","minimumLeftPosition","searchImage","searchPlaceholder","dataProvider","insert_symbol_grid_preview_1","InsertSymbolPopup","popupHeight","popupWidth","useState","setFilterText","selectedSymbolGroup","setSelectedSymbolGroup","selectedSymbolIndex","setSelectedSymbolIndex","preferenceChanged","setPreferenceChanged","symbolDataProvider","getSymbols","useMemo","filterSymbols","useEffect","focusElement","textRef","handleSelectedSymbolCommitted","onInsertSymbol","preferencesProps","onPreferencesChanged","preferenceRef","lastElement","onClose","shiftKey","focus_1","isElementFocused","gridRef","altKey","newIndex","insert_symbol_grid_1","newIndexForKeyboardEvent","gridWidth","TextInput","iconAdornment","onChange","selectRef","selectedOptions","selectedGroupName","symbolIndex","activeElement","SelectInput","characterWidth","onKeyUp","onKeyPress","onFocus","onPaste","SymbolCharacterGrid","columnWidth","floor","numberOfColumns","characterCellData","onSelectionChanged","selectedItemClassName","scrollToItem","rowIndex","symbolCharacters","react_window_1","FixedSizeGrid","columnCount","rowCount","ceil","rowHeight","itemData","SymbolCharacterCell","numberOfCells","prevRow","currentIndex","nextRow","nextPage","prevPage","itemIndex","characterGridCellItemData","onSelectionCommitted","symbolPreviewStyle","fontSize","insert_symbol_emoji_skintone_1","SymbolEmojiPreferencesPanel","bestAlias","aliases","alias","emoji_2","nodeForEmoji","kCategoryAll","emoji_1","emojiCategories","EmojiSymbolDataProvider","skinTone","emojiSkinTone","symbolForEmoji","description","hasMarkdownRepresentation","Emoji","emojiOmniInsert","emojis_all_1","emojis","emojiWithSkinTone","supportsSkinTone","emojiRaw","category","characterForSkinTone","SkinTone","Default","None","hasSkinTone","kEmojiAttr","kEmojiContent","catgegory","categories","emojiString","emojiWithSkinTonePreference","emojiFromChar","emojiAlias","kEmojis_1","emojiForAllSkinTones","Light","MediumLight","Medium","MediumDark","Dark","hint","prompt","emojiMark","emojiChar","emojiFromAlias","emojiName","emojiCompletionHandler","emojiSkintonePreferenceCompletionHandler","charLoc","skinToneEmoji","Save","markTr","markFrom","EmojiView","kEmojiCompletionRegEx","prefix_1","completions_1","setEmojiSkinTone","EmojiSkintonePreferenceHeaderView","kHeaderHeight","pref","kCellWidth","emojiText","selectedSkinTone","setSelectedSkinTone","previewEmoji","setSelectSkinTone","getCurrentSkinToneIndex","previewEmojiWithSkinTones","findIndex","nextSkinTone","selectSkinTone","commitSkinTonePreference","skinToneSelectedClass","handleButtonClick","EmDash","pastePluginKey","transformPastedHTML","highlightNode","forChangedNodes","highlightPluginKey","ReplaceStep","isRemoval","isSectionRemoval","fullySelectedDiv","divSelFrom","divSelTo","fullySelectedDivSection","Strikeout","strikeout","Superscript","superscript","Subscript","subscript","SmallCaps","Smallcaps","smallcaps","RawInlineInsertCommand","defaultFormat","outputFormats","editRawInline","raw_inline_dark","RawInlineCommand","kRawInlineFormat","kRawInlineContent","raw_attribute","rawTexMark","raw_tex","texText","texMatchLength","tex_1","texLength","addStoredMark","startTex","InsertInlineLatexCommand","TexInline","setTexSelectionAfterInsert","raw_inline_1","mark_highlight_1","markHighlightDecorations","latexHighlightingPlugin","splitInvalidatedMarks","texInputRule","braces","highlighter","decorationsForDoc","removeDecorations","addDecorations","markDecorations","rehighlightParent_1","braceLevel","isLetter","inBraces","inBrackets","bracketLevel","rawhtmlMark","endLoc","startLoc","isHTMLTag","close","void","isVoidTag","endTag","tagStartLoc","inSingleQuote","inDoubleQuote","rawHtmlInputRule","isRawHTMLFormat","writeInlineHTML","writeInlneHTML","isSingleTag","data-type","spellcheck","delimiterForType","kMathContent","delimter","mathText","delimiter","InlineMath","DisplayMath","Display","kInlineMathRegex","mathLength","startMath","math_commands_1","InsertInlineMathCommand","InsertDisplayMathCommand","singleLineDisplayMath","math_transaction_1","mathAppendMarkTransaction","math_highlight_1","mathHighlightPlugin","math_popup_1","MathPopupPlugin","math_view_1","mathViewPlugins","allowNewline","insertMathCommand","math_display_dark","math_display","displayMathOmniInsert","para","maths_1","mathRange","mathAttr","selectionIsWithin","lodash_debounce_1","updatePopup","updatePopupTimer","resizeUnsubscribe","mousemove","lastRenderedMath","$mousePos","equationPreview","rangeEndCoords","rangeStartCoords","editingElStyle","styles","inlineMath","error","autoscollPopup","popupBox","mathBottom","editorEl","mathText_1","mathjaxDiv","isActiveTab","_transactions","prevMathRange","delta","verticalArrowHandler","lodash_uniqby_1","bibliography_1","csl_1","kCiteIdBasePattern","bibManager","_event","cite_id","parsedDOI","cite_doi_1","doiFromSlice","doiText","findDoiInLocalBibliography","allowsWrites","citeIdInputRule","citeIdLen","citeIdLength","citeStart","citeEnd","readPandocCite","citeMark","cite","writeCitation","citationPrefix","suppress","citationMode","CitationMode","SuppressAuthor","citeIdMark","citationId","inTextSuffix","AuthorInText","citationSuffix","kNoteCiteRegex","kInTextCiteRegex","kInTextCiteWithSuffixRegEx","kCiteId","provider","load","performCiteCompletionReplacement","existingEntry","bibliographyFiles","writableBibliographyFiles","writableFile","insertCite","writableBiblios","thisWritableBiblio","writable","displayPath","bibliographyFile","fullPath","writableBiblioPath","isProject","project","providerKey","ensureSourcesInBibliography","idText","sources","providersWithWarnings","zoteroUseBetterBibtex","isBibTexBibliography","all","withWarning","warning","warningForProvider","yesNoMessage","every","kCitationIdRegex","citeText","idMark","BibliographyManager","zotero","prefixMatch","Cite","closeCite","parentText","beginBracketPos","cite_commands_1","InsertCitationCommand","bibliographyManager","kFindInTextCiteRegex","kFindFullCiteRegex","citeIdDashInputRule","citationDoiCompletionHandler","citationCompletionHandler","cite_highlight_1","citeHighlightPlugin","cite_popup_1","citePopupPlugin","bibliography_provider_local_1","bibliographyFileForPath","path","bibliographyTypes","defaultBiblioType","bibliographyDefaultType","displayName","kFields","weight","zoteroServer","BibliographyDataProviderZotero","refreshCollectionData","parsedYamlNodes","docPath","providersNeedUpdate","providersEntries","idSort","parseYamlNodes","providers","getDefaultResourceDir","prev","curr","isWritable","hasSources","allSources","kLocalBiliographyProviderKey","sourcesForProvider","sourcesForProviderCollection","collectionKey","localSources","bibFile","localProviders","providerName","prov","dataProviderBibTeX","generateBibTeX","bibDB_1","toBibTeX","warningMessage","warningProvider","findIdInLocalBibliography","searchProviderCollection","searchProvider","searchSources","limit","searchIndex","kSearchOptions","$or","prime","resourcePath","yamlBlocks","parsedYamls","refBlockParsedYamls","parsedYaml","lastReferenceParsedYaml","referenceBlockFromYaml","getBibliography","bibliographiesAbsolute","refBlock","etag","bibliography","updateIndex","collections","collectionKeys","itemsForCollection","project_biblios","kPermissableFileExtensions","projectBiblio","path_1","getExtension","bibliographyFilesFromDocument","BibliographyDataProviderLocal","bibliographyFilesFromDoc","bibliographyValues","valueFromYamlText","bibliographiesRelative","biblioNode","createBiblographyYamlNode","updatedNode","yamlWithBib","addBibliographyToYamlNode","firstBlock","joinPaths","root","expandPaths","rootPath","isAbsolute","isWindows","isWinPathSeparator","CHAR_COLON","CHAR_FORWARD_SLASH","fileName","lastDot","biblatex_csl_converter_1","BibTypes","bibTypeKey","cslType","bibType","misc","keySortOrder","publisher","enumerableCSL","aOrder","bOrder","cslKey","biblatex","BibFieldTypes","bibFieldKey","bibField","cslFieldName","bibFieldDatas","bibFieldData","nodeValue_1","cslDate","edtfDate","cslDateToEDTFDate","options_1","optionKey","options_2","rangeArray","bibDBFieldName","required","optional","eitheror","shouldIncludeField","bibObject","pmNode","csl_text_1","cslTextToProsemirrorNode","nodes_1","BibLatexExporter","bibDB","traditionalNames","cslToBibDB","bibtex_1","bibDbToBibTeX","crossref_1","ensureValidCSLType","cslTypes","crossRefTypeToCSLType","sanitizeForCiteproc","sanitizeProperties","property","license","abstract","cslFromDoc","cslParsedYamls","part","partStr","_f","_g","_h","_j","_k","_l","_m","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","article","articleJournal","articleMagazine","articleNewspaper","review","reviewBook","article_dark","bill","legislation","legalCase","treaty","legal","legal_dark","book","manuscript","thesis","book_dark","broadcast","broadcast_dark","dataset","data","data_dark","entryDictionary","entryEncylopedia","entry_dark","image_dark","map_dark","motionPicture","movie","movie_dark","musicalScore","song","song_dark","post","postWeblog","webpage","web","web_dark","paperConference","interview","pamphlet","personalCommunication","report","speech","other","other_dark","chapter","graphic","patent","kCrossrefItemsPerPage","imageForCrossrefType","crossRefTypes","monograph","journalArticle","journalVolume","journal","journalIssue","proceedingsArticle","dissertation","reportSeries","editedBook","bookChapter","bookSet","bookTrack","referenceBook","referenceEntry","postedContent","standard","standardSeries","peerReview","proceedingsSeries","proceedings","prettyType","bookSection","bookPart","bookSeries","kCslDOMParser","cslDOMParser","tagSpec","sup","sub","spanSpec","nocase","keysToExport","entryObject","csl_type","types_1","typeMapping","bibtex","bib_type","bibTexType","entry_key","fieldsForExport","fieldKey","fields_1","FieldMap","fieldType","typeReader","bibtexKey_1","outputFields","bibtexValue","year","month","formatText","formatRange","formatKey","escapeNonAscii","bibtexEntry","bibtexEntries","toBibtex","entries","bibTexStr","sortedKeys","rawValue","booktitle","number","codePointAt","characterMap","characters_1","ungrouped","latex","thisNodeMarks","closing","closeTags","lastNodeMarks","closeTag","formatting_1","FormattingTags","open","opening","formattedText","verbatim","doNotEscape","names","formattedNames","given","bookauthor","language_1","lanagugeMappings","series","swedish","thai","BibTextTypes","phdthesis","unpublished","inproceedings","techreport","fieldsRequired","fieldsOptional","booklet","fieldsEitherOr","character","decimal","731","780","__rest","kZoteroProviderKey","_ui","_resourcePath","useCache_1","newCollections","specResult","zoteroConfig","getCollections","collectionSpecs","status","collection","existingCollection","allCollections","col","allCollectionSpecs","toBibliographyCollection","hasUpdates","zoteroSpec","parentKey","bibliographyPaths","bibTeX","betterBibtexExport","zotero_1","kZoteroBibTeXTranslator","libraryID","managerEntries","loadedEntries_1","cite_bibliography_entry_1","entryForSource","kCitationCompleteScope","citationCompletions","_state","tokenWithoutEndPunctuation","searchAllSources","insertCitation","CompletionWarningHeaderView","BibliographySourceView","kCiteCompletionWidth","authorsFormatter","issuedDateFormatter","CompletionItemView","imageAdornment","htmlTitle","bibliography_provider_zotero_1","completion_detailed_1","cslEntry","CompletionItemDetailedView","subTitle","bibMgr","citeId","citationHTML","getDocumentPath","JSON","stringify","previewHtml","finalHtml","rootDiv","classNames","ensureSafeLinkIsPresent","url","urlForCitation","CitePopup","Citation","alreadyInCite","includeWrapper","wrapperText","preCiteIdRange","endOfWrapper","initialSelectionKey","selectionKey","setCitationDefaultInText","intextCitationStyle","bibliographySources","bibliographySources_1","citeIdText","performInsertCitations","initiallySelectedNodeKey","doiSourcePanel","crossrefSourcePanel","crossref","pubmedSourcePanel","pubmed","bibliographySourcePanel","InsertCitationPanel","onOk","requiresProgress","bibliographySourceProviders","sourceProvider","isSlowGeneratingBibliographySource","showProgress","toBibliographySource","hideProgress","onCancel","cancel","configuration","insertCitationConfiguration","setInsertCitationConfiguration","treeNode","citationsToAdd","defaultNode","selectedPanelProvider","statusMessage","placeHolderMessage","existingBibliographyFile","createBibliographyFile","changeExtension","citationDefaultInText","setInsertCitationPanelState","insertCitationPanelState","updatedState","displayedCitations","panelRef","defaultResults","insert_citation_source_panel_1","CitationSourceListStatus","streamTimerId","panelProvider","panelForNode","selectedNode","setSelectedPanelProvider","refreshSearchCallback","typeAheadSearch","existingCitationIds","searchResult","existingState","panelHeight","onSearchTermChanged","memoizedTypeaheadSearch","onExecuteSearch","searchCanceled","inProgress","progressMessage","onAddCitation","newCitations","deleteCitation","filteredCitations","totalCitationCount","panelToDisplay","citationProps","navigation_tree_1","NavigationTree","treeSourceData","suggestedPanel","tag_input_1","TagInput","mergedCitationsToAdd","displayText","isEditable","isIdEditable","targetSource","currentlySelectedCitation","onTagValidate","insert_citation_bibliography_picker_1","CitationBibliographyPicker","onCreateBibliographyFileNameChanged","biblographyFile","dialog_buttons_1","DialogButtons","nodeForKey","childNode","selected","toAdd","Tag","onTagDeleted","onTagChanged","editing","setEditing","editingText","setEditingText","setDisplayText","restoreFocusAfterCancel","useLayoutEffect","editTextInput","onEditClick","validationMessage","alert","kAlertTypeError","showingValidationError","commitTagEdit","pathToNode","expanded","visibleNodes","vizNodes","fixedList","stepNode","onSelectedNodeChanged","FixedSizeList","itemCount","itemSize","showSelection","preventFocus","indentLevel","indentStyle","nodeList","allNodes","increment","containsChild","existingSource","imageForType","finalId","rootImageForProvider","zotero_root","bibligraphy","toTree","containers","folderImage","treeMap","currentNode","hasParent","rootNodes","zotero_collection","bibligraphy_folder","folderImageForProvider","local_sources","providerNodes","collectionKeyForNode","useBetterBibTex","zoteroOverlay","toCitationListEntries","_searchTerm","_selectedNode","_existingCitationIds","insert_citation_source_panel_typeahead_search_1","CitationSourceTypeheadSearchPanel","onSelectedIndexChanged","onConfirm","listContainer","searchBoxRef","focusSearch","insert_citation_source_panel_list_1","CitationSourceList","focusPrevious","insert_citation_source_panel_list_item_1","CitationSourcePanelListItem","currentCitation","handleListKeyDown","handleIncrementIndex","itemsPerPage","onBlur","onRemoveCitation","showSeparator","itemProvider","search_progress","citationListData","citationEntry","maxIdLength","e_1","matchExistingSourceCitationListEntry","toCitationListEntry","errorForStatus","insert_citation_source_panel_list_item_detailed_1","pasted","performSearch","lastSearch","initialFocusSet","CitationSourcePanelListItemDetailed","alreadyAdded","doiServer","dedupeCitationIds_1","citationEntries","works","work","coercedCSL","crossrefWork","crossrefWorkTitle","pubMedResult","docs","pubmed_1","pubTypes","doiResult","sanitizedCSL","noResultsMessage","sortFirstAuthor","pubDate","creators","creator","fetchCSL","dataciteResult","familyName","publicationYear","span","getSelectionMarkRange","native_spans","data-span","all_symbols_escapable","stripRefBackslashTransform","potentialXRef","bookdownXRefUI","xref_popup_1","xrefPopupPlugin","xref_completion_1","xrefCompletionHandler","insertRef","cross_reference_dark","cross_reference","FuseIndex","xrefCompletions","xrefView","xrefs","fuse","createIndex","typeQuery","colonLoc","isCaseSensitive","shouldSort","withSavedDocument","refs","kXRefTypes","generic","h1","xrefs_1","xref_2","xrefForId","kMaxWidth","file","InsertHTMLCommentCommand","HTMLComment","raw_html_comment","comment_dark","comment","data-format","isComment","kHTMLCommentMarkRegEx","removeInvalidatedMarks","commentMarkAttribs","detectAndCreateShortcodes","shortcode_1","kShortcodeRegEx","shortcode","noSpelling","excludes","markTr_1","kShortcodePattern","writePandocNote","noteNode","footnote","footnoteOmniInsert","References","footnote_dark","selectedFootnote","findNoteNode","data-ref","data-content","footnote_editor_1","footnoteEditorActivationPlugin","footnoteEditorNodeViews","filterTransaction","footnote_transaction_1","footnoteFilterTransaction","footnoteSelectNoteAppendTransaction","Footnote","canInsertFootnote","edit","selectedNote","footnoteNode","ref_1","matching","ref_2","nodeDecoration","findFootnoteNode","NoteEditorView","footnoteEditorKeyDownHandler","firstNode","lastTextBlock","selectFootnote","findNotesContainer","noteWithPos","footnotes","findAllFootnotes","notesContainer","findAllNotes","toJSON","newNote","fromJSON","allNotes","footnoteFixupTransform","activeNote","RawBlockCommand","rawAttribute","textTrimmed","isSingleLineTex","readPandocRawBlock","isSingleChildParagraph","isParagraphWrappingMultilineRaw","rawTok","FormatRawBlockCommand","HTMLBlock","kHTMLFormat","Blocks","html_block_dark","html_block","TexBlock","tex_block_dark","tex_block","YamlMetadata","yaml_block_dark","yaml_block","yaml_metadata_capsule_1","yamlMetadataBlockCapsuleFilter","YamlMetadataCommand","yaml_metadata_title_1","RmdChunkCommand","Chunks","RChunkCommand","r_chunk_dark","r_chunk","PythonChunkCommand","python_chunk","BashChunkCommand","bash_chunk_dark","bash_chunk","d3_chunk","D3ChunkCommand","StanChunkCommand","StanCodeChunk","stan_chunk","md_index","firstLineMeta","lineNumbers","lineNumberFormatter","lineNumber","lineCount","bookdownTheorems","kBookdownDocType","rmd_chunk_capsule_1","rmdChunkBlockCapsuleFilter","RcppChunkCommand","SQLChunkCommand","rmd_chunk_image_1","RmdChunkImagePreviewPlugin","uiContext","imagePreviewDecorations","isRmdChunkNode","firstLine","widthMatch","width_1","stripQuotes","alignCenter_1","imagePath_1","unsubscribe","watchResource","kBlockCapsuleTextRegEx","kBlockCapsuleType","isFullDivSelection","createDiv","editDiv","defining","data-div","divCommand","Div","indexAfter","canApplyDivInputRule","attribMatch","attrProps","DivCommand","div_dark","LineBlock","line_block","line_block_dark","table_captions","grid_tables","multiline_tables","table_nodes_1","tableNode","tableCaptionNode","tableCellNode","tableHeaderNode","tableRowNode","TableInsertTable","table_commands_1","insertTable","insertTableOmniInsert","TablePreviousCell","prosemirror_tables_1","goToNextCell","TableColumnCommand","TableAddColumnAfter","addColumns","TableAddColumnBefore","TableRowCommand","TableAddRowAfter","addRows","TableAddRowBefore","TableDeleteRow","deleteRow","TableColumnAlignmentCommand","TableAlignColumnRight","CssAlignment","Right","TableAlignColumnCenter","Center","TableAlignColumnDefault","TableToggleCaptionCommand","headerOptional","columnResizing","handleWidth","table_paste_1","tablePaste","table_contextmenu_1","TableContextMenuPlugin","multiline","ModEnter","table_container","table_caption","numRows","rows","cells","cellType","tableCaption","tableContainer","selectionPos","cols","inactive","caption","Lists","table_dark","deleteTable","columns","rect","selectedRect","addRow","alignments_1","rowNode","cellPos","cellOffset","cellNode","align","colIndex","TableToggleHeaderCommand","TableToggleHeader","toggleHeader","isInTable","TableToggleCaption","tr_2","left_1","right_1","selectionCell","tableStart","TableMap","CellSelection","rectBetween","$anchorCell","$headCell","tableGroup","getFromDOM","textAlign","kDefaultCellClasses","Table","table_pandoc_1","readPandocTable","writePandocTableContainer","table_capsule_1","tableBlockCapsuleFilter","colgroup","childElementCount","colpercents","firstRow","colWidth","colWidths","table_columns_1","tableColumnWidths","writePandocTable","writePandocTableCaption","table_row","writePandocTableNodes","writePandocTableHeaderNodes","alignments","AlignLeft","Left","AlignRight","AlignCenter","AlignDefault","tableToken","ColWidth","columnPercents","parseRow","row","captionBlock","lastChild","widths","ColWidthDefault","headerCut","tableColumnAlignments","colwidth","defaultWidth","totalWidth","tables_1","kTableBlockCapsuleType","capsuleText","DefinitionList","definition","unparsedTable_1","TableDeleteColumn","subMenu","TableAlignColumnLeft","menuVisible","sliceHasNode","fixupTableWidths","currentColumn","columnAlignments","headerPos","childPos","definition_lists","definition_list_pandoc_1","writePandocDefinitionListDescription","readPandocDefinitionList","writePandocDefinitionList","definition_list_inputrule_1","definitionInputRule","definition_list_insert_1","insertDefinitionListAppendTransaction","emptyNodePlaceholderPlugin","termText","insertTermText","insertDefinitionList","createDefinitionDescription","definition_list_dark","InsertDefinitionList","InsertDefinitionListItemCommand","createFn","dlTypes","insertPos","InsertDefinitionTerm","InsertDefinitionDescription","lists_1","listPos","list","listParent","listIndex","definitionList","prevCursor","definitionListEnter","parentTerm","selectionNode","isParagraph","isEmpty","position_1","isLastChild","descriptionNode","endOfDescriptionEnter","isOnlyChild","emptyTermBackspace","emptyDescriptionBackspace","advancePos","definitionListShiftTab","backwardPos","prevNode","listNode","depthOffset","isParagraphAfterParagraph","prevPara","writeCurrent","writePandocDefinitionListTerm","kShortcodeBlockCapsuleType","_p3","shortcode_block","borderColorClass","isParaWrappingShortcode","Shortcode","shortcodeNode","htmlPreserveBlockCapsuleFilter","kHtmlPreserveBlockCapsuleType","handleToken","html_preserve","ace_placeholder_1","ace_node_views_1","acePlugins","aceRenderQueue","ace_render_queue_1","AceRenderQueue","aceNodeViews","AceNodeViews","AceNodeView","handleClick","editorOptions","gapCursorPending","selectionMarker","queuedSelection","subscriptions","renderedWidth","scrollRow","mouseDown","preview","AcePlaceholder","getElement","updateMode","onEditorDispatch","initEditor","renderQueue","unsub","_decos","editSession","getDocument","computeChange","AceRange","fromPoints","indexToPosition","findMarkers","removeMarker","findPluginState","markerFrom","markerTo","aceEditor","escaping","require","Range","setSelectionRange","QueuedSelection","pending","_mutation","forwardSelection","asProseMirrorSelection","session","getRange","positionToIndex","highlightSelectionAcross","valueChanged","getContents","replaceWith","scrollParent","offsetTop","viewTop","viewBottom","scrollCursorIntoView","clearSelection","getSession","cursorDirty","addCommand","bindKey","arrowMaybeEscape","backspaceMaybeDeleteNode","undo","redo","win","mac","getCursorPosition","executeSelection","renderer","metrics","$fontMetrics","$observer","setContainer","debounceResize","evt","resizeTimer","setMode","execCommand","getLength","innerText","getCursor","containerRect","cursorRect","down","up","oldEnd","oldVal","newEnd","newVal","nodeBefore","nodeAfter","cursorPos","prevNodePos","nextNodePos","nextNodeTextBlock","nextNodeCode","targetPos","renderCompleted","updateTimer","needsSort","bypass","visible","onUpdate","IntersectionObserver","entries_1","processRenderQueue","isIntersecting","cancelTimer","onScroll","scheduleRender","isRenderCompleted","renderTimer","delayMs","nodeView","prevNodePos_1","nv","ndView","setGapCursorPending","AttrEditCommand","editors","editMarkAttrs","editAttr","attr_edit_1","kEditAttrShortcut","properties_deco_dark","properties_deco","ed","parentWithAttrs","editorNode","attrTags","rightPaddingOffset","attrsEl","attrsNode","offsetParentStyle","AttrEditDecorationPlugin","gutterBackgroundColor","gutterTextColor","textColor","surfaceWidgetTextColor","lightTextColor","linkTextColor","invisibleTextColor","markupTextColor","findTextBackgroundColor","findTextBorderColor","blockBorderColor","focusOutlineColor","paneBorderColor","fixedWidthFont","fixedWidthFontSizePt","proportionalFont","proportionalFontSizePt","atomColor","tagColor","attributeColor","hrColor","linkColor","errorColor","setStyleElement","css","styleEl","getElementById","defaults","backgroundColor","borderBackgroundColor","placeholderTextColor","selectionColor","cursorColor","metadataBackgroundColor","chunkBackgroundColor","spanBackgroundColor","divBackgroundColor","commentColor","commentBackgroundColor","nodeSelectionColor","padding","copy_png_1","properties_png_1","properties_deco_png_1","properties_deco_dark_png_1","removelink_png_1","runchunk_png_1","runprevchunks_png_1","search_png_1","search_progress_gif_1","generic_png_1","heading1_png_1","heading1_dark_png_1","heading2_png_1","heading2_dark_png_1","heading3_png_1","heading3_dark_png_1","heading4_png_1","heading4_dark_png_1","bullet_list_png_1","bullet_list_dark_png_1","ordered_list_png_1","ordered_list_dark_png_1","blockquote_png_1","blockquote_dark_png_1","math_inline_png_1","math_inline_dark_png_1","math_display_png_1","math_display_dark_png_1","html_block_png_1","html_block_dark_png_1","line_block_png_1","line_block_dark_png_1","emoji_png_1","emoji_dark_png_1","comment_png_1","comment_dark_png_1","div_png_1","div_dark_png_1","code_block_png_1","code_block_dark_png_1","footnote_png_1","footnote_dark_png_1","citation_png_1","citation_dark_png_1","cross_reference_png_1","cross_reference_dark_png_1","symbol_png_1","symbol_dark_png_1","table_png_1","table_dark_png_1","definition_list_png_1","definition_list_dark_png_1","horizontal_rule_png_1","horizontal_rule_dark_png_1","image_png_1","image_dark_png_1","link_png_1","link_dark_png_1","paragraph_png_1","paragraph_dark_png_1","raw_block_png_1","raw_block_dark_png_1","raw_inline_png_1","raw_inline_dark_png_1","tex_block_png_1","tex_block_dark_png_1","yaml_block_png_1","yaml_block_dark_png_1","python_chunk_png_1","sql_chunk_png_1","d3_chunk_png_1","stan_chunk_png_1","bash_chunk_png_1","bash_chunk_dark_png_1","r_chunk_png_1","r_chunk_dark_png_1","rcpp_chunk_png_1","rcpp_chunk_dark_png_1","heading3_dark","bullet_list_dark","ordered_list_dark","blockquote","blockquote_dark","math_inline","math_inline_dark","emoji_dark","citation_dark","paragraph_dark","raw_block_dark","sql_chunk","rcpp_chunk_dark","book_dark_png_1","formatMenu","Underline","ListItemCheck","ListItemCheckToggle","EditListProperties","Blockquote","haveAnyOf","HTMLInline","ClearFormatting","AttrEdit","RCodeChunk","PythonCodeChunk","BashCodeChunk","RcppCodeChunk","SQLCodeChunk","D3CodeChunk","DefinitionTerm","DefinitionDescription","ParagraphInsert","InsertDiv","commands_1","editorMenus","TableDeleteTable"],"mappings":"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A,IAEF,MACA,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACHA,EAAQ,IACR,MAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,UACH,KACAA,EAAA,IAEF,WACE,KACAA,EAAA,IAEF,MACA,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,KAEFA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,UACH,UACA,KAEF,KAAK,KACLA,EAAK,IACL,WACE,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,KAEF,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,SACH,SACA,IAEF,KAAK,KACL,KAAK,UACH,KACAA,EAAA,IAEF,MACA,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,WACE,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACHA,EAAQ,IACR,MAEF,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,SACH,SACA,IAEF,KAAK,KACL,KAAK,UACH,UACA,KAEFA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,UACH,UACA,KAEF,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,UACH,KACAA,EAAA,IAEF,MACA,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACHA,EAAQ,IACR,MAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACHA,EAAQ,IACR,MAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,UACH,KACAA,EAAA,IAEF,WACE,UACA,KAEF,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,IACAA,EAAA,IAEF,MACA,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACH,WACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACHA,EAAQ,IACR,MAEF,KAAK,KACLA,EAAK,IACH,WACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,KACAA,EAAA,IAEF,MACA,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,UACH,UACA,KAEF,KAAK,KACLA,EAAK,IACL,WACE,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,KAEF,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,SACH,SACA,KAEF,KAAK,KACL,KAAK,KACHA,EAAQ,IACR,MAEF,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACHA,EAAQ,IACR,MAEF,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,KACL,KAAK,KACLA,EAAK,IACL,MACA,KAAK,IACL,KAAK,SACH,SACA,KAEF,KAAK,KACL,KAAK,UACH,UACA,KAEFA,EAAK,IACL,MACA,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,SACH,SACA,IAEF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,UACH,UACA,KAEF,KAAK,KACHA,EAAQ,I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EtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO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CEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,OAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,0BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2DACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,wDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,kDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2DACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,iDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,4DAKbA,UAAA,QAEE,CACEz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,sCAMP,EAEFz1D,KAAA,SACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,sBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,cACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,UACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,UACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,6BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,6BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,SACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,SACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,sBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,QACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,eACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,eACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,QACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,4CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,6CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,cACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,WACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,WACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,WACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,eACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,WACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,aACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,sBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,eACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,WACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,oBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,cACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,qBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,eACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,mBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,2DAKbA,UAAA,OAEE,CACEz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,aACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,mCAMP,EAEFz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,QACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,eACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,aACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,cACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,YACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,eACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,aACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,cACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,MACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,UACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,SACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,sBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,QACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,QACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,2CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,aACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,eACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,eACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,WACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,eACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,QACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,cACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,cACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,sCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,0CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,6CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,8CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,2CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,sCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,2CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,sCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,6CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,0CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,sCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,sCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,2CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,sCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,6BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,sCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,0CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,sBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,cACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,eACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,cACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,cACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,6BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,YACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,sBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,sBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,6BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kDACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kDACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gDACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gDACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mDACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,8CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yDACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uDACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gDACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,2DACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,yDACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,2CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uDACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qDACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,6CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,2CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,+CACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kDACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,cACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,6BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,mBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,eACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,OACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,qBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,oBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,mDAKbA,UAAA,MAEE,CACEz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,kBACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,eACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,WACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,aACEtX,MAAM,IACN+sE,UAAO,OAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,+BAMP,EAEFz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,mDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0DACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,8CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,kCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,kDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6DACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,oEACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,kCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,kCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,kDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,mDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,8CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,kCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,sCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wEACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wEACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0EACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4EACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uEACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2EACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uEACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2EACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,mDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,kDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,oDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0EACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0EACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,kCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,sCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,kBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,eACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,sBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,sCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,qCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,8CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,8BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,qBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,sBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,sBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,sBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,kDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,sCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,mCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,uCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4DACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,mEACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,oCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,iDACEtX,MAAM,IACN+sE,UAAO,8DAKbA,UAAA,OAEE,CACEz1D,KAAA,wCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,+CACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gDACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,mBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,mBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,gCACEtX,MAAM,IACN+sE,UAAO,iCAMP,EAEFz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,6CACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,+CACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,sCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,6CACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,8CACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,gDACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,iDACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,iCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,gCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,mCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,mDACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,oCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,kCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,wCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,2CACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,yCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,0CACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,qCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,uCACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,sBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,kBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,oBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,qBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,kBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,uBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,wBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,wBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,sBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,oBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,oBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,oBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,kBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,qBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,mBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,sBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,qBACEtX,MAAM,KACN+sE,UAAO,qDAKbA,UAAA,OAEE,CACEz1D,KAAA,qBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,sBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,uBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,wBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,uBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,gBACEtX,MAAM,KACN+sE,UAAO,QAGTz1D,KAAA,uBACEtX,MAAM,KACN+sE,UAAO,iCAMP,EAEFz1D,KAAA,wBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,yBACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,0BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,2BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,4BACEtX,MAAM,IACN+sE,UAAO,QAGTz1D,KAAA,6BA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BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,4BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,oBACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,8BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,6BACEtX,MAAM,KACN+sE,UAAO,SAGTz1D,KAAA,+BACEtX,MAAM,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UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,YAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,YAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,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AA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,eAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,eAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,UAAK,IACH/B,MAAI,cAEJ,CACA15F,GAAA,qBAEFy7F,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UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,0BAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,UAAQ,IACN/B,MAAI,wBAEJ,CACA15F,GAAA,wBAEFy7F,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","sourcesContent":["/*\n * index.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport polyfillIsConnected from './isconnected';\nimport polyfillCustomEvent from './custom-event';\n\nfunction polyfill() {\n polyfillIsConnected();\n polyfillCustomEvent();\n}\n\nexport default polyfill;\n","/*\n * Node.isConnected polyfill for IE and EdgeHTML\n * 2020-02-04\n *\n * By Eli Grey, https://eligrey.com\n * Public domain.\n * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n */\n\nfunction polyfill() {\n if (!('isConnected' in Node.prototype)) {\n Object.defineProperty(Node.prototype, 'isConnected', {\n get() {\n return (\n !this.ownerDocument ||\n !(\n // tslint:disable-next-line: no-bitwise\n (this.ownerDocument.compareDocumentPosition(this) & this.DOCUMENT_POSITION_DISCONNECTED)\n )\n );\n },\n });\n }\n}\n\nexport default polyfill;\n","// apply polyfills\nimport polyfill from './polyfill/index';\npolyfill();\n\n// objects instantiated by the IDE\nexport { Editor, UITools } from './editor/editor';\n","/**\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent\n *\n * From https://developer.mozilla.org/en-US/docs/MDN/About:\n * \"Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/\"\n */\nexport default function() {\n if (typeof window.CustomEvent === 'function') return false;\n\n function CustomEvent(event: any, params: any) {\n params = params || { bubbles: false, cancelable: false, detail: null };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n }\n\n window.CustomEvent = CustomEvent as any;\n}\n","/*\n * editor.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { inputRules } from 'prosemirror-inputrules';\nimport { keydownHandler } from 'prosemirror-keymap';\nimport { Node as ProsemirrorNode, Schema, DOMParser, ParseOptions } from 'prosemirror-model';\nimport { EditorState, Plugin, PluginKey, TextSelection, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport 'prosemirror-view/style/prosemirror.css';\n\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { citeUI } from '../api/cite';\nimport { EditorOptions } from '../api/options';\nimport { ProsemirrorCommand, CommandFn, EditorCommand } from '../api/command';\nimport { EditorUI } from '../api/ui';\nimport {\n attrPropsToInput,\n attrInputToProps,\n AttrProps,\n AttrEditInput,\n InsertCiteProps,\n InsertCiteUI,\n} from '../api/ui-dialogs';\n\nimport { Extension } from '../api/extension';\nimport { PandocWriterOptions } from '../api/pandoc';\nimport { PandocCapabilities, getPandocCapabilities } from '../api/pandoc_capabilities';\nimport { fragmentToHTML } from '../api/html';\nimport { DOMEditorEvents, EventType, EventHandler } from '../api/events';\nimport {\n ScrollEvent,\n UpdateEvent,\n OutlineChangeEvent,\n StateChangeEvent,\n ResizeEvent,\n LayoutEvent,\n FocusEvent,\n DispatchEvent,\n NavigateEvent,\n BlurEvent,\n} from '../api/event-types';\nimport {\n PandocFormat,\n resolvePandocFormat,\n PandocFormatConfig,\n pandocFormatConfigFromCode,\n pandocFormatConfigFromDoc,\n} from '../api/pandoc_format';\nimport { baseKeysPlugin } from '../api/basekeys';\nimport {\n appendTransactionsPlugin,\n appendMarkTransactionsPlugin,\n kFixupTransaction,\n kAddToHistoryTransaction,\n kSetMarkdownTransaction,\n} from '../api/transaction';\nimport { EditorOutline, getOutlineNodes, EditingOutlineLocation, getEditingOutlineLocation } from '../api/outline';\nimport { EditingLocation, getEditingLocation, setEditingLocation } from '../api/location';\nimport { navigateTo, NavigationType } from '../api/navigation';\nimport { FixupContext } from '../api/fixup';\nimport { unitToPixels, pixelsToUnit, roundUnit, kValidUnits } from '../api/image';\nimport { kPercentUnit } from '../api/css';\nimport { EditorFormat } from '../api/format';\nimport { diffChars, EditorChange } from '../api/change';\nimport { markInputRuleFilter } from '../api/input_rule';\nimport { editorMath } from '../api/math';\nimport { EditorEvents } from '../api/events';\nimport { insertRmdChunk } from '../api/rmd';\nimport { EditorServer } from '../api/server';\nimport { pandocAutoIdentifier } from '../api/pandoc_id';\nimport { wrapSentences } from '../api/wrap';\nimport { yamlFrontMatter, applyYamlFrontMatter } from '../api/yaml';\nimport { EditorSpellingDoc } from '../api/spelling';\n\nimport { getTitle, setTitle } from '../nodes/yaml_metadata/yaml_metadata-title';\nimport { getOutline } from '../behaviors/outline';\nimport {\n FindOptions,\n find,\n matchCount,\n selectFirst,\n selectNext,\n selectPrevious,\n replace,\n replaceAll,\n clear,\n selectCurrent,\n} from '../behaviors/find';\n\nimport { omniInsertExtension } from '../behaviors/omni_insert/omni_insert';\nimport { completionExtension } from '../behaviors/completion/completion';\n\nimport { getSpellingDoc } from '../behaviors/spelling/spelling-interactive';\nimport { realtimeSpellingPlugin, invalidateAllWords, invalidateWord } from '../behaviors/spelling/spelling-realtime';\n\nimport { PandocConverter, PandocLineWrapping } from '../pandoc/pandoc_converter';\n\nimport { ExtensionManager, initExtensions } from './editor-extensions';\nimport { defaultTheme, EditorTheme, applyTheme, applyPadding } from './editor-theme';\nimport { defaultEditorUIImages } from './editor-images';\nimport { editorMenus, EditorMenus } from './editor-menus';\nimport { editorSchema } from './editor-schema';\n\n// import styles before extensions so they can be overriden by extensions\nimport './styles/frame.css';\nimport './styles/styles.css';\n\nexport interface EditorCode {\n code: string;\n selection_only: boolean;\n location: EditingOutlineLocation;\n}\n\nexport interface EditorSetMarkdownResult {\n // editor view of markdown (as it will be persisted)\n canonical: string;\n\n // line wrapping\n line_wrapping: PandocLineWrapping;\n\n // unrecoginized pandoc tokens\n unrecognized: string[];\n\n // unparsed meta\n unparsed_meta: { [key: string]: any };\n\n // updated outline \n location: EditingOutlineLocation;\n}\n\nexport interface EditorContext {\n readonly server: EditorServer;\n readonly ui: EditorUI;\n readonly hooks?: EditorHooks;\n readonly extensions?: readonly Extension[];\n}\n\nexport interface EditorHooks {\n isEditable?: () => boolean;\n}\n\nexport interface EditorKeybindings {\n [id: string]: string[];\n}\n\nexport interface EditorSelection {\n from: number;\n to: number;\n navigation_id: string | null;\n}\n\nexport interface EditorFindReplace {\n find: (term: string, options: FindOptions) => boolean;\n matches: () => number;\n selectFirst: () => boolean;\n selectCurrent: () => boolean;\n selectNext: () => boolean;\n selectPrevious: () => boolean;\n replace: (text: string) => boolean;\n replaceAll: (text: string) => number;\n clear: () => boolean;\n}\n\nexport { EditorCommandId as EditorCommands } from '../api/command';\n\nexport interface UIToolsAttr {\n propsToInput(attr: AttrProps): AttrEditInput;\n inputToProps(input: AttrEditInput): AttrProps;\n pandocAutoIdentifier(text: string): string;\n}\n\nexport interface UIToolsImage {\n validUnits(): string[];\n percentUnit(): string;\n unitToPixels(value: number, unit: string, containerWidth: number): number;\n pixelsToUnit(pixels: number, unit: string, containerWidth: number): number;\n roundUnit(value: number, unit: string): string;\n}\n\nexport interface UIToolsFormat {\n parseFormatConfig(markdown: string, isRmd: boolean): PandocFormatConfig;\n}\n\nexport interface UIToolsSource {\n diffChars(from: string, to: string, timeout: number): EditorChange[];\n}\n\nexport interface UIToolsCitation {\n citeUI(citeProps: InsertCiteProps): InsertCiteUI;\n}\n\nexport class UITools {\n public readonly attr: UIToolsAttr;\n public readonly image: UIToolsImage;\n public readonly format: UIToolsFormat;\n public readonly source: UIToolsSource;\n public readonly citation: UIToolsCitation;\n\n constructor() {\n this.attr = {\n propsToInput: attrPropsToInput,\n inputToProps: attrInputToProps,\n pandocAutoIdentifier: (text: string) => pandocAutoIdentifier(text, false),\n };\n\n this.image = {\n validUnits: () => kValidUnits,\n percentUnit: () => kPercentUnit,\n unitToPixels,\n pixelsToUnit,\n roundUnit,\n };\n\n this.format = {\n parseFormatConfig: pandocFormatConfigFromCode,\n };\n\n this.source = {\n diffChars,\n };\n\n this.citation = {\n citeUI,\n };\n }\n}\n\nconst keybindingsPlugin = new PluginKey('keybindings');\n\nexport class Editor {\n // core context passed from client\n private readonly parent: HTMLElement;\n private readonly context: EditorContext;\n private readonly events: EditorEvents;\n\n // options (derived from defaults + config)\n private readonly options: EditorOptions;\n\n // format (pandocFormat includes additional diagnostics based on the validity of\n // provided mode + extensions)\n private readonly format: EditorFormat;\n private readonly pandocFormat: PandocFormat;\n\n // pandoc capabilities\n private pandocCapabilities: PandocCapabilities;\n\n // core prosemirror state/behaviors\n private readonly extensions: ExtensionManager;\n private readonly schema: Schema;\n private state: EditorState;\n private readonly view: EditorView;\n private readonly pandocConverter: PandocConverter;\n\n // setting via setKeybindings forces reconfiguration of EditorState\n // with plugins recreated\n private keybindings: EditorKeybindings;\n\n // content width constraints (if unset uses default editor CSS)\n private maxContentWidth = 0;\n private minContentPadding = 0;\n\n // keep track of whether the last transaction was selection-only\n private lastTrSelectionOnly = false;\n\n // create the editor -- note that the markdown argument does not substitute for calling\n // setMarkdown, rather it's used to read the format comment to determine how to\n // initialize the various editor features\n public static async create(\n parent: HTMLElement,\n context: EditorContext,\n format: EditorFormat,\n options: EditorOptions,\n ): Promise {\n // provide option defaults\n options = {\n autoFocus: false,\n spellCheck: false,\n codeEditor: 'codemirror',\n rmdImagePreview: false,\n hideFormatComment: false,\n className: '',\n ...options,\n };\n\n // provide format defaults\n format = {\n pandocMode: format.pandocMode || 'markdown',\n pandocExtensions: format.pandocExtensions || '',\n rmdExtensions: {\n codeChunks: false,\n bookdownXRef: false,\n bookdownXRefUI: false,\n bookdownPart: false,\n blogdownMathInCode: false,\n ...format.rmdExtensions,\n },\n hugoExtensions: {\n shortcodes: false,\n ...format.hugoExtensions,\n },\n docTypes: format.docTypes || [],\n };\n\n // provide context defaults\n const defaultImages = defaultEditorUIImages();\n context = {\n ...context,\n ui: {\n ...context.ui,\n images: {\n ...defaultImages,\n ...context.ui.images,\n omni_insert: {\n ...defaultImages.omni_insert,\n ...context.ui.images,\n },\n citations: {\n ...defaultImages.citations,\n ...context.ui.images,\n },\n },\n },\n };\n\n // resolve the format\n const pandocFmt = await resolvePandocFormat(context.server.pandoc, format);\n\n // get pandoc capabilities\n const pandocCapabilities = await getPandocCapabilities(context.server.pandoc);\n\n // create editor\n const editor = new Editor(parent, context, options, format, pandocFmt, pandocCapabilities);\n\n // return editor\n return Promise.resolve(editor);\n }\n\n private constructor(\n parent: HTMLElement,\n context: EditorContext,\n options: EditorOptions,\n format: EditorFormat,\n pandocFormat: PandocFormat,\n pandocCapabilities: PandocCapabilities,\n ) {\n // initialize references\n this.parent = parent;\n this.events = new DOMEditorEvents(parent);\n this.context = context;\n this.options = options;\n this.format = format;\n this.keybindings = {};\n this.pandocFormat = pandocFormat;\n this.pandocCapabilities = pandocCapabilities;\n\n // create core extensions\n this.extensions = this.initExtensions();\n\n // create schema\n this.schema = editorSchema(this.extensions);\n\n // register completion handlers (done in a separate step b/c omni insert\n // completion handlers require access to the initializezd commands that\n // carry omni insert info)\n this.registerCompletionExtension();\n\n // register realtime spellchecking (done in a separate step b/c it\n // requires access to PandocMark definitions to determine which\n // marks to exclude from spellchecking)\n this.registerRealtimeSpelling();\n\n // create state\n this.state = EditorState.create({\n schema: this.schema,\n doc: this.initialDoc(),\n plugins: this.createPlugins(),\n });\n\n // additional dom attributes for editor node\n const attributes: { [name: string]: string } = {};\n if (options.className) {\n attributes.class = options.className;\n }\n\n // create view\n this.view = new EditorView(this.parent, {\n state: this.state,\n dispatchTransaction: this.dispatchTransaction.bind(this),\n domParser: new EditorDOMParser(this.schema),\n attributes,\n });\n\n // add custom restoreFocus handler to the view -- this provides a custom\n // handler for RStudio's FocusContext, necessary because the default\n // ProseMirror dom mutation handler picks up the focus and changes the\n // selection.\n Object.defineProperty(this.view.dom, 'restoreFocus', {\n value: () => {\n this.focus();\n },\n });\n\n // add proportinal font class to parent\n this.parent.classList.add('pm-proportional-font');\n\n // apply default theme\n this.applyTheme(defaultTheme());\n\n // create pandoc translator\n this.pandocConverter = new PandocConverter(\n this.schema,\n this.extensions,\n context.server.pandoc,\n this.pandocCapabilities,\n );\n\n // focus editor immediately if requested\n if (this.options.autoFocus) {\n setTimeout(() => {\n this.focus();\n }, 10);\n }\n\n // disale spellcheck if requested\n if (!this.options.spellCheck) {\n this.parent.setAttribute('spellcheck', 'false');\n }\n\n {\n // scroll event optimization, as recommended by\n // https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let ticking = false;\n this.parent.addEventListener(\n 'scroll',\n () => {\n if (!ticking) {\n window.requestAnimationFrame(() => {\n this.emitEvent(ScrollEvent);\n ticking = false;\n });\n ticking = true;\n }\n },\n { capture: true },\n );\n }\n }\n\n public destroy() {\n this.view.destroy();\n }\n\n public subscribe(event: EventType | string, handler: EventHandler): VoidFunction {\n if (typeof event === 'string') {\n return this.events.subscribe({ eventName: event }, handler);\n } else {\n return this.events.subscribe(event, handler);\n }\n }\n\n public setTitle(title: string) {\n const tr = setTitle(this.state, title);\n if (tr) {\n this.view.dispatch(tr);\n }\n }\n\n public async setMarkdown(\n markdown: string,\n options: PandocWriterOptions,\n emitUpdate: boolean,\n ): Promise {\n // get the result\n const result = await this.pandocConverter.toProsemirror(markdown, this.pandocFormat);\n const { doc, line_wrapping, unrecognized, unparsed_meta } = result;\n\n // if we are preserving history but the existing doc is empty then create a new state\n // (resets the undo stack so that the initial setting of the document can't be undone)\n if (this.isInitialDoc()) {\n this.state = EditorState.create({\n schema: this.state.schema,\n doc,\n plugins: this.state.plugins,\n });\n this.view.updateState(this.state);\n } else {\n // note current editing location\n const loc = this.getEditingLocation();\n\n // replace the top level nodes in the doc\n const tr = this.state.tr;\n tr.setMeta(kSetMarkdownTransaction, true);\n let i = 0;\n tr.doc.descendants((node, pos) => {\n const mappedPos = tr.mapping.map(pos);\n tr.replaceRangeWith(mappedPos, mappedPos + node.nodeSize, doc.child(i));\n i++;\n return false;\n });\n // set selection to previous location if it's still valid\n if (loc.pos < tr.doc.nodeSize) {\n // eat exceptions that might result from an invalid position\n try {\n setTextSelection(loc.pos)(tr);\n } catch(e) {\n // do-nothing, this error can happen and shouldn't result in \n // a failure to setMarkdown\n }\n }\n // dispatch\n this.view.dispatch(tr);\n }\n\n // apply fixups\n this.applyFixups(FixupContext.Load);\n\n // notify listeners if requested\n if (emitUpdate) {\n this.emitEvent(UpdateEvent);\n this.emitEvent(OutlineChangeEvent);\n this.emitEvent(StateChangeEvent);\n }\n\n // return our current markdown representation (so the caller know what our\n // current 'view' of the doc as markdown looks like\n const getMarkdownTr = this.state.tr;\n const canonical = await this.getMarkdownCode(getMarkdownTr, options);\n const location = getEditingOutlineLocation(this.state);\n\n // return\n return {\n canonical,\n line_wrapping,\n unrecognized,\n unparsed_meta,\n location\n };\n }\n\n // flag indicating whether we've ever had setMarkdown (currently we need this\n // because getMarkdown can only be called after setMarkdown b/c it needs\n // the API version retreived in setMarkdown -- we should remedy this)\n public isInitialDoc() {\n return this.state.doc.attrs.initial;\n }\n\n public async getMarkdown(options: PandocWriterOptions): Promise {\n // get the code\n const tr = this.state.tr;\n const code = await this.getMarkdownCode(tr, options);\n\n // return code + perhaps outline location\n return {\n code,\n selection_only: this.lastTrSelectionOnly,\n location: getEditingOutlineLocation(this.state),\n };\n }\n\n public getEditingOutlineLocation(): EditingOutlineLocation {\n return getEditingOutlineLocation(this.state);\n }\n\n public getHTML(): string {\n return fragmentToHTML(this.state.schema, this.state.doc.content);\n }\n\n public getTitle() {\n return getTitle(this.state);\n }\n\n public getSelection(): EditorSelection {\n const { from, to } = this.state.selection;\n return {\n from,\n to,\n navigation_id: navigationIdForSelection(this.state),\n };\n }\n\n public getEditingLocation(): EditingLocation {\n return getEditingLocation(this.view);\n }\n\n public setEditingLocation(outlineLocation?: EditingOutlineLocation, previousLocation?: EditingLocation) {\n setEditingLocation(this.view, outlineLocation, previousLocation);\n }\n\n public getOutline(): EditorOutline {\n return getOutline(this.state) || [];\n }\n\n public getFindReplace(): EditorFindReplace {\n return {\n find: (term: string, options: FindOptions) => find(this.view, term, options),\n matches: () => matchCount(this.view),\n selectCurrent: () => selectCurrent(this.view),\n selectFirst: () => selectFirst(this.view),\n selectNext: () => selectNext(this.view),\n selectPrevious: () => selectPrevious(this.view),\n replace: (text: string) => replace(this.view, text),\n replaceAll: (text: string) => replaceAll(this.view, text),\n clear: () => clear(this.view),\n };\n }\n\n public getSpellingDoc(): EditorSpellingDoc {\n return getSpellingDoc(this.view, this.extensions.pandocMarks(), this.context.ui.spelling);\n }\n\n public spellingInvalidateAllWords() {\n invalidateAllWords(this.view);\n }\n\n public spellingInvalidateWord(word: string) {\n invalidateWord(this.view, word);\n }\n\n // get a canonical version of the passed markdown. this method doesn't mutate the\n // visual editor's state/view (it's provided as a performance optimiation for when\n // source mode is configured to save a canonical version of markdown)\n public async getCanonical(markdown: string, options: PandocWriterOptions): Promise {\n // convert to prosemirror doc\n const result = await this.pandocConverter.toProsemirror(markdown, this.pandocFormat);\n\n // create a state for this doc\n const state = EditorState.create({\n schema: this.schema,\n doc: result.doc,\n plugins: this.state.plugins,\n });\n\n // apply load fixups (eumlating what a full round trip will do)\n const tr = state.tr;\n this.extensionFixups(tr, FixupContext.Load);\n\n // return markdown (will apply save fixups)\n return this.getMarkdownCode(tr, options);\n }\n\n public getSelectedText(): string {\n return this.state.doc.textBetween(this.state.selection.from, this.state.selection.to);\n }\n\n public replaceSelection(value: string): void {\n // retrieve properties we need from selection\n const { from, empty } = this.view.state.selection;\n\n // retrieve selection marks\n const marks = this.view.state.selection.$from.marks();\n\n // insert text\n const tr = this.view.state.tr.replaceSelectionWith(this.view.state.schema.text(value, marks), false);\n this.view.dispatch(tr);\n\n // update selection if necessary\n if (!empty) {\n const sel = TextSelection.create(this.view.state.doc, from, from + value.length);\n const trSetSel = this.view.state.tr.setSelection(sel);\n this.view.dispatch(trSetSel);\n }\n }\n\n public getYamlFrontMatter() {\n if (this.schema.nodes.yaml_metadata) {\n return yamlFrontMatter(this.view.state.doc);\n } else {\n return '';\n }\n }\n\n public applyYamlFrontMatter(yaml: string) {\n if (this.schema.nodes.yaml_metadata) {\n applyYamlFrontMatter(this.view, yaml);\n }\n }\n\n public focus() {\n this.view.focus();\n }\n\n public blur() {\n (this.view.dom as HTMLElement).blur();\n }\n\n public insertChunk(chunkPlaceholder: string, rowOffset: number, colOffset: number) {\n const insertCmd = insertRmdChunk(chunkPlaceholder, rowOffset, colOffset);\n insertCmd(this.view.state, this.view.dispatch, this.view);\n this.focus();\n }\n\n public navigate(type: NavigationType, location: string, recordCurrent = true, animate = false) {\n // perform navigation\n const nav = navigateTo(this.view, type, location, animate);\n\n // emit event\n if (nav !== null) {\n if (!recordCurrent) {\n nav.prevPos = -1;\n }\n this.emitEvent(NavigateEvent, nav);\n }\n }\n\n public resize() {\n this.syncContentWidth();\n this.applyFixupsOnResize();\n this.emitEvent(ResizeEvent);\n }\n\n public enableDevTools(initFn: (view: EditorView, stateClass: any) => void) {\n initFn(this.view, { EditorState });\n }\n\n public getMenus(): EditorMenus {\n return editorMenus(this.context.ui, this.commands());\n }\n\n public commands(): EditorCommand[] {\n // get keybindings (merge user + default)\n const commandKeys = this.commandKeys();\n\n return this.extensions.commands(this.schema).map((command: ProsemirrorCommand) => {\n return {\n id: command.id,\n keymap: commandKeys[command.id],\n isActive: () => command.isActive(this.state),\n isEnabled: () => command.isEnabled(this.state),\n plural: () => command.plural(this.state),\n execute: () => {\n command.execute(this.state, this.view.dispatch, this.view);\n if (command.keepFocus) {\n this.focus();\n }\n },\n };\n });\n }\n\n public applyTheme(theme: EditorTheme) {\n // set global mode classes\n this.parent.classList.toggle('pm-dark-mode', !!theme.darkMode);\n this.parent.classList.toggle('pm-solarized-mode', !!theme.solarizedMode);\n // apply the rest of the theme\n applyTheme(theme);\n }\n\n public setMaxContentWidth(maxWidth: number, minPadding = 10) {\n this.maxContentWidth = maxWidth;\n this.minContentPadding = minPadding;\n this.syncContentWidth();\n }\n\n public setKeybindings(keyBindings: EditorKeybindings) {\n // validate that all of these keys can be rebound\n\n this.keybindings = keyBindings;\n this.state = this.state.reconfigure({\n schema: this.state.schema,\n plugins: this.createPlugins(),\n });\n }\n\n public getEditorFormat() {\n return this.format;\n }\n\n public getPandocFormat() {\n return this.pandocFormat;\n }\n\n public getPandocFormatConfig(isRmd: boolean): PandocFormatConfig {\n return pandocFormatConfigFromDoc(this.state.doc, isRmd);\n }\n\n private dispatchTransaction(tr: Transaction) {\n // track previous outline\n const previousOutline = getOutline(this.state);\n\n // track whether this was a selection-only transaction\n this.lastTrSelectionOnly = tr.selectionSet && !tr.docChanged;\n\n // apply the transaction\n this.state = this.state.apply(tr);\n this.view.updateState(this.state);\n\n // notify listeners of state change\n this.emitEvent(StateChangeEvent);\n\n // notify listeners of updates\n if (tr.docChanged || tr.storedMarksSet) {\n // fire updated (unless this was a fixup)\n if (!tr.getMeta(kFixupTransaction)) {\n this.emitEvent(UpdateEvent);\n }\n\n // fire outline changed if necessary\n if (getOutline(this.state) !== previousOutline) {\n this.emitEvent(OutlineChangeEvent);\n }\n }\n\n this.emitEvent(DispatchEvent, tr);\n\n this.emitEvent(LayoutEvent);\n }\n\n private emitEvent(eventType: EventType, detail?: TDetail) {\n this.events.emit(eventType, detail);\n }\n\n private initExtensions() {\n return initExtensions(\n {\n format: this.format,\n options: this.options,\n ui: this.context.ui,\n math: this.context.ui.math.typeset ? editorMath(this.context.ui) : undefined,\n events: {\n subscribe: this.subscribe.bind(this),\n emit: this.emitEvent.bind(this),\n },\n pandocExtensions: this.pandocFormat.extensions,\n pandocCapabilities: this.pandocCapabilities,\n server: this.context.server,\n navigation: {\n navigate: this.navigate.bind(this),\n },\n },\n this.context.extensions,\n );\n }\n\n private registerCompletionExtension() {\n // mark filter used to screen completions from noInputRules marks\n const markFilter = markInputRuleFilter(this.schema, this.extensions.pandocMarks());\n\n // register omni insert extension\n this.extensions.register([\n omniInsertExtension(this.extensions.omniInserters(this.schema), markFilter, this.context.ui),\n ]);\n\n // register completion extension\n this.extensions.register([\n completionExtension(this.extensions.completionHandlers(), markFilter, this.context.ui, this.events),\n ]);\n }\n\n private registerRealtimeSpelling() {\n this.extensions.registerPlugins(\n [realtimeSpellingPlugin(this.schema, this.extensions.pandocMarks(), this.context.ui, this.events)],\n true,\n );\n }\n\n private createPlugins(): Plugin[] {\n return [\n baseKeysPlugin(this.extensions.baseKeys(this.schema)),\n this.keybindingsPlugin(),\n appendTransactionsPlugin(this.extensions.appendTransactions(this.schema)),\n appendMarkTransactionsPlugin(this.extensions.appendMarkTransactions(this.schema)),\n ...this.extensions.plugins(this.schema),\n this.inputRulesPlugin(),\n this.editablePlugin(),\n this.domEventsPlugin(),\n ];\n }\n\n private editablePlugin() {\n const hooks = this.context.hooks || {};\n return new Plugin({\n key: new PluginKey('editable'),\n props: {\n editable: hooks.isEditable || (() => true),\n },\n });\n }\n\n private inputRulesPlugin() {\n // filter for disabling input rules for selected marks\n const markFilter = markInputRuleFilter(this.schema, this.extensions.pandocMarks());\n\n // create the defautl inputRules plugin\n const plugin = inputRules({ rules: this.extensions.inputRules(this.schema) });\n const handleTextInput = plugin.props.handleTextInput!;\n\n // override to disable input rules as requested\n // https://github.com/ProseMirror/prosemirror-inputrules/commit/b4bf67623aa4c4c1e096c20aa649c0e63751f337\n plugin.props.handleTextInput = (view: EditorView, from: number, to: number, text: string) => {\n if (!markFilter(view.state)) {\n return false;\n }\n return handleTextInput(view, from, to, text);\n };\n return plugin;\n }\n\n private domEventsPlugin(): Plugin {\n return new Plugin({\n key: new PluginKey('domevents'),\n props: {\n handleDOMEvents: {\n blur: (view: EditorView, event: Event) => {\n this.emitEvent(BlurEvent);\n return false;\n },\n focus: (view: EditorView, event: Event) => {\n this.emitEvent(FocusEvent, view.state.doc);\n return false;\n },\n keydown: (view: EditorView, event: Event) => {\n const kbEvent = event as KeyboardEvent;\n if (kbEvent.key === 'Tab' && this.context.ui.prefs.tabKeyMoveFocus()) {\n return true;\n } else {\n return false;\n }\n },\n },\n },\n });\n }\n\n private keybindingsPlugin(): Plugin {\n // get keybindings (merge user + default)\n const commandKeys = this.commandKeys();\n\n // command keys from extensions\n const pluginKeys: { [key: string]: CommandFn } = {};\n const commands = this.extensions.commands(this.schema);\n commands.forEach((command: ProsemirrorCommand) => {\n const keys = commandKeys[command.id];\n if (keys) {\n keys.forEach((key: string) => {\n pluginKeys[key] = command.execute;\n });\n }\n });\n\n // for windows desktop, build a list of control key handlers b/c qtwebengine\n // ends up corrupting ctrl+ keys so they don't hit the ace keybinding\n // (see: https://github.com/rstudio/rstudio/issues/7142)\n const ctrlKeyCodes: { [key: string]: CommandFn } = {};\n Object.keys(pluginKeys).forEach(keyCombo => {\n const match = keyCombo.match(/^Mod-([a-z\\\\])$/);\n if (match) {\n const key = match[1];\n const keyCode = key === '\\\\' ? 'Backslash' : `Key${key.toUpperCase()}`;\n ctrlKeyCodes[keyCode] = pluginKeys[keyCombo];\n }\n });\n\n // create default prosemirror handler\n const prosemirrorKeydownHandler = keydownHandler(pluginKeys);\n\n // return plugin\n return new Plugin({\n key: keybindingsPlugin,\n props: {\n handleKeyDown: (view: EditorView, event: KeyboardEvent) => {\n // workaround for Ctrl+ keys on windows desktop\n if (this.context.ui.context.isWindowsDesktop()) {\n const keyEvent = event as KeyboardEvent;\n if (keyEvent.ctrlKey) {\n const keyCommand = ctrlKeyCodes[keyEvent.code];\n if (keyCommand && keyCommand(this.view.state)) {\n keyCommand(this.view.state, this.view.dispatch, this.view);\n return true;\n }\n }\n }\n // default handling\n return prosemirrorKeydownHandler(view, event);\n },\n },\n });\n }\n\n private commandKeys(): { [key: string]: readonly string[] } {\n // start with keys provided within command definitions\n const commands = this.extensions.commands(this.schema);\n const defaultKeys = commands.reduce((keys: { [key: string]: readonly string[] }, command: ProsemirrorCommand) => {\n keys[command.id] = command.keymap;\n return keys;\n }, {});\n\n // merge with user keybindings\n return {\n ...defaultKeys,\n ...this.keybindings,\n };\n }\n\n // update parent padding based on content width settings (if specified)\n private syncContentWidth() {\n if (this.maxContentWidth && this.parent.clientWidth) {\n const minContentPadding = this.minContentPadding || 10;\n const parentWidth = this.parent.clientWidth;\n if (parentWidth > this.maxContentWidth + 2 * minContentPadding) {\n applyPadding(`calc((100% - ${this.maxContentWidth}px)/2)`);\n } else {\n applyPadding(this.minContentPadding + 'px');\n }\n }\n }\n\n private applyFixupsOnResize() {\n const docChanged = this.applyFixups(FixupContext.Resize);\n if (!docChanged) {\n // If applyFixupsOnResize returns true, then layout has already\n // been fired; if it hasn't, we must do so now\n this.emitEvent(LayoutEvent);\n }\n }\n\n private applyFixups(context: FixupContext) {\n let tr = this.state.tr;\n tr = this.extensionFixups(tr, context);\n if (tr.docChanged) {\n tr.setMeta(kAddToHistoryTransaction, false);\n tr.setMeta(kFixupTransaction, true);\n this.view.dispatch(tr);\n return true;\n }\n return false;\n }\n\n private extensionFixups(tr: Transaction, context: FixupContext) {\n this.extensions.fixups(this.schema, this.view).forEach(fixup => {\n tr = fixup(tr, context);\n });\n return tr;\n }\n\n private initialDoc(): ProsemirrorNode {\n return this.schema.nodeFromJSON({\n type: 'doc',\n attrs: {\n initial: true,\n },\n content: [\n { type: 'body', content: [{ type: 'paragraph' }] },\n { type: 'notes', content: [] },\n ],\n });\n }\n\n private async getMarkdownCode(tr: Transaction, options: PandocWriterOptions) {\n // apply save fixups\n this.extensionFixups(tr, FixupContext.Save);\n\n // apply sentence wrapping if requested\n if (options.wrap === 'sentence') {\n wrapSentences(tr);\n }\n\n // get code\n return this.pandocConverter.fromProsemirror(tr.doc, this.pandocFormat, options);\n }\n}\n\nfunction navigationIdForSelection(state: EditorState): string | null {\n const outline = getOutlineNodes(state.doc);\n const outlineNode = outline.reverse().find(node => node.pos < state.selection.from);\n if (outlineNode) {\n return outlineNode.node.attrs.navigation_id;\n } else {\n return null;\n }\n}\n\n// custom DOMParser that preserves all whitespace (required by display math marks)\nclass EditorDOMParser extends DOMParser {\n constructor(schema: Schema) {\n super(schema, DOMParser.fromSchema(schema).rules);\n }\n public parse(dom: Node, options?: ParseOptions) {\n return super.parse(dom, { ...options, preserveWhitespace: 'full' });\n }\n\n public parseSlice(dom: Node, options?: ParseOptions) {\n return super.parseSlice(dom, { ...options, preserveWhitespace: 'full' });\n }\n}\n","/*\n * cite.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { CSLName, CSLDate, CSL } from './csl';\nimport { InsertCiteProps, InsertCiteUI } from './ui-dialogs';\nimport { urlForDOI } from './doi';\n\nexport const kInvalidCiteKeyChars = /[\\]\\[\\s@',\\\\\\#}{~%&\\$\\^_]/g;\nconst kCiteIdLeadingLength = 8;\n\nexport function createUniqueCiteId(existingIds: string[], baseId: string): string {\n let count = 0;\n\n // Remove any non-8bit ascii characters\n let asciiOnlyBaseId = '';\n for (let i = 0; i < baseId.length; i++) {\n const char = baseId.charCodeAt(i);\n if (char <= 255) {\n asciiOnlyBaseId = asciiOnlyBaseId + String.fromCharCode(char);\n }\n }\n\n // If there are no characters left, just used a placeholder\n if (asciiOnlyBaseId.length === 0) {\n asciiOnlyBaseId = 'cite';\n }\n\n // The base ID but with invalid characters replaced\n let safeBaseId = asciiOnlyBaseId.replace(kInvalidCiteKeyChars, '');\n\n // Ensure that this is a valid citation, stripping any invalid characters\n let proposedId = safeBaseId;\n\n // If there is a conflict with an existing id, we will append\n // the following character and try again. If the conflict continues with\n // the postfix character added, we'll increment and keep going through the\n // alphabet\n const disambiguationStartCharacter = 97; // a\n\n while (existingIds.includes(proposedId)) {\n // If we've wrapped around to a and we haven't found a unique entry\n // Add an 'a' to the end and try again. Will ultimately create an entry like\n // Teague2012aaaf\n if (count !== 0 && count % 26 === 0) {\n safeBaseId = safeBaseId + String.fromCharCode(disambiguationStartCharacter);\n }\n\n const postfix = String.fromCharCode(disambiguationStartCharacter + (count % 26));\n proposedId = safeBaseId + postfix;\n count++;\n }\n return proposedId;\n}\n\n// Suggests a bibliographic identifier based upon the source\nexport function suggestCiteId(existingIds: string[], csl: CSL) {\n const author = csl.author;\n const issued = csl.issued;\n\n // Try to get the last name\n let citeIdLeading = '';\n if (author && author.length > 0) {\n if (author[0].family) {\n citeIdLeading = author[0].family;\n } else if (author[0].literal) {\n citeIdLeading = author[0].literal;\n }\n }\n\n // If we can't use author information, try using short title,\n // the title, or perhaps the type to construct a leading part of the\n // citeId.\n if (citeIdLeading.length === 0) {\n const shortTitle = csl['short-title'];\n if (shortTitle && shortTitle?.length > 0) {\n citeIdLeading = shortTitle.substr(0, Math.min(kCiteIdLeadingLength, shortTitle.length));\n } else if (csl.title) {\n citeIdLeading = csl.title.substr(0, Math.min(kCiteIdLeadingLength, csl.title.length));\n } else {\n citeIdLeading = csl.type;\n }\n }\n\n // Try to get the publication year\n let datePart = '';\n if (issued && issued['date-parts'] && issued['date-parts'].length > 0) {\n const yearIssued = issued['date-parts'][0][0];\n // Sometimes, data arrives with a null value, ignore null\n if (yearIssued) {\n datePart = yearIssued + '';\n }\n }\n\n // Create a deduplicated string against the existing entries\n let baseId = `${citeIdLeading.toLowerCase()}${datePart}`;\n if (baseId.length === 0) {\n baseId = 'untitled';\n }\n\n return createUniqueCiteId(existingIds, baseId);\n}\n\nexport interface CiteField {\n name: string;\n value: string;\n}\n\nexport function urlForCitation(csl: CSL): string | undefined {\n if (csl.URL) {\n return csl.URL;\n } else if (csl.DOI) {\n return urlForDOI(csl.DOI);\n }\n}\n\nexport function formatForPreview(csl: CSL): CiteField[] {\n const pairs = new Array();\n if (csl.title) {\n pairs.push({ name: 'Title', value: csl.title });\n }\n pairs.push({ name: 'Authors', value: formatAuthors(csl.author, 255) });\n if (csl.issued && isValidDate(csl.issued)) {\n pairs.push({ name: 'Issue Date', value: formatIssuedDate(csl.issued) });\n }\n\n const containerTitle = csl['container-title'];\n if (containerTitle) {\n pairs.push({ name: 'Publication', value: containerTitle });\n }\n\n const volume = csl.volume;\n if (volume) {\n pairs.push({ name: 'Volume', value: volume });\n }\n\n const page = csl.page;\n if (page) {\n pairs.push({ name: 'Page(s)', value: page });\n }\n\n const cslAny = csl as { [key: string]: any };\n Object.keys(csl).forEach(key => {\n if (!kFilteredFields.includes(key)) {\n const value = cslAny[key];\n // Don't display complex fields or fields that aren't strings\n if (typeof value === 'string') {\n // Capitalize preview names\n const name = key.charAt(0).toUpperCase() + key.slice(1);\n pairs.push({ name, value });\n }\n }\n });\n\n return pairs;\n}\n\nconst kFilteredFields = [\n 'id',\n 'title',\n 'author',\n 'issued',\n 'container-title',\n 'volume',\n 'page',\n 'abstract',\n 'provider',\n];\n\n// Sometimes, data arrives with a null value\n// This function will validate that the year (required) doesn't\n// contain null\nfunction isValidDate(date: CSLDate): boolean {\n const dateParts = date['date-parts'];\n if (dateParts) {\n const invalidElement = dateParts.find(datePart => datePart[0] === null);\n return invalidElement === undefined;\n }\n return true;\n}\n\n// TODO: Needs to support localization of the templated strings\nconst kEtAl = 'et al.';\nexport function formatAuthors(authors?: CSLName[], maxLength?: number): string {\n // No author(s) specified\n if (!authors || authors.length === 0) {\n return '';\n }\n\n return authors\n .map(author => {\n if (author.literal?.length) {\n return author.literal;\n } else if (author.given?.length && author.family?.length) {\n // Family and Given name\n return `${author.family}, ${author.given.substring(0, 1)}`;\n } else if (author.family?.length) {\n // Family name only\n return `${author.family}`;\n } else {\n return '';\n }\n })\n .reduce((previous, current, index, array) => {\n // Ignore any additional authors if the string\n // exceeds the maximum length\n if ((maxLength && previous.length >= maxLength) || previous.endsWith(kEtAl)) {\n return previous;\n }\n\n if (index === 0) {\n // Too long, truncate\n if (maxLength && current.length > maxLength) {\n return `${current.substring(0, maxLength - 1)}…`;\n }\n // The first author\n return current;\n } else if (index > 0 && index === array.length - 1) {\n // The last author\n return addAuthorOrEtAl(previous, `${previous}, and ${current}`, maxLength);\n } else {\n // Middle authors\n return addAuthorOrEtAl(previous, `${previous}, ${current}`, maxLength);\n }\n });\n}\n\nfunction addAuthorOrEtAl(previousAuthorStr: string, newAuthorStr: string, maxLength?: number) {\n // if adding the string would make it too long, truncate\n if (maxLength && newAuthorStr.length > maxLength) {\n return etAl(previousAuthorStr, maxLength);\n }\n return newAuthorStr;\n}\n\nfunction etAl(authorStr: string, maxLength: number) {\n // First try just using et al., then shorten existing\n // author to accomodate\n const etAlStr = `${authorStr} ${kEtAl}`;\n if (maxLength && etAlStr.length > maxLength) {\n // First try to truncate to a space\n const lastSpace = authorStr.lastIndexOf(' ');\n if (lastSpace) {\n return `${authorStr.substr(0, lastSpace)} ${kEtAl}`;\n } else {\n // As a last resort, truncate with ellipsis\n const excessLength = etAlStr.length - maxLength - 1;\n return `${authorStr.substr(0, authorStr.length - excessLength)}… ${kEtAl}`;\n }\n }\n return etAlStr;\n}\n\n// TODO: Needs to support localization of the templated strings\nexport function formatIssuedDate(date: CSLDate | undefined): string {\n // No issue date for this\n if (!date) {\n return '';\n }\n\n const dateParts = date['date-parts'];\n if (dateParts) {\n switch (dateParts.length) {\n // There is a date range\n case 2:\n return `${dateParts[0][0]}-${dateParts[1][0]}`;\n // Only a single date\n case 1:\n // Note that it is possible to receive an entry with a single null entry\n // For examples:\n // 10.1163/1874-6772_seg_a44_588\n const singleDatePart = dateParts[0][0];\n return `${singleDatePart ? singleDatePart : ''}`;\n\n // Seems like a malformed date :(\n case 0:\n default:\n return '';\n }\n }\n return '';\n}\n\nexport function citeUI(citeProps: InsertCiteProps): InsertCiteUI {\n if (citeProps.csl) {\n const suggestedId = suggestCiteId(citeProps.existingIds, citeProps.csl);\n const previewFields = formatForPreview(citeProps.csl);\n return {\n suggestedId,\n previewFields,\n };\n } else {\n // This should never happen - this function should always be called with a work\n return {\n suggestedId: '',\n previewFields: [],\n };\n }\n}\n","/*\n * doi.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport interface DOIResult {\n status: 'ok' | 'notfound' | 'nohost' | 'error';\n message: any | null;\n error: string;\n}\n\nexport interface DOIServer {\n fetchCSL: (doi: string, progressDelay: number) => Promise;\n}\n\n// ^10.\\d{4,9}/[-._;()/:A-Z0-9]+$\n// Core regexes come from https://www.crossref.org/blog/dois-and-matching-regular-expressions/\nconst kModernCrossrefDOIRegex = /10.\\d{4,9}\\/[-._;()/:A-Z0-9]+$/i;\nconst kEarlyWileyCrossrefDOIRegex = /10.1002\\/[^\\s]+$/i;\nconst kOtherCrossrefDOIRegex1 = /10.\\\\d{4}\\/\\d+-\\d+X?(\\d+)\\d+<[\\d\\w]+:[\\d\\w]*>\\d+.\\d+.\\w+;\\d$/i;\nconst kOtherCrossrefDOIRegex2 = /10.1021\\/\\w\\w\\d+$/i;\nconst kOtherCrossrefDOIRegex3 = /10.1207\\/[\\w\\d]+\\&\\d+_\\d+$/i;\n\nconst kCrossrefMatches = [\n kModernCrossrefDOIRegex,\n kEarlyWileyCrossrefDOIRegex,\n kOtherCrossrefDOIRegex1,\n kOtherCrossrefDOIRegex2,\n kOtherCrossrefDOIRegex3,\n];\n\n// Determines whether a a given string may be a DOI\n// Note that this will validate the form of the string, but not\n// whether it is actually a registered DOI\nexport function hasDOI(token: string): boolean {\n return findDOI(token) !== undefined;\n}\n\nexport function findDOI(token: string): string | undefined {\n let match = null;\n kCrossrefMatches.find(regex => {\n match = token.match(regex);\n return match && match[0].length > 0;\n });\n\n if (match === null) {\n return undefined;\n } else {\n return match[0];\n }\n}\n\nexport function urlForDOI(doi: string): string {\n return `https://doi.org/${doi}`;\n}\n","/*\n * ui-dialogs.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { LinkTargets, LinkCapabilities, LinkType } from './link';\nimport { ImageDimensions } from './image';\nimport { ListCapabilities, ListType } from './list';\nimport { TableCapabilities } from './table';\nimport { CSL } from './csl';\nimport { CiteField } from './cite';\nimport { kStyleAttrib, attrPartitionKeyvalue, pandocAttrKeyvalueFromText } from './pandoc_attr';\n\nexport interface EditorDialogs {\n alert: AlertFn;\n yesNoMessage: YesNoMessageFn;\n editLink: LinkEditorFn;\n editImage: ImageEditorFn;\n editCodeBlock: CodeBlockEditorFn;\n editList: ListEditorFn;\n editAttr: AttrEditorFn;\n editSpan: AttrEditorFn;\n editDiv: DivAttrEditorFn;\n editRawInline: RawFormatEditorFn;\n editRawBlock: RawFormatEditorFn;\n insertTable: InsertTableFn;\n insertCite: InsertCiteFn;\n htmlDialog: EditorHTMLDialogFn;\n}\n\nexport type EditorHTMLDialogFn = (\n title: string,\n okText: string | null,\n create: EditorHTMLDialogCreateFn,\n focus: VoidFunction,\n validate: EditorHTMLDialogValidateFn,\n) => Promise;\n\nexport type EditorHTMLDialogCreateFn = (\n containerWidth: number,\n containerHeight: number,\n confirm: VoidFunction,\n cancel: VoidFunction,\n showProgress: (message: string) => void,\n hideProgress: VoidFunction,\n) => HTMLElement;\n\nexport type EditorHTMLDialogValidateFn = () => string | null;\n\nexport const kAlertTypeInfo = 1;\nexport const kAlertTypeWarning = 2;\nexport const kAlertTypeError = 3;\n\nexport type AlertFn = (message: string, title: string, type: number) => Promise;\n\nexport type YesNoMessageFn = (\n message: string,\n title: string,\n type: number,\n yesLabel: string,\n noLabel: string,\n) => Promise;\n\nexport type AttrEditorFn = (attr: AttrProps, idHint?: string) => Promise;\n\nexport type DivAttrEditorFn = (attr: AttrProps, removeEnabled: boolean) => Promise;\n\nexport type LinkEditorFn = (\n link: LinkProps,\n targets: LinkTargets,\n capabilities: LinkCapabilities,\n) => Promise;\n\nexport type ImageEditorFn = (\n image: ImageProps,\n dims: ImageDimensions | null,\n editAttributes: boolean,\n) => Promise;\n\nexport type CodeBlockEditorFn = (\n codeBlock: CodeBlockProps,\n attributes: boolean,\n languages: string[],\n) => Promise;\n\nexport type ListEditorFn = (list: ListProps, capabilities: ListCapabilities) => Promise;\n\nexport type RawFormatEditorFn = (raw: RawFormatProps, outputFormats: string[]) => Promise;\n\nexport type InsertTableFn = (capabilities: TableCapabilities) => Promise;\n\nexport type InsertCiteFn = (props: InsertCiteProps) => Promise;\n\nexport interface AttrProps {\n readonly id?: string;\n readonly classes?: string[];\n readonly keyvalue?: Array<[string, string]>;\n}\n\nexport interface AttrEditResult {\n readonly action: 'edit' | 'remove';\n readonly attr: AttrProps;\n}\n\nexport interface LinkProps extends AttrProps {\n readonly type: LinkType;\n readonly text: string;\n readonly href: string;\n readonly heading?: string;\n readonly title?: string;\n}\n\nexport interface LinkEditResult {\n readonly action: 'edit' | 'remove';\n readonly link: LinkProps;\n}\n\nexport interface ImageProps extends AttrProps {\n src: string | null;\n title?: string;\n alt?: string;\n linkTo?: string;\n width?: number;\n height?: number;\n units?: string;\n lockRatio?: boolean;\n}\n\nexport type ImageEditResult = ImageProps;\n\nexport interface CodeBlockProps extends AttrProps {\n lang: string;\n}\n\nexport type CodeBlockEditResult = CodeBlockProps;\n\nexport interface ListProps {\n type: ListType;\n tight: boolean;\n order: number;\n number_style: string;\n number_delim: string;\n}\n\nexport type ListEditResult = ListProps;\n\nexport interface InsertTableResult {\n rows: number;\n cols: number;\n header: boolean;\n caption?: string;\n}\n\nexport interface InsertCiteProps {\n doi: string;\n existingIds: string[];\n bibliographyFiles: string[];\n provider?: string;\n csl?: CSL;\n citeUI?: InsertCiteUI;\n}\n\nexport interface InsertCiteUI {\n suggestedId: string;\n previewFields: CiteField[];\n}\n\nexport interface InsertCiteResult {\n id: string;\n bibliographyFile: string;\n csl: CSL;\n}\n\nexport interface RawFormatProps {\n content: string;\n format: string;\n}\n\nexport interface RawFormatResult {\n readonly action: 'edit' | 'remove';\n readonly raw: RawFormatProps;\n}\n\nexport interface AttrEditInput {\n id?: string;\n classes?: string;\n style?: string;\n keyvalue?: string;\n}\n\nexport function attrInputToProps(attr: AttrEditInput): AttrProps {\n const classes = attr.classes ? attr.classes.split(/\\s+/) : [];\n let keyvalue: Array<[string, string]> | undefined;\n if (attr.keyvalue || attr.style) {\n let text = attr.keyvalue || '';\n if (attr.style) {\n text += `\\nstyle=${attr.style}\\n`;\n }\n keyvalue = pandocAttrKeyvalueFromText(text, '\\n');\n }\n return {\n id: asPandocId(attr.id || ''),\n classes: classes.map(asPandocClass),\n keyvalue,\n };\n}\n\nfunction asPandocId(id: string) {\n return id.replace(/^#/, '');\n}\n\nfunction asPandocClass(clz: string) {\n return clz.replace(/^\\./, '');\n}\n\nexport function attrPropsToInput(attr: AttrProps): AttrEditInput {\n let style: string | undefined;\n let keyvalue: string | undefined;\n if (attr.keyvalue) {\n const partitionedKeyvalue = attrPartitionKeyvalue([kStyleAttrib], attr.keyvalue);\n if (partitionedKeyvalue.partitioned.length > 0) {\n style = partitionedKeyvalue.partitioned[0][1];\n }\n keyvalue = attrTextFromKeyvalue(partitionedKeyvalue.base);\n }\n\n return {\n id: asHtmlId(attr.id) || undefined,\n classes: attr.classes ? attr.classes.map(asHtmlClass).join(' ') : undefined,\n style,\n keyvalue,\n };\n}\n\nfunction attrTextFromKeyvalue(keyvalue: Array<[string, string]>) {\n return keyvalue.map(kv => `${kv[0]}=${kv[1]}`).join('\\n');\n}\n\nfunction asHtmlId(id: string | undefined) {\n if (id) {\n if (id.startsWith('#')) {\n return id;\n } else {\n return '#' + id;\n }\n } else {\n return id;\n }\n}\n\nfunction asHtmlClass(clz: string | undefined) {\n if (clz) {\n if (clz.startsWith('.')) {\n return clz;\n } else {\n return '.' + clz;\n }\n } else {\n return clz;\n }\n}\n","/*\n * pandoc_attr.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { NodeSpec, MarkSpec } from 'prosemirror-model';\n\nimport { PandocToken, PandocExtensions } from './pandoc';\nimport { extensionEnabled, extensionIfEnabled, Extension } from './extension';\n\nexport const kPandocAttrId = 0;\nexport const kPandocAttrClasses = 1;\nexport const kPandocAttrKeyvalue = 2;\n\nconst kDataPmPandocAttr = 'data-pm-pandoc-attr';\n\nexport const kWidthAttrib = 'width';\nexport const kHeightAttrib = 'height';\nexport const kStyleAttrib = 'style';\nexport const kAlignAttrib = 'align';\n\nexport const kCodeBlockAttr = 0;\nexport const kCodeBlockText = 1;\n\nexport const kSpanAttr = 0;\nexport const kSpanChildren = 1;\n\nexport interface PandocAttr {\n id: string;\n classes: string[];\n keyvalue: Array<[string, string]>;\n}\n\nexport const pandocAttrSpec = {\n id: { default: null },\n classes: { default: [] },\n keyvalue: { default: [] },\n};\n\nexport function pandocAttrAvailable(attrs: any) {\n return !!attrs.id || (attrs.classes && attrs.classes.length > 0) || (attrs.keyvalue && attrs.keyvalue.length > 0);\n}\n\nexport function pandocAttrFrom(attrs: any) {\n const pandocAttr: any = {};\n if (attrs.id) {\n pandocAttr.id = attrs.id;\n }\n if (attrs.classes) {\n pandocAttr.classes = attrs.classes;\n }\n if (attrs.keyvalue) {\n pandocAttr.keyvalue = attrs.keyvalue;\n }\n\n return pandocAttr;\n}\n\nexport function pandocAttrInSpec(spec: NodeSpec | MarkSpec) {\n const keys = Object.keys((spec.attrs as object) || {});\n return keys.includes('id') && keys.includes('classes') && keys.includes('keyvalue');\n}\n\nexport function pandocAttrReadAST(tok: PandocToken, index: number) {\n const pandocAttr = tok.c[index];\n return {\n id: pandocAttr[kPandocAttrId] || undefined,\n classes: pandocAttr[kPandocAttrClasses],\n keyvalue: pandocAttr[kPandocAttrKeyvalue],\n };\n}\n\nexport function pandocAttrToDomAttr(attrs: any, marker = true) {\n // id and class\n const domAttr: any = {};\n if (attrs.id) {\n domAttr.id = attrs.id;\n }\n if (attrs.classes && attrs.classes.length > 0) {\n domAttr.class = attrs.classes.join(' ');\n }\n\n // keyvalue pairs\n attrs.keyvalue.forEach((keyvalue: [string, string]) => {\n domAttr[keyvalue[0]] = keyvalue[1];\n });\n\n // marker\n if (marker) {\n domAttr[kDataPmPandocAttr] = '1';\n }\n\n return domAttr;\n}\n\nexport function pandocAttrParseDom(el: Element, attrs: { [key: string]: string | null }, forceAttrs = false) {\n // exclude any keys passed to us\n const excludedNames = Object.keys(attrs);\n\n // if this isn't from a prosemirror pandoc node then include only src and alt\n const includedNames: string[] = [];\n if (!forceAttrs && !el.hasAttribute(kDataPmPandocAttr)) {\n includedNames.push('src', 'alt');\n }\n\n // read attributes\n const attr: any = {};\n attr.classes = [];\n attr.keyvalue = [];\n el.getAttributeNames().forEach(name => {\n const value: string = el.getAttribute(name) as string;\n // exclude attributes already parsed and prosemirror internal attributes\n if (excludedNames.indexOf(name) === -1 && !name.startsWith('data-pm')) {\n // if we have an include filter then use it\n if (!includedNames.length || includedNames.includes(name)) {\n if (name === 'id') {\n attr.id = value;\n } else if (name === 'class') {\n attr.classes = value\n .split(/\\s+/)\n .filter(val => !!val.length)\n .filter(val => !val.startsWith('pm-'));\n } else {\n attr.keyvalue.push([name, value]);\n }\n }\n }\n });\n return attr;\n}\n\nexport function pandocAttrParseText(attr: string): PandocAttr | null {\n attr = attr.trim();\n\n let id = '';\n const classes: string[] = [];\n let remainder = '';\n\n let current = '';\n const resolveCurrent = () => {\n const resolve = current;\n current = '';\n\n if (resolve.length === 0) {\n return true;\n } else if (resolve.startsWith('#')) {\n if (id.length === 0 && resolve.length > 1) {\n id = resolve.substr(1);\n return true;\n } else {\n return false;\n }\n } else if (resolve.startsWith('.')) {\n if (resolve.length > 1) {\n classes.push(resolve.substr(1));\n return true;\n } else {\n return false;\n }\n } else {\n remainder = resolve;\n return true;\n }\n };\n\n for (let i = 0; i < attr.length; i++) {\n let inQuotes = false;\n const ch = attr[i];\n inQuotes = ch === '\"' ? !inQuotes : inQuotes;\n if (ch !== ' ' && !inQuotes) {\n current += ch;\n } else if (resolveCurrent()) {\n // if we have a remainder then the rest of the string is the remainder\n if (remainder.length > 0) {\n remainder = remainder + attr.substr(i);\n break;\n }\n } else {\n return null;\n }\n }\n\n if (resolveCurrent()) {\n if (id.length === 0 && classes.length === 0) {\n remainder = attr;\n }\n return {\n id,\n classes,\n keyvalue: remainder.length > 0 ? pandocAttrKeyvalueFromText(remainder, ' ') : [],\n };\n } else {\n return null;\n }\n}\n\nexport function pandocAttrKeyvalueFromText(text: string, separator: ' ' | '\\n'): Array<[string, string]> {\n // if the separator is a space then convert unquoted spaces to newline\n if (separator === ' ') {\n let convertedText = '';\n let inQuotes = false;\n for (let i = 0; i < text.length; i++) {\n let ch = text.charAt(i);\n if (ch === '\"') {\n inQuotes = !inQuotes;\n } else if (ch === ' ' && !inQuotes) {\n ch = '\\n';\n }\n convertedText += ch;\n }\n text = convertedText;\n }\n\n const lines = text.trim().split('\\n');\n return lines.map(line => {\n const parts = line.trim().split('=');\n return [parts[0], (parts[1] || '').replace(/^\"/, '').replace(/\"$/, '')];\n });\n}\n\nexport interface AttrKeyvaluePartitioned {\n base: Array<[string, string]>;\n partitioned: Array<[string, string]>;\n}\n\nexport function attrPartitionKeyvalue(partition: string[], keyvalue: Array<[string, string]>): AttrKeyvaluePartitioned {\n const base = new Array<[string, string]>();\n const partitioned = new Array<[string, string]>();\n\n keyvalue.forEach(kv => {\n if (partition.includes(kv[0])) {\n partitioned.push(kv);\n } else {\n base.push(kv);\n }\n });\n\n return {\n base,\n partitioned,\n };\n}\n\nexport function extensionIfPandocAttrEnabled(extension: Extension) {\n return extensionIfEnabled(extension, kPandocAttrExtensions);\n}\n\nexport function pandocAttrEnabled(pandocExtensions: PandocExtensions) {\n return extensionEnabled(pandocExtensions, kPandocAttrExtensions);\n}\n\nconst kPandocAttrExtensions = [\n 'link_attributes',\n 'mmd_link_attributes',\n 'mmd_header_identifiers',\n 'header_attributes',\n 'fenced_code_attributes',\n 'inline_code_attributes',\n 'bracketed_spans',\n 'native_spans',\n 'fenced_divs',\n 'native_divs',\n];\n","/*\n * extension.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { InputRule } from 'prosemirror-inputrules';\nimport { Schema } from 'prosemirror-model';\nimport { Plugin } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { ProsemirrorCommand } from './command';\nimport { PandocMark } from './mark';\nimport { PandocNode } from './node';\nimport { EditorUI } from './ui';\nimport { BaseKeyBinding } from './basekeys';\nimport { AppendTransactionHandler, AppendMarkTransactionHandler } from './transaction';\nimport { EditorOptions } from './options';\nimport { PandocExtensions } from './pandoc';\nimport { FixupFn } from './fixup';\nimport { EditorEvents } from './events';\nimport { PandocCapabilities } from './pandoc_capabilities';\nimport { EditorFormat } from './format';\nimport { MarkInputRuleFilter } from './input_rule';\nimport { CompletionHandler } from './completion';\nimport { EditorNavigation } from './navigation';\nimport { EditorMath } from './math';\nimport { EditorServer } from './server';\n\nexport interface Extension {\n marks?: PandocMark[];\n nodes?: PandocNode[];\n baseKeys?: (schema: Schema) => readonly BaseKeyBinding[];\n inputRules?: (schema: Schema, markFilter: MarkInputRuleFilter) => readonly InputRule[];\n commands?: (schema: Schema) => readonly ProsemirrorCommand[];\n plugins?: (schema: Schema) => readonly Plugin[];\n appendTransaction?: (schema: Schema) => readonly AppendTransactionHandler[];\n appendMarkTransaction?: (schema: Schema) => readonly AppendMarkTransactionHandler[];\n fixups?: (schema: Schema, view: EditorView) => Readonly;\n completionHandlers?: () => readonly CompletionHandler[];\n}\n\nexport interface ExtensionContext {\n pandocExtensions: PandocExtensions;\n pandocCapabilities: PandocCapabilities;\n server: EditorServer;\n ui: EditorUI;\n math?: EditorMath;\n format: EditorFormat;\n options: EditorOptions;\n events: EditorEvents;\n navigation: EditorNavigation;\n}\n\nexport type ExtensionFn = (context: ExtensionContext) => Extension | null;\n\n// create an ExtensionFn for a given extension and format option that must be enabled\nexport function extensionIfEnabled(extension: Extension, name: string | string[]) {\n return (context: ExtensionContext) => {\n if (extensionEnabled(context.pandocExtensions, name)) {\n return extension;\n } else {\n return null;\n }\n };\n}\n\nexport function extensionEnabled(pandocExtensions: PandocExtensions, name: string | string[]) {\n // match single extension name\n if (typeof name === 'string') {\n if (pandocExtensions[name]) {\n return true;\n }\n\n // match any one of several names\n } else if (Array.isArray(name)) {\n for (const nm of name) {\n if (pandocExtensions[nm]) {\n return true;\n }\n }\n }\n\n return false;\n}\n","/*\n * pandoc_capabilities.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { PandocServer, parsePandocListOutput, PandocApiVersion } from './pandoc';\n\nexport interface PandocCapabilitiesResult {\n version: string;\n api_version: PandocApiVersion;\n output_formats: string;\n highlight_languages: string;\n}\n\nexport interface PandocCapabilities {\n version: string;\n api_version: PandocApiVersion;\n output_formats: string[];\n highlight_languages: string[];\n}\n\nexport async function getPandocCapabilities(server: PandocServer) {\n const result = await server.getCapabilities();\n return {\n version: result.version,\n api_version: result.api_version,\n output_formats: parsePandocListOutput(result.output_formats),\n highlight_languages: parsePandocListOutput(result.highlight_languages),\n };\n}\n","/*\n * pandoc.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Fragment, Mark, Node as ProsemirrorNode, Schema, NodeType } from 'prosemirror-model';\n\nimport { PandocAttr, pandocAttrReadAST, kSpanChildren, kSpanAttr } from './pandoc_attr';\nimport { PandocCapabilitiesResult } from './pandoc_capabilities';\nimport { kQuoteType, kQuoteChildren, QuoteType } from './quote';\nimport { BibliographyResult } from './bibliography/bibliography-provider_local';\n\nimport { stringifyMath } from './math';\nimport { kCodeText } from './code';\nimport { kLinkChildren } from './link';\n\nexport interface PandocServer {\n getCapabilities(): Promise;\n markdownToAst(markdown: string, format: string, options: string[]): Promise;\n astToMarkdown(ast: PandocAst, format: string, options: string[]): Promise;\n listExtensions(format: string): Promise;\n getBibliography(\n file: string | null,\n bibliography: string[],\n refBlock: string | null,\n etag: string | null,\n ): Promise;\n addToBibliography(\n bibliography: string,\n project: boolean,\n id: string,\n sourceAsJson: string,\n sourceAsBibTeX: string,\n ): Promise;\n citationHTML(file: string | null, sourceAsJson: string, csl: string | null): Promise;\n}\n\nexport interface PandocWriterReferencesOptions {\n location?: string; // block | section | document\n prefix?: string;\n}\n\nexport interface PandocWriterOptions {\n atxHeaders?: boolean;\n references?: PandocWriterReferencesOptions;\n wrap?: string;\n dpi?: number;\n}\n\nexport interface PandocExtensions {\n abbreviations: boolean;\n all_symbols_escapable: boolean;\n amuse: boolean;\n angle_brackets_escapable: boolean;\n ascii_identifiers: boolean;\n auto_identifiers: boolean;\n autolink_bare_uris: boolean;\n backtick_code_blocks: boolean;\n blank_before_blockquote: boolean;\n blank_before_header: boolean;\n bracketed_spans: boolean;\n citations: boolean;\n compact_definition_lists: boolean;\n definition_lists: boolean;\n east_asian_line_breaks: boolean;\n emoji: boolean;\n empty_paragraphs: boolean;\n epub_html_exts: boolean;\n escaped_line_breaks: boolean;\n example_lists: boolean;\n fancy_lists: boolean;\n fenced_code_attributes: boolean;\n fenced_code_blocks: boolean;\n fenced_divs: boolean;\n footnotes: boolean;\n four_space_rule: boolean;\n gfm_auto_identifiers: boolean;\n grid_tables: boolean;\n hard_line_breaks: boolean;\n header_attributes: boolean;\n ignore_line_breaks: boolean;\n implicit_figures: boolean;\n implicit_header_references: boolean;\n inline_code_attributes: boolean;\n inline_notes: boolean;\n intraword_underscores: boolean;\n latex_macros: boolean;\n line_blocks: boolean;\n link_attributes: boolean;\n lists_without_preceding_blankline: boolean;\n literate_haskell: boolean;\n markdown_attribute: boolean;\n markdown_in_html_blocks: boolean;\n mmd_header_identifiers: boolean;\n mmd_link_attributes: boolean;\n mmd_title_block: boolean;\n multiline_tables: boolean;\n native_divs: boolean;\n native_spans: boolean;\n native_numbering: boolean;\n ntb: boolean;\n old_dashes: boolean;\n pandoc_title_block: boolean;\n pipe_tables: boolean;\n raw_attribute: boolean;\n raw_html: boolean;\n raw_tex: boolean;\n shortcut_reference_links: boolean;\n simple_tables: boolean;\n smart: boolean;\n space_in_atx_header: boolean;\n spaced_reference_links: boolean;\n startnum: boolean;\n strikeout: boolean;\n subscript: boolean;\n superscript: boolean;\n styles: boolean;\n task_lists: boolean;\n table_captions: boolean;\n tex_math_dollars: boolean;\n tex_math_double_backslash: boolean;\n tex_math_single_backslash: boolean;\n yaml_metadata_block: boolean;\n gutenberg: boolean;\n // attributes: boolean; (not yet)\n [key: string]: boolean;\n}\n\nexport function imageAttributesAvailable(pandocExtensions: PandocExtensions) {\n return pandocExtensions.link_attributes || pandocExtensions.raw_html;\n}\n\nexport function parsePandocListOutput(output: string) {\n return output.split(/\\r?\\n/).filter(entry => entry.length);\n}\n\nexport interface PandocAst {\n blocks: PandocToken[];\n 'pandoc-api-version': PandocApiVersion;\n meta: any;\n heading_ids?: string[]; // used only for reading not writing\n}\n\nexport type PandocApiVersion = number[];\n\nexport interface PandocToken {\n t: string;\n c?: any;\n}\n\n// https://github.com/jgm/pandoc-types/blob/master/Text/Pandoc/Definition.hs\nexport enum PandocTokenType {\n Str = 'Str',\n Space = 'Space',\n Strong = 'Strong',\n Emph = 'Emph',\n Code = 'Code',\n Superscript = 'Superscript',\n Subscript = 'Subscript',\n Strikeout = 'Strikeout',\n SmallCaps = 'SmallCaps',\n Underline = 'Underline',\n Quoted = 'Quoted',\n RawInline = 'RawInline',\n RawBlock = 'RawBlock',\n LineBlock = 'LineBlock',\n Para = 'Para',\n Plain = 'Plain',\n Header = 'Header',\n CodeBlock = 'CodeBlock',\n BlockQuote = 'BlockQuote',\n BulletList = 'BulletList',\n OrderedList = 'OrderedList',\n DefinitionList = 'DefinitionList',\n Image = 'Image',\n Link = 'Link',\n Note = 'Note',\n Cite = 'Cite',\n Table = 'Table',\n AlignRight = 'AlignRight',\n AlignLeft = 'AlignLeft',\n AlignDefault = 'AlignDefault',\n AlignCenter = 'AlignCenter',\n ColWidth = 'ColWidth',\n ColWidthDefault = 'ColWidthDefault',\n HorizontalRule = 'HorizontalRule',\n LineBreak = 'LineBreak',\n SoftBreak = 'SoftBreak',\n Math = 'Math',\n InlineMath = 'InlineMath',\n DisplayMath = 'DisplayMath',\n Div = 'Div',\n Span = 'Span',\n Null = 'Null',\n}\n\nexport interface PandocTokenReader {\n // pandoc token name (e.g. \"Str\", \"Emph\", etc.)\n readonly token: PandocTokenType;\n\n // If present, gives a chance for the reader to decide whether it actually\n // wants to handle the token, based on factors other than the PandocTokenType\n readonly match?: (tok: PandocToken) => boolean;\n\n // one and only one of these values must also be set\n readonly text?: boolean;\n readonly node?: string;\n readonly block?: string;\n readonly mark?: string;\n readonly code_block?: boolean;\n\n // functions for getting attributes and children\n getAttrs?: (tok: PandocToken) => any;\n getChildren?: (tok: PandocToken) => any[];\n getText?: (tok: PandocToken) => string;\n\n // lower-level handler function that overrides the above handler attributes\n // (they are ignored when handler is specified)\n handler?: (schema: Schema) => (writer: ProsemirrorWriter, tok: PandocToken) => void;\n\n // post-processor for performing fixups that rely on seeing the entire\n // document (e.g. recognizing implicit header references)\n postprocessor?: PandocPostprocessorFn;\n}\n\n// constants used to read the contents of raw blocks\nexport const kRawBlockFormat = 0;\nexport const kRawBlockContent = 1;\n\n// filter sequences of tokens (e.g. for reducing some adjacent tokens to a single token)\nexport type PandocTokensFilterFn = (tokens: PandocToken[], writer: ProsemirrorWriter) => PandocToken[];\n\n// special reader that gets a first shot at blocks (i.e. to convert a para w/ a single image into a figure)\nexport type PandocBlockReaderFn = (schema: Schema, tok: PandocToken, writer: ProsemirrorWriter) => boolean;\n\n// reader that gets a first shot at inline html (e.g. image node parsing an tag)\nexport type PandocInlineHTMLReaderFn = (schema: Schema, html: string, writer?: ProsemirrorWriter) => boolean;\n\nexport interface ProsemirrorWriter {\n // open (then close) a node container\n openNode(type: NodeType, attrs: {}): void;\n closeNode(): ProsemirrorNode;\n\n // special open call for note node containers\n openNoteNode(ref: string): void;\n\n // add a node to the current container\n addNode(type: NodeType, attrs: {}, content: ProsemirrorNode[]): ProsemirrorNode | null;\n\n // open and close marks\n openMark(mark: Mark): void;\n closeMark(mark: Mark): void;\n\n // add text to the current node using the current mark set\n writeText(text: string): void;\n\n // write tokens into the current node\n writeTokens(tokens: PandocToken[]): void;\n\n // see if any inline HTML readers want to handle this html\n hasInlineHTMLWriter(html: string): boolean;\n writeInlineHTML(html: string): void;\n\n // log an unrecoginzed token type\n logUnrecognized(token: string): void;\n\n // query whether a given node type is open\n // (useful for e.g. conditional behavior when in a list or table)\n isNodeOpen(type: NodeType): boolean;\n}\n\nexport interface PandocNodeWriter {\n readonly name: string;\n readonly write: PandocNodeWriterFn;\n}\n\nexport type PandocNodeWriterFn = (output: PandocOutput, node: ProsemirrorNode) => void;\n\nexport type PandocPreprocessorFn = (markdown: string) => string;\n\nexport type PandocPostprocessorFn = (doc: ProsemirrorNode) => ProsemirrorNode;\n\nexport interface PandocMarkWriter {\n // pandoc mark name\n readonly name: string;\n\n // The 'priority' property allows us to dicate the order of nesting\n // for marks (this is required b/c Prosemirror uses a flat structure\n // whereby multiple marks are attached to text nodes). This allows us\n // to e.g. ensure that strong and em always occur outside code.\n readonly priority: number;\n\n // writer function\n readonly write: PandocMarkWriterFn;\n}\n\nexport type PandocMarkWriterFn = (output: PandocOutput, mark: Mark, parent: Fragment) => void;\n\nexport type PandocOutputOption = 'writeSpaces';\n\nexport interface PandocOutput {\n extensions: PandocExtensions;\n write(value: any): void;\n writeToken(type: PandocTokenType, content?: (() => void) | any): void;\n writeMark(type: PandocTokenType, parent: Fragment, expelEnclosingWhitespace?: boolean): void;\n writeArray(content: () => void): void;\n writeAttr(id?: string, classes?: string[], keyvalue?: [[string, string]]): void;\n writeText(text: string | null): void;\n writeLink(href: string, title: string, attr: PandocAttr | null, f: () => void): void;\n writeNode(node: ProsemirrorNode): void;\n writeNodes(parent: ProsemirrorNode): void;\n writeNote(note: ProsemirrorNode): void;\n writeInlines(fragment: Fragment): void;\n writeRawMarkdown(markdown: Fragment | string, escapeSymbols?: boolean): void;\n withOption(option: PandocOutputOption, value: boolean, f: () => void): void;\n}\n\n// collect the text from a collection of pandoc ast\n// elements (ignores marks, useful for ast elements\n// that support marks but whose prosemirror equivalent\n// does not, e.g. image alt text)\n// https://github.com/jgm/pandoc/blob/83880b0dbc318703babfbb6905b1046fa48f1216/src/Text/Pandoc/Shared.hs#L439\nexport function stringifyTokens(c: PandocToken[], unemoji = false): string {\n return c\n .map(elem => {\n if (elem.t === PandocTokenType.Str) {\n return elem.c;\n } else if (\n elem.t === PandocTokenType.Space ||\n elem.t === PandocTokenType.SoftBreak ||\n elem.t === PandocTokenType.LineBreak\n ) {\n return ' ';\n } else if (elem.t === PandocTokenType.Link) {\n return stringifyTokens(elem.c[kLinkChildren]);\n } else if (elem.t === PandocTokenType.Span) {\n const attr = pandocAttrReadAST(elem, kSpanAttr);\n if (unemoji && attr.classes && attr.classes[0] === 'emoji') {\n return attr.keyvalue[0][1];\n } else {\n return stringifyTokens(elem.c[kSpanChildren]);\n }\n } else if (elem.t === PandocTokenType.Quoted) {\n const type = elem.c[kQuoteType].t;\n const quote = type === QuoteType.SingleQuote ? \"'\" : '\"';\n return quote + stringifyTokens(elem.c[kQuoteChildren]) + quote;\n } else if (elem.t === PandocTokenType.Math) {\n return stringifyMath(elem);\n } else if (elem.t === PandocTokenType.Code) {\n return elem.c[kCodeText];\n } else if (elem.c) {\n return stringifyTokens(elem.c);\n } else {\n return '';\n }\n })\n .join('');\n}\n\nexport function forEachToken(tokens: PandocToken[], f: (tok: PandocToken) => void) {\n mapTokens(tokens, (tok: PandocToken) => {\n f(tok);\n return tok;\n });\n}\n\nexport function mapTokens(tokens: PandocToken[], f: (tok: PandocToken) => PandocToken) {\n function isToken(val: any) {\n if (val !== null && typeof val === 'object') {\n return val.hasOwnProperty('t');\n } else {\n return false;\n }\n }\n\n function tokenHasChildren(tok: PandocToken) {\n return tok !== null && typeof tok === 'object' && Array.isArray(tok.c);\n }\n\n function mapValue(val: any): any {\n if (isToken(val)) {\n return mapToken(val);\n } else if (Array.isArray(val)) {\n return val.map(mapValue);\n } else {\n return val;\n }\n }\n\n function mapToken(tok: PandocToken): PandocToken {\n const mappedTok = f(tok);\n if (tokenHasChildren(mappedTok)) {\n mappedTok.c = mappedTok.c.map(mapValue);\n }\n return mappedTok;\n }\n\n return tokens.map(mapToken);\n}\n\nexport function tokenTextEscaped(t: PandocToken) {\n return t.c.replace(/\\\\/g, `\\\\\\\\`);\n}\n\n// sort marks by priority (in descending order)\nexport function marksByPriority(marks: Mark[], markWriters: { [key: string]: PandocMarkWriter }) {\n return marks.sort((a: Mark, b: Mark) => {\n const aPriority = markWriters[a.type.name].priority;\n const bPriority = markWriters[b.type.name].priority;\n if (aPriority < bPriority) {\n return 1;\n } else if (bPriority < aPriority) {\n return -1;\n } else {\n return 0;\n }\n });\n}\n","/*\n * quote.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport const kQuoteType = 0;\nexport const kQuoteChildren = 1;\n\nexport enum QuoteType {\n SingleQuote = 'SingleQuote',\n DoubleQuote = 'DoubleQuote',\n}\n\nexport function quotesForType(type: QuoteType) {\n const dblQuote = type === QuoteType.DoubleQuote;\n return {\n begin: dblQuote ? '“' : '‘',\n end: dblQuote ? '”' : '’',\n };\n}\n\n// create regexs for removing quotes\nconst kSingleQuotes = quotesForType(QuoteType.SingleQuote);\nconst kSingleQuoteRegEx = new RegExp(`[${kSingleQuotes.begin}${kSingleQuotes.end}]`, 'g');\nconst kDoubleQuotes = quotesForType(QuoteType.DoubleQuote);\nconst kDoubleQuoteRegEx = new RegExp(`[${kDoubleQuotes.begin}${kDoubleQuotes.end}]`, 'g');\n\nexport function fancyQuotesToSimple(text: string) {\n return text.replace(kSingleQuoteRegEx, \"'\").replace(kDoubleQuoteRegEx, '\"');\n}\n","/*\n * math.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorUI } from './ui';\nimport { PandocToken } from './pandoc';\n\nexport const kMathType = 0;\nexport const kMathContent = 1;\n\nexport enum MathType {\n Inline = 'InlineMath',\n Display = 'DisplayMath',\n}\n\nexport interface EditorMath {\n typeset: (el: HTMLElement, math: string, priority: boolean) => Promise;\n}\n\nexport function editorMath(ui: EditorUI): EditorMath {\n // return a promise that will typeset this node's math (including retrying as long as is\n // required if the element is not yet connected to the DOM)\n return {\n typeset: (el: HTMLElement, math: string, priority: boolean): Promise => {\n return new Promise(resolve => {\n // regular typeset if we are already connected\n if (el.isConnected) {\n ui.math.typeset!(el, math, priority).then(resolve);\n } else {\n // otherwise wait 100ms then retry\n const timerId = setInterval(() => {\n if (el.isConnected) {\n clearInterval(timerId);\n ui.math.typeset!(el, math, priority).then(resolve);\n }\n }, 100);\n }\n });\n },\n };\n}\n\nexport function delimiterForType(type: string) {\n if (type === MathType.Inline) {\n return '$';\n } else {\n return '$$';\n }\n}\n\nexport function stringifyMath(tok: PandocToken) {\n const delimter = delimiterForType(tok.c[kMathType].t);\n return delimter + tok.c[kMathContent] + delimter;\n}\n","/*\n * code.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Plugin, PluginKey } from 'prosemirror-state';\n\nimport { CodeViewOptions, canInsertNodeAtPos } from './node';\nimport { ResolvedPos, Slice, Fragment } from 'prosemirror-model';\n\nexport const kCodeAttr = 0;\nexport const kCodeText = 1;\n\nexport function codeNodeSpec() {\n return {\n content: 'text*',\n group: 'block',\n marks: '',\n code: true,\n defining: true,\n isolating: true,\n };\n}\n\nexport function codeViewClipboardPlugin(codeViews: { [key: string]: CodeViewOptions }) {\n return new Plugin({\n key: new PluginKey('code-view-clipboard'),\n props: {\n clipboardTextParser: (text: string, $context: ResolvedPos): any => {\n // see if any of the code views want to handle this text\n for (const codeViewType of Object.keys(codeViews)) {\n const codeView = codeViews[codeViewType];\n if (codeView.createFromPastePattern && codeView.createFromPastePattern.test(text)) {\n const schema = $context.node().type.schema;\n const nodeType = schema.nodes[codeViewType];\n if (canInsertNodeAtPos($context, nodeType)) {\n const textNode = schema.text(text);\n const codeNode = nodeType.createAndFill({}, textNode);\n return new Slice(Fragment.from(codeNode), 0, 0);\n }\n }\n }\n return null;\n },\n },\n });\n}\n","/*\n * node.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, NodeSpec, NodeType, ResolvedPos, Slice } from 'prosemirror-model';\nimport { EditorState, Selection, NodeSelection } from 'prosemirror-state';\nimport {\n findParentNode,\n findSelectedNodeOfType,\n ContentNodeWithPos,\n NodeWithPos,\n findParentNodeOfType,\n findChildrenByType,\n findChildren,\n findParentNodeOfTypeClosestToPos,\n} from 'prosemirror-utils';\n\nimport { EditorView } from 'prosemirror-view';\n\nimport {\n PandocTokenReader,\n PandocNodeWriterFn,\n PandocPreprocessorFn,\n PandocBlockReaderFn,\n PandocInlineHTMLReaderFn,\n PandocTokensFilterFn,\n} from './pandoc';\nimport { PandocBlockCapsuleFilter } from './pandoc_capsule';\n\nimport { AttrEditOptions } from './attr_edit';\nimport { CommandFn } from './command';\nimport { ExecuteRmdChunkFn } from './rmd';\n\nexport interface PandocNode {\n readonly name: string;\n readonly spec: NodeSpec;\n readonly code_view?: CodeViewOptions;\n readonly attr_edit?: () => AttrEditOptions | null;\n readonly pandoc: {\n readonly readers?: readonly PandocTokenReader[];\n readonly writer?: PandocNodeWriterFn;\n readonly preprocessor?: PandocPreprocessorFn;\n readonly tokensFilter?: PandocTokensFilterFn;\n readonly blockReader?: PandocBlockReaderFn;\n readonly inlineHTMLReader?: PandocInlineHTMLReaderFn;\n readonly blockCapsuleFilter?: PandocBlockCapsuleFilter;\n };\n}\n\nexport interface CodeViewOptions {\n lang: (node: ProsemirrorNode, content: string) => string | null;\n attrEditFn?: CommandFn;\n createFromPastePattern?: RegExp;\n classes?: string[];\n borderColorClass?: string;\n firstLineMeta?: boolean;\n lineNumbers?: boolean;\n bookdownTheorems?: boolean;\n lineNumberFormatter?: (lineNumber: number, lineCount?: number, line?: string) => string;\n}\n\nexport type NodeTraversalFn = (\n node: Node,\n pos: number,\n parent: Node,\n index: number,\n) => boolean | void | null | undefined;\n\nexport function findTopLevelBodyNodes(doc: ProsemirrorNode, predicate: (node: ProsemirrorNode) => boolean) {\n const body = findChildrenByType(doc, doc.type.schema.nodes.body, false)[0];\n const offset = body.pos + 1;\n const nodes = findChildren(body.node, predicate, false);\n return nodes.map(value => ({ ...value, pos: value.pos + offset }));\n}\n\nexport function findNodeOfTypeInSelection(selection: Selection, type: NodeType): ContentNodeWithPos | undefined {\n return findSelectedNodeOfType(type)(selection) || findParentNode((n: ProsemirrorNode) => n.type === type)(selection);\n}\n\nexport function firstNode(parent: NodeWithPos, predicate: (node: ProsemirrorNode) => boolean) {\n let foundNode: NodeWithPos | undefined;\n parent.node.descendants((node, pos) => {\n if (!foundNode) {\n if (predicate(node)) {\n foundNode = {\n node,\n pos: parent.pos + 1 + pos,\n };\n return false;\n }\n } else {\n return false;\n }\n });\n return foundNode;\n}\n\nexport function lastNode(parent: NodeWithPos, predicate: (node: ProsemirrorNode) => boolean) {\n let last: NodeWithPos | undefined;\n parent.node.descendants((node, pos) => {\n if (predicate(node)) {\n last = {\n node,\n pos: parent.pos + 1 + pos,\n };\n }\n });\n return last;\n}\n\nexport function nodeIsActive(state: EditorState, type: NodeType, attrs = {}) {\n const predicate = (n: ProsemirrorNode) => n.type === type;\n const node = findSelectedNodeOfType(type)(state.selection) || findParentNode(predicate)(state.selection);\n\n if (!Object.keys(attrs).length || !node) {\n return !!node;\n }\n\n return node.node.hasMarkup(type, attrs);\n}\n\nexport function canInsertNode(context: EditorState | Selection, nodeType: NodeType) {\n const selection = asSelection(context);\n const $from = selection.$from;\n return canInsertNodeAtPos($from, nodeType);\n}\n\nexport function canInsertNodeAtPos($pos: ResolvedPos, nodeType: NodeType) {\n for (let d = $pos.depth; d >= 0; d--) {\n const index = $pos.index(d);\n if ($pos.node(d).canReplaceWith(index, index, nodeType)) {\n return true;\n }\n }\n return false;\n}\n\nexport function canInsertTextNode(context: EditorState | Selection) {\n const selection = asSelection(context);\n return canInsertNode(selection, selection.$head.parent.type.schema.nodes.text);\n}\n\nexport function insertAndSelectNode(view: EditorView, node: ProsemirrorNode) {\n // create new transaction\n const tr = view.state.tr;\n\n // insert the node over the existing selection\n tr.ensureMarks(node.marks);\n tr.replaceSelectionWith(node);\n\n // set selection to inserted node (or don't if our selection calculate was off,\n // as can happen when we insert into a list bullet)\n const selectionPos = tr.doc.resolve(tr.mapping.map(view.state.selection.from, -1));\n const selectionNode = tr.doc.nodeAt(selectionPos.pos);\n if (selectionNode && selectionNode.type === node.type) {\n tr.setSelection(new NodeSelection(selectionPos));\n }\n\n // dispatch transaction\n view.dispatch(tr);\n}\n\nexport function editingRootNode(selection: Selection) {\n const schema = selection.$head.node().type.schema;\n return findParentNodeOfType(schema.nodes.body)(selection) || findParentNodeOfType(schema.nodes.note)(selection);\n}\n\nexport function editingRootNodeClosestToPos($pos: ResolvedPos) {\n const schema = $pos.node().type.schema;\n return (\n findParentNodeOfTypeClosestToPos($pos, schema.nodes.body) ||\n findParentNodeOfTypeClosestToPos($pos, schema.nodes.note)\n );\n}\n\nexport function editingRootScrollContainerElement(view: EditorView) {\n const editingNode = editingRootNode(view.state.selection);\n if (editingNode) {\n const editingEl = view.domAtPos(editingNode.pos + 1).node;\n return editingEl.parentElement;\n } else {\n return undefined;\n }\n}\n\nfunction asSelection(context: EditorState | Selection) {\n return context instanceof EditorState ? context.selection : context;\n}\n","/*\n * link.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { findChildren, findChildrenByType } from 'prosemirror-utils';\n\nexport const kLinkTargetUrl = 0;\nexport const kLinkTargetTitle = 1;\n\nexport const kLinkAttr = 0;\nexport const kLinkChildren = 1;\nexport const kLinkTarget = 2;\n\nexport enum LinkType {\n URL = 0,\n Heading = 1,\n ID = 2,\n}\n\nexport interface LinkCapabilities {\n headings: boolean;\n attributes: boolean;\n text: boolean;\n}\n\nexport interface LinkTargets {\n readonly ids: string[];\n readonly headings: LinkHeadingTarget[];\n}\n\nexport interface LinkHeadingTarget {\n readonly level: number;\n readonly text: string;\n}\n\nexport async function linkTargets(doc: ProsemirrorNode) {\n const ids = findChildren(doc, node => !!node.attrs.id).map(value => value.node.attrs.id);\n\n const headings = findChildrenByType(doc, doc.type.schema.nodes.heading).map(heading => ({\n level: heading.node.attrs.level,\n text: heading.node.textContent,\n }));\n\n return {\n ids,\n headings,\n };\n}\n","/*\n * html.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, DOMSerializer, Fragment } from 'prosemirror-model';\n\nexport const kHTMLCommentRegEx = /(?:^|[^`])()/;\n\nexport function isHTMLComment(html: string) {\n return !!html.match(kHTMLCommentRegEx);\n}\n\nexport function isSingleLineHTML(html: string) {\n return html.trimRight().split('\\n').length === 1;\n}\n\nexport function asHTMLTag(\n tag: string,\n attribs: { [key: string]: string },\n selfClosing = false,\n noEmptyAttribs = false,\n) {\n const attribsHTML = Object.keys(attribs)\n .filter(name => !noEmptyAttribs || attribs[name])\n .map(name => `${name}=\"${escapeHTMLAttribute(attribs[name])}\"`)\n .join(' ');\n return `<${tag} ${attribsHTML}${selfClosing ? '/' : ''}>`;\n}\n\nexport function escapeHTMLAttribute(value: string) {\n return value\n .replace(/&/g, '&') // must be first replacement\n .replace(/'/g, ''')\n .replace(/\"/g, '"')\n .replace(//g, '>');\n}\n\nexport function nodeToHTML(schema: Schema, node: ProsemirrorNode) {\n return generateHTML(() => DOMSerializer.fromSchema(schema).serializeNode(node));\n}\n\nexport function fragmentToHTML(schema: Schema, fragment: Fragment) {\n return generateHTML(() => DOMSerializer.fromSchema(schema).serializeFragment(fragment));\n}\n\nfunction generateHTML(generator: () => Node | DocumentFragment) {\n const div = document.createElement('div');\n const output = generator();\n div.appendChild(output);\n return div.innerHTML;\n}\n","/*\n * events.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\n/**\n * Represents an event type; only a single instance of this should exist per\n * event type (akin to PluginKey) and it should be visible to everyone who wants\n * to subscribe to or emit events of that type. Do not create one of these\n * directly, instead use makeEventType().\n */\nexport interface EventType {\n readonly eventName: string;\n // This field is needed only to prevent TDetail from being ignored by the type\n // checker; if TDetail isn't used, tsc acts as if EventType isn't generic.\n readonly dummy?: TDetail;\n}\n\n/**\n * Type signature of event-handler functions; the TDetail must match with the\n * EventType being subscribed to.\n *\n * (Note that the detail is always optional. I couldn't figure out how to make\n * it mandatory for some event types, forbidden for others, and optional for\n * still others, so it's just optional for everyone.)\n */\nexport type EventHandler = (detail?: TDetail) => void;\n\n/**\n * Generic interface for objects that support eventing.\n *\n * TODO: I don't see a reason why this interface should support both\n * subscription *and* emitting, the latter seems like something private.\n */\nexport interface EditorEvents {\n subscribe(event: EventType, handler: EventHandler): VoidFunction;\n emit(event: EventType, detail?: TDetail): void;\n}\n\n/**\n * Creates a new type of event. Use the TDetail type parameter to indicate the\n * type of data, if any, that event handlers can expect.\n */\nexport function makeEventType(eventName: string) {\n return { eventName: `panmirror${eventName}` } as EventType;\n}\n\n/**\n * An implementation of EditorEvents, using the DOM event system.\n */\nexport class DOMEditorEvents implements EditorEvents {\n private readonly el: HTMLElement;\n\n constructor(el: HTMLElement) {\n this.el = el;\n }\n\n public emit(eventType: EventType, detail?: TDetail) {\n // Note: CustomEvent requires polyfill for IE, see\n // https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent\n const event = new CustomEvent(eventType.eventName, { detail });\n return this.el.dispatchEvent(event);\n }\n\n public subscribe(eventType: EventType, handler: EventHandler) {\n const listener = function(this: any, evt: Event) {\n const detail: TDetail | undefined = (evt as CustomEvent).detail;\n handler.call(this, detail);\n };\n this.el.addEventListener(eventType.eventName, listener);\n return () => {\n this.el.removeEventListener(eventType.eventName, listener);\n };\n }\n}\n","/*\n * event-types.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Transaction } from 'prosemirror-state';\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport { makeEventType } from './events';\nimport { Navigation } from './navigation';\n\nexport const UpdateEvent = makeEventType('Update');\nexport const OutlineChangeEvent = makeEventType('OutlineChange');\nexport const StateChangeEvent = makeEventType('StateChange');\nexport const ResizeEvent = makeEventType('Resize');\nexport const LayoutEvent = makeEventType('Layout');\nexport const ScrollEvent = makeEventType('Scroll');\nexport const BlurEvent = makeEventType('Blur');\nexport const FocusEvent = makeEventType('Focus');\nexport const DispatchEvent = makeEventType('Dispatch');\nexport const NavigateEvent = makeEventType('Navigate');\n","/*\n * pandoc_format.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport { PandocServer, PandocExtensions } from './pandoc';\nimport { EditorFormat, kHugoDocType } from './format';\nimport { firstYamlBlock, yamlMetadataNodes } from './yaml';\nimport { findValue } from './object';\n\nexport const kMarkdownFormat = 'markdown';\nexport const kMarkdownPhpextraFormat = 'markdown_phpextra';\nexport const kMarkdownGithubFormat = 'markdown_github';\nexport const kMarkdownMmdFormat = 'markdown_mmd';\nexport const kMarkdownStrictFormat = 'markdown_strict';\nexport const kGfmFormat = 'gfm';\nexport const kCommonmarkFormat = 'commonmark';\nexport const kCommonmarkXFormat = 'commonmark_x';\n\nexport interface PandocFormat {\n mode: string;\n baseName: string;\n fullName: string;\n extensions: PandocExtensions;\n warnings: PandocFormatWarnings;\n}\n\nexport interface PandocFormatWarnings {\n invalidFormat: string;\n invalidOptions: string[];\n}\n\nexport interface PandocFormatConfig {\n mode?: string;\n extensions?: string;\n rmdExtensions?: string;\n wrap?: string;\n doctypes?: string[];\n references_location?: string;\n references_prefix?: string;\n canonical?: boolean;\n}\n\nexport function matchPandocFormatComment(code: string) {\n const magicCommentRegEx = /^\\s*$/m;\n return code.match(magicCommentRegEx);\n}\n\nexport function pandocFormatConfigFromDoc(doc: ProsemirrorNode, isRmd: boolean) {\n return pandocFormatConfigFromYamlInDoc(doc, isRmd) || pandocFormatConfigFromCommentInDoc(doc) || {};\n}\n\nexport function pandocFormatConfigFromCode(code: string, isRmd: boolean): PandocFormatConfig {\n return pandocFormatConfigFromYamlInCode(code, isRmd) || pandocFormatConfigFromCommentInCode(code) || {};\n}\n\nfunction pandocFormatConfigFromYamlInCode(code: string, isRmd: boolean): PandocFormatConfig | null {\n // get the first yaml block in the file\n const yaml = firstYamlBlock(code);\n\n // did we find yaml?\n if (yaml) {\n // see if we have any md_extensions defined\n const mdExtensions = isRmd ? findValue('md_extensions', yaml?.output) : undefined;\n\n // see if we have any markdown options defined\n let yamlFormatConfig: PandocFormatConfig | undefined;\n const yamlMarkdownOptions = yaml?.editor_options?.markdown;\n if (yamlMarkdownOptions instanceof Object) {\n yamlFormatConfig = readPandocFormatConfig(yamlMarkdownOptions);\n }\n\n // combine and return\n if (mdExtensions || yamlFormatConfig) {\n const formatConfig: PandocFormatConfig = yamlFormatConfig ? yamlFormatConfig : {};\n if (mdExtensions) {\n formatConfig.extensions = mdExtensions + (formatConfig.extensions || '');\n }\n return formatConfig;\n } else {\n return null;\n }\n } else {\n return null;\n }\n}\n\nfunction pandocFormatConfigFromYamlInDoc(doc: ProsemirrorNode, isRmd: boolean): PandocFormatConfig | null {\n const yamlNodes = yamlMetadataNodes(doc);\n if (yamlNodes.length > 0) {\n return pandocFormatConfigFromYamlInCode(yamlNodes[0].node.textContent, isRmd);\n } else {\n return null;\n }\n}\n\nfunction pandocFormatConfigFromCommentInCode(code: string): PandocFormatConfig | null {\n const keyValueRegEx = /^([^:]+):\\s*(.*)$/;\n const match = matchPandocFormatComment(code);\n if (match) {\n const comment = match[1];\n // split into semicolons\n const fields = comment.split(/\\s*;\\s/).map(field => field.trim());\n const variables: { [key: string]: string } = {};\n fields.forEach(field => {\n const keyValueMatch = field.match(keyValueRegEx);\n if (keyValueMatch) {\n variables[keyValueMatch[1].trim()] = keyValueMatch[2].trim();\n }\n });\n return readPandocFormatConfig(variables);\n } else {\n return null;\n }\n}\n\nfunction pandocFormatConfigFromCommentInDoc(doc: ProsemirrorNode): PandocFormatConfig | null {\n let config: PandocFormatConfig | null = null;\n let foundFirstRawInline = false;\n doc.descendants((node, pos) => {\n // don't search once we've found our target\n if (foundFirstRawInline) {\n return false;\n }\n\n // if it's a text node with a raw-html then scan it for the format comment\n const schema = doc.type.schema;\n if (\n node.isText &&\n schema.marks.raw_html_comment &&\n schema.marks.raw_html_comment.isInSet(node.marks) &&\n node.attrs.format\n ) {\n foundFirstRawInline = true;\n config = pandocFormatConfigFromCommentInCode(node.textContent);\n return false;\n } else {\n return true;\n }\n });\n return config;\n}\n\nfunction readPandocFormatConfig(source: { [key: string]: any }) {\n const asString = (obj: any): string => {\n if (typeof obj === 'string') {\n return obj;\n } else if (obj) {\n return obj.toString();\n } else {\n return '';\n }\n };\n\n const asBoolean = (obj: any) => {\n if (typeof obj === 'boolean') {\n return obj;\n } else {\n const str = asString(obj).toLowerCase();\n return str === 'true' || str === '1';\n }\n };\n\n const readWrap = () => {\n const wrap = source.wrap || source.wrap_column || source['fill-column'];\n if (wrap) {\n return asString(wrap);\n } else {\n return undefined;\n }\n };\n\n const formatConfig: PandocFormatConfig = {};\n if (source.mode) {\n formatConfig.mode = asString(source.mode);\n }\n if (source.extensions) {\n formatConfig.extensions = asString(source.extensions);\n }\n if (source.rmd_extensions) {\n formatConfig.rmdExtensions = asString(source.rmd_extensions);\n }\n formatConfig.wrap = readWrap();\n if (source.doctype) {\n formatConfig.doctypes = asString(source.doctype)\n .split(',')\n .map(str => str.trim());\n }\n if (source.references) {\n if (typeof source.references === 'string') {\n formatConfig.references_location = source.references;\n } else {\n formatConfig.references_location = source.references.location;\n formatConfig.references_prefix = source.references.prefix;\n }\n }\n if (source.canonical) {\n formatConfig.canonical = asBoolean(source.canonical);\n }\n return formatConfig;\n}\n\nexport async function resolvePandocFormat(pandoc: PandocServer, format: EditorFormat): Promise {\n // additional markdown variants we support\n const kMarkdownVariants: { [key: string]: string[] } = {\n [kCommonmarkFormat]: commonmarkExtensions(),\n [kCommonmarkXFormat]: commonmarkXExtensions(),\n [kGfmFormat]: gfmExtensions(),\n goldmark: goldmarkExtensions(format),\n blackfriday: blackfridayExtensions(format),\n };\n\n // setup warnings\n const warnings: PandocFormatWarnings = { invalidFormat: '', invalidOptions: [] };\n\n // alias options and basename\n let options = format.pandocExtensions;\n let baseName = format.pandocMode;\n\n // validate the base format (fall back to markdown if it's not known)\n if (\n ![\n kMarkdownFormat,\n kMarkdownPhpextraFormat,\n kMarkdownGithubFormat,\n kMarkdownMmdFormat,\n kMarkdownStrictFormat,\n kGfmFormat,\n kCommonmarkFormat,\n kCommonmarkXFormat\n ]\n .concat(Object.keys(kMarkdownVariants))\n .includes(baseName)\n ) {\n warnings.invalidFormat = baseName;\n baseName = 'markdown';\n }\n\n // format options we will be building\n let formatOptions: string;\n\n // if we are using a variant then get it's base options and merge with user options\n if (kMarkdownVariants[baseName]) {\n const variant = kMarkdownVariants[baseName];\n options = variant.map(option => `${option}`).join('') + options;\n baseName = 'markdown_strict';\n }\n\n // query for format options\n formatOptions = await pandoc.listExtensions(baseName);\n\n // active pandoc extensions\n const pandocExtensions: { [key: string]: boolean } = {};\n\n // first parse extensions for format\n parseExtensions(formatOptions).forEach(option => {\n pandocExtensions[option.name] = option.enabled;\n });\n\n // now parse extensions for user options (validate and build format name)\n const validOptionNames = parseExtensions(formatOptions).map(option => option.name);\n\n let fullName = baseName;\n parseExtensions(options).forEach(option => {\n // validate that the option is valid\n if (validOptionNames.includes(option.name)) {\n // add option\n fullName += (option.enabled ? '+' : '-') + option.name;\n pandocExtensions[option.name] = option.enabled;\n } else {\n warnings.invalidOptions.push(option.name);\n }\n });\n\n // return format name, enabled extensiosn, and warnings\n return {\n mode: format.pandocMode,\n baseName,\n fullName,\n extensions: (pandocExtensions as unknown) as PandocExtensions,\n warnings,\n };\n}\n\nfunction parseExtensions(options: string) {\n // remove any linebreaks\n options = options.split('\\n').join();\n\n // parse into separate entries\n const extensions: Array<{ name: string; enabled: boolean }> = [];\n const re = /([+-])([a-z_]+)/g;\n let match = re.exec(options);\n while (match) {\n extensions.push({ name: match[2], enabled: match[1] === '+' });\n match = re.exec(options);\n }\n\n return extensions;\n}\n\nexport function pandocFormatWith(format: string, prepend: string, append: string) {\n const split = splitPandocFormatString(format);\n return `${split.format}${prepend}${split.options}${append}`;\n}\n\nexport function splitPandocFormatString(format: string) {\n // split out base format from options\n let optionsPos = format.indexOf('-');\n if (optionsPos === -1) {\n optionsPos = format.indexOf('+');\n }\n const base = optionsPos === -1 ? format : format.substr(0, optionsPos);\n const options = optionsPos === -1 ? '' : format.substr(optionsPos);\n return {\n format: base,\n options,\n };\n}\n\nexport function hasFencedCodeBlocks(pandocExtensions: PandocExtensions) {\n return pandocExtensions.backtick_code_blocks || pandocExtensions.fenced_code_blocks;\n}\n\n// e.g. [My Heading] to link to ## My Heading\nexport function hasShortcutHeadingLinks(pandocExtensions: PandocExtensions) {\n return pandocExtensions.implicit_header_references && pandocExtensions.shortcut_reference_links;\n}\n\nfunction commonmarkExtensions(rawHTML = true) {\n const extensions = [\n rawHTML ? '+raw_html' : '-raw_html',\n '+all_symbols_escapable',\n '+backtick_code_blocks',\n '+fenced_code_blocks',\n '+space_in_atx_header',\n '+intraword_underscores',\n '+lists_without_preceding_blankline',\n '+shortcut_reference_links',\n ];\n return extensions;\n}\n\n// https://github.com/jgm/pandoc/commit/0aed9dd589189a9bbe5cae99e0e024e2d4a92c36\nfunction commonmarkXExtensions() {\n const extensions = [\n '+pipe_tables',\n '+raw_html',\n '+auto_identifiers',\n '+strikeout',\n '+task_lists',\n '+emoji',\n '+raw_tex',\n '+smart',\n '+tex_math_dollars',\n '+superscript',\n '+subscript',\n '+definition_lists',\n '+footnotes',\n '+fancy_lists',\n '+fenced_divs',\n '+bracketed_spans',\n '+raw_attribute',\n '+implicit_header_references',\n // '+attributes' (not yet)\n ];\n return extensions;\n}\n\nfunction gfmExtensions() {\n const extensions = [\n ...commonmarkExtensions(),\n '+auto_identifiers',\n '+autolink_bare_uris',\n '+emoji',\n '+gfm_auto_identifiers',\n '+pipe_tables',\n '+strikeout',\n '+task_lists',\n ];\n return extensions;\n}\n\n// https://gohugo.io/getting-started/configuration-markup/#goldmark\n// https://github.com/yuin/goldmark/#html-renderer-options\nfunction goldmarkExtensions(format: EditorFormat) {\n const extensions = [\n // start with commonmark\n ...commonmarkExtensions(false),\n\n // adds most of gfm\n '+pipe_tables',\n '+strikeout',\n '+autolink_bare_uris',\n '+task_lists',\n '+backtick_code_blocks',\n\n // plus some extras\n '+definition_lists',\n '+footnotes',\n '+smart',\n\n // hugo preprocessor supports yaml metadata\n '+yaml_metadata_block',\n ];\n\n if (includeTexMathDollars(format)) {\n extensions.push('+tex_math_dollars');\n }\n\n return extensions;\n}\n\n// https://github.com/russross/blackfriday/tree/v2#extensions\nfunction blackfridayExtensions(format: EditorFormat) {\n const extensions = [\n '+intraword_underscores',\n '+pipe_tables',\n '+backtick_code_blocks',\n '+definition_lists',\n '+footnotes',\n '+autolink_bare_uris',\n '+strikeout',\n '+smart',\n '+yaml_metadata_block',\n ];\n\n if (includeTexMathDollars(format)) {\n extensions.push('+tex_math_dollars');\n }\n\n return extensions;\n}\n\nfunction includeTexMathDollars(format: EditorFormat) {\n // hugo users often sort out some way to include math so we enable it for hugo\n return format.docTypes.includes(kHugoDocType) || format.rmdExtensions.blogdownMathInCode;\n}\n","/*\n * yaml.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { NodeWithPos } from 'prosemirror-utils';\nimport { EditorView } from 'prosemirror-view';\n\nimport yaml from 'js-yaml';\n\nimport { findTopLevelBodyNodes } from './node';\nimport { logException } from './log';\n\nexport const kYamlMetadataTitleRegex = /\\ntitle:(.*)\\n/;\n\n// return yaml front matter (w/o enclosing --)\nexport function yamlFrontMatter(doc: ProsemirrorNode) {\n const firstYaml = firstYamlNode(doc);\n if (firstYaml) {\n return stripYamlDelimeters(firstYaml.node.textContent);\n } else {\n return '';\n }\n}\n\n// set yaml front matter (w/o enclosing ---)\nexport function applyYamlFrontMatter(view: EditorView, yamlText: string) {\n const schema = view.state.schema;\n const updatedYaml = `---\\n${yamlText}---`;\n const updatedYamlNode = schema.nodes.yaml_metadata.createAndFill({}, schema.text(updatedYaml));\n const tr = view.state.tr;\n const firstYaml = firstYamlNode(view.state.doc);\n if (firstYaml) {\n tr.replaceRangeWith(firstYaml.pos, firstYaml.pos + firstYaml.node.nodeSize, updatedYamlNode);\n } else {\n tr.insert(1, updatedYamlNode);\n }\n view.dispatch(tr);\n}\n\nexport function yamlMetadataNodes(doc: ProsemirrorNode) {\n return findTopLevelBodyNodes(doc, isYamlMetadataNode);\n}\n\nexport function isYamlMetadataNode(node: ProsemirrorNode) {\n return node.type === node.type.schema.nodes.yaml_metadata;\n}\n\nexport function titleFromYamlMetadataNode(node: ProsemirrorNode) {\n const titleMatch = node.textContent.match(kYamlMetadataTitleRegex);\n if (titleMatch) {\n let title = titleMatch[1].trim();\n title = title.replace(/^[\"']|[\"']$/g, '');\n title = title.replace(/\\\\\"/g, '\"');\n title = title.replace(/''/g, \"'\");\n return title;\n } else {\n return null;\n }\n}\n\nexport function valueFromYamlText(name: string, yamlText: string) {\n // Must start and end with either a new line or the start/end of line\n const yamlMetadataNameValueRegex = new RegExp(`(?:\\\\n|^)${name}:(.*)(?:\\\\n|$)`);\n\n // Find the name and value\n const valueMatch = yamlText.match(yamlMetadataNameValueRegex);\n if (valueMatch) {\n // Read the matched value\n const valueStr = valueMatch[1].trim();\n\n // Parse the value (could be string, array, etc...)\n const value = parseYaml(valueStr);\n return value;\n } else {\n return null;\n }\n}\n\nconst kFirstYamlBlockRegex = /\\s*---[ \\t]*\\n(?![ \\t]*\\n)([\\W\\w]*?)\\n[\\t >]*(?:---|\\.\\.\\.)[ \\t]*/m;\n\nexport function firstYamlBlock(code: string): { [key: string]: any } | null {\n const match = code.match(kFirstYamlBlockRegex);\n if (match && match.index === 0) {\n const yamlCode = match[1];\n const yamlParsed = parseYaml(yamlCode);\n if (typeof yamlParsed === 'object') {\n return yamlParsed;\n } else {\n return null;\n }\n } else {\n return null;\n }\n}\n\nexport function parseYaml(yamlCode: string) {\n try {\n const yamlParsed = yaml.safeLoad(yamlCode, {\n onWarning: logException,\n });\n return yamlParsed;\n } catch (e) {\n logException(e);\n return null;\n }\n}\n\nexport function toYamlCode(obj: any): string | null {\n try {\n const yamlCode = yaml.safeDump(obj);\n return yamlCode;\n } catch (e) {\n logException(e);\n return null;\n }\n}\n\nexport function stripYamlDelimeters(yamlCode: string) {\n return yamlCode.replace(/^[ \\t-]+\\n/, '').replace(/\\n[ \\t-\\.]+$/, '');\n}\n\nexport interface ParsedYaml {\n yamlCode: string;\n yaml: any;\n node: NodeWithPos;\n}\n\nexport function parseYamlNodes(doc: ProsemirrorNode): ParsedYaml[] {\n const yamlNodes = yamlMetadataNodes(doc);\n\n const parsedYamlNodes = yamlNodes.map(node => {\n const yamlText = node.node.textContent;\n const yamlCode = stripYamlDelimeters(yamlText);\n return { yamlCode, yaml: parseYaml(yamlCode), node };\n });\n return parsedYamlNodes;\n}\n\nfunction firstYamlNode(doc: ProsemirrorNode) {\n const yamlNodes = yamlMetadataNodes(doc);\n if (yamlNodes && yamlNodes.length > 0) {\n return yamlNodes[0];\n } else {\n return '';\n }\n}\n","/*\n * format.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport interface EditorFormat {\n readonly pandocMode: string;\n readonly pandocExtensions: string;\n readonly rmdExtensions: EditorRmdExtensions;\n readonly hugoExtensions: EditorHugoExtensions;\n readonly docTypes: EditorExtendedDocType[];\n}\n\nexport interface EditorRmdExtensions {\n readonly codeChunks?: boolean;\n readonly bookdownXRef?: boolean;\n readonly bookdownXRefUI?: boolean;\n readonly bookdownPart?: boolean;\n readonly blogdownMathInCode?: boolean;\n}\n\nexport interface EditorHugoExtensions {\n readonly shortcodes?: boolean;\n}\n\nexport const kBookdownDocType = 'bookdown';\nexport const kHugoDocType = 'hugo';\n\nexport type EditorExtendedDocType = 'bookdown' | 'hugo';\n","/*\n * object.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport function findValue(key: string, object?: { [key: string]: any }) {\n if (!object) {\n return undefined;\n }\n\n let value;\n\n Object.keys(object).some(k => {\n if (k === key) {\n value = object[k];\n return true;\n }\n if (object[k] && typeof object[k] === 'object') {\n value = findValue(key, object[k]);\n return value !== undefined;\n }\n return false;\n });\n\n return value;\n}\n","/*\n * log.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport function logException(e: Error) {\n // TODO: log exceptions (we don't want to use console.log in production code, so this would\n // utilize some sort of external logging facility)\n // console.log(e);\n}\n","/*\n * basekeys.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport {\n splitBlock,\n liftEmptyBlock,\n createParagraphNear,\n selectNodeBackward,\n joinBackward,\n deleteSelection,\n selectNodeForward,\n joinForward,\n chainCommands,\n} from 'prosemirror-commands';\nimport { undoInputRule } from 'prosemirror-inputrules';\nimport { keymap } from 'prosemirror-keymap';\nimport { EditorState, Transaction, Plugin, Selection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { CommandFn } from './command';\nimport { editingRootNodeClosestToPos, editingRootNode } from './node';\nimport { selectionIsBodyTopLevel } from './selection';\nimport { kPlatformMac } from './platform';\n\nexport enum BaseKey {\n Home = 'Home',\n End = 'End',\n Enter = 'Enter',\n ModEnter = 'Mod-Enter',\n ShiftEnter = 'Shift-Enter',\n Backspace = 'Backspace',\n Delete = 'Delete|Mod-Delete', // Use pipes to register multiple commands\n Tab = 'Tab',\n ShiftTab = 'Shift-Tab',\n ArrowUp = 'Up|ArrowUp',\n ArrowDown = 'Down|ArrowDown',\n ArrowLeft = 'Left|ArrowLeft',\n ArrowRight = 'Right|ArrowRight',\n ModArrowUp = 'Mod-Up|Mod-ArrowUp',\n ModArrowDown = 'Mod-Down|Mod-ArrowDown',\n CtrlHome = 'Ctrl-Home',\n CtrlEnd = 'Ctrl-End',\n ShiftArrowLeft = 'Shift-Left|Shift-ArrowLeft',\n ShiftArrowRight = 'Shift-Right|Shift-ArrowRight',\n AltArrowLeft = 'Alt-Left|Alt-ArrowLeft',\n AltArrowRight = 'Alt-Right|Alt-ArrowRight',\n CtrlArrowLeft = 'Ctrl-Left|Ctrl-ArrowLeft',\n CtrlArrowRight = 'Ctrl-Right|Ctrl-ArrowRight',\n CtrlShiftArrowLeft = 'Ctrl-Shift-Left|Ctrl-Shift-ArrowLeft',\n CtrlShiftArrowRight = 'Ctrl-Shift-Right|Ctrl-Shift-ArrowRight',\n}\n\nexport interface BaseKeyBinding {\n key: BaseKey;\n command: CommandFn;\n}\n\nexport function baseKeysPlugin(keys: readonly BaseKeyBinding[]): Plugin {\n // collect all keys\n const pluginKeys = [\n // base enter key behaviors\n { key: BaseKey.Enter, command: splitBlock },\n { key: BaseKey.Enter, command: liftEmptyBlock },\n { key: BaseKey.Enter, command: createParagraphNear },\n\n // base backspace key behaviors\n { key: BaseKey.Backspace, command: selectNodeBackward },\n { key: BaseKey.Backspace, command: joinBackward },\n { key: BaseKey.Backspace, command: deleteSelection },\n\n // base tab key behavior (ignore)\n { key: BaseKey.Tab, command: ignoreKey },\n { key: BaseKey.ShiftTab, command: ignoreKey },\n\n // base delete key behaviors\n { key: BaseKey.Delete, command: selectNodeForward },\n { key: BaseKey.Delete, command: joinForward },\n { key: BaseKey.Delete, command: deleteSelection },\n\n // base home/end key behaviors (Mac desktop default behavior advances to beginning/end of\n // document, so we provide our own implementation rather than relying on contentEditable)\n kPlatformMac ? { key: BaseKey.Home, command: homeKey } : null,\n kPlatformMac ? { key: BaseKey.End, command: endKey } : null,\n\n // base arrow key behavior (prevent traversing top-level body notes)\n { key: BaseKey.ArrowLeft, command: arrowBodyNodeBoundary('left') },\n { key: BaseKey.ArrowUp, command: arrowBodyNodeBoundary('up') },\n { key: BaseKey.ArrowRight, command: arrowBodyNodeBoundary('right') },\n { key: BaseKey.ArrowDown, command: arrowBodyNodeBoundary('down') },\n { key: BaseKey.ModArrowDown, command: endTopLevelBodyNodeBoundary() },\n { key: BaseKey.CtrlEnd, command: endTopLevelBodyNodeBoundary() },\n\n // merge keys provided by extensions\n ...keys,\n\n // undoInputRule is always the highest priority backspace key\n { key: BaseKey.Backspace, command: undoInputRule },\n ].filter(x => !!x);\n\n // build arrays for each BaseKey type\n const commandMap: { [key: string]: CommandFn[] } = {};\n for (const baseKey of Object.values(BaseKey)) {\n commandMap[baseKey] = [];\n }\n pluginKeys.forEach(key => {\n if (key) {\n commandMap[key.key].unshift(key.command);\n }\n });\n\n const bindings: { [key: string]: CommandFn } = {};\n for (const baseKey of Object.values(BaseKey)) {\n const commands = commandMap[baseKey];\n // baseKey may contain multiple keys, separated by |\n for (const subkey of baseKey.split(/\\|/)) {\n bindings[subkey] = chainCommands(...commands);\n }\n }\n\n // return keymap\n return keymap(bindings);\n}\n\nexport function verticalArrowCanAdvanceWithinTextBlock(selection: Selection, dir: 'up' | 'down') {\n const $head = selection.$head;\n const node = $head.node();\n if (node.isTextblock) {\n const cursorOffset = $head.parentOffset;\n const nodeText = node.textContent;\n if (dir === 'down' && nodeText.substr(cursorOffset).includes('\\n')) {\n return true;\n }\n if (dir === 'up' && nodeText.substr(0, cursorOffset).includes('\\n')) {\n return true;\n }\n }\n return false;\n}\n\ninterface Coords {\n left: number;\n right: number;\n top: number;\n bottom: number;\n}\n\nfunction ignoreKey(state: EditorState, dispatch?: (tr: Transaction) => void) {\n return true;\n}\n\nfunction homeKey(state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) {\n const selection = state.selection;\n const editingNode = editingRootNode(selection);\n if (editingNode && dispatch && view) {\n const head = view.coordsAtPos(selection.head);\n const beginDocPos = editingNode.start;\n for (let pos = selection.from - 1; pos >= beginDocPos; pos--) {\n const coords = view.coordsAtPos(pos);\n if (isOnPreviousLine(head, coords) || pos === beginDocPos) {\n const tr = state.tr;\n setTextSelection(pos + 1)(tr);\n dispatch(tr);\n break;\n }\n }\n }\n return true;\n}\n\nfunction endKey(state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) {\n const selection = state.selection;\n const editingNode = editingRootNode(selection);\n if (editingNode && dispatch && view) {\n const head = view.coordsAtPos(selection.head);\n const endDocPos = editingNode.start + editingNode.node.nodeSize;\n for (let pos = selection.from + 1; pos < endDocPos; pos++) {\n const coords = view.coordsAtPos(pos);\n if (isOnNextLine(head, coords) || pos === endDocPos) {\n const tr = state.tr;\n setTextSelection(pos - 1)(tr);\n dispatch(tr);\n break;\n }\n }\n }\n return true;\n}\n\n// helpers to check for a y coordinate on a diffent line that the selection\n\n// y coorinates are sometimes off by 1 or 2 due to margin/padding (e.g. for\n// inline code spans or spelling marks) so the comparision only succeeds if\n// the vertical extents of the two coords don't overlap. If this proves to\n// still have false positives, we could lookahead to the next a few dozen\n// positions to check if we ever \"return to\" the head's baseline--only a\n// permanent change would indicate that the line has truly changed.\n\nfunction isOnNextLine(head: Coords, pos: Coords) {\n return head.bottom < pos.top;\n}\n\nfunction isOnPreviousLine(head: Coords, pos: Coords) {\n return head.top > pos.bottom;\n}\n\nfunction arrowBodyNodeBoundary(dir: 'up' | 'down' | 'left' | 'right') {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n if (view && view.endOfTextblock(dir) && selectionIsBodyTopLevel(state.selection)) {\n const side = dir === 'left' || dir === 'up' ? -1 : 1;\n const $head = state.selection.$head;\n const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side);\n const currentRootNode = editingRootNodeClosestToPos($head);\n const nextRootNode = editingRootNodeClosestToPos(nextPos.$head);\n return currentRootNode?.node?.type !== nextRootNode?.node?.type;\n } else {\n return false;\n }\n };\n}\n\nfunction endTopLevelBodyNodeBoundary() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const editingNode = editingRootNode(state.selection);\n if (editingNode && selectionIsBodyTopLevel(state.selection)) {\n if (dispatch) {\n const tr = state.tr;\n setTextSelection(editingNode.pos + editingNode.node.nodeSize - 2)(tr).scrollIntoView();\n dispatch(tr);\n }\n return true;\n } else {\n return false;\n }\n };\n}\n","/*\n * selection.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Selection, NodeSelection } from 'prosemirror-state';\nimport { Schema } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\nimport { GapCursor } from 'prosemirror-gapcursor';\n\nimport { NodeWithPos, setTextSelection } from 'prosemirror-utils';\n\nimport { kAddToHistoryTransaction, kRestoreLocationTransaction } from './transaction';\n\nexport function selectionIsWithin(selection: Selection, nodeWithPos: NodeWithPos) {\n const from = nodeWithPos.pos + 1;\n const to = from + nodeWithPos.node.nodeSize;\n return selectionIsWithinRange(selection, { from, to });\n}\n\nexport function selectionHasRange(selection: Selection, range: { from: number; to: number }) {\n return selection.from === range.from && selection.to === range.to;\n}\n\nexport function selectionIsWithinRange(selection: Selection, range: { from: number; to: number }) {\n return selection.anchor >= range.from && selection.anchor <= range.to;\n}\n\nexport function selectionIsBodyTopLevel(selection: Selection) {\n const { $head } = selection;\n const parentNode = $head.node($head.depth - 1);\n return parentNode && \n (parentNode.type === parentNode.type.schema.nodes.body ||\n (selection instanceof GapCursor && parentNode.type === parentNode.type.schema.nodes.doc));\n}\n\nexport function selectionIsImageNode(schema: Schema, selection: Selection) {\n return selection instanceof NodeSelection && [schema.nodes.image, schema.nodes.figure].includes(selection.node.type);\n}\n\nexport function selectionIsEmptyParagraph(schema: Schema, selection: Selection) {\n const { $head } = selection;\n return $head.parent.type === schema.nodes.paragraph && $head.parent.childCount === 0;\n}\n\nexport function restoreSelection(view: EditorView, pos: number) {\n const tr = view.state.tr;\n if (pos < view.state.doc.nodeSize) {\n setTextSelection(pos)(tr);\n tr.setMeta(kAddToHistoryTransaction, false);\n tr.setMeta(kRestoreLocationTransaction, true);\n view.dispatch(tr);\n }\n}\n","/*\n * transaction.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Transaction, EditorState, Plugin, PluginKey, Selection } from 'prosemirror-state';\nimport { Node as ProsemirrorNode, Mark, MarkType, Slice } from 'prosemirror-model';\nimport { ChangeSet } from 'prosemirror-changeset';\nimport { ReplaceStep, Step, Transform } from 'prosemirror-transform';\n\nimport { sliceContentLength } from './slice';\n\nexport const kPasteTransaction = 'paste';\nexport const kSetMarkdownTransaction = 'setMarkdown';\nexport const kAddToHistoryTransaction = 'addToHistory';\nexport const kFixupTransaction = 'docFixup';\nexport const kRestoreLocationTransaction = 'restoreLocation';\nexport const kNavigationTransaction = 'navigationTransaction';\nexport const kInsertSymbolTransaction = 'insertSymbol';\nexport const kInsertCompletionTransaction = 'insertCompletion';\n\nexport type TransactionsFilter = (transactions: Transaction[], oldState: EditorState, newState: EditorState) => boolean;\n\nexport type TransactionNodeFilter = (\n node: ProsemirrorNode,\n pos: number,\n parent: ProsemirrorNode,\n index: number,\n) => boolean;\n\nexport interface AppendTransactionHandler {\n name: string;\n filter?: TransactionsFilter;\n nodeFilter?: TransactionNodeFilter;\n append: (tr: Transaction, transactions: Transaction[], oldState: EditorState, newState: EditorState) => void;\n}\n\n// wrapper for transaction that is guaranteed not to modify the position of any\n// nodes in the document (useful for grouping many disparate handlers that arne't\n// aware of each other's actions onto the same trasaction)\nexport class MarkTransaction {\n private tr: Transaction;\n\n constructor(tr: Transaction) {\n this.tr = tr;\n }\n get doc(): ProsemirrorNode {\n return this.tr.doc;\n }\n get selection(): Selection {\n return this.tr.selection;\n }\n public addMark(from: number, to: number, mark: Mark): this {\n this.tr.addMark(from, to, mark);\n return this;\n }\n public removeMark(from: number, to: number, mark?: Mark | MarkType): this {\n this.tr.removeMark(from, to, mark);\n return this;\n }\n public removeStoredMark(mark: Mark | MarkType): this {\n this.tr.removeStoredMark(mark);\n return this;\n }\n public insertText(text: string, from: number): this {\n this.tr.insertText(text, from, from + text.length);\n return this;\n }\n}\n\nexport interface AppendMarkTransactionHandler {\n name: string;\n filter: (node: ProsemirrorNode, transactions: Transaction[]) => boolean;\n append: (tr: MarkTransaction, node: ProsemirrorNode, pos: number, state: EditorState) => void;\n}\n\nexport function appendMarkTransactionsPlugin(handlers: readonly AppendMarkTransactionHandler[]): Plugin {\n return new Plugin({\n key: new PluginKey('appendMarkTransactions'),\n\n appendTransaction: (transactions: Transaction[], oldState: EditorState, newState: EditorState) => {\n // skip for selection-only changes\n if (!transactionsDocChanged(transactions)) {\n return;\n }\n\n // create transaction\n const tr = newState.tr;\n\n // create markTransaction wrapper\n const markTr = new MarkTransaction(tr);\n\n forChangedNodes(\n oldState,\n newState,\n node => true,\n (node: ProsemirrorNode, pos: number) => {\n for (const handler of handlers) {\n // get a fresh view of the node\n node = tr.doc.nodeAt(pos)!;\n\n // call the handler\n if (handler.filter(node, transactions)) {\n handler.append(markTr, node, pos, newState);\n }\n }\n },\n );\n\n // return transaction\n if (tr.docChanged || tr.selectionSet || tr.storedMarksSet) {\n return tr;\n }\n },\n });\n}\n\nexport function appendTransactionsPlugin(handlers: readonly AppendTransactionHandler[]): Plugin {\n return new Plugin({\n key: new PluginKey('appendTransactions'),\n\n appendTransaction: (transactions: Transaction[], oldState: EditorState, newState: EditorState) => {\n // skip for selection-only changes\n if (!transactionsDocChanged(transactions)) {\n return;\n }\n\n // create transaction\n const tr = newState.tr;\n\n // compute the changeSet\n if (transactionsAreTypingChange(transactions)) {\n const changeSet = transactionsChangeSet(transactions, oldState, newState);\n\n // call each handler\n for (const handler of handlers) {\n // track whether there is a change\n let haveChange = false;\n\n // call filters if we have them\n if (handler.filter || handler.nodeFilter) {\n // first the low-level transaction filter\n if (handler.filter) {\n haveChange = handler.filter(transactions, oldState, newState);\n }\n\n // if that doesn't detect a change then try the nodeFilter if we have one\n if (!haveChange && handler.nodeFilter) {\n const checkForChange = (\n node: ProsemirrorNode,\n pos: number,\n parent: ProsemirrorNode,\n index: number,\n ) => {\n if (handler.nodeFilter!(node, pos, parent, index)) {\n haveChange = true;\n return false;\n }\n };\n\n for (const change of changeSet.changes) {\n oldState.doc.nodesBetween(change.fromA, change.toA, checkForChange);\n newState.doc.nodesBetween(change.fromB, change.toB, checkForChange);\n }\n }\n\n // no filters means we should always run (force haveChange to true)\n } else {\n haveChange = true;\n }\n\n // run the handler if applicable\n if (haveChange) {\n handler.append(tr, transactions, oldState, newState);\n }\n }\n\n // run them all if this is a larger change\n } else {\n handlers.forEach(handler => handler.append(tr, transactions, oldState, newState));\n }\n\n // return transaction\n if (tr.docChanged || tr.selectionSet || tr.storedMarksSet) {\n return tr;\n }\n },\n });\n}\n\nexport function transactionsDocChanged(transactions: Transaction[]) {\n return transactions.some(transaction => transaction.docChanged);\n}\n\nexport function transactionsChangeSet(transactions: Transaction[], oldState: EditorState, newState: EditorState) {\n let changeSet = ChangeSet.create(oldState.doc);\n for (const transaction of transactions) {\n changeSet = changeSet.addSteps(newState.doc, transaction.mapping.maps);\n }\n return changeSet;\n}\n\nexport function trTransform(tr: Transaction, f: (transform: Transform) => void): Transaction {\n // create a new transform so we can do position mapping relative\n // to the actions taken here (b/c the transaction might already\n // have other steps so we can't do tr.mapping.map)\n const newActions = new Transform(tr.doc);\n\n // call the function (passing it a mapping function that uses our newActions)\n f(newActions);\n\n // copy the contents of newActions to the actual transaction\n for (const step of newActions.steps) {\n tr.step(step);\n }\n\n // return the transaction for chaining\n return tr;\n}\n\nexport function transactionsHaveChange(\n transactions: Transaction[],\n oldState: EditorState,\n newState: EditorState,\n predicate: (node: ProsemirrorNode, pos: number, parent: ProsemirrorNode, index: number) => boolean,\n) {\n // screen out transactions with no doc changes\n if (!transactionsDocChanged(transactions)) {\n return false;\n }\n\n // function to check for whether we have a change and set a flag if we do\n let haveChange = false;\n const checkForChange = (node: ProsemirrorNode, pos: number, parent: ProsemirrorNode, index: number) => {\n if (predicate(node, pos, parent, index)) {\n haveChange = true;\n return false;\n }\n };\n\n // for each change in each transaction, check for a node that matches the predicate in either the old or new doc\n const changeSet = transactionsChangeSet(transactions, oldState, newState);\n\n for (const change of changeSet.changes) {\n oldState.doc.nodesBetween(change.fromA, change.toA, checkForChange);\n newState.doc.nodesBetween(change.fromB, change.toB, checkForChange);\n if (haveChange) {\n break;\n }\n }\n\n return haveChange;\n}\n\nexport function forChangedNodes(\n oldState: EditorState | null,\n newState: EditorState,\n predicate: (node: ProsemirrorNode) => boolean,\n f: (node: ProsemirrorNode, pos: number) => boolean | void,\n) {\n let complete = false;\n const handler = (node: ProsemirrorNode, pos: number) => {\n if (complete) {\n return;\n }\n\n if (!predicate || predicate(node)) {\n if (f(node, pos) === false) {\n complete = true;\n }\n }\n };\n\n if (!oldState) {\n newState.doc.descendants(handler);\n } else if (oldState.doc !== newState.doc) {\n changedDescendants(oldState.doc, newState.doc, 0, handler);\n }\n}\n\n// Helper for iterating through the nodes in a document that changed\n// compared to the given previous document. Useful for avoiding\n// duplicate work on each transaction.\n// from: https://github.com/ProseMirror/prosemirror-tables/blob/master/src/fixtables.js\nfunction changedDescendants(\n old: ProsemirrorNode,\n cur: ProsemirrorNode,\n offset: number,\n f: (node: ProsemirrorNode, pos: number) => void,\n) {\n const oldSize = old.childCount;\n const curSize = cur.childCount;\n outer: for (let i = 0, j = 0; i < curSize; i++) {\n const child = cur.child(i);\n for (let scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) {\n if (old.child(scan) === child) {\n j = scan + 1;\n offset += child.nodeSize;\n continue outer;\n }\n }\n f(child, offset);\n if (j < oldSize && old.child(j).sameMarkup(child)) {\n changedDescendants(old.child(j), child, offset + 1, f);\n } else {\n child.nodesBetween(0, child.content.size, f, offset + 1);\n }\n offset += child.nodeSize;\n }\n}\n\nexport function transactionsAreTypingChange(transactions: Transaction[]) {\n if (\n transactions.length === 1 &&\n transactions[0].steps.length === 1 &&\n transactions[0].steps[0] instanceof ReplaceStep\n ) {\n // step to examine\n const step: any = transactions[0].steps[0];\n\n // insert single chraracter or new empty slice (e.g. from enter after a paragraph)\n if (step.from === step.to && sliceContentLength(step.slice) <= 1) {\n return true;\n }\n\n // remove single character\n if (Math.abs(step.from - step.to) === 1 && step.slice.content.size === 0) {\n return true;\n }\n }\n\n return false;\n}\n\nexport interface RangeStep extends Step {\n from: number;\n to: number;\n}\n\nexport interface SliceStep extends RangeStep {\n slice: Slice;\n}\n","/*\n * slice.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Slice, Node as ProsemirrorNode } from 'prosemirror-model';\n\nexport function sliceContentLength(slice: Slice) {\n let length = 0;\n for (let i = 0; i < slice.content.childCount; i++) {\n length += slice.content.child(i).textContent.length;\n }\n return length;\n}\n\nexport function sliceHasNode(slice: Slice, predicate: (node: ProsemirrorNode) => boolean) {\n let hasNode = false;\n slice.content.descendants(node => {\n if (predicate(node)) {\n hasNode = true;\n return false;\n }\n });\n return hasNode;\n}\n","/*\n * platform.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport const kPlatformMac = typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false;\n","/*\n * outline.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorState } from 'prosemirror-state';\n\nimport { NodeWithPos, findChildrenByType } from 'prosemirror-utils';\n\nimport { findTopLevelBodyNodes } from './node';\nimport { titleFromYamlMetadataNode } from './yaml';\nimport { rmdChunkEngineAndLabel } from './rmd';\n\nexport interface EditorOutlineItem {\n navigation_id: string;\n type: EditorOutlineItemType;\n level: number;\n sequence: number;\n title: string;\n children: EditorOutlineItem[];\n}\n\nexport const kHeadingOutlineItemType = 'heading';\nexport const kRmdchunkOutlineItemType = 'rmd_chunk';\nexport const kYamlMetadataOutlineItemType = 'yaml_metadata';\n\nexport type EditorOutlineItemType = 'heading' | 'rmd_chunk' | 'yaml_metadata';\n\nexport type EditorOutline = EditorOutlineItem[];\n\nexport interface EditingOutlineLocationItem {\n type: EditorOutlineItemType;\n level: number;\n title: string;\n active: boolean;\n position: number;\n}\n\nexport interface EditingOutlineLocation {\n items: EditingOutlineLocationItem[];\n}\n\nexport function getEditingOutlineLocation(state: EditorState): EditingOutlineLocation {\n // traverse document outline to get base location info\n const itemsWithPos = getDocumentOutline(state).map(nodeWithPos => {\n const schema = state.schema;\n const node = nodeWithPos.node;\n const item: EditingOutlineLocationItem = {\n type: kYamlMetadataOutlineItemType,\n level: 0,\n title: '',\n active: false,\n position: nodeWithPos.pos,\n };\n if (node.type === schema.nodes.yaml_metadata) {\n item.type = kYamlMetadataOutlineItemType;\n item.title = titleFromYamlMetadataNode(node) || '';\n } else if (node.type === schema.nodes.rmd_chunk) {\n item.type = kRmdchunkOutlineItemType;\n const chunk = rmdChunkEngineAndLabel(node.textContent);\n if (chunk) {\n item.title = chunk.label;\n }\n } else if (node.type === schema.nodes.heading) {\n item.type = kHeadingOutlineItemType;\n item.level = node.attrs.level;\n item.title = node.textContent;\n }\n return {\n item,\n pos: nodeWithPos.pos,\n };\n });\n\n // return the location, set the active item by scanning backwards until\n // we find an item with a position before the cursor\n let foundActive = false;\n const items: EditingOutlineLocationItem[] = [];\n for (let i = itemsWithPos.length - 1; i >= 0; i--) {\n const item = itemsWithPos[i].item;\n if (!foundActive && itemsWithPos[i].pos < state.selection.from) {\n item.active = true;\n foundActive = true;\n }\n items.unshift(item);\n }\n\n // return the outline\n return { items };\n}\n\n// get a document outline that matches the scheme provided in EditingOutlineLocation:\n// - yaml metadata blocks\n// - top-level headings\n// - rmd chunks at the top level or within a top-level list\nexport function getDocumentOutline(state: EditorState): NodeWithPos[] {\n // get top level body nodes\n const schema = state.schema;\n const bodyNodes = findTopLevelBodyNodes(state.doc, node => {\n return [\n schema.nodes.yaml_metadata,\n schema.nodes.rmd_chunk,\n schema.nodes.heading,\n schema.nodes.bullet_list,\n schema.nodes.ordered_list,\n ].includes(node.type);\n });\n\n // reduce (explode lists into contained rmd chunks)\n const outlineNodes: NodeWithPos[] = [];\n bodyNodes.forEach(bodyNode => {\n // explode lists\n if ([schema.nodes.bullet_list, schema.nodes.ordered_list].includes(bodyNode.node.type)) {\n // look for rmd chunks within list items (non-recursive, only want top level)\n findChildrenByType(bodyNode.node, schema.nodes.list_item, false).forEach(listItemNode => {\n findChildrenByType(listItemNode.node, schema.nodes.rmd_chunk, false).forEach(rmdChunkNode => {\n outlineNodes.push({\n node: rmdChunkNode.node,\n pos: bodyNode.pos + 1 + listItemNode.pos + 1 + rmdChunkNode.pos,\n });\n });\n });\n\n // other nodes go straight through\n } else {\n outlineNodes.push(bodyNode);\n }\n });\n\n // return outline nodes\n return outlineNodes;\n}\n\nexport function getOutlineNodes(doc: ProsemirrorNode) {\n return findTopLevelBodyNodes(doc, isOutlineNode);\n}\n\nexport function isOutlineNode(node: ProsemirrorNode) {\n if (node.type.spec.attrs) {\n return node.type.spec.attrs.hasOwnProperty('navigation_id');\n } else {\n return false;\n }\n}\n","/*\n * rmd.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, NodeType } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { GapCursor } from 'prosemirror-gapcursor';\n\nimport {\n findParentNodeOfType,\n findChildrenByType,\n findChildren,\n findChildrenByMark,\n setTextSelection,\n} from 'prosemirror-utils';\n\nimport { getMarkRange } from './mark';\nimport { precedingListItemInsertPos, precedingListItemInsert } from './list';\nimport { toggleBlockType } from './command';\nimport { selectionIsBodyTopLevel } from './selection';\nimport { uuidv4 } from './util';\n\nexport interface EditorRmdChunk {\n lang: string;\n meta: string;\n code: string;\n}\n\nexport type ExecuteRmdChunkFn = (chunk: EditorRmdChunk) => void;\n\nexport function canInsertRmdChunk(state: EditorState) {\n // must either be at the body top level, within a list item, within a div, or within a\n // blockquote (and never within a table)\n const schema = state.schema;\n const within = (nodeType: NodeType) => !!findParentNodeOfType(nodeType)(state.selection);\n if (within(schema.nodes.table)) {\n return false;\n }\n if (\n !selectionIsBodyTopLevel(state.selection) &&\n !within(schema.nodes.list_item) &&\n !within(schema.nodes.blockquote) &&\n schema.nodes.div && !within(schema.nodes.div)\n ) {\n return false;\n }\n\n return true;\n}\n\nexport function insertRmdChunk(chunkPlaceholder: string, rowOffset = 0, colOffset = 0) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const schema = state.schema;\n\n if (\n !(state.selection instanceof GapCursor) &&\n !toggleBlockType(schema.nodes.rmd_chunk, schema.nodes.paragraph)(state) &&\n !precedingListItemInsertPos(state.doc, state.selection)\n ) {\n return false;\n }\n\n // must either be at the body top level, within a list item, within a div, or within a\n // blockquote (and never within a table)\n if (!canInsertRmdChunk(state)) {\n return false;\n }\n\n if (dispatch) {\n // compute offset\n const lines = chunkPlaceholder.split(/\\r?\\n/);\n const lineChars = lines.slice(0, rowOffset).reduce((count, line) => count + line.length + 1, 1);\n const offsetChars = lineChars + colOffset;\n\n // perform insert\n const tr = state.tr;\n const rmdText = schema.text(chunkPlaceholder);\n const rmdNode = schema.nodes.rmd_chunk.create({ navigation_id: uuidv4() }, rmdText);\n const prevListItemPos = precedingListItemInsertPos(tr.doc, tr.selection);\n if (prevListItemPos) {\n precedingListItemInsert(tr, prevListItemPos, rmdNode);\n } else {\n tr.replaceSelectionWith(rmdNode);\n const selPos = tr.selection.from - rmdNode.nodeSize - 1 + offsetChars - 1;\n setTextSelection(selPos)(tr);\n }\n\n dispatch(tr);\n }\n\n return true;\n };\n}\n\nexport function activeRmdChunk(state: EditorState): EditorRmdChunk | null {\n if (state.schema.nodes.rmd_chunk) {\n const rmdNode = findParentNodeOfType(state.schema.nodes.rmd_chunk)(state.selection);\n if (rmdNode) {\n return rmdChunk(rmdNode.node.textContent);\n }\n }\n return null;\n}\n\nexport function previousExecutableRmdChunks(state: EditorState, pos = state.selection.from): EditorRmdChunk[] {\n const activeChunk = activeRmdChunk(state);\n const lang = activeChunk ? activeChunk.lang : 'r';\n const kEvalFalseRegEx = /eval\\s*=\\s*F(?:ALSE)?/;\n return previousRmdChunks(state, pos, chunk => {\n return (\n chunk.lang.localeCompare(lang, undefined, { sensitivity: 'accent' }) === 0 && !kEvalFalseRegEx.test(chunk.meta)\n );\n });\n}\n\nexport function previousRmdChunks(state: EditorState, pos: number, filter?: (chunk: EditorRmdChunk) => boolean) {\n // chunks to return\n const chunks: EditorRmdChunk[] = [];\n\n // find all chunks in the document and return ones before the position that pass the specified filter\n const schema = state.schema;\n const rmdChunkNodes = findChildrenByType(state.doc, schema.nodes.rmd_chunk);\n for (const rmdChunkNode of rmdChunkNodes) {\n if (rmdChunkNode.pos + rmdChunkNode.node.nodeSize > pos) {\n break;\n }\n const chunk = rmdChunk(rmdChunkNode.node.textContent);\n if (chunk && (!filter || filter(chunk))) {\n chunks.push(chunk);\n }\n }\n\n // return chunks\n return chunks;\n}\n\nexport function rmdChunk(code: string): EditorRmdChunk | null {\n let lines = code.trimLeft().split('\\n');\n if (lines.length > 0) {\n const meta = lines[0].replace(/^[\\s`\\{]*(.*?)\\}?\\s*$/, '$1');\n const matchLang = meta.match(/\\w+/);\n const lang = matchLang ? matchLang[0] : '';\n\n // remove lines, other than the first, which are chunk delimiters (start\n // with ```). these are generally unintended but can be accidentally\n // introduced by e.g., pasting a chunk with its delimiters into visual mode,\n // where delimiters are implicit. if these lines aren't removed, they create\n // nested chunks that break parsing and can corrupt the document (see case\n // 8452)\n lines = lines.filter((line, idx) => {\n if (idx === 0) {\n return true;\n }\n return !line.startsWith(\"```\");\n });\n\n // a completely empty chunk (no second line) should be returned\n // as such. if it's not completely empty then append a newline\n // to the result of split (so that the chunk ends w/ a newline)\n const chunkCode = lines.length > 1 ? lines.slice(1).join('\\n') + '\\n' : '';\n\n return {\n lang,\n meta,\n code: chunkCode,\n };\n } else {\n return null;\n }\n}\n\nexport function mergeRmdChunks(chunks: EditorRmdChunk[]) {\n if (chunks.length) {\n const merged = {\n lang: chunks[0].lang,\n meta: '',\n code: '',\n };\n chunks.forEach(chunk => (merged.code += chunk.code + '\\n'));\n return merged;\n } else {\n return null;\n }\n}\n\n/**\n * Attempts to extract the engine name and label from a chunk header.\n * \n * @param text The chunk header, e.g. {r foo}\n * @returns An object with `engine` and `label` properties, or null.\n */\nexport function rmdChunkEngineAndLabel(text: string) {\n // Match the engine and label with a regex\n const match = text.match(/^\\{([a-zA-Z0-9_]+)[\\s,]+([a-zA-Z0-9/._='\"-]+)/);\n if (match) {\n // The second capturing group in the regex matches the first string after\n // the engine. This might be a label (e.g., {r label}), but could also be\n // a chunk option (e.g., {r echo=FALSE}). If it has an =, presume that it's\n // an option.\n if (match[2].indexOf(\"=\") !== -1) {\n return null;\n }\n return {\n engine: match[1],\n label: match[2],\n };\n } else {\n return null;\n }\n}\n\nexport function haveTableCellsWithInlineRcode(doc: ProsemirrorNode) {\n const schema = doc.type.schema;\n const haveRCode = !!doc.type.schema.nodes.rmd_chunk;\n if (haveRCode) {\n const isTableCell = (node: ProsemirrorNode) =>\n node.type === schema.nodes.table_cell || node.type === schema.nodes.table_header;\n return findChildren(doc, isTableCell).some(cell => {\n if (doc.rangeHasMark(cell.pos, cell.pos + cell.node.nodeSize, schema.marks.code)) {\n const markedNodes = findChildrenByMark(cell.node, schema.marks.code, true);\n return markedNodes.some(markedNode => {\n const from = cell.pos + 1 + markedNode.pos;\n const markedRange = getMarkRange(doc.resolve(from), schema.marks.code);\n if (markedRange) {\n const text = doc.textBetween(markedRange.from, markedRange.to);\n return /^r[ #].+$/.test(text);\n } else {\n return false;\n }\n });\n } else {\n return false;\n }\n });\n } else {\n return false;\n }\n}\n","/*\n * mark.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Mark, MarkSpec, MarkType, ResolvedPos, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorState, Selection, Transaction } from 'prosemirror-state';\n\nimport { PandocTokenReader, PandocMarkWriterFn, PandocInlineHTMLReaderFn } from './pandoc';\nimport { mergedTextNodes } from './text';\nimport { findChildrenByMark } from 'prosemirror-utils';\nimport { MarkTransaction } from './transaction';\n\nexport interface PandocMark {\n readonly name: string;\n readonly spec: MarkSpec;\n readonly noInputRules?: boolean;\n readonly noSpelling?: boolean;\n readonly pandoc: {\n readonly readers: readonly PandocTokenReader[];\n readonly inlineHTMLReader?: PandocInlineHTMLReaderFn;\n readonly writer: {\n priority: number;\n write: PandocMarkWriterFn;\n };\n };\n}\n\nexport function markIsActive(context: EditorState | Transaction, type: MarkType) {\n const { from, $from, to, empty } = context.selection;\n\n if (empty) {\n return type && !!type.isInSet(context.storedMarks || $from.marks());\n }\n\n return !!context.doc.rangeHasMark(from, to, type);\n}\n\nexport function getMarkAttrs(doc: ProsemirrorNode, range: { from: number; to: number }, type: MarkType) {\n const { from, to } = range;\n let marks: Mark[] = [];\n\n doc.nodesBetween(from, to, node => {\n marks = [...marks, ...node.marks];\n });\n\n const mark = marks.find(markItem => markItem.type.name === type.name);\n\n if (mark) {\n return mark.attrs;\n }\n\n return {};\n}\n\nexport function getMarkRange($pos?: ResolvedPos, type?: MarkType) {\n if (!$pos || !type) {\n return false;\n }\n\n const start = $pos.parent.childAfter($pos.parentOffset);\n\n if (!start.node) {\n return false;\n }\n\n const link = start.node.marks.find((mark: Mark) => mark.type === type);\n if (!link) {\n return false;\n }\n\n let startIndex = $pos.index();\n let startPos = $pos.start() + start.offset;\n let endIndex = startIndex + 1;\n let endPos = startPos + start.node.nodeSize;\n\n while (startIndex > 0 && link.isInSet($pos.parent.child(startIndex - 1).marks)) {\n startIndex -= 1;\n startPos -= $pos.parent.child(startIndex).nodeSize;\n }\n\n while (endIndex < $pos.parent.childCount && link.isInSet($pos.parent.child(endIndex).marks)) {\n endPos += $pos.parent.child(endIndex).nodeSize;\n endIndex += 1;\n }\n\n return { from: startPos, to: endPos };\n}\n\nexport function getSelectionMarkRange(selection: Selection, markType: MarkType): { from: number; to: number } {\n let range: { from: number; to: number };\n if (selection.empty) {\n range = getMarkRange(selection.$head, markType) as { from: number; to: number };\n } else {\n range = { from: selection.from, to: selection.to };\n }\n return range;\n}\n\nexport function removeInvalidatedMarks(\n tr: MarkTransaction,\n node: ProsemirrorNode,\n pos: number,\n re: RegExp,\n markType: MarkType,\n) {\n re.lastIndex = 0;\n const markedNodes = findChildrenByMark(node, markType, true);\n markedNodes.forEach(markedNode => {\n const from = pos + 1 + markedNode.pos;\n const markedRange = getMarkRange(tr.doc.resolve(from), markType);\n if (markedRange) {\n const text = tr.doc.textBetween(markedRange.from, markedRange.to);\n if (!text.match(re)) {\n tr.removeMark(markedRange.from, markedRange.to, markType);\n tr.removeStoredMark(markType);\n }\n }\n });\n re.lastIndex = 0;\n}\n\nexport function splitInvalidatedMarks(\n tr: MarkTransaction,\n node: ProsemirrorNode,\n pos: number,\n validLength: (text: string) => number,\n markType: MarkType,\n removeMark?: (from: number, to: number) => void,\n) {\n const hasMarkType = (nd: ProsemirrorNode) => markType.isInSet(nd.marks);\n const markedNodes = findChildrenByMark(node, markType, true);\n markedNodes.forEach(markedNode => {\n const mark = hasMarkType(markedNode.node);\n if (mark) {\n const from = pos + 1 + markedNode.pos;\n const markRange = getMarkRange(tr.doc.resolve(from), markType);\n if (markRange) {\n const text = tr.doc.textBetween(markRange.from, markRange.to);\n const length = validLength(text);\n if (length > -1 && length !== text.length) {\n if (removeMark) {\n removeMark(markRange.from + length, markRange.to);\n } else {\n tr.removeMark(markRange.from + length, markRange.to, markType);\n }\n }\n }\n }\n });\n}\n\nexport function detectAndApplyMarks(\n tr: MarkTransaction,\n node: ProsemirrorNode,\n pos: number,\n re: RegExp,\n markType: MarkType,\n attrs: (match: RegExpMatchArray) => {},\n filter?: (from: number, to: number) => boolean,\n text?: (match: RegExpMatchArray) => string,\n) {\n re.lastIndex = 0;\n const textNodes = mergedTextNodes(node, (_node: ProsemirrorNode, _pos: number, parentNode: ProsemirrorNode) =>\n parentNode.type.allowsMarkType(markType),\n );\n textNodes.forEach(textNode => {\n re.lastIndex = 0;\n let match = re.exec(textNode.text);\n while (match !== null) {\n const refText = text ? text(match) : match[0];\n const from = pos + 1 + textNode.pos + match.index + (match[0].length - refText.length);\n const to = from + refText.length;\n const range = getMarkRange(tr.doc.resolve(to), markType);\n if (\n (!range || range.from !== from || range.to !== to) &&\n !tr.doc.rangeHasMark(from, to, markType.schema.marks.code)\n ) {\n if (!filter || filter(from, to)) {\n const mark = markType.create(attrs instanceof Function ? attrs(match) : attrs);\n tr.addMark(from, to, mark);\n if (tr.selection.anchor === to) {\n tr.removeStoredMark(mark.type);\n }\n }\n }\n match = re.lastIndex !== 0 ? re.exec(textNode.text) : null;\n }\n });\n re.lastIndex = 0;\n}\n","/*\n * text.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\n\nexport interface TextWithPos {\n readonly text: string;\n readonly pos: number;\n}\n\nexport function mergedTextNodes(\n doc: ProsemirrorNode,\n filter?: (node: ProsemirrorNode, pos: number, parentNode: ProsemirrorNode) => boolean,\n): TextWithPos[] {\n const textNodes: TextWithPos[] = [];\n let nodeIndex = 0;\n doc.descendants((node, pos, parentNode) => {\n if (node.isText) {\n // apply filter\n if (filter && !filter(node, pos, parentNode)) {\n return false;\n }\n\n // join existing contiguous range of text nodes or create a new one\n if (textNodes[nodeIndex]) {\n textNodes[nodeIndex] = {\n text: textNodes[nodeIndex].text + node.text,\n pos: textNodes[nodeIndex].pos,\n };\n } else {\n textNodes[nodeIndex] = {\n text: node.text || '',\n pos,\n };\n }\n } else {\n nodeIndex += 1;\n }\n });\n return textNodes;\n}\n\nexport function stripQuotes(text: string) {\n return text.replace(/[\"']/g, '');\n}\n\nexport function equalsIgnoreCase(str1: string, str2: string) {\n return str1.localeCompare(str2, undefined, { sensitivity: 'accent' }) === 0;\n}\n","/*\n * list.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { Transaction, Selection } from 'prosemirror-state';\n\nimport { findParentNodeOfType, setTextSelection } from 'prosemirror-utils';\n\nexport enum ListType {\n Ordered = 'OrderedList',\n Bullet = 'BulletList',\n}\n\nexport interface ListCapabilities {\n tasks: boolean;\n fancy: boolean;\n example: boolean;\n order: boolean;\n}\n\nexport function isList(node: ProsemirrorNode | null | undefined) {\n if (node) {\n const schema = node.type.schema;\n return node.type === schema.nodes.bullet_list || node.type === schema.nodes.ordered_list;\n } else {\n return false;\n }\n}\n\nexport function precedingListItemInsertPos(doc: ProsemirrorNode, selection: Selection) {\n // selection just be empty\n if (!selection.empty) {\n return null;\n }\n\n // check for insert position in preceding list item (only trigger when\n // the user is at the very beginning of a new bullet)\n const schema = doc.type.schema;\n const $head = selection.$head;\n const parentListItem = findParentNodeOfType(schema.nodes.list_item)(selection);\n if (parentListItem) {\n const $liPos = doc.resolve(parentListItem.pos);\n const listIndex = $liPos.index();\n const parentIndex = $head.index($head.depth - 1);\n const parentOffset = $head.parentOffset;\n if (listIndex > 0 && parentIndex === 0 && parentOffset === 0) {\n const pos = $liPos.pos - 1;\n return pos;\n } else {\n return null;\n }\n } else {\n return null;\n }\n}\n\nexport function precedingListItemInsert(tr: Transaction, pos: number, node: ProsemirrorNode) {\n tr.deleteRange(tr.selection.from, tr.selection.from + 1);\n tr.insert(pos, node);\n setTextSelection(tr.mapping.map(pos), -1)(tr);\n return tr;\n}\n","/*\n * command.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { lift, setBlockType, toggleMark, wrapIn } from 'prosemirror-commands';\nimport { MarkType, Node as ProsemirrorNode, NodeType } from 'prosemirror-model';\nimport { wrapInList, liftListItem } from 'prosemirror-schema-list';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { findParentNode, findParentNodeOfType, setTextSelection } from 'prosemirror-utils';\nimport { EditorView } from 'prosemirror-view';\n\nimport { markIsActive, getMarkRange } from './mark';\nimport { canInsertNode, nodeIsActive } from './node';\nimport { pandocAttrInSpec, pandocAttrAvailable, pandocAttrFrom } from './pandoc_attr';\nimport { isList } from './list';\nimport { OmniInsert } from './omni_insert';\nimport { EditorUIPrefs, kListSpacingTight } from './ui';\nimport { selectionIsWithinRange, selectionHasRange } from './selection';\n\nexport enum EditorCommandId {\n // text editing\n Undo = '201CA961-829E-4708-8FBC-8896FDE85A10',\n Redo = 'B6272475-04E0-48C0-86E3-DAFA763BDF7B',\n SelectAll = 'E42BF0DA-8A02-4FCE-A202-7EA8A4833FC5',\n ClearFormatting = 'C22D8CC4-0A9F-41D5-B540-7DAAAB80F344',\n\n // formatting\n Strong = '83B04020-1195-4A65-8A8E-7C173C87F439',\n Em = '9E1B73E4-8140-43C3-92E4-A5E2583F40E6',\n Code = '32621150-F829-4B8F-B5BD-627FABBBCF53',\n Strikeout = 'D5F0225B-EC73-4600-A1F3-01F418EE8CB4',\n Superscript = '0200D2FC-B5AF-423B-8B7A-4A7FC3DAA6AF',\n Subscript = '3150428F-E468-4E6E-BF53-A2713E59B4A0',\n Smallcaps = '41D8030F-5E8B-48F2-B1EE-6BC40FD502E4',\n Underline = '7F0E6AE2-08F4-4594-9BA2-E6B8B27FA8F7',\n Paragraph = '20EC2695-75CE-4DCD-A644-266E9F5F5913',\n Heading1 = '5B77642B-923D-4440-B85D-1A27C9CF9D77',\n Heading2 = '42985A4B-6BF2-4EEF-AA30-3E84A8B9111C',\n Heading3 = '3F84D9DF-5EF6-484C-8615-BAAE2AC9ECE2',\n Heading4 = 'DA76731D-1D84-4DBA-9BEF-A6F73536F0B9',\n Heading5 = '59E24247-A140-466A-BC96-3C8ADABB57A5',\n Heading6 = 'DB495DF5-8501-43C7-AE07-59CE9D9C373D',\n CodeBlock = '3BA12A49-3E29-4ABC-9A49-436A3B49B880',\n CodeBlockFormat = '07A6F2AA-01DC-41D7-9F01-AA91EAD856EE',\n Blockquote = 'AF0717E7-E4BA-4909-9F10-17EB757CDD0F',\n LineBlock = 'F401687C-B995-49AF-B2B0-59C158174FD5',\n AttrEdit = '0F8A254D-9272-46BF-904D-3A9D68B91032',\n Span = '852CF3E3-8A2B-420D-BD95-F79C54118E7E',\n Div = '15EDB8F1-6015-4DA9-AE50-5987B24C1D96',\n InsertDiv = 'ACA1521B-8875-4113-9D43-B47F0038B19F',\n\n // lists\n BulletList = 'D897FD2B-D6A4-44A7-A404-57B5251FBF64',\n OrderedList = '3B8B82D5-7B6C-4480-B7DD-CF79C6817980',\n TightList = 'A32B668F-74F3-43D7-8759-6576DDE1D603',\n ListItemSink = '7B503FA6-6576-4397-89EF-37887A1B2EED',\n ListItemLift = '53F89F57-22E2-4FCC-AF71-3E382EC10FC8',\n ListItemSplit = '19BBD87F-96D6-4276-B7B8-470652CF4106',\n ListItemCheck = '2F6DA9D8-EE57-418C-9459-50B6FD84137F',\n ListItemCheckToggle = '34D30F3D-8441-44AD-B75A-415DA8AC740B',\n EditListProperties = 'E006A68C-EA39-4954-91B9-DDB07D1CBDA2',\n\n // tables\n TableInsertTable = 'FBE39613-2DAA-445D-9E92-E1EABFB33E2C',\n TableToggleHeader = 'A5EDA226-A3CA-4C1B-8D4D-C2675EF51AFF',\n TableToggleCaption = 'C598D85C-E15C-4E10-9850-95882AEC7E60',\n TableNextCell = '14299819-3E19-4A27-8D0B-8035315CF0B4',\n TablePreviousCell = '0F041FB5-0203-4FF1-9D13-B16606A80F3E',\n TableAddColumnBefore = '2447B81F-E07A-4C7D-8026-F2B148D5FF4A',\n TableAddColumnAfter = 'ED86CFAF-D0B3-4B1F-9BB8-89987A939C8C',\n TableDeleteColumn = 'B3D077BC-DD51-4E3A-8AD4-DE5DE686F7C4',\n TableAddRowBefore = 'E97FB318-4052-41E5-A2F5-55B64E9826A5',\n TableAddRowAfter = '3F28FA24-4BDD-4C13-84FF-9C5E1D4B04D6',\n TableDeleteRow = '5F3B4DCD-5006-43A5-A069-405A946CAC68',\n TableDeleteTable = '116D1E68-9315-4FEB-B6A0-AD25B3B9C881',\n TableAlignColumnLeft = '0CD6A2A4-06F9-435D-B8C9-070B22B19D8',\n TableAlignColumnRight = '86D90C12-BB12-4A9D-802F-D00EB7CEF2C5',\n TableAlignColumnCenter = '63333996-2F65-4586-8494-EA9CAB5A7751',\n TableAlignColumnDefault = '7860A9C1-60AF-40AD-9EB8-A10F6ADF25C5',\n\n // insert\n OmniInsert = '12F96C13-38C1-4266-A0A1-E871D8C709FB',\n Link = '842FCB9A-CA61-4C5F-A0A0-43507B4B3FA9',\n RemoveLink = '072D2084-218D-4A34-AF1F-7E196AF684B2',\n Image = '808220A3-2B83-4CB6-BCC1-46565D54FA47',\n Footnote = '1D1A73C0-F0E1-4A0F-BEBC-08398DE14A4D',\n ParagraphInsert = '4E68830A-3E68-450A-B3F3-2591F4EB6B9A',\n HorizontalRule = 'EAA7115B-181C-49EC-BDB1-F0FF10369278',\n YamlMetadata = '431B5A45-1B25-4A55-9BAF-C0FE95D9B2B6',\n Shortcode = '0FDDA7E8-419D-4A5D-A1F5-74061466655D',\n InlineMath = 'A35C562A-0BD6-4B14-93D5-6FF3BE1A0C8A',\n DisplayMath = '3E36BA99-2AE9-47C3-8C85-7CC5314A88DF',\n Citation = 'EFFCFC81-F2E7-441E-B7FA-C693146B4185',\n CrossReference = '48CEED4F-1D18-4AF9-8686-9FEB5DF6BCC8',\n DefinitionList = 'CFAB8F4D-3350-4398-9754-8DE0FB95167B',\n DefinitionTerm = '204D1A8F-8EE6-424A-8E69-99768C85B39E',\n DefinitionDescription = 'F0738D83-8E11-4CB5-B958-390190A2D7DD',\n Symbol = '1419765F-6E4A-4A4C-8670-D9E8578EA996',\n Emoji = 'F73896A2-02CC-4E5D-A596-78444A1D2A37',\n EmDash = '5B0DD33B-6209-4713-B8BB-60B5CA0BC3B3',\n EnDash = 'C32AFE32-0E57-4A16-9C39-88EB1D82B8B4',\n NonBreakingSpace = 'CF6428AB-F36E-446C-8661-2781B2CD1169',\n HardLineBreak = '3606FF87-866C-4729-8F3F-D065388FC339',\n\n // raw\n TexInline = 'CFE8E9E5-93BA-4FFA-9A77-BA7EFC373864',\n TexBlock = 'BD11A6A7-E528-40A2-8139-3F8F5F556ED2',\n HTMLComment = 'F973CBA4-2882-4AC5-A642-47F4733EBDD4',\n HTMLInline = 'C682C6B5-E58D-498C-A38F-FB07BEC3A82D',\n HTMLBlock = '6F9F64AF-711F-4F91-8642-B51C41717F31',\n RawInline = '984167C8-8582-469C-97D8-42CB12773657',\n RawBlock = 'F5757992-4D33-45E6-86DC-F7D7B174B1EC',\n\n // chunk\n RCodeChunk = 'EBFD21FF-4A6E-4D88-A2E0-B38470B00BB9',\n BashCodeChunk = '5FBB7283-E8AB-450C-9359-A4658CBCD136',\n D3CodeChunk = 'C73CA46C-B56F-40B6-AEFA-DDBB30CA8C08',\n PythonCodeChunk = '42A7A138-421A-4DCF-8A88-FE2F8EC5B8F6',\n RcppCodeChunk = '6BD2810B-6B20-4358-8AA4-74BBFFC92AC3',\n SQLCodeChunk = '41D61FD2-B56B-48A7-99BC-2F60BC0D9F78',\n StanCodeChunk = '65D33344-CBE9-438C-B337-A538F8D7FCE5',\n ExecuteCurentRmdChunk = '31C799F3-EF18-4F3A-92E6-51F7A3193A1B',\n ExecuteCurrentPreviousRmdChunks = 'D3FDE96-0264-4364-ADFF-E87A75405B0B',\n\n // outline\n GoToNextSection = 'AE827BDA-96F8-4E84-8030-298D98386765',\n GoToPreviousSection = 'E6AA728C-2B75-4939-9123-0F082837ACDF',\n GoToNextChunk = '50DD6E51-13B5-4F1E-A46B-6A33EB1609D9',\n GoToPreviousChunk = '8D105D33-78FE-4A98-8195-6B71361424C5'\n}\n\nexport interface EditorCommand {\n readonly id: EditorCommandId;\n readonly keymap: readonly string[];\n readonly isEnabled: () => boolean;\n readonly isActive: () => boolean;\n readonly plural: () => number;\n readonly execute: () => void;\n}\n\nexport class ProsemirrorCommand {\n public readonly id: EditorCommandId;\n public readonly keymap: readonly string[];\n public readonly execute: CommandFn;\n public readonly omniInsert?: OmniInsert;\n public readonly keepFocus: boolean;\n\n constructor(\n id: EditorCommandId,\n keymap: readonly string[],\n execute: CommandFn,\n omniInsert?: OmniInsert,\n keepFocus?: boolean,\n ) {\n this.id = id;\n this.keymap = keymap;\n this.execute = execute;\n this.omniInsert = omniInsert;\n this.keepFocus = !(keepFocus === false);\n }\n\n public isEnabled(state: EditorState): boolean {\n return this.execute(state);\n }\n\n public isActive(state: EditorState): boolean {\n return false;\n }\n\n public plural(state: EditorState): number {\n return 1;\n }\n}\n\nexport class MarkCommand extends ProsemirrorCommand {\n public readonly markType: MarkType;\n public readonly attrs: object;\n\n constructor(id: EditorCommandId, keymap: string[], markType: MarkType, attrs = {}) {\n super(id, keymap, toggleMarkType(markType, attrs) as CommandFn);\n this.markType = markType;\n this.attrs = attrs;\n }\n\n public isActive(state: EditorState) {\n return markIsActive(state, this.markType);\n }\n}\n\nexport class NodeCommand extends ProsemirrorCommand {\n public readonly nodeType: NodeType;\n public readonly attrs: object;\n\n constructor(\n id: EditorCommandId,\n keymap: string[],\n nodeType: NodeType,\n attrs: object,\n execute: CommandFn,\n omniInsert?: OmniInsert,\n ) {\n super(id, keymap, execute, omniInsert);\n this.nodeType = nodeType;\n this.attrs = attrs;\n }\n\n public isActive(state: EditorState) {\n return nodeIsActive(state, this.nodeType, this.attrs);\n }\n}\n\nexport class BlockCommand extends NodeCommand {\n constructor(\n id: EditorCommandId,\n keymap: string[],\n blockType: NodeType,\n toggleType: NodeType,\n attrs = {},\n omniInsert?: OmniInsert,\n ) {\n super(id, keymap, blockType, attrs, toggleBlockType(blockType, toggleType, attrs), omniInsert);\n }\n}\n\nexport class WrapCommand extends NodeCommand {\n constructor(id: EditorCommandId, keymap: string[], wrapType: NodeType, attrs = {}, omniInsert?: OmniInsert) {\n super(id, keymap, wrapType, attrs, toggleWrap(wrapType, attrs), omniInsert);\n }\n}\n\nexport class InsertCharacterCommand extends ProsemirrorCommand {\n constructor(id: EditorCommandId, ch: string, keymap: string[]) {\n super(id, keymap, (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // enable/disable command\n const schema = state.schema;\n if (!canInsertNode(state, schema.nodes.text)) {\n return false;\n }\n if (dispatch) {\n const tr = state.tr;\n tr.replaceSelectionWith(schema.text(ch), true).scrollIntoView();\n dispatch(tr);\n }\n\n return true;\n });\n }\n}\n\nexport type CommandFn = (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => boolean;\n\nexport function toggleMarkType(markType: MarkType, attrs?: { [key: string]: any }) {\n const defaultToggleMark = toggleMark(markType, attrs);\n\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // disallow non-code marks when the selection is contained within a code mark\n // (this is a pandoc constraint). note that we can allow them if the selection\n // contains the code mark range entirely (as in that case the code mark will\n // nest within the other mark)\n if (markType !== state.schema.marks.code) {\n if (markIsActive(state, state.schema.marks.code)) {\n const codeRange = getMarkRange(state.selection.$anchor, state.schema.marks.code);\n if (\n codeRange &&\n selectionIsWithinRange(state.selection, codeRange) &&\n !selectionHasRange(state.selection, codeRange)\n ) {\n return false;\n }\n }\n }\n\n // default implementation\n return defaultToggleMark(state, dispatch);\n };\n}\n\nexport function toggleList(listType: NodeType, itemType: NodeType, prefs: EditorUIPrefs): CommandFn {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const { selection } = state;\n const { $from, $to } = selection;\n const range = $from.blockRange($to);\n\n if (!range) {\n return false;\n }\n\n const parentList = findParentNode(isList)(selection);\n\n if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {\n if (isList(parentList.node) && listType.validContent(parentList.node.content)) {\n if (parentList.node.type !== listType) {\n if (dispatch) {\n const tr: Transaction = state.tr;\n const attrs: { [key: string]: any } = {};\n if (parentList.node.attrs.tight) {\n attrs.tight = true;\n }\n tr.setNodeMarkup(parentList.pos, listType, attrs);\n dispatch(tr);\n }\n return true;\n } else {\n return liftListItem(itemType)(state, dispatch);\n }\n }\n }\n\n // if we are in a heading then this isn't valid\n if (findParentNodeOfType(state.schema.nodes.heading)(state.selection)) {\n return false;\n }\n\n // reflect tight preference\n const tight = prefs.listSpacing() === kListSpacingTight;\n\n return wrapInList(listType, { tight })(state, dispatch);\n };\n}\n\nexport function toggleBlockType(type: NodeType, toggletype: NodeType, attrs = {}): CommandFn {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (!dispatch) {\n return type === toggletype || setBlockType(type, { ...attrs })(state, dispatch);\n }\n\n // if the type has pandoc attrs then see if we can transfer from the existing node\n let pandocAttr: any = {};\n if (pandocAttrInSpec(type.spec)) {\n const predicate = (n: ProsemirrorNode) => pandocAttrAvailable(n.attrs);\n const node = findParentNode(predicate)(state.selection);\n if (node) {\n pandocAttr = pandocAttrFrom(node.node.attrs);\n }\n }\n\n return setBlockType(type, { ...attrs, ...pandocAttr })(state, dispatch);\n };\n}\n\nexport function toggleWrap(type: NodeType, attrs?: { [key: string]: any }): CommandFn {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const isActive = nodeIsActive(state, type, attrs);\n\n if (isActive) {\n return lift(state, dispatch);\n }\n\n return wrapIn(type, attrs)(state, dispatch);\n };\n}\n\nexport function insertNode(nodeType: NodeType, attrs = {}): CommandFn {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (!canInsertNode(state, nodeType)) {\n return false;\n }\n\n if (dispatch) {\n dispatch(state.tr.replaceSelectionWith(nodeType.create(attrs)));\n }\n\n return true;\n };\n}\n\nexport function exitNode(\n nodeType: NodeType,\n depth: number,\n allowKey: boolean,\n filter = (_node: ProsemirrorNode) => true,\n) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // must be within the node type and pass the filter\n const { $head, $anchor } = state.selection;\n if ($head.parent.type !== nodeType || !filter($head.parent)) {\n return false;\n }\n\n // must be empty and entirely contained by the node\n if (!$head.sameParent($anchor) || !state.selection.empty) {\n return !allowKey;\n }\n\n // must be at the end of the node\n const node = findParentNodeOfType(nodeType)(state.selection)!;\n const endCaptionPos = node.pos + node.node.nodeSize - 1;\n if (state.selection.from !== endCaptionPos) {\n return !allowKey;\n }\n\n // insert must be valid in container above\n const above = $head.node(depth);\n const after = $head.indexAfter(depth);\n const type = above.contentMatchAt(after).defaultType!;\n if (!above.canReplaceWith(after, after, type)) {\n return !allowKey;\n }\n\n // perform insert\n if (dispatch) {\n const tr = state.tr;\n const pos = node.pos + node.node.nodeSize + (Math.abs(depth) - 1);\n tr.insert(pos, type.create());\n setTextSelection(pos, 1)(tr);\n dispatch(tr.scrollIntoView());\n }\n\n return true;\n };\n}\n","import { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\nimport { NodeWithPos } from 'prosemirror-utils';\n\nimport { bodyElement } from './dom';\nimport {\n kYamlMetadataOutlineItemType,\n kHeadingOutlineItemType,\n kRmdchunkOutlineItemType,\n EditingOutlineLocation,\n getDocumentOutline,\n EditingOutlineLocationItem,\n} from './outline';\nimport { restoreSelection } from './selection';\nimport { scrollToPos } from './scroll';\n\nexport interface EditingLocation {\n pos: number;\n scrollTop: number;\n}\n\nexport function getEditingLocation(view: EditorView): EditingLocation {\n const pos = view.state.selection.from;\n const bodyEl = bodyElement(view);\n const scrollTop = bodyEl.scrollTop;\n return { pos, scrollTop };\n}\n\nexport function setEditingLocation(\n view: EditorView,\n outlineLocation?: EditingOutlineLocation,\n previousLocation?: EditingLocation,\n) {\n // get the current document outline\n const documentOutline = getDocumentOutline(view.state);\n\n // if all of the types and levels match up to the active outline item,\n // then we have a candidate match\n let docOutlineLocationNode: NodeWithPos | undefined;\n\n if (outlineLocation) {\n for (let i = 0; i < outlineLocation.items.length && i < documentOutline.length; i++) {\n // get the item and it's peer\n const item = outlineLocation.items[i];\n const docOutlineNode = documentOutline[i];\n\n // if they don't match then bail (can't resolve different interpretations of the outline)\n if (!outlineItemSimillarToNode(item, docOutlineNode.node)) {\n break;\n }\n\n // if this is the active item\n if (item.active) {\n // see if the previous location is actually a better target (because it's between this location and\n // the next outline node). in that case we don't set the target node and we leave the restorePos\n // at the previous location\n if (!locationIsBetweenDocOutlineNodes(docOutlineNode, documentOutline[i + 1], previousLocation)) {\n // set the target\n docOutlineLocationNode = docOutlineNode;\n\n // if this is an rmd chunk then advance to the second line\n if (docOutlineNode.node.type === view.state.schema.nodes.rmd_chunk) {\n const chunkText = docOutlineNode.node.textContent;\n const newlineIdx = chunkText.indexOf('\\n');\n if (newlineIdx !== -1) {\n docOutlineLocationNode.pos += newlineIdx + 2;\n }\n }\n }\n\n break;\n }\n }\n }\n\n // do the restore\n if (docOutlineLocationNode) {\n restoreSelection(view, docOutlineLocationNode.pos);\n scrollToPos(view, docOutlineLocationNode.pos);\n } else if (previousLocation) {\n restoreSelection(view, previousLocation.pos);\n bodyElement(view).scrollTop = previousLocation.scrollTop;\n }\n}\n\nfunction outlineItemSimillarToNode(outlineItem: EditingOutlineLocationItem, docOutlneNode: ProsemirrorNode) {\n const schema = docOutlneNode.type.schema;\n if (outlineItem.type === kYamlMetadataOutlineItemType) {\n return docOutlneNode.type === schema.nodes.yaml_metadata;\n } else if (outlineItem.type === kRmdchunkOutlineItemType) {\n return docOutlneNode.type === schema.nodes.rmd_chunk;\n } else if (outlineItem.type === kHeadingOutlineItemType) {\n return docOutlneNode.type === schema.nodes.heading && docOutlneNode.attrs.level === outlineItem.level;\n } else {\n return false;\n }\n}\n\nfunction locationIsBetweenDocOutlineNodes(nodeA: NodeWithPos, nodeB?: NodeWithPos, location?: EditingLocation) {\n // bail if we don't have all the arguments\n if (!nodeB || !location) {\n return false;\n }\n return nodeA.pos < location.pos && nodeB.pos > location.pos;\n}\n","/*\n * ui.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { SkinTone } from './emoji';\nimport { EditorRmdChunk } from './rmd';\nimport { XRef } from './xref';\n\nimport { EditorUIImages } from './ui-images';\nimport { EditorDialogs } from './ui-dialogs';\nimport { EditorUISpelling } from './spelling';\n\nexport interface EditorUI {\n dialogs: EditorDialogs;\n display: EditorDisplay;\n math: EditorUIMath;\n context: EditorUIContext;\n prefs: EditorUIPrefs;\n images: EditorUIImages;\n chunks: EditorUIChunks;\n spelling: EditorUISpelling;\n}\n\n/**\n * Callbacks supplied to the host to interact with a code chunk and its output.\n */\nexport interface EditorUIChunkCallbacks {\n getPos: () => number;\n scrollIntoView: (ele: HTMLElement) => void;\n scrollCursorIntoView: () => void;\n}\n\nexport interface EditorUIChunks {\n // create a code chunk editor\n createChunkEditor: (type: string, index: number, callbacks: EditorUIChunkCallbacks) => ChunkEditor;\n}\n\nexport interface ChunkEditor {\n editor: unknown;\n setMode(mode: string): void;\n executeSelection(): void;\n element: HTMLElement;\n destroy(): void;\n}\n\nexport interface EditorUIContext {\n // check if we are the active tab\n isActiveTab: () => boolean;\n\n // get the path to the current document\n getDocumentPath: () => string | null;\n\n // ensure the edited document is saved on the server before proceeding\n // (note this just means that the server has a copy of it for e.g.\n // indexing xrefs, from the user's standpoint the doc is still dirty)\n withSavedDocument: () => Promise;\n\n // get the default directory for resources (e.g. where relative links point to)\n getDefaultResourceDir: () => string;\n\n // map from a filesystem path to a resource reference\n mapPathToResource: (path: string) => string;\n\n // map from a resource reference (e.g. images/foo.png) to a URL we can use in the document\n mapResourceToURL: (path: string) => string;\n\n // watch a resource for changes (returns an unsubscribe function)\n watchResource: (path: string, notify: VoidFunction) => VoidFunction;\n\n // translate a string\n translateText: (text: string) => string;\n\n // are there dropped uris available?\n droppedUris: () => string[] | null;\n\n // uris from the clipboard\n clipboardUris: () => Promise;\n\n // image from the clipboard (returned as file path)\n clipboardImage: () => Promise;\n\n // resolve image uris (make relative, copy to doc local 'images' dir, etc)\n resolveImageUris: (uris: string[]) => Promise;\n\n // are we running in windows desktop mode?\n isWindowsDesktop: () => boolean;\n}\n\nexport interface EditorMenuItem {\n text?: string;\n exec?: VoidFunction;\n command?: string;\n separator?: boolean;\n subMenu?: {\n items: EditorMenuItem[];\n };\n}\n\nexport interface EditorUIMath {\n typeset?: (el: HTMLElement, text: string, priority: boolean) => Promise;\n}\n\nexport interface EditorDisplay {\n openURL: (url: string) => void;\n navigateToXRef: (file: string, xref: XRef) => void;\n showContextMenu?: (items: EditorMenuItem[], clientX: number, clientY: number) => Promise;\n}\n\nexport const kListSpacingTight = 'tight';\nexport const kListSpacingSpaced = 'spaced';\nexport type ListSpacing = 'tight' | 'spaced';\n\nexport interface EditorUIPrefs {\n darkMode: () => boolean;\n listSpacing: () => ListSpacing;\n equationPreview: () => boolean;\n tabKeyMoveFocus: () => boolean;\n emojiSkinTone: () => SkinTone;\n setEmojiSkinTone: (skinTone: SkinTone) => void;\n zoteroUseBetterBibtex: () => boolean;\n setBibliographyDefaultType: (type: string) => void;\n bibliographyDefaultType: () => string;\n citationDefaultInText: () => boolean;\n setCitationDefaultInText: (value: boolean) => void;\n}\n","/*\n * util.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\n// tslint:disable:no-bitwise\nexport function uuidv4() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n","/*\n * dom.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\n\nexport function bodyElement(view: EditorView): HTMLElement {\n return view.dom.firstChild as HTMLElement;\n}\n\nexport function isElementVisible(el: HTMLElement) {\n return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n}\n\nexport function elementInnerDimensions(el: HTMLElement) {\n const cs = getComputedStyle(el);\n\n const asNumber = (x: string | null) => (x ? parseFloat(x) : 0);\n const paddingX = asNumber(cs.paddingLeft) + asNumber(cs.paddingRight);\n const paddingY = asNumber(cs.paddingTop) + asNumber(cs.paddingBottom);\n const borderX = asNumber(cs.borderLeftWidth) + asNumber(cs.borderRightWidth);\n const borderY = asNumber(cs.borderTopWidth) + asNumber(cs.borderBottomWidth);\n\n return {\n width: el.offsetWidth - paddingX - borderX,\n height: el.offsetHeight - paddingY - borderY,\n };\n}\n\nexport function onElementRemoved(container: Node, el: HTMLElement, onRemoved: VoidFunction) {\n const observer = new MutationObserver(mutationsList => {\n mutationsList.forEach(mutation => {\n mutation.removedNodes.forEach(node => {\n if (node === el) {\n onRemoved();\n }\n });\n });\n });\n observer.observe(container, { attributes: false, childList: true, subtree: true });\n}\n","/*\n * scroll.ts\n *\n * Copyright (C) 2019-20 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\nimport { findParentNodeOfTypeClosestToPos } from 'prosemirror-utils';\n\nimport zenscroll from 'zenscroll';\n\nimport { editingRootNodeClosestToPos, editingRootNode } from './node';\n\nexport function scrollIntoView(\n view: EditorView,\n pos: number,\n center = true,\n duration?: number,\n offset?: number,\n onDone?: VoidFunction,\n) {\n // resolve position and determine container\n const $pos = view.state.doc.resolve(pos);\n const container = editingRootNodeClosestToPos($pos);\n\n // if we have a container then do the scroll\n if (container) {\n const schema = view.state.schema;\n const containerEl = view.nodeDOM(container.pos) as HTMLElement;\n const parentList = findParentNodeOfTypeClosestToPos($pos, [schema.nodes.ordered_list, schema.nodes.bullet_list]);\n const parentDiv = schema.nodes.div ? findParentNodeOfTypeClosestToPos($pos, schema.nodes.div) : undefined;\n const resultPos = parentList || parentDiv ? $pos.before(2) : $pos.before();\n const resultNode = view.nodeDOM(resultPos) as HTMLElement;\n if (container && resultNode) {\n const scroller = zenscroll.createScroller(containerEl, duration, offset);\n if (center) {\n scroller.center(resultNode, duration, offset, onDone);\n } else {\n scroller.intoView(resultNode, duration, onDone);\n }\n }\n }\n}\n\nexport function scrollToPos(view: EditorView, pos: number, duration?: number, offset?: number, onDone?: VoidFunction) {\n const node = view.nodeDOM(pos);\n if (node instanceof HTMLElement) {\n const editingRoot = editingRootNode(view.state.selection)!;\n const container = view.nodeDOM(editingRoot.pos) as HTMLElement;\n const scroller = zenscroll.createScroller(container, duration, offset);\n if (duration) {\n scroller.to(node, duration, onDone);\n } else {\n scroller.to(node, 0, onDone);\n }\n }\n}\n","/*\n * navigation.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\n\nimport { setTextSelection, Predicate, findChildren, findDomRefAtPos } from 'prosemirror-utils';\n\nimport zenscroll from 'zenscroll';\n\nimport { editingRootNode } from './node';\nimport { kNavigationTransaction } from './transaction';\nimport { xrefPosition } from './xref';\n\nexport interface EditorNavigation {\n navigate: (type: NavigationType, location: string, animate?: boolean) => void;\n}\n\nexport enum NavigationType {\n Pos = 'pos',\n Id = 'id',\n Href = 'href',\n Heading = 'heading',\n XRef = 'xref',\n}\n\nexport interface Navigation {\n pos: number;\n prevPos: number;\n}\n\nexport function navigateTo(\n view: EditorView,\n type: NavigationType,\n location: string,\n animate = true,\n): Navigation | null {\n switch (type) {\n case NavigationType.Pos:\n return navigateToPos(view, parseInt(location, 10), animate);\n case NavigationType.Id:\n return navigateToId(view, location, animate);\n case NavigationType.Href:\n return navigateToHref(view, location, animate);\n case NavigationType.Heading:\n return navigateToHeading(view, location, animate);\n case NavigationType.XRef:\n return navigateToXRef(view, location, animate);\n default:\n return null;\n }\n}\n\nexport function navigateToId(view: EditorView, id: string, animate = true): Navigation | null {\n return navigate(view, node => id === node.attrs.navigation_id, animate);\n}\n\nexport function navigateToHref(view: EditorView, href: string, animate = true): Navigation | null {\n return navigate(view, node => node.attrs.id === href, animate);\n}\n\nexport function navigateToHeading(view: EditorView, heading: string, animate = true): Navigation | null {\n return navigate(\n view,\n node => {\n return (\n node.type === view.state.schema.nodes.heading &&\n node.textContent.localeCompare(heading, undefined, { sensitivity: 'accent' }) === 0\n );\n },\n animate,\n );\n}\n\nexport function navigateToXRef(view: EditorView, xref: string, animate = true): Navigation | null {\n const xrefPos = xrefPosition(view.state.doc, xref);\n if (xrefPos !== -1) {\n return navigateToPos(view, xrefPos, animate);\n } else {\n return null;\n }\n}\n\nexport function navigateToPos(view: EditorView, pos: number, animate = true): Navigation | null {\n // get previous position\n const prevPos = view.state.selection.from;\n\n // need to target at least the body\n pos = Math.max(pos, 2);\n\n // set selection\n const tr = view.state.tr;\n setTextSelection(pos)(tr);\n tr.setMeta(kNavigationTransaction, true);\n view.dispatch(tr);\n\n // find a targetable dom node at the position\n const node = findDomRefAtPos(pos, view.domAtPos.bind(view));\n if (node instanceof HTMLElement) {\n // auto-scroll to position (delay so we can grab the focus, as autoscrolling\n // doesn't seem to work unless you have the focus)\n setTimeout(() => {\n view.focus();\n const editingRoot = editingRootNode(view.state.selection)!;\n const container = view.nodeDOM(editingRoot.pos) as HTMLElement;\n const scroller = zenscroll.createScroller(container, 700, 20);\n // some nodes' DOM elements are grandchildren rather than direct children\n // of the scroll container; move up a level if this is the case\n let dest = node;\n if (node.parentElement && \n node.parentElement.parentElement &&\n node.parentElement.parentElement.parentElement === container) {\n dest = node.parentElement;\n }\n if (animate) {\n scroller.to(dest);\n } else {\n scroller.to(dest, 0);\n }\n }, 200);\n\n return { pos, prevPos };\n } else {\n return null;\n }\n}\n\nfunction navigate(view: EditorView, predicate: Predicate, animate = true): Navigation | null {\n const result = findChildren(view.state.doc, predicate);\n if (result.length) {\n // pos points immediately before the node so add 1 to it\n const pos = result[0].pos + 1;\n return navigateToPos(view, pos, animate);\n } else {\n return null;\n }\n}\n","/*\n * xref.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, MarkType } from 'prosemirror-model';\n\nimport { findChildrenByMark } from 'prosemirror-utils';\n\nimport { pandocAutoIdentifier } from './pandoc_id';\nimport { rmdChunkEngineAndLabel } from './rmd';\nimport { kTexFormat } from './raw';\n\nexport interface XRefServer {\n indexForFile: (file: string) => Promise;\n xrefForId: (file: string, id: string) => Promise;\n}\n\nexport interface XRefs {\n baseDir: string;\n refs: XRef[];\n}\n\nexport interface XRef {\n file: string;\n type: string;\n id: string;\n suffix: string;\n title?: string;\n}\n\nexport function xrefKey(xref: XRef) {\n // headings don't include their type in the key\n const key = /^h\\d$/.test(xref.type)\n ? xref.id\n : // no colon if there is no type\n xref.type.length > 0\n ? `${xref.type}:${xref.id}`\n : xref.id;\n\n // return key with suffix\n return key + xref.suffix;\n}\n\nexport function xrefPosition(doc: ProsemirrorNode, xref: string): number {\n // -1 if not found\n let xrefPos = -1;\n\n // get type and id\n const xrefInfo = xrefTypeAndId(xref);\n if (xrefInfo) {\n const { type, id } = xrefInfo;\n const locator = xrefPositionLocators[type];\n if (locator) {\n // if this locator finds by mark then look at doc for marks\n if (locator.markType) {\n const schema = doc.type.schema;\n const markType = schema.marks[locator.markType];\n const markedNodes = findChildrenByMark(doc, markType, true);\n markedNodes.forEach(markedNode => {\n // bail if we already found it\n if (xrefPos !== -1) {\n return false;\n }\n // see if we can locate the xref\n if (locator.hasXRef(markedNode.node, id, markType)) {\n xrefPos = markedNode.pos;\n }\n });\n } \n if (xrefPos === -1 && locator.nodeTypes) {\n // otherwise recursively examine nodes to find the xref\n doc.descendants((node, pos) => {\n // bail if we already found it\n if (xrefPos !== -1) {\n return false;\n }\n // see if we can locate the xref\n if (locator.nodeTypes!.includes(node.type.name) && locator.hasXRef(node, id)) {\n xrefPos = pos;\n return false;\n }\n });\n }\n }\n }\n\n // return the position\n return xrefPos;\n}\n\nfunction xrefTypeAndId(xref: string) {\n const colonPos = xref.indexOf(':');\n if (colonPos !== -1) {\n return {\n type: xref.substring(0, colonPos),\n id: xref.substring(colonPos + 1),\n };\n } else {\n return null;\n }\n}\n\ninterface XRefPositionLocator {\n markType?: string;\n nodeTypes?: string[];\n hasXRef: (node: ProsemirrorNode, id: string, markType?: MarkType) => boolean;\n}\n\nconst xrefPositionLocators: { [key: string]: XRefPositionLocator } = {\n h1: headingLocator(),\n h2: headingLocator(),\n h3: headingLocator(),\n h4: headingLocator(),\n h5: headingLocator(),\n h6: headingLocator(),\n fig: {\n nodeTypes: ['rmd_chunk'],\n hasXRef: (node: ProsemirrorNode, id: string) => rmdChunkHasXRef(node, 'r', id, /^\\{.*[ ,].*fig\\.cap\\s*=.*\\}\\s*\\n/m),\n },\n tab: {\n nodeTypes: ['rmd_chunk', 'table_container'],\n hasXRef: (node: ProsemirrorNode, id: string) => {\n if (node.type.name === 'rmd_chunk') {\n return rmdChunkHasXRef(node, 'r', id, /kable\\s*\\([\\s\\S]*caption/);\n } else if (node.type.name === 'table_container') {\n const caption = node.child(1);\n const match = caption.textContent.match(/^\\s*\\(#tab\\:([a-zA-Z0-9\\/-]+)\\)\\s*(.*)$/);\n return !!match && match[1].localeCompare(id, undefined, { sensitivity: 'accent' }) === 0;\n } else {\n return false;\n }\n },\n },\n eq: {\n nodeTypes: ['raw_block'],\n markType: 'math',\n hasXRef: (node: ProsemirrorNode, id: string, markType?: MarkType) => {\n // if it's not a mark then ensure it is tex format before proceeding\n if (!markType && (node.attrs.format !== kTexFormat)) {\n return false;\n }\n const match = node.textContent.match(/^.*\\(\\\\#eq:([a-zA-Z0-9\\/-]+)\\).*$/m);\n return !!match && match[1].localeCompare(id, undefined, { sensitivity: 'accent' }) === 0;\n },\n },\n thm: thereomLocator('theorem'),\n lem: thereomLocator('lemma'),\n cor: thereomLocator('corollary'),\n prp: thereomLocator('proposition'),\n cnj: thereomLocator('conjecture'),\n def: thereomLocator('definition'),\n exr: thereomLocator('exercise'),\n};\n\nfunction rmdChunkHasXRef(node: ProsemirrorNode, engine: string, label: string, pattern?: RegExp) {\n const chunk = rmdChunkEngineAndLabel(node.textContent);\n const match = node.textContent.match(/^\\{([a-zA-Z0-9_]+)[\\s,]+([a-zA-Z0-9/-]+)/);\n if (chunk) {\n return (\n chunk.engine.localeCompare(engine, undefined, { sensitivity: 'accent' }) === 0 &&\n chunk.label === label &&\n (!pattern || !!node.textContent.match(pattern))\n );\n } else {\n return false;\n }\n}\n\nfunction headingLocator() {\n return {\n nodeTypes: ['heading'],\n hasXRef: (node: ProsemirrorNode, id: string) => {\n // note we use default pandoc auto id semantics here no matter what the documnet\n // happens to use b/c our xref indexing code also does this (so only ids generated\n // using the 'standard' rules will be in the index)\n return node.attrs.id === id || pandocAutoIdentifier(node.textContent, false) === id;\n },\n };\n}\n\nfunction thereomLocator(engine: string) {\n return {\n nodeTypes: ['rmd_chunk'],\n hasXRef: (node: ProsemirrorNode, id: string) => {\n // look for conventional engine/label\n if (rmdChunkHasXRef(node, engine, id)) {\n return true;\n } else {\n // look for explicit label= syntax\n const match = node.textContent.match(/^\\{([a-zA-Z0-9_]+)[\\s,]+label\\s*=\\s*['\"]([^\"']+)['\"].*\\}/);\n return !!match && match[1].localeCompare(engine, undefined, { sensitivity: 'accent' }) === 0 && match[2] === id;\n }\n },\n };\n}\n","/*\n * pandoc_id.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\n// emulate pandoc behavior (https://pandoc.org/MANUAL.html#headings-and-sections)\nexport function pandocAutoIdentifier(text: string, asciify: boolean) {\n if (asciify) {\n text = pandocAsciify(text);\n }\n\n return (\n text\n // Remove all non-alphanumeric characters, except underscores, hyphens, and periods.\n .replace(/[!\"#$%&')*+,\\/:;<=>?@\\[\\\\\\]^`{|}~]/g, '') // filterPunct\n\n // Replace all spaces with hyphens\n .replace(/\\s/g, '-')\n\n // Convert all alphabetic characters to lowercase\n .toLowerCase()\n\n // Remove everything up to the first letter\n .replace(/^[^A-Za-z]+/, '')\n );\n}\n\n// emulate github behavior (note that unemoji should be done prior to calling this)\n// https://pandoc.org/MANUAL.html#extension-gfm_auto_identifiers\n// https://github.com/jgm/pandoc/blob/83880b0dbc318703babfbb6905b1046fa48f1216/src/Text/Pandoc/Shared.hs#L539\nexport function gfmAutoIdentifier(text: string, asciify: boolean) {\n if (asciify) {\n text = pandocAsciify(text);\n }\n\n return text\n .replace(/[!\"#$%&')*+,\\.\\/:;<=>?@\\[\\\\\\]^`{|}~]/g, '') // filterPunct (all but underscore and hyphen)\n .replace(/\\s/g, '-') // spaceToDash\n .toLowerCase(); // toLower\n}\n\n// https://github.com/jgm/pandoc/blob/a5fa55969f1b4afc0ca3e38be50b69c65d43a460/src/Text/Pandoc/Asciify.hs\nexport function pandocAsciify(text: string) {\n const chars: number[] = [];\n const len = text.length;\n let newch;\n for (let i = 0; i < len; i++) {\n newch = '';\n const ch = text.charCodeAt(i);\n switch (ch) {\n case 192:\n case 193:\n case 194:\n case 195:\n case 196:\n case 197:\n case 256:\n case 258:\n case 260:\n case 461:\n case 512:\n case 514:\n case 550:\n case 7680:\n case 7840:\n case 7842:\n newch = 'A';\n break;\n\n case 7682:\n case 7684:\n case 7686:\n newch = 'B';\n break;\n\n case 199:\n case 262:\n case 264:\n case 266:\n case 268:\n newch = 'C';\n break;\n\n case 270:\n case 7690:\n case 7692:\n case 7694:\n case 7696:\n case 7698:\n newch = 'D';\n break;\n\n case 200:\n case 201:\n case 203:\n case 274:\n case 276:\n case 278:\n case 280:\n case 282:\n case 516:\n case 518:\n case 552:\n case 7704:\n case 7706:\n case 7864:\n case 7866:\n case 7868:\n newch = 'E';\n break;\n\n case 7710:\n newch = 'F';\n break;\n\n case 284:\n case 286:\n case 288:\n case 290:\n case 486:\n case 500:\n case 7712:\n newch = 'G';\n break;\n\n case 292:\n case 542:\n case 7714:\n case 7716:\n case 7718:\n case 7720:\n case 7722:\n newch = 'H';\n break;\n\n case 204:\n case 205:\n case 206:\n case 207:\n case 296:\n case 298:\n case 300:\n case 302:\n case 304:\n case 463:\n case 520:\n case 522:\n case 7724:\n case 7880:\n case 7882:\n newch = 'I';\n break;\n\n case 308:\n newch = 'J';\n break;\n\n case 310:\n case 488:\n case 7728:\n case 7730:\n case 7732:\n case 8490:\n newch = 'K';\n break;\n\n case 313:\n case 315:\n case 317:\n case 7734:\n case 7738:\n case 7740:\n newch = 'L';\n break;\n\n case 7742:\n case 7744:\n case 7746:\n newch = 'M';\n break;\n\n case 209:\n case 323:\n case 325:\n case 327:\n case 504:\n case 7748:\n case 7750:\n case 7752:\n case 7754:\n newch = 'N';\n break;\n\n case 210:\n case 211:\n case 212:\n case 213:\n case 214:\n case 332:\n case 334:\n case 336:\n case 416:\n case 465:\n case 490:\n case 524:\n case 526:\n case 558:\n case 7884:\n case 7886:\n newch = 'O';\n break;\n\n case 7764:\n case 7766:\n newch = 'P';\n break;\n\n case 340:\n case 342:\n case 344:\n case 528:\n case 530:\n case 7768:\n case 7770:\n case 7774:\n newch = 'R';\n break;\n\n case 346:\n case 348:\n case 350:\n case 352:\n case 536:\n case 7776:\n case 7778:\n newch = 'S';\n break;\n\n case 354:\n case 356:\n case 538:\n case 7786:\n case 7788:\n case 7790:\n case 7792:\n newch = 'T';\n break;\n\n case 217:\n case 218:\n case 219:\n case 220:\n case 360:\n case 362:\n case 364:\n case 366:\n case 368:\n case 370:\n case 431:\n case 467:\n case 532:\n case 534:\n case 7794:\n case 7796:\n case 7798:\n case 7908:\n case 7910:\n newch = 'U';\n break;\n\n case 7804:\n case 7806:\n newch = 'V';\n break;\n\n case 372:\n case 7808:\n case 7810:\n case 7812:\n case 7814:\n case 7816:\n newch = 'W';\n break;\n\n case 7818:\n case 7820:\n newch = 'X';\n break;\n\n case 221:\n case 374:\n case 376:\n case 562:\n case 7822:\n case 7922:\n case 7924:\n case 7926:\n case 7928:\n newch = 'Y';\n break;\n\n case 377:\n case 379:\n case 381:\n case 7824:\n case 7826:\n case 7828:\n newch = 'Z';\n break;\n\n case 224:\n case 225:\n case 226:\n case 227:\n case 228:\n case 229:\n case 257:\n case 259:\n case 261:\n case 462:\n case 513:\n case 515:\n case 551:\n case 553:\n case 7681:\n case 7841:\n case 7843:\n newch = 'a';\n break;\n\n case 7683:\n case 7685:\n case 7687:\n newch = 'b';\n break;\n\n case 231:\n case 263:\n case 265:\n case 267:\n case 269:\n newch = 'c';\n break;\n\n case 271:\n case 7691:\n case 7693:\n case 7695:\n case 7697:\n case 7699:\n newch = 'd';\n break;\n\n case 232:\n case 233:\n case 234:\n case 235:\n case 275:\n case 277:\n case 279:\n case 281:\n case 283:\n case 517:\n case 519:\n case 7705:\n case 7707:\n case 7865:\n case 7867:\n case 7869:\n newch = 'e';\n break;\n\n case 7711:\n newch = 'f';\n break;\n\n case 285:\n case 287:\n case 289:\n case 291:\n case 487:\n case 501:\n case 7713:\n newch = 'g';\n break;\n\n case 293:\n case 543:\n case 7715:\n case 7717:\n case 7719:\n case 7721:\n case 7723:\n case 7830:\n newch = 'h';\n break;\n\n case 236:\n case 237:\n case 238:\n case 239:\n case 297:\n case 299:\n case 301:\n case 303:\n case 305:\n case 464:\n case 521:\n case 523:\n case 7725:\n case 7881:\n case 7883:\n newch = 'i';\n break;\n\n case 309:\n case 496:\n newch = 'j';\n break;\n\n case 311:\n case 489:\n case 7729:\n case 7731:\n case 7733:\n newch = 'k';\n break;\n\n case 314:\n case 316:\n case 318:\n case 7735:\n case 7739:\n case 7741:\n newch = 'l';\n break;\n\n case 7743:\n case 7745:\n case 7747:\n newch = 'm';\n break;\n\n case 241:\n case 324:\n case 326:\n case 328:\n case 505:\n case 7749:\n case 7751:\n case 7753:\n case 7755:\n newch = 'n';\n break;\n\n case 242:\n case 243:\n case 244:\n case 245:\n case 246:\n case 333:\n case 335:\n case 337:\n case 417:\n case 432:\n case 466:\n case 491:\n case 525:\n case 527:\n case 559:\n case 7885:\n case 7887:\n newch = 'o';\n break;\n\n case 7765:\n case 7767:\n newch = 'p';\n break;\n\n case 341:\n case 343:\n case 345:\n case 529:\n case 531:\n case 7769:\n case 7771:\n case 7775:\n newch = 'r';\n break;\n\n case 347:\n case 349:\n case 351:\n case 353:\n case 537:\n case 7777:\n case 7779:\n newch = 's';\n break;\n\n case 355:\n case 357:\n case 539:\n case 7787:\n case 7789:\n case 7791:\n case 7793:\n case 7831:\n newch = 't';\n break;\n\n case 249:\n case 250:\n case 251:\n case 252:\n case 361:\n case 363:\n case 365:\n case 367:\n case 369:\n case 371:\n case 468:\n case 533:\n case 535:\n case 7795:\n case 7797:\n case 7799:\n case 7909:\n case 7911:\n newch = 'u';\n break;\n\n case 7805:\n case 7807:\n newch = 'v';\n break;\n\n case 373:\n case 7809:\n case 7811:\n case 7813:\n case 7815:\n case 7817:\n case 7832:\n newch = 'w';\n break;\n\n case 7819:\n case 7821:\n newch = 'x';\n break;\n\n case 253:\n case 255:\n case 375:\n case 563:\n case 7833:\n case 7923:\n case 7925:\n case 7927:\n case 7929:\n newch = 'y';\n break;\n\n case 378:\n case 380:\n case 382:\n case 7825:\n case 7827:\n case 7829:\n newch = 'z';\n break;\n\n case 894:\n newch = ';';\n break;\n\n case 8175:\n newch = '`';\n break;\n\n case 8800:\n newch = '=';\n break;\n\n case 8814:\n newch = '<';\n break;\n\n case 8815:\n newch = '>';\n break;\n }\n if (newch) {\n chars.push(newch.charCodeAt(0));\n } else {\n chars.push(ch);\n }\n }\n\n // return string\n return String.fromCharCode(...chars);\n}\n","/*\n * raw.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { Schema } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\n\nimport { findParentNodeOfType, setTextSelection } from 'prosemirror-utils';\n\nimport { EditorUI } from './ui';\nimport { setBlockType } from 'prosemirror-commands';\n\nexport const kTexFormat = 'tex';\nexport const kHTMLFormat = 'html';\nexport const kHTML4Format = 'html4';\nexport const kHTML5Format = 'html5';\n\nexport function isRawHTMLFormat(format: string) {\n return [kHTMLFormat, kHTML4Format, kHTML5Format].includes(format);\n}\n\nexport function editRawBlockCommand(ui: EditorUI, outputFormats: string[]) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const schema = state.schema;\n\n // enable if we are either inside a raw block or we can insert a raw block\n const rawBlock = findParentNodeOfType(schema.nodes.raw_block)(state.selection);\n\n if (!rawBlock && !setBlockType(schema.nodes.raw_block, { format: 'html' })(state)) {\n return false;\n }\n\n async function asyncEditRawBlock() {\n if (dispatch) {\n // get existing attributes (if any)\n const raw = {\n format: '',\n content: '',\n };\n if (rawBlock) {\n raw.format = rawBlock.node.attrs.format;\n }\n\n // show dialog\n const result = await ui.dialogs.editRawBlock(raw, outputFormats);\n if (result) {\n const tr = state.tr;\n\n // remove means convert the block to text\n if (rawBlock) {\n const range = { from: rawBlock.pos, to: rawBlock.pos + rawBlock.node.nodeSize };\n if (result.action === 'remove') {\n tr.setBlockType(range.from, range.to, schema.nodes.paragraph);\n } else if (result.action === 'edit') {\n tr.setNodeMarkup(range.from, rawBlock.node.type, { format: result.raw.format });\n setTextSelection(tr.selection.from - 1, -1)(tr);\n }\n } else {\n insertRawNode(tr, result.raw.format);\n }\n\n dispatch(tr);\n }\n }\n\n if (view) {\n view.focus();\n }\n }\n asyncEditRawBlock();\n\n return true;\n };\n}\n\n// function to create a raw node\nfunction createRawNode(schema: Schema, format: string) {\n return schema.nodes.raw_block.create({ format })!;\n}\n\n// function to create and insert a raw node, then set selection inside of it\nfunction insertRawNode(tr: Transaction, format: string) {\n const schema = tr.doc.type.schema;\n const prevSel = tr.selection;\n tr.replaceSelectionWith(createRawNode(schema, format), false);\n setTextSelection(tr.mapping.map(prevSel.from), -1)(tr);\n}\n","/*\n * image.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { kPixelUnit, kPercentUnit } from './css';\n\nconst kDpi = 96;\n\n// https://github.com/jgm/pandoc/blob/master/src/Text/Pandoc/ImageSize.hs\nexport const kValidUnits = [kPixelUnit, 'in', 'cm', 'mm', kPercentUnit];\n\nexport enum ImageType {\n Image,\n Figure,\n}\n\nexport interface ImageDimensions {\n naturalWidth: number | null;\n naturalHeight: number | null;\n containerWidth: number;\n}\n\nexport function isValidImageSizeUnit(unit: string) {\n return kValidUnits.includes(unit);\n}\n\nexport function imageSizePropWithUnit(prop: string | null) {\n if (prop) {\n const match = prop.match(/(^\\d*\\.?\\d*)(.*)$/);\n if (match) {\n return {\n size: parseFloat(match[1]),\n unit: match[2],\n };\n } else {\n return null;\n }\n } else {\n return null;\n }\n}\n\nexport function isNaturalAspectRatio(width: number, height: number, dims: ImageDimensions, defaultValue: boolean) {\n if (dims.naturalWidth && dims.naturalHeight) {\n const diff = Math.abs(width / height - dims.naturalWidth / dims.naturalHeight);\n return diff <= 0.01 * (width / height);\n } else {\n // no naturalWidth or naturalHeight, return default\n return defaultValue;\n }\n}\n\nexport function unitToPixels(value: number, unit: string, containerWidth: number) {\n let pixels;\n switch (unit) {\n case 'in':\n pixels = value * kDpi;\n break;\n case 'mm':\n pixels = value * (kDpi / 25.4);\n break;\n case 'cm':\n pixels = value * (kDpi / 2.54);\n break;\n case kPercentUnit:\n pixels = (value / 100) * ensureContainerWidth(containerWidth);\n break;\n case kPixelUnit:\n default:\n pixels = value;\n break;\n }\n return Math.round(pixels);\n}\n\nexport function pixelsToUnit(pixels: number, unit: string, containerWidth: number) {\n switch (unit) {\n case 'in':\n return pixels / kDpi;\n case 'mm':\n return (pixels / kDpi) * 25.4;\n case 'cm':\n return (pixels / kDpi) * 2.54;\n case kPercentUnit:\n return (pixels / ensureContainerWidth(containerWidth)) * 100;\n case kPixelUnit:\n default:\n return pixels;\n }\n}\n\nexport function roundUnit(value: number, unit: string) {\n switch (unit) {\n case 'in':\n return value.toFixed(2);\n case 'cm':\n return value.toFixed(1);\n default:\n return Math.round(value).toString();\n }\n}\n\n// sometime when we are called before the DOM renders the containerWidth\n// is 0, in this case provide a default of 1000\nexport function ensureContainerWidth(containerWidth: number) {\n return containerWidth || 1000;\n}\n","/*\n * extension.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Transaction } from 'prosemirror-state';\n\nexport enum FixupContext {\n Load,\n Save,\n Resize,\n}\n\nexport type FixupFn = (tr: Transaction, fixupContext: FixupContext) => Transaction;\n","/*\n * css.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { kWidthAttrib, kHeightAttrib, kStyleAttrib } from './pandoc_attr';\n\nexport const kPercentUnit = '%';\nexport const kPixelUnit = 'px';\nexport function removeStyleAttrib(style: string, attrib: string, handler?: (attrib: string, value: string) => void) {\n const pattern = '(' + attrib + ')\\\\:\\\\s*([^;]+);?';\n const regex = new RegExp(pattern, 'g');\n return style.replace(regex, (_match, p1, p2) => {\n if (handler) {\n handler(p1, p2);\n }\n return '';\n });\n}\n\nexport function extractSizeStyles(keyvalues: Array<[string, string]> | undefined) {\n if (!keyvalues) {\n return keyvalues;\n }\n\n let newKeyvalues = keyvalues;\n\n const getValue = (key: string) => {\n const pair = newKeyvalues.find(keyvalue => keyvalue[0] === key);\n return pair ? pair[1] : null;\n };\n\n const setValue = (key: string, value: string | null) => {\n newKeyvalues = newKeyvalues.filter(keyvalue => keyvalue[0] !== key);\n if (value) {\n newKeyvalues.push([key, value]);\n }\n };\n\n let width = getValue(kWidthAttrib);\n let height = getValue(kHeightAttrib);\n let style = getValue(kStyleAttrib);\n\n if (style) {\n style = removeStyleAttrib(style, kWidthAttrib, (_attrib, value) => {\n if (!width) {\n width = value;\n }\n });\n style = removeStyleAttrib(style, kHeightAttrib, (_attrib, value) => {\n if (!height) {\n height = value;\n }\n });\n\n // remove leading ; from style\n style = style.replace(/^\\s*;+\\s*/, '').trimLeft();\n }\n\n setValue(kWidthAttrib, width);\n setValue(kHeightAttrib, height);\n setValue(kStyleAttrib, style);\n\n return newKeyvalues;\n}\n\nexport function applyStyles(el: HTMLElement, classes?: string[], style?: { [key: string]: string }) {\n if (classes) {\n if (classes) {\n classes.forEach(clz => el.classList.add(clz));\n }\n }\n if (style) {\n Object.keys(style).forEach(name => {\n el.style.setProperty(name, style[name]);\n });\n }\n}\n\nexport function replaceClassWithStyle(el: HTMLElement, className: string, style: { [key: string]: string }) {\n if (el.classList.contains(className)) {\n el.classList.remove(className);\n if (el.classList.length === 0) {\n el.removeAttribute('class');\n }\n\n Object.keys(style).forEach(name => {\n el.style.setProperty(name, style[name]);\n });\n }\n const children: any = el.children;\n for (const child of children) {\n replaceClassWithStyle(child, className, style);\n }\n}\n","/*\n * diff.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { diff_match_patch, DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT } from 'diff-match-patch';\n\nexport enum EditorChangeType {\n Insert = 1,\n Equal = 0,\n Delete = -1,\n}\n\nexport interface EditorChange {\n type: EditorChangeType;\n value: string;\n}\n\nexport function diffChars(from: string, to: string, timeout: number): EditorChange[] {\n const dmp = new diff_match_patch();\n dmp.Diff_Timeout = timeout;\n const diff = dmp.diff_main(from, to);\n dmp.diff_cleanupSemantic(diff);\n return diff.map(d => {\n let type: EditorChangeType;\n switch (d[0]) {\n case DIFF_INSERT:\n type = EditorChangeType.Insert;\n break;\n case DIFF_EQUAL:\n type = EditorChangeType.Equal;\n break;\n case DIFF_DELETE:\n type = EditorChangeType.Delete;\n break;\n default:\n throw new Error('Unexpected diff type: ' + d[0]);\n }\n return {\n type,\n value: d[1],\n };\n });\n}\n","/*\n * input_rule.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { Schema, MarkType, NodeType, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { InputRule, wrappingInputRule } from 'prosemirror-inputrules';\n\nimport { PandocMark, markIsActive } from './mark';\n\nexport function markInputRule(\n regexp: RegExp,\n markType: MarkType,\n filter: MarkInputRuleFilter,\n getAttrs?: ((match: string[]) => object) | object,\n) {\n return new InputRule(regexp, (state: EditorState, match: string[], start: number, end: number) => {\n if (!filter(state, start, end)) {\n return null;\n }\n\n const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n const tr = state.tr;\n if (match[1]) {\n const textStart = start + match[0].indexOf(match[1]);\n const textEnd = textStart + match[1].length;\n if (textEnd < end) {\n tr.delete(textEnd, end);\n }\n if (textStart > start) {\n tr.delete(start, textStart);\n }\n end = start + match[1].length;\n }\n const mark = markType.create(attrs);\n tr.addMark(start, end, mark);\n tr.removeStoredMark(mark); // Do not continue with mark.\n return tr;\n });\n}\n\nexport function delimiterMarkInputRule(\n delim: string,\n markType: MarkType,\n filter: MarkInputRuleFilter,\n prefixMask?: string,\n noEnclosingWhitespace?: boolean,\n) {\n // create distinct patterns depending on whether we allow enclosing whitespace\n const contentPattern = noEnclosingWhitespace\n ? `[^\\\\s${delim}][^${delim}]+[^\\\\s${delim}]|[^\\\\s${delim}]{1,2}`\n : `[^${delim}]+`;\n\n // if there is no prefix mask then this is simple regex we can pass to markInputRule\n if (!prefixMask) {\n const regexp = `(?:${delim})(${contentPattern})(?:${delim})$`;\n return markInputRule(new RegExp(regexp), markType, filter);\n\n // otherwise we need custom logic to get mark placement/eliding right\n } else {\n // build regex\n const regexp = `(^|[^${prefixMask}])(?:${delim})(${contentPattern})(?:${delim})$`;\n\n // return rule\n return new InputRule(new RegExp(regexp), (state: EditorState, match: string[], start: number, end: number) => {\n if (!filter(state, start, end)) {\n return null;\n }\n\n // init transaction\n const tr = state.tr;\n\n // compute offset for mask (should be zero if this was the beginning of a line,\n // in all other cases it would be the length of the any mask found).\n const maskOffset = match[1].length;\n\n // position of text to be formatted\n const textStart = start + match[0].indexOf(match[2]);\n const textEnd = textStart + match[2].length;\n\n // remove trailing markdown\n tr.delete(textEnd, end);\n\n // update start/end to reflect the leading mask which we want to leave alone\n start = start + maskOffset;\n end = start + match[2].length;\n\n // remove leading markdown\n tr.delete(start, textStart);\n\n // add mark\n const mark = markType.create();\n tr.addMark(start, end, mark);\n\n // remove stored mark so typing continues w/o the mark\n tr.removeStoredMark(mark);\n\n // return transaction\n return tr;\n });\n }\n}\n\nexport type MarkInputRuleFilter = (context: EditorState | Transaction, from?: number, to?: number) => boolean;\n\nexport function markInputRuleFilter(schema: Schema, marks: readonly PandocMark[]): MarkInputRuleFilter {\n const maskedMarkTypes = marksWithNoInputRules(schema, marks);\n\n return (context: EditorState | Transaction, from?: number, to?: number) => {\n if (from !== undefined && to !== undefined && from !== to) {\n const marksInRange: MarkType[] = [];\n context.doc.nodesBetween(from, to, node => {\n node.marks.forEach(mark => marksInRange.push(mark.type));\n });\n return !marksInRange.some(markType => maskedMarkTypes.includes(markType));\n }\n if (from === undefined) {\n for (const markType of maskedMarkTypes) {\n if (markIsActive(context, markType)) {\n return false;\n }\n }\n }\n return true;\n };\n}\n\nexport function conditionalWrappingInputRule(\n regexp: RegExp,\n nodeType: NodeType,\n predicate: (state: EditorState) => boolean,\n getAttrs?: { [key: string]: any } | ((p: string[]) => { [key: string]: any } | null | undefined),\n joinPredicate?: (p1: string[], p2: ProsemirrorNode) => boolean,\n): InputRule {\n const wrappingRule: any = wrappingInputRule(regexp, nodeType, getAttrs, joinPredicate);\n return new InputRule(regexp, (state: EditorState, match: string[], start: number, end: number) => {\n if (!predicate(state)) {\n return null;\n }\n return wrappingRule.handler(state, match, start, end);\n });\n}\n\nfunction marksWithNoInputRules(schema: Schema, marks: readonly PandocMark[]): MarkType[] {\n const disabledMarks: MarkType[] = [];\n marks.forEach((mark: PandocMark) => {\n if (mark.noInputRules) {\n disabledMarks.push(schema.marks[mark.name]);\n }\n });\n return disabledMarks;\n}\n","/*\n * wrap.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Transaction } from 'prosemirror-state';\nimport { Transform } from 'prosemirror-transform';\n\nimport { split } from 'sentence-splitter';\n\nimport { trTransform } from './transaction';\nimport { findChildrenByType, findParentNodeOfTypeClosestToPos } from 'prosemirror-utils';\n\nexport function wrapSentences(tr: Transaction) {\n trTransform(tr, wrapSentencesTransform);\n}\n\nfunction wrapSentencesTransform(tr: Transform) {\n // find all paragraphs in doc\n const schema = tr.doc.type.schema;\n const paragraphs = findChildrenByType(tr.doc, schema.nodes.paragraph);\n\n // insert linebreaks in paragraphs (go backwards to preserve positions)\n paragraphs.reverse().forEach(paragraph => {\n // don't break sentences inside tight list items\n const $pos = tr.doc.resolve(paragraph.pos);\n const parent = $pos.node($pos.depth);\n if (parent.type === schema.nodes.list_item && $pos.node($pos.depth - 1).attrs.tight) {\n return;\n }\n\n // don't break sentences inside tables\n if (schema.nodes.table && findParentNodeOfTypeClosestToPos($pos, schema.nodes.table)) {\n return;\n }\n\n // don't break bookdown text references\n const textContent = paragraph.node.textContent;\n if (/^\\(ref\\:[^\\s]+\\)\\s+[^\\s]/.test(textContent)) {\n return;\n }\n\n // break sentences in text\n const parts = split(textContent);\n parts\n .reverse()\n .filter(part => part.type === 'Sentence')\n .forEach(sentence => {\n // don't break sentence if at least one mark is active\n if (tr.doc.resolve(paragraph.pos + sentence.range[1] + 1).marks().length === 0) {\n const hardBreak = schema.text('\\n');\n const hardBreakPos = paragraph.pos + sentence.range[1] + 2;\n tr.insert(hardBreakPos, hardBreak);\n }\n });\n });\n}\n","/*\n * yaml_metadata-title.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Plugin, PluginKey, Transaction, EditorState } from 'prosemirror-state';\n\nimport { transactionsAreTypingChange, transactionsHaveChange } from '../../api/transaction';\nimport {\n isYamlMetadataNode,\n yamlMetadataNodes,\n kYamlMetadataTitleRegex,\n titleFromYamlMetadataNode,\n} from '../../api/yaml';\n\nconst plugin = new PluginKey('yaml-metadata-title');\n\nexport function yamlMetadataTitlePlugin() {\n return new Plugin({\n key: plugin,\n state: {\n init(_config, state: EditorState) {\n return titleFromState(state);\n },\n\n apply(tr: Transaction, title: string, oldState: EditorState, newState: EditorState) {\n const transactions = [tr];\n\n // doc didn't change, return existing title\n if (!tr.docChanged) {\n return title;\n\n // non-typing change, do a full rescan\n } else if (!transactionsAreTypingChange(transactions)) {\n return titleFromState(newState);\n\n // change that affects a yaml metadata block, do a full rescan\n } else if (transactionsHaveChange(transactions, oldState, newState, isYamlMetadataNode)) {\n return titleFromState(newState);\n }\n\n // otherwise return the existing title\n else {\n return title;\n }\n },\n },\n });\n}\n\nexport function getTitle(state: EditorState) {\n return plugin.getState(state);\n}\n\nexport function setTitle(state: EditorState, title: string) {\n // alias schema\n const schema = state.schema;\n\n // no-op if yaml_metadata isn't available\n if (!schema.nodes.yaml_metadata) {\n return;\n }\n\n // create transaction\n const tr = state.tr;\n\n // escape quotes in title then build the title line\n const escapedTitle = title.replace(/\"/g, `\\\\\"`);\n const titleLine = `\\ntitle: \"${escapedTitle}\"\\n`;\n\n // attempt to update existing title\n const yamlNodes = yamlMetadataNodes(tr.doc);\n let foundTitle = false;\n for (const yaml of yamlNodes) {\n const titleMatch = yaml.node.textContent.match(kYamlMetadataTitleRegex);\n if (titleMatch) {\n const updatedMetadata = yaml.node.textContent.replace(kYamlMetadataTitleRegex, titleLine);\n const updatedNode = schema.nodes.yaml_metadata.createAndFill({}, schema.text(updatedMetadata));\n tr.replaceRangeWith(yaml.pos, yaml.pos + yaml.node.nodeSize, updatedNode);\n foundTitle = true;\n break;\n }\n }\n\n // if we didn't find a title then inject one at the top\n if (!foundTitle) {\n const yamlText = schema.text(`---${titleLine}---`);\n const yamlNode = schema.nodes.yaml_metadata.create({}, yamlText);\n tr.insert(1, yamlNode);\n }\n\n // return transaction\n return tr;\n}\n\nfunction titleFromState(state: EditorState) {\n const yamlNodes = yamlMetadataNodes(state.doc);\n for (const yaml of yamlNodes) {\n const title = titleFromYamlMetadataNode(yaml.node);\n if (title) {\n return title;\n }\n }\n return '';\n}\n","/*\n * oultine.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Plugin, PluginKey, EditorState, Transaction } from 'prosemirror-state';\nimport { Schema, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\n\nimport { NodeWithPos } from 'prosemirror-utils';\n\nimport { Extension } from '../api/extension';\nimport { transactionsHaveChange, kSetMarkdownTransaction } from '../api/transaction';\nimport { findTopLevelBodyNodes } from '../api/node';\nimport { uuidv4 } from '../api/util';\nimport {\n EditorOutlineItem,\n EditorOutlineItemType,\n EditorOutline,\n isOutlineNode,\n getEditingOutlineLocation,\n getDocumentOutline,\n} from '../api/outline';\nimport { navigateToPos } from '../api/navigation';\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\nimport { rmdChunkEngineAndLabel } from '../api/rmd';\n\nconst kOutlineIdsTransaction = 'OutlineIds';\n\nconst plugin = new PluginKey('outline');\n\nconst extension: Extension = {\n appendTransaction: (schema: Schema) => {\n return [\n {\n name: 'outline',\n filter: hasOutlineIdsTransaction,\n nodeFilter: isOutlineNode,\n append: (tr: Transaction) => {\n const usedIds = new Set();\n const needsOutlineId = (node: ProsemirrorNode) => {\n if (isOutlineNode(node)) {\n if (node.attrs.navigation_id === null) {\n return true;\n } else if (usedIds.has(node.attrs.navigation_id)) {\n return true;\n } else {\n usedIds.add(node.attrs.navigation_id);\n return false;\n }\n } else {\n return false;\n }\n };\n const needsOutlineIdNodes = findTopLevelBodyNodes(tr.doc, needsOutlineId);\n needsOutlineIdNodes.forEach(outlineId => {\n tr.setNodeMarkup(outlineId.pos, outlineId.node.type, {\n ...outlineId.node.attrs,\n navigation_id: uuidv4(),\n });\n tr.setMeta(kOutlineIdsTransaction, true);\n });\n },\n },\n ];\n },\n\n commands: () => {\n return [\n new ProsemirrorCommand(EditorCommandId.GoToNextSection, ['Mod-PageDown'], goToOutlineCommand('next', 'section')),\n new ProsemirrorCommand(EditorCommandId.GoToPreviousSection, ['Mod-PageUp'], goToOutlineCommand('previous', 'section')),\n new ProsemirrorCommand(EditorCommandId.GoToNextChunk, [], goToOutlineCommand('next', 'chunk')),\n new ProsemirrorCommand(EditorCommandId.GoToPreviousChunk, [], goToOutlineCommand('previous', 'chunk')),\n ];\n },\n\n plugins: (schema: Schema) => {\n return [\n new Plugin({\n key: plugin,\n\n // track editor outline as state changes\n state: {\n init: (_config, state: EditorState) => {\n return editorOutline(state);\n },\n apply: (tr: Transaction, value: EditorOutline, oldState: EditorState, newState: EditorState) => {\n if (transactionsAffectOutline([tr], oldState, newState)) {\n return editorOutline(newState);\n } else {\n return value; // don't need to map b/c there are no positions in the data structure\n }\n },\n },\n }),\n ];\n },\n};\n\nexport function goToOutlineCommand(dir: 'next' | 'previous', targetType: 'chunk' | 'section') {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n if (dispatch && view) {\n let outline = getDocumentOutline(state);\n if (dir === 'previous') {\n outline = outline.reverse();\n }\n const target = outline.find(nodeWithPos => {\n // if we are only targeting chunks, do not navigate to other types, and vice versa\n let isChunk = nodeWithPos.node.type === state.schema.nodes.rmd_chunk;\n if (isChunk !== (targetType === 'chunk')) {\n return false;\n }\n\n if (dir === 'next') {\n return nodeWithPos.pos > state.selection.head;\n } else {\n return nodeWithPos.pos < state.selection.head - 1;\n }\n });\n if (target) {\n navigateToPos(view, target.pos, false);\n }\n }\n return true;\n };\n}\n\nfunction editorOutline(state: EditorState): EditorOutline {\n // get all of the headings (bail if there are none)\n const doc = state.doc;\n const outlineNodes = findTopLevelBodyNodes(doc, isOutlineNode);\n if (!outlineNodes.length) {\n return [];\n }\n\n // create mapping of node type names to their current sequence\n const sequence = new Map();\n\n // function to create an outline item from a node\n const editorOutlineItem = (nodeWithPos: NodeWithPos, defaultLevel: number) => {\n const typename = nodeWithPos.node.type.name;\n\n // build sequence (ordinal of entry within node type)\n let sequenceLast = sequence.get(typename);\n if (sequenceLast === undefined) {\n sequenceLast = 0;\n }\n const sequenceNext = sequenceLast + 1;\n sequence.set(typename, sequenceNext);\n\n const item = {\n navigation_id: nodeWithPos.node.attrs.navigation_id,\n type: nodeWithPos.node.type.name as EditorOutlineItemType,\n level: nodeWithPos.node.attrs.level || defaultLevel,\n title: nodeWithPos.node.type.spec.code ? nodeWithPos.node.type.name : nodeWithPos.node.textContent,\n sequence: sequenceNext,\n children: [],\n };\n \n // if this is an R Markdown chunk, extract the title from the chunk\n if (nodeWithPos.node.type.name === 'rmd_chunk') {\n const chunk = rmdChunkEngineAndLabel(nodeWithPos.node.textContent);\n if (chunk) {\n item.title = chunk.label;\n }\n }\n return item; \n };\n\n // extract the outline\n const rootOutlineItem: EditorOutlineItem = {\n navigation_id: '',\n type: '' as EditorOutlineItemType,\n level: 0,\n sequence: 0,\n title: '',\n children: [],\n };\n const containers: EditorOutlineItem[] = [];\n containers.push(rootOutlineItem);\n const top = () => containers[containers.length - 1];\n outlineNodes.forEach(nodeWithPos => {\n // get outline item from document node\n const outlineItem = editorOutlineItem(nodeWithPos, top().level + 1);\n\n // pop containers until we reach <= our level\n while (outlineItem.level <= top().level) {\n containers.pop();\n }\n\n // add the outline node\n top().children.push(outlineItem);\n\n // make it the the active container if it's a heading\n if (outlineItem.type === 'heading') {\n containers.push(outlineItem);\n }\n });\n\n // return children of root\n return rootOutlineItem.children;\n}\n\nfunction hasOutlineIdsTransaction(transactions: Transaction[]) {\n return transactions.some(tr => tr.getMeta(kOutlineIdsTransaction));\n}\n\nfunction transactionsAffectOutline(transactions: Transaction[], oldState: EditorState, newState: EditorState) {\n return (\n transactions.some(tr => tr.getMeta(kSetMarkdownTransaction)) ||\n hasOutlineIdsTransaction(transactions) ||\n transactionsHaveChange(transactions, oldState, newState, isOutlineNode)\n );\n}\n\nexport function getOutline(state: EditorState): EditorOutline {\n return plugin.getState(state)!;\n}\n\nexport default extension;\n","/*\n * find.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Extension } from '../api/extension';\nimport { Plugin, PluginKey, EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { DecorationSet, Decoration, EditorView } from 'prosemirror-view';\n\nimport { mergedTextNodes } from '../api/text';\nimport { kAddToHistoryTransaction } from '../api/transaction';\nimport { editingRootNode } from '../api/node';\nimport zenscroll from 'zenscroll';\n\nconst key = new PluginKey('find-plugin');\n\nclass FindPlugin extends Plugin {\n private term: string = '';\n private options: FindOptions = {};\n private updating: boolean = false;\n\n // The HTML element containing the last known selected search result\n private resultElement: HTMLElement|null = null;\n\n // A DOM mutation observer that watches for search results to be rendered\n private resultObserver: MutationObserver|null = null;\n\n // The ID for a timer that ensures the resultObserver completes quickly\n private resultObserverTimer: number = 0;\n\n constructor() {\n super({\n key,\n state: {\n init: (_config: { [key: string]: any }, instance: EditorState) => {\n return DecorationSet.empty;\n },\n apply: (tr: Transaction, old: DecorationSet, oldState: EditorState, newState: EditorState) => {\n if (this.updating) {\n return this.resultDecorations(tr);\n } else {\n return DecorationSet.empty;\n }\n },\n },\n view: () => ({\n update: (view: EditorView, prevState: EditorState) => {\n // Clear any previous search result observer\n this.clearResultObserver();\n\n // If there is a search result selected, navigate to it\n if (this.isResultSelected(view.state)) {\n this.scrollToSelectedResult(view, null);\n }\n },\n }),\n props: {\n decorations: (state: EditorState) => {\n return key.getState(state);\n },\n },\n });\n }\n\n public find(term: string, options: FindOptions) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (dispatch) {\n this.term = !options.regex ? term.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, (escape: string) => {\n return '\\\\u' + ('0000' + escape.charCodeAt(0).toString(16)).slice(-4);\n }) : term;\n this.options = options;\n this.updateResults(state, dispatch);\n }\n return true;\n };\n }\n\n public matchCount(state: EditorState) {\n return key.getState(state)!.find().length;\n }\n\n public selectFirst() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n const decorations: Decoration[] = key.getState(state)!.find(0);\n if (decorations.length === 0) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n this.selectResult(tr, decorations[0]);\n this.withResultUpdates(() => {\n dispatch(tr);\n });\n }\n\n return true;\n };\n }\n\n public selectCurrent() {\n return this.selectNext(false);\n }\n\n public selectNext(afterSelection = true) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n const selectedText = state.doc.textBetween(state.selection.from, state.selection.to);\n const searchFrom = afterSelection\n ? this.matchesTerm(selectedText)\n ? state.selection.to + 1\n : state.selection.to\n : state.selection.from;\n\n const decorationSet = key.getState(state)!;\n let decorations: Decoration[] = decorationSet.find(searchFrom);\n if (decorations.length === 0) {\n // check for wrapping\n if (this.options.wrap) {\n const searchTo = this.matchesTerm(selectedText) ? state.selection.from - 1 : state.selection.from;\n decorations = decorationSet.find(0, searchTo);\n if (decorations.length === 0) {\n return false;\n }\n // no wrapping\n } else {\n return false;\n }\n }\n\n if (dispatch) {\n const tr = state.tr;\n this.selectResult(tr, decorations[0]);\n this.withResultUpdates(() => {\n dispatch(tr);\n });\n }\n return true;\n };\n }\n\n public selectPrevious() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // sort out where we are searching up to\n const selectedText = state.doc.textBetween(state.selection.from, state.selection.to);\n const searchTo = this.matchesTerm(selectedText) ? state.selection.from - 1 : state.selection.from;\n\n // get all decorations up to the current selection\n const decorationSet = key.getState(state)!;\n let decorations: Decoration[] = decorationSet.find(0, searchTo);\n if (decorations.length === 0) {\n // handle wrapping\n if (this.options.wrap) {\n const searchFrom = this.matchesTerm(selectedText) ? state.selection.to + 1 : state.selection.to;\n decorations = decorationSet.find(searchFrom);\n if (decorations.length === 0) {\n return false;\n }\n // no wrapping\n } else {\n return false;\n }\n }\n\n // find the one closest to the beginning of the current selection\n if (dispatch) {\n // now we need to find the decoration with the largest from value\n const decoration = decorations.reduce((lastDecoration, nextDecoration) => {\n if (nextDecoration.from > lastDecoration.from) {\n return nextDecoration;\n } else {\n return lastDecoration;\n }\n });\n\n const tr = state.tr;\n this.selectResult(tr, decoration);\n this.withResultUpdates(() => {\n dispatch(tr);\n });\n }\n return true;\n };\n }\n\n public replace(text: string) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (!this.isResultSelected(state)) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n const selectionMarks = tr.selection.$from.marksAcross(tr.selection.$to);\n tr.replaceSelectionWith(state.schema.text(text, selectionMarks), false);\n this.withResultUpdates(() => {\n dispatch(tr);\n });\n }\n\n return true;\n };\n }\n\n public replaceAll(text: string) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n \n let replaced = 0;\n\n if (!this.hasTerm()) {\n return replaced;\n }\n\n if (dispatch) {\n const tr = state.tr;\n\n const decorationSet = key.getState(state)!;\n\n const decorations: Decoration[] = decorationSet.find(0);\n decorations.forEach(decoration => {\n const from = tr.mapping.map(decoration.from);\n const to = tr.mapping.map(decoration.to);\n tr.insertText(text, from, to);\n replaced += 1;\n });\n this.withResultUpdates(() => {\n dispatch(tr);\n });\n }\n\n return replaced;\n };\n }\n\n public clear() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (dispatch) {\n this.term = '';\n this.options = {};\n this.updateResults(state, dispatch);\n }\n return true;\n };\n }\n\n private updateResults(state: EditorState, dispatch: (tr: Transaction) => void) {\n this.withResultUpdates(() => {\n const tr = state.tr;\n tr.setMeta(kAddToHistoryTransaction, false);\n dispatch(tr);\n });\n }\n\n private resultDecorations(tr: Transaction): DecorationSet {\n // bail if no search term\n if (!this.hasTerm()) {\n return DecorationSet.empty;\n }\n\n // decorations to return\n const decorations: Decoration[] = [];\n\n // merge text nodes\n const textNodes = mergedTextNodes(tr.doc);\n\n textNodes.forEach(textNode => {\n const search = this.findRegEx();\n if (!search) {\n return;\n }\n\n let m;\n // tslint:disable-next-line no-conditional-assignment\n while ((m = search.exec(textNode.text))) {\n if (m[0] === '') {\n break;\n }\n const from = textNode.pos + m.index;\n const to = textNode.pos + m.index + m[0].length;\n const classes = ['pm-find-text'];\n if (from === tr.selection.from && to === tr.selection.to) {\n classes.push('pm-selected-text');\n }\n decorations.push(Decoration.inline(from, to, { class: classes.join(' ') }));\n }\n });\n\n // return as decoration set\n return decorations.length ? DecorationSet.create(tr.doc, decorations) : DecorationSet.empty;\n }\n\n private withResultUpdates(f: () => void) {\n this.updating = true;\n f();\n this.updating = false;\n }\n\n private selectResult(tr: Transaction, decoration: Decoration) {\n const selection = new TextSelection(tr.doc.resolve(decoration.from), tr.doc.resolve(decoration.to));\n return tr.setSelection(selection).scrollIntoView();\n }\n\n private isResultSelected(state: EditorState) {\n if (this.hasTerm()) {\n const selectedText = state.doc.textBetween(state.selection.from, state.selection.to);\n return this.matchesTerm(selectedText);\n } else {\n return false;\n }\n }\n\n /**\n * Watch for a search result to appear in the DOM. When it does, scroll it\n * into view.\n * \n * @param view The current EditorView \n */\n private watchForSelectedResult(view: EditorView) {\n // Clear any previous result observer\n this.clearResultObserver();\n\n // Create a new result observer to watch for results to be rendered\n this.resultObserver = new MutationObserver((records: MutationRecord[], observer: MutationObserver) => {\n let resultElement:HTMLElement|null = null;\n\n // Predicate for testing a node to see if it looks like the active search result\n const isResultNode = (node: Node): boolean => {\n if (node.nodeType !== node.ELEMENT_NODE) {\n return false;\n }\n const ele = node as HTMLElement;\n return ele.classList.contains('pm-find-text') && \n ele.classList.contains('pm-selected-text');\n };\n\n // Examine each mutation record to see if it's the one we're looking for\n records.forEach((mutation) => {\n switch(mutation.type) {\n case 'childList':\n // Case 1: a new search result node was added to the DOM\n mutation.addedNodes.forEach((node) => {\n if (isResultNode(node)) {\n resultElement = node as HTMLElement;\n }\n });\n break;\n case 'attributes':\n // Case 2: an existing node gained a \"class\" attribute and is now an\n // active search result\n if (isResultNode(mutation.target)) {\n resultElement = mutation.target as HTMLElement;\n }\n break;\n }\n });\n\n // If we found a result element, scroll it into view and turn off the DOM\n // observer. (If we didn't find one, it may be an irrelevant DOM mutation,\n // so ignore it.)\n if (resultElement) {\n this.scrollToSelectedResult(view, resultElement);\n this.clearResultObserver();\n }\n });\n\n const editingRoot = editingRootNode(view.state.selection);\n if (editingRoot) {\n const container = view.nodeDOM(editingRoot.pos) as HTMLElement;\n\n // Begin observing the editing surface for DOM mutations\n this.resultObserver.observe(container, {\n subtree: true,\n childList: true,\n attributeFilter: ['class'] // Only interested in changes to the \"class\" attribute\n });\n\n // The search results should appear quickly (we're really just waiting for\n // a render loop). If the observer runs for longer than 1s, just cancel\n // it, as it consumes resources and anything observed is likely to be\n // spurious.\n this.resultObserverTimer = window.setTimeout(() => {\n this.clearResultObserver();\n }, 1000);\n }\n }\n\n /**\n * Cleans all state related to the search result DOM observer\n */\n private clearResultObserver() {\n // Disconnect the result observer if running\n if (this.resultObserver !== null) {\n this.resultObserver.disconnect();\n this.resultObserver = null;\n }\n\n // Remove the result observer timer if running\n if (this.resultObserverTimer !== 0) {\n window.clearTimeout(this.resultObserverTimer);\n this.resultObserverTimer = 0;\n }\n }\n\n /**\n * Scrolls the selected search result into view.\n * \n * @param view The EditorView on which to act\n * @param resultElement The HTML element containing the search result, if known\n */\n private scrollToSelectedResult(view: EditorView, resultElement: HTMLElement|null) {\n const editingRoot = editingRootNode(view.state.selection);\n if (editingRoot) {\n const container = view.nodeDOM(editingRoot.pos) as HTMLElement;\n\n if (resultElement === null) {\n // Attempt to find a result element to scroll to if we weren't given one\n resultElement = container.querySelector(\".pm-find-text.pm-selected-text\");\n }\n\n if (resultElement === null || resultElement === this.resultElement) {\n // If we didn't find a result element, or if we found a stale one\n // (hasn't changed), defer scrolling until it has been rendered. This is\n // most common when the search result is inside an Ace editor chunk,\n // which puts the result in the DOM on a deferred render loop.\n this.watchForSelectedResult(view);\n return;\n } \n\n this.resultElement = resultElement;\n\n // Starting offset for scroll position \n let offset = 100;\n\n // Zenscroll can only scroll to a direct child element of the scroll\n // container, but the element containing the search result may be deeply\n // nested in the container. Walk up the DOM tree, summing the offsets,\n // until we get to an element that's actually a child of the scroll\n // container. \n let scrollElement = resultElement;\n while (scrollElement.offsetParent?.parentElement !== container) {\n offset += scrollElement.offsetTop;\n const nextParent = scrollElement.offsetParent;\n if (nextParent === null) {\n break;\n } \n scrollElement = nextParent as HTMLElement;\n }\n\n // Perform the scroll to the element's container plus its offset inside\n // the container.\n const scroller = zenscroll.createScroller(container);\n scroller.center(scrollElement, 350, offset);\n }\n }\n\n private hasTerm() {\n return this.term.length > 0;\n }\n\n private matchesTerm(text: string) {\n if (this.hasTerm()) {\n const regex = this.findRegEx();\n if (regex) {\n return regex.test(text);\n } else {\n return false;\n }\n } else {\n return false;\n }\n }\n\n private findRegEx() {\n try {\n return new RegExp(this.term, !this.options.caseSensitive ? 'gui' : 'gu');\n } catch {\n return null;\n }\n }\n}\n\nconst extension: Extension = {\n plugins: () => {\n return [new FindPlugin()];\n },\n};\n\nexport interface FindOptions {\n regex?: boolean;\n caseSensitive?: boolean;\n wrap?: boolean;\n}\n\nexport function find(view: EditorView, term: string, options: FindOptions): boolean {\n return findPlugin(view).find(term, options)(view.state, view.dispatch);\n}\n\nexport function matchCount(view: EditorView): number {\n return findPlugin(view).matchCount(view.state);\n}\n\nexport function selectFirst(view: EditorView): boolean {\n return findPlugin(view).selectFirst()(view.state, view.dispatch);\n}\n\nexport function selectCurrent(view: EditorView): boolean {\n return findPlugin(view).selectCurrent()(view.state, view.dispatch);\n}\n\nexport function selectNext(view: EditorView): boolean {\n return findPlugin(view).selectNext()(view.state, view.dispatch);\n}\n\nexport function selectPrevious(view: EditorView): boolean {\n return findPlugin(view).selectPrevious()(view.state, view.dispatch);\n}\n\nexport function replace(view: EditorView, text: string): boolean {\n return findPlugin(view).replace(text)(view.state, view.dispatch);\n}\n\nexport function replaceAll(view: EditorView, text: string) {\n return findPlugin(view).replaceAll(text)(view.state, view.dispatch);\n}\n\nexport function clear(view: EditorView): boolean {\n return findPlugin(view).clear()(view.state, view.dispatch);\n}\n\nexport function findPluginState(state: EditorState): DecorationSet | null | undefined {\n return key.getState(state);\n}\n\nfunction findPlugin(view: EditorView): FindPlugin {\n return key.get(view.state) as FindPlugin;\n}\n\nexport default extension;\n","/*\n * omni_insert.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\nimport { DOMOutputSpecArray, Mark, Fragment } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { PandocOutput } from '../../api/pandoc';\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { selectionAllowsCompletions } from '../../api/completion';\nimport { OmniInserter } from '../../api/omni_insert';\nimport { MarkInputRuleFilter } from '../../api/input_rule';\nimport { EditorUI } from '../../api/ui';\n\nimport { omniInsertCompletionHandler } from './omni_insert-completion';\nimport { Extension } from '../../api/extension';\nimport { markIsActive } from '../../api/mark';\n\nexport function markOmniInsert() {\n return {\n marks: [\n {\n name: 'omni_insert',\n spec: {\n inclusive: true,\n noInputRules: true,\n parseDOM: [{ tag: \"span[class*='omni_insert']\" }],\n toDOM(): DOMOutputSpecArray {\n return ['span', { class: 'omni_insert' }];\n },\n },\n pandoc: {\n readers: [],\n writer: {\n priority: 30,\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\n output.writeInlines(parent);\n },\n },\n },\n },\n ],\n };\n}\n\nexport function omniInsertExtension(\n omniInserters: OmniInserter[],\n inputRuleFilter: MarkInputRuleFilter,\n ui: EditorUI,\n): Extension {\n return {\n commands: () => [new OmniInsertCommand(inputRuleFilter)],\n completionHandlers: () => [omniInsertCompletionHandler(omniInserters, ui)],\n };\n}\n\nclass OmniInsertCommand extends ProsemirrorCommand {\n constructor(markFilter: MarkInputRuleFilter) {\n super(\n EditorCommandId.OmniInsert,\n ['Mod-/'],\n (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // check whether selection allows completions\n if (!selectionAllowsCompletions(state.selection)) {\n return false;\n }\n\n // if the marks is already active then bail\n if (markIsActive(state, state.schema.marks.omni_insert)) {\n return false;\n }\n\n // check the mark filter\n if (!markFilter(state)) {\n return false;\n }\n\n if (dispatch) {\n const mark = state.schema.marks.omni_insert.create();\n const node = state.schema.text('/', [mark]);\n const tr = state.tr;\n tr.replaceSelectionWith(node, false);\n dispatch(tr);\n }\n\n return true;\n },\n );\n }\n}\n","/*\n * completion.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Selection, EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\nimport { EditorView, DecorationSet } from 'prosemirror-view';\n\nimport { canInsertNode } from './node';\nimport { EditorUI } from './ui';\nimport { kInsertCompletionTransaction } from './transaction';\n\nexport const kCompletionDefaultItemHeight = 22;\nexport const kCompletionDefaultMaxVisible = 10;\nexport const kCompletionDefaultWidth = 180;\n\nexport interface CompletionContext {\n isPaste: boolean;\n}\n\nexport interface CompletionsStream {\n items: T[];\n stream: () => T[] | null;\n}\n\nexport type Completions = T[] | CompletionsStream;\n\nexport interface CompletionResult {\n pos: number;\n offset?: number;\n token: string;\n completions: (state: EditorState, context: CompletionContext) => Promise;\n decorations?: DecorationSet;\n}\n\nexport interface CompletionHeaderProps {\n ui: EditorUI;\n message?: string;\n}\n\nexport interface CompletionHandler {\n // unique id\n id: string;\n\n // An optional scope for this completion handler. Completions\n // triggered by a transaction will filter completion handlers\n // that share a scope with the completion handler that originated\n // a transaction.\n scope?: string;\n\n // filter for determing whether we can call this handler from a given context (default is to\n // never offer completions if a mark with noInputRules is active). set to null to\n // allow completion anywhere\n enabled?: ((context: EditorState | Transaction) => boolean) | null;\n\n // return a set of completions for the given context. text is the text before\n // before the cursor in the current node (but no more than 500 characters)\n completions(text: string, context: EditorState | Transaction): CompletionResult | null;\n\n // filter a previously returned set of completions\n filter?: (completions: T[], state: EditorState, token: string, prevToken?: string) => T[] | null;\n\n // provide a completion replacement as a string or node (can be passed null if the popup was dismissed)\n replacement?(schema: Schema, completion: T | null): string | ProsemirrorNode | null;\n\n // lower level replacement handler (can be passed null if the popup was dismissed)\n replace?(view: EditorView, pos: number, completion: T | null): Promise;\n\n // completion view\n view: {\n // optional header component (will go inside a )\n header?: () =>\n | {\n component: React.FC | React.ComponentClass;\n height: number;\n message?: string;\n }\n | undefined;\n\n // react compontent type for viewing the item\n component: React.FC | React.ComponentClass;\n\n key: (completion: T) => any;\n\n // width of completion item (defaults to 180).\n width?: number;\n\n // height of completion item (defaults to 22px)\n height?: number;\n\n // use horizontal orientation (defaults to false)\n // (optionally provide a set of item widths)\n horizontal?: boolean;\n horizontalItemWidths?: number[];\n\n // maximum number of visible items (defaults to 10). note that\n // this only applies to completion poupups w/ vertical orientation\n // (scrolling is not supported for horizontal orientation)\n maxVisible?: number;\n\n // hide 'no results' (default false)\n hideNoResults?: boolean;\n };\n}\n\nexport function selectionAllowsCompletions(selection: Selection) {\n const schema = selection.$head.parent.type.schema;\n\n // non empty selections don't have completions\n if (!selection.empty) {\n return false;\n }\n\n // must be able to insert text\n if (!canInsertNode(selection, schema.nodes.text)) {\n return false;\n }\n\n // must not be in a code mark\n if (schema.marks.code && !!schema.marks.code.isInSet(selection.$from.marks())) {\n return false;\n }\n\n // must not be in a code node\n if (selection.$head.parent.type.spec.code) {\n return false;\n }\n\n return true;\n}\n\n// Determine whether two completionHandlers share the same scope. By default\n// completion handlers will share scope only if they share an id, but handlers\n// can provide a scope if they'd like to coordinate.\nexport function completionsShareScope(handler: CompletionHandler, prevHandler?: CompletionHandler) {\n // There is no previous handler, not shared\n if (!prevHandler) {\n return false;\n }\n\n // Previous handler with the same scope as the current handler\n if (prevHandler.scope && prevHandler.scope === handler.scope) {\n return true;\n } else {\n // Previous handler has the same id as the current handler\n return prevHandler.id === handler.id;\n }\n}\n\nexport function performCompletionReplacement(tr: Transaction, pos: number, replacement: ProsemirrorNode | string) {\n // set selection to area we will be replacing\n tr.setSelection(new TextSelection(tr.doc.resolve(pos), tr.selection.$head));\n\n // ensure we have a node\n if (replacement instanceof ProsemirrorNode) {\n // combine it's marks w/ whatever is active at the selection\n const marks = tr.selection.$head.marks();\n\n // set selection and replace it\n tr.replaceSelectionWith(replacement, false);\n\n // propapate marks\n marks.forEach(mark => tr.addMark(pos, tr.selection.to, mark));\n } else {\n tr.insertText(replacement);\n }\n\n // mark the transaction as an completion insertion\n tr.setMeta(kInsertCompletionTransaction, true);\n}\n","/*\n * omni_insert.tsx\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorState, Selection, Transaction } from 'prosemirror-state';\nimport { EditorView, DecorationSet } from 'prosemirror-view';\n\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport React from 'react';\nimport { firstBy } from 'thenby';\n\nimport { OmniInserter, omniInsertGroupCompare, omniInsertPriorityCompare } from '../../api/omni_insert';\nimport { CompletionHandler, CompletionResult } from '../../api/completion';\n\nimport { EditorUI } from '../../api/ui';\nimport { placeholderDecoration, emptyNodePlaceholderPlugin } from '../../api/placeholder';\nimport { kAddToHistoryTransaction } from '../../api/transaction';\n\nimport './omni_insert-completion.css';\n\nexport function omniInsertCompletionHandler(\n omniInserters: OmniInserter[],\n ui: EditorUI,\n): CompletionHandler {\n return {\n id: 'E305158D-20D6-474D-84E6-06607CA58578',\n\n completions: omniInsertCompletions(omniInserters, ui),\n\n filter: (completions: OmniInserter[], state: EditorState, token: string) => {\n // match contents of name or keywords (and verify the command is enabled)\n return completions\n .filter(inserter => {\n return (\n token.length === 0 ||\n inserter.name.toLowerCase().indexOf(token) !== -1 ||\n inserter.keywords?.some(keyword => keyword.indexOf(token) !== -1)\n );\n })\n .filter(inserter => {\n return inserter.command(state);\n })\n .sort(\n firstBy(omniInsertGroupCompare)\n .thenBy(omniInsertPriorityCompare, { direction: 'desc' })\n .thenBy('name'),\n );\n },\n\n replace(view: EditorView, pos: number, completion: OmniInserter | null) {\n // helper to remove command text\n const removeCommandText = () => {\n const tr = view.state.tr;\n tr.deleteRange(pos, view.state.selection.head);\n tr.setMeta(kAddToHistoryTransaction, false);\n view.dispatch(tr);\n };\n\n // execute command if provided\n if (completion) {\n // remove existing text\n removeCommandText();\n\n // execute the command\n completion.command(view.state, view.dispatch, view);\n\n // perform any requested selection offset\n if (completion.selectionOffset) {\n const tr = view.state.tr;\n setTextSelection(tr.selection.from + completion.selectionOffset)(tr);\n tr.setMeta(kAddToHistoryTransaction, false);\n view.dispatch(tr);\n }\n\n // if this is a dismiss of an omni_insert mark then the command\n // isn't part of 'natural' typing into the document, so remove it\n } else if (isOmniInsertCommandActive(view.state.selection)) {\n removeCommandText();\n }\n return Promise.resolve();\n },\n\n view: {\n component: OmniInserterView,\n key: command => command.id,\n width: 320,\n height: 46,\n maxVisible: 5,\n },\n };\n}\n\nconst kOmniInsertRegex = /\\/([\\w]*)$/;\n\nfunction omniInsertCompletions(omniInserters: OmniInserter[], ui: EditorUI) {\n return (text: string, context: EditorState | Transaction): CompletionResult | null => {\n const match = text.match(kOmniInsertRegex);\n if (match) {\n // we need to either be at the beginning of our parent, OR the omni_insert mark needs\n // to be active (that indicates that we entered omni insert mode via a user command)\n if (match.index !== 0 && !isOmniInsertCommandActive(context.selection)) {\n return null;\n }\n\n // capture query (note that no query returns all).\n const query = match[1].toLowerCase();\n\n // include a decoration if the query is empty\n const decorations =\n query.length === 0\n ? DecorationSet.create(context.doc, [\n placeholderDecoration(context.selection.head, ui.context.translateText(' type to search...')),\n ])\n : undefined;\n\n // return the completion result\n return {\n // match at the /\n pos: context.selection.head - match[0].length,\n\n // unique identifier for this request\n token: query,\n\n // return all omniInserters (will refine via filter)\n completions: (state: EditorState) => {\n return Promise.resolve(omniInserters);\n },\n\n // search placehodler decorator if there is no query\n decorations,\n };\n } else {\n return null;\n }\n };\n}\n\nconst OmniInserterView: React.FC = inserter => {\n return (\n \n \n \n \n \n \n \n
\n \"\"\n \n
{inserter.name}
\n
{inserter.description}
\n
\n );\n};\n\nfunction isOmniInsertCommandActive(selection: Selection) {\n const schema = selection.$head.parent.type.schema;\n return schema.marks.omni_insert.isInSet(selection.$head.marks());\n}\n","/*\n * omni_insert.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { CommandFn } from './command';\n\n// descriptive info for omni insert\nexport interface OmniInsert {\n name: string;\n keywords?: string[];\n description: string;\n group: OmniInsertGroup;\n priority?: number;\n selectionOffset?: number;\n image: () => string;\n}\n\n// descriptive info + ability to identify/execute\nexport interface OmniInserter extends OmniInsert {\n id: string;\n command: CommandFn;\n}\n\nexport enum OmniInsertGroup {\n Headings = 'Headings',\n Chunks = 'Chunks',\n Lists = 'Lists',\n Math = 'Math',\n References = 'References',\n Content = 'Content',\n Blocks = 'Blocks',\n}\n\nconst omniInsertGroupOrder = new Map(Object.keys(OmniInsertGroup).map((key, index) => [key, index]));\n\nexport function omniInsertGroupCompare(a: OmniInsert, b: OmniInsert) {\n return omniInsertGroupOrder.get(a.group)! - omniInsertGroupOrder.get(b.group)!;\n}\n\nexport function omniInsertPriorityCompare(a: OmniInsert, b: OmniInsert) {\n return (a.priority || 0) - (b.priority || 0);\n}\n","/*\n * placeholder.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, NodeType } from 'prosemirror-model';\nimport { EditorState, Transaction, Plugin, PluginKey } from 'prosemirror-state';\nimport { DecorationSet, Decoration, EditorView } from 'prosemirror-view';\n\nimport { findParentNode } from 'prosemirror-utils';\n\nimport { EditorUI } from './ui';\n\nexport function emptyNodePlaceholderPlugin(nodeType: NodeType, placeholder: (node: ProsemirrorNode) => string) {\n const pluginKey = new PluginKey(nodeType.name + '-empty-placeholder');\n\n return new Plugin({\n key: pluginKey,\n state: {\n init(_config: { [key: string]: any }, instance: EditorState) {\n return DecorationSet.empty;\n },\n apply(tr: Transaction, set: DecorationSet, oldState: EditorState, newState: EditorState) {\n // check for empty parent of our type\n const emptyNode = findParentNode(node => node.type === nodeType && node.childCount === 0)(tr.selection);\n if (emptyNode) {\n const decoration = placeholderDecoration(emptyNode.pos + 1, placeholder(emptyNode.node));\n return DecorationSet.create(tr.doc, [decoration]);\n } else {\n return DecorationSet.empty;\n }\n },\n },\n props: {\n decorations(state: EditorState) {\n return pluginKey.getState(state);\n },\n },\n });\n}\n\nexport function placeholderDecoration(pos: number, text: string) {\n return Decoration.widget(pos, (_view: EditorView, _getPos: () => number) => {\n const placeholder = window.document.createElement('span');\n placeholder.classList.add('pm-placeholder-text-color');\n placeholder.innerText = text;\n return placeholder;\n });\n}\n\nexport function iconAndTextPlaceholderDecoration(pos: number, icon: string, text: string) {\n return Decoration.widget(pos, (_view: EditorView, _getPos: () => number) => {\n const container = window.document.createElement('span');\n\n const iconImg = window.document.createElement('img');\n iconImg.classList.add('pm-placeholder-icon');\n iconImg.setAttribute('src', icon);\n\n const message = window.document.createElement('span');\n message.classList.add('pm-placeholder-text-color');\n message.classList.add('pm-placeholder-text');\n message.innerText = text;\n\n container.appendChild(iconImg);\n container.appendChild(message);\n return container;\n });\n}\n\nexport function searchPlaceholderDecoration(pos: number, ui: EditorUI, text?: string) {\n return iconAndTextPlaceholderDecoration(pos, ui.images.search!, text || '');\n}\n","/*\n * completion.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\n// TODO: it may be that we need to not do full re-requests from the filter\n// when we have streamed results (as they can cause reset of the allCompletions)\n\nimport { Plugin, PluginKey, Transaction, Selection, EditorState } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport {\n CompletionHandler,\n selectionAllowsCompletions,\n kCompletionDefaultMaxVisible,\n completionsShareScope,\n performCompletionReplacement,\n CompletionResult,\n Completions,\n CompletionsStream,\n} from '../../api/completion';\nimport { EditorEvents } from '../../api/events';\nimport { ScrollEvent } from '../../api/event-types';\n\nimport { createCompletionPopup, renderCompletionPopup, destroyCompletionPopup } from './completion-popup';\nimport { EditorUI } from '../../api/ui';\nimport { PromiseQueue } from '../../api/promise';\nimport { MarkInputRuleFilter } from '../../api/input_rule';\nimport { kInsertCompletionTransaction, kPasteTransaction } from '../../api/transaction';\n\ninterface CompletionState {\n handler?: CompletionHandler;\n result?: CompletionResult;\n prevToken?: string;\n isPaste?: boolean;\n}\n\nexport function completionExtension(\n handlers: readonly CompletionHandler[],\n inputRuleFilter: MarkInputRuleFilter,\n ui: EditorUI,\n events: EditorEvents,\n) {\n return {\n plugins: () => [new CompletionPlugin(handlers, inputRuleFilter, ui, events)],\n };\n}\n\nconst key = new PluginKey('completion');\n\nclass CompletionPlugin extends Plugin {\n // editor ui\n private readonly ui: EditorUI;\n\n // editor view\n private view: EditorView | null = null;\n\n // popup elemeent\n private completionPopup: HTMLElement | null = null;\n\n // currently selected index and last set of completions are held as transient\n // state because they can't be derived from the document state (selectedIndex\n // is derived from out of band user keyboard gestures and completions may\n // have required fulfilling an external promise). also use a version counter\n // used to invalidate async completion requests that are fulfilled after\n // an update has occurred\n private version = 0;\n private allCompletions: any[] = [];\n private completions: any[] = [];\n private horizontal = false;\n private selectedIndex = 0;\n\n // serialize async completion requests\n private completionQueue = new PromiseQueue();\n\n // events we need to unsubscribe from\n private readonly scrollUnsubscribe: VoidFunction;\n\n constructor(\n handlers: readonly CompletionHandler[],\n inputRuleFilter: MarkInputRuleFilter,\n ui: EditorUI,\n events: EditorEvents,\n ) {\n super({\n key,\n state: {\n init: () => ({}),\n apply: (tr: Transaction, prevState: CompletionState) => {\n // if we don't have a view then bail\n if (!this.view) {\n return {};\n }\n\n // selection only changes dismiss any active completion\n if (!tr.docChanged && !tr.storedMarksSet && tr.selectionSet) {\n return {};\n }\n\n // check whether completions are valid here\n if (!selectionAllowsCompletions(tr.selection)) {\n return {};\n }\n\n // calcluate text before cursor\n const textBefore = completionTextBeforeCursor(tr.selection);\n\n // if there is no text then don't handle it\n if (textBefore.length === 0) {\n return {};\n }\n\n const isPaste = tr.getMeta(kPasteTransaction) === true;\n\n // check for a handler that can provide completions at the current selection\n for (const handler of handlers) {\n // first check if the handler is enabled (null means use inputRuleFilter)\n if (handler.enabled === null || (handler.enabled ? handler.enabled(tr) : inputRuleFilter(tr))) {\n const result = handler.completions(textBefore, tr);\n if (result) {\n // check if the previous state had a completion from the same handler\n let prevToken: string | undefined;\n\n // If this completion shares scope with the previous completion\n // and this is a completion transaction, skip\n if (tr.getMeta(kInsertCompletionTransaction) && completionsShareScope(handler, prevState.handler)) {\n continue;\n }\n\n if (handler.id === prevState.handler?.id) {\n // pass the prevToken on if the completion was for the same position\n if (result.pos === prevState.result?.pos) {\n prevToken = prevState.result.token;\n }\n }\n\n // return state\n return { handler, result, prevToken, isPaste };\n }\n }\n }\n\n // no handler found\n return {};\n },\n },\n\n view: () => ({\n update: (view: EditorView) => {\n // increment version\n this.version++;\n\n // set view\n this.view = view;\n\n // update completions\n this.updateCompletions(view, true);\n },\n\n destroy: () => {\n // unsubscribe from events\n this.scrollUnsubscribe();\n window.document.removeEventListener('focusin', this.clearCompletions);\n\n // tear down the popup\n this.clearCompletions();\n },\n }),\n\n props: {\n decorations: (state: EditorState) => {\n const pluginState = key.getState(state);\n return pluginState?.result?.decorations;\n },\n\n handleDOMEvents: {\n keydown: (view: EditorView, event: Event) => {\n const kbEvent = event as KeyboardEvent;\n\n let handled = false;\n\n // determine meaning of keys based on orientation\n const forwardKey = this.horizontal ? 'ArrowRight' : 'ArrowDown';\n const backwardKey = this.horizontal ? 'ArrowLeft' : 'ArrowUp';\n\n if (this.completionsActive()) {\n switch (kbEvent.key) {\n case 'Escape':\n this.dismissCompletions();\n handled = true;\n break;\n case 'Enter':\n case 'Tab':\n this.insertCompletion(view, this.selectedIndex);\n handled = true;\n break;\n case backwardKey:\n this.selectedIndex = Math.max(this.selectedIndex - 1, 0);\n this.renderCompletions(view);\n handled = true;\n break;\n case forwardKey:\n this.selectedIndex = Math.min(this.selectedIndex + 1, this.completions.length - 1);\n this.renderCompletions(view);\n handled = true;\n break;\n case 'PageUp':\n this.selectedIndex = Math.max(this.selectedIndex - this.completionPageSize(), 0);\n this.renderCompletions(view);\n handled = true;\n break;\n case 'PageDown':\n this.selectedIndex = Math.min(\n this.selectedIndex + this.completionPageSize(),\n this.completions.length - 1,\n );\n this.renderCompletions(view);\n handled = true;\n break;\n case 'End':\n this.selectedIndex = this.completions.length - 1;\n this.renderCompletions(view);\n handled = true;\n break;\n case 'Home':\n this.selectedIndex = 0;\n this.renderCompletions(view);\n handled = true;\n break;\n }\n }\n\n // supress event if we handled it\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n // return status\n return handled;\n },\n },\n },\n });\n\n // capture reference to ui\n this.ui = ui;\n\n // hide completions when we scroll or the focus changes\n this.clearCompletions = this.clearCompletions.bind(this);\n this.scrollUnsubscribe = events.subscribe(ScrollEvent, this.clearCompletions);\n window.document.addEventListener('focusin', this.clearCompletions);\n }\n\n private updateCompletions(view: EditorView, resetSelection: boolean) {\n const state = key.getState(view.state);\n\n if (state?.handler && state?.result) {\n // track the request version to invalidate the result if an\n // update happens after it goes into flight\n const requestVersion = this.version;\n\n // make an async request for the completions, update allCompletions,\n // and then apply any filter we have (allows the completer to just return\n // everything from the aysnc query and fall back to the filter for refinement)\n const requestAllCompletions = async () => {\n // fetch completions\n const completions = await state.result!.completions(view.state, { isPaste: state.isPaste === true });\n\n // if we don't have a handler or result then return\n if (!state.handler || !state.result) {\n return;\n }\n\n // function to update completions\n const updateCompletions = (updatedCompletions: any[]) => {\n // save completions\n this.setAllCompletions(updatedCompletions, !!state.handler?.view.horizontal, resetSelection);\n\n // display if the request still maps to the current state\n if (state.handler && state.result && this.version === requestVersion) {\n // if there is a filter then call it and update displayed completions\n const displayedCompletions = state.handler.filter\n ? state.handler.filter(this.allCompletions, view.state, state.result.token)\n : null;\n if (displayedCompletions) {\n this.setDisplayedCompletions(displayedCompletions, !!state.handler.view.horizontal, resetSelection);\n }\n\n this.renderCompletions(view);\n }\n };\n\n // if we got an array, just set it. if we got a stream then poll it for it's update\n if (Array.isArray(completions)) {\n updateCompletions(completions);\n } else {\n const completionStream = completions as CompletionsStream;\n updateCompletions(completionStream.items);\n const pollingInterval = setInterval(() => {\n // if the document has been updated then invalidate\n if (this.version !== requestVersion) {\n clearInterval(pollingInterval);\n } else {\n // otherwise check the stream\n const result = completionStream.stream();\n if (result) {\n clearInterval(pollingInterval);\n updateCompletions(result);\n }\n }\n }, 300);\n }\n };\n\n // first see if we can do this exclusively via filter\n if (state.prevToken && state.handler.filter) {\n this.completionQueue.enqueue(async () => {\n // display if the request still maps to the current state\n if (state.handler && state.result && this.version === requestVersion) {\n const filteredCompletions = state.handler.filter!(\n this.allCompletions,\n view.state,\n state.result.token,\n state.prevToken,\n );\n\n // got a hit from the filter!\n if (filteredCompletions) {\n this.setDisplayedCompletions(filteredCompletions, !!state.handler.view.horizontal, resetSelection);\n this.renderCompletions(view);\n\n // couldn't use the filter, do a full request for all completions (so long as we aren't\n // already waiting on a strea,)\n } else {\n await requestAllCompletions();\n }\n }\n });\n } else {\n // no prevToken or no filter for this handler, request everything\n this.completionQueue.enqueue(requestAllCompletions);\n }\n } else {\n // no handler/result for this document state\n this.clearCompletions();\n }\n }\n\n private renderCompletions(view: EditorView) {\n const state = key.getState(view.state);\n\n if (state && state.handler && (this.completions.length > 0 || !state.handler.view.hideNoResults)) {\n const props = {\n handler: state.handler!,\n pos: state.result!.pos + (state.result!.offset || 0),\n completions: this.completions,\n selectedIndex: this.selectedIndex,\n noResults: this.ui.context.translateText('No Results'),\n onClick: (index: number) => {\n this.insertCompletion(view, index);\n },\n onHover: (index: number) => {\n this.selectedIndex = index;\n this.renderCompletions(view);\n },\n ui: this.ui,\n };\n\n // create the completion popup if we need to\n if (this.completionPopup === null) {\n this.completionPopup = createCompletionPopup();\n window.document.body.appendChild(this.completionPopup);\n }\n\n // render\n renderCompletionPopup(view, props, this.completionPopup);\n } else {\n // hide\n this.hideCompletionPopup();\n }\n }\n\n private async insertCompletion(view: EditorView, index: number) {\n // default index if not specified\n index = index || this.selectedIndex;\n\n const state = key.getState(view.state);\n if (state && state.handler) {\n // perform replacement\n const result = state.result!;\n\n // check low level handler first\n if (state.handler.replace) {\n // execute replace\n await state.handler.replace(view, result.pos, this.completions[index]);\n\n // use higher level handler\n } else if (state.handler.replacement) {\n // get replacement from handler\n const replacement = state.handler.replacement(view.state.schema, this.completions[index]);\n if (replacement) {\n const tr = view.state.tr;\n performCompletionReplacement(tr, result.pos, replacement);\n view.dispatch(tr);\n }\n }\n // set focus\n view.focus();\n }\n this.clearCompletions();\n }\n\n // explicit user dismiss of completion (e.g. Esc key)\n private async dismissCompletions() {\n // call lower-level replace on any active handler (w/ null). this gives\n // them a chance to dismiss any artifacts that were explicitly inserted\n // to trigger the handler (e.g. a cmd+/ for omni-insert)\n if (this.view) {\n const state = key.getState(this.view.state);\n if (state?.result && state.handler) {\n if (state.handler.replace) {\n await state.handler.replace(this.view, state.result.pos, null);\n } else if (state.handler.replacement) {\n state.handler.replacement(this.view.state.schema, null);\n }\n }\n }\n\n this.clearCompletions();\n }\n\n private clearCompletions() {\n this.setAllCompletions([], false, true);\n this.hideCompletionPopup();\n }\n\n private hideCompletionPopup() {\n if (this.completionPopup) {\n destroyCompletionPopup(this.completionPopup);\n this.completionPopup = null;\n }\n }\n\n private completionsActive() {\n return !!this.completionPopup;\n }\n\n private setAllCompletions(completions: any[], horizontal: boolean, resetSelection: boolean) {\n this.allCompletions = completions;\n this.setDisplayedCompletions(completions, horizontal, resetSelection);\n }\n\n private setDisplayedCompletions(completions: any[], horizontal: boolean, resetSelection: boolean) {\n this.completions = completions;\n this.horizontal = !!horizontal;\n\n // reset selection if requested or if the current index exceeds the # of completions\n if (resetSelection || this.selectedIndex > this.completions.length - 1) {\n this.selectedIndex = 0;\n }\n }\n\n private completionPageSize() {\n if (this.view) {\n const state = key.getState(this.view.state);\n return state?.handler?.view.maxVisible || kCompletionDefaultMaxVisible;\n } else {\n return kCompletionDefaultMaxVisible;\n }\n }\n}\n\n// extract the text before the cursor, dealing with block separators and\n// non-text leaf chracters (this is based on code in prosemirror-inputrules)\nfunction completionTextBeforeCursor(selection: Selection, maxLength = 500) {\n const { $head } = selection;\n return $head.parent.textBetween(\n Math.max(0, $head.parentOffset - maxLength), // start\n $head.parentOffset, // end\n undefined, // block separator\n '\\ufffc', // leaf char\n );\n}\n","/*\n * completion-popup.tsx\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\n\nimport React, { useEffect } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport zenscroll from 'zenscroll';\n\nimport { applyStyles } from '../../api/css';\nimport {\n CompletionHandler,\n kCompletionDefaultItemHeight,\n kCompletionDefaultMaxVisible,\n kCompletionDefaultWidth,\n} from '../../api/completion';\nimport { Popup } from '../../api/widgets/popup';\n\nimport './completion-popup.css';\nimport { EditorUI } from '../../api/ui';\n\nconst kNoResultsHeight = 22;\n\nexport interface CompletionListProps {\n handler: CompletionHandler;\n pos: number;\n completions: any[];\n selectedIndex: number;\n noResults: string;\n onHover: (index: number) => void;\n onClick: (index: number) => void;\n ui: EditorUI;\n}\n\nexport function createCompletionPopup(): HTMLElement {\n const popup = window.document.createElement('div');\n popup.style.position = 'absolute';\n popup.style.zIndex = '900';\n return popup;\n}\n\nexport function renderCompletionPopup(view: EditorView, props: CompletionListProps, popup: HTMLElement) {\n // position popup\n const size = completionPopupSize(props);\n const positionStyles = completionPopupPositionStyles(view, props.pos, size.width, size.height);\n applyStyles(popup, [], positionStyles);\n\n // render popup\n ReactDOM.render(, popup);\n}\n\nexport function destroyCompletionPopup(popup: HTMLElement) {\n ReactDOM.unmountComponentAtNode(popup);\n popup.remove();\n}\n\nconst CompletionPopup: React.FC = props => {\n // main completion popup + class + dark mode if appropriate\n const classes = ['pm-completion-popup'].concat(props.ui.prefs.darkMode() ? ['pm-dark-mode'] : []);\n return (\n \n \n \n );\n};\n\nconst CompletionList: React.FC = props => {\n const size = completionPopupSize(props);\n const itemHeight = props.handler.view.height || kCompletionDefaultItemHeight;\n\n // keep selected index in view\n const containerRef = React.useRef(null);\n useEffect(() => {\n const containerEl = containerRef.current;\n if (containerEl) {\n const rows = containerEl.getElementsByClassName('pm-completion-list-item-row');\n const scrollToRow = rows.item(props.selectedIndex);\n if (scrollToRow) {\n const scroller = zenscroll.createScroller(containerEl);\n scroller.intoView(scrollToRow as HTMLElement);\n }\n }\n }, [props.selectedIndex]);\n\n // item event handler\n const itemEventHandler = (index: number, handler: (index: number) => void) => {\n return (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n handler(index);\n };\n };\n\n // completion source based on orientation\n const completions = props.handler.view.horizontal ? horizontalCompletions : verticalCompletions;\n\n const classes = ['pm-completion-list'].concat(props.handler.view.horizontal ? ['pm-completion-list-horizontal'] : []);\n\n return (\n \n \n {completionsHeader(props.handler, props.completions.length, props)}\n \n {completions(props, itemHeight, itemEventHandler)}\n {props.completions.length === 0 ? completionsNoResults(props) : null}\n \n
\n \n );\n};\n\nfunction completionsHeader(handler: CompletionHandler, completionCount: number, props: CompletionListProps) {\n if (handler.view.header) {\n const completionHeader = handler.view.header ? handler.view.header() : undefined;\n const headerProps = { message: completionHeader?.message, ...props };\n\n if (completionHeader) {\n const header = React.createElement(completionHeader.component, headerProps);\n return (\n \n \n \n {header}\n \n \n \n );\n } else {\n return null;\n }\n } else {\n return null;\n }\n}\n\ntype ItemEventHandler = (index: number, handler: (index: number) => void) => (event: React.MouseEvent) => void;\n\nfunction verticalCompletions(props: CompletionListProps, itemHeight: number, itemEventHandler: ItemEventHandler) {\n return props.completions.map((completion, index) => {\n const { key, cell } = completionItemCell(props, completion, index);\n return (\n \n {cell}\n \n );\n });\n}\n\nfunction horizontalCompletions(props: CompletionListProps, itemHeight: number, itemEventHandler: ItemEventHandler) {\n const cellWidths = horizontalCellWidths(props);\n return (\n \n {props.completions.map((completion, index) => {\n const { cell } = completionItemCell(props, completion, index, cellWidths[index], itemEventHandler);\n return cell;\n })}\n \n );\n}\n\nfunction completionItemCell(\n props: CompletionListProps,\n completion: any,\n index: number,\n width?: number,\n itemEventHandler?: ItemEventHandler,\n) {\n // need to provide key for both wrapper and item\n // https://stackoverflow.com/questions/28329382/understanding-unique-keys-for-array-children-in-react-js#answer-28329550\n const key = props.handler.view.key(completion);\n const item = React.createElement(props.handler.view.component, { ...completion, key });\n const className = 'pm-completion-list-item' + (index === props.selectedIndex ? ' pm-selected-list-item' : '');\n const cell = (\n \n {item}\n \n );\n return { key, cell };\n}\n\nfunction completionsNoResults(props: CompletionListProps) {\n return (\n \n {props.noResults}\n \n );\n}\n\nfunction completionPopupSize(props: CompletionListProps) {\n // kicker for list margins/border/etc\n const kCompletionsChrome = 8;\n\n // get view props (apply defaults)\n let { height: itemHeight = kCompletionDefaultItemHeight } = props.handler.view;\n const { maxVisible = kCompletionDefaultMaxVisible, width = kCompletionDefaultWidth } = props.handler.view;\n\n // add 2px for the border to item heights\n const kBorderPad = 2;\n itemHeight += kBorderPad;\n\n // compute header height\n let headerHeight = 0;\n if (props.handler.view.header) {\n const completionHeader = props.handler.view.header();\n if (completionHeader) {\n headerHeight = completionHeader.height + kBorderPad;\n }\n }\n\n // complete based on horizontal vs. vertical\n if (props.handler.view.horizontal) {\n // horizontal mode can provide explicit item widths\n const kTablePadding = 8;\n const kCellPadding = 8;\n const kCellBorders = 2;\n const totalWidth =\n horizontalCellWidths(props).reduce((total, current) => {\n return total + (current + kCellPadding + kCellBorders);\n }, 0) + kTablePadding;\n\n return {\n width: totalWidth,\n height: headerHeight + itemHeight + kCompletionsChrome,\n };\n } else {\n // compute height (subject it to a minimum require to display 'no results')\n const height =\n headerHeight +\n kCompletionsChrome +\n Math.max(itemHeight * Math.min(maxVisible, props.completions.length), kNoResultsHeight);\n\n // return\n return { width, height };\n }\n}\n\nfunction horizontalCellWidths(props: CompletionListProps) {\n const { width = kCompletionDefaultWidth } = props.handler.view;\n return props.completions.map((_completion, index) => {\n if (props.handler.view.horizontalItemWidths) {\n return props.handler.view.horizontalItemWidths[index] || width;\n } else {\n return width;\n }\n });\n}\n\nfunction completionPopupPositionStyles(view: EditorView, pos: number, width: number, height: number) {\n // some constants\n const kMinimumPaddingToEdge = 5;\n const kCompletionsVerticalPadding = 5;\n\n // default position\n const selectionCoords = view.coordsAtPos(pos);\n\n let top = selectionCoords.bottom + kCompletionsVerticalPadding;\n let left = selectionCoords.left;\n\n // see if we need to be above\n if (top + height + kMinimumPaddingToEdge >= window.innerHeight) {\n top = selectionCoords.top - height - kCompletionsVerticalPadding;\n }\n\n // see if we need to be to the left (use cursor as pos in this case)\n if (left + width + kMinimumPaddingToEdge >= window.innerWidth) {\n const cursorCoords = view.coordsAtPos(view.state.selection.head);\n left = cursorCoords.right - width;\n }\n\n return {\n left: left + 'px',\n top: top + 'px',\n };\n}\n","/*\n * popup.tsx\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport React from 'react';\n\nimport { WidgetProps } from './react';\n\nexport type PopupProps = WidgetProps;\n\nexport const Popup: React.FC = props => {\n const className = ['pm-popup', 'pm-text-color', 'pm-proportional-font', 'pm-pane-border-color', 'pm-background-color']\n .concat(props.classes || [])\n .join(' ');\n\n const style: React.CSSProperties = {\n ...props.style,\n position: 'absolute',\n zIndex: 10,\n };\n\n return (\n
\n {props.children}\n
\n );\n};\n","/*\n * promise.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\ninterface PendingPromise {\n promise: () => Promise;\n resolve: (result: T) => void;\n reject: (reason: any) => void;\n}\n\nexport class PromiseQueue {\n private queue = new Array>();\n private running = false;\n\n public enqueue(promise: () => Promise) {\n return new Promise((resolve, reject) => {\n this.queue.push({\n promise,\n resolve,\n reject,\n });\n this.dequeue();\n });\n }\n\n private dequeue() {\n if (this.running) {\n return false;\n }\n const item = this.queue.shift();\n if (!item) {\n return false;\n }\n try {\n this.running = true;\n item\n .promise()\n .then(value => {\n this.running = false;\n item.resolve(value);\n this.dequeue();\n })\n .catch(err => {\n this.running = false;\n item.reject(err);\n this.dequeue();\n });\n } catch (err) {\n this.running = false;\n item.reject(err);\n this.dequeue();\n }\n return true;\n }\n}\n","/*\n * spelling-doc.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView, DecorationSet, Decoration } from 'prosemirror-view';\nimport { TextSelection, Plugin, PluginKey, EditorState, Transaction } from 'prosemirror-state';\n\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { PandocMark } from '../../api/mark';\nimport {\n EditorWordRange,\n EditorSpellingDoc,\n EditorWordSource,\n EditorAnchor,\n EditorRect,\n EditorUISpelling,\n} from '../../api/spelling';\nimport { scrollIntoView } from '../../api/scroll';\n\nimport { excludedMarks, getWords, spellcheckerWord } from './spelling';\n\n// get the document interface required by interactive spellchecking\n\nexport function getSpellingDoc(\n view: EditorView,\n marks: readonly PandocMark[],\n spelling: EditorUISpelling,\n): EditorSpellingDoc {\n // alias schema\n const schema = view.state.schema;\n\n // intialize marks we don't want to check\n const excluded = excludedMarks(schema, marks);\n\n // check begin\n spellingDocPlugin(view.state).onCheckBegin();\n\n return {\n getWords: (start: number, end: number): EditorWordSource => {\n return getWords(view.state, start, end, spelling, excluded);\n },\n\n createAnchor: (pos: number): EditorAnchor => {\n return spellingDocPlugin(view.state).createAnchor(pos);\n },\n\n shouldCheck: (_wordRange: EditorWordRange): boolean => {\n return true;\n },\n\n setSelection: (wordRange: EditorWordRange) => {\n const tr = view.state.tr;\n tr.setSelection(TextSelection.create(tr.doc, wordRange.start, wordRange.end));\n view.dispatch(tr);\n },\n\n getText: (wordRange: EditorWordRange): string => {\n const word = view.state.doc.textBetween(wordRange.start, wordRange.end);\n return spellcheckerWord(word);\n },\n\n replaceSelection: (text: string) => {\n const tr = view.state.tr;\n const selectionMarks = tr.selection.$from.marks();\n tr.replaceSelectionWith(view.state.schema.text(text, selectionMarks), false);\n view.dispatch(tr);\n },\n\n getCursorPosition: (): number => {\n return view.state.selection.to;\n },\n\n getSelectionStart: (): number => {\n return view.state.selection.from;\n },\n\n getSelectionEnd: (): number => {\n return view.state.selection.to;\n },\n\n getCursorBounds: (): EditorRect => {\n const fromCoords = view.coordsAtPos(view.state.selection.from);\n const toCoords = view.coordsAtPos(view.state.selection.to);\n\n return {\n x: Math.min(fromCoords.left, toCoords.left),\n y: fromCoords.top,\n width: Math.abs(fromCoords.left - toCoords.left),\n height: toCoords.bottom - fromCoords.top,\n };\n },\n\n moveCursorNearTop: () => {\n scrollIntoView(view, view.state.selection.from, false, undefined, 100);\n },\n\n dispose: () => {\n spellingDocPlugin(view.state).onCheckEnd(view);\n },\n };\n}\n\n// companion plugin for SpellingDoc provided above (shows 'fake' selection during\n// interactive spell check dialog and maintains anchor position(s) across\n// transactions that occur while the dialog/doc is active)\n\nconst spellingDocKey = new PluginKey('spelling-doc-plugin');\n\nfunction spellingDocPlugin(state: EditorState) {\n return spellingDocKey.get(state) as SpellingDocPlugin;\n}\n\nexport class SpellingDocPlugin extends Plugin {\n private checking = false;\n private anchors: SpellingAnchor[] = [];\n\n constructor() {\n super({\n key: spellingDocKey,\n state: {\n init: () => {\n return DecorationSet.empty;\n },\n apply: (tr: Transaction, old: DecorationSet, oldState: EditorState, newState: EditorState) => {\n if (this.checking) {\n // map anchors\n this.anchors.forEach(anchor => {\n anchor.setPosition(tr.mapping.map(anchor.getPosition()));\n });\n\n // show selection\n if (!tr.selection.empty) {\n return DecorationSet.create(tr.doc, [\n Decoration.inline(tr.selection.from, tr.selection.to, { class: 'pm-selected-text' }),\n ]);\n }\n }\n\n return DecorationSet.empty;\n },\n },\n props: {\n decorations: (state: EditorState) => {\n return spellingDocKey.getState(state);\n },\n },\n });\n }\n\n public createAnchor(pos: number) {\n const anchor = new SpellingAnchor(pos);\n this.anchors.push(anchor);\n return anchor;\n }\n\n public onCheckBegin() {\n this.checking = true;\n }\n\n public onCheckEnd(view: EditorView) {\n this.checking = false;\n this.anchors = [];\n\n if (!view.state.selection.empty) {\n const tr = view.state.tr;\n setTextSelection(tr.selection.to)(tr);\n view.dispatch(tr);\n }\n }\n}\n\nclass SpellingAnchor implements EditorAnchor {\n private pos = 0;\n constructor(pos: number) {\n this.pos = pos;\n }\n public getPosition() {\n return this.pos;\n }\n public setPosition(pos: number) {\n this.pos = pos;\n }\n}\n\nconst extension = () => {\n return {\n plugins: () => {\n return [new SpellingDocPlugin()];\n },\n };\n};\n\nexport default extension;\n","/*\n * spelling.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { MarkType, Schema, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorState } from 'prosemirror-state';\n\nimport { EditorWordSource, EditorWordRange, EditorUISpelling, kCharClassNonWord } from '../../api/spelling';\nimport { PandocMark, getMarkRange } from '../../api/mark';\n\nexport const beginDocPos = () => 1;\nexport const endDocPos = (doc: ProsemirrorNode) => doc.nodeSize - 2;\n\nexport function getWords(\n state: EditorState,\n start: number,\n end: number,\n spelling: EditorUISpelling,\n excluded: MarkType[],\n): EditorWordSource {\n // provide defaults\n if (start === -1) {\n start = beginDocPos();\n }\n if (end === -1) {\n end = endDocPos(state.doc);\n }\n\n // enlarge range to begin/end\n const beginPos = findBeginWord(state, start, spelling.classifyCharacter);\n const endPos = findEndWord(state, end, spelling.classifyCharacter);\n\n const words: EditorWordRange[] = [];\n let currentPos = beginPos;\n while (currentPos <= endPos) {\n // advance until we find a word\n currentPos = advanceToWord(state, currentPos, spelling.classifyCharacter);\n if (currentPos >= endPos) {\n break;\n }\n\n // find end of word\n const endWordPos = findEndWord(state, currentPos, spelling.classifyCharacter);\n if (endWordPos === currentPos) {\n break;\n }\n\n // add word if it doesn't have an excluded type\n if (!excludeWord(state.doc, currentPos, endWordPos, excluded)) {\n const wordText = state.doc.textBetween(currentPos, endWordPos);\n words.push(\n ...spelling.breakWords(wordText).map(wordRange => {\n return {\n start: currentPos + wordRange.start,\n end: currentPos + wordRange.end,\n };\n }),\n );\n }\n\n // next word\n currentPos = endWordPos;\n }\n\n // return iterator over word range\n return {\n hasNext: () => {\n return words.length > 0;\n },\n next: () => {\n if (words.length > 0) {\n return words.shift()!;\n } else {\n return null;\n }\n },\n };\n}\n\nfunction excludeWord(doc: ProsemirrorNode, from: number, to: number, excluded: MarkType[]) {\n // does it have one of our excluded mark types?\n if (excluded.some(markType => doc.rangeHasMark(from, to, markType))) {\n return true;\n }\n\n // it is in a link mark where the link text is a url?\n const schema = doc.type.schema;\n if (schema.marks.link && doc.rangeHasMark(from, to, schema.marks.link)) {\n const range = getMarkRange(doc.resolve(from), schema.marks.link);\n if (range && /^[a-z]+:\\/\\/.*$/.test(doc.textBetween(range.from, range.to))) {\n return true;\n }\n }\n\n // don't exclude\n return false;\n}\n\nexport function advanceToWord(state: EditorState, pos: number, classifier: (ch: number) => number) {\n while (pos < endDocPos(state.doc)) {\n const nextChar = charAt(state.doc, pos);\n if (classifier(nextChar) !== kCharClassNonWord) {\n break;\n } else {\n pos++;\n }\n }\n return pos;\n}\n\nexport function findBeginWord(state: EditorState, pos: number, classifier: (ch: number) => number) {\n // scan backwards until a non-word character is encountered\n while (pos >= beginDocPos()) {\n const prevChar = charAt(state.doc, pos - 1);\n if (classifier(prevChar) === kCharClassNonWord) {\n break;\n } else {\n pos--;\n }\n }\n // return the position\n return pos;\n}\n\nexport function findEndWord(state: EditorState, pos: number, classifier: (ch: number) => number) {\n // scan forwards until a non-word character is encountered\n while (pos < endDocPos(state.doc)) {\n const nextChar = charAt(state.doc, pos);\n if (classifier(nextChar) === kCharClassNonWord) {\n break;\n } else {\n pos++;\n }\n }\n\n // return the position\n return pos;\n}\n\n// get the chracter code at the specified position, returning character code 32 (a space)\n// for begin/end of document, block boundaries, and non-text leaf nodes\nexport function charAt(doc: ProsemirrorNode, pos: number) {\n if (pos < beginDocPos() || pos >= endDocPos(doc)) {\n return 32; // space for doc boundary\n } else {\n return (doc.textBetween(pos, pos + 1, ' ', ' ') || ' ').charCodeAt(0);\n }\n}\n\nexport function excludedMarks(schema: Schema, marks: readonly PandocMark[]): MarkType[] {\n return marks.filter(mark => mark.noSpelling).map(mark => schema.marks[mark.name]);\n}\n\nexport function spellcheckerWord(word: string) {\n return word.replace(/’/g, \"'\");\n}\n","/*\n * spelling.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport const kCharClassWord = 0;\nexport const kCharClassBoundary = 1;\nexport const kCharClassNonWord = 2;\n\nexport interface EditorUISpelling {\n // realtime interface\n realtimeEnabled: () => boolean;\n checkWords: (words: string[]) => string[];\n suggestionList: (word: string, callback: (suggestions: string[]) => void) => void;\n\n // dictionary\n isWordIgnored: (word: string) => boolean;\n ignoreWord: (word: string) => void;\n unignoreWord: (word: string) => void;\n addToDictionary: (word: string) => void;\n\n // word breaking\n breakWords: (text: string) => EditorWordRange[];\n classifyCharacter: (ch: number) => number;\n}\n\nexport interface EditorAnchor {\n getPosition: () => number;\n}\n\nexport interface EditorRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface EditorWordRange {\n start: number;\n end: number;\n}\n\nexport interface EditorWordSource {\n hasNext: () => boolean;\n next: () => EditorWordRange | null;\n}\n\nexport interface EditorSpellingDoc {\n getWords: (start: number, end: number) => EditorWordSource;\n\n createAnchor: (pos: number) => EditorAnchor;\n\n shouldCheck: (wordRange: EditorWordRange) => boolean;\n setSelection: (wordRange: EditorWordRange) => void;\n getText: (wordRange: EditorWordRange) => string;\n\n getCursorPosition: () => number;\n replaceSelection: (text: string) => void;\n getSelectionStart: () => number;\n getSelectionEnd: () => number;\n\n getCursorBounds: () => EditorRect;\n moveCursorNearTop: () => void;\n\n dispose: () => void;\n}\n","/*\n * spelling-realtime.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, MarkType } from 'prosemirror-model';\nimport { Plugin, PluginKey, EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { DecorationSet, EditorView, Decoration, DecorationAttrs } from 'prosemirror-view';\nimport { AddMarkStep, RemoveMarkStep } from 'prosemirror-transform';\nimport { ChangeSet } from 'prosemirror-changeset';\n\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { FocusEvent } from '../../api/event-types';\nimport { PandocMark } from '../../api/mark';\nimport {\n EditorUISpelling,\n EditorWordRange,\n kCharClassWord\n} from '../../api/spelling';\nimport { EditorEvents } from '../../api/events';\nimport { kAddToHistoryTransaction } from '../../api/transaction';\nimport { EditorUI, EditorMenuItem } from '../../api/ui';\n\nimport { excludedMarks, getWords, spellcheckerWord, findBeginWord, findEndWord, charAt } from './spelling';\n\nconst kUpdateSpellingTransaction = 'updateSpelling';\nconst kInvalidateSpellingWordTransaction = 'invalidateSpellingWord';\nconst kSpellingErrorClass = 'pm-spelling-error';\n\nconst realtimeSpellingKey = new PluginKey('spelling-realtime-plugin');\n\nexport function realtimeSpellingPlugin(\n schema: Schema,\n marks: readonly PandocMark[],\n ui: EditorUI,\n events: EditorEvents,\n) {\n return new RealtimeSpellingPlugin(excludedMarks(schema, marks), ui, events);\n}\n\nexport function invalidateAllWords(view: EditorView) {\n updateSpelling(view);\n}\n\nexport function invalidateWord(view: EditorView, word: string) {\n const tr = view.state.tr;\n tr.setMeta(kInvalidateSpellingWordTransaction, word);\n tr.setMeta(kAddToHistoryTransaction, false);\n view.dispatch(tr);\n}\n\nclass RealtimeSpellingPlugin extends Plugin {\n // track whether we've ever had the focus (don't do any spelling operations until then)\n private hasBeenFocused = true;\n\n private view: EditorView | null = null;\n private readonly ui: EditorUI;\n\n constructor(excluded: MarkType[], ui: EditorUI, events: EditorEvents) {\n super({\n key: realtimeSpellingKey,\n view: (view: EditorView) => {\n this.view = view;\n return {};\n },\n state: {\n init: (_config, state: EditorState) => {\n return DecorationSet.empty;\n },\n apply: (tr: Transaction, old: DecorationSet, oldState: EditorState, newState: EditorState) => {\n // if we somehow manage to get focus w/o our FocusEvent (below) being called then also\n // flip the hasBeenFocused bit here\n if (this.view?.hasFocus()) {\n this.hasBeenFocused = true;\n }\n\n // don't continue if either realtime spelling is disabled or we have never been focused\n if (!this.ui.spelling.realtimeEnabled() || !this.hasBeenFocused) {\n return DecorationSet.empty;\n }\n\n if (tr.getMeta(kUpdateSpellingTransaction)) {\n // explicit update request invalidates any existing decorations (this can happen when\n // we get focus for the very first time or when the main or secondary dictionaries change)\n return DecorationSet.create(newState.doc, spellingDecorations(newState, ui.spelling, excluded));\n } else if (tr.getMeta(kInvalidateSpellingWordTransaction)) {\n // for word invalidations we search through the decorations and remove words that match\n const word = tr.getMeta(kInvalidateSpellingWordTransaction) as string;\n\n // find decorations that have this word and remove them\n const wordDecos = old.find(undefined, undefined, spec => spec.word === word);\n\n // return decorators w/ those words removed\n return old.remove(wordDecos);\n } else if (tr.docChanged) {\n // perform an incremental update of spelling decorations (invalidate and re-scan\n // for decorations in changed ranges)\n\n // start w/ previous state\n let decos = old;\n\n // create change set from transaction\n let changeSet = ChangeSet.create(oldState.doc);\n changeSet = changeSet.addSteps(newState.doc, tr.mapping.maps);\n\n // collect ranges that had mark changes\n const markRanges: Array<{ from: number; to: number }> = [];\n for (const step of tr.steps) {\n if (step instanceof AddMarkStep || step instanceof RemoveMarkStep) {\n const markStep = step as any;\n markRanges.push({ from: markStep.from, to: markStep.to });\n }\n }\n\n // remove ranges = mark ranges + deleted ranges\n const removeRanges = markRanges.concat(\n changeSet.changes.map(change => ({ from: change.fromA, to: change.toA })),\n );\n\n // remove decorations from deleted ranges (expanding ranges to word boundaries)\n for (const range of removeRanges) {\n const fromPos = findBeginWord(oldState, range.from, ui.spelling.classifyCharacter);\n const toPos = findEndWord(oldState, range.to, ui.spelling.classifyCharacter);\n decos = decos.remove(decos.find(fromPos, toPos));\n }\n\n // map decoration positions to new document\n decos = decos.map(tr.mapping, tr.doc);\n\n // add ranges = mark ranges + inserted ranges\n const addRanges = markRanges.concat(\n changeSet.changes.map(change => ({ from: change.fromB, to: change.toB })),\n );\n\n // scan inserted ranges for spelling decorations (don't need to find word boundaries\n // b/c spellingDecorations already does that)\n for (const range of addRanges) {\n decos = decos.add(\n tr.doc,\n spellingDecorations(newState, ui.spelling, excluded, false, range.from - 1, range.to)\n );\n }\n\n // return decorators\n return decos;\n } else if (tr.selectionSet) {\n // if we had previously suppressed a decoration due to typing at the cursor, restore it\n // whenever the selection changes w/o the doc changing\n\n // start with previous state\n let decos = old;\n\n // find any special 'at cursor' errors\n const cursorDecos = decos.find(undefined, undefined, spec => !!spec.cursor);\n if (cursorDecos.length) {\n // there will only be one cursor, capture it's position then remove it\n const word = cursorDecos[0].spec.word as string;\n const { from, to } = cursorDecos[0];\n decos = decos.remove(cursorDecos);\n\n // add it back in as a real spelling error\n decos = decos.add(tr.doc, [Decoration.inline(from, to, { class: kSpellingErrorClass }, { word })]);\n }\n\n // return decorators\n return decos;\n } else {\n // no content or selection change, return old w/o mapping\n return old;\n }\n },\n },\n props: {\n decorations: (state: EditorState) => {\n return realtimeSpellingKey.getState(state);\n },\n handleDOMEvents: {\n contextmenu: spellingSuggestionContextMenuHandler(ui),\n },\n },\n });\n\n // save reference to ui\n this.ui = ui;\n\n // trigger update on first focus\n const focusUnsubscribe = events.subscribe(FocusEvent, () => {\n if (this.view) {\n focusUnsubscribe();\n this.hasBeenFocused = true;\n updateSpelling(this.view);\n\n // call a second time as no words will be cached initially, this simplifies the\n // need for threading a callback through the entire plugin system\n const v = this.view;\n setTimeout(() => updateSpelling(v), 5000);\n }\n });\n }\n}\n\nfunction spellingDecorations(\n state: EditorState,\n spelling: EditorUISpelling,\n excluded: MarkType[],\n excludeCursor = false,\n from = -1,\n to = -1,\n): Decoration[] {\n\n // a map of wordText -> [wordRange...]\n const rangeMap = new Map();\n\n // break words\n const words = getWords(state, from, to, spelling, excluded);\n\n // spell check and return decorations for misspellings\n const decorations: Decoration[] = [];\n\n // words to pass to the spellchecker\n const wordsToCheck: string[] = [];\n\n while (words.hasNext()) {\n const word = words.next()!;\n const wordText = state.doc.textBetween(word.start, word.end);\n\n const ranges = rangeMap.get(wordText) || [];\n ranges.push(word);\n rangeMap.set(wordText, ranges);\n\n wordsToCheck.push(spellcheckerWord(wordText));\n }\n\n const incorrectWords: string[] = spelling.checkWords(wordsToCheck);\n\n for (const incorrectWord of incorrectWords) {\n const ranges: EditorWordRange[] | undefined = rangeMap.get(incorrectWord);\n\n if (!!ranges) {\n for (const range of ranges) {\n const attrs: DecorationAttrs = {};\n const spec: { [key: string]: any } = {\n word: incorrectWord,\n };\n if (excludeCursor && state.selection.head > range.start && state.selection.head <= range.end) {\n spec.cursor = true;\n } else {\n attrs.class = kSpellingErrorClass;\n }\n decorations.push(Decoration.inline(range.start, range.end, attrs, spec));\n }\n }\n }\n\n return decorations;\n}\n\nfunction spellingSuggestionContextMenuHandler(ui: EditorUI) {\n return (view: EditorView, event: Event) => {\n if (!ui.display.showContextMenu) {\n return false;\n }\n\n // helper to create a menu action\n const menuAction = (text: string, action: VoidFunction) => {\n return {\n text,\n exec: () => {\n action();\n view.focus();\n },\n };\n };\n\n // helper to show a context menu and prevent further event handling\n const showContextMenu = (menuItems: EditorMenuItem[]) => {\n // show the menu\n const { clientX, clientY } = event as MouseEvent;\n ui.display.showContextMenu!(menuItems, clientX, clientY);\n };\n\n if (event.target && event.target instanceof Node) {\n // alias schema\n const schema = view.state.schema;\n\n // find the spelling decoration at this position (if any)\n const pos = view.posAtDOM(event.target, 0);\n const deco = realtimeSpellingKey.getState(view.state)!.find(pos, pos);\n if (deco.length) {\n // prevent default handling\n event.stopPropagation();\n event.preventDefault();\n\n // get word\n const { from, to } = deco[0];\n const word = spellcheckerWord(view.state.doc.textBetween(from, to));\n\n const kMaxSuggetions = 5;\n ui.spelling.suggestionList(word, (suggestions: string[]): void => {\n // create menu w/ suggestions\n const menuItems: EditorMenuItem[] = suggestions.slice(0, kMaxSuggetions).map(suggestion => {\n return {\n text: suggestion,\n exec: () => {\n const tr = view.state.tr;\n tr.setSelection(TextSelection.create(tr.doc, from, to));\n const marks = tr.selection.$from.marks();\n tr.replaceSelectionWith(schema.text(suggestion, marks), false);\n setTextSelection(from + suggestion.length)(tr);\n view.dispatch(tr);\n view.focus();\n },\n };\n });\n if (menuItems.length) {\n menuItems.push({ separator: true });\n }\n\n menuItems.push(menuAction(ui.context.translateText('Ignore All'), () => ui.spelling.ignoreWord(word)));\n menuItems.push({ separator: true });\n menuItems.push(\n menuAction(ui.context.translateText('Add to Dictionary'), () => ui.spelling.addToDictionary(word)),\n );\n\n // show context menu\n showContextMenu(menuItems);\n });\n\n return true;\n }\n\n // find the word at this position and see if it's ignored. if so provide an unignore context menu\n const classify = ui.spelling.classifyCharacter;\n const mouseEvent = event as MouseEvent;\n const clickPos = view.posAtCoords({ left: mouseEvent.clientX, top: mouseEvent.clientY });\n if (clickPos) {\n const ch = charAt(view.state.doc, clickPos.pos);\n if (classify(ch) === kCharClassWord) {\n const from = findBeginWord(view.state, clickPos.pos, classify);\n const to = findEndWord(view.state, clickPos.pos, classify);\n const word = spellcheckerWord(view.state.doc.textBetween(from, to));\n\n if (ui.spelling.isWordIgnored(word)) {\n // prevent default handling\n event.stopPropagation();\n event.preventDefault();\n\n showContextMenu([\n menuAction(`${ui.context.translateText('Unignore')} \\'${word}\\'`, () => ui.spelling.unignoreWord(word)),\n ]);\n return true;\n }\n }\n }\n }\n\n return false;\n };\n}\n\nfunction updateSpelling(view: EditorView) {\n const tr = view.state.tr;\n tr.setMeta(kUpdateSpellingTransaction, true);\n tr.setMeta(kAddToHistoryTransaction, false);\n view.dispatch(tr);\n}\n","/*\n * pandoc_converter.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport {\n PandocServer,\n PandocTokenReader,\n PandocNodeWriter,\n PandocMarkWriter,\n PandocPreprocessorFn,\n PandocBlockReaderFn,\n PandocPostprocessorFn,\n PandocInlineHTMLReaderFn,\n PandocWriterOptions,\n PandocTokensFilterFn,\n} from '../api/pandoc';\n\nimport { haveTableCellsWithInlineRcode } from '../api/rmd';\n\nimport { pandocFormatWith, PandocFormat, kGfmFormat, kCommonmarkFormat } from '../api/pandoc_format';\nimport { PandocCapabilities } from '../api/pandoc_capabilities';\nimport { PandocBlockCapsuleFilter, pandocMarkdownWithBlockCapsules } from '../api/pandoc_capsule';\n\nimport { ExtensionManager } from '../editor/editor-extensions';\n\nimport { pandocToProsemirror } from './pandoc_to_prosemirror';\nimport { pandocFromProsemirror } from './pandoc_from_prosemirror';\n\nexport type PandocLineWrapping = 'none' | 'column' | 'sentence';\n\nexport interface PandocToProsemirrorResult {\n doc: ProsemirrorNode;\n line_wrapping: PandocLineWrapping;\n unrecognized: string[];\n unparsed_meta: { [key: string]: any };\n}\n\nexport class PandocConverter {\n private readonly schema: Schema;\n private readonly preprocessors: readonly PandocPreprocessorFn[];\n private readonly postprocessors: readonly PandocPostprocessorFn[];\n private readonly readers: readonly PandocTokenReader[];\n private readonly tokensFilters: readonly PandocTokensFilterFn[];\n private readonly blockReaders: readonly PandocBlockReaderFn[];\n private readonly inlineHTMLReaders: readonly PandocInlineHTMLReaderFn[];\n private readonly blockCapsuleFilters: readonly PandocBlockCapsuleFilter[];\n private readonly nodeWriters: readonly PandocNodeWriter[];\n private readonly markWriters: readonly PandocMarkWriter[];\n private readonly pandoc: PandocServer;\n private readonly pandocCapabilities: PandocCapabilities;\n\n constructor(\n schema: Schema,\n extensions: ExtensionManager,\n pandoc: PandocServer,\n pandocCapabilities: PandocCapabilities,\n ) {\n this.schema = schema;\n\n this.preprocessors = extensions.pandocPreprocessors();\n this.postprocessors = extensions.pandocPostprocessors();\n this.readers = extensions.pandocReaders();\n this.tokensFilters = extensions.pandocTokensFilters();\n this.blockReaders = extensions.pandocBlockReaders();\n this.inlineHTMLReaders = extensions.pandocInlineHTMLReaders();\n this.blockCapsuleFilters = extensions.pandocBlockCapsuleFilters();\n this.nodeWriters = extensions.pandocNodeWriters();\n this.markWriters = extensions.pandocMarkWriters();\n\n this.pandoc = pandoc;\n this.pandocCapabilities = pandocCapabilities;\n }\n\n public async toProsemirror(markdown: string, format: PandocFormat): Promise {\n // save original markdown (for aligning capsule positions)\n const original = markdown;\n\n // adjust format. we always need to *read* raw_html, raw_attribute, and backtick_code_blocks b/c\n // that's how preprocessors hoist content through pandoc into our prosemirror token parser.\n // we always need to read with auto_identifiers so we can catch any auto-generated ids\n // required to fulfill links inside the document (we will strip out heading ids that\n // aren't explicit or a link target using the heading_ids returned with the ast). we also\n // disable 'smart' b/c that causes pandoc to insert non-breaking spaces before selected\n // abbreviations like e.g. rather, we do our own implementation of 'smart' when we read\n // PandocTokenType.Str from the ast\n\n // determine type of auto_ids\n const autoIds = format.extensions.gfm_auto_identifiers ? 'gfm_auto_identifiers' : 'auto_identifiers';\n const targetFormat = adjustedFormat(\n format.fullName,\n ['raw_html', 'raw_attribute', 'backtick_code_blocks', autoIds],\n ['smart'],\n );\n\n // run preprocessors\n this.preprocessors.forEach(preprocessor => {\n markdown = preprocessor(markdown);\n });\n\n // create source capsules\n this.blockCapsuleFilters.forEach(filter => {\n markdown = pandocMarkdownWithBlockCapsules(original, markdown, filter);\n });\n\n const ast = await this.pandoc.markdownToAst(markdown, targetFormat, []);\n const result = pandocToProsemirror(\n ast,\n this.schema,\n format.extensions,\n this.readers,\n this.tokensFilters,\n this.blockReaders,\n this.inlineHTMLReaders,\n this.blockCapsuleFilters,\n );\n\n // run post-processors\n this.postprocessors.forEach(postprocessor => {\n result.doc = postprocessor(result.doc);\n });\n\n // return the doc\n return result;\n }\n\n // NOTE: For a plain markdown file, this is the closest we can come to cannonicalizing w/ just pandoc:\n //\n // pandoc MANUAL.md --to markdown-auto_identifiers-smart -o MANUAL.md --self-contained --atx-headers --wrap=none\n //\n // For R Mardown files, we would need to pull out the Rmd chunks before sending to pandoc.\n //\n\n public async fromProsemirror(\n doc: ProsemirrorNode,\n pandocFormat: PandocFormat,\n options: PandocWriterOptions,\n ): Promise {\n // generate pandoc ast\n const output = pandocFromProsemirror(\n doc,\n this.pandocCapabilities.api_version,\n pandocFormat,\n this.nodeWriters,\n this.markWriters,\n );\n\n // adjust format. we always need to be able to write raw_attribute b/c that's how preprocessors\n // hoist content through pandoc into our prosemirror token parser. since we open this door when\n // reading, users could end up writing raw inlines, and in that case we want them to echo back\n // to the source document just the way they came in. for writing markdown from pm we don't\n // ever want to generate auto identifiers so we disable them here. we also disable smart b/c\n // we do this manually above in pandocFromProsemirror (so we can avoid pandoc's insertion of\n // nbsp's after abbreviations, which is more approriate for final output than editing)\n let format = adjustedFormat(\n pandocFormat.fullName,\n ['raw_html', 'raw_attribute'], // always enable\n ['auto_identifiers', 'gfm_auto_identifiers', 'smart'],\n ); // always disable\n\n // disable selected format options\n format = pandocFormatWith(format, disabledFormatOptions(format, doc), '');\n\n // prepare pandoc options\n let pandocOptions: string[] = [];\n if (!options.atxHeaders) {\n pandocOptions.push('--markdown-headings=setext');\n }\n if (options.dpi) {\n pandocOptions.push('--dpi');\n }\n // default to block level references (validate known types)\n let referenceLocation = 'block';\n if (options.references?.location) {\n referenceLocation = ['block', 'section', 'document'].includes(options.references.location)\n ? options.references.location\n : 'block';\n }\n pandocOptions.push(`--reference-location=${referenceLocation}`);\n\n // references prefix (if any)\n if (options.references?.prefix) {\n pandocOptions.push('--id-prefix', options.references.prefix);\n }\n\n // provide wrap options\n pandocOptions = pandocOptions.concat(wrapOptions(options));\n\n // render to markdown\n const markdown = await this.pandoc.astToMarkdown(output.ast, format, pandocOptions);\n\n // normalize newlines (don't know if pandoc uses \\r\\n on windows)\n return markdown.replace(/\\r\\n|\\n\\r|\\r/g, '\\n');\n }\n}\n\n// adjust the specified format\nfunction adjustedFormat(format: string, extensions: string[], disabled: string[]) {\n let newFormat = pandocFormatWith(\n format,\n '',\n extensions.map(ext => `+${ext}`).join('') + disabled.map(ext => `-${ext}`).join(''),\n );\n\n // any extension specified needs to not have a - anywhere in the format\n extensions.forEach(ext => {\n newFormat = newFormat.replace('-' + ext, '');\n });\n\n return newFormat;\n}\n\nfunction disabledFormatOptions(format: string, doc: ProsemirrorNode) {\n // (prefer pipe and grid tables). users can still force the availability of these by\n // adding those format flags but all known markdown variants that support tables also\n // support pipe tables so this seems unlikely to ever be required.\n let disabledTableTypes = '-simple_tables-multiline_tables';\n\n // if there are tables with inline R code then disable grid tables (as the inline\n // R code will mess up the column boundaries)\n if (haveTableCellsWithInlineRcode(doc)) {\n disabledTableTypes += '-grid_tables';\n }\n\n // gfm and commonmark variants don't allow simple/multiline/grid tables (just pipe tables)\n // and it's an error to even include these in the markdown format specifier -- so for\n // these modes we just nix the disabling\n if (format.startsWith(kGfmFormat) || format.startsWith(kCommonmarkFormat)) {\n disabledTableTypes = '';\n }\n\n // return\n return disabledTableTypes;\n}\n\nfunction wrapOptions(options: PandocWriterOptions) {\n const pandocOptions: string[] = [];\n if (options.wrap) {\n if (options.wrap === 'none' || options.wrap === 'sentence') {\n pandocOptions.push('--wrap=none');\n } else {\n const column = parseInt(options.wrap, 10);\n if (column) {\n pandocOptions.push('--wrap=auto');\n pandocOptions.push(`--columns=${column}`);\n } else {\n pandocOptions.push('--wrap=none');\n }\n }\n } else {\n pandocOptions.push('--wrap=none');\n }\n return pandocOptions;\n}\n","/*\n * pandoc_capsule.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\n\nimport { base64Encode, base64Decode } from './base64';\n\nimport { PandocToken, ProsemirrorWriter, mapTokens, PandocTokenType } from './pandoc';\n\n// constants used for creating/consuming capsules\nconst kFieldDelimiter = '\\n';\nconst kValueDelimiter = ':';\nconst kTypeField = 'type';\nconst kPositionField = 'position';\nconst kPrefixField = 'prefix';\nconst kSourceField = 'source';\nconst kSuffixField = 'suffix';\nconst kBlockCapsuleSentinel = '31B8E172-B470-440E-83D8-E6B185028602'.toLowerCase();\n\n// block capsule\nexport interface PandocBlockCapsule {\n type: string;\n position: number;\n prefix: string;\n source: string;\n suffix: string;\n}\n\n// preserve block source code through markdown parsing (e.g. for yaml metadata or rmd chunks).\n// block capsules remove markdown from the document before pandoc parses it (placing it into\n// a base64 encoded 'capsule'), then unwraps the capsule from the AST. All of this is done\n// by the function in this interface.\nexport interface PandocBlockCapsuleFilter {\n // unique type id for this capsule\n type: string;\n\n // regex that matches a prefix (match[1]), the source to preserve (match[2]), and a suffix (match[3])\n // we need the prefix/suffix for the cases where the preserved source needs to be put back exactly\n // where it came from (e.g. in a multi-line html comment). we also need it to fixup indentation in\n // cases where capsules are unwrapped within a code block or raw block. the prefix and suffix\n // must begin and end (respectively) with newlines, and consist entirely of whitespace (e.g. leading\n // space for indented block or incidental whitespace after block delimiter)\n match: RegExp;\n\n // optional seconary filter expression (applied to a successful match to ensure\n // that matching wasn't overly greedy)\n discard?: RegExp;\n\n // custom function for pulling out the 3 parts from a match (defaults to p1,p2,p3)\n extract?: (\n match: string,\n p1: string,\n p2: string,\n p3: string,\n p4: string,\n ) => { prefix: string; source: string; suffix: string };\n\n // provide a (text) envelope around the capsule, e.g.\n // - newlines to ensure that yaml is parsed as a standalone paragraph;\n // - backticks to ensure an Rmd is structurally parsed by pandoc as a codeblock\n enclose: (capsuleText: string, capsule: PandocBlockCapsule) => string;\n\n // examine a piece of text from within the pandoc ast and, if approproate, substitute any\n // capsules of my type for the original text (otherwise just return the passed string).\n // this method will generally use encodedBlockCapsuleRegex to create a regex to search\n // with, then upon finding a capsule, will unpack it with parsePandocBlockCapsule, compare\n // the type against our own type, and in the case they match do the substitution.\n handleText: (text: string, tok: PandocToken) => string;\n\n // do you want to handle this token as a capsule object? if so return the capsule text\n // (only the filter will know how to extract it from a pandoc token b/c it knows\n // where it was parsed from and what happened in the 'enclose' method)\n handleToken: (tok: PandocToken) => string | null;\n\n // write a capsule as a pandoc node\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => void;\n}\n\n// transform the passed markdown to include base64 encoded block capsules as specified by the\n// provided capsule filter. capsules are used to hoist block types that we don't want pandoc\n// to see (e.g. yaml metadata or Rmd chunks) out of the markdown, only to be re-inserted\n// after pandoc has yielded an ast. block capsules are a single base64 encoded pieced of\n// text that include the original content, the matched prefix and suffix, and a type\n// identifier for orchestrating the unpacking.\nexport function pandocMarkdownWithBlockCapsules(\n original: string,\n markdown: string,\n capsuleFilter: PandocBlockCapsuleFilter,\n) {\n // default extractor\n const defaultExtractor = (match: string, p1: string, p2: string, p3: string) => {\n return {\n prefix: p1,\n source: p2,\n suffix: p3,\n };\n };\n\n // find the original position of all the matches\n const positions: number[] = [];\n let match = capsuleFilter.match.exec(original);\n while (match != null) {\n positions.push(match.index);\n match = capsuleFilter.match.exec(original);\n }\n\n // reset capsule filter match index\n capsuleFilter.match.lastIndex = 0;\n\n // replace all w/ source preservation capsules\n return markdown.replace(capsuleFilter.match, (match: string, p1: string, p2: string, p3: string, p4: string) => {\n // read the original position of the match\n let position = 0;\n const originalPos = positions.shift();\n if (originalPos) {\n position = originalPos;\n }\n\n // if the capsuleFilter has a discard expression then check it\n if (capsuleFilter.discard && !!match.match(capsuleFilter.discard)) {\n return match;\n }\n\n // extract matches\n const extract = capsuleFilter.extract || defaultExtractor;\n const { prefix, source, suffix } = extract(match, p1, p2, p3, p4);\n\n // make the capsule\n const capsule: PandocBlockCapsule = {\n [kTypeField]: capsuleFilter.type,\n [kPositionField]: position,\n [kPrefixField]: prefix,\n [kSourceField]: source,\n [kSuffixField]: suffix,\n };\n\n // construct a field\n const field = (name: string, value: string) => `${name}${kValueDelimiter}${base64Encode(value)}`;\n\n // construct a record\n const record =\n field(kTypeField, capsule.type) +\n kFieldDelimiter +\n field(kPositionField, capsule.position.toString()) +\n kFieldDelimiter +\n field(kPrefixField, capsule.prefix) +\n kFieldDelimiter +\n field(kSourceField, capsule.source) +\n kFieldDelimiter +\n field(kSuffixField, capsule.suffix);\n\n // now base64 encode the entire record (so it can masquerade as a paragraph)\n const encodedRecord = base64Encode(record);\n\n // return capsule, which is:\n // - a base64 encoded record surrounded with a sentinel value\n // - enclosed in a filter specific envelope (used to influence pandoc parsing),\n // - surrounded by the original prefix and suffix\n return (\n prefix +\n capsuleFilter.enclose(\n `${kBlockCapsuleSentinel}${kValueDelimiter}${encodedRecord}${kValueDelimiter}${kBlockCapsuleSentinel}`,\n capsule,\n ) +\n suffix\n );\n });\n}\n\n// block capsules can also end up not as block tokens, but rather as text within another\n// token (e.g. within a backtick code block or raw_block). this function takes a set\n// of pandoc tokens and recursively converts block capsules that aren't of type\n// PandocTokenType.Str (which is what we'd see in a paragraph) into their original form\nexport function resolvePandocBlockCapsuleText(\n tokens: PandocToken[],\n filters: readonly PandocBlockCapsuleFilter[],\n): PandocToken[] {\n // process all tokens\n return mapTokens(tokens, token => {\n // look for non-string pandoc tokens\n if (token.t !== PandocTokenType.Str && token.c) {\n if (typeof token.c === 'string') {\n token.c = decodeBlockCapsuleText(token.c, token, filters);\n } else if (Array.isArray(token.c)) {\n const children = token.c.length;\n for (let i = 0; i < children; i++) {\n if (typeof token.c[i] === 'string') {\n token.c[i] = decodeBlockCapsuleText(token.c[i], token, filters);\n }\n }\n }\n }\n\n return token;\n });\n}\n\n// decode the text capsule by running all of the filters (as there could be nesting)\nexport function decodeBlockCapsuleText(text: string, tok: PandocToken, filters: readonly PandocBlockCapsuleFilter[]) {\n filters.forEach(filter => {\n text = filter.handleText(text, tok);\n });\n return text;\n}\n\nexport function blockCapsuleTextHandler(type: string, pattern: RegExp, textFilter?: (text: string) => string) {\n return (text: string, tok: PandocToken): string => {\n // if this is a code block or raw block then we need to strip the prefix\n // (b/c it could in a blockquote or indented in a list)\n const stripPrefix = tok.t === PandocTokenType.CodeBlock || tok.t === PandocTokenType.RawBlock;\n\n // replace text\n return text.replace(pattern, match => {\n const capsuleText = textFilter ? textFilter(match) : match;\n const capsule = parsePandocBlockCapsule(capsuleText);\n if (capsule.type === type) {\n if (stripPrefix) {\n return blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\n } else {\n return capsule.source;\n }\n } else {\n return match;\n }\n });\n };\n}\n\n// token handler that looks for a paragraph token consisting entirely of a block capsule of our type.\n// if we find that then return the block capsule text\nexport function blockCapsuleParagraphTokenHandler(type: string) {\n const tokenRegex = encodedBlockCapsuleRegex('^', '$');\n return (tok: PandocToken) => {\n if (tok.t === PandocTokenType.Para) {\n if (tok.c.length === 1 && tok.c[0].t === PandocTokenType.Str) {\n const text = tok.c[0].c as string;\n const match = text.match(tokenRegex);\n if (match) {\n const capsuleRecord = parsePandocBlockCapsule(match[0]);\n if (capsuleRecord.type === type) {\n return match[0];\n }\n }\n }\n }\n return null;\n };\n}\n\n// create a regex that can be used to match a block capsule\nexport function encodedBlockCapsuleRegex(prefix?: string, suffix?: string, flags?: string) {\n return new RegExp(\n (prefix || '') +\n kBlockCapsuleSentinel +\n kValueDelimiter +\n '((?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?)' +\n kValueDelimiter +\n kBlockCapsuleSentinel +\n (suffix || ''),\n flags,\n );\n}\n\n// remove encoding envelope then parse the remaining text into a block capsule\nexport function parsePandocBlockCapsule(text: string): PandocBlockCapsule {\n const envelopeLen = kBlockCapsuleSentinel.length + kFieldDelimiter.length;\n const record = text.substring(envelopeLen, text.length - envelopeLen);\n const decodedRecord = base64Decode(record);\n const fields = decodedRecord.split(kFieldDelimiter);\n const fieldValue = (i: number) => base64Decode(fields[i].split(kValueDelimiter)[1]);\n return {\n [kTypeField]: fieldValue(0),\n [kPositionField]: parseInt(fieldValue(1), 10),\n [kPrefixField]: fieldValue(2),\n [kSourceField]: fieldValue(3),\n [kSuffixField]: fieldValue(4),\n };\n}\n\n// provide a version of the block capsule source with the prefix removed\n// from all but the very first line. this allows us to restore the text\n// to the level of indentation implied by the markdown (as opposed to the\n// level found literally in the source file)\nexport function blockCapsuleSourceWithoutPrefix(source: string, prefix: string) {\n // prefix represents the indentation level of the block's source code, strip that\n // same prefix from all the lines of code save for the first one\n const prefixStripRegEx = new RegExp('^' + prefix);\n const lines = source.split('\\n').map((line, index) => {\n return index > 0 ? line.replace(prefixStripRegEx, '') : line;\n });\n return lines.join('\\n');\n}\n","/*\n * base_64.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\n// btoa and atob don't handle unicode strings, see\n// https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/btoa#Unicode_strings\n\n// these functions implement the suggested workaround ()\n\nexport function base64Encode(text: string) {\n const binary = toBinary(text);\n return window.btoa(binary);\n}\n\nexport function base64Decode(encoded: string) {\n const decoded = atob(encoded);\n return fromBinary(decoded);\n}\n\n// convert a Unicode string to a string in which each 16-bit unit occupies only one byte\nfunction toBinary(text: string) {\n const codeUnits = new Uint16Array(text.length);\n for (let i = 0; i < codeUnits.length; i++) {\n codeUnits[i] = text.charCodeAt(i);\n }\n const charCodes = Array.from(new Uint8Array(codeUnits.buffer)).map(code => String.fromCharCode(code));\n return charCodes.join('');\n}\n\n// reverse the conversion\nfunction fromBinary(binary: string) {\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n const charCodes = Array.from(new Uint16Array(bytes.buffer)).map(code => String.fromCharCode(code));\n return charCodes.join('');\n}\n","/*\n * pandoc_to_prosemirror.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Mark, Node as ProsemirrorNode, NodeType, Schema } from 'prosemirror-model';\n\nimport {\n PandocTokenReader,\n PandocToken,\n PandocAst,\n ProsemirrorWriter,\n PandocBlockReaderFn,\n PandocInlineHTMLReaderFn,\n PandocTokensFilterFn,\n PandocTokenType,\n mapTokens,\n stringifyTokens,\n PandocExtensions,\n forEachToken,\n} from '../api/pandoc';\nimport {\n pandocAttrReadAST,\n kCodeBlockAttr,\n kCodeBlockText,\n kPandocAttrClasses,\n kPandocAttrKeyvalue,\n} from '../api/pandoc_attr';\nimport {\n PandocBlockCapsuleFilter,\n parsePandocBlockCapsule,\n resolvePandocBlockCapsuleText,\n decodeBlockCapsuleText,\n} from '../api/pandoc_capsule';\n\nimport { PandocToProsemirrorResult, PandocLineWrapping } from './pandoc_converter';\nimport { kLinkTarget, kLinkTargetUrl, kLinkChildren, kLinkAttr, kLinkTargetTitle } from '../api/link';\nimport { kHeadingAttr, kHeadingLevel, kHeadingChildren } from '../api/heading';\nimport { pandocAutoIdentifier, gfmAutoIdentifier } from '../api/pandoc_id';\nimport { equalsIgnoreCase } from '../api/text';\nimport { hasShortcutHeadingLinks } from '../api/pandoc_format';\n\nexport function pandocToProsemirror(\n ast: PandocAst,\n schema: Schema,\n extensions: PandocExtensions,\n readers: readonly PandocTokenReader[],\n tokensFilters: readonly PandocTokensFilterFn[],\n blockReaders: readonly PandocBlockReaderFn[],\n inlineHTMLReaders: readonly PandocInlineHTMLReaderFn[],\n blockCapsuleFilters: readonly PandocBlockCapsuleFilter[],\n): PandocToProsemirrorResult {\n const parser = new Parser(\n schema,\n extensions,\n readers,\n tokensFilters,\n blockReaders,\n inlineHTMLReaders,\n blockCapsuleFilters,\n );\n return parser.parse(ast);\n}\n\nclass Parser {\n private readonly schema: Schema;\n private readonly extensions: PandocExtensions;\n private readonly tokensFilters: readonly PandocTokensFilterFn[];\n private readonly inlineHTMLReaders: readonly PandocInlineHTMLReaderFn[];\n private readonly blockCapsuleFilters: readonly PandocBlockCapsuleFilter[];\n private readonly handlers: { [token: string]: ParserTokenHandlerCandidate[] };\n\n constructor(\n schema: Schema,\n extensions: PandocExtensions,\n readers: readonly PandocTokenReader[],\n tokensFilters: readonly PandocTokensFilterFn[],\n blockReaders: readonly PandocBlockReaderFn[],\n inlineHTMLReaders: readonly PandocInlineHTMLReaderFn[],\n blockCapsuleFilters: readonly PandocBlockCapsuleFilter[],\n ) {\n this.schema = schema;\n this.extensions = extensions;\n this.tokensFilters = tokensFilters;\n this.inlineHTMLReaders = inlineHTMLReaders;\n // apply block capsule filters in reverse order\n this.blockCapsuleFilters = blockCapsuleFilters.slice().reverse();\n this.handlers = this.createHandlers(readers, blockReaders);\n }\n\n public parse(ast: PandocAst) {\n // create state\n const state: ParserState = new ParserState(this.schema);\n // create writer (compose state w/ writeTokens function)\n const parser = this;\n const writer: ProsemirrorWriter = {\n openNode: state.openNode.bind(state),\n closeNode: state.closeNode.bind(state),\n openNoteNode: state.openNoteNode.bind(state),\n addNode: state.addNode.bind(state),\n openMark: state.openMark.bind(state),\n closeMark: state.closeMark.bind(state),\n writeText: state.writeText.bind(state),\n hasInlineHTMLWriter(html: string) {\n return parser.hasInlineHTMLWriter(html);\n },\n writeInlineHTML(html: string) {\n return parser.writeInlineHTML(this, html);\n },\n writeTokens(tokens: PandocToken[]) {\n parser.writeTokens(this, tokens);\n },\n logUnrecognized: state.logUnrecognized.bind(state),\n isNodeOpen: state.isNodeOpen.bind(state),\n };\n\n // process raw text capsules\n let targetAst = {\n ...ast,\n blocks: resolvePandocBlockCapsuleText(ast.blocks, this.blockCapsuleFilters),\n };\n\n // detect line wrapping\n const lineWrapping = detectLineWrapping(targetAst);\n\n // resolve heading ids\n targetAst = resolveHeadingIds(targetAst, this.extensions);\n\n // write all tokens\n writer.writeTokens(targetAst.blocks);\n\n // return\n return {\n doc: state.doc(),\n line_wrapping: lineWrapping,\n unrecognized: state.unrecognized(),\n unparsed_meta: ast.meta,\n };\n }\n\n private writeTokens(writer: ProsemirrorWriter, tokens: PandocToken[]) {\n // pass through tokens filters\n let targetTokens = tokens;\n this.tokensFilters.forEach(filter => {\n targetTokens = filter(targetTokens, writer);\n });\n\n // process tokens\n targetTokens.forEach(tok => this.writeToken(writer, tok));\n }\n\n private writeToken(writer: ProsemirrorWriter, tok: PandocToken) {\n // process block-level capsules\n for (const filter of this.blockCapsuleFilters) {\n const capsuleText = filter.handleToken?.(tok);\n if (capsuleText) {\n const blockCapsule = parsePandocBlockCapsule(capsuleText);\n // run all of the text filters in case there was nesting\n blockCapsule.source = decodeBlockCapsuleText(blockCapsule.source, tok, this.blockCapsuleFilters);\n filter.writeNode(this.schema, writer, blockCapsule);\n return;\n }\n }\n\n // look for a handler.match function that wants to handle this token\n const handlers = this.handlers[tok.t] || [];\n for (const handler of handlers) {\n // It's not enough for a pandoc reader's preferred token to match the\n // current token; it's possible based on the `match` method for the\n // reader to decline to handle it.\n if (handler.match && handler.match(tok)) {\n handler.handler(writer, tok);\n return;\n }\n }\n\n // if we didn't find one, look for the default handler\n for (const handler of handlers) {\n if (!handler.match) {\n handler.handler(writer, tok);\n return;\n }\n }\n\n // log unrecognized token\n writer.logUnrecognized(tok.t);\n }\n\n private hasInlineHTMLWriter(html: string) {\n for (const reader of this.inlineHTMLReaders) {\n if (reader(this.schema, html)) {\n return true;\n }\n }\n return false;\n }\n\n private writeInlineHTML(writer: ProsemirrorWriter, html: string) {\n for (const reader of this.inlineHTMLReaders) {\n if (reader(this.schema, html, writer)) {\n return;\n }\n }\n }\n\n // create parser token handler functions based on the passed readers\n private createHandlers(readers: readonly PandocTokenReader[], blockReaders: readonly PandocBlockReaderFn[]) {\n const handlers: { [token: string]: ParserTokenHandlerCandidate[] } = {};\n\n for (const reader of readers) {\n // resolve children (provide default impl)\n const getChildren = reader.getChildren || ((tok: PandocToken) => tok.c);\n\n // resolve getAttrs (provide default imple)\n const getAttrs = reader.getAttrs ? reader.getAttrs : (tok: PandocToken) => ({});\n\n let handler: ParserTokenHandler;\n\n // see if there is a low-level handler\n if (reader.handler) {\n handler = reader.handler(this.schema);\n }\n\n // text\n else if (reader.text) {\n handler = (writer: ProsemirrorWriter, tok: PandocToken) => {\n if (reader.getText) {\n const text = reader.getText(tok);\n writer.writeText(text);\n }\n };\n\n // marks\n } else if (reader.mark) {\n handler = (writer: ProsemirrorWriter, tok: PandocToken) => {\n const markType = this.schema.marks[reader.mark as string];\n const mark = markType.create(getAttrs(tok));\n writer.openMark(mark);\n if (reader.getText) {\n writer.writeText(reader.getText(tok));\n } else {\n writer.writeTokens(getChildren(tok));\n }\n writer.closeMark(mark);\n };\n\n // blocks\n } else if (reader.block) {\n const nodeType = this.schema.nodes[reader.block];\n handler = (writer: ProsemirrorWriter, tok: PandocToken) => {\n // give the block readers first crack (e.g. handle a paragraph node with\n // a single image as a figure node)\n for (const blockReader of blockReaders) {\n if (blockReader(this.schema, tok, writer)) {\n return;\n }\n }\n\n writer.openNode(nodeType, getAttrs(tok));\n if (reader.getText) {\n writer.writeText(reader.getText(tok));\n } else {\n writer.writeTokens(getChildren(tok));\n }\n writer.closeNode();\n };\n\n // nodes\n } else if (reader.node) {\n const nodeType = this.schema.nodes[reader.node];\n handler = (writer: ProsemirrorWriter, tok: PandocToken) => {\n if (reader.getChildren) {\n writer.openNode(nodeType, getAttrs(tok));\n writer.writeTokens(getChildren(tok));\n writer.closeNode();\n } else {\n let content: ProsemirrorNode[] = [];\n if (reader.getText) {\n content = [this.schema.text(reader.getText(tok))];\n }\n writer.addNode(nodeType, getAttrs(tok), content);\n }\n };\n\n // code blocks\n } else if (reader.code_block) {\n handler = (writer: ProsemirrorWriter, tok: PandocToken) => {\n // type/attr/text\n const nodeType = this.schema.nodes.code_block;\n const attr: {} = pandocAttrReadAST(tok, kCodeBlockAttr);\n const text = tok.c[kCodeBlockText] as string;\n\n // write node\n writer.openNode(nodeType, attr);\n writer.writeText(text);\n writer.closeNode();\n };\n } else {\n throw new Error('pandoc reader was malformed or unrecognized');\n }\n\n // Ensure an array exists\n handlers[reader.token] = handlers[reader.token] || [];\n\n handlers[reader.token].push({\n match: reader.match,\n handler,\n });\n }\n return handlers;\n }\n}\n\nclass ParserState {\n private readonly schema: Schema;\n private readonly stack: ParserStackElement[];\n private readonly notes: ProsemirrorNode[];\n private marks: Mark[];\n private footnoteNumber: number;\n private unrecognizedTokens: string[];\n\n constructor(schema: Schema) {\n this.schema = schema;\n this.stack = [{ type: this.schema.nodes.body, attrs: {}, content: [] }];\n this.notes = [];\n this.marks = Mark.none;\n this.footnoteNumber = 1;\n this.unrecognizedTokens = [];\n }\n\n public doc(): ProsemirrorNode {\n const content: ProsemirrorNode[] = [];\n content.push(this.top().type.createAndFill(null, this.top().content) as ProsemirrorNode);\n content.push(this.schema.nodes.notes.createAndFill(null, this.notes) as ProsemirrorNode);\n return this.schema.topNodeType.createAndFill({}, content) as ProsemirrorNode;\n }\n\n public unrecognized(): string[] {\n return this.unrecognizedTokens;\n }\n\n public writeText(text: string) {\n if (!text) {\n return;\n }\n const nodes: ProsemirrorNode[] = this.top().content;\n const last: ProsemirrorNode = nodes[nodes.length - 1];\n const node: ProsemirrorNode = this.schema.text(text, this.marks);\n const merged: ProsemirrorNode | undefined = this.maybeMerge(last, node);\n if (last && merged) {\n nodes[nodes.length - 1] = merged;\n } else {\n nodes.push(node);\n }\n }\n\n public addNode(type: NodeType, attrs: {}, content: ProsemirrorNode[]) {\n const node: ProsemirrorNode | null | undefined = type.createAndFill(attrs, content, this.marks);\n if (!node) {\n return null;\n }\n if (this.stack.length) {\n if (type === this.schema.nodes.note) {\n this.notes.push(node);\n } else {\n this.top().content.push(node);\n }\n }\n return node;\n }\n\n public openNode(type: NodeType, attrs: {}) {\n this.stack.push({ type, attrs, content: [] });\n }\n\n public closeNode(): ProsemirrorNode {\n // get node info\n const info: ParserStackElement = this.stack.pop() as ParserStackElement;\n\n // clear marks if the node type isn't inline\n if (!info.type.isInline) {\n if (this.marks.length) {\n this.marks = Mark.none;\n }\n }\n\n return this.addNode(info.type, info.attrs, info.content) as ProsemirrorNode;\n }\n\n public openMark(mark: Mark) {\n this.marks = mark.addToSet(this.marks);\n }\n\n public closeMark(mark: Mark) {\n this.marks = mark.removeFromSet(this.marks);\n }\n\n public openNoteNode(ref: string) {\n this.openNode(this.schema.nodes.note, { ref, number: this.footnoteNumber++ });\n }\n\n public logUnrecognized(type: string) {\n if (!this.unrecognizedTokens.includes(type)) {\n this.unrecognizedTokens.push(type);\n }\n }\n\n public isNodeOpen(type: NodeType) {\n return this.stack.some(value => value.type === type);\n }\n\n private top(): ParserStackElement {\n return this.stack[this.stack.length - 1];\n }\n\n private maybeMerge(a: ProsemirrorNode, b: ProsemirrorNode): ProsemirrorNode | undefined {\n if (a && a.isText && b.isText && Mark.sameSet(a.marks, b.marks)) {\n return this.schema.text(((a.text as string) + b.text) as string, a.marks);\n } else {\n return undefined;\n }\n }\n}\n\n// determine what sort of line wrapping is used within the file\nfunction detectLineWrapping(ast: PandocAst): PandocLineWrapping {\n // look for soft breaks and classify them as column or sentence breaks\n let columnBreaks = 0;\n let sentenceBreaks = 0;\n let prevTok: PandocToken = { t: PandocTokenType.Null };\n forEachToken(ast.blocks, tok => {\n if (tok.t === PandocTokenType.SoftBreak) {\n if (\n prevTok.t === PandocTokenType.Str &&\n typeof prevTok.c === 'string' &&\n ['.', '?', '!'].includes(prevTok.c.charAt(prevTok.c.length - 1))\n ) {\n sentenceBreaks++;\n } else {\n columnBreaks++;\n }\n }\n prevTok = tok;\n });\n\n // need to have > 5 line breaks or more line breaks than blocks to trigger detection\n // (prevents 'over-detection' if there are stray few soft breaks)\n const lineBreaks = columnBreaks + sentenceBreaks;\n if (lineBreaks > 5 || lineBreaks > ast.blocks.length) {\n if (sentenceBreaks > columnBreaks) {\n return 'sentence';\n } else {\n return 'column';\n }\n } else {\n return 'none';\n }\n}\n\n// determine which heading ids are valid based on explicit headings contained in the\n// document and any headings targeted by links. remove any heading ids not so identified\nfunction resolveHeadingIds(ast: PandocAst, extensions: PandocExtensions) {\n // determine function we will use to create auto-identifiers\n const autoIdentifier = extensions.gfm_auto_identifiers ? gfmAutoIdentifier : pandocAutoIdentifier;\n\n // start with ids we know are valid (i.e. ones the user added to the doc)\n const headingIds = new Set((ast.heading_ids || []).map(id => id.toLocaleLowerCase()));\n\n // find ids referenced in links\n let astBlocks = mapTokens(ast.blocks, tok => {\n if (tok.t === PandocTokenType.Link) {\n const target = tok.c[kLinkTarget];\n const href = target[kLinkTargetUrl] as string;\n if (href.startsWith('#')) {\n // if we have support for implicit header references and shortcut reference links,\n // also check to see whether the link text resolves to the target (in that case\n // we don't need the explicit id). note that if that heading has an explicit\n // id defined then we also leave it alone.\n const text = stringifyTokens(tok.c[kLinkChildren], extensions.gfm_auto_identifiers);\n if (\n hasShortcutHeadingLinks(extensions) &&\n equalsIgnoreCase('#' + autoIdentifier(text, extensions.ascii_identifiers), href) &&\n !headingIds.has(href.toLocaleLowerCase())\n ) {\n // return a version of the link w/o the target\n return {\n t: PandocTokenType.Link,\n c: [tok.c[kLinkAttr], tok.c[kLinkChildren], ['#', tok.c[kLinkTarget][kLinkTargetTitle]]],\n };\n\n // otherwise note that it's a valid id\n } else {\n headingIds.add(href.toLocaleLowerCase());\n }\n }\n }\n // default to return token unmodified\n return tok;\n });\n\n // remove any heading ids not created by the user or required by a link\n astBlocks = mapTokens(ast.blocks, tok => {\n if (tok.t === PandocTokenType.Header) {\n const attr = pandocAttrReadAST(tok, kHeadingAttr);\n if (attr.id && !headingIds.has('#' + attr.id.toLocaleLowerCase())) {\n return {\n t: PandocTokenType.Header,\n c: [\n tok.c[kHeadingLevel],\n ['', tok.c[kHeadingAttr][kPandocAttrClasses], tok.c[kHeadingAttr][kPandocAttrKeyvalue]],\n tok.c[kHeadingChildren],\n ],\n };\n }\n }\n // default to just reflecting back the token\n return tok;\n });\n\n // return the ast\n return {\n ...ast,\n blocks: astBlocks,\n heading_ids: undefined,\n };\n}\n\ninterface ParserStackElement {\n type: NodeType;\n attrs: {};\n content: ProsemirrorNode[];\n}\n\ntype ParserTokenHandler = (writer: ProsemirrorWriter, tok: PandocToken) => void;\n\ninterface ParserTokenHandlerCandidate {\n match?: (tok: PandocToken) => boolean;\n handler: ParserTokenHandler;\n}\n","/*\n * pandoc_from_prosemirror.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Fragment, MarkType, Mark } from 'prosemirror-model';\n\nimport {\n PandocAst,\n PandocToken,\n PandocOutput,\n PandocNodeWriterFn,\n PandocNodeWriter,\n PandocMarkWriter,\n PandocApiVersion,\n PandocTokenType,\n PandocOutputOption,\n PandocExtensions,\n marksByPriority,\n} from '../api/pandoc';\n\nimport { PandocFormat, kGfmFormat } from '../api/pandoc_format';\nimport { PandocAttr } from '../api/pandoc_attr';\nimport { fragmentText } from '../api/fragment';\nimport { fancyQuotesToSimple } from '../api/quote';\n\nexport function pandocFromProsemirror(\n doc: ProsemirrorNode,\n apiVersion: PandocApiVersion,\n format: PandocFormat,\n nodeWriters: readonly PandocNodeWriter[],\n markWriters: readonly PandocMarkWriter[],\n) {\n const bodyNode = doc.child(0);\n const notesNode = doc.child(1);\n const writer = new PandocWriter(apiVersion, format, nodeWriters, markWriters, notesNode);\n writer.writeNodes(bodyNode);\n return writer.output();\n}\n\nclass PandocWriter implements PandocOutput {\n private readonly ast: PandocAst;\n private readonly format: PandocFormat;\n private readonly nodeWriters: { [key: string]: PandocNodeWriterFn };\n private readonly markWriters: { [key: string]: PandocMarkWriter };\n private readonly notes: { [key: string]: ProsemirrorNode };\n private readonly containers: any[][];\n private readonly activeMarks: MarkType[];\n private options: { [key: string]: boolean };\n\n public readonly extensions: PandocExtensions;\n\n private readonly escapeCharacters: string[] = [];\n private readonly manualEscapeCharacters: Map = new Map();\n private readonly preventEscapeCharacters: string[] = [];\n\n constructor(\n apiVersion: PandocApiVersion,\n format: PandocFormat,\n nodeWriters: readonly PandocNodeWriter[],\n markWriters: readonly PandocMarkWriter[],\n notes: ProsemirrorNode,\n ) {\n // save format and extensions\n this.format = format;\n this.extensions = format.extensions;\n // compute escape characters based on format\n this.initEscapeCharacters();\n // create maps of node and mark writers\n this.nodeWriters = {};\n nodeWriters.forEach((writer: PandocNodeWriter) => {\n this.nodeWriters[writer.name] = writer.write;\n });\n this.markWriters = {};\n markWriters.forEach((writer: PandocMarkWriter) => {\n this.markWriters[writer.name] = writer;\n });\n // create map of notes\n this.notes = {};\n notes.forEach((note: ProsemirrorNode) => {\n this.notes[note.attrs.ref] = note;\n });\n\n this.ast = {\n blocks: [],\n 'pandoc-api-version': apiVersion,\n meta: {},\n };\n this.containers = [this.ast.blocks];\n this.activeMarks = [];\n this.options = {\n writeSpaces: true,\n };\n }\n\n public output() {\n return {\n ast: this.ast,\n };\n }\n\n public write(value: any) {\n const container = this.containers[this.containers.length - 1];\n container.push(value);\n }\n\n public writeToken(type: PandocTokenType, content?: (() => void) | any) {\n const token: PandocToken = {\n t: type,\n };\n if (content !== undefined) {\n if (typeof content === 'function') {\n token.c = [];\n this.fill(token.c, content);\n } else {\n token.c = content;\n }\n }\n this.write(token);\n }\n\n public writeMark(type: PandocTokenType, parent: Fragment, expelEnclosingWhitespace = true) {\n // expel enclosing whitepsace if requested and if the fragment isn't 100% spaces\n if (expelEnclosingWhitespace) {\n // build output spec\n const output = {\n spaceBefore: false,\n nodes: new Array(),\n spaceAfter: false,\n };\n\n // if we see leading or trailing spaces we need to output them as tokens\n // and substitute text nodes\n parent.forEach((node: ProsemirrorNode, offset: number, index: number) => {\n // check for leading/trailing space in first/last nodes\n if (node.isText) {\n let outputText = node.textContent;\n\n // checking for leading space in first node\n if (output.nodes.length === 0 && node.textContent.match(/^\\s+/)) {\n output.spaceBefore = true;\n outputText = outputText.trimLeft();\n }\n\n // check for trailing space in last node\n if (index === parent.childCount - 1 && node.textContent.match(/\\s+$/)) {\n output.spaceAfter = true;\n outputText = outputText.trimRight();\n }\n\n // check for an entirely blank node\n if (outputText.match(/^\\s*$/)) {\n outputText = '';\n }\n\n // skip the node if it has nothing in it\n if (outputText.length > 0) {\n // if we modified the node's text then create a new node\n if (outputText !== node.textContent) {\n output.nodes.push(node.type.schema.text(outputText, node.marks));\n } else {\n output.nodes.push(node);\n }\n }\n } else {\n output.nodes.push(node);\n }\n });\n\n // output space tokens before/after mark as necessary\n if (output.nodes.length > 0) {\n if (output.spaceBefore) {\n this.writeToken(PandocTokenType.Space);\n }\n this.writeToken(type, () => {\n this.writeInlines(Fragment.from(output.nodes));\n });\n if (output.spaceAfter) {\n this.writeToken(PandocTokenType.Space);\n }\n }\n\n // normal codepath (not expelling existing whitespace)\n } else {\n this.writeToken(type, () => {\n this.writeInlines(parent);\n });\n }\n }\n\n public writeArray(content: () => void) {\n const arr: any[] = [];\n this.fill(arr, content);\n this.write(arr);\n }\n\n public writeAttr(id?: string, classes?: string[], keyvalue?: Array<[string, string]>) {\n this.write([id || '', classes || [], keyvalue || []]);\n }\n\n public writeText(text: string | null) {\n // determine which characters we shouldn't escape\n const preventEscapeCharacters = this.preventEscapeCharacters;\n\n if (text) {\n let textRun = '';\n const flushTextRun = () => {\n if (textRun) {\n // if this is a line block, convert leading nbsp to regular space,\n if (!this.options.writeSpaces) {\n textRun = textRun.replace(/(^|\\n)+(\\u00A0+)/g, (_match, p1, p2) => {\n return p1 + Array(p2.length + 1).join(' ');\n });\n }\n\n // reverse smart punctuation. pandoc does this autmoatically for markdown\n // writing w/ +smart, however this also results in nbsp's being inserted\n // after selected abbreviations like e.g. and Mr., and we don't want that\n // to happen for editing (b/c the nbsp's weren't put there by the user\n // and are not obviously visible)\n if (this.extensions.smart) {\n textRun = textRun\n .replace(/—/g, '---')\n .replace(/–/g, '--')\n .replace(/…/g, '...');\n }\n\n // we explicitly don't want fancy quotes in the editor\n textRun = fancyQuotesToSimple(textRun);\n\n this.writeToken(PandocTokenType.Str, textRun);\n textRun = '';\n }\n };\n for (let i = 0; i < text.length; i++) {\n const ch = text.charAt(i);\n if (this.options.writeSpaces && ch === ' ') {\n flushTextRun();\n this.writeToken(PandocTokenType.Space);\n } else if (preventEscapeCharacters.includes(ch)) {\n flushTextRun();\n this.writeRawMarkdown(ch);\n } else if (this.manualEscapeCharacters.has(ch)) {\n flushTextRun();\n this.writeRawMarkdown(this.manualEscapeCharacters.get(ch)!);\n } else {\n textRun += ch;\n }\n }\n flushTextRun();\n }\n }\n\n public writeLink(href: string, title: string, attr: PandocAttr | null, content: VoidFunction) {\n this.writeToken(PandocTokenType.Link, () => {\n // write attr if provided\n if (attr) {\n this.writeAttr(attr.id, attr.classes, attr.keyvalue);\n } else {\n this.writeAttr();\n }\n // write content\n this.writeArray(() => {\n content();\n });\n\n // write href\n this.write([href || '', title || '']);\n });\n }\n\n public writeNote(note: ProsemirrorNode) {\n // get corresponding note body\n const noteBody = this.notes[note.attrs.ref];\n\n // don't write empty footnotes (otherwise in block or section mode they gobble up the section below them)\n if (noteBody.textContent.trim().length > 0) {\n this.writeToken(PandocTokenType.Note, () => {\n this.writeNodes(noteBody);\n });\n }\n }\n\n public writeNode(node: ProsemirrorNode) {\n this.nodeWriters[node.type.name](this, node);\n }\n\n public writeNodes(parent: ProsemirrorNode) {\n parent.forEach(this.writeNode.bind(this));\n }\n\n public writeInlines(fragment: Fragment) {\n // get the marks from a node that are not already on the stack of active marks\n const nodeMarks = (node: ProsemirrorNode) => {\n // get marks ordered by writer priority\n let marks = marksByPriority(node.marks, this.markWriters);\n\n // remove active marks\n for (const activeMark of this.activeMarks) {\n marks = activeMark.removeFromSet(marks);\n }\n\n // return marks\n return marks;\n };\n\n // helpers to iterate through the nodes (sans any marks already on the stack)\n let currentChild = 0;\n const nextNode = () => {\n const childIndex = currentChild;\n currentChild++;\n return {\n node: fragment.child(childIndex),\n marks: nodeMarks(fragment.child(childIndex)),\n };\n };\n const putBackNode = () => {\n currentChild--;\n };\n\n // iterate through the nodes\n while (currentChild < fragment.childCount) {\n // get the next node\n let next = nextNode();\n\n // if there are active marks then collect them up and call the mark handler\n // with all nodes that it contains, otherwise just process it as a plain\n // unmarked node\n if (next.marks.length > 0) {\n // get the mark and start building a list of marked nodes\n const mark = next.marks[0];\n const markedNodes: ProsemirrorNode[] = [next.node];\n\n // inner iteration to find nodes that have this mark\n while (currentChild < fragment.childCount) {\n next = nextNode();\n if (mark.type.isInSet(next.marks)) {\n markedNodes.push(next.node);\n } else {\n // no mark found, \"put back\" the node\n putBackNode();\n break;\n }\n }\n\n // call the mark writer after noting that this mark is active (which\n // will cause subsequent recursive invocations of this function to\n // not re-process this mark)\n this.activeMarks.push(mark.type);\n this.markWriters[mark.type.name].write(this, mark, Fragment.from(markedNodes));\n this.activeMarks.pop();\n } else {\n // ordinary unmarked node, call the node writer\n this.nodeWriters[next.node.type.name](this, next.node);\n }\n }\n }\n\n public writeRawMarkdown(markdown: Fragment | string, escapeSymbols?: boolean) {\n // collect markdown text if necessary\n let md = markdown instanceof Fragment ? fragmentText(markdown) : markdown;\n\n // escape symbols if requested\n if (escapeSymbols) {\n const escaped: string[] = [];\n for (let i = 0; i < md.length; i++) {\n const ch = md.charAt(i);\n if (this.escapeCharacters.includes(ch)) {\n escaped.push('\\\\' + ch);\n } else {\n escaped.push(ch);\n }\n }\n md = escaped.join('');\n }\n\n this.writeToken(PandocTokenType.RawInline, () => {\n this.write('markdown');\n this.write(md);\n });\n }\n\n public withOption(option: PandocOutputOption, value: boolean, f: () => void) {\n const previousValue = this.options[option];\n this.options[option] = value;\n f();\n this.options[option] = previousValue;\n }\n\n private fill(container: any[], content: () => void) {\n this.containers.push(container);\n content();\n this.containers.pop();\n }\n\n private initEscapeCharacters() {\n // gfm disallows [] escaping so that MediaWiki style page links (e.g. [[MyPage]]) work as expected\n // tex_math_single_backslash does not allow escaping of [] or () (as that conflicts with the math syntax)\n if (this.format.mode === kGfmFormat || this.format.extensions.tex_math_single_backslash) {\n this.preventEscapeCharacters.push('[', ']');\n }\n\n // tex_math_single_backslash does not allow escaping of [] or () (as that conflicts with the math syntax)\n if (this.format.extensions.tex_math_single_backslash) {\n this.preventEscapeCharacters.push('(', ')');\n }\n\n // filter standard escape characters w/ preventEscapeCharacters\n const allEscapeCharacters = ['\\\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!'];\n if (this.format.extensions.angle_brackets_escapable) {\n allEscapeCharacters.push('<');\n }\n this.escapeCharacters.push(...allEscapeCharacters.filter(ch => !this.preventEscapeCharacters.includes(ch)));\n\n // Manual escape characters are ones we can't rely on pandoc to automatically escape (b/c\n // they represent valid syntax for a markdown extension, e.g. '@' for citations).\n // For '@', since we already do special writing for spans we know are citation ids, we can\n // globally prescribe escaping behavior and never stomp over a citation. We also check\n // that '@' can be escaped in the current markdown format, and if not use an html escape.\n const atEscape = this.extensions.all_symbols_escapable ? '\\\\@' : '@';\n this.manualEscapeCharacters.set('@', atEscape);\n }\n}\n","/*\n * fragment.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Fragment } from 'prosemirror-model';\n\nexport function fragmentText(fragment: Fragment, unemoji = false) {\n let text = '';\n fragment.forEach(node => {\n const emjojiMark = node.marks.find(mark => mark.type === node.type.schema.marks.emoji);\n if (unemoji && emjojiMark) {\n return (text = text + (emjojiMark.attrs.emojihint || node.textContent));\n } else {\n return (text = text + node.textContent);\n }\n });\n return text;\n}\n","/*\n * editor-extensions.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { InputRule } from 'prosemirror-inputrules';\nimport { Schema } from 'prosemirror-model';\nimport { Plugin } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { ProsemirrorCommand } from '../api/command';\nimport { PandocMark } from '../api/mark';\nimport { PandocNode, CodeViewOptions } from '../api/node';\nimport { Extension, ExtensionFn, ExtensionContext } from '../api/extension';\nimport { BaseKeyBinding } from '../api/basekeys';\nimport { OmniInserter } from '../api/omni_insert';\nimport { AppendTransactionHandler, AppendMarkTransactionHandler } from '../api/transaction';\nimport { FixupFn } from '../api/fixup';\nimport {\n PandocTokenReader,\n PandocMarkWriter,\n PandocNodeWriter,\n PandocPreprocessorFn,\n PandocPostprocessorFn,\n PandocBlockReaderFn,\n PandocInlineHTMLReaderFn,\n PandocTokensFilterFn,\n} from '../api/pandoc';\nimport { PandocBlockCapsuleFilter } from '../api/pandoc_capsule';\nimport { markInputRuleFilter } from '../api/input_rule';\nimport { CompletionHandler } from '../api/completion';\n\n// required extensions (base non-customiziable pandoc nodes/marks + core behaviors)\nimport nodeText from '../nodes/text';\nimport nodeParagraph from '../nodes/paragraph';\nimport nodeHeading from '../nodes/heading';\nimport nodeBlockquote from '../nodes/blockquote';\nimport nodeCodeBlock from '../nodes/code_block';\nimport nodeLists from '../nodes/list/list';\nimport nodeImage from '../nodes/image/image';\nimport nodeFigure from '../nodes/image/figure';\nimport nodeHr from '../nodes/hr';\nimport nodeHardBreak from '../nodes/hard_break';\nimport nodeNull from '../nodes/null';\nimport markEm from '../marks/em';\nimport markStrong from '../marks/strong';\nimport markCode from '../marks/code';\nimport markLink from '../marks/link/link';\nimport behaviorHistory from '../behaviors/history';\nimport behaviorSelectAll from '../behaviors/select_all';\nimport behaviorCursor from '../behaviors/cursor';\nimport behaviorFind from '../behaviors/find';\nimport behaviorSpellingInteractive from '../behaviors/spelling/spelling-interactive';\nimport behaviorClearFormatting from '../behaviors/clear_formatting';\n\n// behaviors\nimport behaviorSmarty from '../behaviors/smarty';\nimport behaviorAttrDuplicateId from '../behaviors/attr_duplicate_id';\nimport behaviorTrailingP from '../behaviors/trailing_p';\nimport behaviorEmptyMark from '../behaviors/empty_mark';\nimport behaviorEscapeMark from '../behaviors/escape_mark';\nimport behaviorOutline from '../behaviors/outline';\nimport beahviorCodeBlockInput from '../behaviors/code_block_input';\nimport behaviorPasteText from '../behaviors/paste_text';\nimport behaviorBottomPadding from '../behaviors/bottom_padding';\nimport behaviorInsertSymbol from '../behaviors/insert_symbol/insert_symbol-plugin-symbol';\nimport behaviorInsertSymbolEmoji from '../behaviors/insert_symbol/insert_symbol-plugin-emoji';\nimport beahviorInsertSpecialCharacters from '../behaviors/insert_symbol/insert_special_characters';\nimport behaviorNbsp from '../behaviors/nbsp';\nimport behaviorRemoveSection from '../behaviors/remove_section';\n\n// marks\nimport markStrikeout from '../marks/strikeout';\nimport markSuperscript from '../marks/superscript';\nimport markSubscript from '../marks/subscript';\nimport markSmallcaps from '../marks/smallcaps';\nimport markUnderline from '../marks/underline';\nimport markRawInline from '../marks/raw_inline/raw_inline';\nimport markRawTex from '../marks/raw_inline/raw_tex';\nimport markRawHTML from '../marks/raw_inline/raw_html';\nimport markMath from '../marks/math/math';\nimport markCite from '../marks/cite/cite';\nimport markSpan from '../marks/span';\nimport markXRef from '../marks/xref/xref';\nimport markHTMLComment from '../marks/raw_inline/raw_html_comment';\nimport markShortcode from '../marks/shortcode';\nimport markEmoji from '../marks/emoji/emoji';\nimport { markOmniInsert } from '../behaviors/omni_insert/omni_insert';\n\n// nodes\nimport nodeFootnote from '../nodes/footnote/footnote';\nimport nodeRawBlock from '../nodes/raw_block';\nimport nodeYamlMetadata from '../nodes/yaml_metadata/yaml_metadata';\nimport nodeRmdCodeChunk from '../nodes/rmd_chunk/rmd_chunk';\nimport nodeDiv from '../nodes/div';\nimport nodeLineBlock from '../nodes/line_block';\nimport nodeTable from '../nodes/table/table';\nimport nodeDefinitionList from '../nodes/definition_list/definition_list';\nimport nodeShortcodeBlock from '../nodes/shortcode_block';\nimport nodeHtmlPreserve from '../nodes/html_preserve';\n\n// extension/plugin factories\nimport { acePlugins } from '../optional/ace/ace';\nimport { attrEditExtension } from '../behaviors/attr_edit/attr_edit';\nimport { codeViewClipboardPlugin } from '../api/code';\n\nexport function initExtensions(context: ExtensionContext, extensions?: readonly Extension[]): ExtensionManager {\n // create extension manager\n const manager = new ExtensionManager(context);\n\n // required extensions\n manager.register([\n nodeText,\n nodeParagraph,\n nodeHeading,\n nodeBlockquote,\n nodeLists,\n nodeCodeBlock,\n nodeImage,\n nodeFigure,\n nodeHr,\n nodeHardBreak,\n nodeNull,\n markEm,\n markStrong,\n markCode,\n markLink,\n behaviorHistory,\n behaviorSelectAll,\n behaviorCursor,\n behaviorFind,\n behaviorSpellingInteractive,\n behaviorClearFormatting,\n ]);\n\n // optional extensions\n manager.register([\n // behaviors\n behaviorSmarty,\n behaviorAttrDuplicateId,\n behaviorTrailingP,\n behaviorEmptyMark,\n behaviorEscapeMark,\n behaviorOutline,\n beahviorCodeBlockInput,\n behaviorPasteText,\n behaviorBottomPadding,\n behaviorInsertSymbol,\n behaviorInsertSymbolEmoji,\n beahviorInsertSpecialCharacters,\n behaviorNbsp,\n behaviorRemoveSection,\n\n // nodes\n nodeDiv,\n nodeFootnote,\n nodeYamlMetadata,\n nodeRmdCodeChunk,\n nodeTable,\n nodeDefinitionList,\n nodeLineBlock,\n nodeRawBlock,\n nodeShortcodeBlock,\n nodeHtmlPreserve,\n\n // marks\n markUnderline,\n markStrikeout,\n markSuperscript,\n markSubscript,\n markSmallcaps,\n markHTMLComment,\n markRawTex,\n markRawHTML,\n markRawInline,\n markMath,\n markCite,\n markSpan,\n markXRef,\n markShortcode,\n markEmoji,\n markOmniInsert,\n ]);\n\n // register external extensions\n if (extensions) {\n manager.register(extensions);\n }\n\n // additional extensions dervied from other extensions (e.g. extensions that have registered attr editors)\n // note that all of these take a callback to access the manager -- this is so that if an extension earlier\n // in the chain registers something the later extensions are able to see it\n manager.register([\n // bindings to 'Edit Attribute' command and UI adornment\n attrEditExtension(context.pandocExtensions, context.ui, manager.attrEditors()),\n ]);\n\n // additional plugins derived from extensions\n const codeViews = manager.codeViews();\n const plugins: Plugin[] = [];\n if (context.options.codeEditor === 'ace') {\n plugins.push(...acePlugins(codeViews, context));\n }\n plugins.push(codeViewClipboardPlugin(codeViews));\n\n // register plugins\n manager.registerPlugins(plugins);\n\n // return manager\n return manager;\n}\n\nexport class ExtensionManager {\n private context: ExtensionContext;\n private extensions: Extension[];\n\n public constructor(context: ExtensionContext) {\n this.context = context;\n this.extensions = [];\n }\n\n public register(extensions: ReadonlyArray, priority = false): void {\n extensions.forEach(extension => {\n if (typeof extension === 'function') {\n const ext = extension(this.context);\n if (ext) {\n if (priority) {\n this.extensions.unshift(ext);\n } else {\n this.extensions.push(ext);\n }\n }\n } else {\n if (priority) {\n this.extensions.unshift(extension);\n } else {\n this.extensions.push(extension);\n }\n }\n });\n }\n\n public registerPlugins(plugins: Plugin[], priority = false) {\n this.register([{ plugins: () => plugins }], priority);\n }\n\n public pandocMarks(): readonly PandocMark[] {\n return this.collect(extension => extension.marks);\n }\n\n public pandocNodes(): readonly PandocNode[] {\n return this.collect(extension => extension.nodes);\n }\n\n public pandocPreprocessors(): readonly PandocPreprocessorFn[] {\n return this.collectFrom({\n node: node => [node.pandoc.preprocessor],\n });\n }\n\n public pandocPostprocessors(): readonly PandocPostprocessorFn[] {\n return this.pandocReaders().flatMap(reader => (reader.postprocessor ? [reader.postprocessor] : []));\n }\n\n public pandocTokensFilters(): readonly PandocTokensFilterFn[] {\n return this.collectFrom({\n node: node => [node.pandoc.tokensFilter],\n });\n }\n\n public pandocBlockReaders(): readonly PandocBlockReaderFn[] {\n return this.collectFrom({\n node: node => [node.pandoc.blockReader],\n });\n }\n\n public pandocInlineHTMLReaders(): readonly PandocInlineHTMLReaderFn[] {\n return this.collectFrom({\n mark: mark => [mark.pandoc.inlineHTMLReader],\n node: node => [node.pandoc.inlineHTMLReader],\n });\n }\n\n public pandocBlockCapsuleFilters(): readonly PandocBlockCapsuleFilter[] {\n return this.collectFrom({\n node: node => [node.pandoc.blockCapsuleFilter],\n });\n }\n\n public pandocReaders(): readonly PandocTokenReader[] {\n return this.collectFrom({\n mark: mark => mark.pandoc.readers,\n node: node => node.pandoc.readers ?? [],\n });\n }\n\n public pandocMarkWriters(): readonly PandocMarkWriter[] {\n return this.collectFrom({\n mark: mark => [{ name: mark.name, ...mark.pandoc.writer }],\n });\n }\n\n public pandocNodeWriters(): readonly PandocNodeWriter[] {\n return this.collectFrom({\n node: node => {\n return node.pandoc.writer ? [{ name: node.name, write: node.pandoc.writer! }] : [];\n },\n });\n }\n\n public commands(schema: Schema): readonly ProsemirrorCommand[] {\n return this.collect(extension => extension.commands?.(schema));\n }\n\n public omniInserters(schema: Schema): OmniInserter[] {\n const omniInserters: OmniInserter[] = [];\n const commands = this.commands(schema);\n commands.forEach(command => {\n if (command.omniInsert) {\n omniInserters.push({\n ...command.omniInsert,\n id: command.id,\n command: command.execute,\n });\n }\n });\n return omniInserters;\n }\n\n public codeViews() {\n const views: { [key: string]: CodeViewOptions } = {};\n this.pandocNodes().forEach((node: PandocNode) => {\n if (node.code_view) {\n views[node.name] = node.code_view;\n }\n });\n return views;\n }\n\n public attrEditors() {\n return this.collectFrom({\n node: node => [node.attr_edit?.()],\n });\n }\n\n public baseKeys(schema: Schema): readonly BaseKeyBinding[] {\n return this.collect(extension => extension.baseKeys?.(schema));\n }\n\n public appendTransactions(schema: Schema): readonly AppendTransactionHandler[] {\n return this.collect(extension => extension.appendTransaction?.(schema));\n }\n\n public appendMarkTransactions(schema: Schema): readonly AppendMarkTransactionHandler[] {\n return this.collect(extension => extension.appendMarkTransaction?.(schema));\n }\n\n public plugins(schema: Schema): readonly Plugin[] {\n return this.collect(extension => extension.plugins?.(schema));\n }\n\n public fixups(schema: Schema, view: EditorView): readonly FixupFn[] {\n return this.collect(extension => extension.fixups?.(schema, view));\n }\n\n public completionHandlers(): readonly CompletionHandler[] {\n return this.collect(extension => extension.completionHandlers?.());\n }\n\n // NOTE: return value not readonly b/c it will be fed directly to a\n // Prosemirror interface that doesn't take readonly\n public inputRules(schema: Schema): InputRule[] {\n const markFilter = markInputRuleFilter(schema, this.pandocMarks());\n return this.collect(extension => extension.inputRules?.(schema, markFilter));\n }\n\n private collect(collector: (extension: Extension) => readonly T[] | undefined) {\n return this.collectFrom({\n extension: extension => collector(extension) ?? [],\n });\n }\n\n /**\n * Visits extensions in order of registration, providing optional callbacks\n * for extension, mark, and node. The return value of callbacks should be\n * arrays of (T | undefined | null); these will all be concatenated together,\n * with the undefined and nulls filtered out.\n *\n * @param visitor Object containing callback methods for the different\n * extension parts.\n */\n private collectFrom(visitor: {\n extension?: (extension: Extension) => ReadonlyArray;\n mark?: (mark: PandocMark) => ReadonlyArray;\n node?: (node: PandocNode) => ReadonlyArray;\n }): T[] {\n const results: Array = [];\n\n this.extensions.forEach(extension => {\n if (visitor.extension) {\n results.push(...visitor.extension(extension));\n }\n if (visitor.mark && extension.marks) {\n results.push(...extension.marks.flatMap(visitor.mark));\n }\n if (visitor.node && extension.nodes) {\n results.push(...extension.nodes.flatMap(visitor.node));\n }\n });\n\n return results.filter(value => typeof value !== 'undefined' && value !== null) as T[];\n }\n}\n","/*\n * text.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport { PandocOutput, PandocToken, PandocTokenType, ProsemirrorWriter } from '../api/pandoc';\nimport { ExtensionContext } from '../api/extension';\nimport { kQuoteType, QuoteType, kQuoteChildren, fancyQuotesToSimple } from '../api/quote';\n\nconst extension = (context: ExtensionContext) => {\n const readText = (text: string) => {\n // we explicitly don't want fancy quotes in the editor\n text = fancyQuotesToSimple(text);\n\n if (context.pandocExtensions.smart) {\n return text\n .replace(/---/g, '—')\n .replace(/--/g, '–')\n .replace(/\\.\\.\\./g, '…');\n } else {\n return text;\n }\n };\n\n return {\n nodes: [\n {\n name: 'text',\n spec: {\n group: 'inline',\n toDOM(node: ProsemirrorNode): any {\n return node.text;\n },\n },\n pandoc: {\n readers: [\n { token: PandocTokenType.Str, text: true, getText: (t: PandocToken) => readText(t.c) },\n { token: PandocTokenType.Space, text: true, getText: () => ' ' },\n { token: PandocTokenType.SoftBreak, text: true, getText: () => ' ' },\n {\n token: PandocTokenType.Quoted,\n handler: () => (writer: ProsemirrorWriter, tok: PandocToken) => {\n const type = tok.c[kQuoteType].t;\n const quote = type === QuoteType.SingleQuote ? \"'\" : '\"';\n writer.writeTokens([{ t: 'Str', c: quote }, ...tok.c[kQuoteChildren], { t: 'Str', c: quote }]);\n },\n },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n const text = node.textContent;\n output.writeText(text);\n },\n },\n },\n ],\n };\n};\n\nexport default extension;\n","/*\n * paragraph.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\n\nimport { BlockCommand, EditorCommandId, ProsemirrorCommand } from '../api/command';\nimport { Extension } from '../api/extension';\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\nimport { insertParagraph } from '../api/paragraph';\nimport { EditorUI } from '../api/ui';\nimport { OmniInsertGroup } from '../api/omni_insert';\n\nconst extension: Extension = {\n nodes: [\n {\n name: 'paragraph',\n spec: {\n content: 'inline*',\n group: 'block list_item_block',\n parseDOM: [{ tag: 'p' }],\n toDOM() {\n return ['p', 0];\n },\n },\n pandoc: {\n readers: [\n { token: PandocTokenType.Para, block: 'paragraph' },\n { token: PandocTokenType.Plain, block: 'paragraph' },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.Para, () => {\n output.writeInlines(node.content);\n });\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [\n new BlockCommand(EditorCommandId.Paragraph, ['Mod-Alt-0'], schema.nodes.paragraph, schema.nodes.paragraph),\n new InsertParagraphCommand(),\n ];\n },\n};\n\nclass InsertParagraphCommand extends ProsemirrorCommand {\n constructor() {\n super(EditorCommandId.ParagraphInsert, [], insertParagraph);\n }\n}\n\nexport default extension;\n","/*\n * paragraph.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorState, Transaction } from 'prosemirror-state';\n\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { canInsertNode } from './node';\n\nexport function insertParagraph(state: EditorState, dispatch?: (tr: Transaction) => void) {\n const schema = state.schema;\n\n if (!canInsertNode(state, schema.nodes.paragraph)) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n tr.replaceSelectionWith(schema.nodes.paragraph.create());\n setTextSelection(state.selection.from + 1, 1)(tr);\n dispatch(tr);\n }\n\n return true;\n}\n","/*\n * heading.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { textblockTypeInputRule, InputRule } from 'prosemirror-inputrules';\nimport { Node as ProsemirrorNode, Schema, NodeType, Fragment } from 'prosemirror-model';\nimport { EditorState } from 'prosemirror-state';\nimport { findParentNode, findParentNodeOfType } from 'prosemirror-utils';\n\nimport { PandocOutput, PandocToken, PandocTokenType } from '../api/pandoc';\nimport { EditorCommandId, toggleBlockType, ProsemirrorCommand } from '../api/command';\nimport { Extension, ExtensionContext } from '../api/extension';\nimport {\n pandocAttrSpec,\n pandocAttrParseDom,\n pandocAttrToDomAttr,\n pandocAttrReadAST,\n pandocAttrParseText,\n} from '../api/pandoc_attr';\nimport { uuidv4 } from '../api/util';\nimport { EditorUI } from '../api/ui';\nimport { OmniInsert, OmniInsertGroup } from '../api/omni_insert';\nimport { emptyNodePlaceholderPlugin } from '../api/placeholder';\nimport { kHeadingLevel, kHeadingAttr, kHeadingChildren } from '../api/heading';\n\nconst kHeadingLevels = [1, 2, 3, 4, 5, 6];\n\nconst extension = (context: ExtensionContext): Extension => {\n const { pandocExtensions, format, ui } = context;\n\n const headingAttr = pandocExtensions.header_attributes || pandocExtensions.mmd_header_identifiers;\n\n return {\n nodes: [\n {\n name: 'heading',\n spec: {\n attrs: {\n level: { default: 1 },\n link: { default: null },\n navigation_id: { default: null },\n ...(headingAttr ? pandocAttrSpec : {}),\n },\n content: 'inline*',\n group: 'block',\n defining: true,\n parseDOM: [\n { tag: 'h1', getAttrs: headingAttrs(1, headingAttr) },\n { tag: 'h2', getAttrs: headingAttrs(2, headingAttr) },\n { tag: 'h3', getAttrs: headingAttrs(3, headingAttr) },\n { tag: 'h4', getAttrs: headingAttrs(4, headingAttr) },\n { tag: 'h5', getAttrs: headingAttrs(5, headingAttr) },\n { tag: 'h6', getAttrs: headingAttrs(6, headingAttr) },\n ],\n toDOM(node) {\n const attr = headingAttr ? pandocAttrToDomAttr(node.attrs) : {};\n attr.class = (attr.class || '').concat(' pm-heading');\n return [\n 'h' + node.attrs.level,\n {\n 'data-link': node.attrs.link,\n ...attr,\n },\n\n 0,\n ];\n },\n },\n\n attr_edit: () => {\n if (headingAttr) {\n return {\n type: (schema: Schema) => schema.nodes.heading,\n offset: {\n top: 5,\n right: 10,\n },\n };\n } else {\n return null;\n }\n },\n\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Header,\n block: 'heading',\n getAttrs: (tok: PandocToken) => ({\n level: tok.c[kHeadingLevel],\n navigation_id: uuidv4(),\n ...(headingAttr ? pandocAttrReadAST(tok, kHeadingAttr) : {}),\n }),\n getChildren: (tok: PandocToken) => tok.c[kHeadingChildren],\n },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.Header, () => {\n output.write(node.attrs.level);\n if (headingAttr) {\n output.writeAttr(node.attrs.id, node.attrs.classes, node.attrs.keyvalue);\n } else {\n output.writeAttr();\n }\n output.writeArray(() => {\n if (node.attrs.level === 1 && format.rmdExtensions.bookdownPart) {\n writeBookdownH1(output, node);\n } else {\n output.writeInlines(node.content);\n }\n });\n });\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [\n new HeadingCommand(schema, EditorCommandId.Heading1, 1, heading1OmniInsert(ui)),\n new HeadingCommand(schema, EditorCommandId.Heading2, 2, heading2OmniInsert(ui)),\n new HeadingCommand(schema, EditorCommandId.Heading3, 3, heading3OmniInsert(ui)),\n new HeadingCommand(schema, EditorCommandId.Heading4, 4, heading4OmniInsert(ui)),\n new HeadingCommand(schema, EditorCommandId.Heading5, 5),\n new HeadingCommand(schema, EditorCommandId.Heading6, 6),\n ];\n },\n\n inputRules: (schema: Schema) => {\n const rules = [\n textblockTypeInputRule(\n new RegExp('^(#{1,' + kHeadingLevels.length + '})\\\\s$'),\n schema.nodes.heading,\n match => ({\n level: match[1].length,\n navigation_id: uuidv4(),\n }),\n ),\n ];\n\n if (headingAttr) {\n rules.push(headingAttributeInputRule(schema));\n }\n\n return rules;\n },\n\n plugins: (schema: Schema) => {\n return [emptyHeadingPlaceholderPlugin(schema.nodes.heading, ui)];\n },\n };\n};\n\nfunction headingAttributeInputRule(schema: Schema) {\n return new InputRule(/ {([^}]+)}$/, (state: EditorState, match: string[], start: number, end: number) => {\n // only fire in headings\n const heading = findParentNodeOfType(schema.nodes.heading)(state.selection);\n if (heading) {\n // try to parse the attributes\n const attrs = pandocAttrParseText(match[1]);\n if (attrs) {\n const tr = state.tr;\n tr.setNodeMarkup(heading.pos, undefined, {\n ...heading.node.attrs,\n ...attrs,\n });\n tr.deleteRange(start + 1, end);\n return tr;\n } else {\n return null;\n }\n } else {\n return null;\n }\n });\n}\n\nclass HeadingCommand extends ProsemirrorCommand {\n public readonly nodeType: NodeType;\n public readonly level: number;\n\n constructor(schema: Schema, id: EditorCommandId, level: number, omniInsert?: OmniInsert) {\n super(id, ['Mod-Alt-' + level], headingCommandFn(schema, level), omniInsert);\n this.nodeType = schema.nodes.heading;\n this.level = level;\n }\n\n public isActive(state: EditorState) {\n const predicate = (n: ProsemirrorNode) => n.type === this.nodeType && n.attrs.level === this.level;\n const node = findParentNode(predicate)(state.selection);\n return !!node;\n }\n}\n\nfunction heading1OmniInsert(ui: EditorUI) {\n return headingOmniInsert(ui, 1, ui.context.translateText('Top level heading'), [\n ui.images.omni_insert?.heading1!,\n ui.images.omni_insert?.heading1_dark!,\n ]);\n}\n\nfunction heading2OmniInsert(ui: EditorUI) {\n return headingOmniInsert(ui, 2, ui.context.translateText('Section heading'), [\n ui.images.omni_insert?.heading2!,\n ui.images.omni_insert?.heading2_dark!,\n ]);\n}\n\nfunction heading3OmniInsert(ui: EditorUI) {\n return headingOmniInsert(ui, 3, ui.context.translateText('Sub-section heading'), [\n ui.images.omni_insert?.heading3!,\n ui.images.omni_insert?.heading3_dark!,\n ]);\n}\n\nfunction heading4OmniInsert(ui: EditorUI) {\n return headingOmniInsert(ui, 4, ui.context.translateText('Smaller heading'), [\n ui.images.omni_insert?.heading4!,\n ui.images.omni_insert?.heading4_dark!,\n ]);\n}\n\nfunction headingOmniInsert(ui: EditorUI, level: number, description: string, images: [string, string]): OmniInsert {\n return {\n name: headingName(ui, level),\n description,\n group: OmniInsertGroup.Headings,\n image: () => (ui.prefs.darkMode() ? images[1] : images[0]),\n };\n}\n\nfunction headingName(ui: EditorUI, level: number) {\n const kHeadingPrefix = ui.context.translateText('Heading');\n return `${kHeadingPrefix} ${level}`;\n}\n\nfunction headingCommandFn(schema: Schema, level: number) {\n return toggleBlockType(schema.nodes.heading, schema.nodes.paragraph, { level });\n}\n\n// function for getting attrs\nfunction headingAttrs(level: number, pandocAttrSupported: boolean) {\n return (dom: Node | string) => {\n const el = dom as Element;\n return {\n level,\n 'data-link': el.getAttribute('data-link'),\n ...(pandocAttrSupported ? pandocAttrParseDom(el, {}) : {}),\n };\n };\n}\n\nfunction emptyHeadingPlaceholderPlugin(nodeType: NodeType, ui: EditorUI) {\n return emptyNodePlaceholderPlugin(nodeType, node => headingName(ui, node.attrs.level));\n}\n\n// write a bookdown (PART) H1 w/o spurious \\\nfunction writeBookdownH1(output: PandocOutput, node: ProsemirrorNode) {\n // see if this is a (PART\\*). note we also match and replay any text\n // before the first ( in case the cursor sentinel ended up there\n const partMatch = node.textContent.match(/^([^()]*)\\(PART\\\\\\*\\)/);\n if (partMatch) {\n const schema = node.type.schema;\n output.writeInlines(Fragment.from(schema.text(partMatch[1] + '(PART*)')));\n output.writeInlines(node.content.cut(partMatch[0].length));\n } else {\n output.writeInlines(node.content);\n }\n}\n\nexport default extension;\n","/*\n * blockquote.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { wrappingInputRule } from 'prosemirror-inputrules';\nimport { Node as ProsemirrorNode, Schema, DOMOutputSpec } from 'prosemirror-model';\n\nimport { WrapCommand, EditorCommandId } from '../api/command';\nimport { ExtensionContext } from '../api/extension';\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\nimport { EditorUI } from '../api/ui';\nimport { OmniInsertGroup } from '../api/omni_insert';\n\nconst extension = (context: ExtensionContext) => {\n const { ui } = context;\n\n return {\n nodes: [\n {\n name: 'blockquote',\n spec: {\n content: 'block+',\n group: 'block',\n defining: true,\n parseDOM: [{ tag: 'blockquote' }],\n toDOM(): DOMOutputSpec {\n return ['blockquote', { class: 'pm-blockquote pm-block-border-color' }, 0];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.BlockQuote,\n block: 'blockquote',\n },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.BlockQuote, () => {\n output.writeNodes(node);\n });\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [new WrapCommand(EditorCommandId.Blockquote, [], schema.nodes.blockquote, {}, blockquoteOmniInsert(ui))];\n },\n\n inputRules: (schema: Schema) => {\n return [wrappingInputRule(/^\\s*>\\s$/, schema.nodes.blockquote)];\n },\n };\n};\n\nfunction blockquoteOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Blockquote'),\n description: ui.context.translateText('Section quoted from another source'),\n group: OmniInsertGroup.Blocks,\n priority: 8,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.blockquote_dark! : ui.images.omni_insert?.blockquote!),\n };\n}\n\nexport default extension;\n","/*\n * code_block.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\nimport { newlineInCode, exitCode } from 'prosemirror-commands';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { findParentNodeOfType } from 'prosemirror-utils';\n\nimport { BlockCommand, EditorCommandId, ProsemirrorCommand, toggleBlockType } from '../api/command';\nimport { Extension, ExtensionContext } from '../api/extension';\nimport { BaseKey } from '../api/basekeys';\nimport { codeNodeSpec } from '../api/code';\nimport { PandocOutput, PandocTokenType, PandocExtensions } from '../api/pandoc';\nimport { pandocAttrSpec, pandocAttrParseDom, pandocAttrToDomAttr } from '../api/pandoc_attr';\nimport { PandocCapabilities } from '../api/pandoc_capabilities';\nimport { EditorUI } from '../api/ui';\nimport { CodeBlockProps } from '../api/ui-dialogs';\nimport { hasFencedCodeBlocks } from '../api/pandoc_format';\nimport { precedingListItemInsertPos, precedingListItemInsert } from '../api/list';\nimport { EditorOptions } from '../api/options';\nimport { OmniInsertGroup } from '../api/omni_insert';\n\nconst extension = (context: ExtensionContext): Extension => {\n const { pandocExtensions, pandocCapabilities, ui, options } = context;\n\n const hasAttr = hasFencedCodeBlocks(pandocExtensions);\n\n return {\n nodes: [\n {\n name: 'code_block',\n\n spec: {\n ...codeNodeSpec(),\n attrs: { ...(hasAttr ? pandocAttrSpec : {}) },\n parseDOM: [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n getAttrs: (node: Node | string) => {\n if (hasAttr) {\n const el = node as Element;\n return pandocAttrParseDom(el, {});\n } else {\n return {};\n }\n },\n },\n ],\n toDOM(node: ProsemirrorNode) {\n const fontClass = 'pm-fixedwidth-font';\n const attrs = hasAttr\n ? pandocAttrToDomAttr({\n ...node.attrs,\n classes: [...node.attrs.classes, fontClass],\n })\n : {\n class: fontClass,\n };\n return ['pre', attrs, ['code', 0]];\n },\n },\n\n code_view: {\n lang: (node: ProsemirrorNode) => {\n return codeBlockLang(node, options);\n },\n attrEditFn: codeBlockFormatCommandFn(pandocExtensions, ui, pandocCapabilities.highlight_languages),\n },\n\n attr_edit: codeBlockAttrEdit(pandocExtensions, pandocCapabilities, ui),\n\n pandoc: {\n readers: [\n {\n token: PandocTokenType.CodeBlock,\n code_block: true,\n },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.CodeBlock, () => {\n if (hasAttr) {\n const id = pandocExtensions.fenced_code_attributes ? node.attrs.id : '';\n const keyvalue = pandocExtensions.fenced_code_attributes ? node.attrs.keyvalue : [];\n output.writeAttr(id, node.attrs.classes, keyvalue);\n } else {\n output.writeAttr();\n }\n output.write(node.textContent);\n });\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n const commands: ProsemirrorCommand[] = [\n new BlockCommand(EditorCommandId.CodeBlock, [], schema.nodes.code_block, schema.nodes.paragraph, {}),\n ];\n if (hasAttr) {\n commands.push(new CodeBlockFormatCommand(pandocExtensions, ui, pandocCapabilities.highlight_languages));\n }\n return commands;\n },\n\n baseKeys: () => {\n return [\n { key: BaseKey.Enter, command: newlineInCode },\n { key: BaseKey.ModEnter, command: exitCode },\n { key: BaseKey.ShiftEnter, command: exitCode },\n ];\n },\n };\n};\n\nclass CodeBlockFormatCommand extends ProsemirrorCommand {\n constructor(pandocExtensions: PandocExtensions, ui: EditorUI, languages: string[]) {\n super(\n EditorCommandId.CodeBlockFormat,\n ['Shift-Mod-\\\\'],\n codeBlockFormatCommandFn(pandocExtensions, ui, languages),\n {\n name: ui.context.translateText('Code Block...'),\n description: ui.context.translateText('Source code display'),\n group: OmniInsertGroup.Blocks,\n priority: 7,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.code_block_dark! : ui.images.omni_insert?.code_block!,\n },\n );\n }\n}\n\nfunction codeBlockFormatCommandFn(pandocExtensions: PandocExtensions, ui: EditorUI, languages: string[]) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // enable if we are either inside a code block or we can toggle to a code block\n const schema = state.schema;\n const codeBlock = findParentNodeOfType(schema.nodes.code_block)(state.selection);\n if (\n !codeBlock &&\n !toggleBlockType(schema.nodes.code_block, schema.nodes.paragraph)(state) &&\n !precedingListItemInsertPos(state.doc, state.selection)\n ) {\n return false;\n }\n\n async function asyncEditCodeBlock() {\n if (dispatch) {\n // get props to edit\n const codeBlockProps = codeBlock\n ? { ...(codeBlock.node.attrs as CodeBlockProps), lang: '' }\n : defaultCodeBlockProps();\n\n // set lang if the first class is from available languages\n // (alternatively if we don't support attributes then it's\n // automatically considered the language)\n if (codeBlockProps.classes && codeBlockProps.classes.length) {\n const potentialLang = codeBlockProps.classes[0];\n if (!pandocExtensions.fenced_code_attributes || languages.includes(potentialLang)) {\n codeBlockProps.lang = potentialLang;\n codeBlockProps.classes = codeBlockProps.classes.slice(1);\n }\n }\n\n // show dialog\n const result = await ui.dialogs.editCodeBlock(\n codeBlockProps,\n pandocExtensions.fenced_code_attributes,\n languages,\n );\n if (result) {\n // extract lang\n const applyProps = propsWithLangClass(result);\n\n // edit or toggle as appropriate\n if (codeBlock) {\n const tr = state.tr;\n tr.setNodeMarkup(codeBlock.pos, schema.nodes.code_block, applyProps);\n dispatch(tr);\n } else {\n const prevListItemPos = precedingListItemInsertPos(state.doc, state.selection);\n if (prevListItemPos) {\n const tr = state.tr;\n const block = schema.nodes.code_block.create(applyProps);\n precedingListItemInsert(tr, prevListItemPos, block);\n dispatch(tr);\n } else {\n toggleBlockType(schema.nodes.code_block, schema.nodes.paragraph, applyProps)(state, dispatch, view);\n }\n }\n }\n }\n\n if (view) {\n view.focus();\n }\n }\n\n asyncEditCodeBlock();\n\n return true;\n };\n}\n\nfunction defaultCodeBlockProps() {\n return { id: '', classes: [], keyvalue: [], lang: '' };\n}\n\nfunction propsWithLangClass(props: CodeBlockProps) {\n const newProps = { ...props };\n if (newProps.classes && newProps.lang) {\n newProps.classes.unshift(props.lang);\n }\n return newProps;\n}\n\n// determine the code block language. if it's an Rmd example (i.e. with `r ''`) and\n// we have rmdExampleHighlight enabled then use the Rmd chunk language for highlighting\nfunction codeBlockLang(node: ProsemirrorNode, options: EditorOptions) {\n if (node.attrs.classes && node.attrs.classes.length) {\n const lang = node.attrs.classes[0];\n if (options.rmdExampleHighlight && lang === 'md') {\n const match = node.textContent.match(/^```+\\s*\\{([a-zA-Z0-9_]+)( *[ ,].*)?\\}`r ''`/);\n if (match) {\n return match[1];\n }\n }\n return lang;\n } else {\n return null;\n }\n}\n\nfunction codeBlockAttrEdit(pandocExtensions: PandocExtensions, pandocCapabilities: PandocCapabilities, ui: EditorUI) {\n return () => {\n if (hasFencedCodeBlocks(pandocExtensions)) {\n return {\n type: (schema: Schema) => schema.nodes.code_block,\n tags: (node: ProsemirrorNode) => {\n const tags: string[] = [];\n if (node.attrs.id) {\n tags.push(`#${node.attrs.id}`);\n }\n if (node.attrs.classes && node.attrs.classes.length) {\n const lang = node.attrs.classes[0];\n if (pandocCapabilities.highlight_languages.includes(lang) || lang === 'tex') {\n tags.push(lang);\n } else {\n tags.push(`.${lang}`);\n }\n }\n return tags;\n },\n offset: {\n top: 3,\n right: 0,\n },\n editFn: () => codeBlockFormatCommandFn(pandocExtensions, ui, pandocCapabilities.highlight_languages),\n };\n } else {\n return null;\n }\n };\n}\n\nexport default extension;\n","/*\n * list.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\nimport { liftListItem, sinkListItem, splitListItem } from 'prosemirror-schema-list';\nimport { Plugin, PluginKey, EditorState } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { findParentNodeOfType } from 'prosemirror-utils';\n\nimport { Extension, ExtensionContext } from '../../api/extension';\nimport { BaseKey } from '../../api/basekeys';\nimport { EditorUI, kListSpacingTight } from '../../api/ui';\nimport { ListCapabilities } from '../../api/list';\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { PandocTokenType } from '../../api/pandoc';\nimport { kPlatformMac } from '../../api/platform';\nimport { OmniInsertGroup } from '../../api/omni_insert';\nimport { conditionalWrappingInputRule } from '../../api/input_rule';\n\nimport { ListCommand, TightListCommand, EditListPropertiesCommand, editListPropertiesCommandFn } from './list-commands';\n\nimport {\n CheckedListItemNodeView,\n checkedListItemInputRule,\n checkedListInputRule,\n CheckedListItemCommand,\n CheckedListItemToggleCommand,\n} from './list-checked';\n\nimport { writePandocBulletList, writePandocOrderedList, readPandocList } from './list-pandoc';\n\nimport './list-styles.css';\n\nexport enum ListNumberStyle {\n DefaultStyle = 'DefaultStyle',\n Decimal = 'Decimal',\n LowerRoman = 'LowerRoman',\n UpperRoman = 'UpperRoman',\n LowerAlpha = 'LowerAlpha',\n UpperAlpha = 'UpperAlpha',\n Example = 'Example',\n}\n\n// NOTE: HTML output doesn't currently respect this and it's difficult to\n// do with CSS (especially for nested lists). So we allow the user to edit\n// it but it isn't reflected in the editor.\nexport enum ListNumberDelim {\n DefaultDelim = 'DefaultDelim',\n Period = 'Period',\n OneParen = 'OneParen',\n TwoParens = 'TwoParens',\n}\n\nconst plugin = new PluginKey('list');\n\nconst extension = (context: ExtensionContext): Extension => {\n const { pandocExtensions, ui } = context;\n\n // determine list capabilities based on active format options\n const capabilities: ListCapabilities = {\n tasks: pandocExtensions.task_lists,\n fancy: pandocExtensions.fancy_lists,\n /*\n Always disable example lists b/c they don't round trip through the AST:\n - (@good) referenced elsewhere via (@good) just becomes a generic example (@) with \n a literal numeric reference.\n - The writer doesn't preserve the (@) or the (@good) when writing\n */\n // example: pandocExtensions.fancy_lists && pandocExtensions.example_lists,\n example: false,\n order: pandocExtensions.startnum,\n };\n\n return {\n nodes: [\n {\n name: 'list_item',\n spec: {\n content: 'list_item_block block*',\n attrs: {\n checked: { default: null },\n },\n defining: true,\n parseDOM: [\n {\n tag: 'li',\n getAttrs: (dom: Node | string) => {\n const el = dom as Element;\n const attrs: any = {};\n if (capabilities.tasks && el.hasAttribute('data-checked')) {\n attrs.checked = el.getAttribute('data-checked') === 'true';\n }\n return attrs;\n },\n },\n ],\n toDOM(node) {\n const attrs: any = {\n class: 'pm-list-item',\n };\n if (capabilities.tasks && node.attrs.checked !== null) {\n attrs['data-checked'] = node.attrs.checked ? 'true' : 'false';\n }\n return ['li', attrs, 0];\n },\n },\n pandoc: {},\n },\n {\n name: 'bullet_list',\n spec: {\n content: 'list_item+',\n group: 'block',\n attrs: {\n tight: { default: false },\n },\n parseDOM: [\n {\n tag: 'ul',\n getAttrs: (dom: Node | string) => {\n const el = dom as Element;\n const attrs: any = {};\n if (el.hasAttribute('data-tight')) {\n attrs.tight = true;\n }\n return attrs;\n },\n },\n ],\n toDOM(node) {\n const attrs: { [key: string]: string } = {};\n attrs.class = 'pm-list pm-bullet-list';\n if (node.attrs.tight) {\n attrs['data-tight'] = 'true';\n }\n return ['ul', attrs, 0];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.BulletList,\n handler: (schema: Schema) => readPandocList(schema.nodes.bullet_list, capabilities),\n },\n ],\n writer: writePandocBulletList(capabilities),\n },\n\n attr_edit: listAttrEdit('bullet_list', capabilities, ui),\n },\n {\n name: 'ordered_list',\n spec: {\n content: 'list_item+',\n group: 'block',\n attrs: {\n tight: { default: false },\n order: { default: 1 },\n number_style: { default: ListNumberStyle.DefaultStyle },\n number_delim: { default: ListNumberDelim.DefaultDelim },\n },\n parseDOM: [\n {\n tag: 'ol',\n getAttrs(dom: Node | string) {\n const el = dom as Element;\n\n const attrs: any = {};\n attrs.tight = el.hasAttribute('data-tight');\n\n if (capabilities.order) {\n const order: string | null = el.getAttribute('start');\n if (!order) {\n attrs.order = 1;\n } else {\n attrs.order = parseInt(order, 10) || 1;\n }\n }\n\n if (capabilities.fancy) {\n if (capabilities.example && el.getAttribute('data-example')) {\n attrs.number_style = ListNumberStyle.Example;\n } else {\n attrs.number_style = typeToNumberStyle(el.getAttribute('type'));\n }\n const numberDelim = el.getAttribute('data-number-delim');\n if (numberDelim) {\n attrs.number_delim = numberDelim;\n }\n }\n\n return attrs;\n },\n },\n ],\n toDOM(node) {\n const attrs: { [key: string]: string } = {};\n attrs.class = 'pm-list pm-ordered-list';\n if (node.attrs.tight) {\n attrs['data-tight'] = 'true';\n }\n if (capabilities.order && node.attrs.order !== 1) {\n attrs.start = node.attrs.order;\n }\n if (capabilities.fancy) {\n const type = numberStyleToType(node.attrs.number_style);\n if (type) {\n attrs.type = type;\n }\n if (capabilities.example) {\n if (node.attrs.number_style === ListNumberStyle.Example) {\n attrs['data-example'] = '1';\n }\n }\n attrs['data-number-delim'] = node.attrs.number_delim;\n }\n return ['ol', attrs, 0];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.OrderedList,\n handler: (schema: Schema) => readPandocList(schema.nodes.ordered_list, capabilities),\n },\n ],\n writer: writePandocOrderedList(capabilities),\n },\n\n attr_edit: listAttrEdit('ordered_list', capabilities, ui),\n },\n ],\n\n plugins: (schema: Schema) => {\n const plugins: Plugin[] = [];\n if (capabilities.tasks) {\n plugins.push(\n new Plugin({\n key: plugin,\n props: {\n nodeViews: {\n list_item(node: ProsemirrorNode, view: EditorView, getPos: boolean | (() => number)) {\n return new CheckedListItemNodeView(node, view, getPos as () => number);\n },\n },\n },\n }),\n );\n }\n return plugins;\n },\n\n commands: (schema: Schema) => {\n const commands = [\n new ListCommand(\n EditorCommandId.BulletList,\n kPlatformMac ? ['Shift-Mod-8'] : [],\n schema.nodes.bullet_list,\n schema.nodes.list_item,\n bulletListOmniInsert(ui),\n ui.prefs,\n ),\n new ListCommand(\n EditorCommandId.OrderedList,\n kPlatformMac ? ['Shift-Mod-7'] : [],\n schema.nodes.ordered_list,\n schema.nodes.list_item,\n orderedListOmniInsert(ui),\n ui.prefs,\n ),\n new ProsemirrorCommand(EditorCommandId.ListItemSink, ['Tab'], sinkListItem(schema.nodes.list_item)),\n new ProsemirrorCommand(EditorCommandId.ListItemLift, ['Shift-Tab'], liftListItem(schema.nodes.list_item)),\n new ProsemirrorCommand(EditorCommandId.ListItemSplit, ['Enter'], splitListItem(schema.nodes.list_item)),\n new TightListCommand(),\n ];\n if (capabilities.fancy) {\n commands.push(new EditListPropertiesCommand(ui, capabilities));\n }\n if (capabilities.tasks) {\n commands.push(\n new CheckedListItemCommand(schema.nodes.list_item),\n new CheckedListItemToggleCommand(schema.nodes.list_item),\n );\n }\n return commands;\n },\n\n baseKeys: (schema: Schema) => {\n return [\n { key: BaseKey.Enter, command: splitListItem(schema.nodes.list_item) },\n { key: BaseKey.Tab, command: sinkListItem(schema.nodes.list_item) },\n { key: BaseKey.ShiftTab, command: liftListItem(schema.nodes.list_item) },\n ];\n },\n\n inputRules: (schema: Schema) => {\n // reflect tight pref\n const tightFn = () => {\n return {\n tight: ui.prefs.listSpacing() === kListSpacingTight,\n };\n };\n\n const isNotInHeading = (state: EditorState) => {\n return !findParentNodeOfType(schema.nodes.heading)(state.selection);\n };\n\n const rules = [\n conditionalWrappingInputRule(/^\\s*([-+*])\\s$/, schema.nodes.bullet_list, isNotInHeading, tightFn),\n conditionalWrappingInputRule(\n /^(\\d+)\\.\\s$/,\n schema.nodes.ordered_list,\n isNotInHeading,\n match => ({ order: +match[1], tight: tightFn() }),\n (match, node) => node.childCount + node.attrs.order === +match[1],\n ),\n ];\n if (capabilities.tasks) {\n rules.push(checkedListItemInputRule(), checkedListInputRule(schema));\n }\n return rules;\n },\n };\n};\n\nfunction listAttrEdit(type: string, capabilities: ListCapabilities, ui: EditorUI) {\n return () => {\n return {\n type: (schema: Schema) => schema.nodes[type],\n editFn: () => editListPropertiesCommandFn(ui, capabilities),\n offset: {\n top: 5,\n right: 5,\n },\n };\n };\n}\n\nfunction numberStyleToType(style: ListNumberStyle): string | null {\n switch (style) {\n case ListNumberStyle.DefaultStyle:\n case ListNumberStyle.Decimal:\n case ListNumberStyle.Example:\n return 'l';\n case ListNumberStyle.LowerAlpha:\n return 'a';\n case ListNumberStyle.UpperAlpha:\n return 'A';\n case ListNumberStyle.LowerRoman:\n return 'i';\n case ListNumberStyle.UpperRoman:\n return 'I';\n default:\n return null;\n }\n}\n\nfunction typeToNumberStyle(type: string | null): ListNumberStyle {\n switch (type) {\n case 'l':\n return ListNumberStyle.Decimal;\n case 'a':\n return ListNumberStyle.LowerAlpha;\n case 'A':\n return ListNumberStyle.UpperAlpha;\n case 'i':\n return ListNumberStyle.LowerRoman;\n case 'I':\n return ListNumberStyle.UpperRoman;\n default:\n return ListNumberStyle.Decimal;\n }\n}\n\nfunction bulletListOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Bullet List'),\n description: ui.context.translateText('List using bullets for items'),\n group: OmniInsertGroup.Lists,\n priority: 5,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.bullet_list_dark! : ui.images.omni_insert?.bullet_list!),\n };\n}\n\nfunction orderedListOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Numbered List'),\n description: ui.context.translateText('List using numbers for items'),\n group: OmniInsertGroup.Lists,\n priority: 4,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.ordered_list_dark! : ui.images.omni_insert?.ordered_list!,\n };\n}\n\nexport default extension;\n","/*\n * list-commands.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { NodeType, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { autoJoin } from 'prosemirror-commands';\nimport { NodeWithPos, findParentNode } from 'prosemirror-utils';\n\nimport { NodeCommand, toggleList, ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { EditorUI, EditorUIPrefs } from '../../api/ui';\nimport { ListProps } from '../../api/ui-dialogs';\nimport { ListType, ListCapabilities, isList } from '../../api/list';\nimport { OmniInsert } from '../../api/omni_insert';\n\nexport class ListCommand extends NodeCommand {\n constructor(\n id: EditorCommandId,\n keymap: string[],\n listType: NodeType,\n listItemType: NodeType,\n omniInsert: OmniInsert,\n prefs: EditorUIPrefs,\n ) {\n super(id, keymap, listType, {}, autoJoin(toggleList(listType, listItemType, prefs), [listType.name]), omniInsert);\n }\n}\n\nexport class TightListCommand extends ProsemirrorCommand {\n constructor() {\n super(\n EditorCommandId.TightList,\n ['Mod-Alt-9'],\n (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const parentList = findParentNode(isList)(state.selection);\n if (!parentList) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n const node = parentList.node;\n tr.setNodeMarkup(parentList.pos, node.type, {\n ...node.attrs,\n tight: !node.attrs.tight,\n });\n dispatch(tr);\n }\n\n return true;\n },\n );\n }\n\n public isActive(state: EditorState): boolean {\n if (this.isEnabled(state)) {\n const itemNode = findParentNode(isList)(state.selection) as NodeWithPos;\n return itemNode.node.attrs.tight;\n } else {\n return false;\n }\n }\n}\n\nexport function editListPropertiesCommandFn(ui: EditorUI, capabilities: ListCapabilities) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // see if a parent node is a list\n let node: ProsemirrorNode | null = null;\n let pos: number = 0;\n const nodeWithPos = findParentNode(isList)(state.selection);\n if (nodeWithPos) {\n node = nodeWithPos.node;\n pos = nodeWithPos.pos;\n }\n\n // return false (disabled) for no targets\n if (!node) {\n return false;\n }\n\n // execute command when requested\n async function asyncEditList() {\n if (dispatch) {\n await editList(node as ProsemirrorNode, pos, state, dispatch, ui, capabilities);\n if (view) {\n view.focus();\n }\n }\n }\n asyncEditList();\n\n return true;\n };\n}\n\nexport class EditListPropertiesCommand extends ProsemirrorCommand {\n constructor(ui: EditorUI, capabilities: ListCapabilities) {\n super(EditorCommandId.EditListProperties, [], editListPropertiesCommandFn(ui, capabilities));\n }\n}\n\nasync function editList(\n node: ProsemirrorNode,\n pos: number,\n state: EditorState,\n dispatch: (tr: Transaction) => void,\n ui: EditorUI,\n capabilities: ListCapabilities,\n): Promise {\n // get list properties\n const schema = node.type.schema;\n const attrs = node.attrs;\n const props = {\n ...attrs,\n type: node.type === schema.nodes.ordered_list ? ListType.Ordered : ListType.Bullet,\n } as ListProps;\n\n // edit list\n const result = await ui.dialogs.editList(props, capabilities);\n\n // apply result\n if (result) {\n const tr = state.tr;\n const listType = result.type === ListType.Ordered ? schema.nodes.ordered_list : schema.nodes.bullet_list;\n tr.setNodeMarkup(pos, listType, {\n ...attrs,\n ...result,\n });\n dispatch(tr);\n }\n}\n","/*\n * list-checked.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, Fragment, NodeType } from 'prosemirror-model';\nimport { NodeView, EditorView } from 'prosemirror-view';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { findParentNodeOfType, NodeWithPos, setTextSelection } from 'prosemirror-utils';\nimport { InputRule, wrappingInputRule } from 'prosemirror-inputrules';\n\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { PandocToken, mapTokens } from '../../api/pandoc';\n\n// custom NodeView that accomodates display / interaction with item check boxes\nexport class CheckedListItemNodeView implements NodeView {\n public readonly dom: HTMLElement;\n public readonly contentDOM: HTMLElement;\n\n private readonly node: ProsemirrorNode;\n private readonly view: EditorView;\n private readonly getPos: () => number;\n\n constructor(node: ProsemirrorNode, view: EditorView, getPos: () => number) {\n this.node = node;\n this.view = view;\n this.getPos = getPos;\n\n // create root li element\n this.dom = window.document.createElement('li');\n if (node.attrs.tight) {\n this.dom.setAttribute('data-tight', 'true');\n }\n\n const container = window.document.createElement('div');\n container.classList.add('list-item-container');\n this.dom.appendChild(container);\n\n // add checkbox for checked items\n if (node.attrs.checked !== null) {\n this.dom.setAttribute('data-checked', node.attrs.checked ? 'true' : 'false');\n\n // checkbox for editing checked state\n const input = window.document.createElement('input');\n input.classList.add('list-item-checkbox');\n input.setAttribute('type', 'checkbox');\n input.checked = node.attrs.checked;\n input.contentEditable = 'false';\n input.disabled = !(view as any).editable;\n input.addEventListener('mousedown', (ev: Event) => {\n ev.preventDefault(); // don't steal focus\n });\n input.addEventListener('change', (ev: Event) => {\n const tr = view.state.tr;\n tr.setNodeMarkup(getPos(), node.type, {\n ...node.attrs,\n checked: (ev.target as HTMLInputElement).checked,\n });\n setTextSelection(getPos() + 1)(tr);\n view.dispatch(tr);\n });\n container.appendChild(input);\n }\n\n // content div\n const content = window.document.createElement('div');\n content.classList.add('list-item-content');\n this.contentDOM = content;\n container.appendChild(content);\n }\n}\n\n// command to toggle checked list items\nexport function checkedListItemCommandFn(itemType: NodeType) {\n return (state: EditorState, dispatch?: ((tr: Transaction) => void) | undefined) => {\n const itemNode = findParentNodeOfType(itemType)(state.selection);\n if (!itemNode) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n if (itemNode.node.attrs.checked !== null) {\n setItemChecked(tr, itemNode, null);\n } else {\n setItemChecked(tr, itemNode, false);\n }\n\n dispatch(tr);\n }\n\n return true;\n };\n}\n\nexport function checkedListItemToggleCommandFn(itemType: NodeType) {\n return (state: EditorState, dispatch?: ((tr: Transaction) => void) | undefined) => {\n const itemNode = findParentNodeOfType(itemType)(state.selection);\n if (!itemNode || itemNode.node.attrs.checked === null) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n setItemChecked(tr, itemNode, !itemNode.node.attrs.checked);\n dispatch(tr);\n }\n\n return true;\n };\n}\n\nexport class CheckedListItemCommand extends ProsemirrorCommand {\n constructor(itemType: NodeType) {\n super(EditorCommandId.ListItemCheck, [], checkedListItemCommandFn(itemType));\n }\n\n public isActive(state: EditorState): boolean {\n if (this.isEnabled(state)) {\n const itemNode = findParentNodeOfType(state.schema.nodes.list_item)(state.selection) as NodeWithPos;\n return itemNode.node.attrs.checked !== null;\n } else {\n return false;\n }\n }\n}\n\nexport class CheckedListItemToggleCommand extends ProsemirrorCommand {\n private itemType: NodeType;\n\n constructor(itemType: NodeType) {\n super(EditorCommandId.ListItemCheckToggle, [], checkedListItemToggleCommandFn(itemType));\n this.itemType = itemType;\n }\n\n public isActive(state: EditorState): boolean {\n const itemNode = findParentNodeOfType(this.itemType)(state.selection);\n return itemNode && itemNode.node.attrs.checked;\n }\n}\n\n// allow users to type [x] or [ ] to define a checked list item\nexport function checkedListItemInputRule() {\n return new InputRule(/\\[([ x])\\]\\s$/, (state: EditorState, match: string[], start: number, end: number) => {\n const schema = state.schema;\n\n const itemNode = findParentNodeOfType(schema.nodes.list_item)(state.selection);\n if (itemNode) {\n // create transaction\n const tr = state.tr;\n\n // set checked\n setItemChecked(tr, itemNode, match[1]);\n\n // delete entered text\n tr.delete(start, end);\n\n // return transaction\n return tr;\n } else {\n return null;\n }\n });\n}\n\n// allow users to begin a new checked list by typing [x] or [ ] at the beginning of a line\nexport function checkedListInputRule(schema: Schema) {\n // regex to match checked list at the beginning of a line\n const regex = /^\\s*\\[([ x])\\]\\s$/;\n\n // we are going to steal the handler from the base bullet list wrapping input rule\n const baseInputRule: any = wrappingInputRule(regex, schema.nodes.bullet_list);\n\n return new InputRule(regex, (state: EditorState, match: string[], start: number, end: number) => {\n // call the base handler to create the bullet list\n const tr = baseInputRule.handler(state, match, start, end);\n if (tr) {\n // set the checkbox\n const itemNode = findParentNodeOfType(schema.nodes.list_item)(tr.selection);\n if (itemNode) {\n setItemChecked(tr, itemNode, match[1]);\n }\n\n return tr;\n } else {\n return null;\n }\n });\n}\n\nfunction setItemChecked(tr: Transaction, itemNode: NodeWithPos, check: null | boolean | string) {\n tr.setNodeMarkup(itemNode.pos, itemNode.node.type, {\n ...itemNode.node.attrs,\n checked: check === null ? null : typeof check === 'string' ? check === 'x' : check,\n });\n}\n// prepend a check mark to the provided fragment\nexport function fragmentWithCheck(schema: Schema, fragment: Fragment, checked: boolean) {\n // create a raw markdown node with [x] or [ ]\n const mark = schema.marks.raw_inline.create({ format: 'markdown' });\n const check = schema.text((checked ? '[x]' : '[ ]') + ' ', [mark]);\n return Fragment.from(check).append(fragment);\n}\n\nconst kCheckedChar = '☒';\nconst kUncheckedChar = '☐';\n\nexport function tokensWithChecked(tokens: PandocToken[]): { checked: null | boolean; tokens: PandocToken[] } {\n // will set this flag based on inspecting the first Str token\n let checked: null | boolean | undefined;\n let lastWasChecked = false;\n\n // map tokens\n const mappedTokens = mapTokens(tokens, tok => {\n // if the last token was checked then strip the next space\n if (tok.t === 'Space' && lastWasChecked) {\n lastWasChecked = false;\n return {\n t: 'Str',\n c: '',\n };\n }\n\n // derive 'checked' from first chraracter of first Str token encountered\n // if we find checked or unchecked then set the flag and strip off\n // the first 2 chraracters (the check and the space after it)\n else if (tok.t === 'Str' && checked === undefined) {\n let text = tok.c as string;\n if (text.charAt(0) === kCheckedChar) {\n checked = true;\n lastWasChecked = true;\n text = text.slice(1);\n } else if (text.charAt(0) === kUncheckedChar) {\n checked = false;\n lastWasChecked = true;\n text = text.slice(1);\n } else {\n checked = null;\n }\n return {\n t: 'Str',\n c: text,\n };\n } else {\n return tok;\n }\n });\n\n // return\n return {\n checked: checked !== undefined ? checked : null,\n tokens: mappedTokens,\n };\n}\n","/*\n * list-pandoc.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, NodeType, Fragment } from 'prosemirror-model';\n\nimport { PandocOutput, PandocToken, ProsemirrorWriter, PandocTokenType } from '../../api/pandoc';\n\nimport { fragmentWithCheck, tokensWithChecked } from './list-checked';\nimport { ListNumberDelim, ListNumberStyle } from './list';\nimport { ListCapabilities } from '../../api/list';\n\nconst LIST_ATTRIBS = 0;\nconst LIST_CHILDREN = 1;\n\nconst LIST_ATTRIB_ORDER = 0;\nconst LIST_ATTRIB_NUMBER_STYLE = 1;\nconst LIST_ATTRIB_NUMBER_DELIM = 2;\n\n// Note that we are planning on eliminating the markdownOutputFilter after this commit\n// as there will be no more uses of it and it plays poorly w/ e.g. pandoc table output\n// which needs to reliably know the number of characters wide each column will be).\n// (previous uses of markdownOutputFilter were converted to use output.writeRawMarkdown).\n// So, if we are attempting to re-enable example lists b/c there is now round tripping\n// of example lists through the pandoc AST we need an alternative way to fixup\n// example list output (likely a more robust pandoc AST).\nconst kListItemExampleSentinel = '20543127-1873-4833-AC49-5B352CFA2AF5';\nconst kListItemExampleRegex = new RegExp(`\\\\(\\\\d+\\\\) ${kListItemExampleSentinel}`, 'g');\n\nexport function readPandocList(nodeType: NodeType, capabilities: ListCapabilities) {\n // alias schema\n const schema = nodeType.schema;\n\n // default extraction functions\n let getChildren = (tok: PandocToken) => tok.c;\n let getAttrs = (tok: PandocToken): { [key: string]: any } => ({});\n\n // function to read the number style (convert example to default if we\n // don't support example lists)\n const readNumberStyle = (attribs: any) => {\n if (capabilities.fancy) {\n const style = attribs[LIST_ATTRIB_NUMBER_STYLE].t;\n if (style === ListNumberStyle.Example && !capabilities.example) {\n return ListNumberStyle.DefaultStyle;\n } else {\n return style;\n }\n } else {\n return ListNumberStyle.DefaultStyle;\n }\n };\n\n // specialize for ordered_list\n if (nodeType === schema.nodes.ordered_list) {\n getAttrs = (tok: PandocToken) => {\n const attribs = tok.c[LIST_ATTRIBS];\n return {\n order: capabilities.order ? attribs[LIST_ATTRIB_ORDER] : 1,\n number_style: readNumberStyle(attribs),\n number_delim: capabilities.fancy ? attribs[LIST_ATTRIB_NUMBER_DELIM].t : ListNumberDelim.DefaultDelim,\n };\n };\n getChildren = (tok: PandocToken) => tok.c[LIST_CHILDREN];\n }\n\n const listItemNodeType = schema.nodes.list_item;\n return (writer: ProsemirrorWriter, tok: PandocToken) => {\n const children = getChildren(tok);\n const attrs = getAttrs(tok);\n attrs.tight = children.length && children[0].length && children[0][0].t === 'Plain';\n writer.openNode(nodeType, attrs);\n children.forEach((child: PandocToken[]) => {\n // setup tokens/attribs for output\n let tokens = child;\n const childAttrs: { checked: null | boolean } = { checked: null };\n\n // special task list processing if the current format supports task lists\n if (capabilities.tasks) {\n // look for checkbox in first character of child tokens\n // if we see it, remove it and set childAttrs.checked as appropriate\n const childWithChecked = tokensWithChecked(child);\n childAttrs.checked = childWithChecked.checked;\n tokens = childWithChecked.tokens;\n }\n\n // process children\n writer.openNode(listItemNodeType, childAttrs);\n writer.writeTokens(tokens);\n writer.closeNode();\n });\n writer.closeNode();\n };\n}\n\nexport function writePandocOrderedList(capabilities: ListCapabilities) {\n return (output: PandocOutput, node: ProsemirrorNode) => {\n // alias some list options\n const options = listNodeOptions(node, capabilities);\n\n // force delim to two parens for example styles. we do this\n // to simplify the search/replace of example list sentinels\n // during conversion post-processing\n const delim = options.example ? ListNumberDelim.TwoParens : node.attrs.number_delim;\n\n output.writeToken(PandocTokenType.OrderedList, () => {\n output.writeArray(() => {\n output.write(capabilities.order ? node.attrs.order : 1);\n output.writeToken(capabilities.fancy ? node.attrs.number_style : ListNumberStyle.DefaultStyle);\n output.writeToken(capabilities.fancy ? delim : ListNumberDelim.DefaultDelim);\n });\n output.writeArray(() => {\n node.forEach(item => writePandocListItem(output, options, item));\n });\n });\n };\n}\n\nexport function writePandocBulletList(capabilities: ListCapabilities) {\n return (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.BulletList, () => {\n node.forEach(item => writePandocListItem(output, listNodeOptions(node, capabilities), item));\n });\n };\n}\n\nexport function exampleListPandocMarkdownOutputFilter(markdown: string) {\n return markdown.replace(kListItemExampleRegex, '(@) ');\n}\n\ninterface ListNodeOptions {\n tight: boolean;\n example: boolean;\n}\n\nfunction listNodeOptions(node: ProsemirrorNode, capabilities: ListCapabilities): ListNodeOptions {\n const options = {\n tight: node.attrs.tight,\n example: capabilities.example ? node.attrs.number_style === ListNumberStyle.Example : false,\n };\n\n // if it's tight see if we need to override b/c of multiple blocks\n node.forEach(item => {\n if (options.tight && item.childCount > 1) {\n options.tight = false;\n }\n });\n\n return options;\n}\n\nfunction writePandocListItem(output: PandocOutput, options: ListNodeOptions, node: ProsemirrorNode) {\n const checked = node.attrs.checked;\n\n output.writeArray(() => {\n node.forEach((itemNode: ProsemirrorNode, _offset, index) => {\n if (itemNode.type === node.type.schema.nodes.paragraph) {\n const paraItemBlockType = options.tight ? PandocTokenType.Plain : PandocTokenType.Para;\n output.writeToken(paraItemBlockType, () => {\n // for first item block, prepend check mark if we have one\n if (checked !== null && index === 0) {\n writeListItemInlines(\n output,\n options.example,\n fragmentWithCheck(node.type.schema, itemNode.content, checked),\n index,\n );\n } else {\n writeListItemInlines(output, options.example, itemNode.content, index);\n }\n });\n } else {\n output.writeNode(itemNode);\n }\n });\n });\n}\n\nfunction writeListItemInlines(output: PandocOutput, example: boolean, fragment: Fragment, index: number) {\n if (index === 0 && example) {\n output.writeToken(PandocTokenType.Str, kListItemExampleSentinel);\n }\n output.writeInlines(fragment);\n}\n","/*\n * image.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, DOMOutputSpec } from 'prosemirror-model';\nimport { EditorState, NodeSelection, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { Extension, ExtensionContext } from '../../api/extension';\nimport { canInsertNode } from '../../api/node';\nimport { selectionIsImageNode, selectionIsEmptyParagraph } from '../../api/selection';\nimport {\n pandocAttrSpec,\n pandocAttrParseDom,\n pandocAttrToDomAttr,\n pandocAttrReadAST,\n pandocAttrAvailable,\n} from '../../api/pandoc_attr';\nimport {\n PandocOutput,\n PandocTokenType,\n ProsemirrorWriter,\n PandocToken,\n stringifyTokens,\n imageAttributesAvailable,\n} from '../../api/pandoc';\nimport { EditorUI } from '../../api/ui';\nimport { ImageDimensions } from '../../api/image';\nimport { asHTMLTag } from '../../api/html';\nimport { OmniInsertGroup } from '../../api/omni_insert';\n\nimport { imageDialog } from './image-dialog';\nimport { imageDimensionsFromImg, imageContainerWidth, inlineHTMLIsImage } from './image-util';\nimport { imageTextSelectionPlugin } from './image-textsel';\nimport { posHasProhibitedFigureParent } from './figure';\nimport { imageEventsPlugin } from './image-events';\nimport { imageNodeViewPlugins } from './image-view';\n\nconst TARGET_URL = 0;\nconst TARGET_TITLE = 1;\n\nconst IMAGE_ATTR = 0;\nconst IMAGE_ALT = 1;\nconst IMAGE_TARGET = 2;\n\nconst extension = (context: ExtensionContext): Extension => {\n const { pandocExtensions, ui, events } = context;\n\n const imageAttr = imageAttributesAvailable(pandocExtensions);\n\n return {\n nodes: [\n {\n name: 'image',\n spec: {\n inline: true,\n attrs: imageNodeAttrsSpec(false, imageAttr),\n group: 'inline',\n draggable: true,\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs(dom: Node | string) {\n return imageAttrsFromDOM(dom as Element, imageAttr);\n },\n },\n ],\n toDOM(node: ProsemirrorNode) {\n return imageDOMOutputSpec(node, imageAttr);\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Image,\n handler: pandocImageHandler(false, imageAttr),\n },\n ],\n inlineHTMLReader: pandocExtensions.raw_html ? imageInlineHTMLReader : undefined,\n writer: imagePandocOutputWriter(false, ui),\n },\n\n attr_edit: () => ({\n type: (schema: Schema) => schema.nodes.image,\n noDecorator: true,\n editFn: () => imageCommand(ui, imageAttr),\n }),\n },\n ],\n\n commands: (_schema: Schema) => {\n return [\n new ProsemirrorCommand(\n EditorCommandId.Image,\n ['Shift-Mod-i'],\n imageCommand(ui, imageAttr),\n imageOmniInsert(ui),\n ),\n ];\n },\n\n plugins: (schema: Schema) => {\n return [\n imageTextSelectionPlugin(),\n imageEventsPlugin(ui),\n ...imageNodeViewPlugins('image', ui, events, pandocExtensions),\n ];\n },\n };\n};\n\nexport function pandocImageHandler(figure: boolean, imageAttributes: boolean) {\n return (schema: Schema) => (writer: ProsemirrorWriter, tok: PandocToken) => {\n // get attributes\n const target = tok.c[IMAGE_TARGET];\n const attrs = {\n src: decodeURI(target[TARGET_URL]),\n title: readPandocTitle(target[TARGET_TITLE]),\n alt: '',\n ...(imageAttributes ? pandocAttrReadAST(tok, IMAGE_ATTR) : {}),\n };\n\n // add alt as plain text if it's not a figure\n if (!figure) {\n attrs.alt = stringifyTokens(tok.c[IMAGE_ALT]);\n }\n\n // read image and (if appropriate) children\n writer.openNode(figure ? schema.nodes.figure : schema.nodes.image, attrs);\n if (figure) {\n writer.writeTokens(tok.c[IMAGE_ALT]);\n }\n writer.closeNode();\n };\n}\n\nexport function imagePandocOutputWriter(figure: boolean, ui: EditorUI) {\n return (output: PandocOutput, node: ProsemirrorNode) => {\n // default writer for markdown images\n let writer = () => {\n output.writeToken(PandocTokenType.Image, () => {\n if (output.extensions.link_attributes) {\n output.writeAttr(node.attrs.id, node.attrs.classes, node.attrs.keyvalue);\n } else {\n output.writeAttr();\n }\n output.writeArray(() => {\n if (figure) {\n output.writeInlines(node.content);\n } else {\n output.writeText(node.attrs.alt);\n }\n });\n output.write([encodeURI(node.attrs.src), node.attrs.title || '']);\n });\n };\n\n // see if we need to write raw html\n const requireHTML =\n pandocAttrAvailable(node.attrs) && // attribs need to be written\n !output.extensions.link_attributes && // markdown attribs not supported\n output.extensions.raw_html; // raw html is supported\n\n // if we do, then substitute a raw html writer\n if (node.attrs.raw || requireHTML) {\n writer = () => {\n const imgAttr = imageDOMAttributes(node, true, false);\n const html = asHTMLTag('img', imgAttr, true, true);\n output.writeRawMarkdown(html);\n };\n }\n\n // write (wrap in paragraph and possibly link for figures)\n if (figure) {\n let writeFigure = writer;\n if (node.attrs.linkTo) {\n writeFigure = () => {\n output.writeLink(node.attrs.linkTo, '', null, writer);\n };\n }\n output.writeToken(PandocTokenType.Para, writeFigure);\n } else {\n writer();\n }\n };\n}\n\n// parse inline html with as image node\nfunction imageInlineHTMLReader(schema: Schema, html: string, writer?: ProsemirrorWriter) {\n const isImage = inlineHTMLIsImage(html);\n if (!isImage) {\n return false;\n }\n\n if (writer) {\n const attrs = imageAttrsFromHTML(html);\n if (attrs) {\n attrs.raw = true;\n writer.addNode(schema.nodes.image, attrs, []);\n } else {\n return false;\n }\n }\n\n return isImage;\n}\n\nexport function imageDOMOutputSpec(node: ProsemirrorNode, imageAttributes: boolean): DOMOutputSpec {\n return ['img', imageDOMAttributes(node, imageAttributes)];\n}\n\nexport function imageDOMAttributes(\n node: ProsemirrorNode,\n imageAttributes: boolean,\n marker = true,\n): { [key: string]: string } {\n const attr: { [key: string]: string } = {\n src: node.attrs.src,\n };\n const title = node.attrs.title;\n if (title) {\n attr.title = title;\n }\n const alt = node.attrs.alt || node.textContent;\n if (alt) {\n attr.alt = alt;\n }\n\n return {\n ...attr,\n ...(imageAttributes ? pandocAttrToDomAttr(node.attrs, marker) : {}),\n };\n}\n\nexport function imageNodeAttrsSpec(linkTo: boolean, imageAttributes: boolean) {\n return {\n src: {},\n title: { default: null },\n alt: { default: null },\n raw: { default: false },\n ...(linkTo ? { linkTo: { default: null } } : {}),\n ...(imageAttributes ? pandocAttrSpec : {}),\n };\n}\n\nexport function imageAttrsFromDOM(el: Element, imageAttributes: boolean, forceAttrs = false) {\n const attrs: { [key: string]: string | null } = {\n src: el.getAttribute('src') || null,\n title: el.getAttribute('title') || null,\n alt: el.getAttribute('alt') || null,\n };\n return {\n ...attrs,\n ...(imageAttributes ? pandocAttrParseDom(el, attrs, forceAttrs) : {}),\n };\n}\n\nexport function imageAttrsFromHTML(html: string) {\n const parser = new window.DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n if (doc.body && doc.body.firstChild instanceof HTMLImageElement) {\n return imageAttrsFromDOM(doc.body.firstChild, true, true);\n } else {\n return null;\n }\n}\n\nexport function imageCommand(editorUI: EditorUI, imageAttributes: boolean) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const schema = state.schema;\n\n if (!canInsertNode(state, schema.nodes.image) && !canInsertNode(state, schema.nodes.figure)) {\n return false;\n }\n\n if (dispatch && view) {\n // see if we are editing an existing node\n let node: ProsemirrorNode | null = null;\n let nodeType = schema.nodes.image;\n let img: HTMLImageElement | null = null;\n let imgDimensions: ImageDimensions | null = null;\n if (selectionIsImageNode(schema, state.selection)) {\n node = (state.selection as NodeSelection).node;\n nodeType = node.type;\n if (nodeType === schema.nodes.figure) {\n const figure = view.nodeDOM(state.selection.from) as HTMLElement;\n img = figure.firstChild!.firstChild as HTMLImageElement;\n } else {\n const span = view.nodeDOM(state.selection.from) as HTMLElement;\n img = span.firstChild! as HTMLImageElement;\n }\n if (img) {\n const containerWidth = imageContainerWidth(state.selection.from, view);\n imgDimensions = imageDimensionsFromImg(img, containerWidth);\n }\n }\n\n // see if we are in an empty paragraph (in that case insert a figure)\n if (\n selectionIsEmptyParagraph(schema, state.selection) &&\n !posHasProhibitedFigureParent(schema, state.selection.$head)\n ) {\n nodeType = schema.nodes.figure;\n }\n\n // show dialog\n imageDialog(node, imgDimensions, nodeType, view, editorUI, imageAttributes);\n }\n\n return true;\n };\n}\n\nfunction imageOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Image...'),\n description: ui.context.translateText('Figure or inline image'),\n group: OmniInsertGroup.Content,\n priority: 10,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.image_dark! : ui.images.omni_insert?.image!),\n };\n}\n\nfunction readPandocTitle(title: string | null) {\n if (title) {\n return title.replace(/^(fig:)/, '');\n } else {\n return title;\n }\n}\n\nexport default extension;\n","/*\n * image-dialog.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, NodeType, Fragment, Mark } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\n\nimport { insertAndSelectNode } from '../../api/node';\nimport { EditorUI } from '../../api/ui';\nimport { ImageProps } from '../../api/ui-dialogs';\nimport { extractSizeStyles, kPercentUnit, kPixelUnit } from '../../api/css';\nimport { ImageType, ImageDimensions, isNaturalAspectRatio } from '../../api/image';\nimport { kWidthAttrib, kHeightAttrib } from '../../api/pandoc_attr';\n\nimport { imagePropsWithSizes, hasPercentWidth } from './image-util';\n\nexport async function imageDialog(\n node: ProsemirrorNode | null,\n dims: ImageDimensions | null,\n nodeType: NodeType,\n view: EditorView,\n editorUI: EditorUI,\n imageAttributes: boolean,\n) {\n // alias schema\n const schema = view.state.schema;\n\n // if we are being called with an existing node then read it's attributes\n let content = Fragment.empty;\n let image: ImageProps = { src: null };\n let linkMark: Mark | undefined;\n let marks: Mark[] = [];\n if (node && dims && node.type === nodeType) {\n // base attributess\n image = {\n ...(node.attrs as ImageProps),\n alt: nodeType === schema.nodes.figure ? node.textContent : node.attrs.alt,\n };\n\n // move width and height out of style and into keyvalue if necessary\n image = {\n ...image,\n keyvalue: extractSizeStyles(image.keyvalue),\n };\n\n // move width, height, and units out of keyvalue into explicit\n // top level image properties if necessary\n image = imagePropsWithSizes(image, dims);\n\n // record marks / linkTo\n if (nodeType === schema.nodes.image) {\n marks = node.marks;\n linkMark = node.marks.find(mark => mark.type === schema.marks.link);\n if (linkMark) {\n image.linkTo = linkMark.attrs.href;\n }\n }\n\n // content (will be caption for figures)\n content = node.content;\n } else {\n // create a new image\n image = nodeType.create(image).attrs as ImageProps;\n }\n\n // determine the type\n const type = nodeType === view.state.schema.nodes.image ? ImageType.Image : ImageType.Figure;\n\n // edit the image\n const result = await editorUI.dialogs.editImage(image, dims, imageAttributes);\n if (result) {\n // figures treat 'alt' as their content (the caption), but since captions support\n // inline formatting (and the dialog doesn't) we only want to update the\n // content if the alt/caption actually changed (as it will blow away formatting)\n if (type === ImageType.Figure && image.alt !== result.alt) {\n if (result.alt) {\n content = Fragment.from(view.state.schema.text(result.alt));\n } else {\n content = Fragment.empty;\n }\n }\n\n // if we have width and height move them into keyvalue\n let keyvalue = result.keyvalue;\n if (result.units) {\n // no units for px\n const units = result.units && result.units === kPixelUnit ? '' : result.units;\n // width\n if (result.width) {\n let width = result.width;\n if (hasPercentWidth(units)) {\n width = Math.min(width, 100);\n }\n keyvalue = keyvalue || [];\n keyvalue.push([kWidthAttrib, width + units]);\n }\n // only record height if it's not % units and it's not at it's natural height\n if (result.height && units !== kPercentUnit && !isNaturalHeight(result.width, result.height, dims)) {\n keyvalue = keyvalue || [];\n keyvalue.push([kHeightAttrib, result.height + units]);\n }\n }\n\n // merge updated keyvalue\n const imageProps = { ...result, keyvalue };\n\n // update or create link mark as necessary\n if (nodeType === schema.nodes.image) {\n if (linkMark) {\n marks = linkMark.removeFromSet(marks);\n if (imageProps.linkTo) {\n linkMark = linkMark.type.create({ ...linkMark.attrs, href: imageProps.linkTo });\n }\n } else if (imageProps.linkTo) {\n linkMark = schema.marks.link.create({ href: imageProps.linkTo });\n }\n if (imageProps.linkTo && linkMark) {\n marks = linkMark.addToSet(marks);\n }\n }\n\n // create the image\n const newImage = nodeType.createAndFill(imageProps, content, marks);\n\n // insert and select\n if (newImage) {\n insertAndSelectNode(view, newImage);\n }\n }\n\n if (view) {\n view.focus();\n }\n}\n\n// wrapper for isNaturalHeight that handles potentially undefined params\nfunction isNaturalHeight(width: number | undefined, height: number | undefined, dims: ImageDimensions | null) {\n if (width && height && dims) {\n return isNaturalAspectRatio(width, height, dims, false);\n } else {\n return false;\n }\n}\n","/*\n * image-util.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\nimport { findParentNodeClosestToPos } from 'prosemirror-utils';\n\nimport { ImageProps } from '../../api/ui-dialogs';\nimport {\n imageSizePropWithUnit,\n isValidImageSizeUnit,\n ensureContainerWidth,\n isNaturalAspectRatio,\n ImageDimensions,\n} from '../../api/image';\nimport { kWidthAttrib, kHeightAttrib, attrPartitionKeyvalue } from '../../api/pandoc_attr';\nimport { kPercentUnit, kPixelUnit } from '../../api/css';\nimport { elementInnerDimensions } from '../../api/dom';\n\nexport function imagePropsWithSizes(image: ImageProps, dims: ImageDimensions) {\n // pull width, height, and units out of keyvalue if necessary\n // (enables front-ends to provide dedicated UI for width/height)\n // note that if the value doesn't use a unit supported by the\n // UI it's kept within the original keyvalue prop\n if (image.keyvalue) {\n let width: number | undefined;\n let height: number | undefined;\n let units: string | undefined;\n let lockRatio = true;\n const partitionedKeyvalue = attrPartitionKeyvalue([kWidthAttrib, kHeightAttrib], image.keyvalue);\n for (const kv of partitionedKeyvalue.partitioned) {\n const [key, value] = kv;\n let partitioned = false;\n const sizeWithUnit = imageSizePropWithUnit(value);\n if (sizeWithUnit) {\n sizeWithUnit.unit = sizeWithUnit.unit || kPixelUnit;\n if (isValidImageSizeUnit(sizeWithUnit.unit)) {\n if (key === kWidthAttrib) {\n width = sizeWithUnit.size;\n units = sizeWithUnit.unit;\n } else if (key === kHeightAttrib) {\n height = sizeWithUnit.size;\n units = units || sizeWithUnit.unit;\n }\n partitioned = true;\n }\n }\n if (!partitioned) {\n partitionedKeyvalue.base.push(kv);\n }\n }\n if (width && height) {\n lockRatio = isNaturalAspectRatio(width, height, dims, lockRatio);\n }\n return {\n ...image,\n width,\n height,\n units,\n lockRatio,\n keyvalue: partitionedKeyvalue.base,\n };\n } else {\n return image;\n }\n}\n\nexport function imageDimensionsFromImg(img: HTMLImageElement, containerWidth: number) {\n return {\n naturalWidth: img.naturalWidth || null,\n naturalHeight: img.naturalHeight || null,\n containerWidth: ensureContainerWidth(containerWidth),\n };\n}\n\nexport function hasPercentWidth(size: string | null) {\n return !!size && size.endsWith(kPercentUnit);\n}\n\nexport function imageContainerWidth(pos: number, view: EditorView) {\n let containerWidth = (view.dom as HTMLElement).offsetWidth;\n if (containerWidth > 0) {\n if (pos) {\n const imagePos = view.state.doc.resolve(pos);\n const resizeContainer = findParentNodeClosestToPos(imagePos, nd => nd.isBlock);\n if (resizeContainer) {\n const resizeEl = view.domAtPos(resizeContainer.pos + 1);\n containerWidth = elementInnerDimensions(resizeEl.node as HTMLElement).width;\n }\n }\n }\n\n return containerWidth;\n}\n\nexport function inlineHTMLIsImage(html: string) {\n return html\n .trimLeft()\n .toLowerCase()\n .startsWith('({\n key: pluginKey,\n state: {\n init(_config: { [key: string]: any }, instance: EditorState) {\n return DecorationSet.empty;\n },\n apply(tr: Transaction, set: DecorationSet, oldState: EditorState, newState: EditorState) {\n // no decorations for empty or node selection\n if (tr.selection.empty || tr.selection instanceof NodeSelection) {\n return DecorationSet.empty;\n }\n\n const schema = newState.schema;\n const decorations: Decoration[] = [];\n tr.doc.nodesBetween(tr.selection.from, tr.selection.to, (node, pos) => {\n if ([schema.nodes.image, schema.nodes.figure].includes(node.type)) {\n decorations.push(nodeDecoration({ node, pos }, { class: 'pm-image-text-selection' }));\n }\n });\n\n return DecorationSet.create(tr.doc, decorations);\n },\n },\n props: {\n decorations(state: EditorState) {\n return pluginKey.getState(state);\n },\n },\n });\n}\n","/*\n * figure.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, Fragment, ResolvedPos } from 'prosemirror-model';\nimport { Transaction } from 'prosemirror-state';\nimport { Transform } from 'prosemirror-transform';\n\nimport { findChildrenByType, findParentNodeClosestToPos } from 'prosemirror-utils';\n\nimport { Extension, ExtensionContext } from '../../api/extension';\nimport { FixupContext } from '../../api/fixup';\nimport { isSingleLineHTML } from '../../api/html';\nimport { getMarkAttrs } from '../../api/mark';\nimport {\n PandocToken,\n PandocTokenType,\n ProsemirrorWriter,\n kRawBlockContent,\n kRawBlockFormat,\n imageAttributesAvailable,\n} from '../../api/pandoc';\nimport { trTransform } from '../../api/transaction';\n\nimport {\n imageAttrsFromDOM,\n imageNodeAttrsSpec,\n imageDOMOutputSpec,\n imagePandocOutputWriter,\n pandocImageHandler,\n imageAttrsFromHTML,\n imageCommand,\n} from './image';\nimport { inlineHTMLIsImage } from './image-util';\nimport { imageNodeViewPlugins } from './image-view';\nimport { figureKeys } from './figure-keys';\n\nconst extension = (context: ExtensionContext): Extension => {\n const { pandocExtensions, ui, events } = context;\n\n const imageAttr = imageAttributesAvailable(pandocExtensions);\n\n return {\n nodes: [\n {\n name: 'figure',\n spec: {\n attrs: imageNodeAttrsSpec(true, imageAttr),\n content: 'inline*',\n group: 'block',\n draggable: true,\n selectable: true,\n defining: true,\n parseDOM: [\n {\n tag: 'figure',\n contentElement: 'figcaption',\n getAttrs(dom: Node | string) {\n const el = dom as Element;\n const img = el.querySelector('img');\n if (img && img.parentNode === dom) {\n return imageAttrsFromDOM(img, imageAttr);\n } else {\n return {\n src: null,\n title: null,\n };\n }\n },\n },\n ],\n toDOM(node: ProsemirrorNode) {\n return ['figure', imageDOMOutputSpec(node, imageAttr), ['figcaption', { class: 'pm-figcaption' }, 0]];\n },\n },\n pandoc: {\n writer: imagePandocOutputWriter(true, ui),\n\n // intercept paragraphs with a single image and process them as figures\n blockReader: (schema: Schema, tok: PandocToken, writer: ProsemirrorWriter) => {\n // helper to process html image\n const handleHTMLImage = (html: string) => {\n const attrs = imageAttrsFromHTML(html);\n if (attrs) {\n attrs.raw = true;\n writer.addNode(schema.nodes.figure, attrs, []);\n return true;\n } else {\n return false;\n }\n };\n\n // unroll figure from paragraph with single image\n if (isParaWrappingFigure(tok) && !writerHasProhibitedFigureParent(schema, writer)) {\n const handler = pandocImageHandler(true, imageAttr)(schema);\n handler(writer, tok.c[0]);\n return true;\n // unroll figure from html RawBlock with single tag\n } else if (isHTMLImageBlock(tok)) {\n return handleHTMLImage(tok.c[kRawBlockContent]);\n } else {\n return false;\n }\n },\n },\n\n attr_edit: () => ({\n type: (schema: Schema) => schema.nodes.figure,\n editFn: () => imageCommand(ui, imageAttr),\n }),\n },\n ],\n\n fixups: (_schema: Schema) => {\n return [\n (tr: Transaction, fixupContext: FixupContext) => {\n if (fixupContext === FixupContext.Load) {\n return convertImagesToFigure(tr);\n } else {\n return tr;\n }\n },\n ];\n },\n\n appendTransaction: (schema: Schema) => {\n return [\n {\n name: 'figure-convert',\n nodeFilter: node => node.type === schema.nodes.image,\n append: convertImagesToFigure,\n },\n ];\n },\n\n baseKeys: figureKeys,\n\n plugins: (schema: Schema) => {\n return [...imageNodeViewPlugins('figure', ui, events, pandocExtensions)];\n },\n };\n};\n\nexport function posHasProhibitedFigureParent(schema: Schema, $pos: ResolvedPos) {\n return prohibitedFigureParents(schema).some(type => {\n return !!findParentNodeClosestToPos($pos, node => node.type === type);\n });\n}\n\nexport function writerHasProhibitedFigureParent(schema: Schema, writer: ProsemirrorWriter) {\n return prohibitedFigureParents(schema).some(writer.isNodeOpen);\n}\n\nfunction prohibitedFigureParents(schema: Schema) {\n return [schema.nodes.table_cell, schema.nodes.list_item, schema.nodes.definition_list];\n}\n\nfunction convertImagesToFigure(tr: Transaction) {\n return trTransform(tr, imagesToFiguresTransform);\n}\n\nfunction imagesToFiguresTransform(tr: Transform) {\n const schema = tr.doc.type.schema;\n const images = findChildrenByType(tr.doc, schema.nodes.image);\n images.forEach(image => {\n // position reflecting steps already taken in this handler\n const mappedImagePos = tr.mapping.mapResult(image.pos);\n\n // process image so long as it wasn't deleted by a previous step\n if (!mappedImagePos.deleted) {\n // resolve image pos\n const imagePos = tr.doc.resolve(mappedImagePos.pos);\n\n // if it's an image in a standalone paragraph, convert it to a figure\n if (\n imagePos.parent.type === schema.nodes.paragraph &&\n imagePos.parent.childCount === 1 &&\n !posHasProhibitedFigureParent(schema, imagePos)\n ) {\n // figure attributes\n const attrs = image.node.attrs;\n\n // extract linkTo from link mark (if any)\n if (schema.marks.link.isInSet(image.node.marks)) {\n const linkAttrs = getMarkAttrs(\n tr.doc,\n { from: mappedImagePos.pos, to: mappedImagePos.pos + image.node.nodeSize },\n schema.marks.link,\n );\n if (linkAttrs && linkAttrs.href) {\n attrs.linkTo = linkAttrs.href;\n }\n }\n\n // figure content\n const content = attrs.alt ? Fragment.from(schema.text(attrs.alt)) : Fragment.empty;\n\n // replace image with figure\n const figure = schema.nodes.figure.createAndFill(attrs, content);\n if (figure) {\n tr.replaceRangeWith(mappedImagePos.pos, mappedImagePos.pos + image.node.nodeSize, figure);\n }\n }\n }\n });\n}\n\nfunction isParaWrappingFigure(tok: PandocToken) {\n return isSingleChildParagraph(tok) && tok.c[0].t === PandocTokenType.Image;\n}\n\nfunction isHTMLImageBlock(tok: PandocToken) {\n if (tok.t === PandocTokenType.RawBlock) {\n const format = tok.c[kRawBlockFormat];\n const text = tok.c[kRawBlockContent] as string;\n return format === 'html' && isSingleLineHTML(text) && inlineHTMLIsImage(text);\n } else {\n return false;\n }\n}\n\nfunction isSingleChildParagraph(tok: PandocToken) {\n return tok.t === PandocTokenType.Para && tok.c && tok.c.length === 1;\n}\n\nexport default extension;\n","/*\n * decoration.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { NodeWithPos } from 'prosemirror-utils';\nimport { DecorationAttrs, Decoration } from 'prosemirror-view';\n\nexport function nodeDecoration(nodeWithPos: NodeWithPos, attrs: DecorationAttrs) {\n return Decoration.node(nodeWithPos.pos, nodeWithPos.pos + nodeWithPos.node.nodeSize, attrs);\n}\n","/*\n * image-view.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { NodeView, EditorView } from 'prosemirror-view';\nimport { NodeSelection, PluginKey, Plugin } from 'prosemirror-state';\n\nimport { EditorUI } from '../../api/ui';\nimport { ImageType } from '../../api/image';\nimport { PandocExtensions, imageAttributesAvailable } from '../../api/pandoc';\nimport { isElementVisible } from '../../api/dom';\nimport { EditorEvents } from '../../api/events';\nimport { ResizeEvent } from '../../api/event-types';\n\nimport { imageDialog } from './image-dialog';\nimport {\n attachResizeUI,\n initResizeContainer,\n ResizeUI,\n isResizeUICompatible,\n updateImageViewSize,\n} from './image-resize';\nimport { imageDimensionsFromImg, imageContainerWidth } from './image-util';\n\nimport './image-styles.css';\n\nexport function imageNodeViewPlugins(\n type: string,\n ui: EditorUI,\n events: EditorEvents,\n pandocExtensions: PandocExtensions,\n): Plugin[] {\n return [\n new Plugin({\n key: new PluginKey(`${type}-node-view`),\n props: {\n nodeViews: {\n [type]: (node: ProsemirrorNode, view: EditorView, getPos: boolean | (() => number)) => {\n return new ImageNodeView(node, view, getPos as () => number, ui, events, pandocExtensions);\n },\n },\n },\n }),\n ];\n}\n\nclass ImageNodeView implements NodeView {\n // ProseMirror context\n private readonly type: ImageType;\n private node: ProsemirrorNode;\n private readonly view: EditorView;\n private readonly getPos: () => number;\n private readonly editorUI: EditorUI;\n private readonly imageAttributes: boolean;\n private readonly implicitFigures: boolean;\n\n // DOM elements\n public readonly dom: HTMLElement;\n private readonly img: HTMLImageElement;\n public readonly contentDOM: HTMLElement | null;\n private readonly figcaption: HTMLElement | null;\n\n // transient state\n private imgBroken: boolean;\n\n // things to clean up\n private resizeUI: ResizeUI | null;\n private sizeOnVisibleTimer?: number;\n private unregisterOnResize: VoidFunction;\n private unregisterWatchImg: VoidFunction | null = null;\n\n constructor(\n node: ProsemirrorNode,\n view: EditorView,\n getPos: () => number,\n editorUI: EditorUI,\n editorEvents: EditorEvents,\n pandocExtensions: PandocExtensions,\n ) {\n // determine type\n const schema = node.type.schema;\n this.type = node.type === schema.nodes.image ? ImageType.Image : ImageType.Figure;\n\n // save references\n this.node = node;\n this.view = view;\n this.getPos = getPos;\n this.imageAttributes = imageAttributesAvailable(pandocExtensions);\n this.implicitFigures = pandocExtensions.implicit_figures;\n this.editorUI = editorUI;\n this.resizeUI = null;\n this.imgBroken = false;\n\n // set node selection on click\n const selectOnClick = () => {\n const tr = view.state.tr;\n tr.setSelection(NodeSelection.create(view.state.doc, getPos()));\n view.dispatch(tr);\n };\n\n // show image dialog on double-click\n const editOnDblClick = () => {\n selectOnClick();\n imageDialog(\n this.node,\n imageDimensionsFromImg(this.img, this.containerWidth()),\n this.node.type,\n this.view,\n editorUI,\n this.imageAttributes,\n );\n };\n\n // stop propagation from child elmeents that need to handle click\n // (e.g. figcaption element)\n const noPropagateClick = (ev: MouseEvent) => {\n ev.stopPropagation();\n };\n\n // create the image (used by both image and figure node types)\n this.img = document.createElement('img');\n this.img.classList.add('pm-img');\n this.img.onload = () => {\n this.imgBroken = false;\n };\n this.img.onerror = () => {\n this.imgBroken = true;\n };\n this.img.onclick = selectOnClick;\n this.img.ondblclick = editOnDblClick;\n\n // wrap in figure if appropriate\n if (this.type === ImageType.Figure) {\n // create figure wrapper\n this.dom = document.createElement('figure');\n this.dom.classList.add('pm-figure');\n\n // create container\n const container = document.createElement('div');\n container.contentEditable = 'false';\n this.dom.append(container);\n\n // initialize the image\n container.append(this.img);\n this.updateImg();\n\n // create the caption and make it our contentDOM\n this.figcaption = document.createElement('figcaption');\n this.figcaption.classList.add('pm-figcaption');\n this.figcaption.classList.add('pm-node-caption');\n this.figcaption.onclick = noPropagateClick;\n this.figcaption.ondblclick = noPropagateClick;\n this.contentDOM = this.figcaption;\n this.dom.append(this.figcaption);\n\n // manage visibility\n this.manageFigcaption();\n\n // standard inline image\n } else {\n this.dom = document.createElement('span');\n\n this.dom.append(this.img);\n this.updateImg();\n\n this.contentDOM = null;\n this.figcaption = null;\n }\n\n // prevent drag/drop if the event doesn't target the image\n this.dom.ondragstart = (event: DragEvent) => {\n if (event.target !== this.img) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n // init resize if we support imageAttributes\n if (this.imageAttributes) {\n initResizeContainer(this.dom);\n }\n\n // update image size when the image first becomes visible\n this.updateSizeOnVisible();\n\n // update image size whenever the container is resized\n this.unregisterOnResize = editorEvents.subscribe(ResizeEvent, () => {\n this.updateImageSize();\n });\n }\n\n public destroy() {\n if (this.unregisterWatchImg) {\n this.unregisterWatchImg();\n }\n this.unregisterOnResize();\n this.clearSizeOnVisibleTimer();\n this.detachResizeUI();\n }\n\n public selectNode() {\n // mirror default implementation\n this.dom.classList.add('ProseMirror-selectednode');\n if (this.contentDOM || !this.node.type.spec.draggable) {\n this.dom.draggable = true;\n }\n\n // manage figcaption\n this.manageFigcaption();\n\n // attach resize UI\n this.attachResizeUI();\n }\n\n public deselectNode() {\n // mirror default implementation\n this.dom.classList.remove('ProseMirror-selectednode');\n if (this.contentDOM || !this.node.type.spec.draggable) {\n this.dom.draggable = false;\n }\n\n // remove resize UI\n this.detachResizeUI();\n }\n\n // update image with latest node/attributes\n public update(node: ProsemirrorNode) {\n // boilerplate type check\n if (node.type !== this.node.type) {\n return false;\n }\n\n // set new node and update the image\n this.node = node;\n this.updateImg();\n\n // if we already have resize UI then either update it\n // or detach it (if e.g. the units are no longer compatible)\n if (this.resizeUI) {\n if (isResizeUICompatible(this.img!)) {\n this.resizeUI.update();\n } else {\n this.resizeUI.detach();\n this.resizeUI = null;\n }\n // attach if the node is selected\n } else if (this.isNodeSelected()) {\n this.attachResizeUI();\n }\n return true;\n }\n\n // ignore mutations outside of the content dom so sizing actions don't cause PM re-render\n public ignoreMutation(mutation: MutationRecord | { type: 'selection'; target: Element }) {\n return !this.contentDOM || !this.contentDOM.contains(mutation.target);\n }\n\n // map node to img tag\n private updateImg() {\n // unsubscribe from any existing resource watcher\n if (this.unregisterWatchImg) {\n this.unregisterWatchImg();\n }\n\n // map to path reachable within current editing frame\n const src = this.node.attrs.src;\n this.img.src = this.editorUI.context.mapResourceToURL(src);\n\n // if this is a local resource then watch it and update when it changes\n if (!src.match(/^\\w+:\\/\\//)) {\n this.unregisterWatchImg = this.editorUI.context.watchResource(src, () => {\n this.img.src = this.editorUI.context.mapResourceToURL(src);\n });\n }\n\n // title/tooltip\n this.img.title = '';\n if (this.node.attrs.title) {\n this.img.title = this.node.attrs.title;\n }\n\n // ensure alt attribute so that we get default browser broken image treatment\n this.img.alt = this.node.textContent || this.node.attrs.src;\n\n // manage caption visibility\n this.manageFigcaption();\n\n // update size\n this.updateImageSize();\n }\n\n private updateImageSize() {\n const containerWidth = this.img.isConnected ? this.containerWidth() : 0;\n updateImageViewSize(this.node, this.img, this.isFigure() ? this.dom : null, containerWidth);\n }\n\n private updateSizeOnVisible() {\n const updateSizeOnVisible = () => {\n if (isElementVisible(this.img)) {\n this.updateImageSize();\n this.clearSizeOnVisibleTimer();\n }\n };\n this.sizeOnVisibleTimer = window.setInterval(updateSizeOnVisible, 200);\n }\n\n private clearSizeOnVisibleTimer() {\n if (this.sizeOnVisibleTimer) {\n clearInterval(this.sizeOnVisibleTimer);\n this.sizeOnVisibleTimer = undefined;\n }\n }\n\n // attach resize UI if appropriate\n private attachResizeUI() {\n if (this.imageAttributes && !this.imgBroken && isResizeUICompatible(this.img!)) {\n const imageNode = () => ({ pos: this.getPos(), node: this.node });\n const imgContainerWidth = () => this.containerWidth();\n this.resizeUI = attachResizeUI(imageNode, this.dom, this.img!, imgContainerWidth, this.view, this.editorUI);\n }\n }\n\n private detachResizeUI() {\n if (this.resizeUI) {\n this.resizeUI.detach();\n this.resizeUI = null;\n }\n }\n\n private isNodeSelected() {\n return this.dom.classList.contains('ProseMirror-selectednode');\n }\n\n private isFigure() {\n return this.type === ImageType.Figure;\n }\n\n private containerWidth() {\n return imageContainerWidth(this.getPos(), this.view);\n }\n\n private manageFigcaption() {\n // hide the figcaption if appropriate\n const noImplicitFigures = !this.implicitFigures;\n const emptyFigcaption = this.figcaption && this.node.textContent.length === 0;\n const selection = this.view.state.selection;\n const selectionInFigcaption = selection.empty && selection.$head.node() === this.node;\n const hide = noImplicitFigures || (emptyFigcaption && !selectionInFigcaption);\n\n // hide or show if we have a figcaption\n if (this.figcaption) {\n if (noImplicitFigures) {\n this.figcaption.style.display = 'none';\n this.figcaption.contentEditable = 'false';\n } else {\n this.figcaption.contentEditable = hide ? 'false' : 'true';\n this.figcaption.style.height = hide ? '0' : '';\n this.figcaption.style.minHeight = hide ? '0' : '';\n this.figcaption.style.margin = hide ? '0' : '';\n }\n }\n }\n}\n","/*\n * image-resize.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\nimport { NodeWithPos } from 'prosemirror-utils';\nimport { NodeSelection } from 'prosemirror-state';\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport {\n createPopup,\n createHorizontalPanel,\n addHorizontalPanelCell,\n createInputLabel,\n createImageButton,\n createCheckboxInput,\n createSelectInput,\n createTextInput,\n} from '../../api/widgets/widgets';\nimport { EditorUI } from '../../api/ui';\nimport { editingRootScrollContainerElement } from '../../api/node';\nimport { extractSizeStyles, kPercentUnit, kPixelUnit, removeStyleAttrib } from '../../api/css';\nimport {\n imageSizePropWithUnit,\n isNaturalAspectRatio,\n unitToPixels,\n pixelsToUnit,\n roundUnit,\n kValidUnits,\n isValidImageSizeUnit,\n} from '../../api/image';\nimport { kWidthAttrib, kHeightAttrib, kStyleAttrib, kAlignAttrib } from '../../api/pandoc_attr';\nimport { EditorUIImages } from '../../api/ui-images';\n\nimport { imageDialog } from './image-dialog';\nimport { hasPercentWidth, imageDimensionsFromImg } from './image-util';\n\nconst kDataWidth = 'data-width';\nconst kDataHeight = 'data-height';\n\nconst kDefaultContainerDisplay = 'inline-block';\n\nexport function initResizeContainer(container: HTMLElement) {\n // add standard parent class\n container.classList.add('pm-image-resize-container', 'pm-selected-node-outline-color');\n\n // so that we are the offsetParent for the resize handles and shelf\n container.style.position = 'relative';\n\n // so that the container matches the size of the contained image\n container.style.display = kDefaultContainerDisplay;\n\n // so that the handles and shelf can be visible outside the boundaries of the image\n container.style.overflow = 'visible';\n\n // return for convenience\n return container;\n}\n\nexport function isResizeUICompatible(img: HTMLImageElement) {\n // incompatible if it has a width, but not a data-width\n const incompatibleWidth = img.style.width && !img.hasAttribute(kDataWidth);\n\n // incompatible if it has a height, but not a data-height\n const incompatibleHeight = img.style.height && img.style.height !== 'auto' && !img.hasAttribute(kDataHeight);\n\n return !incompatibleWidth && !incompatibleHeight;\n}\n\nexport interface ResizeUI {\n update: () => void;\n detach: () => void;\n}\n\nexport function attachResizeUI(\n imageNode: () => NodeWithPos,\n container: HTMLElement,\n img: HTMLImageElement,\n imgContainerWidth: () => number,\n view: EditorView,\n ui: EditorUI,\n): ResizeUI {\n // indicate that resize ui is active\n container.classList.add('pm-image-resize-active');\n\n // sync current state of shelf to node\n const updateImageNodeFromShelf = () => {\n updateImageNodeSize(\n view,\n imageNode(),\n img,\n imgContainerWidth,\n shelf.props.width(),\n shelf.props.height(),\n shelf.props.units(),\n );\n };\n\n // shelf init\n const onInitShelf = () => {\n // sync props\n shelf.sync();\n\n // default for lockRatio based on naturalWidth/naturalHeight\n const dims = imageDimensionsFromImg(img, imgContainerWidth());\n shelf.props.setLockRatio(isNaturalAspectRatio(shelf.props.width(), shelf.props.height(), dims, true));\n };\n\n // handle width changed from shelf\n const onWidthChanged = () => {\n const width = shelf.props.width();\n const height = shelf.props.lockRatio() ? (img.offsetHeight / img.offsetWidth) * width : shelf.props.height();\n shelf.props.setHeight(height);\n updateImageNodeFromShelf();\n };\n\n // handle height changed from shelf\n const onHeightChanged = () => {\n const height = shelf.props.height();\n const width = shelf.props.lockRatio() ? (img.offsetWidth / img.offsetHeight) * height : shelf.props.width();\n shelf.props.setWidth(width);\n updateImageNodeFromShelf();\n };\n\n // do necessary unit conversion when the units change\n const onUnitsChanged = () => {\n const prevUnits = shelfSizeFromImage(img).unit;\n const containerWidth = imgContainerWidth();\n\n const width = shelf.props.width();\n const widthPixels = unitToPixels(width, prevUnits, containerWidth);\n let widthInUnits = pixelsToUnit(widthPixels, shelf.props.units(), containerWidth);\n if (hasPercentWidth(shelf.props.units()) && widthInUnits > 100) {\n widthInUnits = 100;\n }\n shelf.props.setWidth(widthInUnits);\n\n const height = shelf.props.height();\n const heightPixels = unitToPixels(height, prevUnits, containerWidth);\n shelf.props.setHeight(pixelsToUnit(heightPixels, shelf.props.units(), containerWidth));\n\n updateImageNodeFromShelf();\n };\n\n // handle editImage request from shelf\n const onEditImage = () => {\n const nodeWithPos = imageNode();\n imageDialog(\n nodeWithPos.node,\n imageDimensionsFromImg(img, imgContainerWidth()),\n nodeWithPos.node.type,\n view,\n ui,\n true,\n );\n };\n\n // create resize shelf\n const shelf = resizeShelf(\n view,\n container,\n img,\n onInitShelf,\n onWidthChanged,\n onHeightChanged,\n onUnitsChanged,\n onEditImage,\n ui.images,\n ui.context.translateText,\n );\n\n // create resize handle and add it to the container\n const handle = resizeHandle(\n img,\n imgContainerWidth,\n shelf.props.lockRatio,\n shelf.props.units,\n shelf.sync,\n updateImageNodeFromShelf,\n );\n container.append(handle);\n\n // return functions that can be used to update and detach the ui\n return {\n update: () => {\n shelf.sync();\n },\n detach: () => {\n container.classList.remove('pm-image-resize-active');\n handle.remove();\n shelf.remove();\n },\n };\n}\n\nfunction resizeShelf(\n view: EditorView,\n container: HTMLElement,\n img: HTMLImageElement,\n onInit: () => void,\n onWidthChanged: () => void,\n onHeightChanged: () => void,\n onUnitsChanged: () => void,\n onEditImage: () => void,\n uiImages: EditorUIImages,\n translateText: (text: string) => string,\n) {\n // create resize shelf\n const shelf = createPopup(view, []);\n\n // add the shelf to the editor container (so we don't mutate the editor dom)\n const editorContainer = view.dom.parentNode as HTMLElement;\n editorContainer.appendChild(shelf);\n\n // update shelf absolute position to make sure it's visible\n const updatePosition = () => {\n const kShelfRequiredSize = 333;\n const editorBox = editorContainer.getBoundingClientRect();\n const imageBox = container.getBoundingClientRect();\n shelf.style.top = imageBox.top - editorBox.top + imageBox.height + 6 + 'px';\n const positionLeft = imageBox.left + kShelfRequiredSize < editorBox.right;\n if (positionLeft) {\n shelf.style.right = '';\n shelf.style.left = imageBox.left - editorBox.left + 'px';\n } else {\n shelf.style.left = '';\n shelf.style.right = editorBox.right - imageBox.right + 'px';\n }\n };\n\n // detect when the editing root note scrolls and update the position\n const editingScrollContainerEl = editingRootScrollContainerElement(view);\n if (editingScrollContainerEl) {\n editingScrollContainerEl.addEventListener('scroll', updatePosition);\n }\n\n // update position every 50ms (cleanup drag/drop copy/paste mispositioning)\n const positionTimer = setInterval(updatePosition, 50);\n\n // main panel that holds the controls\n const panel = createHorizontalPanel();\n shelf.append(panel);\n const addToPanel = (widget: HTMLElement, paddingRight: number) => {\n addHorizontalPanelCell(panel, widget);\n if (paddingRight) {\n const paddingSpan = window.document.createElement('span');\n paddingSpan.style.width = paddingRight + kPixelUnit;\n addHorizontalPanelCell(panel, paddingSpan);\n }\n };\n\n // width\n const inputClasses = ['pm-text-color', 'pm-background-color'];\n const wLabel = createInputLabel('w:');\n addToPanel(wLabel, 4);\n const wInput = createTextInput(4, inputClasses);\n wInput.onchange = onWidthChanged;\n addToPanel(wInput, 8);\n\n // height\n const kHeightWidth = '38px';\n const hLabel = createInputLabel('h:');\n addToPanel(hLabel, 4);\n const hInput = createTextInput(4, inputClasses, { width: kHeightWidth });\n hInput.onchange = onHeightChanged;\n addToPanel(hInput, 0);\n const hAutoLabel = createInputLabel('(auto)', ['pm-light-text-color'], { width: kHeightWidth });\n addToPanel(hAutoLabel, 10);\n\n // units\n const unitsSelect = createSelectInput(kValidUnits, inputClasses);\n unitsSelect.onchange = () => {\n // drive focus to width and back to prevent wierd selection change\n // detection condition that causes PM to re-render the node the\n // next time we resize it\n wInput.focus();\n unitsSelect.focus();\n\n // manage UI\n manageUnitsUI();\n\n // notify client\n onUnitsChanged();\n };\n addToPanel(unitsSelect, 12);\n\n // lock ratio\n const checkboxWrapper = window.document.createElement('div');\n const lockCheckbox = createCheckboxInput();\n lockCheckbox.checked = true;\n checkboxWrapper.append(lockCheckbox);\n addToPanel(checkboxWrapper, 4);\n const lockLabel = createInputLabel(translateText('Lock ratio'));\n addToPanel(lockLabel, 20);\n\n // edit button\n const editImage = createImageButton(\n uiImages.properties!,\n ['pm-image-button-edit-properties'],\n translateText('Edit Attributes'),\n );\n editImage.onclick = onEditImage;\n addHorizontalPanelCell(panel, editImage);\n\n // run onInit (wait for image to load if necessary)\n if (img.complete) {\n setTimeout(onInit, 0);\n } else {\n img.onload = onInit;\n }\n\n // function used to manage units ui (percent vs. non-percent)\n const manageUnitsUI = () => {\n const percentSizing = unitsSelect.value === kPercentUnit;\n\n if (percentSizing) {\n lockCheckbox.checked = true;\n lockCheckbox.disabled = true;\n } else {\n lockCheckbox.disabled = false;\n }\n\n hInput.style.display = percentSizing ? 'none' : '';\n hAutoLabel.style.display = percentSizing ? '' : 'none';\n };\n manageUnitsUI();\n\n // helper function to get a dimension (returns null if input not currently valid)\n const getDim = (input: HTMLInputElement) => {\n const value = parseFloat(input.value);\n if (isNaN(value)) {\n return null;\n }\n if (value > 0) {\n return value;\n } else {\n return null;\n }\n };\n\n const setWidth = (width: number) => {\n wInput.value = roundUnit(width, unitsSelect.value);\n };\n const setHeight = (height: number) => {\n hInput.value = roundUnit(height, unitsSelect.value);\n };\n\n return {\n // shelf element\n el: shelf,\n\n // sync the shelf props to the current size/units of the image\n // we don't sync to the node b/c we want to benefit from automatic\n // unit handling in the conversion to the DOM\n sync: () => {\n const size = shelfSizeFromImage(img);\n unitsSelect.value = size.unit;\n setWidth(size.width);\n setHeight(size.height);\n\n // manage units ui\n manageUnitsUI();\n\n // ensure we are positioned correctly (not offscreen, wide enough, etc.)\n updatePosition();\n },\n\n position: () => {\n updatePosition();\n },\n\n remove: () => {\n if (editingScrollContainerEl) {\n editingScrollContainerEl.removeEventListener('scroll', updatePosition);\n }\n clearInterval(positionTimer);\n shelf.remove();\n },\n\n props: {\n width: () => getDim(wInput) || shelfSizeFromImage(img).width,\n setWidth,\n height: () => getDim(hInput) || shelfSizeFromImage(img).height,\n setHeight,\n units: () => unitsSelect.value,\n setUnits: (units: string) => (unitsSelect.value = units),\n lockRatio: () => lockCheckbox.checked,\n setLockRatio: (lock: boolean) => {\n if (!lockCheckbox.disabled) {\n lockCheckbox.checked = lock;\n }\n },\n },\n };\n}\n\nfunction resizeHandle(\n img: HTMLImageElement,\n imgContainerWidth: () => number,\n lockRatio: () => boolean,\n units: () => string,\n onSizing: () => void,\n onSizingComplete: () => void,\n) {\n const handle = document.createElement('span');\n handle.contentEditable = 'false';\n handle.classList.add('pm-image-resize-handle', 'pm-background-color', 'pm-selected-node-border-color');\n handle.style.position = 'absolute';\n handle.style.bottom = '-6px';\n handle.style.right = '-6px';\n handle.style.cursor = 'nwse-resize';\n\n const havePointerEvents = !!document.body.setPointerCapture;\n\n const onPointerDown = (ev: MouseEvent) => {\n ev.preventDefault();\n\n const startWidth = img.offsetWidth;\n const startHeight = img.offsetHeight;\n\n const startX = ev.pageX;\n const startY = ev.pageY;\n\n const containerWidth = imgContainerWidth();\n\n const onPointerMove = (e: MouseEvent) => {\n // detect pointer movement\n const movedX = e.pageX - startX;\n const movedY = e.pageY - startY;\n\n let width;\n let height;\n if (lockRatio()) {\n if (movedX >= movedY) {\n width = startWidth + movedX;\n height = startHeight + movedX * (startHeight / startWidth);\n } else {\n height = startHeight + movedY;\n width = startWidth + movedY * (startWidth / startHeight);\n }\n } else {\n width = startWidth + movedX;\n height = startHeight + movedY;\n }\n\n // determine the new width in units. If it's percent and > 100 then clip\n const widthInUnits = pixelsToUnit(width, units(), containerWidth);\n if (hasPercentWidth(units()) && widthInUnits > 100) {\n width = containerWidth;\n height = width * (startHeight / startWidth);\n }\n\n img.style.width = width + kPixelUnit;\n img.setAttribute(kDataWidth, pixelsToUnit(width, units(), containerWidth) + units());\n img.style.height = height + kPixelUnit;\n img.setAttribute(kDataHeight, pixelsToUnit(height, units(), containerWidth) + units());\n\n onSizing();\n };\n\n const onPointerUp = (e: MouseEvent) => {\n e.preventDefault();\n\n // stop listening to events\n if (havePointerEvents) {\n handle.releasePointerCapture((e as PointerEvent).pointerId);\n handle.removeEventListener('pointermove', onPointerMove);\n handle.removeEventListener('pointerup', onPointerUp);\n } else {\n document.removeEventListener('mousemove', onPointerMove);\n document.removeEventListener('mouseup', onPointerUp);\n }\n\n // update image size\n onSizingComplete();\n };\n\n if (havePointerEvents) {\n handle.setPointerCapture((ev as PointerEvent).pointerId);\n handle.addEventListener('pointermove', onPointerMove);\n handle.addEventListener('pointerup', onPointerUp);\n } else {\n document.addEventListener('mousemove', onPointerMove);\n document.addEventListener('mouseup', onPointerUp);\n }\n };\n\n if (havePointerEvents) {\n handle.addEventListener('pointerdown', onPointerDown);\n } else {\n handle.addEventListener('mousedown', onPointerDown);\n }\n\n return handle;\n}\n\n// derive the shelf size attributes from the image. takes advantage of any data-width\n// or data-height attributes, then falls back to actual offsetWidth/offsetHeight\n// as necessary\nfunction shelfSizeFromImage(img: HTMLImageElement) {\n // get attributes\n const width = img.getAttribute(kDataWidth);\n const height = img.getAttribute(kDataHeight);\n\n // if there is no width and no height, then use naturalWidth/naturalHeight\n if (!width && !height) {\n return {\n width: img.naturalWidth || img.offsetWidth,\n height: img.naturalHeight || img.offsetHeight,\n unit: kPixelUnit,\n };\n\n // read units\n } else {\n let widthWithUnit = imageSizePropWithUnit(width);\n let heightWithUnit = imageSizePropWithUnit(height);\n\n if (!widthWithUnit) {\n widthWithUnit = {\n size: heightWithUnit!.size * (img.offsetWidth / img.offsetHeight),\n unit: heightWithUnit!.unit,\n };\n }\n\n if (!heightWithUnit) {\n heightWithUnit = {\n size: widthWithUnit.size * (img.offsetHeight / img.offsetWidth),\n unit: widthWithUnit.unit,\n };\n }\n\n return {\n width: widthWithUnit.size,\n height: heightWithUnit.size,\n unit: widthWithUnit.unit,\n };\n }\n}\n\nfunction updateImageNodeSize(\n view: EditorView,\n image: NodeWithPos,\n img: HTMLImageElement,\n imgContainerWidth: () => number,\n width: number,\n height: number,\n unit: string,\n) {\n // don't write pixels explicitly\n unit = unit === kPixelUnit ? '' : unit;\n\n // edit width & height in keyvalue\n let keyvalue = extractSizeStyles(image.node.attrs.keyvalue as Array<[string, string]>)!;\n keyvalue = keyvalue.filter(value => ![kWidthAttrib, kHeightAttrib].includes(value[0]));\n keyvalue.push([kWidthAttrib, width + unit]);\n const dims = imageDimensionsFromImg(img, imgContainerWidth());\n if (!hasPercentWidth(width + unit) && !isNaturalAspectRatio(width, height, dims, false)) {\n keyvalue.push([kHeightAttrib, height + unit]);\n }\n\n // create transaction\n const tr = view.state.tr;\n\n // set new attributes\n tr.setNodeMarkup(image.pos, image.node.type, { ...image.node.attrs, keyvalue });\n\n // restore node selection if our tr.setNodeMarkup blew away the selection\n const prevState = view.state;\n if (prevState.selection instanceof NodeSelection && prevState.selection.from === image.pos) {\n tr.setSelection(NodeSelection.create(tr.doc, image.pos));\n }\n\n // dispatch transaction\n view.dispatch(tr);\n}\n\n// update the DOM representation of the image. extracts size-oriented attributes from the node and\n// applies them to the img element (alignment oriented attributes are applied to the figure elmenet)\nexport function updateImageViewSize(\n node: ProsemirrorNode,\n img: HTMLImageElement,\n figure: HTMLElement | null,\n containerWidth: number,\n) {\n // reset attributes (they'll be set to new values below)\n img.removeAttribute(kStyleAttrib);\n img.removeAttribute(kDataWidth);\n img.removeAttribute(kDataHeight);\n\n // reset figure styles (only reset styles that we explicitly set below, b/c some\n // styles may have been set by e.g. the attachResizeUI function)\n if (figure) {\n figure.style.cssFloat = '';\n figure.style.verticalAlign = '';\n figure.style.margin = '';\n figure.style.marginTop = '';\n figure.style.marginBottom = '';\n figure.style.marginRight = '';\n figure.style.marginLeft = '';\n figure.style.padding = '';\n figure.style.paddingTop = '';\n figure.style.paddingBottom = '';\n figure.style.paddingRight = '';\n figure.style.paddingLeft = '';\n figure.style.display = kDefaultContainerDisplay;\n }\n\n // apply keyvalue attribute to image\n if (node.attrs.keyvalue) {\n // factor width & height out of style\n const keyvalue = extractSizeStyles(node.attrs.keyvalue);\n\n // inspect all keys and process width, height, and style\n (keyvalue as Array<[string, string]>).forEach(attr => {\n // alias key and value\n const key = attr[0];\n let value = attr[1];\n\n // set align oriented styles on figure parent\n if (key === kStyleAttrib) {\n if (figure) {\n const liftStyle = (attrib: string, val: string) => figure.style.setProperty(attrib, val);\n value = removeStyleAttrib(value, 'float', liftStyle);\n value = removeStyleAttrib(value, 'vertical-align', liftStyle);\n value = removeStyleAttrib(value, 'padding(?:[\\\\w\\\\-])*', liftStyle);\n removeStyleAttrib(value, 'display', liftStyle); // leave display for lifting by image\n }\n\n // apply selected other styles to the image view (we don't just forward the entire\n // style attribute b/c that would interfere with setting of style props in the\n // width and height cases below). here we should whitelist in all styles we think\n // users might want to see in the editor\n const liftImgStyle = (attrib: string, val: string) => img.style.setProperty(attrib, val);\n value = removeStyleAttrib(value, 'border(?:[\\\\w\\\\-])*', liftImgStyle);\n value = removeStyleAttrib(value, 'margin(?:[\\\\w\\\\-])*', liftImgStyle);\n value = removeStyleAttrib(value, 'display', liftImgStyle);\n } else if (key === kWidthAttrib) {\n // see if this is a unit we can edit\n const widthProp = imageSizePropWithUnit(value);\n if (widthProp) {\n widthProp.unit = widthProp.unit || kPixelUnit;\n if (isValidImageSizeUnit(widthProp.unit)) {\n img.setAttribute(kDataWidth, widthProp.size + widthProp.unit);\n img.style.width = unitToPixels(widthProp.size, widthProp.unit, containerWidth) + kPixelUnit;\n }\n }\n\n // if not, just pass it straight through (editing UI will be disabled)\n if (!img.hasAttribute(kDataWidth)) {\n img.style.width = value;\n }\n } else if (key === kHeightAttrib) {\n // see if this is a unit we can edit\n const heightProp = imageSizePropWithUnit(value);\n if (heightProp) {\n heightProp.unit = heightProp.unit || kPixelUnit;\n if (isValidImageSizeUnit(heightProp.unit)) {\n img.setAttribute(kDataHeight, heightProp.size + heightProp.unit);\n img.style.height = unitToPixels(heightProp.size, heightProp.unit, containerWidth) + kPixelUnit;\n }\n }\n\n // if not, just pass it straight through (editing UI will be disabled)\n if (!img.hasAttribute(kDataHeight)) {\n img.style.height = value;\n }\n\n // use of legacy 'align' attribute is common for some pandoc users\n // so we convert it to the requisite CSS and apply it to the figure container\n } else if (figure && key === kAlignAttrib) {\n switch (value) {\n case 'left':\n case 'right':\n figure.style.cssFloat = value;\n break;\n case 'top':\n case 'bottom':\n case 'middle':\n figure.style.verticalAlign = value;\n break;\n }\n }\n });\n\n // if width is a percentage, then displayed height needs to be 'auto'\n if (hasPercentWidth(img.getAttribute(kDataWidth))) {\n img.style.height = 'auto';\n }\n }\n}\n","/*\n * widgets.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\n\nimport { applyStyles } from '../css';\n\nimport './widgets.css';\n\nexport function createHorizontalPanel() {\n const div = window.document.createElement('div');\n div.classList.add('pm-horizontal-panel');\n return div;\n}\n\nexport function addHorizontalPanelCell(panel: HTMLDivElement, el: HTMLElement) {\n el.classList.add('pm-horizontal-panel-cell');\n panel.append(el);\n}\n\nexport function createPopup(\n view: EditorView,\n classes: string[],\n onDestroyed?: () => void,\n style?: { [key: string]: string },\n) {\n // create popup\n const popup = window.document.createElement('span');\n popup.contentEditable = 'false';\n popup.classList.add(\n 'pm-popup',\n 'pm-text-color',\n 'pm-proportional-font',\n 'pm-pane-border-color',\n 'pm-background-color',\n );\n popup.style.position = 'absolute';\n popup.style.zIndex = '10';\n applyStyles(popup, classes, style);\n\n // create mutation observer that watches for destruction\n if (onDestroyed) {\n const observer = new MutationObserver(mutationsList => {\n mutationsList.forEach(mutation => {\n mutation.removedNodes.forEach(node => {\n if (node === popup) {\n observer.disconnect();\n onDestroyed();\n }\n });\n });\n });\n observer.observe(view.dom, { attributes: false, childList: true, subtree: true });\n }\n\n return popup;\n}\n\nexport function createImageButton(image: string, classes: string[], title: string, style?: { [key: string]: string }) {\n const button = window.document.createElement('button');\n button.classList.add('pm-image-button');\n button.title = title;\n applyStyles(button, classes, style);\n const imageEl = window.document.createElement('img') as HTMLImageElement;\n imageEl.src = image;\n button.append(imageEl);\n return button;\n}\n\nexport function createInputLabel(text: string, classes?: string[], style?: { [key: string]: string }) {\n const label = window.document.createElement('label');\n label.innerText = text;\n label.classList.add('pm-input-label');\n applyStyles(label, classes, style);\n return label;\n}\n\nexport function createSelectInput(options: string[], classes?: string[], style?: { [key: string]: string }) {\n const select = window.document.createElement('select');\n appendOptions(select, options);\n select.classList.add('pm-input-select');\n select.classList.add('pm-pane-border-color');\n applyStyles(select, classes, style);\n return select;\n}\n\nfunction appendOptions(container: HTMLElement, options: string[]) {\n options.forEach(option => {\n const optionEl = window.document.createElement('option');\n optionEl.value = option;\n optionEl.textContent = option;\n container.append(optionEl);\n });\n}\n\nexport function createCheckboxInput(classes?: string[], style?: { [key: string]: string }) {\n const input = window.document.createElement('input');\n input.classList.add('pm-input-checkbox');\n input.type = 'checkbox';\n applyStyles(input, classes, style);\n return input;\n}\n\nexport function createTextInput(widthChars: number, classes?: string[], style?: { [key: string]: string }) {\n const input = document.createElement('input');\n input.type = 'text';\n input.classList.add('pm-input-text');\n input.classList.add('pm-pane-border-color');\n applyStyles(input, classes, style);\n input.style.width = widthChars + 'ch';\n return input;\n}\n","/*\n * figure-keys.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\nimport { EditorState, Transaction, NodeSelection, Selection, TextSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport {\n findParentNodeOfTypeClosestToPos,\n findSelectedNodeOfType,\n setTextSelection,\n ContentNodeWithPos,\n findParentNodeOfType,\n findParentNodeClosestToPos,\n} from 'prosemirror-utils';\n\nimport { BaseKey, verticalArrowCanAdvanceWithinTextBlock } from '../../api/basekeys';\nimport { exitNode } from '../../api/command';\n\nexport function figureKeys(schema: Schema) {\n return [\n { key: BaseKey.Enter, command: exitNode(schema.nodes.figure, -1, false) },\n { key: BaseKey.Backspace, command: backspaceHandler() },\n { key: BaseKey.ArrowLeft, command: arrowHandler('left') },\n { key: BaseKey.ArrowRight, command: arrowHandler('right') },\n { key: BaseKey.ArrowUp, command: arrowHandler('up') },\n { key: BaseKey.ArrowDown, command: arrowHandler('down') },\n ];\n}\n\nfunction backspaceHandler() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // must be an empty selection\n const selection = state.selection;\n if (!selection.empty) {\n return false;\n }\n\n // must be a selection at the beginning of it's parent\n const schema = state.schema;\n const { $head } = state.selection;\n const { parentOffset } = $head;\n if (parentOffset !== 0) {\n return false;\n }\n\n // two scenarios: backspace within empty caption or backspace right after figure\n const isWithinEmptyCaption = $head.parent.type === schema.nodes.figure && $head.parent.childCount === 0;\n if (isWithinEmptyCaption) {\n if (dispatch) {\n // set a node selection for the figure\n const tr = state.tr;\n tr.setSelection(NodeSelection.create(tr.doc, $head.pos - 1));\n dispatch(tr);\n }\n return true;\n } else {\n // check if the previous node is a figure\n const parent = $head.node($head.depth - 1);\n const parentIndex = $head.index($head.depth - 1);\n if (parentIndex > 0) {\n const previousNode = parent.child(parentIndex - 1);\n if (previousNode.type === schema.nodes.figure) {\n if (dispatch) {\n const tr = state.tr;\n\n // if the current node is and empty textblock then remove it\n if ($head.node().childCount === 0) {\n const parentTextBlock = findParentNodeClosestToPos($head, node => node.isTextblock);\n if (parentTextBlock) {\n tr.deleteRange(parentTextBlock.pos, parentTextBlock.pos + parentTextBlock.node.nodeSize);\n }\n }\n\n const nodePos = $head.pos - previousNode.nodeSize - 1;\n const figureSelection = NodeSelection.create(tr.doc, nodePos);\n tr.setSelection(figureSelection);\n dispatch(tr);\n }\n return true;\n }\n }\n }\n\n return false;\n };\n}\n\nfunction arrowHandler(dir: 'up' | 'down' | 'left' | 'right') {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // select figure\n const selectFigure = (figure: ContentNodeWithPos) => {\n if (dispatch) {\n const tr = state.tr;\n const figureSelection = NodeSelection.create(state.doc, figure.pos);\n tr.setSelection(figureSelection).scrollIntoView();\n dispatch(tr);\n }\n };\n\n // select figure caption\n const selectFigureCaption = (figure: ContentNodeWithPos, atEnd = false) => {\n if (dispatch) {\n const tr = state.tr;\n setTextSelection(figure.pos + (atEnd ? figure.node.textContent.length + 1 : 0), 1)(tr);\n dispatch(tr);\n }\n };\n\n // alias schema and selection\n const { schema, selection } = state;\n\n // down/right arrow for node selection w/ caption drives cursor into caption\n if (\n (dir === 'down' || dir === 'right') &&\n selection instanceof NodeSelection &&\n selection.node.type === schema.nodes.figure\n ) {\n const figure = findSelectedNodeOfType(schema.nodes.figure)(selection);\n if (figure && figure.node.childCount > 0) {\n selectFigureCaption(figure);\n return true;\n }\n }\n\n // up/left arrow for selection in caption takes us back to the node selection\n if (\n (dir === 'up' || dir === 'left') &&\n selection instanceof TextSelection &&\n !!findParentNodeOfType(schema.nodes.figure)(selection)\n ) {\n if (dir === 'up' || (dir === 'left' && selection.$head.parentOffset === 0)) {\n const figure = findParentNodeOfType(schema.nodes.figure)(selection);\n if (figure) {\n selectFigure(figure);\n return true;\n }\n }\n\n // normal node traversal\n } else if (selection.empty && view && view.endOfTextblock(dir)) {\n // compute side offset\n const side = dir === 'left' || dir === 'up' ? -1 : 1;\n\n // get selection head\n const { $head } = selection;\n\n // see if this would traverse our type\n const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side);\n if (nextPos.$head) {\n const figure = findParentNodeOfTypeClosestToPos(nextPos.$head, schema.nodes.figure);\n if (figure) {\n // check for e.g. math where you can advance across embedded newlines\n if ((dir === 'up' || dir === 'down') && verticalArrowCanAdvanceWithinTextBlock(state.selection, dir)) {\n return false;\n }\n // arrowing back into a figure with a caption selects the caption\n if (side === -1 && figure.node.childCount > 0) {\n selectFigureCaption(figure, dir === 'left');\n // otherwise select the figure\n } else {\n selectFigure(figure);\n }\n return true;\n }\n }\n }\n\n // not handled\n return false;\n };\n}\n","/*\n * image-events.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\n\nimport { Plugin, PluginKey } from 'prosemirror-state';\nimport { EditorUI } from '../../api/ui';\n\nconst kTextUriList = 'text/uri-list';\nconst kApplicationQtImage = 'application/x-qt-image';\n\nconst pluginKey = new PluginKey('image-events');\n\nexport function imageEventsPlugin(ui: EditorUI) {\n return new Plugin({\n key: pluginKey,\n props: {\n handleDOMEvents: {\n drop: imageDrop(ui),\n },\n handlePaste: imagePaste(ui),\n },\n });\n}\n\nfunction imagePaste(ui: EditorUI) {\n return (view: EditorView, event: Event) => {\n const clipboardEvent = event as ClipboardEvent;\n\n if (clipboardEvent.clipboardData) {\n // detect file pastes where there is no payload, in that case check to see\n // if there is clipboard data we can get from our context (e.g. from Qt)\n if (clipboardEvent.clipboardData.types.includes(kTextUriList)) {\n const uriList = clipboardEvent.clipboardData.getData(kTextUriList);\n if (uriList.length === 0) {\n ui.context.clipboardUris().then(uris => {\n if (uris) {\n handleImageUris(view, view.state.selection.from, event, uris, ui);\n }\n });\n event.preventDefault();\n return true;\n }\n // raw image paste (e.g. from an office doc)\n } else if (clipboardEvent.clipboardData.types.includes('application/x-qt-image')) {\n\n // don't process excel sheets (we want to use their html representation)\n const kTextHtml = \"text/html\";\n if (clipboardEvent.clipboardData.types.includes(kTextHtml) &&\n clipboardEvent.clipboardData.getData(kTextHtml).includes(\"content=Excel.Sheet\")) {\n return false;\n }\n \n ui.context.clipboardImage().then(image => {\n if (image) {\n handleImageUris(view, view.state.selection.from, event, [image], ui);\n }\n });\n event.preventDefault();\n return true;\n }\n }\n\n return false;\n };\n}\n\nfunction imageDrop(ui: EditorUI) {\n return (view: EditorView, event: Event) => {\n // alias to drag event so typescript knows about event.dataTransfer\n const dragEvent = event as DragEvent;\n\n // ensure we have data transfer\n if (!dragEvent.dataTransfer) {\n return false;\n }\n\n // ensure the drop coordinates map to an editor position\n const coordinates = view.posAtCoords({\n left: dragEvent.clientX,\n top: dragEvent.clientY,\n });\n if (!coordinates) {\n return false;\n }\n\n // array of uris\n let uris: string[] | null = null;\n\n // see if this is a drag of uris\n const uriList = dragEvent.dataTransfer.getData(kTextUriList);\n if (uriList) {\n uris = uriList.split('\\r?\\n');\n } else {\n // see if the ui context has some dropped uris\n uris = ui.context.droppedUris();\n }\n\n // process uris if we have them\n if (uris && handleImageUris(view, coordinates.pos, event, uris, ui)) {\n event.preventDefault();\n return true;\n } else {\n return false;\n }\n };\n}\n\nfunction handleImageUris(view: EditorView, pos: number, event: Event, uris: string[], ui: EditorUI): boolean {\n // filter out images\n const imageUris = uris.filter(uri => {\n // get extension and check it it's an image\n // https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types#Common_image_file_types\n const kImageExtensions = [\n 'apng',\n 'bmp',\n 'gif',\n 'ico',\n 'cur',\n 'jpg',\n 'jpeg',\n 'jfif',\n 'pjpeg',\n 'pjp',\n 'png',\n 'svg',\n 'tif',\n 'tiff',\n 'webp',\n ];\n const extension = uri\n .split(/\\./)\n .pop()!\n .toLowerCase();\n return kImageExtensions.includes(extension);\n });\n\n // exit if we have no image uris\n if (imageUris.length === 0) {\n return false;\n }\n\n // resolve image uris then insert them. note that this is done\n // async so we return true indicating we've handled the drop and\n // then we actually do the insertion once it returns\n ui.context.resolveImageUris(imageUris).then(images => {\n const tr = view.state.tr;\n images.forEach(image => {\n const node = view.state.schema.nodes.image.create({ src: image });\n tr.insert(pos, node);\n });\n view.dispatch(tr);\n });\n\n // indicate that we will handle the event\n return true;\n}\n","/*\n * hr.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, DOMOutputSpec } from 'prosemirror-model';\nimport { InputRule } from 'prosemirror-inputrules';\nimport { findParentNodeOfType } from 'prosemirror-utils';\nimport { EditorState } from 'prosemirror-state';\n\nimport { ProsemirrorCommand, insertNode, EditorCommandId } from '../api/command';\nimport { ExtensionContext } from '../api/extension';\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\nimport { EditorUI } from '../api/ui';\nimport { OmniInsertGroup } from '../api/omni_insert';\n\nimport './hr-styles.css';\n\nconst extension = (context: ExtensionContext) => {\n const { ui } = context;\n\n return {\n nodes: [\n {\n name: 'horizontal_rule',\n spec: {\n group: 'block',\n parseDOM: [{ tag: 'hr' }],\n toDOM(): DOMOutputSpec {\n return ['div', ['hr', { class: 'pm-border-background-color' }]];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.HorizontalRule,\n node: 'horizontal_rule',\n },\n ],\n writer: (output: PandocOutput) => {\n output.writeToken(PandocTokenType.HorizontalRule);\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [\n new ProsemirrorCommand(\n EditorCommandId.HorizontalRule,\n [],\n insertNode(schema.nodes.horizontal_rule),\n hrOmniInsert(ui),\n ),\n ];\n },\n\n inputRules: (_schema: Schema) => {\n return [\n new InputRule(/^\\*{3}$/, (state: EditorState, match: string[], start: number, end: number) => {\n const schema = state.schema;\n const paraNode = findParentNodeOfType(schema.nodes.paragraph)(state.selection);\n if (paraNode && state.selection.$anchor.depth === 2) {\n // only in top-level paragraphs\n return state.tr.replaceRangeWith(start, end, schema.nodes.horizontal_rule.create());\n } else {\n return null;\n }\n }),\n ];\n },\n };\n};\n\nfunction hrOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Horizontal Rule'),\n description: ui.context.translateText('Line that spans across the page'),\n group: OmniInsertGroup.Content,\n priority: 1,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.horizontal_rule_dark! : ui.images.omni_insert?.horizontal_rule!,\n };\n}\n\nexport default extension;\n","/*\n * hard_break.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { Extension } from '../api/extension';\nimport { BaseKey } from '../api/basekeys';\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\n\nconst extension: Extension = {\n nodes: [\n {\n name: 'hard_break',\n spec: {\n inline: true,\n group: 'inline',\n selectable: false,\n parseDOM: [{ tag: 'br' }],\n toDOM() {\n return ['br'];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.LineBreak,\n node: 'hard_break',\n },\n ],\n writer: (output: PandocOutput) => {\n output.writeToken(PandocTokenType.LineBreak);\n },\n },\n },\n ],\n\n baseKeys: (_schema: Schema) => {\n return [\n { key: BaseKey.ModEnter, command: hardBreakCommandFn() },\n { key: BaseKey.ShiftEnter, command: hardBreakCommandFn() },\n ];\n },\n};\n\nfunction hardBreakCommandFn() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const br = state.schema.nodes.hard_break;\n if (dispatch) {\n dispatch(state.tr.replaceSelectionWith(br.create()).scrollIntoView());\n }\n return true;\n };\n}\n\nexport default extension;\n","/*\n * null.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Extension } from '../api/extension';\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\n\nimport './null-styles.css';\n\nconst extension: Extension = {\n nodes: [\n {\n name: 'null',\n spec: {\n group: 'block',\n atom: true,\n selectable: false,\n parseDOM: [{ tag: \"div[class*='null-block']\" }],\n toDOM() {\n return ['div', { class: 'null-block' }];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Null,\n node: 'null',\n },\n ],\n writer: (output: PandocOutput) => {\n output.writeToken(PandocTokenType.Null);\n },\n },\n },\n ],\n};\n\nexport default extension;\n","/*\n * em.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, Mark, Fragment } from 'prosemirror-model';\n\nimport { MarkCommand, EditorCommandId } from '../api/command';\nimport { Extension } from '../api/extension';\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\nimport { delimiterMarkInputRule, MarkInputRuleFilter } from '../api/input_rule';\n\nconst extension: Extension = {\n marks: [\n {\n name: 'em',\n spec: {\n group: 'formatting',\n parseDOM: [\n { tag: 'i' },\n { tag: 'em' },\n { style: 'font-weight', getAttrs: (value: string | Node) => (value as string) === 'italic' && null },\n ],\n toDOM() {\n return ['em'];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Emph,\n mark: 'em',\n },\n ],\n writer: {\n priority: 4,\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\n output.writeMark(PandocTokenType.Emph, parent);\n },\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [new MarkCommand(EditorCommandId.Em, ['Mod-i'], schema.marks.em)];\n },\n\n inputRules: (schema: Schema, filter: MarkInputRuleFilter) => {\n return [\n delimiterMarkInputRule('\\\\*', schema.marks.em, filter, '\\\\*-`', true),\n delimiterMarkInputRule('_', schema.marks.em, filter, '\\\\w_`', true),\n ];\n },\n};\n\nexport default extension;\n","/*\n * strong.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, Mark, Fragment } from 'prosemirror-model';\n\nimport { MarkCommand, EditorCommandId } from '../api/command';\nimport { Extension } from '../api/extension';\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\nimport { delimiterMarkInputRule, MarkInputRuleFilter } from '../api/input_rule';\n\nconst extension: Extension = {\n marks: [\n {\n name: 'strong',\n spec: {\n group: 'formatting',\n parseDOM: [\n // This works around a Google Docs misbehavior where pasted content will be inexplicably wrapped in ``\n // tags with a font-weight normal.\n {\n tag: 'b',\n getAttrs: (value: string | Node) => (value as HTMLElement).style.fontWeight !== 'normal' && null,\n },\n { tag: 'strong' },\n {\n style: 'font-weight',\n getAttrs: (value: string | Node) => /^(bold(er)?|[5-9]\\d{2,})$/.test(value as string) && null,\n },\n ],\n toDOM() {\n return ['strong'];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Strong,\n mark: 'strong',\n },\n ],\n writer: {\n priority: 3,\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\n output.writeMark(PandocTokenType.Strong, parent);\n },\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [new MarkCommand(EditorCommandId.Strong, ['Mod-b'], schema.marks.strong)];\n },\n\n inputRules: (schema: Schema, filter: MarkInputRuleFilter) => {\n return [\n delimiterMarkInputRule('\\\\*\\\\*', schema.marks.strong, filter, '`', true),\n delimiterMarkInputRule('__', schema.marks.strong, filter, '\\\\w`', true),\n ];\n },\n};\n\nexport default extension;\n","/*\n * code.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Fragment, Mark, Node as ProsemirrorNode, Schema } from 'prosemirror-model';\n\nimport { MarkCommand, EditorCommandId } from '../api/command';\nimport { Extension, ExtensionContext } from '../api/extension';\nimport { pandocAttrSpec, pandocAttrParseDom, pandocAttrToDomAttr, pandocAttrReadAST } from '../api/pandoc_attr';\nimport { PandocToken, PandocOutput, PandocTokenType } from '../api/pandoc';\n\nimport { kCodeText, kCodeAttr } from '../api/code';\nimport { delimiterMarkInputRule, MarkInputRuleFilter } from '../api/input_rule';\n\nconst extension = (context: ExtensionContext): Extension => {\n const { pandocExtensions } = context;\n\n const codeAttrs = pandocExtensions.inline_code_attributes;\n\n return {\n marks: [\n {\n name: 'code',\n noInputRules: true,\n noSpelling: true,\n spec: {\n group: 'formatting',\n attrs: codeAttrs ? pandocAttrSpec : {},\n parseDOM: [\n {\n tag: 'code',\n getAttrs(dom: Node | string) {\n if (codeAttrs) {\n return pandocAttrParseDom(dom as Element, {});\n } else {\n return {};\n }\n },\n },\n ],\n toDOM(mark: Mark) {\n const fontClass = 'pm-code pm-fixedwidth-font pm-chunk-background-color pm-block-border-color';\n const attrs = codeAttrs\n ? pandocAttrToDomAttr({\n ...mark.attrs,\n classes: [...mark.attrs.classes, fontClass],\n })\n : {\n class: fontClass,\n };\n return ['code', attrs];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Code,\n mark: 'code',\n getText: (tok: PandocToken) => tok.c[kCodeText],\n getAttrs: (tok: PandocToken) => {\n if (codeAttrs) {\n return pandocAttrReadAST(tok, kCodeAttr);\n } else {\n return {};\n }\n },\n },\n ],\n writer: {\n // lowest possible mark priority since it doesn't call writeInlines\n // (so will 'eat' any other marks on the stack)\n priority: 0,\n write: (output: PandocOutput, mark: Mark, parent: Fragment) => {\n // collect code and trim it (pandoc will do this on parse anyway)\n let code = '';\n parent.forEach((node: ProsemirrorNode) => (code = code + node.textContent));\n code = code.trim();\n if (code.length > 0) {\n output.writeToken(PandocTokenType.Code, () => {\n if (codeAttrs) {\n output.writeAttr(mark.attrs.id, mark.attrs.classes, mark.attrs.keyvalue);\n } else {\n output.writeAttr();\n }\n output.write(code);\n });\n }\n },\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [new MarkCommand(EditorCommandId.Code, ['Mod-d'], schema.marks.code)];\n },\n\n inputRules: (schema: Schema, filter: MarkInputRuleFilter) => {\n return [delimiterMarkInputRule('`', schema.marks.code, filter)];\n },\n };\n};\n\nexport default extension;\n","/*\n * link.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Fragment, Mark, Schema } from 'prosemirror-model';\nimport { PluginKey, Plugin } from 'prosemirror-state';\n\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { PandocToken, PandocOutput, PandocTokenType } from '../../api/pandoc';\nimport {\n pandocAttrSpec,\n pandocAttrParseDom,\n pandocAttrToDomAttr,\n pandocAttrReadAST,\n PandocAttr,\n} from '../../api/pandoc_attr';\nimport { Extension, ExtensionContext } from '../../api/extension';\nimport { kLinkTarget, kLinkTargetUrl, kLinkTargetTitle, kLinkAttr, kLinkChildren } from '../../api/link';\nimport { hasShortcutHeadingLinks } from '../../api/pandoc_format';\n\nimport { linkCommand, removeLinkCommand, linkOmniInsert } from './link-command';\nimport { linkInputRules, linkPasteHandler } from './link-auto';\nimport { linkHeadingsPostprocessor, syncHeadingLinksAppendTransaction } from './link-headings';\nimport { linkPopupPlugin } from './link-popup';\n\nimport './link-styles.css';\n\nconst extension = (context: ExtensionContext): Extension => {\n const { pandocExtensions, ui, navigation } = context;\n\n const capabilities = {\n headings: hasShortcutHeadingLinks(pandocExtensions),\n attributes: pandocExtensions.link_attributes,\n text: true,\n };\n const linkAttr = pandocExtensions.link_attributes;\n const autoLink = pandocExtensions.autolink_bare_uris;\n const headingLink = hasShortcutHeadingLinks(pandocExtensions);\n const citations = pandocExtensions.citations;\n\n const excludes = citations ? { excludes: 'cite_id' } : {};\n\n return {\n marks: [\n {\n name: 'link',\n spec: {\n attrs: {\n href: {},\n heading: { default: null },\n title: { default: null },\n ...(linkAttr ? pandocAttrSpec : {}),\n },\n inclusive: false,\n ...excludes,\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs(dom: Node | string) {\n const el = dom as Element;\n const attrs: { [key: string]: string | null } = {\n href: el.getAttribute('href'),\n title: el.getAttribute('title'),\n heading: el.getAttribute('data-heading'),\n };\n return {\n ...attrs,\n ...(linkAttr ? pandocAttrParseDom(el, attrs) : {}),\n };\n },\n },\n ],\n toDOM(mark: Mark) {\n const linkClasses = 'pm-link pm-link-text-color';\n\n let extraAttr: any = {};\n if (linkAttr) {\n extraAttr = pandocAttrToDomAttr({\n ...mark.attrs,\n classes: [...mark.attrs.classes, linkClasses],\n });\n } else {\n extraAttr = { class: linkClasses };\n }\n\n return [\n 'a',\n {\n href: mark.attrs.href,\n title: mark.attrs.title,\n 'data-heading': mark.attrs.heading,\n ...extraAttr,\n },\n ];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Link,\n mark: 'link',\n getAttrs: (tok: PandocToken) => {\n const target = tok.c[kLinkTarget];\n return {\n href: target[kLinkTargetUrl],\n title: target[kLinkTargetTitle] || null,\n ...(linkAttr ? pandocAttrReadAST(tok, kLinkAttr) : {}),\n };\n },\n getChildren: (tok: PandocToken) => tok.c[kLinkChildren],\n\n postprocessor: hasShortcutHeadingLinks(pandocExtensions) ? linkHeadingsPostprocessor : undefined,\n },\n ],\n\n writer: {\n priority: 12,\n write: (output: PandocOutput, mark: Mark, parent: Fragment) => {\n if (mark.attrs.heading) {\n output.writeRawMarkdown('[');\n output.writeInlines(parent);\n output.writeRawMarkdown(']');\n } else {\n output.writeLink(\n mark.attrs.href,\n mark.attrs.title,\n linkAttr ? (mark.attrs as PandocAttr) : null,\n () => {\n output.writeInlines(parent);\n },\n );\n }\n },\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [\n new ProsemirrorCommand(\n EditorCommandId.Link,\n ['Mod-k'],\n linkCommand(schema.marks.link, ui.dialogs.editLink, capabilities),\n linkOmniInsert(ui),\n ),\n new ProsemirrorCommand(EditorCommandId.RemoveLink, [], removeLinkCommand(schema.marks.link)),\n ];\n },\n\n inputRules: linkInputRules(autoLink, headingLink),\n\n appendTransaction: (schema: Schema) =>\n pandocExtensions.implicit_header_references ? [syncHeadingLinksAppendTransaction()] : [],\n\n plugins: (schema: Schema) => {\n const plugins = [\n linkPopupPlugin(\n schema,\n ui,\n navigation,\n linkCommand(schema.marks.link, ui.dialogs.editLink, capabilities),\n removeLinkCommand(schema.marks.link),\n ),\n ];\n if (autoLink) {\n plugins.push(\n new Plugin({\n key: new PluginKey('link-auto'),\n props: {\n transformPasted: linkPasteHandler(schema),\n },\n }),\n );\n }\n return plugins;\n },\n };\n};\n\nexport default extension;\n","/*\n * link-command.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { MarkType } from 'prosemirror-model';\nimport { EditorUI } from '../../api/ui';\nimport { LinkEditorFn, LinkProps } from '../../api/ui-dialogs';\nimport { EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { findChildren } from 'prosemirror-utils';\n\nimport { markIsActive, getMarkAttrs, getSelectionMarkRange, getMarkRange } from '../../api/mark';\n\nimport { linkTargets, LinkCapabilities, LinkType } from '../../api/link';\nimport { OmniInsertGroup } from '../../api/omni_insert';\nimport { equalsIgnoreCase } from '../../api/text';\n\nexport function linkCommand(markType: MarkType, onEditLink: LinkEditorFn, capabilities: LinkCapabilities) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // if the current node doesn't allow this mark return false\n if (!state.selection.$from.node().type.allowsMarkType(markType)) {\n return false;\n }\n\n async function asyncEditLink() {\n if (dispatch) {\n // collect link targets\n const targets = await linkTargets(state.doc);\n\n // get the range of the mark\n const range = getSelectionMarkRange(state.selection, markType);\n\n // get link attributes if we have them\n let link: { [key: string]: any } = {};\n\n // only get text if this is a text selection\n if (state.selection instanceof TextSelection) {\n link.text = state.doc.textBetween(range.from, range.to);\n capabilities.text = true;\n } else {\n capabilities.text = false;\n }\n\n // get other attributes\n if (markIsActive(state, markType)) {\n link = {\n ...link,\n ...getMarkAttrs(state.doc, range, markType),\n };\n } else {\n // if the link text is a URL then make it the default\n if (link.text && link.text.match(/^https?:\\/\\/.*$/)) {\n link.href = link.text;\n }\n }\n\n // determine type\n if (link.heading) {\n link.type = LinkType.Heading;\n } else if (link.href && link.href.startsWith('#')) {\n link.type = LinkType.ID;\n } else {\n link.type = LinkType.URL;\n }\n\n // show edit ui\n const result = await onEditLink({ ...link } as LinkProps, targets, capabilities);\n if (result) {\n const tr = state.tr;\n tr.removeMark(range.from, range.to, markType);\n if (result.action === 'edit') {\n // create the mark\n const mark = markType.create(result.link);\n\n // if the content changed then replace the range, otherwise\n if (capabilities.text && link.text !== result.link.text) {\n const node = markType.schema.text(result.link.text, [mark]);\n // if we are editing an existing link then replace it, otherwise replace the selection\n if (link.href) {\n tr.replaceRangeWith(range.from, range.to, node);\n } else {\n tr.replaceSelectionWith(node, false);\n }\n } else {\n tr.addMark(range.from, range.to, mark);\n }\n\n // if it's a heading link then update heading to indicate it has an associated link\n if (result.link.type === LinkType.Heading) {\n const heading = findChildren(\n tr.doc,\n node =>\n node.type === state.schema.nodes.heading &&\n equalsIgnoreCase(node.textContent, result.link.heading || ''),\n );\n if (heading.length > 0) {\n tr.setNodeMarkup(heading[0].pos, state.schema.nodes.heading, {\n ...heading[0].node.attrs,\n link: result.link.heading,\n });\n }\n }\n }\n dispatch(tr);\n }\n if (view) {\n view.focus();\n }\n }\n }\n asyncEditLink();\n\n return true;\n };\n}\n\nexport function linkOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Link...'),\n description: ui.context.translateText('Link to another location'),\n group: OmniInsertGroup.Content,\n priority: 8,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.link_dark! : ui.images.omni_insert?.link!),\n };\n}\n\nexport function removeLinkCommand(markType: MarkType) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const range = getMarkRange(state.selection.$from, markType);\n if (!range) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n tr.removeMark(range.from, range.to, markType);\n dispatch(tr);\n }\n\n return true;\n };\n}\n","/*\n * link-auto.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\nimport { InputRule } from 'prosemirror-inputrules';\nimport { EditorState } from 'prosemirror-state';\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { markInputRule, MarkInputRuleFilter } from '../../api/input_rule';\nimport { markPasteHandler } from '../../api/clipboard';\n\nexport function linkInputRules(autoLink: boolean, headingLink: boolean) {\n return (schema: Schema, filter: MarkInputRuleFilter) => {\n const rules = [\n // style link\n markInputRule(/(?:(?:^|[^`])<)(https?:\\/\\/[^>]+)(?:>)$/, schema.marks.link, filter, (match: string[]) => ({\n href: match[1],\n })),\n // full markdown link\n markInputRule(/(?:\\[)([^\\]]+)(?:\\]\\()([^)]+)(?:\\))$/, schema.marks.link, filter, (match: string[]) => ({\n href: match[2],\n })),\n ];\n\n if (autoLink) {\n // plain link\n rules.push(\n new InputRule(\n /(^|[^`])(https?:\\/\\/[^\\s]+\\w)[\\.\\?!\\,)]* $/,\n (state: EditorState, match: string[], start: number, end: number) => {\n const tr = state.tr;\n start = start + match[1].length;\n const linkEnd = start + match[2].length;\n tr.addMark(start, linkEnd, schema.marks.link.create({ href: match[2] }));\n tr.removeStoredMark(schema.marks.link);\n tr.insertText(' ');\n setTextSelection(end + 1)(tr);\n return tr;\n },\n ),\n );\n }\n\n return rules;\n };\n}\n\nexport function linkPasteHandler(schema: Schema) {\n return markPasteHandler(/(?:<)?([a-z]+:\\/\\/[^\\s>]+)(?:>)?/g, schema.marks.link, url => ({ href: url }));\n}\n","/*\n * clipboard.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Slice, Fragment, MarkType, Node as ProsemirrorNode } from 'prosemirror-model';\n\n// add marks to plain text pasted into the editor (e.g. urls become links)\n// https://github.com/ProseMirror/prosemirror/issues/90\nexport function markPasteHandler(regexp: RegExp, type: MarkType, getAttrs: (s: string) => {}) {\n const handler = (fragment: Fragment) => {\n regexp.lastIndex = 0;\n\n const nodes: ProsemirrorNode[] = [];\n\n fragment.forEach((child: ProsemirrorNode) => {\n if (child.isText) {\n const { text } = child;\n let pos = 0;\n let match;\n\n do {\n match = regexp.exec(text!);\n if (match) {\n const start = match.index;\n const end = start + match[0].length;\n const matchText = match.length > 1 ? match[1] : match[0];\n const attrs = getAttrs instanceof Function ? getAttrs(matchText) : getAttrs;\n if (start > 0) {\n nodes.push(child.cut(pos, start));\n }\n nodes.push(type.schema.text(matchText).mark(type.create(attrs).addToSet(child.marks)));\n pos = end;\n }\n } while (match);\n\n if (pos < text!.length) {\n nodes.push(child.cut(pos));\n }\n } else {\n nodes.push(child.copy(handler(child.content)));\n }\n });\n\n regexp.lastIndex = 0;\n\n return Fragment.fromArray(nodes);\n };\n\n return (slice: Slice) => new Slice(handler(slice.content), slice.openStart, slice.openEnd);\n}\n","/*\n * link-headings.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { findChildrenByType, findChildrenByMark } from 'prosemirror-utils';\n\nimport { getMarkRange, getMarkAttrs } from '../../api/mark';\nimport { Transaction } from 'prosemirror-state';\nimport { equalsIgnoreCase } from '../../api/text';\n\n// detect links to headings within the doc read from pandoc and update the doc\n// to note those headings in the link attributes\nexport function linkHeadingsPostprocessor(doc: ProsemirrorNode) {\n // alias schema\n const schema = doc.type.schema;\n\n // start with a list of all headings\n const headings = findChildrenByType(doc, schema.nodes.heading);\n\n // find link marks\n findChildrenByMark(doc, schema.marks.link).forEach(link => {\n const markRange = getMarkRange(doc.resolve(link.pos), schema.marks.link);\n if (markRange) {\n const attrs = getMarkAttrs(doc, markRange, schema.marks.link);\n const linkText = doc.textBetween(markRange.from, markRange.to);\n const matchedHeading = headings.find(heading => {\n return equalsIgnoreCase(heading.node.textContent, linkText) && !attrs.title && attrs.href === '#';\n });\n if (matchedHeading) {\n // point the link mark at this heading by name\n doc.nodesBetween(markRange.from, markRange.to, node => {\n const linkMark = node.marks.find(m => m.type === schema.marks.link);\n if (linkMark) {\n linkMark.attrs.heading = matchedHeading.node.textContent;\n }\n });\n\n // update the heading to indicate it has a named link to it\n matchedHeading.node.attrs.link = linkText;\n }\n }\n });\n\n // return doc\n return doc;\n}\n\nexport function syncHeadingLinksAppendTransaction() {\n return {\n name: 'sync-heading-links',\n nodeFilter: (node: ProsemirrorNode) =>\n node.type === node.type.schema.nodes.heading || node.type.schema.marks.link.isInSet(node.marks),\n append: (tr: Transaction) => {\n // alias schema\n const schema = tr.doc.type.schema;\n\n // fix links to be in sync with their text\n const links = findChildrenByMark(tr.doc, schema.marks.link);\n links.forEach(link => {\n const linkPos = tr.mapping.map(link.pos);\n const range = getMarkRange(tr.doc.resolve(linkPos), schema.marks.link);\n if (range) {\n const attrs = getMarkAttrs(tr.doc, range, schema.marks.link);\n const linkText = tr.doc.textBetween(range.from, range.to);\n if (attrs.heading && !equalsIgnoreCase(attrs.heading, linkText)) {\n tr.removeMark(range.from, range.to, schema.marks.link);\n tr.addMark(range.from, range.to, schema.marks.link.create({ ...attrs, heading: linkText }));\n }\n }\n });\n\n // if a heading has deviated from it's link, then update the link\n findChildrenByType(tr.doc, schema.nodes.heading).forEach(heading => {\n const headingPos = tr.mapping.map(heading.pos);\n const headingText = heading.node.textContent;\n const headingLink = heading.node.attrs.link;\n\n if (headingLink && !equalsIgnoreCase(headingLink, headingText) && headingText.length > 0) {\n // set the heading link text\n tr.setNodeMarkup(headingPos, schema.nodes.heading, {\n ...heading.node.attrs,\n link: headingText,\n });\n\n // find links that don't match and update them\n findChildrenByMark(tr.doc, schema.marks.link).forEach(link => {\n const linkPos = tr.mapping.map(link.pos);\n const range = getMarkRange(tr.doc.resolve(linkPos), schema.marks.link);\n if (range) {\n const attrs = getMarkAttrs(tr.doc, range, schema.marks.link);\n if (equalsIgnoreCase(attrs.heading, headingLink)) {\n tr.insertText(headingText, range.from, range.to);\n tr.addMark(\n range.from,\n range.from + headingText.length,\n schema.marks.link.create({ ...attrs, heading: headingText }),\n );\n }\n }\n });\n }\n });\n },\n };\n}\n","/*\n * LinkPopup.tsx\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { DecorationSet, EditorView } from 'prosemirror-view';\nimport { Selection, PluginKey } from 'prosemirror-state';\n\nimport * as React from 'react';\n\nimport ClipboardJS from 'clipboard';\n\nimport { EditorUI } from '../../api/ui';\nimport { LinkProps } from '../../api/ui-dialogs';\nimport { CommandFn } from '../../api/command';\n\nimport { selectionIsImageNode } from '../../api/selection';\n\nimport { showTooltip } from '../../api/widgets/tooltip';\n\nimport { WidgetProps } from '../../api/widgets/react';\nimport { LinkButton, ImageButton } from '../../api/widgets/button';\nimport { Popup } from '../../api/widgets/popup';\nimport { EditorNavigation, NavigationType } from '../../api/navigation';\nimport { Schema } from 'prosemirror-model';\nimport { textPopupDecorationPlugin, TextPopupTarget } from '../../api/text-popup';\n\nexport function linkPopupPlugin(\n schema: Schema,\n ui: EditorUI,\n nav: EditorNavigation,\n linkCmd: CommandFn,\n removeLinkCmd: CommandFn,\n) {\n const kPopupChromeWidth = 70;\n const kMaxLinkWidth = 300;\n const maxWidth = kMaxLinkWidth + kPopupChromeWidth;\n\n return textPopupDecorationPlugin({\n key: new PluginKey('link-popup'),\n markType: schema.marks.link,\n maxWidth,\n createPopup: (view: EditorView, target: TextPopupTarget, style: React.CSSProperties) => {\n return Promise.resolve(\n ,\n );\n },\n specKey: (target: TextPopupTarget) => {\n const linkText = target.attrs.heading ? target.attrs.heading : target.attrs.href;\n return `link:${linkText}`;\n },\n filter: (selection: Selection) => {\n return !selectionIsImageNode(schema, selection);\n },\n onCmdClick: (target: TextPopupTarget) => {\n ui.display.openURL(target.attrs.href);\n },\n });\n}\n\ninterface LinkPopupProps extends WidgetProps {\n link: LinkProps;\n maxLinkWidth: number;\n view: EditorView;\n ui: EditorUI;\n nav: EditorNavigation;\n linkCmd: CommandFn;\n removeLinkCmd: CommandFn;\n}\n\nconst LinkPopup: React.FC = props => {\n // link\n const linkText = props.link.heading ? props.link.heading : props.link.href;\n const onLinkClicked = () => {\n props.view.focus();\n if (props.link.heading) {\n props.nav.navigate(NavigationType.Heading, props.link.heading);\n } else if (props.link.href.startsWith('#')) {\n props.nav.navigate(NavigationType.Href, props.link.href.substr(1));\n } else {\n props.ui.display.openURL(props.link.href);\n }\n };\n\n // copy\n const showCopyButton = !props.link.heading && ClipboardJS.isSupported();\n let clipboard: ClipboardJS;\n const setCopyButton = (button: HTMLButtonElement | null) => {\n if (button) {\n clipboard = new ClipboardJS(button, {\n text: () => linkText,\n });\n clipboard.on('success', () => {\n showTooltip(button, props.ui.context.translateText('Copied to Clipboard'), 's');\n });\n } else {\n if (clipboard) {\n clipboard.destroy();\n }\n }\n };\n\n // remove\n const onRemoveClicked = () => {\n // in rstudio (w/ webkit) removing the link during the click results\n // in a page-navigation! defer to next event cycle to avoid this\n setTimeout(() => {\n props.removeLinkCmd(props.view.state, props.view.dispatch, props.view);\n props.view.focus();\n }, 0);\n };\n\n // edit\n const onEditClicked = () => {\n props.linkCmd(props.view.state, props.view.dispatch, props.view);\n };\n\n return (\n \n \n {showCopyButton ? (\n \n ) : null}\n \n \n \n );\n};\n","/*\n * tooltip.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport tlite from 'tlite';\n\nimport './tooltip.css';\n\nexport function showTooltip(\n el: Element,\n text: string,\n grav: 's' | 'n' | 'e' | 'w' | 'sw' | 'se' | 'nw' | 'ne' = 'n',\n timeout = 2000,\n) {\n el.setAttribute('title', '');\n el.setAttribute('data-tlite', text);\n tlite.show(el, { grav });\n setTimeout(() => tlite.hide(el), timeout);\n}\n","/*\n * button.tsx\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport React from 'react';\n\nimport { WidgetProps } from './react';\n\nexport interface LinkButtonProps extends WidgetProps {\n text: string;\n onClick: () => void;\n title?: string;\n maxWidth?: number;\n}\n\nexport const LinkButton: React.FC = props => {\n const className = ['pm-link', 'pm-link-text-color'].concat(props.classes || []).join(' ');\n\n const style: React.CSSProperties = {\n ...props.style,\n maxWidth: props.maxWidth,\n };\n\n const onClick = (e: React.MouseEvent) => {\n e.preventDefault();\n props.onClick();\n };\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n if (e.keyCode === 32) {\n e.preventDefault();\n props.onClick();\n }\n };\n\n return (\n \n {props.text}\n \n );\n};\n\nexport interface ImageButtonProps extends WidgetProps {\n title: string;\n image: string;\n tabIndex?: number;\n onClick?: () => void;\n}\n\nexport const ImageButton = React.forwardRef((props: ImageButtonProps, ref) => {\n const className = ['pm-image-button'].concat(props.classes || []).join(' ');\n const onClick = (e: React.MouseEvent) => {\n if (props.onClick) {\n e.preventDefault();\n props.onClick();\n }\n };\n return (\n \n {props.title}\n \n );\n});\n\nexport interface TextButtonProps extends WidgetProps {\n title: string;\n onClick?: () => void;\n tabIndex?: number;\n disabled?: boolean;\n}\n\nexport const TextButton = React.forwardRef((props: TextButtonProps, ref) => {\n const className = ['pm-text-button', 'pm-input-button'].concat(props.classes || []).join(' ');\n const onClick = (e: React.MouseEvent) => {\n if (props.onClick) {\n e.preventDefault();\n props.onClick();\n }\n };\n return (\n \n {props.title}\n \n );\n});\n\nexport interface OutlineButtonProps extends WidgetProps {\n title: string;\n onClick?: (event: React.MouseEvent) => void;\n tabIndex?: number;\n}\n\nexport const OutlineButton = React.forwardRef(\n (props: OutlineButtonProps, ref) => {\n const className = ['pm-outline-button', 'pm-input-button', 'pm-input-outline-button']\n .concat(props.classes || [])\n .join(' ');\n return (\n \n {props.title}\n \n );\n },\n);\n","/*\n * TextPopup.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { DecorationSet, Decoration, EditorView } from 'prosemirror-view';\nimport { Selection, Plugin, PluginKey, EditorState, Transaction } from 'prosemirror-state';\n\nimport * as React from 'react';\n\nimport { getMarkRange, getMarkAttrs } from './mark';\nimport { kRestoreLocationTransaction, kNavigationTransaction } from './transaction';\n\nimport { reactRenderForEditorView } from './widgets/react';\nimport { textRangePopupDecorationPosition } from './widgets/decoration';\nimport { kPlatformMac } from './platform';\nimport { MarkType } from 'prosemirror-model';\n\nexport interface TextPopupTarget {\n attrs: AttrsType;\n text: string;\n}\n\nexport interface TextPopupDecoration {\n key: PluginKey;\n markType: MarkType;\n maxWidth: number;\n createPopup: (\n view: EditorView,\n target: TextPopupTarget,\n style: React.CSSProperties,\n ) => Promise;\n dismissOnEdit?: boolean;\n makeLinksAccessible?: boolean;\n specKey?: (target: TextPopupTarget) => string;\n filter?: (selection: Selection) => boolean;\n onCmdClick?: (target: TextPopupTarget) => void;\n}\n\nexport function textPopupDecorationPlugin(deco: TextPopupDecoration): Plugin {\n const {\n key,\n markType,\n maxWidth,\n createPopup,\n specKey,\n dismissOnEdit,\n makeLinksAccessible,\n filter,\n onCmdClick,\n } = deco;\n\n let editorView: EditorView;\n\n return new Plugin({\n key,\n view(view: EditorView) {\n editorView = view;\n return {};\n },\n state: {\n init: (_config: { [key: string]: any }) => {\n return DecorationSet.empty;\n },\n apply: (tr: Transaction, old: DecorationSet, _oldState: EditorState, newState: EditorState) => {\n // if this a restore location or navigation then return empty\n if (tr.getMeta(kRestoreLocationTransaction) || tr.getMeta(kNavigationTransaction)) {\n return DecorationSet.empty;\n }\n\n // if this is doc update and we have dismiss on edit then return empty\n if (dismissOnEdit && tr.docChanged) {\n return DecorationSet.empty;\n }\n\n // if the selection is contained within the mark then show the popup\n const selection = newState.selection;\n\n // TODO JJA: The mark range is undefined when the the selection is 'after' the mark\n // e.g. [@allaire2012|]\n // which means that the preview doesn't show\n const range = getMarkRange(selection.$from, markType);\n\n if (range) {\n // selection has to be bounded by the range\n if (selection.from < range.from || selection.to > range.to) {\n return DecorationSet.empty;\n }\n\n // apply the filter\n if (filter && !filter(selection)) {\n return DecorationSet.empty;\n }\n\n // don't show the link popup if it's positioned at the far left of the mark\n // (awkward when cursor is just left of an image)\n if (selection.empty && range.from === selection.from) {\n return DecorationSet.empty;\n }\n\n // mark target\n const attrs = getMarkAttrs(newState.doc, range, markType);\n const text = newState.doc.textBetween(range.from, range.to);\n const target = { attrs, text };\n\n // compute position (we need this both for setting the styles on the LinkPopup\n // as well as for setting the Decorator pos)\n const decorationPosition = textRangePopupDecorationPosition(editorView, range, maxWidth);\n\n // key if one was provided\n let decoratorSpec: { [key: string]: any } | undefined;\n if (specKey) {\n decoratorSpec = {\n key: decorationPosition.key + specKey(target),\n ignoreSelection: true,\n stopEvent: () => {\n return true;\n },\n };\n }\n\n // create decorator\n const textPopupDecorator = Decoration.widget(\n decorationPosition.pos,\n\n (view: EditorView, getPos: () => number) => {\n // create decorator and render popup into it\n const decorationEl = window.document.createElement('div');\n decorationEl.style.visibility = 'hidden';\n\n // create popup component\n createPopup(view, target, decorationPosition.style).then(popup => {\n if (popup) {\n reactRenderForEditorView(popup, decorationEl, view);\n\n // make sure links responsd to spacebar\n if (makeLinksAccessible) {\n const links = decorationEl.getElementsByTagName('a');\n // tslint:disable-next-line: prefer-for-of\n for (let i = 0; i < links.length; i++) {\n const link = links[0];\n link.onkeydown = (e: KeyboardEvent) => {\n if (e.keyCode === 32) {\n e.preventDefault();\n link.click();\n }\n };\n }\n }\n\n decorationEl.style.visibility = 'visible';\n }\n });\n\n return decorationEl;\n },\n\n decoratorSpec,\n );\n\n // return decorations\n return DecorationSet.create(tr.doc, [textPopupDecorator]);\n } else {\n return DecorationSet.empty;\n }\n },\n },\n props: {\n decorations: (state: EditorState) => {\n return key.getState(state);\n },\n handleClick: onCmdClick\n ? (view: EditorView, pos: number, event: MouseEvent) => {\n const keyPressed = kPlatformMac && event.metaKey;\n if (keyPressed) {\n const attrs = getMarkAttrs(view.state.doc, { from: pos, to: pos }, markType);\n const range = getMarkRange(view.state.doc.resolve(pos));\n if (attrs && range) {\n event.stopPropagation();\n event.preventDefault();\n const text = view.state.doc.textBetween(range.from, range.to);\n onCmdClick({ attrs, text });\n return true;\n }\n }\n return false;\n }\n : undefined,\n },\n });\n}\n","/*\n * react.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\n\nimport { EditorView } from 'prosemirror-view';\n\nexport interface WidgetProps {\n classes?: string[];\n style?: React.CSSProperties;\n}\n\n// Render a react element into a DOM container that will eventually be added to the EditorView.dom\n// this function is necessary for situations where an element is created and then handed to ProseMirror\n// (unattached to the DOM), and then subsequently destoyed/unmounted by ProseMirror. We use a\n// MutationObserver to watch EditorView.dom for the element's removal then in response call\n// ReactDOM.unmountComponentAtNode\nexport function reactRenderForEditorView(element: React.ReactElement, container: HTMLElement, view: EditorView) {\n // render the react element into the container\n const ref = ReactDOM.render(element, container);\n\n // track view dom mutations to determine when ProseMirror has destroyed the element\n // (our cue to unmount/cleanup the react component)\n const observer = new MutationObserver(mutationsList => {\n mutationsList.forEach(mutation => {\n mutation.removedNodes.forEach(node => {\n if (node === container) {\n observer.disconnect();\n ReactDOM.unmountComponentAtNode(container);\n }\n });\n });\n });\n observer.observe(view.dom, { attributes: false, childList: true, subtree: true });\n\n // return the ref\n return ref;\n}\n","/*\n * decoration.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { ResolvedPos } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\n\nimport { editingRootNodeClosestToPos } from '../node';\n\nimport { kPixelUnit } from '../css';\n\nexport interface DecorationPosition {\n pos: number;\n style: { [key: string]: string };\n key: string;\n}\n\nexport function textRangePopupDecorationPosition(\n view: EditorView,\n range: { from: number; to: number },\n maxWidth: number,\n): DecorationPosition {\n // get the (window) DOM coordinates for the start of the range. we use range.from + 1 so\n // that ranges that are at the beginning of a line don't have their position set\n // to the previous line\n const rangeCoords = view.coordsAtPos(range.from + 1);\n\n // get the node, element, coordinates, and style for the current editing root\n const rangePos = view.state.doc.resolve(range.from);\n const editingNode = editingRootNodeClosestToPos(rangePos)!;\n const editingEl = view.domAtPos(editingNode!.pos + 1).node as HTMLElement;\n const editingBox = editingEl.getBoundingClientRect();\n const editingBoxStyle = window.getComputedStyle(editingEl);\n\n // base popup style\n const topPadding = parseInt(editingBoxStyle.paddingTop!, 10) || 0;\n const popupStyle = {\n top: rangeCoords.bottom - editingBox.top - topPadding + 5 + kPixelUnit,\n };\n\n // we need to compute whether the popup will be visible (horizontally), do\n // this by testing whether we have room for the max link width + controls/padding\n let style: { [key: string]: string };\n const positionRight = rangeCoords.left + maxWidth > editingBox.right;\n if (positionRight) {\n const rightCoords = view.coordsAtPos(range.to);\n const rightPos = rangeCoords.top === rightCoords.top ? editingBox.right - rightCoords.right : 0;\n style = {\n ...popupStyle,\n right: rightPos + kPixelUnit,\n };\n } else {\n const marginLeft =\n 'calc(' +\n (rangeCoords.left - editingBox.left) +\n 'px ' +\n ' - ' +\n editingBoxStyle.borderLeftWidth +\n ' - ' +\n editingBoxStyle.paddingLeft +\n ' - ' +\n editingBoxStyle.marginLeft +\n ' - 1ch' +\n ')';\n style = {\n ...popupStyle,\n marginLeft,\n };\n }\n\n // calculate key\n const key = Object.keys(style)\n .map(attrib => `${attrib}=${style[attrib]}`)\n .join(';');\n\n return {\n pos: editingNode.pos + editingNode.node.nodeSize - 1,\n style,\n key,\n };\n}\n\nfunction getEditingBox(view: EditorView, pos$: ResolvedPos) {\n const editingNode = editingRootNodeClosestToPos(pos$);\n const editingEl = view.domAtPos(editingNode!.pos + 1).node as HTMLElement;\n return editingEl.getBoundingClientRect();\n}\n","/*\n * select_all.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { findBlockNodes, ContentNodeWithPos } from 'prosemirror-utils';\n\nimport { Extension } from '../api/extension';\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\nimport { editingRootNode } from '../api/node';\n\nconst extension: Extension = {\n commands: () => {\n return [new ProsemirrorCommand(EditorCommandId.SelectAll, ['Mod-a'], selectAll)];\n },\n};\n\nexport function selectAll(state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) {\n if (dispatch) {\n const editingRoot = editingRootNode(state.selection);\n if (editingRoot) {\n const schema = state.schema;\n const tr = state.tr;\n if (editingRoot.node.type === schema.nodes.note) {\n tr.setSelection(childBlocksSelection(tr.doc, editingRoot));\n } else {\n const start = tr.doc.resolve(editingRoot.pos);\n const end = tr.doc.resolve(editingRoot.pos + editingRoot.node.nodeSize);\n tr.setSelection(new TextSelection(start, end));\n }\n dispatch(tr);\n if (view) {\n // we do this to escape from embedded editors e.g. codemirror\n view.focus();\n }\n }\n }\n return true;\n}\n\nfunction childBlocksSelection(doc: ProsemirrorNode, parent: ContentNodeWithPos) {\n const blocks = findBlockNodes(parent.node);\n const begin = parent.start + blocks[0].pos + 1;\n const lastBlock = blocks[blocks.length - 1];\n const end = parent.start + lastBlock.pos + lastBlock.node.nodeSize;\n return TextSelection.create(doc, begin, end);\n}\n\nexport default extension;\n","/*\n * history.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { history, redo, undo } from 'prosemirror-history';\n\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\nimport { Extension } from '../api/extension';\n\nconst extension: Extension = {\n commands: () => {\n return [\n new ProsemirrorCommand(EditorCommandId.Undo, ['Mod-z'], undo),\n new ProsemirrorCommand(EditorCommandId.Redo, ['Shift-Mod-z'], redo),\n ];\n },\n\n plugins: () => {\n return [history()];\n },\n};\n\nexport default extension;\n","/*\n * cursor.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { PluginKey, Plugin, EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\n\nimport { dropCursor } from 'prosemirror-dropcursor';\nimport { gapCursor, GapCursor } from 'prosemirror-gapcursor';\nimport 'prosemirror-gapcursor/style/gapcursor.css';\n\nimport { findParentNodeOfTypeClosestToPos, findParentNodeOfType, findParentNode } from 'prosemirror-utils';\n\nimport { Extension } from '../api/extension';\nimport { BaseKey, verticalArrowCanAdvanceWithinTextBlock } from '../api/basekeys';\n\nimport './cursor.css';\nimport { ResolvedPos } from 'prosemirror-model';\nimport { isList } from '../api/list';\n\n\nconst extension: Extension = {\n\n baseKeys: () => {\n return [\n { key: BaseKey.ArrowLeft, command: gapArrowHandler('left') },\n { key: BaseKey.ArrowUp, command: gapArrowHandler('up') }\n ];\n },\n\n plugins: () => {\n return [\n gapCursor(), \n dropCursor(),\n new Plugin({\n key: new PluginKey('div-gap-cursor'),\n props: {\n handleDOMEvents: {\n click: gapClickHandler,\n },\n },\n })];\n },\n};\n\nfunction gapArrowHandler(dir: 'up' | 'left') {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n \n\n // function to create a gap cursor\n const createGapCursor = ($pos: ResolvedPos) => {\n if (dispatch) {\n const cursor = new GapCursor($pos, $pos);\n const tr = state.tr;\n tr.setSelection(cursor);\n dispatch(tr);\n }\n return true;\n };\n\n if (state.selection.empty && view && view.endOfTextblock(dir)) {\n \n // get the selection\n const $head = state.selection.$head;\n\n // if we are in a block that handles up/down (e.g. display math)\n // then we don't want to make a gap cursor\n if (dir === 'up' && verticalArrowCanAdvanceWithinTextBlock(state.selection, dir)) {\n return false;\n }\n\n // check if we are in a div\n const div = findParentNodeOfType(state.schema.nodes.div)(state.selection);\n \n // if we are at the very top of a div then create a gap cursor\n if (div) {\n \n const $divPos = state.doc.resolve(div.pos);\n if ($head.index($head.depth - 1) === 0 && !(state.selection instanceof GapCursor)) {\n\n // if we are in a list item the calculations about view.endOfTextblock will be off\n if (findParentNode(isList)(state.selection)) {\n return false;\n }\n\n return createGapCursor(state.doc.resolve($divPos.pos + 1));\n } \n }\n\n // if we are at the top of the document then create a gap cursor\n if (!$head.nodeBefore && ($head.pos <= 2)) {\n return createGapCursor(state.doc.resolve($head.pos - 1));\n }\n \n return false;\n\n } else {\n return false;\n }\n\n \n };\n}\n\n\nfunction gapClickHandler(view: EditorView, event: Event): boolean {\n\n const schema = view.state.schema;\n const mouseEvent = event as MouseEvent;\n const clickPos = view.posAtCoords({ left: mouseEvent.clientX, top: mouseEvent.clientY } );\n\n if (clickPos) {\n\n // resolve click pos\n const $clickPos = view.state.doc.resolve(clickPos.pos); \n\n // create a gap cursor at the click position\n const createGapCursor = () => {\n // focus the view\n view.focus();\n \n // create the gap cursor\n const tr = view.state.tr;\n const cursor = new GapCursor($clickPos, $clickPos); \n tr.setSelection(cursor);\n view.dispatch(tr);\n \n // prevent default event handling\n event.preventDefault();\n event.stopImmediatePropagation();\n return false;\n };\n \n // handle clicks at the top of divs\n if (schema.nodes.div) {\n const div = findParentNodeOfTypeClosestToPos(\n view.state.doc.resolve(clickPos.pos), schema.nodes.div\n );\n if (div && div.pos === clickPos.inside) {\n const divNode = view.nodeDOM(div.start);\n if (divNode instanceof HTMLElement) {\n if (Math.abs(mouseEvent.clientX - divNode.getBoundingClientRect().left) < 150) {\n return createGapCursor();\n }\n }\n }\n }\n\n // handle clicks above body\n // Take this out for now b/c it was interfering with other mouse \n // gestures (e.g. clicking on attr editor). keyboard gestures still\n // work to get to the top of the body\n /*\n if ($clickPos.parent.type === schema.nodes.body &&\n $clickPos.start() === $clickPos.pos) {\n \n return createGapCursor();\n\n }\n */\n }\n\n return false;\n}\n\nexport default extension;\n","/*\n * clear_formatting.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\n\nimport { Extension } from '../api/extension';\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\nimport { liftTarget } from 'prosemirror-transform';\n\n// marks included in clear formatting\nconst kFormattingMarks = ['code', 'em', 'underline', 'smallcaps', 'span', 'strikeout', 'strong', 'superscript', 'subscript'];\n\n// for nodes, all nodes with isTextblock === true will be converted to paragraph, and all\n// nodes in this list will be lifted\nconst kLiftFormattingNodes = ['blockquote', 'line_block', 'div', 'raw_block'];\n\nconst extension: Extension = {\n commands: () => {\n return [new ProsemirrorCommand(EditorCommandId.ClearFormatting, ['Mod-\\\\'], clearFormatting)];\n },\n};\n\nexport function clearFormatting(state: EditorState, dispatch?: (tr: Transaction) => void) {\n if (dispatch) {\n // create transaction\n const tr = state.tr;\n\n // alias schema and selection\n const schema = state.schema;\n const { from, to } = tr.selection;\n\n // clear formatting marks\n kFormattingMarks.forEach(markName => {\n const mark = state.schema.marks[markName];\n if (mark) {\n tr.removeMark(from, to, mark);\n }\n });\n tr.setStoredMarks([]);\n\n // lift / set nodes as required\n tr.doc.nodesBetween(from, to, (node: ProsemirrorNode, pos: number) => {\n // ignore paragraph and text nodes (already have 'cleared' formatting)\n if (node.type === schema.nodes.paragraph || node.type === schema.nodes.text) {\n return;\n }\n\n // pass recursively through list container nodes\n if (\n node.type === schema.nodes.bullet_list ||\n node.type === schema.nodes.ordered_list ||\n node.type === schema.nodes.definition_list ||\n node.type === schema.nodes.definition_list_term ||\n node.type === schema.nodes.definition_list_description\n ) {\n return;\n }\n\n // get node range (map positions)\n const fromPos = tr.doc.resolve(tr.mapping.map(pos + 1));\n const toPos = tr.doc.resolve(tr.mapping.map(pos + node.nodeSize - 1));\n const nodeRange = fromPos.blockRange(toPos);\n\n // process text blocks and blocks that can be lifted (e.g. blockquote)\n if (nodeRange) {\n if (node.type.isTextblock) {\n tr.setNodeMarkup(nodeRange.start, schema.nodes.paragraph);\n } else if (kLiftFormattingNodes.includes(node.type.name)) {\n const targetLiftDepth = liftTarget(nodeRange);\n if (targetLiftDepth || targetLiftDepth === 0) {\n tr.lift(nodeRange, targetLiftDepth);\n }\n }\n }\n });\n\n dispatch(tr);\n }\n\n return true;\n}\n\nexport default extension;\n","/*\n * smarty.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { ellipsis, InputRule } from 'prosemirror-inputrules';\nimport { Plugin, PluginKey, EditorState } from 'prosemirror-state';\nimport { Schema } from 'prosemirror-model';\n\nimport { Extension, extensionIfEnabled } from '../api/extension';\nimport { fancyQuotesToSimple } from '../api/quote';\n\nconst plugin = new PluginKey('smartypaste');\n\n// match enDash but only for lines that aren't an html comment\nconst enDash = new InputRule(/[^!-`]--$/, (state: EditorState, match: string[], start: number, end: number) => {\n const { parent, parentOffset } = state.selection.$head;\n const precedingText = parent.textBetween(0, parentOffset);\n if (precedingText.indexOf('$/;\n\nconst extension = (context: ExtensionContext): Extension | null => {\n const { options, ui } = context;\n\n return {\n marks: [\n {\n name: 'raw_html_comment',\n noInputRules: true,\n noSpelling: true,\n spec: {\n attrs: {\n editing: { default: false },\n format: { default: false },\n },\n inclusive: false,\n excludes: 'formatting',\n parseDOM: [\n {\n tag: \"span[class*='raw-html-comment']\",\n getAttrs(dom: Node | string) {\n const el = dom as Element;\n return {\n editing: el.getAttribute('data-editing') === '1',\n format: el.getAttribute('data-format') === '1',\n };\n },\n },\n ],\n toDOM(mark: Mark) {\n const attr: any = {\n class:\n 'raw-html-comment pm-fixedwidth-font ' +\n (mark.attrs.editing ? 'pm-comment-color pm-comment-background-color' : 'pm-light-text-color') +\n (mark.attrs.format && options.hideFormatComment ? ' pm-comment-hidden' : ''),\n 'data-editing': mark.attrs.editing ? '1' : '0',\n 'data-format': mark.attrs.format ? '1' : '0',\n };\n return ['span', attr];\n },\n },\n pandoc: {\n readers: [],\n inlineHTMLReader: (schema: Schema, html: string, writer?: ProsemirrorWriter) => {\n const isComment = isHTMLComment(html);\n if (!isComment) {\n return false;\n }\n\n if (writer) {\n const mark = schema.marks.raw_html_comment.create(commentMarkAttribs(html));\n writer.openMark(mark);\n writer.writeText(html);\n writer.closeMark(mark);\n }\n\n return isComment;\n },\n writer: {\n priority: 1,\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\n output.writeRawMarkdown(parent);\n },\n },\n },\n },\n ],\n\n appendMarkTransaction: (schema: Schema) => {\n const markType = schema.marks.raw_html_comment;\n const kHTMLCommentMarkRegEx = new RegExp(kHTMLCommentRegEx.source, 'g');\n return [\n {\n name: 'html-editing-comment-marks',\n filter: (node: ProsemirrorNode) => node.isTextblock && node.type.allowsMarkType(markType),\n append: (tr: MarkTransaction, node: ProsemirrorNode, pos: number) => {\n removeInvalidatedMarks(tr, node, pos, kHTMLCommentRegEx, markType);\n detectAndApplyMarks(\n tr,\n tr.doc.nodeAt(pos)!,\n pos,\n kHTMLCommentMarkRegEx,\n markType,\n match => commentMarkAttribs(match[1]),\n () => true,\n match => match[1],\n );\n },\n },\n ];\n },\n\n // insert command\n commands: (schema: Schema) => {\n return [new InsertHTMLCommentCommand(schema, ui)];\n },\n };\n};\n\nexport class InsertHTMLCommentCommand extends ProsemirrorCommand {\n constructor(schema: Schema, ui: EditorUI) {\n super(\n EditorCommandId.HTMLComment,\n ['Shift-Mod-c'],\n (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // make sure we can insert a text node here\n if (!canInsertNode(state, schema.nodes.text)) {\n return false;\n }\n\n // make sure we can apply this mark here\n if (!toggleMarkType(schema.marks.raw_html)(state)) {\n return false;\n }\n\n // make sure the end of the selection (where we will insert the comment)\n // isn't already in a mark of this type\n if (state.doc.rangeHasMark(state.selection.to, state.selection.to + 1, schema.marks.raw_html)) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n\n // set the selection to the end of the current selection (comment 'on' the selection)\n setTextSelection(tr.selection.to)(tr);\n\n // if we have a character right before us then insert a space\n const { parent, parentOffset } = tr.selection.$to;\n const charBefore = parent.textContent.slice(parentOffset - 1, parentOffset);\n if (charBefore.length && charBefore !== ' ') {\n tr.insertText(' ');\n }\n\n // insert the comment\n const comment = '';\n const mark = schema.marks.raw_html_comment.create({ editing: true });\n tr.insert(tr.selection.to, schema.text(comment, [mark]));\n\n // set the selection to the middle of the comment\n tr.setSelection(new TextSelection(tr.doc.resolve(tr.selection.to - (comment.length / 2 - 1))));\n\n // dispatch\n dispatch(tr);\n }\n\n return true;\n },\n {\n name: ui.context.translateText('Comment'),\n description: ui.context.translateText('Editing comment'),\n group: OmniInsertGroup.Content,\n priority: 3,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.comment_dark! : ui.images.omni_insert?.comment!),\n },\n );\n }\n}\n\nfunction commentMarkAttribs(comment: string) {\n return {\n editing: !!comment.match(kHTMLEditingCommentRegEx),\n format: !!matchPandocFormatComment(comment),\n };\n}\n\nexport default extension;\n","/*\n * shortcode.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, Node as ProsemirrorNode, Mark, Fragment } from 'prosemirror-model';\nimport { Transaction } from 'prosemirror-state';\n\nimport { findChildren } from 'prosemirror-utils';\n\nimport { Extension, ExtensionContext } from '../api/extension';\nimport { detectAndApplyMarks, removeInvalidatedMarks } from '../api/mark';\nimport { MarkTransaction } from '../api/transaction';\nimport { FixupContext } from '../api/fixup';\nimport { kShortcodeRegEx } from '../api/shortcode';\nimport { PandocOutput } from '../api/pandoc';\n\nconst extension = (context: ExtensionContext): Extension | null => {\n const { format } = context;\n\n if (!format.hugoExtensions.shortcodes) {\n return null;\n }\n\n return {\n marks: [\n {\n name: 'shortcode',\n noInputRules: true,\n noSpelling: true,\n spec: {\n inclusive: false,\n excludes: 'formatting',\n attrs: {},\n parseDOM: [\n {\n tag: \"span[class*='shortcode']\",\n },\n ],\n toDOM(_mark: Mark) {\n return ['span', { class: 'shortcode pm-markup-text-color pm-fixedwidth-font' }];\n },\n },\n pandoc: {\n readers: [],\n writer: {\n priority: 1,\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\n output.writeRawMarkdown(parent);\n },\n },\n },\n },\n ],\n\n fixups: (schema: Schema) => {\n return [\n (tr: Transaction, fixupContext: FixupContext) => {\n if (fixupContext === FixupContext.Load) {\n // apply marks\n const markType = schema.marks.shortcode;\n const predicate = (node: ProsemirrorNode) => {\n return node.isTextblock && node.type.allowsMarkType(markType);\n };\n const markTr = new MarkTransaction(tr);\n findChildren(tr.doc, predicate).forEach(nodeWithPos => {\n const { pos } = nodeWithPos;\n detectAndCreateShortcodes(schema, markTr, pos);\n });\n }\n return tr;\n },\n ];\n },\n\n appendMarkTransaction: (schema: Schema) => {\n return [\n {\n name: 'shortcode-marks',\n filter: (node: ProsemirrorNode) =>\n node.isTextblock && node.type.allowsMarkType(node.type.schema.marks.shortcode),\n append: (tr: MarkTransaction, node: ProsemirrorNode, pos: number) => {\n removeInvalidatedMarks(tr, node, pos, kShortcodeRegEx, node.type.schema.marks.shortcode);\n detectAndCreateShortcodes(node.type.schema, tr, pos);\n },\n },\n ];\n },\n };\n};\n\nfunction detectAndCreateShortcodes(schema: Schema, tr: MarkTransaction, pos: number) {\n // apply marks wherever they belong\n detectAndApplyMarks(\n tr,\n tr.doc.nodeAt(pos)!,\n pos,\n kShortcodeRegEx,\n schema.marks.shortcode,\n () => ({}),\n () => true,\n match => match[1],\n );\n}\n\nexport default extension;\n","/*\n * footnote.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, Fragment, NodeType, DOMOutputSpec } from 'prosemirror-model';\nimport { Plugin, PluginKey, EditorState, Transaction, TextSelection, Selection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport {\n findChildrenByType,\n findParentNodeOfType,\n findSelectedNodeOfType,\n NodeWithPos,\n findChildren,\n} from 'prosemirror-utils';\n\nimport { ExtensionContext } from '../../api/extension';\nimport { uuidv4 } from '../../api/util';\nimport { PandocOutput, PandocTokenType, ProsemirrorWriter, PandocToken } from '../../api/pandoc';\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { canInsertNode } from '../../api/node';\nimport { EditorUI } from '../../api/ui';\nimport { OmniInsertGroup } from '../../api/omni_insert';\n\nimport {\n footnoteEditorKeyDownHandler,\n footnoteEditorActivationPlugin,\n footnoteEditorNodeViews,\n} from './footnote-editor';\nimport {\n footnoteAppendTransaction,\n footnoteFilterTransaction,\n footnoteSelectNoteAppendTransaction,\n} from './footnote-transaction';\n\nimport './footnote-styles.css';\n\nconst plugin = new PluginKey('footnote');\n\nconst extension = (context: ExtensionContext) => {\n const { pandocExtensions, ui } = context;\n\n if (!pandocExtensions.footnotes) {\n return null;\n }\n\n return {\n nodes: [\n {\n name: 'footnote',\n spec: {\n inline: true,\n attrs: {\n number: { default: 1 },\n ref: {},\n content: { default: '' },\n },\n group: 'inline',\n // atom: true,\n parseDOM: [\n {\n tag: \"span[class*='footnote']\",\n getAttrs(dom: Node | string) {\n const el = dom as Element;\n return {\n ref: el.getAttribute('data-ref'),\n content: el.getAttribute('data-content'),\n };\n },\n },\n ],\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\n return [\n 'span',\n { class: 'footnote pm-footnote', 'data-ref': node.attrs.ref, 'data-content': node.attrs.content },\n node.attrs.number.toString(),\n ];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Note,\n handler: writePandocNote,\n },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeNote(node);\n },\n },\n },\n ],\n\n appendTransaction: (_schema: Schema) => {\n return [footnoteAppendTransaction()];\n },\n\n plugins: (_schema: Schema) => {\n return [\n footnoteEditorActivationPlugin(),\n\n new Plugin({\n key: plugin,\n\n // footnote editor\n props: {\n handleKeyDown: footnoteEditorKeyDownHandler(),\n nodeViews: footnoteEditorNodeViews(),\n },\n\n // footnote transactions (fixups, etc.)\n filterTransaction: footnoteFilterTransaction(),\n appendTransaction: footnoteSelectNoteAppendTransaction(),\n }),\n ];\n },\n\n commands: () => {\n return [\n new ProsemirrorCommand(EditorCommandId.Footnote, ['Shift-Mod-F7'], footnoteCommandFn(), footnoteOmniInsert(ui)),\n ];\n },\n };\n};\n\nfunction writePandocNote(schema: Schema) {\n return (writer: ProsemirrorWriter, tok: PandocToken) => {\n // generate unique id\n const ref = uuidv4();\n\n // add note to notes collection (will be handled specially by closeNode b/c it\n // has schema.nodes.node type)\n writer.openNoteNode(ref);\n writer.writeTokens(tok.c);\n const noteNode = writer.closeNode();\n\n // store json version of node in an attribute of the footnote (we can copy/paste)\n // between different documents\n const content = JSON.stringify(noteNode.content.toJSON());\n\n // add inline node to the body\n writer.addNode(schema.nodes.footnote, { ref, number: noteNode.attrs.number, content }, []);\n };\n}\n\nfunction footnoteCommandFn() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n if (!canInsertFootnote(state)) {\n return false;\n }\n if (dispatch) {\n const tr = state.tr;\n insertFootnote(tr);\n dispatch(tr);\n }\n return true;\n };\n}\n\nfunction footnoteOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Footnote'),\n description: ui.context.translateText('Note placed at the bottom of the page'),\n group: OmniInsertGroup.References,\n priority: 2,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.footnote_dark! : ui.images.omni_insert?.footnote!),\n };\n}\n\nfunction canInsertFootnote(state: EditorState) {\n return (\n canInsertNode(state, state.schema.nodes.footnote) && !findParentNodeOfType(state.schema.nodes.note)(state.selection)\n );\n}\n\nfunction insertFootnote(\n tr: Transaction,\n edit = true,\n content?: Fragment | ProsemirrorNode | ProsemirrorNode[] | undefined,\n): string {\n // resolve content\n const schema = tr.doc.type.schema;\n if (!content) {\n content = schema.nodes.paragraph.create();\n }\n\n // generate note id\n const ref = uuidv4();\n\n // insert empty note\n const notes = findChildrenByType(tr.doc, schema.nodes.notes, true)[0];\n const note = schema.nodes.note.createAndFill({ ref }, content);\n tr.insert(notes.pos + 1, note as ProsemirrorNode);\n\n // insert footnote linked to note\n const footnote = schema.nodes.footnote.create({ ref });\n tr.replaceSelectionWith(footnote, false);\n\n // open note editor\n if (edit) {\n const noteNode = findNoteNode(tr.doc, ref);\n if (noteNode) {\n tr.setSelection(TextSelection.create(tr.doc, noteNode.pos + 1));\n }\n }\n\n // return ref\n return ref;\n}\n\nexport function selectedFootnote(selection: Selection): NodeWithPos | undefined {\n const schema = selection.$head.node().type.schema;\n return findSelectedNodeOfType(schema.nodes.footnote)(selection);\n}\n\nexport function selectedNote(selection: Selection): NodeWithPos | undefined {\n const schema = selection.$head.node().type.schema;\n return findParentNodeOfType(schema.nodes.note)(selection);\n}\n\nexport function findNoteNode(doc: ProsemirrorNode, ref: string): NodeWithPos | undefined {\n return findNodeOfTypeWithRef(doc, doc.type.schema.nodes.note, ref);\n}\n\nexport function findFootnoteNode(doc: ProsemirrorNode, ref: string): NodeWithPos | undefined {\n return findNodeOfTypeWithRef(doc, doc.type.schema.nodes.footnote, ref);\n}\n\nfunction findNodeOfTypeWithRef(doc: ProsemirrorNode, type: NodeType, ref: string): NodeWithPos | undefined {\n const foundNode = findChildren(doc, node => node.type === type && node.attrs.ref === ref, true);\n if (foundNode.length) {\n return foundNode[0];\n } else {\n return undefined;\n }\n}\n\nexport default extension;\n","/*\n * shortcode.ts\n *\n * Copyright (C) 2019-20 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport const kShortcodePattern = '(?:^|[^`])({{([%<])\\\\s+.*?[%>]}})';\nexport const kShortcodeRegEx = new RegExp(kShortcodePattern, 'g');\n","/*\n * footnote-editor.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorView, DecorationSet, NodeView } from 'prosemirror-view';\nimport { findParentNodeOfType, NodeWithPos, findChildrenByType, findChildren } from 'prosemirror-utils';\nimport { EditorState, TextSelection, Plugin, PluginKey, Transaction } from 'prosemirror-state';\n\nimport { nodeDecoration } from '../../api/decoration';\nimport { firstNode, lastNode } from '../../api/node';\nimport { selectionIsWithin } from '../../api/selection';\nimport { scrollIntoView } from '../../api/scroll';\n\nimport { findFootnoteNode, selectedFootnote, selectedNote } from './footnote';\n\nconst key = new PluginKey('footnote-editor-activate');\n\nexport function footnoteEditorActivationPlugin() {\n return new Plugin({\n key,\n state: {\n init(_config: { [key: string]: any }, instance: EditorState) {\n return DecorationSet.empty;\n },\n\n // whenever an edit affecting this mark type occurs then update the decorations\n apply(tr: Transaction, set: DecorationSet, oldState: EditorState, newState: EditorState) {\n if (selectedFootnote(newState.selection) || selectedNote(newState.selection)) {\n // if we are in the same note selection as before just return the set\n if (oldState.selection.$head.node() === newState.selection.$head.node()) {\n return set.map(tr.mapping, tr.doc);\n } else {\n return footnoteEditorDecorations(newState);\n }\n } else {\n return DecorationSet.empty;\n }\n },\n },\n props: {\n decorations(state: EditorState) {\n return key.getState(state);\n },\n },\n\n view: () => ({\n // scroll footnote into view (if necessary) when note editor is active\n update: (view: EditorView) => {\n const note = selectedNote(view.state.selection);\n if (note) {\n const footnote = findFootnoteNode(view.state.doc, note.node.attrs.ref);\n if (footnote) {\n scrollIntoView(view, footnote.pos, false, 0, 30);\n }\n }\n },\n }),\n });\n}\n\n// selection-driven decorations (mostly css classes) required to activate the footnote editor\nfunction footnoteEditorDecorations(state: EditorState) {\n const schema = state.schema;\n\n // see if either a footnote node or note (footnote editor) node has the selection\n let footnoteNode = selectedFootnote(state.selection);\n let noteNode = selectedNote(state.selection);\n\n // if they do then we need to enable footnote editing/behavior by\n // using decorators to inject appropriate css classes\n if (footnoteNode || noteNode) {\n // get body and notes nodes\n const bodyNode = findChildrenByType(state.doc, schema.nodes.body)[0];\n const notesNode = findChildrenByType(state.doc, schema.nodes.notes)[0];\n\n // resolve the specific footnote node or specific note node\n if (footnoteNode) {\n const ref = footnoteNode.node.attrs.ref;\n const matching = findChildren(notesNode.node, node => node.attrs.ref === ref);\n if (matching.length) {\n noteNode = matching[0];\n noteNode.pos = notesNode.pos + 1 + noteNode.pos;\n }\n } else if (noteNode) {\n const ref = noteNode.node.attrs.ref;\n const matching = findChildren(\n state.doc,\n node => node.type === schema.nodes.footnote && node.attrs.ref === ref,\n true,\n );\n if (matching.length) {\n footnoteNode = matching[0];\n }\n }\n\n if (footnoteNode && noteNode) {\n return DecorationSet.create(state.doc, [\n // make notes node visible\n nodeDecoration(noteNode, { class: 'active' }),\n\n // paint outline over footnote\n nodeDecoration(footnoteNode, { class: 'active pm-selected-node-outline-color' }),\n\n // position body and notes nodes for footnote editing\n nodeDecoration(bodyNode, { class: 'editing-footnote pm-pane-border-color' }),\n nodeDecoration(notesNode, { class: 'editing-footnote pm-pane-border-color' }),\n ]);\n } else {\n return DecorationSet.empty;\n }\n } else {\n return DecorationSet.empty;\n }\n}\n\n// node view that display the note number alongside the note content\nexport function footnoteEditorNodeViews() {\n return {\n note(node: ProsemirrorNode, view: EditorView, getPos: boolean | (() => number)) {\n return new NoteEditorView(node, view, getPos as () => number);\n },\n };\n}\n\nclass NoteEditorView implements NodeView {\n public readonly dom: HTMLElement;\n public readonly contentDOM: HTMLElement;\n\n private readonly node: ProsemirrorNode;\n private readonly view: EditorView;\n private readonly getPos: () => number;\n\n constructor(node: ProsemirrorNode, view: EditorView, getPos: () => number) {\n this.node = node;\n this.view = view;\n this.getPos = getPos;\n\n this.dom = window.document.createElement('div');\n this.dom.setAttribute('data-ref', this.node.attrs.ref);\n this.dom.classList.add('note');\n\n const label = window.document.createElement('div');\n label.classList.add('note-label');\n label.contentEditable = 'false';\n label.innerHTML = `

${this.node.attrs.number}:

`;\n this.dom.appendChild(label);\n\n const content = window.document.createElement('div');\n content.classList.add('note-content');\n this.contentDOM = content;\n this.dom.appendChild(content);\n }\n}\n\n// custom handling for arrow keys that cause selection to escape the editor\nexport function footnoteEditorKeyDownHandler() {\n return (view: EditorView, event: KeyboardEvent) => {\n // alias schema & selection\n const schema = view.state.schema;\n const selection = view.state.selection;\n\n // pass if the selection isn't in a note\n const noteNode: NodeWithPos | undefined = findParentNodeOfType(schema.nodes.note)(selection);\n if (!noteNode) {\n return false;\n }\n\n // function to find and move selection to associated footnote\n // will call this from Escape, ArrowLeft, and ArrowUp handlers below\n const selectFootnote = (before = true) => {\n const footnoteNode = findFootnoteNode(view.state.doc, noteNode.node.attrs.ref);\n if (footnoteNode) {\n const tr = view.state.tr;\n tr.setSelection(TextSelection.near(tr.doc.resolve(footnoteNode.pos + (before ? 0 : 1))));\n view.dispatch(tr);\n }\n };\n\n // if this is the Escape key then close the editor\n if (event.key === 'Escape') {\n selectFootnote();\n return true;\n }\n\n // ...otherwise check to see if the user is attempting to arrow out of the footnote\n\n // get first and last text block nodes (bail if we aren't in either)\n const firstTextBlock = firstNode(noteNode, node => node.isTextblock);\n const lastTextBlock = lastNode(noteNode, node => node.isTextblock);\n if (!firstTextBlock && !lastTextBlock) {\n return false;\n }\n\n // exiting from first text block w/ left or up arrow?\n if (firstTextBlock) {\n if (selectionIsWithin(selection, firstTextBlock)) {\n switch (event.key) {\n case 'ArrowLeft':\n if (selection.anchor === firstTextBlock.pos + 1) {\n selectFootnote(true);\n return true;\n }\n break;\n case 'ArrowUp': {\n if (view.endOfTextblock('up')) {\n selectFootnote(true);\n return true;\n }\n break;\n }\n }\n }\n }\n\n // exiting from last text block with right or down arrow?\n if (lastTextBlock) {\n if (selectionIsWithin(selection, lastTextBlock)) {\n switch (event.key) {\n case 'ArrowRight':\n if (selection.anchor === lastTextBlock.pos + lastTextBlock.node.nodeSize - 1) {\n selectFootnote(false);\n return true;\n }\n break;\n case 'ArrowDown': {\n if (view.endOfTextblock('down')) {\n selectFootnote(false);\n return true;\n }\n break;\n }\n }\n }\n }\n\n return false;\n };\n}\n","/*\n * footnote-transaction.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Fragment, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { Transaction, EditorState, TextSelection } from 'prosemirror-state';\nimport {\n findChildrenByType,\n NodeWithPos,\n findSelectedNodeOfType,\n ContentNodeWithPos,\n findParentNodeOfType,\n} from 'prosemirror-utils';\nimport { Transform } from 'prosemirror-transform';\n\nimport { uuidv4 } from '../../api/util';\n\nimport { findNoteNode, selectedNote } from './footnote';\nimport { trTransform } from '../../api/transaction';\n\n// examine transactions and filter out attempts to place foonotes within note bodies\n// (this is not allowed by pandoc markdown)\nexport function footnoteFilterTransaction() {\n return (tr: Transaction, state: EditorState) => {\n const noteWithPos = selectedNote(tr.selection);\n if (noteWithPos && findChildrenByType(noteWithPos.node, state.schema.nodes.footnote).length) {\n return false;\n }\n return true;\n };\n}\n\n// examine editor transactions and append a transaction that handles fixup of footnote numbers,\n// importing of pasted footnotes, selection propagation to the footnote editor, etc.\nexport function footnoteAppendTransaction() {\n const footnoteChange = (node: ProsemirrorNode) => {\n const schema = node.type.schema;\n return node.type === schema.nodes.footnote || node.type === schema.nodes.note;\n };\n\n return {\n name: 'footnote-renumber',\n nodeFilter: footnoteChange,\n append: (tr: Transaction) => {\n const schema = tr.doc.type.schema;\n const activeNote = findParentNodeOfType(schema.nodes.note)(tr.selection);\n trTransform(tr, footnoteFixupTransform(activeNote));\n },\n };\n}\n\nfunction footnoteFixupTransform(activeNote: ContentNodeWithPos | undefined) {\n return (tr: Transform) => {\n // query for notes and footnotes. note that since these are computed at the beginning\n // before any steps are applied, we always need to map their positions before using them\n const schema = tr.doc.type.schema;\n const footnotes = findAllFootnotes(tr.doc);\n const allNotes = findAllNotes(tr.doc);\n\n // iterate through footnotes in the newState\n const refs = new Set();\n footnotes.forEach((footnote, index) => {\n // map position\n footnote.pos = tr.mapping.map(footnote.pos);\n\n // footnote number\n const number = index + 1;\n\n // alias ref and content (either or both may be updated)\n let { ref, content } = footnote.node.attrs;\n\n // we may be creating a new note to append\n let newNote: any;\n\n // get reference to note (if any)\n const note = allNotes.find(noteWithPos => noteWithPos.node.attrs.ref === ref);\n\n // matching note found\n if (note) {\n // map position since we scanned for all of the notes at the top and we may\n // have called tr.insert for a new note below which would have invalidated\n // the positions\n note.pos = tr.mapping.map(note.pos);\n\n // update content if this is a note edit (used to propagate user edits back to data-content)\n if (activeNote && activeNote.node.attrs.ref === ref) {\n content = JSON.stringify(note.node.content.toJSON());\n }\n\n // if we've already processed this ref then it's a duplicate, make a copy w/ a new ref/id\n if (refs.has(ref)) {\n // create a new unique id and change the ref to it\n ref = uuidv4();\n\n // create and insert new note with this id\n newNote = schema.nodes.note.createAndFill({ ref, number }, note.node.content);\n\n // otherwise update the note with the correct number (if necessary)\n } else {\n if (note.node.attrs.number !== number) {\n tr.setNodeMarkup(note.pos, schema.nodes.note, {\n ...note.node.attrs,\n number,\n });\n }\n }\n\n // if there is no note then create one using the content attr\n // (this can happen for a copy/paste operation from another document)\n } else if (content) {\n newNote = schema.nodes.note.createAndFill({ ref, number }, Fragment.fromJSON(schema, JSON.parse(content)));\n }\n\n // insert newNote if necessary\n if (newNote) {\n const notesContainer = findNotesContainer(tr.doc);\n tr.insert(notesContainer.pos + 1, newNote as ProsemirrorNode);\n }\n\n // indicate that we've seen this ref\n refs.add(ref);\n\n // set new footnote markup if necessary\n const attrs = footnote.node.attrs;\n if (ref !== attrs.ref || content !== attrs.content || number !== attrs.number) {\n tr.setNodeMarkup(footnote.pos, schema.nodes.footnote, {\n ...footnote.node.attrs,\n ref,\n content,\n number,\n });\n }\n });\n\n // remove ophraned notes\n for (let i = allNotes.length - 1; i >= 0; i--) {\n const note = allNotes[i];\n note.pos = tr.mapping.map(note.pos);\n const footnote = footnotes.find(fn => fn.node.attrs.ref === note.node.attrs.ref);\n if (!footnote) {\n tr.delete(note.pos, note.pos + note.node.nodeSize);\n }\n }\n };\n}\n\nexport function footnoteSelectNoteAppendTransaction() {\n return (_transactions: Transaction[], _oldState: EditorState, newState: EditorState) => {\n const schema = newState.schema;\n const footnoteNode: NodeWithPos | undefined = findSelectedNodeOfType(schema.nodes.footnote)(newState.selection);\n if (footnoteNode) {\n const tr = newState.tr;\n const ref = footnoteNode.node.attrs.ref;\n const noteNode = findNoteNode(tr.doc, ref);\n if (noteNode) {\n tr.setSelection(TextSelection.near(tr.doc.resolve(noteNode.pos)));\n }\n return tr;\n }\n };\n}\n\nfunction findAllFootnotes(doc: ProsemirrorNode) {\n const schema = doc.type.schema;\n return findChildrenByType(doc, schema.nodes.footnote, true);\n}\n\nfunction findAllNotes(doc: ProsemirrorNode) {\n const schema = doc.type.schema;\n const notesContainer = findNotesContainer(doc);\n const offset = notesContainer.pos + 1;\n const notes = findChildrenByType(notesContainer.node, schema.nodes.note, false);\n return notes.map(note => ({ ...note, pos: note.pos + offset }));\n}\n\nfunction findNotesContainer(doc: ProsemirrorNode) {\n return findChildrenByType(doc, doc.type.schema.nodes.notes, false)[0];\n}\n","/*\n * raw_block.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, NodeType } from 'prosemirror-model';\n\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { setBlockType } from 'prosemirror-commands';\n\nimport { findParentNode } from 'prosemirror-utils';\n\nimport { Extension, ExtensionContext } from '../api/extension';\n\nimport {\n PandocOutput,\n PandocToken,\n PandocTokenType,\n ProsemirrorWriter,\n kRawBlockContent,\n kRawBlockFormat,\n} from '../api/pandoc';\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\n\nimport { EditorUI } from '../api/ui';\nimport { isSingleLineHTML } from '../api/html';\nimport { kHTMLFormat, kTexFormat, editRawBlockCommand, isRawHTMLFormat } from '../api/raw';\nimport { isSingleLineTex } from '../api/tex';\nimport { OmniInsert, OmniInsertGroup } from '../api/omni_insert';\n\nconst extension = (context: ExtensionContext): Extension | null => {\n const { pandocExtensions, pandocCapabilities, ui } = context;\n\n const rawAttribute = pandocExtensions.raw_attribute;\n\n return {\n nodes: [\n {\n name: 'raw_block',\n spec: {\n content: 'text*',\n group: 'block',\n marks: '',\n code: true,\n defining: true,\n isolating: true,\n attrs: {\n format: {},\n },\n parseDOM: [\n {\n tag: \"div[class*='raw-block']\",\n preserveWhitespace: 'full',\n getAttrs: (node: Node | string) => {\n const el = node as Element;\n return {\n format: el.getAttribute('data-format'),\n };\n },\n },\n ],\n toDOM(node: ProsemirrorNode) {\n return [\n 'div',\n {\n class: 'raw-block pm-fixedwidth-font pm-code-block pm-markup-text-color',\n 'data-format': node.attrs.format,\n },\n 0,\n ];\n },\n },\n\n code_view: {\n lang: (node: ProsemirrorNode) => {\n return node.attrs.format;\n },\n attrEditFn: rawAttribute ? editRawBlockCommand(ui, pandocCapabilities.output_formats) : undefined,\n borderColorClass: 'pm-raw-block-border',\n },\n\n attr_edit: () => ({\n type: (schema: Schema) => schema.nodes.raw_block,\n tags: (node: ProsemirrorNode) => [node.attrs.format],\n editFn: rawAttribute\n ? () => editRawBlockCommand(ui, pandocCapabilities.output_formats)\n : () => (state: EditorState) => false,\n }),\n\n pandoc: {\n readers: [\n {\n token: PandocTokenType.RawBlock,\n block: 'raw_block',\n },\n ],\n\n // ensure that usethis badges comment ends up in it's own block\n preprocessor: (markdown: string) => {\n return markdown.replace(/([^\\n])(\\n^$)/gm, (_match, p1, p2) => {\n return p1 + '\\n' + p2;\n });\n },\n\n // we define a custom blockReader here so that we can convert html and tex blocks with\n // a single line of code into paragraph with a raw inline\n blockReader: (schema: Schema, tok: PandocToken, writer: ProsemirrorWriter) => {\n if (tok.t === PandocTokenType.RawBlock) {\n readPandocRawBlock(schema, tok, writer);\n return true;\n } else if (isParagraphWrappingMultilineRaw(tok)) {\n const rawTok = tok.c[0];\n const format = rawTok.c[kRawBlockFormat];\n const content = rawTok.c[kRawBlockContent];\n writer.addNode(schema.nodes.raw_block, { format }, [schema.text(content)]);\n return true;\n } else {\n return false;\n }\n },\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n if (!pandocExtensions.raw_attribute || node.textContent.trim() === '') {\n output.writeToken(PandocTokenType.Para, () => {\n output.writeRawMarkdown(node.textContent);\n });\n } else {\n output.writeToken(PandocTokenType.RawBlock, () => {\n output.write(node.attrs.format);\n output.write(node.textContent);\n });\n }\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n const commands: ProsemirrorCommand[] = [];\n\n commands.push(\n new FormatRawBlockCommand(EditorCommandId.HTMLBlock, kHTMLFormat, schema.nodes.raw_block, {\n name: ui.context.translateText('HTML Block'),\n description: ui.context.translateText('Raw HTML content'),\n group: OmniInsertGroup.Blocks,\n priority: 6,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.html_block_dark! : ui.images.omni_insert?.html_block!,\n }),\n );\n\n if (pandocExtensions.raw_tex) {\n commands.push(\n new FormatRawBlockCommand(EditorCommandId.TexBlock, kTexFormat, schema.nodes.raw_block, {\n name: ui.context.translateText('TeX Block'),\n description: ui.context.translateText('Raw TeX content'),\n group: OmniInsertGroup.Blocks,\n priority: 5,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.tex_block_dark! : ui.images.omni_insert?.tex_block!,\n }),\n );\n }\n\n if (rawAttribute) {\n commands.push(new RawBlockCommand(ui, pandocCapabilities.output_formats));\n }\n\n return commands;\n },\n };\n};\n\nfunction readPandocRawBlock(schema: Schema, tok: PandocToken, writer: ProsemirrorWriter) {\n // single lines of html should be read as inline html (allows for\n // highlighting and more seamless editing experience)\n const format = tok.c[kRawBlockFormat];\n const text = tok.c[kRawBlockContent] as string;\n const textTrimmed = text.trimRight();\n if (isRawHTMLFormat(format) && isSingleLineHTML(textTrimmed) && writer.hasInlineHTMLWriter(textTrimmed)) {\n writer.openNode(schema.nodes.paragraph, {});\n writer.writeInlineHTML(textTrimmed);\n writer.closeNode();\n\n // similarly, single lines of tex should be read as inline tex\n } else if (format === kTexFormat && isSingleLineTex(textTrimmed)) {\n writer.openNode(schema.nodes.paragraph, {});\n const rawTexMark = schema.marks.raw_tex.create();\n writer.openMark(rawTexMark);\n writer.writeText(textTrimmed);\n writer.closeMark(rawTexMark);\n writer.closeNode();\n } else {\n writer.openNode(schema.nodes.raw_block, { format });\n writer.writeText(text);\n writer.closeNode();\n }\n}\n\nfunction isParagraphWrappingMultilineRaw(tok: PandocToken) {\n return isSingleChildParagraph(tok) && \n tok.c[0].t === PandocTokenType.RawInline &&\n isMultilineString(tok.c[0].c[kRawBlockContent]);\n}\n\nfunction isSingleChildParagraph(tok: PandocToken) {\n return tok.t === PandocTokenType.Para && tok.c && tok.c.length === 1;\n}\n\nfunction isMultilineString(str: string) {\n return str.indexOf('\\n') !== -1;\n}\n\n// base class for format specific raw block commands (e.g. html/tex)\nclass FormatRawBlockCommand extends ProsemirrorCommand {\n private format: string;\n private nodeType: NodeType;\n\n constructor(id: EditorCommandId, format: string, nodeType: NodeType, omniInsert?: OmniInsert) {\n super(\n id,\n [],\n (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n if (!this.isActive(state) && !setBlockType(this.nodeType, { format })(state)) {\n return false;\n }\n\n if (dispatch) {\n const schema = state.schema;\n if (this.isActive(state)) {\n setBlockType(schema.nodes.paragraph)(state, dispatch);\n } else {\n setBlockType(this.nodeType, { format })(state, dispatch);\n }\n }\n\n return true;\n },\n omniInsert,\n );\n this.format = format;\n this.nodeType = nodeType;\n }\n\n public isActive(state: EditorState) {\n return !!findParentNode(node => node.type === this.nodeType && node.attrs.format === this.format)(state.selection);\n }\n}\n\n// generic raw block command (shows dialog to allow choosing from among raw formats)\nclass RawBlockCommand extends ProsemirrorCommand {\n constructor(ui: EditorUI, outputFormats: string[]) {\n super(EditorCommandId.RawBlock, [], editRawBlockCommand(ui, outputFormats), {\n name: ui.context.translateText('Raw Block...'),\n description: ui.context.translateText('Raw content block'),\n group: OmniInsertGroup.Blocks,\n priority: 4,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.raw_block_dark! : ui.images.omni_insert?.raw_block!),\n });\n }\n}\n\nexport default extension;\n","/*\n * yaml_metadata.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, DOMOutputSpec, ParseRule } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { ExtensionContext, Extension } from '../../api/extension';\nimport { PandocOutput, PandocTokenType } from '../../api/pandoc';\nimport { EditorUI } from '../../api/ui';\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { canInsertNode } from '../../api/node';\nimport { codeNodeSpec } from '../../api/code';\nimport { selectionIsBodyTopLevel } from '../../api/selection';\nimport { yamlMetadataTitlePlugin } from './yaml_metadata-title';\nimport { yamlMetadataBlockCapsuleFilter } from './yaml_metadata-capsule';\nimport { OmniInsertGroup } from '../../api/omni_insert';\nimport { fragmentText } from '../../api/fragment';\nimport { stripYamlDelimeters } from '../../api/yaml';\n\nconst extension = (context: ExtensionContext): Extension => {\n const { ui } = context;\n\n return {\n nodes: [\n {\n name: 'yaml_metadata',\n\n spec: {\n ...codeNodeSpec(),\n attrs: {\n navigation_id: { default: null },\n },\n parseDOM: [\n {\n tag: \"div[class*='yaml-block']\",\n preserveWhitespace: 'full',\n } as ParseRule,\n ],\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\n return ['div', { class: 'yaml-block pm-code-block' }, 0];\n },\n },\n\n code_view: {\n lang: () => 'yaml-frontmatter',\n classes: ['pm-metadata-background-color', 'pm-yaml-metadata-block'],\n },\n\n pandoc: {\n blockCapsuleFilter: yamlMetadataBlockCapsuleFilter(),\n\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.Para, () => {\n const yaml = '---\\n' + stripYamlDelimeters(fragmentText(node.content)) + '\\n---';\n output.writeRawMarkdown(yaml);\n });\n },\n },\n },\n ],\n\n commands: () => {\n return [new YamlMetadataCommand(ui)];\n },\n\n plugins: () => [yamlMetadataTitlePlugin()],\n };\n};\n\nclass YamlMetadataCommand extends ProsemirrorCommand {\n constructor(ui: EditorUI) {\n super(\n EditorCommandId.YamlMetadata,\n [],\n (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const schema = state.schema;\n\n if (!canInsertNode(state, schema.nodes.yaml_metadata)) {\n return false;\n }\n\n // only allow inserting at the top level\n if (!selectionIsBodyTopLevel(state.selection)) {\n return false;\n }\n\n // create yaml metadata text\n if (dispatch) {\n const tr = state.tr;\n const kYamlLeading = '---\\n';\n const kYamlTrailing = '\\n---';\n const yamlText = schema.text(kYamlLeading + kYamlTrailing);\n const yamlNode = schema.nodes.yaml_metadata.create({}, yamlText);\n tr.replaceSelectionWith(yamlNode);\n setTextSelection(tr.mapping.map(state.selection.from) - kYamlTrailing.length - 1)(tr);\n dispatch(tr);\n }\n\n return true;\n },\n {\n name: ui.context.translateText('YAML'),\n description: ui.context.translateText('YAML metadata block'),\n group: OmniInsertGroup.Blocks,\n priority: 3,\n selectionOffset: -4,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.yaml_block_dark! : ui.images.omni_insert?.yaml_block!,\n },\n );\n }\n}\n\nexport default extension;\n","/*\n * yaml_metadata-capsule.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\n\nimport { ProsemirrorWriter } from '../../api/pandoc';\nimport { uuidv4 } from '../../api/util';\nimport {\n encodedBlockCapsuleRegex,\n blockCapsuleSourceWithoutPrefix,\n PandocBlockCapsule,\n blockCapsuleParagraphTokenHandler,\n blockCapsuleTextHandler,\n} from '../../api/pandoc_capsule';\n\nconst kYamlBlocksRegex = /(^)(---[ \\t]*\\n(?![ \\t]*\\n)[\\W\\w]*?\\n(?:---|\\.\\.\\.))([ \\t]*)$/gm;\n\nconst kYamlDiscardRegex = /^([\\t >]*)`{3,}/m;\n\nexport function yamlMetadataBlockCapsuleFilter() {\n const kYamlMetadataCapsuleType = 'E1819605-0ACD-4FAE-8B99-9C1B7BD7C0F1'.toLowerCase();\n\n return {\n type: kYamlMetadataCapsuleType,\n\n match: kYamlBlocksRegex,\n\n // if there was an unterminated yaml block inside a code block (followed by more yaml,\n // perhaps in yet another code block) then the main regex eats the code block boundary.\n // provide a discard expression that excludes any yaml block that has what appears\n // to be a fenced code block boundary\n discard: kYamlDiscardRegex,\n\n // add a newline to ensure that if the metadata block has text right\n // below it we still end up in our own pandoc paragarph block\n enclose: (capsuleText: string) => capsuleText + '\\n',\n // globally replace any instances of our block capsule found in text\n handleText: blockCapsuleTextHandler(\n kYamlMetadataCapsuleType,\n encodedBlockCapsuleRegex(undefined, '\\\\n', 'gm'),\n (text: string) => text.substring(0, text.length - 1), // trim off newline\n ),\n\n // we are looking for a paragraph token consisting entirely of a\n // block capsule of our type. if find that then return the block\n // capsule text\n handleToken: blockCapsuleParagraphTokenHandler(kYamlMetadataCapsuleType),\n\n // write as yaml_metadata\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\n writer.openNode(schema.nodes.yaml_metadata, {\n navigation_id: uuidv4(),\n md_index: capsule.position,\n });\n // write the lines w/o the source-level prefix\n writer.writeText(blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix));\n writer.closeNode();\n },\n };\n}\n","/*\n * rmd_chunk.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\n\nimport { Extension, ExtensionContext } from '../../api/extension';\nimport { PandocOutput, PandocTokenType } from '../../api/pandoc';\n\nimport { codeNodeSpec } from '../../api/code';\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\n\nimport { EditorUI } from '../../api/ui';\nimport { kBookdownDocType } from '../../api/format';\nimport { rmdChunk, insertRmdChunk } from '../../api/rmd';\nimport { OmniInsertGroup } from '../../api/omni_insert';\n\nimport { RmdChunkImagePreviewPlugin } from './rmd_chunk-image';\nimport { rmdChunkBlockCapsuleFilter } from './rmd_chunk-capsule';\n\nimport './rmd_chunk-styles.css';\n\nconst extension = (context: ExtensionContext): Extension | null => {\n const { ui, options, format } = context;\n\n if (!format.rmdExtensions.codeChunks) {\n return null;\n }\n\n return {\n nodes: [\n {\n name: 'rmd_chunk',\n spec: {\n ...codeNodeSpec(),\n attrs: {\n navigation_id: { default: null },\n md_index: { default: 0 },\n },\n parseDOM: [\n {\n tag: \"div[class*='rmd-chunk']\",\n preserveWhitespace: 'full',\n },\n ],\n toDOM(node: ProsemirrorNode) {\n return ['div', { class: 'rmd-chunk pm-code-block' }, 0];\n },\n },\n\n code_view: {\n firstLineMeta: true,\n lineNumbers: true,\n lineNumberFormatter: (lineNumber: number, lineCount?: number, line?: string) => {\n if (lineNumber === 1) {\n return '';\n } else {\n return lineNumber - 1 + '';\n }\n },\n bookdownTheorems: format.docTypes.includes(kBookdownDocType),\n classes: ['pm-chunk-background-color'],\n lang: (_node: ProsemirrorNode, content: string) => {\n const match = content.match(/^\\{([a-zA-Z0-9_]+)/);\n if (match) {\n return match[1];\n } else {\n return null;\n }\n },\n createFromPastePattern: /^\\{([a-zA-Z0-9_]+).*}.*?\\n/m,\n },\n\n pandoc: {\n blockCapsuleFilter: rmdChunkBlockCapsuleFilter(),\n\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.Para, () => {\n const parts = rmdChunk(node.textContent);\n if (parts) {\n output.writeRawMarkdown('```{' + parts.meta + '}\\n' + parts.code + '```\\n');\n }\n });\n },\n },\n },\n ],\n\n commands: (_schema: Schema) => {\n const commands = [\n new RChunkCommand(ui),\n new PythonChunkCommand(ui),\n new BashChunkCommand(ui),\n new RcppChunkCommand(ui),\n new SQLChunkCommand(ui),\n new D3ChunkCommand(ui),\n new StanChunkCommand(ui),\n ];\n return commands;\n },\n\n plugins: (_schema: Schema) => {\n if (options.rmdImagePreview) {\n return [new RmdChunkImagePreviewPlugin(ui.context)];\n } else {\n return [];\n }\n },\n };\n};\n\nclass RmdChunkCommand extends ProsemirrorCommand {\n constructor(\n ui: EditorUI,\n id: EditorCommandId,\n keymap: string[],\n priority: number,\n lang: string,\n placeholder: string,\n image: () => string,\n rowOffset = 1,\n colOffset = 0,\n selectionOffset?: number,\n ) {\n super(id, keymap, insertRmdChunk(placeholder, rowOffset, colOffset), {\n name: `${lang} ${ui.context.translateText('Code Chunk')}`,\n description: `${ui.context.translateText('Executable')} ${lang} ${ui.context.translateText('chunk')}`,\n group: OmniInsertGroup.Chunks,\n priority,\n selectionOffset: selectionOffset || colOffset || placeholder.length,\n image,\n });\n }\n}\n\nclass RChunkCommand extends RmdChunkCommand {\n constructor(ui: EditorUI) {\n super(ui, EditorCommandId.RCodeChunk, ['Mod-Alt-i'], 10, 'R', '{r}\\n', () =>\n ui.prefs.darkMode() ? ui.images.omni_insert!.r_chunk_dark! : ui.images.omni_insert!.r_chunk!,\n );\n }\n}\n\nclass PythonChunkCommand extends RmdChunkCommand {\n constructor(ui: EditorUI) {\n super(\n ui,\n EditorCommandId.PythonCodeChunk,\n [],\n 8,\n 'Python',\n '{python}\\n',\n () => ui.images.omni_insert!.python_chunk!,\n );\n }\n}\n\nclass BashChunkCommand extends RmdChunkCommand {\n constructor(ui: EditorUI) {\n super(ui, EditorCommandId.BashCodeChunk, [], 7, 'Bash', '{bash}\\n', () =>\n ui.prefs.darkMode() ? ui.images.omni_insert!.bash_chunk_dark! : ui.images.omni_insert!.bash_chunk!,\n );\n }\n}\n\nclass RcppChunkCommand extends RmdChunkCommand {\n constructor(ui: EditorUI) {\n super(ui, EditorCommandId.RcppCodeChunk, [], 6, 'Rcpp', '{Rcpp}\\n', () =>\n ui.prefs.darkMode() ? ui.images.omni_insert!.rcpp_chunk_dark! : ui.images.omni_insert!.rcpp_chunk!,\n );\n }\n}\n\nclass SQLChunkCommand extends RmdChunkCommand {\n constructor(ui: EditorUI) {\n super(\n ui,\n EditorCommandId.SQLCodeChunk,\n [],\n 5,\n 'SQL',\n '{sql connection=}\\n',\n () => ui.images.omni_insert!.sql_chunk!,\n 0,\n 16,\n );\n }\n}\n\nclass D3ChunkCommand extends RmdChunkCommand {\n constructor(ui: EditorUI) {\n super(ui, EditorCommandId.D3CodeChunk, [], 4, 'D3', '{d3 data=}\\n', () => ui.images.omni_insert!.d3_chunk!, 0, 9);\n }\n}\n\nclass StanChunkCommand extends RmdChunkCommand {\n constructor(ui: EditorUI) {\n super(\n ui,\n EditorCommandId.StanCodeChunk,\n [],\n 7,\n 'Stan',\n '{stan output.var=}\\n',\n () => ui.images.omni_insert!.stan_chunk!,\n 0,\n 17,\n );\n }\n}\n\nexport default extension;\n","/*\n * rmd_chunk-image.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { Plugin, PluginKey, Transaction, EditorState } from 'prosemirror-state';\nimport { DecorationSet, Decoration, EditorView } from 'prosemirror-view';\n\nimport { findChildrenByType, setTextSelection } from 'prosemirror-utils';\n\nimport { transactionsAreTypingChange, transactionsHaveChange } from '../../api/transaction';\nimport { EditorUIContext } from '../../api/ui';\nimport { stripQuotes } from '../../api/text';\nimport { onElementRemoved } from '../../api/dom';\n\nconst key = new PluginKey('rmd-chunk-image-preview');\n\nexport class RmdChunkImagePreviewPlugin extends Plugin {\n constructor(uiContext: EditorUIContext) {\n super({\n key,\n state: {\n init: (_config: { [key: string]: any }, state: EditorState) => {\n return imagePreviewDecorations(state, uiContext);\n },\n apply: (tr: Transaction, old: DecorationSet, oldState: EditorState, newState: EditorState) => {\n const transactions = [tr];\n\n // doc didn't change, return existing decorations\n if (!tr.docChanged) {\n return old.map(tr.mapping, tr.doc);\n\n // non-typing change, do a full rescan\n } else if (!transactionsAreTypingChange(transactions)) {\n return imagePreviewDecorations(newState, uiContext);\n\n // change that affects a rmd chunk block, do a full rescan\n } else if (transactionsHaveChange(transactions, oldState, newState, isRmdChunkNode)) {\n return imagePreviewDecorations(newState, uiContext);\n }\n\n // otherwise return the existing set (mapped)\n else {\n return old.map(tr.mapping, tr.doc);\n }\n },\n },\n props: {\n decorations: (state: EditorState) => {\n return key.getState(state);\n },\n },\n });\n }\n}\n\nfunction imagePreviewDecorations(state: EditorState, uiContext: EditorUIContext) {\n // find all rmd code chunks with knitr::include_graphics\n const decorations: Decoration[] = [];\n findChildrenByType(state.doc, state.schema.nodes.rmd_chunk).forEach(rmdChunk => {\n // look for a line with knitr::include_graphics\n const match = rmdChunk.node.textContent.match(/^(knitr::)?include_graphics\\((['\"])([^\\2]+)\\2/m);\n if (match) {\n // see if we can also find an out.width on the first line\n let width = '';\n const firstLine = rmdChunk.node.textContent.split(/\\r?\\n/)[0];\n const widthMatch = firstLine.match(/^\\s*\\{[r|R][, ].*out\\.width\\s*=\\s*([^ ,$]+).*}/);\n if (widthMatch) {\n width = stripQuotes(widthMatch[1].trim());\n // revert if they are using out.width = NULL\n if (width === 'NULL') {\n width = '';\n }\n }\n\n // see if we can find fig.align='center'\n const alignCenter = !!firstLine.match(/^\\s*\\{[r|R][, ].*fig\\.align\\s*=\\s*['\"]?center['\"]?/);\n\n const imagePath = match[3];\n const decoration = Decoration.widget(\n rmdChunk.pos + rmdChunk.node.nodeSize,\n (view: EditorView, getPos: () => number) => {\n const container = window.document.createElement('div');\n container.style.marginTop = '-1.5em'; // to bridge back to the codemirror block\n // which has a margin-block-end of 1em\n container.classList.add('pm-image-preview');\n container.classList.add('pm-block-border-color');\n const img = window.document.createElement('img');\n if (alignCenter) {\n img.classList.add('pm-image-centered');\n }\n\n img.src = uiContext.mapResourceToURL(imagePath);\n\n // watch for changes to the file\n const unsubscribe = uiContext.watchResource(imagePath, () => {\n img.src = uiContext.mapResourceToURL(imagePath);\n });\n onElementRemoved(view.dom, container, unsubscribe);\n\n if (width) {\n img.setAttribute('width', width);\n }\n img.draggable = false;\n img.onload = () => {\n img.alt = '';\n };\n img.onerror = () => {\n img.alt = ` ${uiContext.translateText('Image not found')}: ${imagePath}`;\n };\n // select rmd_chunk for clicks on the preview image\n img.onclick = () => {\n const tr = view.state.tr;\n setTextSelection(getPos() - 1)(tr);\n view.dispatch(tr);\n };\n container.append(img);\n return container;\n },\n { key: imagePath + 'width:' + width + 'center:' + alignCenter },\n );\n decorations.push(decoration);\n }\n });\n\n // return decorations\n return DecorationSet.create(state.doc, decorations);\n}\n\nfunction isRmdChunkNode(node: ProsemirrorNode) {\n return node.type === node.type.schema.nodes.rmd_chunk;\n}\n","/*\n * rmd_chunk-capsule.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\n\nimport { PandocBlockCapsule, parsePandocBlockCapsule, blockCapsuleSourceWithoutPrefix } from '../../api/pandoc_capsule';\nimport { PandocToken, PandocTokenType, ProsemirrorWriter } from '../../api/pandoc';\nimport { pandocAttrReadAST, kCodeBlockAttr, PandocAttr, kCodeBlockText } from '../../api/pandoc_attr';\nimport { uuidv4 } from '../../api/util';\n\nexport function rmdChunkBlockCapsuleFilter() {\n // (note that this constant is also defined in VisualMode.java)\n const kBlockCapsuleType = 'F3175F2A-E8A0-4436-BE12-B33925B6D220'.toLowerCase();\n const kBlockCapsuleTextRegEx = new RegExp('```' + kBlockCapsuleType + '\\\\n[ \\\\t>]*([^`]+)\\\\n[ \\\\t>]*```', 'g');\n\n return {\n type: kBlockCapsuleType,\n\n match: /^([\\t >]*)(```+\\s*\\{[a-zA-Z0-9_]+(?: *[ ,].*?)?\\}[ \\t]*\\n(?:[\\t >]*```+|[\\W\\w]*?\\n[\\t >]*```+))([ \\t]*)$/gm,\n\n // textually enclose the capsule so that pandoc parses it as the type of block we want it to\n // (in this case a code block). we use the capsule prefix here to make sure that the code block's\n // content and end backticks match the indentation level of the first line correctly\n enclose: (capsuleText: string, capsule: PandocBlockCapsule) =>\n '```' + kBlockCapsuleType + '\\n' + capsule.prefix + capsuleText + '\\n' + capsule.prefix + '```',\n // look for one of our block capsules within pandoc ast text (e.g. a code or raw block)\n // and if we find it, parse and return the original source code\n handleText: (text: string, tok: PandocToken) => {\n // if this is a code block then we need to strip the prefix\n const stripPrefix = tok.t === PandocTokenType.CodeBlock;\n\n return text.replace(kBlockCapsuleTextRegEx, (_match, p1) => {\n const capsuleText = p1;\n const capsule = parsePandocBlockCapsule(capsuleText);\n if (stripPrefix) {\n return blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\n } else {\n return capsule.source;\n }\n });\n },\n\n // look for a block capsule of our type within a code block (indicated by the\n // presence of a special css class)\n handleToken: (tok: PandocToken) => {\n if (tok.t === PandocTokenType.CodeBlock) {\n const attr = pandocAttrReadAST(tok, kCodeBlockAttr) as PandocAttr;\n if (attr.classes.includes(kBlockCapsuleType)) {\n return tok.c[kCodeBlockText];\n }\n }\n return null;\n },\n\n // write the node as an rmd_chunk, being careful to remove the backticks\n // preserved as part of the source, and striping out the base indentation\n // level implied by the prefix\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\n // open node\n writer.openNode(schema.nodes.rmd_chunk, {\n navigation_id: uuidv4(),\n md_index: capsule.position,\n });\n\n // source still has leading and trailing backticks, remove them\n const source = capsule.source.replace(/^```+/, '').replace(/\\n[\\t >]*```+$/, '');\n\n // write the lines w/o the source-level prefix\n writer.writeText(blockCapsuleSourceWithoutPrefix(source, capsule.prefix));\n\n // all done\n writer.closeNode();\n },\n };\n}\n","/*\n * div.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, DOMOutputSpec, ResolvedPos } from 'prosemirror-model';\nimport { EditorState, Transaction, Plugin, PluginKey, NodeSelection, TextSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { findParentNodeOfType, ContentNodeWithPos } from 'prosemirror-utils';\nimport { wrapIn } from 'prosemirror-commands';\nimport { liftTarget } from 'prosemirror-transform';\n\nimport { ExtensionContext, Extension } from '../api/extension';\nimport {\n pandocAttrSpec,\n pandocAttrToDomAttr,\n pandocAttrParseDom,\n pandocAttrReadAST,\n pandocAttrFrom,\n pandocAttrAvailable,\n PandocAttr,\n} from '../api/pandoc_attr';\nimport { PandocOutput, PandocTokenType, PandocToken } from '../api/pandoc';\nimport { ProsemirrorCommand, EditorCommandId, toggleWrap } from '../api/command';\nimport { EditorUI } from '../api/ui';\nimport { OmniInsertGroup, OmniInsert } from '../api/omni_insert';\nimport { markIsActive } from '../api/mark';\nimport { BaseKey } from '../api/basekeys';\nimport { attrInputToProps } from '../api/ui-dialogs';\n\nimport './div-styles.css';\n\nconst DIV_ATTR = 0;\nconst DIV_CHILDREN = 1;\n\nconst extension = (context: ExtensionContext) : Extension | null => {\n const { pandocExtensions, ui } = context;\n\n if (!pandocExtensions.fenced_divs && !pandocExtensions.native_divs) {\n return null;\n }\n\n return {\n nodes: [\n {\n name: 'div',\n spec: {\n attrs: {\n ...pandocAttrSpec,\n },\n defining: true,\n content: 'block+',\n group: 'block list_item_block',\n parseDOM: [\n {\n tag: 'div[data-div=\"1\"]',\n getAttrs(dom: Node | string) {\n const attrs: {} = { 'data-div': 1 };\n return {\n ...attrs,\n ...pandocAttrParseDom(dom as Element, attrs),\n };\n },\n },\n ],\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\n const attr = {\n 'data-div': '1',\n ...pandocAttrToDomAttr({\n ...node.attrs,\n classes: [...node.attrs.classes, 'pm-div', 'pm-div-background-color'],\n }),\n };\n return ['div', attr, 0];\n },\n },\n\n attr_edit: () => ({\n type: (schema: Schema) => schema.nodes.div,\n editFn: () => divCommand(ui, true),\n offset: {\n top: 3,\n right: 0\n }\n }),\n\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Div,\n block: 'div',\n getAttrs: (tok: PandocToken) => ({\n ...pandocAttrReadAST(tok, DIV_ATTR),\n }),\n getChildren: (tok: PandocToken) => tok.c[DIV_CHILDREN],\n },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.Div, () => {\n output.writeAttr(node.attrs.id, node.attrs.classes, node.attrs.keyvalue);\n output.writeArray(() => {\n output.writeNodes(node);\n });\n });\n },\n },\n },\n ],\n\n baseKeys: () => {\n return [\n { key: BaseKey.Enter, command: divInputRuleEnter() },\n ];\n },\n\n commands: () => {\n return [\n // turn current block into a div\n new DivCommand(EditorCommandId.Div, ui, true),\n\n // insert a div\n new DivCommand(EditorCommandId.InsertDiv, ui, false, {\n name: ui.context.translateText('Div...'),\n description: ui.context.translateText('Block containing other content'),\n group: OmniInsertGroup.Blocks,\n priority: 1,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.div_dark! : ui.images.omni_insert?.div!),\n }),\n ];\n },\n\n plugins: (schema: Schema) => {\n return [\n new Plugin({\n key: new PluginKey(\"div-selection\"),\n appendTransaction: (_transactions: Transaction[], _oldState: EditorState, newState: EditorState) => {\n if (newState.selection.empty) {\n return;\n }\n const divNode = findParentNodeOfType(schema.nodes.div)(newState.selection);\n if (divNode && \n (newState.selection.anchor === divNode.start + 1) &&\n newState.selection.head === divNode.pos + divNode.node.nodeSize - 2) {\n const tr = newState.tr;\n const sel = TextSelection.create(tr.doc, divNode.start, divNode.start + divNode.node.nodeSize - 1);\n tr.setSelection(sel);\n return tr;\n }\n }\n }),\n ];\n },\n };\n};\n\n\nfunction divCommand(ui: EditorUI, allowEdit: boolean) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // two different modes:\n // - editing attributes of an existing div\n // - wrapping (a la blockquote)\n const schema = state.schema;\n const div = allowEdit ? findParentNodeOfType(schema.nodes.div)(state.selection) : undefined;\n if (!div && !toggleWrap(schema.nodes.div)(state)) {\n return false;\n }\n\n async function asyncEditDiv() {\n if (dispatch) {\n // selecting nothing or entire div means edit, selecting text outside of a\n // div or a subset of an existing div means create new one\n const editMode = div && (state.selection.empty || isFullDivSelection(div, state));\n if (editMode) {\n await editDiv(ui, state, dispatch, div!);\n } else {\n await createDiv(ui, state, dispatch);\n }\n if (view) {\n view.focus();\n }\n }\n }\n asyncEditDiv();\n\n return true;\n };\n}\n\nclass DivCommand extends ProsemirrorCommand {\n constructor(id: EditorCommandId, ui: EditorUI, allowEdit: boolean, omniInsert?: OmniInsert) {\n super(id, [], divCommand(ui, allowEdit), omniInsert);\n }\n}\n\nasync function editDiv(ui: EditorUI, state: EditorState, dispatch: (tr: Transaction) => void, div: ContentNodeWithPos) {\n const attr = pandocAttrFrom(div.node.attrs);\n const result = await ui.dialogs.editDiv(attr, pandocAttrAvailable(attr));\n if (result) {\n const tr = state.tr;\n if (result.action === 'edit') {\n tr.setNodeMarkup(div.pos, div.node.type, result.attr);\n dispatch(tr);\n } else if (result.action === 'remove') {\n const fromPos = tr.doc.resolve(div.pos + 1);\n const toPos = tr.doc.resolve(div.pos + div.node.nodeSize - 1);\n const nodeRange = fromPos.blockRange(toPos);\n if (nodeRange) {\n const targetLiftDepth = liftTarget(nodeRange);\n if (targetLiftDepth || targetLiftDepth === 0) {\n tr.lift(nodeRange, targetLiftDepth);\n }\n }\n dispatch(tr);\n }\n }\n}\n\nasync function createDiv(ui: EditorUI, state: EditorState, dispatch: (tr: Transaction) => void) {\n const result = await ui.dialogs.editDiv({}, false);\n if (result) {\n wrapIn(state.schema.nodes.div)(state, (tr: Transaction) => {\n const div = findParentNodeOfType(state.schema.nodes.div)(tr.selection)!;\n tr.setNodeMarkup(div.pos, div.node.type, result.attr);\n dispatch(tr);\n });\n }\n}\n\nfunction isFullDivSelection(div: ContentNodeWithPos, state: EditorState) {\n const divStart = div.pos;\n const divEnd = div.pos + div.node.nodeSize;\n return state.selection.from - 2 === divStart && state.selection.to + 2 === divEnd;\n}\n\nfunction divInputRuleEnter() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // see if the parent consist of a pending code block input rule\n const schema = state.schema;\n\n // selection must be empty\n if (!state.selection.empty) {\n return false;\n }\n\n // full text of parent must meet the pattern\n // eslint-disable-next-line no-useless-escape\n const match = state.selection.$head.parent.textContent.match(/^:{3,}(\\s+({.*?}|\\S+)?[\\s:]*)?$/);\n if (!match) {\n return false;\n }\n\n // no inline code marks\n if (markIsActive(state, schema.marks.code)) {\n return false;\n }\n\n // must be able to perform the replacement\n if (!canApplyDivInputRule(state)) {\n return false;\n }\n\n // execute\n if (dispatch) {\n // if it's just followed by whitespace then don't do it\n if (match[1] && match[1].trim().length === 0) {\n return false;\n }\n\n // parse attributes\n const attrs: PandocAttr = pandocAttrFrom({});\n const attribMatch = match[2];\n if (attribMatch) {\n const bracesMatch = attribMatch.match(/^{(.*?)}$/);\n if (bracesMatch) {\n const pandocAttrsText = bracesMatch[1];\n const pandocAttrsMatch = pandocAttrsText.match(/^\\s*(#\\S+)?\\s*((?:\\.\\S+\\s*)*)?(.*)?$/);\n if (pandocAttrsMatch) {\n const attrProps = attrInputToProps({ id: pandocAttrsMatch[1], classes: pandocAttrsMatch[2] });\n attrs.id = attrProps.id || '';\n attrs.classes = attrProps.classes || [];\n }\n } else {\n attrs.classes = [attribMatch];\n }\n }\n\n wrapIn(state.schema.nodes.div)(state, (tr: Transaction) => {\n const div = findParentNodeOfType(state.schema.nodes.div)(tr.selection)!;\n tr.setNodeMarkup(div.pos, div.node.type, attrs);\n const $head = tr.selection.$head;\n const start = $head.start();\n const end = start + $head.parent.textContent.length;\n tr.deleteRange(start, end);\n dispatch(tr);\n });\n }\n\n return true;\n };\n}\n\nfunction canReplaceNodeWithDiv(schema: Schema, $pos: ResolvedPos) {\n return $pos.node(-1).canReplaceWith($pos.index(-1), $pos.indexAfter(-1), schema.nodes.div);\n}\n\nfunction canApplyDivInputRule(state: EditorState) {\n const schema = state.schema;\n const { $head } = state.selection;\n return canReplaceNodeWithDiv(schema, $head);\n}\n\nexport default extension;\n","/*\n * line_block.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema, DOMOutputSpec } from 'prosemirror-model';\n\nimport { ExtensionContext } from '../api/extension';\nimport { PandocOutput, PandocTokenType, PandocToken } from '../api/pandoc';\n\nimport { EditorCommandId, WrapCommand } from '../api/command';\nimport { OmniInsertGroup } from '../api/omni_insert';\n\nimport './line_block-styles.css';\n\nconst extension = (context: ExtensionContext) => {\n const { pandocExtensions, ui } = context;\n\n if (!pandocExtensions.line_blocks) {\n return null;\n }\n\n return {\n nodes: [\n {\n name: 'line_block',\n spec: {\n content: 'paragraph+',\n group: 'block',\n defining: true,\n parseDOM: [\n {\n tag: \"div[class*='line-block']\",\n },\n ],\n toDOM(): DOMOutputSpec {\n return ['div', { class: 'line-block pm-line-block pm-block-border-color pm-margin-bordered' }, 0];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.LineBlock,\n block: 'line_block',\n getChildren: (tok: PandocToken) => {\n return tok.c.map((line: PandocToken[]) => ({ t: PandocTokenType.Para, c: line }));\n },\n },\n ],\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.withOption('writeSpaces', false, () => {\n output.writeToken(PandocTokenType.LineBlock, () => {\n node.forEach(line => {\n output.writeArray(() => {\n output.writeInlines(line.content);\n });\n });\n });\n });\n },\n },\n },\n ],\n commands: (schema: Schema) => {\n return [\n new WrapCommand(\n EditorCommandId.LineBlock,\n [],\n schema.nodes.line_block,\n {},\n {\n name: ui.context.translateText('Line Block'),\n description: ui.context.translateText('Preserve leading spaces and line breaks'),\n group: OmniInsertGroup.Blocks,\n priority: 2,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.line_block_dark! : ui.images.omni_insert?.line_block!,\n },\n ),\n ];\n },\n };\n};\n\nexport default extension;\n","/*\n * table.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\nimport { Transaction } from 'prosemirror-state';\nimport { Transform } from 'prosemirror-transform';\nimport { tableEditing, columnResizing, goToNextCell, deleteColumn, deleteRow } from 'prosemirror-tables';\n\nimport { findChildrenByType } from 'prosemirror-utils';\n\nimport { EditorUI } from '../../api/ui';\nimport { Extension, ExtensionContext } from '../../api/extension';\nimport { PandocExtensions } from '../../api/pandoc';\nimport { BaseKey } from '../../api/basekeys';\nimport { ProsemirrorCommand, EditorCommandId, exitNode } from '../../api/command';\nimport { TableCapabilities } from '../../api/table';\nimport { trTransform } from '../../api/transaction';\nimport { PandocCapabilities } from '../../api/pandoc_capabilities';\n\nimport {\n insertTable,\n deleteTable,\n deleteTableCaption,\n addRows,\n addColumns,\n TableColumnAlignmentCommand,\n TableRowCommand,\n TableColumnCommand,\n TableToggleHeaderCommand,\n TableToggleCaptionCommand,\n CssAlignment,\n insertTableOmniInsert,\n} from './table-commands';\n\nimport {\n tableContainerNode,\n tableNode,\n tableCaptionNode,\n tableCellNode,\n tableHeaderNode,\n tableRowNode,\n} from './table-nodes';\n\nimport { fixupTableWidths } from './table-columns';\nimport { TableContextMenuPlugin } from './table-contextmenu';\nimport { tablePaste } from './table-paste';\n\nimport 'prosemirror-tables/style/tables.css';\nimport './table-styles.css';\n\nconst extension = (context: ExtensionContext): Extension | null => {\n const { pandocExtensions, ui } = context;\n\n // not enabled if there are no tables enabled\n if (\n !pandocExtensions.grid_tables &&\n !pandocExtensions.pipe_tables &&\n !pandocExtensions.simple_tables &&\n !pandocExtensions.multiline_tables\n ) {\n return null;\n }\n\n // define table capabilities\n const capabilities: TableCapabilities = {\n captions: pandocExtensions.table_captions,\n headerOptional: pandocExtensions.grid_tables,\n multiline: pandocExtensions.multiline_tables || pandocExtensions.grid_tables,\n };\n\n return {\n nodes: [\n tableContainerNode,\n tableNode,\n tableCaptionNode,\n tableCellNode(pandocExtensions.grid_tables),\n tableHeaderNode,\n tableRowNode,\n ],\n\n commands: (_schema: Schema) => {\n const commands = [\n new ProsemirrorCommand(\n EditorCommandId.TableInsertTable,\n ['Alt-Mod-t'],\n insertTable(capabilities, ui),\n insertTableOmniInsert(ui),\n ),\n new ProsemirrorCommand(EditorCommandId.TableNextCell, ['Tab'], goToNextCell(1)),\n new ProsemirrorCommand(EditorCommandId.TablePreviousCell, ['Shift-Tab'], goToNextCell(-1)),\n new TableColumnCommand(EditorCommandId.TableAddColumnAfter, [], addColumns(true)),\n new TableColumnCommand(EditorCommandId.TableAddColumnBefore, [], addColumns(false)),\n new TableColumnCommand(EditorCommandId.TableDeleteColumn, [], deleteColumn),\n new TableRowCommand(EditorCommandId.TableAddRowAfter, [], addRows(true)),\n new TableRowCommand(EditorCommandId.TableAddRowBefore, [], addRows(false)),\n new TableRowCommand(EditorCommandId.TableDeleteRow, [], deleteRow),\n new ProsemirrorCommand(EditorCommandId.TableDeleteTable, [], deleteTable()),\n new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnLeft, CssAlignment.Left),\n new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnRight, CssAlignment.Right),\n new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnCenter, CssAlignment.Center),\n new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnDefault, null),\n ];\n if (capabilities.captions) {\n commands.push(new TableToggleCaptionCommand());\n }\n if (capabilities.headerOptional) {\n commands.push(new TableToggleHeaderCommand());\n }\n return commands;\n },\n\n plugins: (schema: Schema) => {\n return [\n columnResizing({\n handleWidth: 5,\n }),\n tableEditing(),\n tablePaste(),\n new TableContextMenuPlugin(schema, ui),\n ];\n },\n\n baseKeys: (schema: Schema) => {\n // core keys\n const keys = [\n { key: BaseKey.Backspace, command: deleteTableCaption() },\n { key: BaseKey.Enter, command: exitNode(schema.nodes.table_caption, -2, false) },\n { key: BaseKey.Tab, command: goToNextCell(1) },\n { key: BaseKey.ShiftTab, command: goToNextCell(-1) },\n ];\n\n // turn enter key variations into tab if we don't support multi-line\n if (!capabilities.multiline) {\n keys.push({ key: BaseKey.Enter, command: goToNextCell(1) });\n keys.push({ key: BaseKey.ShiftEnter, command: goToNextCell(-11) });\n keys.push({ key: BaseKey.ModEnter, command: goToNextCell(1) });\n }\n\n return keys;\n },\n\n fixups: (_schema: Schema, view: EditorView) => {\n return [fixupTableWidths(view)];\n },\n\n appendTransaction: (_schema: Schema) => {\n return [\n {\n name: 'table-repair',\n nodeFilter: node => node.type === node.type.schema.nodes.table,\n append: (tr: Transaction) => {\n trTransform(tr, tableRepairTransform);\n },\n },\n ];\n },\n };\n};\n\nfunction tableRepairTransform(tr: Transform) {\n const schema = tr.doc.type.schema;\n const tables = findChildrenByType(tr.doc, schema.nodes.table);\n tables.forEach(table => {\n // map the position\n const pos = tr.mapping.map(table.pos);\n\n // get containing node (pos is right before the table)\n const containingNode = tr.doc.resolve(pos).node();\n\n // table with no container\n if (containingNode.type !== schema.nodes.table_container) {\n // add the container\n const caption = schema.nodes.table_caption.createAndFill({ inactive: true }, undefined)!;\n const container = schema.nodes.table_container.createAndFill({}, [table.node, caption])!;\n tr.replaceWith(pos, pos + table.node.nodeSize, container);\n }\n\n // table with no content (possible w/ half caption leftover)\n else if (table.node.firstChild && table.node.firstChild.childCount === 0) {\n // delete the table (and container if necessary)\n const hasContainer = containingNode.type === schema.nodes.table_container;\n if (hasContainer) {\n tr.deleteRange(pos - 1, pos - 1 + containingNode.nodeSize);\n } else {\n tr.deleteRange(pos, table.node.nodeSize);\n }\n }\n });\n}\n\nexport default extension;\n","/*\n * table-commands.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorView } from 'prosemirror-view';\nimport { Node as ProsemirrorNode, Fragment } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\nimport { findParentNodeOfType, setTextSelection, findChildrenByType } from 'prosemirror-utils';\nimport {\n isInTable,\n Rect,\n TableMap,\n selectionCell,\n CellSelection,\n toggleHeader,\n addRow,\n addColumn,\n} from 'prosemirror-tables';\n\nimport { EditorUI } from '../../api/ui';\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { canInsertNode } from '../../api/node';\nimport { TableCapabilities } from '../../api/table';\nimport { OmniInsertGroup } from '../../api/omni_insert';\n\nexport function insertTable(capabilities: TableCapabilities, ui: EditorUI) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const schema = state.schema;\n\n // can we insert?\n if (!canInsertNode(state, schema.nodes.table_container)) {\n return false;\n }\n\n // is the selection inside a table caption? if it is then we can't insert\n // as it will \"split\" the table_container in such a way that an invalid\n // table will be created\n if (findParentNodeOfType(schema.nodes.table_caption)(state.selection)) {\n return false;\n }\n\n async function asyncInsertTable() {\n if (dispatch) {\n const result = await ui.dialogs.insertTable(capabilities);\n if (result) {\n // create cells\n const numRows = result.rows + (result.header ? 1 : 0);\n const rows: ProsemirrorNode[] = [];\n for (let r = 0; r < numRows; r++) {\n const cells: ProsemirrorNode[] = [];\n const cellType = r === 0 && result.header ? schema.nodes.table_header : schema.nodes.table_cell;\n for (let c = 0; c < result.cols; c++) {\n const content =\n cellType === schema.nodes.table_header\n ? schema.text(`${ui.context.translateText('Col')}${c + 1}`)\n : Fragment.empty;\n cells.push(cellType.createAndFill({}, schema.nodes.paragraph.createAndFill({}, content)!)!);\n }\n rows.push(schema.nodes.table_row.createAndFill({}, cells)!);\n }\n\n // create table\n const table = schema.nodes.table.createAndFill({}, rows)!;\n const tableCaption = schema.nodes.table_caption.createAndFill(\n { inactive: !result.caption },\n result.caption ? schema.text(result.caption) : undefined,\n )!;\n const tableContainer = schema.nodes.table_container.createAndFill({}, [table, tableCaption])!;\n\n // insert\n const tr = state.tr;\n tr.replaceSelectionWith(tableContainer);\n\n // select first cell\n const selectionPos = tr.mapping.map(state.selection.from, -1);\n setTextSelection(selectionPos)(tr).scrollIntoView();\n\n // dispatch & focus\n dispatch(tr);\n }\n if (view) {\n view.focus();\n }\n }\n }\n asyncInsertTable();\n\n return true;\n };\n}\n\nexport function insertTableOmniInsert(ui: EditorUI) {\n return {\n name: ui.context.translateText('Table'),\n description: ui.context.translateText('Content in rows and columns'),\n group: OmniInsertGroup.Lists,\n priority: 1,\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert?.table_dark! : ui.images.omni_insert?.table!),\n };\n}\n\nexport function deleteTable() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n const schema = state.schema;\n const container = findParentNodeOfType(schema.nodes.table_container)(state.selection);\n if (container) {\n if (dispatch) {\n const tr = state.tr;\n tr.delete(container.pos, container.pos + container.node.nodeSize);\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n return false;\n };\n}\n\nexport function deleteTableCaption() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // must be a selection within an empty table caption\n const schema = state.schema;\n const { $head } = state.selection;\n if ($head.parent.type !== schema.nodes.table_caption || $head.parent.childCount !== 0) {\n return false;\n }\n\n if (dispatch) {\n // set the caption to inactive\n const tr = state.tr;\n const caption = $head.parent;\n tr.setNodeMarkup($head.pos - 1, schema.nodes.table_caption, {\n ...caption.attrs,\n inactive: true,\n });\n setTextSelection($head.pos - 1, -1)(tr);\n dispatch(tr);\n }\n\n return true;\n };\n}\n\nexport function addColumns(after: boolean) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (!isInTable(state)) {\n return false;\n }\n if (dispatch) {\n let tr = state.tr;\n const rect = selectedRect(state);\n const columns = rect.right - rect.left;\n for (let i = 0; i < columns; i++) {\n tr = addColumn(tr, rect, after ? rect.right : rect.left);\n }\n dispatch(tr);\n }\n return true;\n };\n}\n\nexport function addRows(after: boolean) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (!isInTable(state)) {\n return false;\n }\n if (dispatch) {\n // add the rows\n let tr = state.tr;\n const rect = selectedRect(state);\n const rows = rect.bottom - rect.top;\n for (let i = 0; i < rows; i++) {\n tr = addRow(tr, rect, after ? rect.bottom : rect.top);\n }\n\n // sync column alignments for table\n const table = findParentNodeOfType(state.schema.nodes.table)(tr.selection);\n if (table) {\n const alignments = new Array(rect.map.width);\n table.node.forEach((rowNode, rowOffset, rowIndex) => {\n rowNode.forEach((cellNode, cellOffset, colIndex) => {\n const cellPos = table.pos + 1 + rowOffset + 1 + cellOffset;\n if (rowIndex === 0) {\n const cell = tr.doc.nodeAt(cellPos);\n alignments[colIndex] = cell?.attrs.align || null;\n } else {\n tr.setNodeMarkup(cellPos, cellNode.type, {\n ...cellNode.attrs,\n align: alignments[colIndex] || null,\n });\n }\n });\n });\n }\n\n dispatch(tr);\n }\n return true;\n };\n}\n\nexport class TableToggleHeaderCommand extends ProsemirrorCommand {\n constructor() {\n super(EditorCommandId.TableToggleHeader, [], toggleHeader('row'));\n }\n\n public isActive(state: EditorState): boolean {\n if (!isInTable(state)) {\n return false;\n }\n const { table } = selectedRect(state);\n const firstCell = table.firstChild!.firstChild!;\n return firstCell.type === state.schema.nodes.table_header;\n }\n}\n\nexport class TableToggleCaptionCommand extends ProsemirrorCommand {\n constructor() {\n super(\n EditorCommandId.TableToggleCaption,\n [],\n (state: EditorState, dispatch?: (tr: Transaction, view?: EditorView) => void) => {\n if (!isInTable(state)) {\n return false;\n }\n const caption = this.tableCaptionNode(state);\n if (!caption) {\n return false;\n }\n\n if (dispatch) {\n const focus = caption.node.attrs.inactive;\n const tr = state.tr;\n tr.setNodeMarkup(caption.pos + 1, state.schema.nodes.table_caption, {\n ...caption.node.attrs,\n inactive: !caption.node.attrs.inactive,\n });\n if (focus) {\n setTextSelection(caption.pos + 1)(tr).scrollIntoView();\n }\n dispatch(tr);\n }\n\n return true;\n },\n );\n }\n\n public isActive(state: EditorState): boolean {\n if (!isInTable(state)) {\n return false;\n }\n\n const caption = this.tableCaptionNode(state);\n if (!caption) {\n return false;\n }\n\n return !caption.node.attrs.inactive;\n }\n\n private tableCaptionNode(state: EditorState) {\n const container = findParentNodeOfType(state.schema.nodes.table_container)(state.selection);\n if (container) {\n const caption = findChildrenByType(container.node, state.schema.nodes.table_caption);\n return {\n node: caption[0].node,\n pos: container.pos + caption[0].pos,\n };\n } else {\n return undefined;\n }\n }\n}\n\nexport enum CssAlignment {\n Left = 'left',\n Right = 'right',\n Center = 'center',\n}\n\nexport class TableRowCommand extends ProsemirrorCommand {\n public plural(state: EditorState) {\n if (!isInTable(state)) {\n return 1;\n }\n\n const rect = selectedRect(state);\n return rect.bottom - rect.top;\n }\n}\n\nexport class TableColumnCommand extends ProsemirrorCommand {\n public plural(state: EditorState) {\n if (!isInTable(state)) {\n return 1;\n }\n\n const rect = selectedRect(state);\n return rect.right - rect.left;\n }\n}\n\nexport class TableColumnAlignmentCommand extends ProsemirrorCommand {\n private readonly align: CssAlignment | null;\n\n constructor(id: EditorCommandId, align: CssAlignment | null) {\n super(id, [], (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n if (!isInTable(state)) {\n return false;\n }\n\n if (dispatch) {\n const { table, tableStart, left, right } = selectedRect(state);\n const tr = state.tr;\n table.forEach((rowNode, rowOffset) => {\n rowNode.forEach((cellNode, cellOffset, i) => {\n if (i >= left && i < right) {\n const cellPos = tableStart + 1 + rowOffset + cellOffset;\n tr.setNodeMarkup(cellPos, cellNode.type, {\n ...cellNode.attrs,\n align,\n });\n }\n });\n });\n dispatch(tr);\n }\n\n return true;\n });\n this.align = align;\n }\n\n public isActive(state: EditorState): boolean {\n if (!isInTable(state)) {\n return false;\n }\n const { table, top, left } = selectedRect(state);\n const cell = table.child(top).child(left);\n return cell.attrs.align === this.align;\n }\n}\n\n// from: https://github.com/ProseMirror/prosemirror-tables/blob/master/src/commands.js\n\ninterface SelectedRect extends Rect {\n tableStart: number;\n map: TableMap;\n table: ProsemirrorNode;\n}\n\nfunction selectedRect(state: EditorState): SelectedRect {\n const sel = state.selection;\n const $pos = selectionCell(state)!;\n const table = $pos.node(-1);\n const tableStart = $pos.start(-1);\n const map = TableMap.get(table);\n let rect: Rect;\n if (sel instanceof CellSelection) {\n rect = map.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart);\n } else {\n rect = map.findCell($pos.pos - tableStart);\n }\n return {\n ...rect,\n tableStart,\n map,\n table,\n };\n}\n","/*\n * table-nodes.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { tableNodes } from 'prosemirror-tables';\nimport { Node as ProsemirrorNode, DOMOutputSpec } from 'prosemirror-model';\n\nimport { PandocTokenType } from '../../api/pandoc';\n\nimport {\n readPandocTable,\n writePandocTableContainer,\n writePandocTable,\n writePandocTableCaption,\n writePandocTableNodes,\n writePandocTableHeaderNodes,\n} from './table-pandoc';\nimport { tableColumnWidths } from './table-columns';\nimport { tableBlockCapsuleFilter } from './table-capsule';\n\nexport const kDefaultCellClasses = 'pm-table-cell pm-block-border-color';\n\nconst nodes = tableNodes({\n tableGroup: 'block',\n cellContent: 'block+',\n cellAttributes: {\n align: {\n default: null,\n getFromDOM(dom: Element) {\n return (dom as HTMLElement).style.textAlign || null;\n },\n setDOMAttr(value, attrs) {\n if (value) {\n attrs.style = (attrs.style || '') + `text-align: ${value};`;\n }\n },\n },\n className: {\n default: kDefaultCellClasses,\n getFromDOM(dom: Element) {\n return (dom as HTMLElement).className;\n },\n setDOMAttr(value, attrs) {\n attrs.class = kDefaultCellClasses;\n },\n },\n },\n});\n\nexport const tableContainerNode = {\n name: 'table_container',\n spec: {\n content: 'table table_caption',\n group: 'block',\n parseDOM: [{ tag: \"div[class*='table-container']\" }],\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\n return ['div', { class: 'table-container pm-table-container' }, 0];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.Table,\n handler: readPandocTable,\n },\n ],\n writer: writePandocTableContainer,\n blockCapsuleFilter: tableBlockCapsuleFilter(),\n },\n};\n\nexport const tableNode = {\n name: 'table',\n spec: {\n ...nodes.table,\n attrs: {\n ...nodes.table.attrs,\n width: { default: null },\n colpercents: { default: null },\n },\n parseDOM: [\n {\n tag: 'table',\n getAttrs: (dom: Node | string) => {\n const el = dom as HTMLElement;\n\n // shared colpercents\n let colpercents: number[] | null = null;\n\n // if we have a colgroup w/ widths then read percents from there\n // \n const colgroup = el.getElementsByTagName('colgroup');\n if (colgroup.length) {\n const cols = colgroup[0].childElementCount;\n colpercents = new Array(cols).fill(0);\n for (let i = 0; i < cols; i++) {\n const col = colgroup[0].children.item(i) as HTMLElement;\n if (col.style.width) {\n colpercents[i] = (parseInt(col.style.width, 10) || 0) / 100;\n }\n }\n if (colpercents.every(value => !!value)) {\n return {\n colpercents,\n };\n }\n }\n\n // otherwise read from data-colwidth\n let width: number | null = null;\n const rows = el.getElementsByTagName('tr');\n if (rows.length) {\n const firstRow = rows.item(0)!;\n const numCells = firstRow.cells.length;\n const colWidths = new Array(numCells).fill(0);\n for (let i = 0; i < numCells; i++) {\n const cell = firstRow.cells.item(i)!;\n const colWidth = cell.getAttribute('data-colwidth');\n if (colWidth) {\n colWidths[i] = Number(colWidth);\n }\n }\n if (colWidths.every(colWidth => colWidth > 0)) {\n width = colWidths.reduce((total, value) => total + value, 0);\n colpercents = colWidths.map(colWidth => colWidth / width!);\n }\n }\n\n return {\n width,\n colpercents,\n };\n },\n },\n ],\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\n const attrs: any = {};\n if (node.attrs.width) {\n attrs['data-width'] = node.attrs.width.toString();\n }\n attrs['data-colpercents'] = tableColumnWidths(node).join(',');\n return ['table', attrs, ['tbody', 0]];\n },\n },\n pandoc: {\n writer: writePandocTable,\n },\n};\n\nexport const tableCaptionNode = {\n name: 'table_caption',\n spec: {\n attrs: {\n inactive: { default: false },\n },\n content: 'inline*',\n parseDOM: [\n {\n tag: \"p[class*='table-caption']\",\n getAttrs(dom: Node | string) {\n return {\n inactive: (dom as HTMLElement).classList.contains('table-caption-inactive'),\n };\n },\n },\n ],\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\n const classes = ['table-caption', 'pm-node-caption'];\n if (node.attrs.inactive) {\n classes.push('table-caption-inactive');\n }\n return ['p', { class: classes.join(' ') }, 0];\n },\n },\n pandoc: {\n writer: writePandocTableCaption,\n },\n};\n\nexport const tableRowNode = {\n name: 'table_row',\n spec: nodes.table_row,\n pandoc: {\n writer: writePandocTableNodes,\n },\n};\n\nexport const tableCellNode = (blocks: boolean) => ({\n name: 'table_cell',\n spec: {\n ...nodes.table_cell,\n content: blocks ? 'block+' : 'paragraph',\n },\n pandoc: {\n writer: writePandocTableNodes,\n },\n});\n\nexport const tableHeaderNode = {\n name: 'table_header',\n spec: nodes.table_header,\n pandoc: {\n writer: writePandocTableHeaderNodes,\n },\n};\n","/*\n * table-pandoc.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, NodeType, Node as ProsemirrorNode, Fragment } from 'prosemirror-model';\n\nimport { ProsemirrorWriter, PandocToken, PandocTokenType, PandocOutput } from '../../api/pandoc';\n\nimport { CssAlignment } from './table-commands';\nimport { tableColumnAlignments, tableColumnWidths } from './table-columns';\n\n// attributes\nconst kTableAttr = 0;\n\n// caption\nconst kTableCaption = 1;\nconst kTableCaptionShort = 0; // [Inline]\nconst kTableCaptionFull = 1; // [Block]\n\n// columdefs\nconst kTableColSpec = 2;\nconst kTableColSpecAlign = 0;\nconst kTableColSpecWidth = 1;\n\n// table head\nconst kTableHead = 3;\nconst kTableHeadAttr = 0;\nconst kTableHeadRows = 1; // [Row]\n\n// table body\nconst kTableBody = 4;\nconst kTableBodyAttr = 0;\nconst kTableBodyRowHeadNumColumns = 1;\nconst kTableBodyRowHead = 2;\nconst kTableBodyRows = 3; // [Row]\n\n// table foot\nconst kTableFoot = 5;\nconst kTableFootAttr = 0;\nconst kTableFootRows = 1; // [Row]\n\n// table row\nconst kTableRowAttr = 0;\nconst kTableRowCells = 1; // [Cell]\n\n// table cell\nconst kTableCellAttr = 0;\nconst kTableCellAlignments = 1;\nconst kTableCellRowSpan = 2;\nconst kTableCellColSpan = 3;\nconst KTableCellContents = 4; // [Block]\n\n\nexport function readPandocTable(schema: Schema) {\n return (writer: ProsemirrorWriter, tok: PandocToken) => {\n // get alignments and columns widths\n const alignments = columnCssAlignments(tok);\n const colpercents = columnPercents(tok);\n\n // helper function to parse a table row\n const parseRow = (row: any[], cellType: NodeType) => {\n const cells: any[] = row[kTableRowCells];\n if (cells.length) {\n writer.openNode(schema.nodes.table_row, {});\n cells.forEach((cell: any[], i) => {\n writer.openNode(cellType, { align: alignments[i] });\n writer.writeTokens(cell[KTableCellContents]);\n writer.closeNode();\n });\n writer.closeNode();\n }\n };\n\n // open table container node\n writer.openNode(schema.nodes.table_container, {});\n\n // open table node\n writer.openNode(schema.nodes.table, { colpercents });\n\n // parse column headers\n const head = tok.c[kTableHead] as any[];\n const firstRow = head[kTableHeadRows][0];\n if (firstRow && firstRow[kTableRowCells].some((cell: any[]) => cell[KTableCellContents].length > 0)) {\n parseRow(firstRow, schema.nodes.table_header);\n }\n\n // parse table rows\n const body = tok.c[kTableBody][0] as any[];\n body[kTableBodyRows].forEach((row: any[]) => {\n parseRow(row, schema.nodes.table_cell);\n });\n\n // close table node\n writer.closeNode();\n\n // read caption\n const caption = tok.c[kTableCaption][kTableCaptionFull];\n const captionBlock: PandocToken[] = caption.length ? caption[0].c : [];\n writer.openNode(schema.nodes.table_caption, { inactive: captionBlock.length === 0 });\n writer.writeTokens(captionBlock);\n writer.closeNode();\n\n // close table container node\n writer.closeNode();\n };\n}\n\nexport function writePandocTableContainer(output: PandocOutput, node: ProsemirrorNode) {\n const caption = node.lastChild!;\n const table = node.firstChild!;\n\n output.writeToken(PandocTokenType.Table, () => {\n\n // write empty attributes\n output.writeAttr();\n\n // write caption\n output.writeNode(caption);\n\n // write table\n output.writeNode(table);\n });\n}\n\nexport function writePandocTable(output: PandocOutput, node: ProsemirrorNode) {\n const firstRow = node.firstChild!;\n\n // get alignments and column widths\n const alignments = tableColumnAlignments(node);\n const widths = tableColumnWidths(node);\n\n // write colspcs\n // TODO: Columns are coming out ColWidthDefault\n output.writeArray(() => {\n alignments.forEach((align, i) => {\n output.writeArray(() => {\n output.writeToken(align);\n if (widths[i] === 0) {\n output.writeToken(PandocTokenType.ColWidthDefault);\n } else {\n output.writeToken(PandocTokenType.ColWidth, widths[i]);\n }\n });\n });\n });\n\n\n // write header row if necessary\n const headerCut = firstRow.firstChild!.type === node.type.schema.nodes.table_header ? 1 : 0;\n output.writeArray(() => {\n output.writeAttr();\n output.writeArray(() => {\n writePandocTableRow(output, firstRow, headerCut === 0);\n });\n });\n\n // write table body\n output.writeArray(() => {\n output.writeArray(() => {\n output.writeAttr();\n output.write(0);\n output.writeArray(() => { /* */ });\n // write rows\n output.writeArray(() => {\n for (let i = headerCut; i < node.childCount; i++) {\n writePandocTableRow(output, node.content.child(i));\n }\n });\n });\n });\n\n // write table footer\n output.writeArray(() => {\n output.writeAttr();\n output.writeArray(() => { /* */ });\n });\n\n\n}\n\nexport function writePandocTableCaption(output: PandocOutput, node: ProsemirrorNode) {\n output.writeArray(() => {\n output.write(null);\n output.writeArray(() => {\n if (!node.attrs.inactive && node.childCount > 0) {\n output.writeToken(PandocTokenType.Plain, () => {\n output.writeInlines(node.content);\n });\n }\n });\n });\n}\n\nexport function writePandocTableNodes(output: PandocOutput, node: ProsemirrorNode) {\n output.writeArray(() => {\n output.writeNodes(node);\n });\n}\n\nexport function writePandocTableHeaderNodes(output: PandocOutput, node: ProsemirrorNode) {\n output.writeArray(() => {\n if (node.textContent.length > 0) {\n output.writeNodes(node);\n } else {\n // write a paragraph containing a space (this is an attempt to fix an issue where\n // empty headers don't get correct round-tripping)\n output.writeToken(PandocTokenType.Para, () => {\n output.writeRawMarkdown(' ');\n });\n }\n });\n}\n\nfunction writePandocTableRow(output: PandocOutput, node: ProsemirrorNode, empty = false) {\n output.writeArray(() => {\n output.writeAttr();\n output.writeArray(() => {\n node.forEach((cellNode) => {\n output.writeArray(() => {\n output.writeAttr();\n output.writeToken(PandocTokenType.AlignDefault);\n output.write(1);\n output.write(1);\n if (!empty) {\n output.writeNode(cellNode);\n } else {\n output.writeArray(() => {\n output.writeInlines(Fragment.empty);\n });\n }\n });\n });\n });\n });\n}\n\n\nfunction columnCssAlignments(tableToken: PandocToken) {\n return tableToken.c[kTableColSpec].map((spec: any) => {\n const alignment = spec[kTableColSpecAlign];\n switch (alignment.t) {\n case PandocTokenType.AlignLeft:\n return CssAlignment.Left;\n case PandocTokenType.AlignRight:\n return CssAlignment.Right;\n case PandocTokenType.AlignCenter:\n return CssAlignment.Center;\n case PandocTokenType.AlignDefault:\n default:\n return null;\n }\n });\n}\n\nfunction columnPercents(tableToken: PandocToken): number[] {\n return tableToken.c[kTableColSpec].map((spec: any) => {\n const width = spec[kTableColSpecWidth];\n return width.t === PandocTokenType.ColWidth ? width.c : 0;\n });\n}\n","/*\n * table-columns.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\nimport { Transaction } from 'prosemirror-state';\nimport { findChildrenByType } from 'prosemirror-utils';\n\nimport { PandocTokenType } from '../../api/pandoc';\n\nimport { CssAlignment } from './table-commands';\n\nexport function tableColumnAlignments(node: ProsemirrorNode) {\n // get the first row (schema requires at least 1 row)\n const firstRow = node.firstChild!;\n\n // determine # of columns\n const cols = firstRow.childCount;\n\n // return alignments\n const alignments = new Array(cols);\n for (let i = 0; i < cols; i++) {\n const cell = firstRow.child(i);\n const align: CssAlignment = cell.attrs.align;\n switch (align) {\n case CssAlignment.Left:\n alignments[i] = PandocTokenType.AlignLeft;\n break;\n case CssAlignment.Right:\n alignments[i] = PandocTokenType.AlignRight;\n break;\n case CssAlignment.Center:\n alignments[i] = PandocTokenType.AlignCenter;\n break;\n case null:\n default:\n alignments[i] = PandocTokenType.AlignDefault;\n break;\n }\n }\n return alignments;\n}\n\nexport function tableColumnWidths(node: ProsemirrorNode) {\n // get the first row (schema requires at least 1 row)\n const firstRow = node.firstChild!;\n\n // determine # of columns\n const cols = firstRow.childCount;\n\n // width percentages\n let widths = new Array(cols).fill(0);\n\n // take note of explicitly sized columns\n const totalWidth = node.attrs.width;\n let availableWidth = totalWidth;\n let colsWithWidth = 0;\n for (let i = 0; i < cols; i++) {\n const col = firstRow.child(i);\n if (col.attrs.colwidth && col.attrs.colwidth[0]) {\n widths[i] = col.attrs.colwidth[0];\n colsWithWidth++;\n availableWidth -= widths[i];\n }\n }\n\n // allocate remaining widths if we have at least 1 sized columns (otherwise\n // we leave all of the widths at 0 which results in no sizing)\n if (colsWithWidth > 0) {\n if (availableWidth > 0) {\n const defaultWidth = availableWidth / (cols - colsWithWidth);\n for (let i = 0; i < cols; i++) {\n const col = firstRow.child(i);\n if (!col.attrs.colwidth || !col.attrs.colwidth[0]) {\n widths[i] = defaultWidth;\n }\n }\n }\n\n // convert widths to percentages\n widths = widths.map(width => width / totalWidth);\n }\n\n return widths;\n}\n\nexport function fixupTableWidths(view: EditorView) {\n return (tr: Transaction) => {\n const schema = tr.doc.type.schema;\n\n // don't do fixup if we aren't connected to the DOM\n if (!view.dom || !view.dom.isConnected) {\n return tr;\n }\n\n const tables = findChildrenByType(tr.doc, schema.nodes.table);\n for (const table of tables) {\n // get table width\n const el = view.domAtPos(table.pos).node as HTMLElement;\n const containerWidth = table.node.attrs.width || el.clientWidth;\n if (containerWidth === 0) {\n continue;\n }\n\n // resolve colpercents (read by tokenzier)\n const colpercents = table.node.attrs.colpercents;\n if (colpercents) {\n // for each row\n table.node.forEach((rowNode, rowOffset, r) => {\n // for each cell\n rowNode.forEach((cellNode, cellOffset, c) => {\n const cellPos = table.pos + 1 + rowOffset + 1 + cellOffset;\n const colWidth = [colpercents[c] * containerWidth];\n if (colWidth !== cellNode.attrs.colwidth) {\n tr.setNodeMarkup(cellPos, cellNode.type, {\n ...cellNode.attrs,\n colwidth: colWidth,\n });\n }\n });\n });\n }\n\n if (containerWidth !== table.node.attrs.width || colpercents) {\n tr.setNodeMarkup(table.pos, schema.nodes.table, {\n ...table.node.attrs,\n width: containerWidth,\n colpercents: null,\n });\n }\n }\n return tr;\n };\n}\n","/*\n * table-capsule.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, DOMParser } from 'prosemirror-model';\n\nimport {\n PandocBlockCapsuleFilter,\n PandocBlockCapsule,\n blockCapsuleParagraphTokenHandler,\n encodedBlockCapsuleRegex,\n blockCapsuleTextHandler,\n blockCapsuleSourceWithoutPrefix,\n parsePandocBlockCapsule,\n} from '../../api/pandoc_capsule';\nimport { ProsemirrorWriter, PandocToken, PandocTokenType } from '../../api/pandoc';\nimport { kHTMLFormat } from '../../api/raw';\n\nexport function tableBlockCapsuleFilter(): PandocBlockCapsuleFilter {\n const kTableBlockCapsuleType = '8EF5A772-DD63-4622-84BF-AF1995A1B2B9'.toLowerCase();\n const pagraphTokenCapsuleHandler = blockCapsuleParagraphTokenHandler(kTableBlockCapsuleType);\n const tokenRegex = encodedBlockCapsuleRegex('^', '$');\n\n return {\n type: kTableBlockCapsuleType,\n\n match: /^([\\t >]*)()([ \\t]*)$/gm,\n\n // textually enclose the capsule so that pandoc parses it as the type of block we want it to\n // (in this case we don't do anything because pandoc would have written this table as a\n // semantically standalone block)\n enclose: (capsuleText: string, capsule: PandocBlockCapsule) => {\n return capsuleText;\n },\n\n // look for one of our block capsules within pandoc ast text (e.g. a code or raw block)\n // and if we find it, parse and return the original source code\n handleText: blockCapsuleTextHandler(kTableBlockCapsuleType, encodedBlockCapsuleRegex(undefined, undefined, 'gm')),\n\n // we are looking for a paragraph token consisting entirely of a block capsule of our type.\n // if find that then return the block capsule text\n handleToken: (tok: PandocToken) => {\n // first check for a paragraph\n const capsuleText = pagraphTokenCapsuleHandler(tok);\n if (capsuleText) {\n return capsuleText;\n }\n\n // now look for a definition list (which is what a table with a caption parses as)\n if (tok.t === PandocTokenType.DefinitionList) {\n if (tok.c.length === 1) {\n const definition = tok.c[0];\n if (definition[0][0].t === PandocTokenType.Str) {\n const term = definition[0][0].c as string;\n const match = term.match(tokenRegex);\n if (match) {\n const capsuleRecord = parsePandocBlockCapsule(term);\n if (capsuleRecord.type === kTableBlockCapsuleType) {\n return term;\n }\n }\n }\n }\n }\n\n return null;\n },\n\n // write the node as a table (parse the html)\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\n // remove the source prefix\n const source = blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\n\n // fallback to write as raw html\n const writeAsRawHTML = () => {\n writer.openNode(schema.nodes.raw_block, { format: kHTMLFormat });\n writer.writeText(source);\n writer.closeNode();\n };\n\n // parse the table from the string\n const parser = new window.DOMParser();\n const doc = parser.parseFromString(capsule.source, 'text/html');\n if (doc.body && doc.body.firstChild instanceof HTMLTableElement) {\n // get prosemirror dom parser\n const prosemirrorDomParser = DOMParser.fromSchema(schema);\n\n // get unparsed (by prosemirror) table\n const unparsedTable = doc.body.firstChild;\n\n // ensure that table cells all have content\n const ensureCellContent = (tag: string) => {\n const cells = unparsedTable.getElementsByTagName(tag);\n for (let i = 0; i < cells.length; i++) {\n const cell = cells.item(i)!;\n if (cell.children.length === 0) {\n cell.append(window.document.createElement('p'));\n }\n }\n };\n ensureCellContent('td');\n ensureCellContent('th');\n\n // extract caption element\n let captionElement: HTMLTableCaptionElement | null = null;\n const captionCollection = unparsedTable.getElementsByTagName('caption');\n if (captionCollection.length) {\n captionElement = captionCollection.item(0);\n if (captionElement) {\n captionElement.remove();\n }\n }\n\n // determine caption (either empty or parsed from element)\n let caption = schema.nodes.table_caption.create({ inactive: true });\n if (captionElement) {\n const captionSlice = prosemirrorDomParser.parseSlice(captionElement);\n caption = schema.nodes.table_caption.createAndFill({ inactive: false }, captionSlice.content)!;\n }\n\n // parse the prosemirror table element\n const slice = prosemirrorDomParser.parseSlice(doc.body);\n if (slice.content.firstChild && slice.content.firstChild.type === schema.nodes.table) {\n const table = slice.content.firstChild;\n writer.addNode(schema.nodes.table_container, {}, [table, caption]);\n } else {\n writeAsRawHTML();\n }\n\n // fallback to writing as raw_html (round-trip unmodified)\n } else {\n writeAsRawHTML();\n }\n },\n };\n}\n","/*\n * table-contextmenu.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Plugin, PluginKey, Transaction, EditorState } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { Schema } from 'prosemirror-model';\nimport { isInTable } from 'prosemirror-tables';\n\nimport { EditorUI } from '../../api/ui';\nimport { EditorCommandId } from '../../api/command';\n\nexport class TableContextMenuPlugin extends Plugin {\n private menuVisible = false;\n\n constructor(_schema: Schema, ui: EditorUI) {\n super({\n key: new PluginKey('table-contextmenu'),\n\n props: {\n handleDOMEvents: {\n contextmenu: (view: EditorView, event: Event) => {\n // only trigger when in table\n if (!isInTable(view.state)) {\n return false;\n }\n\n const asyncShowTableContextMenu = async () => {\n const menu = [\n { command: EditorCommandId.TableAddRowBefore },\n { command: EditorCommandId.TableAddRowAfter },\n { separator: true },\n { command: EditorCommandId.TableAddColumnBefore },\n { command: EditorCommandId.TableAddColumnAfter },\n { separator: true },\n { command: EditorCommandId.TableDeleteRow },\n { command: EditorCommandId.TableDeleteColumn },\n { separator: true },\n { command: EditorCommandId.TableDeleteTable },\n { separator: true },\n {\n text: ui.context.translateText('Align Column'),\n subMenu: {\n items: [\n { command: EditorCommandId.TableAlignColumnLeft },\n { command: EditorCommandId.TableAlignColumnCenter },\n { command: EditorCommandId.TableAlignColumnRight },\n { separator: true },\n { command: EditorCommandId.TableAlignColumnDefault },\n ],\n },\n },\n { separator: true },\n { command: EditorCommandId.TableToggleHeader },\n { command: EditorCommandId.TableToggleCaption },\n ];\n\n const { clientX, clientY } = event as MouseEvent;\n await ui.display.showContextMenu!(menu, clientX, clientY);\n this.menuVisible = false;\n };\n\n if (ui.display.showContextMenu) {\n this.menuVisible = true;\n asyncShowTableContextMenu();\n event.stopPropagation();\n event.preventDefault();\n return true;\n } else {\n return false;\n }\n },\n },\n },\n\n // prevent selection while the context menu is visible (the right-click\n // that invokes the context menu ends up resetting the selection, which\n // makes the selection-based commands behave incorrectly when multiple\n // rows or columns are selected)\n filterTransaction: (tr: Transaction, state: EditorState) => {\n if (this.menuVisible && isInTable(state)) {\n return !(tr.selectionSet && !tr.docChanged && !tr.storedMarksSet);\n } else {\n return true;\n }\n },\n });\n }\n}\n","/*\n * table-paste.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Plugin, PluginKey, Transaction, EditorState } from 'prosemirror-state';\nimport { Slice, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorView } from 'prosemirror-view';\n\nimport { sliceHasNode } from '../../api/slice';\n\nimport { fixupTableWidths } from './table-columns';\nimport { forChangedNodes } from '../../api/transaction';\n\nimport { kDefaultCellClasses } from './table-nodes';\n\nexport function tablePaste() {\n return new Plugin({\n key: new PluginKey('table-paste'),\n props: {\n handlePaste: (view: EditorView, _event: Event, slice: Slice) => {\n // if the slice contains a table then we handle it\n if (sliceHasNode(slice, node => node.type === node.type.schema.nodes.table)) {\n // based on https://github.com/ProseMirror/prosemirror-view/blob/fb799aae4e9dd5cfc256708a6845d76aaaf145bf/src/input.js#L503-L510\n const tr = view.state.tr.replaceSelection(slice);\n view.dispatch(\n tr\n .scrollIntoView()\n .setMeta('paste', true)\n .setMeta('tablePaste', true)\n .setMeta('uiEvent', 'paste'),\n );\n view.dispatch(fixupTableWidths(view)(view.state.tr));\n return true;\n } else {\n return false;\n }\n },\n },\n appendTransaction: (transactions: Transaction[], oldState: EditorState, newState: EditorState) => {\n // alias schema\n const schema = newState.schema;\n\n // only process table paste transactions\n if (!transactions.some(transaction => transaction.getMeta('tablePaste'))) {\n return null;\n }\n\n // cleanup table by converting the first row to header cells, ensuring that column alignments\n // are derived from the alignment of the first row, and applying the standard cell class names\n const tr = newState.tr;\n forChangedNodes(\n oldState,\n newState,\n node => node.type === node.type.schema.nodes.table,\n (node, pos) => {\n let firstRow: ProsemirrorNode;\n let currentColumn = 0;\n const columnAlignments: string[] = [];\n\n node.descendants((childNode, childPos, parent) => {\n // if this is a row then reset the current column to 0\n if (childNode.type === schema.nodes.table_row) {\n currentColumn = 0;\n }\n\n // first thing we will encounter in traveral is the first row, note that and move along to cells\n if (!firstRow) {\n // note first row\n firstRow = childNode;\n\n // children of the first row are the headers\n } else if (parent === firstRow) {\n // collect alignment (will be applied below to cells in this column)\n columnAlignments.push(childNode.attrs.align);\n\n // convert to a table header w/ default class\n const headerPos = pos + 1 + childPos;\n tr.setNodeMarkup(headerPos, schema.nodes.table_header, {\n ...childNode.attrs,\n className: kDefaultCellClasses,\n });\n\n // normal cell - apply the requisite alignment and give it the default class\n } else if (childNode.type === schema.nodes.table_cell) {\n // determine alignment\n const align = columnAlignments[currentColumn] || null;\n\n // apply markup\n const cellPos = pos + 1 + childPos;\n tr.setNodeMarkup(cellPos, schema.nodes.table_cell, {\n ...childNode.attrs,\n align,\n className: kDefaultCellClasses,\n });\n }\n\n // if this is a cell then advance the current column\n if (childNode.type === schema.nodes.table_header || childNode.type === schema.nodes.table_cell) {\n currentColumn++;\n }\n });\n },\n );\n\n if (tr.docChanged) {\n return tr;\n }\n },\n });\n}\n","/*\n * definition_list.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, DOMOutputSpec } from 'prosemirror-model';\n\nimport { PandocTokenType } from '../../api/pandoc';\nimport { ExtensionContext } from '../../api/extension';\nimport { BaseKey } from '../../api/basekeys';\n\nimport { InsertDefinitionList, InsertDefinitionDescription, InsertDefinitionTerm } from './definition_list-commands';\n\nimport {\n definitionListEnter,\n definitionListBackspace,\n definitionListTab,\n definitionListShiftTab,\n} from './definition-list-keys';\n\nimport { definitionInputRule } from './definition_list-inputrule';\n\nimport { insertDefinitionListAppendTransaction } from './definition_list-insert';\nimport {\n readPandocDefinitionList,\n writePandocDefinitionList,\n writePandocDefinitionListTerm,\n writePandocDefinitionListDescription,\n} from './definition_list-pandoc';\n\nimport './definition_list-styles.css';\nimport { emptyNodePlaceholderPlugin } from '../../api/placeholder';\n\nconst extension = (context: ExtensionContext) => {\n const { pandocExtensions, ui } = context;\n\n if (!pandocExtensions.definition_lists) {\n return null;\n }\n\n return {\n nodes: [\n {\n name: 'definition_list_term',\n spec: {\n content: 'inline*',\n isolating: true,\n parseDOM: [{ tag: 'dt' }],\n toDOM(): DOMOutputSpec {\n return ['dt', { class: 'pm-definition-term' }, 0];\n },\n },\n pandoc: {\n writer: writePandocDefinitionListTerm,\n },\n },\n {\n name: 'definition_list_description',\n spec: {\n content: 'block+',\n parseDOM: [{ tag: 'dd' }],\n toDOM(): DOMOutputSpec {\n return ['dd', { class: 'pm-definition-description pm-block-border-color pm-margin-bordered' }, 0];\n },\n },\n pandoc: {\n writer: writePandocDefinitionListDescription,\n },\n },\n {\n name: 'definition_list',\n spec: {\n content: '(definition_list_term definition_list_description*)+',\n group: 'block',\n defining: true,\n parseDOM: [{ tag: 'dl' }],\n toDOM(): DOMOutputSpec {\n return ['dl', { class: 'pm-definition-list' }, 0];\n },\n },\n pandoc: {\n readers: [\n {\n token: PandocTokenType.DefinitionList,\n handler: readPandocDefinitionList,\n },\n ],\n\n writer: writePandocDefinitionList,\n },\n },\n ],\n\n commands: (schema: Schema) => {\n return [\n new InsertDefinitionList(ui),\n new InsertDefinitionTerm(schema, ui),\n new InsertDefinitionDescription(schema),\n ];\n },\n\n baseKeys: (_schema: Schema) => {\n return [\n { key: BaseKey.Enter, command: definitionListEnter() },\n { key: BaseKey.Backspace, command: definitionListBackspace() },\n { key: BaseKey.Tab, command: definitionListTab() },\n { key: BaseKey.ShiftTab, command: definitionListShiftTab() },\n ];\n },\n\n inputRules: (_schema: Schema) => {\n return [definitionInputRule()];\n },\n\n appendTransaction: (_schema: Schema) => {\n return [insertDefinitionListAppendTransaction()];\n },\n\n plugins: (schema: Schema) => {\n return [emptyNodePlaceholderPlugin(schema.nodes.definition_list_term, () => ui.context.translateText('Term'))];\n },\n };\n};\n\nexport default extension;\n","/*\n * definition_list-commands.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\nimport { Schema, Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { findParentNodeOfType, setTextSelection } from 'prosemirror-utils';\n\nimport { canInsertNode } from '../../api/node';\nimport { insertDefinitionList } from './definition_list-insert';\nimport { EditorUI } from '../../api/ui';\nimport { OmniInsertGroup } from '../../api/omni_insert';\n\nexport class InsertDefinitionList extends ProsemirrorCommand {\n constructor(ui: EditorUI) {\n super(\n EditorCommandId.DefinitionList,\n [],\n (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const schema = state.schema;\n\n if (\n findParentNodeOfType(schema.nodes.definition_list)(state.selection) ||\n !canInsertNode(state, schema.nodes.definition_list)\n ) {\n return false;\n }\n\n // new definition list\n if (dispatch) {\n const tr = state.tr;\n\n // create new list\n const termText = insertTermText(ui);\n const term = schema.text(termText);\n insertDefinitionList(tr, [\n schema.nodes.definition_list_term.createAndFill({}, term),\n createDefinitionDescription(schema),\n ]);\n const start = state.selection.from;\n tr.setSelection(TextSelection.create(tr.doc, start, start + termText.length + 1)).scrollIntoView();\n dispatch(tr);\n }\n return true;\n },\n // omni insert\n {\n name: ui.context.translateText('Definition List'),\n description: ui.context.translateText('List with a definition for each item'),\n group: OmniInsertGroup.Lists,\n priority: 3,\n image: () =>\n ui.prefs.darkMode() ? ui.images.omni_insert?.definition_list_dark! : ui.images.omni_insert?.definition_list!,\n },\n );\n }\n}\n\nclass InsertDefinitionListItemCommand extends ProsemirrorCommand {\n constructor(id: EditorCommandId, createFn: () => ProsemirrorNode) {\n super(id, [], (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n const schema = state.schema;\n\n if (!findParentNodeOfType(schema.nodes.definition_list)(state.selection)) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n const dlTypes = [schema.nodes.definition_list_term, schema.nodes.definition_list_description];\n const parent = findParentNodeOfType(dlTypes)(state.selection)!;\n const insertPos = parent.pos + parent.node.nodeSize;\n const insertNode = createFn();\n tr.insert(insertPos, insertNode);\n if (insertNode.textContent.length > 1) {\n tr.setSelection(TextSelection.create(tr.doc, insertPos, insertPos + insertNode.textContent.length + 1));\n } else {\n setTextSelection(insertPos, 1)(tr);\n }\n tr.scrollIntoView();\n\n dispatch(tr);\n }\n\n return true;\n });\n }\n}\n\nexport class InsertDefinitionTerm extends InsertDefinitionListItemCommand {\n constructor(schema: Schema, ui: EditorUI) {\n super(EditorCommandId.DefinitionTerm, () => {\n const term = schema.text(insertTermText(ui));\n return schema.nodes.definition_list_term.createAndFill({}, term)!;\n });\n }\n}\n\nexport class InsertDefinitionDescription extends InsertDefinitionListItemCommand {\n constructor(schema: Schema) {\n super(EditorCommandId.DefinitionDescription, () => {\n return createDefinitionDescription(schema);\n });\n }\n}\n\nfunction insertTermText(ui: EditorUI) {\n return ui.context.translateText('term');\n}\n\nfunction createDefinitionDescription(schema: Schema) {\n return schema.nodes.definition_list_description.createAndFill({}, schema.nodes.paragraph.create())!;\n}\n","/*\n * definition_list-insert.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { Transaction } from 'prosemirror-state';\nimport { setTextSelection } from 'prosemirror-utils';\nimport { findChildrenByType } from 'prosemirror-utils';\nimport { trTransform } from '../../api/transaction';\nimport { Transform } from 'prosemirror-transform';\n\nexport function insertDefinitionList(tr: Transaction, items: ProsemirrorNode[]) {\n const schema = items[0].type.schema;\n const definitionList = schema.nodes.definition_list.createAndFill({}, items)!;\n const prevCursor = tr.selection.to;\n tr.replaceSelectionWith(definitionList);\n setTextSelection(tr.mapping.map(prevCursor) - 1, -1)(tr).scrollIntoView();\n return tr;\n}\n\nexport function insertDefinitionListAppendTransaction() {\n return {\n name: 'definition-list-join',\n nodeFilter: (node: ProsemirrorNode) => node.type === node.type.schema.nodes.definition_list,\n append: (tr: Transaction) => {\n // if a transaction creates 2 adjacent definition lists then join them\n trTransform(tr, joinDefinitionListsTransform);\n },\n };\n}\n\nfunction joinDefinitionListsTransform(tr: Transform) {\n const nodeType = tr.doc.type.schema.nodes.definition_list;\n const lists = findChildrenByType(tr.doc, nodeType, true);\n for (const list of lists) {\n // NOTE: no mapping (checking for deletion + getting the updated\n // position) is required here because we only ever do one transform\n // (see return after tr.join below)\n const listPos = tr.doc.resolve(list.pos + 1);\n const listIndex = listPos.index(listPos.depth - 1);\n const listParent = listPos.node(listPos.depth - 1);\n if (listIndex + 1 < listParent.childCount) {\n const nextNode = listParent.child(listIndex + 1);\n if (nextNode.type === nodeType) {\n tr.join(list.pos + list.node.nodeSize);\n return;\n }\n }\n }\n}\n","/*\n * definition_list-keys.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorState, Transaction, TextSelection } from 'prosemirror-state';\nimport {\n findParentNodeOfType,\n findParentNodeOfTypeClosestToPos,\n setTextSelection,\n hasParentNodeOfType,\n ContentNodeWithPos,\n} from 'prosemirror-utils';\n\nimport { isLastChild, isOnlyChild } from '../../api/position';\n\nexport function definitionListEnter() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // process if we are within a definition list\n const schema = state.schema;\n const parentDL = findParentNodeOfType(schema.nodes.definition_list)(state.selection);\n if (!parentDL) {\n return false;\n }\n\n // handle only empty selections\n if (!state.selection.empty) {\n return false;\n }\n\n // handle enter in either a term or definition\n const parentTerm = findParentNodeOfType(schema.nodes.definition_list_term)(state.selection);\n if (parentTerm) {\n return termEnter(parentTerm, state, dispatch);\n\n // enter in trailing empty description paragraph (append a term)\n } else if (isTrailingEmptyParagraph(state)) {\n if (dispatch) {\n endOfDescriptionEnter(state, dispatch);\n }\n return true;\n } else {\n return false;\n }\n };\n}\n\nexport function definitionListBackspace() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // process if we are within a definition item\n const schema = state.schema;\n const dlTypes = [schema.nodes.definition_list_term, schema.nodes.definition_list_description];\n const parentTerm = findParentNodeOfType(dlTypes)(state.selection);\n if (!parentTerm) {\n return false;\n }\n\n if (parentTerm.node.type === schema.nodes.definition_list_term) {\n // if it's empty\n if (parentTerm.node.childCount === 0) {\n if (dispatch) {\n emptyTermBackspace(state, dispatch);\n }\n return true;\n }\n } else {\n // if the enclosing description is empty then delete it\n if (parentTerm.node.textContent.length === 0) {\n if (dispatch) {\n emptyDescriptionBackspace(parentTerm, state, dispatch);\n }\n\n return true;\n }\n }\n\n return false;\n };\n}\n\nexport function definitionListTab() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // process if we are within a definition_term\n const schema = state.schema;\n const dlTypes = [schema.nodes.definition_list_term, schema.nodes.definition_list_description];\n const parentTerm = findParentNodeOfType(dlTypes)(state.selection);\n if (!parentTerm) {\n return false;\n }\n\n // advance past node\n if (dispatch) {\n const tr = state.tr;\n const advancePos = parentTerm.pos + parentTerm.node.nodeSize;\n setTextSelection(advancePos, 1)(tr).scrollIntoView();\n dispatch(tr);\n }\n\n return true;\n };\n}\n\nexport function definitionListShiftTab() {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // process if we are within a definition_term\n const schema = state.schema;\n const dlTypes = [schema.nodes.definition_list_term, schema.nodes.definition_list_description];\n const parentTerm = findParentNodeOfType(dlTypes)(state.selection);\n if (!parentTerm) {\n return false;\n }\n\n if (dispatch) {\n const tr = state.tr;\n const backwardPos = state.doc.resolve(parentTerm.pos - 1);\n const prevNode = findParentNodeOfTypeClosestToPos(backwardPos, dlTypes);\n if (prevNode) {\n setTextSelection(prevNode.start, 1)(tr).scrollIntoView();\n } else {\n const listNode = findParentNodeOfType(schema.nodes.definition_list)(tr.selection)!;\n setTextSelection(listNode.pos, -1)(tr).scrollIntoView();\n }\n\n dispatch(tr);\n }\n\n return true;\n };\n}\n\nfunction termEnter(term: ContentNodeWithPos, state: EditorState, dispatch?: (tr: Transaction) => void) {\n const schema = state.schema;\n const $head = state.selection.$head;\n\n // only handle empty selections\n if (!state.selection.empty) {\n return false;\n }\n\n // if we are empty then it's an exit (delete the term)\n const isEmpty = term.node.textContent.length === 0;\n if (isEmpty) {\n if (dispatch) {\n const tr = state.tr;\n tr.deleteRange(term.pos, term.pos + term.node.nodeSize);\n tr.replaceSelectionWith(schema.nodes.paragraph.create());\n setTextSelection(tr.mapping.map(state.selection.from), 1)(tr);\n dispatch(tr);\n }\n return true;\n\n // variable handling for non-empty\n } else {\n // selection at the beginning means insert another term above\n if ($head.parentOffset === 0) {\n if (dispatch) {\n const tr = state.tr;\n const insertPos = tr.selection.$head.before($head.depth);\n tr.insert(insertPos, schema.nodes.definition_list_term.create());\n dispatch(tr);\n }\n return true;\n\n // selection at the end means insert a description below\n } else if ($head.parentOffset === term.node.textContent.length) {\n if (dispatch) {\n const tr = state.tr;\n const insertPos = tr.selection.$head.after($head.depth);\n tr.insert(\n insertPos,\n schema.nodes.definition_list_description.createAndFill({}, schema.nodes.paragraph.create())!,\n );\n setTextSelection(insertPos, 1)(tr).scrollIntoView();\n dispatch(tr);\n }\n return true;\n }\n }\n\n return false;\n}\n\nfunction emptyTermBackspace(state: EditorState, dispatch: (tr: Transaction) => void) {\n const { $head } = state.selection;\n const tr = state.tr;\n // if it's the only child then delete the entire list\n if (isOnlyChild($head)) {\n const start = $head.start($head.depth - 1) - 1;\n tr.deleteRange(start, start + $head.node($head.depth - 1).nodeSize);\n } else {\n const start = $head.start($head.depth) - 1;\n tr.deleteRange(start, start + $head.node($head.depth).nodeSize);\n }\n dispatch(tr);\n}\n\nfunction endOfDescriptionEnter(state: EditorState, dispatch: (tr: Transaction) => void) {\n const schema = state.schema;\n const { $head } = state.selection;\n const selectionNode = $head.node($head.depth);\n\n const tr = state.tr;\n\n // if the parent description is empty then delete it\n let start = null;\n const descriptionNode = $head.node($head.depth - 1);\n if (descriptionNode.textContent.trim().length === 0) {\n start = $head.start($head.depth - 1) - 1;\n tr.deleteRange(start, start + descriptionNode.nodeSize);\n\n // only if at very end\n if (isLastChild($head, 2)) {\n const insertPos = tr.mapping.map($head.after($head.depth - 2));\n tr.insert(insertPos, schema.nodes.paragraph.create());\n setTextSelection(insertPos, 1)(tr).scrollIntoView();\n }\n\n // otherwise just delete the paragraph and insert a term\n } else {\n start = $head.start($head.depth) - 1;\n tr.deleteRange(start, start + selectionNode.nodeSize);\n start = tr.mapping.map(start);\n tr.insert(start + 1, schema.nodes.definition_list_term.create());\n setTextSelection(start, 1)(tr).scrollIntoView();\n }\n\n dispatch(tr);\n}\n\nfunction emptyDescriptionBackspace(\n description: ContentNodeWithPos,\n state: EditorState,\n dispatch: (tr: Transaction) => void,\n) {\n const tr = state.tr;\n tr.deleteRange(description.pos, description.pos + description.node.nodeSize);\n dispatch(tr);\n}\n\nfunction isTrailingEmptyParagraph(state: EditorState) {\n const { $head } = state.selection;\n const selectionNode = $head.node($head.depth);\n const isParagraph = selectionNode.type === state.schema.nodes.paragraph;\n const isEmpty = selectionNode.textContent.trim().length === 0;\n return isParagraph && isEmpty && isLastChild($head);\n}\n\n// eslint-disable-next-line\nfunction selectionCrossesListBoundary(state: EditorState) {\n const { $head, $anchor } = state.selection;\n const headInDL = hasParentNodeOfType(state.schema.nodes.definition_list)(TextSelection.near($head));\n const anchorInDL = hasParentNodeOfType(state.schema.nodes.definition_list)(TextSelection.near($anchor));\n return headInDL !== anchorInDL;\n}\n","/*\n * definition_list-inputrule.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { InputRule } from 'prosemirror-inputrules';\nimport { EditorState } from 'prosemirror-state';\nimport { setTextSelection, findParentNodeOfTypeClosestToPos } from 'prosemirror-utils';\n\nimport { insertDefinitionList } from './definition_list-insert';\n\nexport function definitionInputRule() {\n return new InputRule(/^:[ ]+$/, (state: EditorState, match: string[], start: number, end: number) => {\n const schema = state.schema;\n\n // if we are inside a definiition list description this means start a new description\n const { $head } = state.selection;\n const container = $head.node($head.depth - 1);\n const parent = $head.node($head.depth);\n\n // must be just ': '\n if (parent.textContent.trim() !== ':') {\n return null;\n }\n\n // check for : within a definition list description\n if (container.type === schema.nodes.definition_list_description && parent.type === schema.nodes.paragraph) {\n const tr = state.tr;\n const startPos = $head.start($head.depth) - 1;\n tr.deleteRange(startPos, startPos + $head.node($head.depth).nodeSize);\n const insertPos = tr.mapping.map(startPos) + 1;\n tr.insert(\n insertPos,\n schema.nodes.definition_list_description.createAndFill({}, schema.nodes.paragraph.create())!,\n );\n setTextSelection(insertPos, 1)(tr).scrollIntoView();\n return tr;\n\n // check for : in a paragraph immediately after another paragraph\n } else if (container.type !== schema.nodes.definition_list_description && isParagraphAfterParagraph(state)) {\n const prevPara = findParentNodeOfTypeClosestToPos(state.doc.resolve(start - 2), schema.nodes.paragraph);\n if (prevPara) {\n const tr = state.tr;\n tr.deleteRange(prevPara.start, end);\n insertDefinitionList(tr, [\n schema.nodes.definition_list_term.createAndFill({}, prevPara.node.content)!,\n schema.nodes.definition_list_description.createAndFill({}, schema.nodes.paragraph.create())!,\n ]);\n return tr;\n } else {\n return null;\n }\n } else {\n return null;\n }\n });\n}\n\nfunction isParagraphAfterParagraph(state: EditorState) {\n const schema = state.schema;\n const { $head } = state.selection;\n\n // check if the selection is in a paragraph\n const selectionInParagraph = $head.node($head.depth).type === schema.nodes.paragraph;\n if (!selectionInParagraph) {\n return false;\n }\n\n // check if the previous node is a paragraph\n const parent = $head.node($head.depth - 1);\n const parentIndex = $head.index($head.depth - 1);\n return parentIndex > 0 && parent.child(parentIndex - 1).type === schema.nodes.paragraph;\n}\n","/*\n * position.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { ResolvedPos } from 'prosemirror-model';\n\nexport function isOnlyChild(pos: ResolvedPos, depthOffset = 1) {\n return pos.node(pos.depth - depthOffset).childCount === 1;\n}\n\nexport function isLastChild(pos: ResolvedPos, depthOffset = 1) {\n return pos.index(pos.depth - depthOffset) === pos.node(pos.depth - depthOffset).childCount - 1;\n}\n","/*\n * definition_list-pandoc.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport { ProsemirrorWriter, PandocToken, PandocOutput, PandocTokenType } from '../../api/pandoc';\n\nexport function readPandocDefinitionList(schema: Schema) {\n return (writer: ProsemirrorWriter, tok: PandocToken) => {\n writer.openNode(schema.nodes.definition_list, {});\n\n const definitions = tok.c;\n definitions.forEach((definition: [PandocToken[], PandocToken[][]]) => {\n const term = definition[0];\n writer.openNode(schema.nodes.definition_list_term, {});\n writer.writeTokens(term);\n writer.closeNode();\n\n const descriptions = definition[1];\n descriptions.forEach(description => {\n writer.openNode(schema.nodes.definition_list_description, {});\n writer.writeTokens(description);\n writer.closeNode();\n });\n });\n writer.closeNode();\n };\n}\n\nexport function writePandocDefinitionList(output: PandocOutput, node: ProsemirrorNode) {\n output.writeToken(PandocTokenType.DefinitionList, () => {\n // collect terms and descriptions\n const currentDefinition: {\n term?: ProsemirrorNode;\n descriptions: ProsemirrorNode[];\n } = { descriptions: new Array() };\n\n // functions to manipulate current definition\n function writeCurrent() {\n if (currentDefinition.term) {\n output.writeArray(() => {\n output.writeNode(currentDefinition.term!);\n output.writeArray(() => {\n currentDefinition.descriptions.forEach(description => {\n output.writeNode(description);\n });\n });\n });\n }\n }\n\n // write the list\n node.forEach(child => {\n if (child.type === child.type.schema.nodes.definition_list_term) {\n writeCurrent();\n currentDefinition.term = child;\n currentDefinition.descriptions = [];\n } else {\n currentDefinition.descriptions.push(child);\n }\n });\n writeCurrent();\n });\n}\n\nexport function writePandocDefinitionListTerm(output: PandocOutput, node: ProsemirrorNode) {\n output.writeArray(() => {\n output.writeInlines(node.content);\n });\n}\n\nexport function writePandocDefinitionListDescription(output: PandocOutput, node: ProsemirrorNode) {\n output.writeArray(() => {\n output.writeNodes(node);\n });\n}\n","/*\n * shortcode_block.ts\n *\n * Copyright (C) 2019-20 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\nimport { EditorState, Transaction } from 'prosemirror-state';\n\nimport { setTextSelection } from 'prosemirror-utils';\n\nimport { PandocOutput, PandocTokenType, PandocToken, stringifyTokens, ProsemirrorWriter } from '../api/pandoc';\n\nimport { kHugoDocType } from '../api/format';\n\nimport { Extension, ExtensionContext } from '../api/extension';\nimport { codeNodeSpec } from '../api/code';\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\nimport { canInsertNode } from '../api/node';\nimport { kShortcodeRegEx } from '../api/shortcode';\nimport {\n PandocBlockCapsuleFilter,\n blockCapsuleParagraphTokenHandler,\n encodedBlockCapsuleRegex,\n PandocBlockCapsule,\n blockCapsuleTextHandler,\n blockCapsuleSourceWithoutPrefix,\n} from '../api/pandoc_capsule';\n\nconst extension = (context: ExtensionContext): Extension | null => {\n const { format } = context;\n\n // return null if no shortcodes\n if (!format.hugoExtensions.shortcodes) {\n return null;\n }\n\n return {\n nodes: [\n {\n name: 'shortcode_block',\n\n spec: {\n ...codeNodeSpec(),\n attrs: {},\n parseDOM: [\n {\n tag: \"div[class*='shortcode-block']\",\n preserveWhitespace: 'full',\n },\n ],\n toDOM(node: ProsemirrorNode) {\n return ['div', { class: 'shortcode-block pm-fixedwidth-font pm-code-block pm-markup-text-color' }, 0];\n },\n },\n\n code_view: {\n lang: () => 'text',\n borderColorClass: 'pm-raw-block-border',\n },\n\n attr_edit: () => ({\n type: (schema: Schema) => schema.nodes.shortcode_block,\n tags: () => ['shortcode'],\n editFn: () => () => false,\n }),\n\n pandoc: {\n // unroll shortcode from paragraph with single shortcode\n blockReader: (schema: Schema, tok: PandocToken, writer: ProsemirrorWriter) => {\n if (isParaWrappingShortcode(tok)) {\n const text = stringifyTokens(tok.c);\n writer.addNode(schema.nodes.shortcode_block, {}, [schema.text(text)]);\n return true;\n } else {\n return false;\n }\n },\n\n // capture shortcuts w/ begin/end tags\n blockCapsuleFilter: shortcodeBlockCapsuleFilter(),\n\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.Para, () => {\n output.writeRawMarkdown(node.content);\n });\n },\n },\n },\n ],\n\n commands: (schema: Schema) => {\n // only create command for hugo doc types\n if (!format.docTypes.includes(kHugoDocType)) {\n return [];\n }\n\n return [\n new ProsemirrorCommand(\n EditorCommandId.Shortcode,\n [],\n (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n // enable/disable command\n if (!canInsertNode(state, schema.nodes.shortcode_block)) {\n return false;\n }\n if (dispatch) {\n const tr = state.tr;\n const shortcode = '{{< >}}';\n const shortcodeNode = schema.nodes.shortcode_block.create({}, schema.text(shortcode));\n tr.replaceSelectionWith(shortcodeNode);\n setTextSelection(tr.mapping.map(state.selection.from) - shortcode.length / 2 - 1)(tr);\n dispatch(tr);\n }\n return true;\n },\n ),\n ];\n },\n };\n};\n\nfunction isParaWrappingShortcode(tok: PandocToken) {\n if (tok.t === PandocTokenType.Para) {\n // qualify that this paragraph has text that begins with {{< (so that\n // we don't end up scanning every token of every paragraph )\n const children: PandocToken[] = tok.c;\n if (tok.c.length > 1) {\n const [first, second] = tok.c;\n const firstText = first.t === PandocTokenType.Str ? first.c : second.c;\n if (typeof firstText === 'string' && firstText.startsWith('{{<')) {\n const text = stringifyTokens(children);\n return !!text.match(kShortcodeRegEx);\n }\n }\n }\n return false;\n}\n\nexport function shortcodeBlockCapsuleFilter(): PandocBlockCapsuleFilter {\n const kShortcodeBlockCapsuleType = 'B65B58FD-D707-4C30-8C97-3D99ACF9A157'.toLowerCase();\n\n return {\n type: kShortcodeBlockCapsuleType,\n\n // eslint-disable-next-line no-useless-escape\n match: /^([\\t >]*)(\\{\\{<\\s+([^\\/][^\\t ]+).*?>\\}\\}[ \\t]*\\n(?![ \\t]*\\n)[\\W\\w]*?\\n[\\t >]*\\{\\{<\\s+\\/\\3\\s+>\\}\\})([ \\t]*)$/gm,\n\n extract: (_match: string, p1: string, p2: string, _p3: string, p4: string) => {\n return {\n prefix: p1,\n source: p2,\n suffix: p4,\n };\n },\n\n // textually enclose the capsule so that pandoc parses it as the type of block we want it to\n // (in this case we don't do anything because pandoc would have written this table as a\n // semantically standalone block)\n enclose: (capsuleText: string, capsule: PandocBlockCapsule) => {\n return capsuleText;\n },\n\n // look for one of our block capsules within pandoc ast text (e.g. a code or raw block)\n // and if we find it, parse and return the original source code\n handleText: blockCapsuleTextHandler(\n kShortcodeBlockCapsuleType,\n encodedBlockCapsuleRegex(undefined, undefined, 'gm'),\n ),\n\n // we are looking for a paragraph token consisting entirely of a block capsule of our type.\n // if find that then return the block capsule text\n handleToken: blockCapsuleParagraphTokenHandler(kShortcodeBlockCapsuleType),\n\n // write the node\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\n // remove the source prefix\n const source = blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\n\n // write the node\n writer.addNode(schema.nodes.shortcode_block, {}, [schema.text(source)]);\n },\n };\n}\n\nexport default extension;\n","/*\n * html_preserve.ts\n *\n * Copyright (C) 2019-20 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\n\nimport { PandocOutput, PandocTokenType, ProsemirrorWriter } from '../api/pandoc';\nimport { Extension, ExtensionContext } from '../api/extension';\nimport { codeNodeSpec } from '../api/code';\n\nimport {\n PandocBlockCapsuleFilter,\n blockCapsuleParagraphTokenHandler,\n encodedBlockCapsuleRegex,\n PandocBlockCapsule,\n blockCapsuleTextHandler,\n blockCapsuleSourceWithoutPrefix,\n} from '../api/pandoc_capsule';\n\nconst extension = (context: ExtensionContext): Extension | null => {\n const { format } = context;\n\n return {\n nodes: [\n {\n name: 'html_preserve',\n\n spec: {\n ...codeNodeSpec(),\n attrs: {},\n parseDOM: [\n {\n tag: \"div[class*='pm-html-preserve']\",\n preserveWhitespace: 'full',\n },\n ],\n toDOM(node: ProsemirrorNode) {\n return ['div', { class: 'pm-html-preserve pm-fixedwidth-font pm-code-block pm-markup-text-color' }, 0];\n },\n },\n\n code_view: {\n lang: () => 'html',\n borderColorClass: 'pm-raw-block-border',\n },\n\n attr_edit: () => ({\n type: (schema: Schema) => schema.nodes.html_preserve,\n tags: () => ['html_preserve'],\n editFn: () => () => false,\n }),\n\n pandoc: {\n // capture shortcuts w/ begin/end tags\n blockCapsuleFilter: htmlPreserveBlockCapsuleFilter(),\n\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\n output.writeToken(PandocTokenType.Para, () => {\n output.writeRawMarkdown(node.content);\n });\n },\n },\n },\n ],\n };\n};\n\nexport function htmlPreserveBlockCapsuleFilter(): PandocBlockCapsuleFilter {\n const kHtmlPreserveBlockCapsuleType = '83CFCBF3-0429-4822-AAC6-D6F31591AEA8'.toLowerCase();\n\n return {\n type: kHtmlPreserveBlockCapsuleType,\n\n // eslint-disable-next-line no-useless-escape\n match: /^([\\t >]*)([\\W\\w]*?)([ \\t]*)$/gm,\n\n extract: (_match: string, p1: string, p2: string, p3: string) => {\n return {\n prefix: p1,\n source: p2,\n suffix: p3,\n };\n },\n\n // textually enclose the capsule so that pandoc parses it as the type of block we want it to\n // (in this case we don't do anything because pandoc would have written this as a\n // semantically standalone block)\n enclose: (capsuleText: string, capsule: PandocBlockCapsule) => {\n return capsuleText;\n },\n\n // look for one of our block capsules within pandoc ast text (e.g. a code or raw block)\n // and if we find it, parse and return the original source code\n handleText: blockCapsuleTextHandler(\n kHtmlPreserveBlockCapsuleType,\n encodedBlockCapsuleRegex(undefined, undefined, 'gm'),\n ),\n\n // we are looking for a paragraph token consisting entirely of a block capsule of our type.\n // if find that then return the block capsule text\n handleToken: blockCapsuleParagraphTokenHandler(kHtmlPreserveBlockCapsuleType),\n\n // write the node\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\n // remove the source prefix\n const source = blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\n\n // write the node\n writer.addNode(schema.nodes.html_preserve, {}, [schema.text(source)]);\n },\n };\n}\n\nexport default extension;\n","/*\n * ace.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport {\n Plugin,\n PluginKey,\n TextSelection,\n EditorState,\n Transaction,\n Selection,\n NodeSelection,\n} from 'prosemirror-state';\n\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\nimport { EditorView, NodeView, Decoration } from 'prosemirror-view';\nimport { undo, redo } from 'prosemirror-history';\nimport { exitCode } from 'prosemirror-commands';\nimport { keymap } from 'prosemirror-keymap';\nimport { undoInputRule } from 'prosemirror-inputrules';\nimport { GapCursor } from 'prosemirror-gapcursor';\n\nimport { CodeViewOptions, editingRootNode } from '../../api/node';\nimport { insertParagraph } from '../../api/paragraph';\nimport { createImageButton } from '../../api/widgets/widgets';\nimport { EditorUI, ChunkEditor } from '../../api/ui';\nimport { EditorOptions } from '../../api/options';\nimport { EditorEvents } from '../../api/events';\nimport { kPlatformMac } from '../../api/platform';\nimport { rmdChunk, previousExecutableRmdChunks, mergeRmdChunks } from '../../api/rmd';\nimport { ExtensionContext } from '../../api/extension';\nimport { DispatchEvent, ResizeEvent, ScrollEvent } from '../../api/event-types';\nimport { verticalArrowCanAdvanceWithinTextBlock } from '../../api/basekeys';\nimport { handleArrowToAdjacentNode } from '../../api/cursor';\n\nimport { selectAll } from '../../behaviors/select_all';\nimport { findPluginState } from '../../behaviors/find';\n\nimport { AceRenderQueue } from './ace-render-queue';\nimport { AcePlaceholder } from './ace-placeholder';\nimport { AceNodeViews } from './ace-node-views';\n\nimport zenscroll from 'zenscroll';\n\nimport './ace.css';\n\nconst plugin = new PluginKey('ace');\n\nexport function acePlugins(codeViews: { [key: string]: CodeViewOptions }, context: ExtensionContext): Plugin[] {\n // shared services\n const aceRenderQueue = new AceRenderQueue(context.events);\n const aceNodeViews = new AceNodeViews();\n\n // build nodeViews\n const nodeTypes = Object.keys(codeViews);\n const nodeViews: {\n [name: string]: (node: ProsemirrorNode, view: EditorView, getPos: boolean | (() => number)) => NodeView;\n } = {};\n nodeTypes.forEach(name => {\n nodeViews[name] = (node: ProsemirrorNode, view: EditorView, getPos: boolean | (() => number)) => {\n return new AceNodeView(\n node,\n view,\n getPos as () => number,\n context,\n codeViews[name],\n aceRenderQueue,\n aceNodeViews,\n );\n };\n });\n\n return [\n new Plugin({\n key: plugin,\n props: {\n nodeViews,\n handleDOMEvents: {\n click: aceNodeViews.handleClick.bind(aceNodeViews),\n },\n },\n }),\n // arrow in and out of editor\n keymap({\n ArrowLeft: arrowHandler('left', nodeTypes),\n ArrowRight: arrowHandler('right', nodeTypes),\n ArrowUp: arrowHandler('up', nodeTypes),\n ArrowDown: arrowHandler('down', nodeTypes),\n }),\n ];\n}\n\n/**\n * Represents a selection that was applied prior to the editor rendering (needs\n * to be applied when the editor rendering completes)\n */\nclass QueuedSelection {\n constructor(public readonly anchor: number, public readonly head: number) {}\n}\n\nexport class AceNodeView implements NodeView {\n public readonly getPos: () => number;\n public node: ProsemirrorNode;\n public readonly dom: HTMLElement;\n\n private readonly view: EditorView;\n private readonly ui: EditorUI;\n private readonly nodeViews: AceNodeViews;\n private readonly renderQueue: AceRenderQueue;\n private chunk?: ChunkEditor;\n private aceEditor?: AceAjax.Editor;\n private editSession?: AceAjax.IEditSession;\n private readonly editorOptions: EditorOptions;\n private readonly options: CodeViewOptions;\n private readonly events: EditorEvents;\n\n private updating: boolean;\n private escaping: boolean;\n private gapCursorPending: boolean;\n private mouseDown: boolean;\n private mode: string;\n private findMarkers: number[];\n private selectionMarker: number | null;\n private queuedSelection: QueuedSelection | null;\n private resizeTimer: number;\n private renderedWidth: number;\n private scrollRow: number;\n private cursorDirty: boolean;\n\n private readonly subscriptions: VoidFunction[];\n\n constructor(\n node: ProsemirrorNode,\n view: EditorView,\n getPos: () => number,\n context: ExtensionContext,\n options: CodeViewOptions,\n renderQueue: AceRenderQueue,\n nodeViews: AceNodeViews,\n ) {\n // context\n const ui = context.ui;\n const editorOptions = context.options;\n\n // Store for later\n this.node = node;\n this.view = view;\n this.ui = context.ui;\n this.events = context.events;\n this.getPos = getPos;\n\n // Initialize values\n this.mode = '';\n this.escaping = false;\n this.gapCursorPending = false;\n this.findMarkers = [];\n this.selectionMarker = null;\n this.renderQueue = renderQueue;\n this.nodeViews = nodeViews;\n this.queuedSelection = null;\n this.subscriptions = [];\n this.resizeTimer = 0;\n this.renderedWidth = 0;\n this.scrollRow = -1;\n this.cursorDirty = false;\n this.mouseDown = false;\n\n // options\n this.editorOptions = editorOptions;\n this.options = options;\n\n // The editor's outer node is our DOM representation\n this.dom = document.createElement('div');\n this.dom.classList.add('pm-code-editor');\n this.dom.classList.add('pm-ace-editor');\n this.dom.classList.add('pm-ace-editor-inactive');\n this.dom.classList.add(options.borderColorClass || 'pm-block-border-color');\n if (this.options.classes) {\n this.options.classes.forEach(className => this.dom.classList.add(className));\n }\n\n // Create a preview of the text (will be shown until editor is fully initialized)\n const preview = new AcePlaceholder(node.textContent);\n this.dom.appendChild(preview.getElement());\n\n // Style the first line differently if requested\n if (options.firstLineMeta) {\n this.dom.classList.add('pm-ace-first-line-meta');\n }\n\n // update mode\n this.updateMode();\n\n // observe all editor dispatches\n this.subscriptions.push(\n this.events.subscribe(DispatchEvent, (tr: Transaction | undefined) => {\n if (tr) {\n this.onEditorDispatch(tr);\n }\n }),\n );\n\n // This flag is used to avoid an update loop between the outer and\n // inner editor\n this.updating = false;\n\n if (renderQueue.isRenderCompleted()) {\n // All editors have been rendered and the queue is empty; initialize\n // directly (this happens when e.g., inserting code chunks interactively\n // after the document is fully rendered)\n this.initEditor();\n } else {\n // Rendering is not complete; add to the queue\n renderQueue.add(this);\n }\n\n // add ourselves to the list of all ace node views\n this.nodeViews.add(this);\n }\n\n public destroy() {\n // Unsubscribe from events\n this.subscriptions.forEach(unsub => unsub());\n\n // Clean up attached editor instance when it's removed from the DOM\n if (this.chunk) {\n this.chunk.destroy();\n }\n\n // remove ourselves from the list of all ace node views\n this.nodeViews.remove(this);\n }\n\n public update(node: ProsemirrorNode, _decos: Decoration[]) {\n if (node.type !== this.node.type) {\n return false;\n }\n if (!this.editSession) {\n return false;\n }\n this.node = node;\n this.updateMode();\n\n const AceRange = window.require('ace/range').Range;\n const doc = this.editSession.getDocument();\n\n const change = computeChange(this.editSession.getValue(), node.textContent);\n if (change) {\n this.updating = true;\n const range = AceRange.fromPoints(doc.indexToPosition(change.from, 0), doc.indexToPosition(change.to, 0));\n this.editSession.replace(range, change.text);\n this.updating = false;\n }\n\n // Clear any previously rendered find markers\n this.findMarkers.forEach(id => {\n if (this.editSession) {\n this.editSession.removeMarker(id);\n }\n });\n this.findMarkers = [];\n\n // Get all of the find results inside this node\n const decorations = findPluginState(this.view.state);\n if (decorations) {\n const decos = decorations?.find(this.getPos(), this.getPos() + node.nodeSize - 1);\n\n // If we got results, render them\n if (decos) {\n decos.forEach((deco: any) => {\n if (!this.editSession) {\n return;\n }\n\n // Calculate from/to position for result marker (adjust for zero based column)\n const markerFrom = doc.indexToPosition(deco.from - this.getPos(), 0);\n markerFrom.column--;\n const markerTo = doc.indexToPosition(deco.to - this.getPos(), 0);\n markerTo.column--;\n const range = AceRange.fromPoints(markerFrom, markerTo);\n\n // Create the search result marker and add it to the rendered set\n const markerId = this.editSession.addMarker(range, deco.type.attrs.class, 'result', true);\n this.findMarkers.push(markerId);\n });\n }\n }\n\n return true;\n }\n\n public setSelection(anchor: number, head: number) {\n // We haven't drawn the editor yet, so queue the selection until we can\n // apply it.\n if (!this.aceEditor || !this.editSession) {\n this.queuedSelection = new QueuedSelection(anchor, head);\n return;\n }\n if (!this.escaping && !this.gapCursorPending) {\n this.aceEditor.focus();\n }\n this.updating = true;\n const doc = this.editSession.getDocument();\n const AceRange = window.require('ace/range').Range;\n const range = AceRange.fromPoints(doc.indexToPosition(anchor, 0), doc.indexToPosition(head, 0));\n this.editSession.getSelection().setSelectionRange(range);\n this.updating = false;\n }\n\n public setGapCursorPending(pending: boolean) {\n this.gapCursorPending = pending;\n }\n\n public selectNode() {\n if (this.aceEditor) {\n this.aceEditor.focus();\n }\n }\n\n public stopEvent() {\n return true;\n }\n\n public ignoreMutation(_mutation: MutationRecord | { type: 'selection'; target: Element }) {\n return true;\n }\n\n private onEditorDispatch(tr: Transaction) {\n if (!tr.docChanged && tr.selectionSet) {\n this.highlightSelectionAcross(tr.selection);\n }\n }\n\n private forwardSelection() {\n // ignore if we don't have focus\n if (!this.chunk || !this.chunk.element.contains(window.document.activeElement)) {\n return;\n }\n\n const state = this.view.state;\n const selection = this.asProseMirrorSelection(state.doc);\n if (selection && !selection.eq(state.selection)) {\n this.view.dispatch(state.tr.setSelection(selection));\n }\n }\n\n private asProseMirrorSelection(doc: ProsemirrorNode) {\n if (!this.editSession) {\n return null;\n }\n const offset = this.getPos() + 1;\n const session = this.editSession;\n const range = session.getSelection().getRange();\n const anchor = session.getDocument().positionToIndex(range.start, 0) + offset;\n const head = session.getDocument().positionToIndex(range.end, 0) + offset;\n return TextSelection.create(doc, anchor, head);\n }\n\n // detect the entire editor being selected across, in which case we add an ace marker\n // visually indicating that the text is selected\n private highlightSelectionAcross(selection: Selection) {\n if (!this.aceEditor || !this.editSession) {\n return;\n }\n\n // clear any existing selection marker\n if (this.selectionMarker !== null) {\n this.editSession.removeMarker(this.selectionMarker);\n this.selectionMarker = null;\n }\n\n // check for selection spanning us\n const pos = this.getPos();\n if (selection.from < pos && selection.to > pos + this.node.nodeSize) {\n const doc = this.editSession.getDocument();\n const AceRange = window.require('ace/range').Range;\n const range = AceRange.fromPoints(doc.indexToPosition(0, 0), doc.indexToPosition(this.node.nodeSize - 1, 0));\n this.selectionMarker = this.editSession.addMarker(range, 'pm-selected-text', 'selection', true);\n }\n }\n\n private valueChanged() {\n const change = computeChange(this.node.textContent, this.getContents());\n if (change) {\n // update content\n const start = this.getPos() + 1;\n if (!isNaN(start)) {\n const tr = this.view.state.tr.replaceWith(\n start + change.from,\n start + change.to,\n change.text ? this.node.type.schema.text(change.text) : null,\n );\n this.view.dispatch(tr);\n }\n }\n this.updateMode();\n }\n\n /**\n * Scrolls a child of the editor chunk into view.\n *\n * @param ele The child to scroll.\n */\n private scrollIntoView(ele: HTMLElement) {\n const editingRoot = editingRootNode(this.view.state.selection);\n if (editingRoot) {\n const container = this.view.nodeDOM(editingRoot.pos) as HTMLElement;\n const scroller = zenscroll.createScroller(container);\n\n let top = 0;\n\n // The DOM node representing this editor chunk (this.dom) may not be a\n // direct child of the scrollable container. If it isn't, walk up the DOM\n // tree until we find the main content node (pm-content), which is the\n // offset parent against which we need to compute scroll position.\n let scrollParent = this.dom;\n while (scrollParent.offsetParent != null &&\n !scrollParent.offsetParent.classList.contains(\"pm-content\"))\n {\n top += scrollParent.offsetTop;\n scrollParent = scrollParent.offsetParent as HTMLElement;\n }\n\n // Since the element we want to scroll into view is not a direct child of\n // the scrollable container, do a little math to figure out the\n // destination scroll position.\n top += ele.offsetTop + scrollParent.offsetTop;\n const bottom = top + ele.offsetHeight;\n const viewTop = container.scrollTop;\n const viewBottom = container.scrollTop + container.offsetHeight;\n\n // Scroll based on element's current position and size\n if (top > viewTop && bottom < viewBottom) {\n // Element is already fully contained in the viewport\n return;\n } else if (ele.offsetHeight > container.offsetHeight) {\n // Element is taller than the viewport, so show the first part of it\n scroller.toY(top);\n } else if (top < viewTop) {\n // Element is above viewport, so scroll it into view\n scroller.toY(top);\n } else if (bottom > viewBottom) {\n // Part of the element is beneath the viewport, so scroll just enough to\n // bring it into view\n scroller.toY(container.scrollTop - (viewBottom - bottom));\n }\n }\n }\n\n /**\n * Initializes the editing surface by creating and injecting an Ace editor\n * instance from the host.\n */\n public initEditor() {\n // skip if we're already initialized\n if (this.aceEditor) {\n return;\n }\n\n // call host factory to instantiate editor\n this.chunk = this.ui.chunks.createChunkEditor('ace', this.node.attrs.md_index, {\n getPos: () => this.getPos(),\n scrollIntoView: ele => this.scrollIntoView(ele),\n scrollCursorIntoView: () => this.scrollCursorIntoView(),\n });\n\n // populate initial contents\n this.aceEditor = this.chunk.editor as AceAjax.Editor;\n this.updating = true;\n this.aceEditor.setValue(this.node.textContent);\n this.updating = false;\n\n this.aceEditor.clearSelection();\n\n // cache edit session for convenience; most operations happen on the session\n this.editSession = this.aceEditor.getSession();\n\n // remove the preview and recreate chunk toolbar\n this.dom.innerHTML = '';\n this.dom.appendChild(this.chunk.element);\n\n // Propagate updates from the code editor to ProseMirror\n this.aceEditor.on('changeSelection', () => {\n if (!this.updating) {\n this.forwardSelection();\n }\n });\n this.aceEditor.on('change', () => {\n if (!this.updating) {\n this.valueChanged();\n }\n });\n\n // Forward selection we we receive it\n this.aceEditor.on('focus', () => {\n this.dom.classList.remove('pm-ace-editor-inactive');\n this.forwardSelection();\n });\n\n this.aceEditor.on('blur', () => {\n // Add a class to editor; this class contains CSS rules that hide editor\n // components that Ace cannot hide natively (such as the cursor,\n // matching bracket indicator, and active selection)\n this.dom.classList.add('pm-ace-editor-inactive');\n });\n\n // If the cursor moves and we're in focus, ensure that the cursor is\n // visible. Ace's own cursor visiblity mechanisms don't work in embedded\n // editors.\n this.aceEditor.getSelection().on('changeCursor', () => {\n if (this.dom.contains(document.activeElement) && !this.mouseDown) {\n this.cursorDirty = true;\n }\n });\n\n this.aceEditor.renderer.on('afterRender', () => {\n // If the cursor position is dirty and the mouse is not down, scroll the\n // cursor into view. Don't scroll while the mouse is down, as it will be\n // treated as a click-and-drag by Ace.\n if (this.cursorDirty && !this.mouseDown) {\n this.scrollCursorIntoView();\n this.cursorDirty = false;\n }\n });\n\n // Add custom escape commands for movement keys (left/right/up/down); these\n // will check to see whether the movement should leave the editor, and if\n // so will do so instead of moving the cursor.\n this.aceEditor.commands.addCommand({\n name: 'leftEscape',\n bindKey: 'Left',\n exec: () => {\n this.arrowMaybeEscape('char', -1, 'gotoleft');\n },\n });\n this.aceEditor.commands.addCommand({\n name: 'rightEscape',\n bindKey: 'Right',\n exec: () => {\n this.arrowMaybeEscape('char', 1, 'gotoright');\n },\n });\n this.aceEditor.commands.addCommand({\n name: 'upEscape',\n bindKey: 'Up',\n exec: () => {\n this.arrowMaybeEscape('line', -1, 'golineup');\n },\n });\n this.aceEditor.commands.addCommand({\n name: 'downEscape',\n bindKey: 'Down',\n exec: () => {\n this.arrowMaybeEscape('line', 1, 'golinedown');\n },\n });\n\n // Pressing Backspace in the editor when it's empty should delete it.\n this.aceEditor.commands.addCommand({\n name: 'backspaceDeleteNode',\n bindKey: 'Backspace',\n exec: () => {\n this.backspaceMaybeDeleteNode();\n },\n });\n\n // Handle undo/redo in ProseMirror\n this.aceEditor.commands.addCommand({\n name: 'undoProsemirror',\n bindKey: {\n win: 'Ctrl-Z',\n mac: 'Command-Z',\n },\n exec: () => {\n if (undo(this.view.state, this.view.dispatch)) {\n this.view.focus();\n }\n },\n });\n this.aceEditor.commands.addCommand({\n name: 'redoProsemirror',\n bindKey: {\n win: 'Ctrl-Shift-Z|Ctrl-Y',\n mac: 'Command-Shift-Z|Command-Y',\n },\n exec: () => {\n if (redo(this.view.state, this.view.dispatch)) {\n this.view.focus();\n }\n },\n });\n\n // Handle Select All in ProseMirror\n this.aceEditor.commands.addCommand({\n name: 'selectAllProsemirror',\n bindKey: {\n win: 'Ctrl-A',\n mac: 'Command-A',\n },\n exec: () => {\n if (selectAll(this.view.state, this.view.dispatch, this.view)) {\n this.view.focus();\n }\n },\n });\n\n // Handle shortcuts for moving focus out of the code editor and into\n // ProseMirror\n this.aceEditor.commands.addCommand({\n name: 'exitCodeBlock',\n bindKey: 'Shift-Enter',\n exec: () => {\n if (exitCode(this.view.state, this.view.dispatch)) {\n this.view.focus();\n }\n },\n });\n\n // Create a command for inserting paragraphs from the code editor\n this.aceEditor.commands.addCommand({\n name: 'insertParagraph',\n bindKey: {\n win: 'Ctrl-\\\\',\n mac: 'Command-\\\\',\n },\n exec: () => {\n if (insertParagraph(this.view.state, this.view.dispatch)) {\n this.view.focus();\n }\n },\n });\n\n // Line-by-line execution\n this.aceEditor.commands.addCommand({\n name: 'executeSelection',\n bindKey: {\n win: 'Ctrl-Enter',\n mac: 'Ctrl-Enter|Command-Enter',\n },\n exec: () => {\n if (this.chunk && this.aceEditor) {\n // Record the position prior to execution\n const pos = this.aceEditor.getCursorPosition();\n\n // Execute the selection\n this.chunk.executeSelection();\n\n // If the cursor stayed on the last line, step out of the code block\n // if we're not at the end of the doc (this is a no-op when not on the\n // last line, and mirrors the behavior when stepping past the end of\n // chunks in the code editor)\n if (pos.row === this.aceEditor.getCursorPosition().row) {\n this.arrowMaybeEscape('line', 1);\n }\n }\n },\n });\n\n // If an attribute editor function was supplied, bind it to F4\n if (this.options.attrEditFn) {\n this.aceEditor.commands.addCommand({\n name: 'editAttributes',\n bindKey: 'F4',\n exec: () => {\n this.options.attrEditFn!(this.view.state, this.view.dispatch, this.view);\n },\n });\n }\n\n // Apply editor mode\n if (this.mode) {\n this.chunk.setMode(this.mode);\n }\n\n // Disconnect font metrics system after render loop\n (this.aceEditor.renderer as any).on('afterRender', () => {\n // Update known rendered width\n if (this.chunk) {\n this.renderedWidth = this.chunk.element.offsetWidth;\n }\n\n window.setTimeout(() => {\n if (this.aceEditor) {\n const metrics = (this.aceEditor.renderer as any).$fontMetrics;\n if (metrics && metrics.$observer) {\n metrics.$observer.disconnect();\n }\n }\n }, 0);\n });\n\n // Hook up the container to the render queue\n const editingRoot = editingRootNode(this.view.state.selection)!;\n const container = this.view.nodeDOM(editingRoot.pos) as HTMLElement;\n if (container.parentElement) {\n this.renderQueue.setContainer(container);\n }\n\n // Forward selection, if we have one (this can be set while the editor is\n // waiting to render)\n if (this.queuedSelection) {\n this.setSelection(this.queuedSelection.anchor, this.queuedSelection.head);\n this.queuedSelection = null;\n }\n\n // Subscribe to resize event; will reflow the editor to wrap properly at the\n // new width\n this.subscriptions.push(\n this.events.subscribe(ResizeEvent, () => {\n this.debounceResize();\n }),\n );\n\n // Subscribe to scroll event; invalidates the row we're scrolled to so\n // scrollback will be triggered if necessary (after e.g., typing after\n // scrolling offscreen)\n this.subscriptions.push(\n this.events.subscribe(ScrollEvent, () => {\n this.scrollRow = -1;\n }),\n );\n\n // Keep track of mouse state so we can avoid e.g., autoscrolling while the\n // mouse is down\n this.dom.addEventListener(\"mousedown\", (evt) => {\n this.mouseDown = true;\n });\n this.dom.addEventListener(\"mouseup\", (evt) => {\n this.mouseDown = false;\n });\n this.dom.addEventListener(\"mouseleave\", (evt) => {\n // Treat mouse exit as an up since it will cause us to miss the up event\n this.mouseDown = false;\n });\n }\n\n /**\n * Debounced version of editor resize; ensures we don't aggressively resize\n * while size is still changing.\n */\n private debounceResize() {\n // Clear any previously running resize timer\n if (this.resizeTimer !== 0) {\n window.clearTimeout(this.resizeTimer);\n }\n\n // Create a new resize timer\n this.resizeTimer = window.setTimeout(() => {\n if (this.chunk && this.aceEditor) {\n // If the width we last rendered is different than our current width,\n // trigger an Ace resize event (causes editor to reflow wrapped text)\n if (this.renderedWidth !== this.chunk.element.offsetWidth) {\n this.aceEditor.resize();\n }\n }\n this.resizeTimer = 0;\n }, 500);\n }\n\n private updateMode() {\n // get lang\n const lang = this.options.lang(this.node, this.getContents());\n\n if (lang !== null && this.mode !== lang) {\n if (this.chunk) {\n this.chunk.setMode(lang);\n }\n this.mode = lang;\n }\n }\n\n private backspaceMaybeDeleteNode() {\n // if the node is empty and we execute a backspace then delete the node\n if (this.node.childCount === 0) {\n // if there is an input rule we just executed then use this to undo it\n if (undoInputRule(this.view.state)) {\n undoInputRule(this.view.state, this.view.dispatch);\n this.view.focus();\n } else {\n const tr = this.view.state.tr;\n tr.delete(this.getPos(), this.getPos() + this.node.nodeSize);\n tr.setSelection(TextSelection.near(tr.doc.resolve(this.getPos()), -1));\n this.view.dispatch(tr);\n this.view.focus();\n }\n } else if (this.aceEditor) {\n this.aceEditor.execCommand('backspace');\n }\n }\n\n // Checks to see whether an arrow key should escape the editor or not. If so,\n // sends the focus to the right node; if not, executes the given Ace command\n // (to perform the arrow key's usual action)\n private arrowMaybeEscape(unit: string, dir: number, command?: string) {\n if (!this.aceEditor || !this.editSession) {\n return;\n }\n const pos = this.aceEditor.getCursorPosition();\n const lastrow = this.editSession.getLength() - 1;\n if (\n !this.aceEditor.getSelection().isEmpty() ||\n pos.row !== (dir < 0 ? 0 : lastrow) ||\n (unit === 'char' && pos.column !== (dir < 0 ? 0 : this.editSession.getDocument().getLine(pos.row).length))\n ) {\n // this movement is happening inside the editor itself. don't escape\n // the editor; just execute the underlying command\n if (command) {\n this.aceEditor.execCommand(command);\n }\n return;\n }\n\n // the cursor is about to leave the editor region; flag this to avoid side\n // effects\n this.escaping = true;\n\n // ensure we are focused\n this.view.focus();\n\n // handle arrow key\n handleArrowToAdjacentNode(this.getPos(), dir, this.view.state, this.view.dispatch);\n\n // set focus\n this.view.focus();\n this.escaping = false;\n }\n\n private getContents(): string {\n if (this.editSession) {\n return this.editSession.getValue();\n } else {\n return this.dom.innerText;\n }\n }\n\n /**\n * Ensures that the Ace cursor is visible in the scrollable region of the document.\n */\n private scrollCursorIntoView(): void {\n // No need to try to enforce cursor position if we're already scrolled to\n // this row\n if (this.editSession && this.editSession.getSelection().getCursor().row === this.scrollRow) {\n return;\n }\n\n // Ensure we still have focus before proceeding\n if (this.dom.contains(document.activeElement)) {\n\n // Find the element containing the rendered virtual cursor \n const cursor = this.dom.querySelector(\".ace_cursor\");\n if (cursor === null) {\n return;\n }\n\n // Ace doesn't actually move the cursor but uses CSS translations to\n // make it appear in the right place, so we need to use the somewhat\n // expensive getBoundingClientRect call to get a resolved position.\n // (The alternative would be parse the translate: transform(10px 20px))\n // call from the style property.)\n const editingRoot = editingRootNode(this.view.state.selection)!;\n const container = this.view.nodeDOM(editingRoot.pos) as HTMLElement;\n const containerRect = container.getBoundingClientRect();\n const cursorRect = cursor.getBoundingClientRect();\n\n // Scrolling down?\n const down = cursorRect.bottom + 10 - containerRect.bottom;\n if (down > 0) {\n container.scrollTop += down;\n } else {\n // Scrolling up?\n const up = containerRect.top + 10 - cursorRect.top;\n if (up > 0) {\n container.scrollTop -= up;\n }\n }\n\n // Update cached scroll row so we don't unnecessarily redo these\n // computations\n if (this.editSession) {\n this.scrollRow = this.editSession.getSelection().getCursor().row;\n }\n }\n }\n}\n\nfunction computeChange(oldVal: string, newVal: string) {\n if (oldVal === newVal) {\n return null;\n }\n let start = 0;\n let oldEnd = oldVal.length;\n let newEnd = newVal.length;\n while (start < oldEnd && oldVal.charCodeAt(start) === newVal.charCodeAt(start)) {\n ++start;\n }\n while (oldEnd > start && newEnd > start && oldVal.charCodeAt(oldEnd - 1) === newVal.charCodeAt(newEnd - 1)) {\n oldEnd--;\n newEnd--;\n }\n return {\n from: start,\n to: oldEnd,\n text: newVal.slice(start, newEnd),\n };\n}\n\nfunction arrowHandler(dir: 'up' | 'down' | 'left' | 'right', nodeTypes: string[]) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n if (state.selection.empty && !(state.selection instanceof GapCursor) && view && view.endOfTextblock(dir)) {\n const side = dir === 'left' || dir === 'up' ? -1 : 1;\n const $head = state.selection.$head;\n const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side);\n if (nextPos.$head && nodeTypes.includes(nextPos.$head.parent.type.name)) {\n // check for e.g. math where you can advance across embedded newlines\n if ((dir === 'up' || dir === 'down') && verticalArrowCanAdvanceWithinTextBlock(state.selection, dir)) {\n return false;\n }\n if (dispatch) {\n dispatch(state.tr.setSelection(nextPos));\n }\n return true;\n }\n }\n return false;\n };\n}\n","/*\n * cursor.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorState, Transaction, NodeSelection, Selection } from 'prosemirror-state';\nimport { GapCursor } from 'prosemirror-gapcursor';\n\nexport function handleArrowToAdjacentNode(\n nodePos: number,\n dir: number,\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n): boolean {\n // resolve the node and position\n const node = state.doc.nodeAt(nodePos);\n if (!node) {\n return false;\n }\n const $pos = state.doc.resolve(nodePos);\n\n // helpers to figure out the nature of prev/next nodes\n const prevNodeSelectable = () => {\n return $pos.nodeBefore && $pos.nodeBefore.type.spec.selectable;\n };\n const nextNodeSelectable = () => {\n const nextNode = state.doc.nodeAt(nodePos + node.nodeSize);\n return nextNode?.type.spec.selectable;\n };\n const prevNodeTextBlock = () => {\n return $pos.nodeBefore && $pos.nodeBefore.isTextblock;\n };\n const nextNodeTextBlock = () => {\n const nextNode = state.doc.nodeAt(nodePos + node.nodeSize);\n return nextNode?.isTextblock;\n };\n const prevNodeCode = () => {\n return $pos.nodeBefore && !!$pos.nodeBefore.type.spec.code;\n };\n const nextNodeCode = () => {\n const nextNode = state.doc.nodeAt(nodePos + node.nodeSize);\n return !!nextNode?.type.spec.code;\n };\n\n // see if we can get a new selection\n const tr = state.tr;\n let selection: Selection | undefined;\n\n // if we are going backwards and there is no previous position, then return a gap cursor\n if (dir < 0 && !$pos.nodeBefore) {\n selection = new GapCursor(tr.doc.resolve(nodePos), tr.doc.resolve(nodePos));\n\n // if we are going forwards and there is no next position, then return a gap cursor\n } else if (dir > 0 && !$pos.nodeAfter) {\n const cursorPos = nodePos + node.nodeSize;\n selection = new GapCursor(tr.doc.resolve(cursorPos), tr.doc.resolve(cursorPos));\n\n // if we are going backwards and the previous node can take node selections then select it\n } else if (dir < 0 && prevNodeSelectable()) {\n const prevNodePos = nodePos - $pos.nodeBefore!.nodeSize;\n selection = NodeSelection.create(tr.doc, prevNodePos);\n\n // if we are going forwards and the next node can take node selections then select it\n } else if (dir >= 0 && nextNodeSelectable()) {\n const nextNodePos = nodePos + node.nodeSize;\n selection = NodeSelection.create(tr.doc, nextNodePos);\n\n // if we are going backwards and the previous node is not a text block then create a gap cursor\n } else if (dir < 0 && (!prevNodeTextBlock() || prevNodeCode())) {\n selection = new GapCursor(tr.doc.resolve(nodePos), tr.doc.resolve(nodePos));\n\n // if we are going forwards and the next node is not a text block then create a gap cursor\n } else if (dir >= 0 && (!nextNodeTextBlock() || nextNodeCode())) {\n const endPos = nodePos + node.nodeSize;\n selection = new GapCursor(tr.doc.resolve(endPos), tr.doc.resolve(endPos));\n\n // otherwise use text selection handling (handles forward/backward text selections)\n } else {\n const targetPos = nodePos + (dir < 0 ? 0 : node.nodeSize);\n const targetNode = tr.doc.nodeAt(targetPos);\n if (targetNode) {\n selection = Selection.near(tr.doc.resolve(targetPos), dir);\n }\n }\n\n if (selection) {\n if (dispatch) {\n tr.setSelection(selection);\n dispatch(tr);\n }\n return true;\n } else {\n return false;\n }\n}\n","/*\n * ace-render-queue.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { AceNodeView } from './ace';\nimport { EditorEvents } from '../../api/events';\nimport { ScrollEvent, UpdateEvent } from '../../api/event-types';\n\n/**\n * Represents a queue of Ace editor instances that are rendered asynchronously.\n */\nexport class AceRenderQueue {\n private readonly renderQueue: AceNodeView[] = [];\n\n private renderCompleted: boolean = false;\n private renderTimer: number = 0;\n private updateTimer: number = 0;\n private container?: HTMLElement;\n private needsSort: boolean = true;\n private bypass: number = 5;\n private observer?: IntersectionObserver;\n private visible: boolean = true;\n private readonly subscriptions: VoidFunction[] = [];\n\n constructor(private events: EditorEvents) {\n // Begin listening for scroll and update events so we can manage the queue\n // accordingly\n this.subscriptions.push(\n events.subscribe(ScrollEvent, () => {\n this.onScroll();\n }),\n );\n this.subscriptions.push(\n events.subscribe(UpdateEvent, () => {\n this.onUpdate();\n }),\n );\n }\n\n /**\n * Sets (or replaces) the scroll container hosting the render queue. The\n * scroll container is used to prioritize the queue (i.e. objects in the\n * viewport or close to it are to be given more priority).\n *\n * @param container The HTML element of the scroll container\n */\n public setContainer(container: HTMLElement) {\n // Skip if we're already looking at this container\n if (this.container === container) {\n return;\n }\n\n // Clean up observer on any previous container\n if (this.observer) {\n this.observer.disconnect();\n }\n\n // Save reference to container\n this.container = container;\n\n // Create intersection observer to ensure that we don't needlessly churn\n // through renders while offscreen.\n this.observer = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n for (const entry of entries) {\n if (entry.isIntersecting && !this.visible) {\n // We just became visible; process the render queue now.\n this.visible = true;\n this.processRenderQueue();\n }\n if (!entry.isIntersecting && this.visible) {\n // We just lost visibility; end processing of the render queue. (Note\n // that we only do this when connected to the DOM as another reason\n // the element can become invisible is ProseMirror swapping it out\n // internally.)\n if (this.container?.parentElement) {\n this.visible = false;\n this.cancelTimer();\n }\n }\n }\n },\n {\n root: null,\n },\n );\n\n // Begin observing intersection events in container\n this.observer.observe(container);\n }\n\n /**\n * Invoke when the editor surface is scrolled\n */\n private onScroll() {\n // Whenever a scroll event occurs, we need to re-sort the queue so that\n // objects in or closest to the viewport are given priority.\n this.needsSort = true;\n\n // If we don't think we're visible but we're scrolling and have height,\n // then we are in fact visible. (This catches a case where the\n // intsersection observer created below doesn't fire for visiblity\n // changes.)\n if (!this.visible && this.container && this.container.offsetHeight > 0) {\n this.visible = true;\n this.processRenderQueue();\n }\n }\n\n /**\n * Invoke when the document has changed\n */\n private onUpdate() {\n // Debounce update timer. This timer is used to prevent the CPU intensive\n // editor rendering from happening while the user is actively updating the\n // document.\n if (this.updateTimer !== 0) {\n window.clearTimeout(this.updateTimer);\n }\n this.updateTimer = window.setTimeout(() => {\n this.updateTimer = 0;\n // Process queue immediately if we have one\n this.scheduleRender(0);\n }, 1000);\n }\n\n /**\n * Indicates whether the render queue has a scroll container defined\n */\n public hasContainer(): boolean {\n if (this.container) {\n return true;\n }\n return false;\n }\n\n /**\n * Indicates whether the rendering is finished.\n */\n public isRenderCompleted(): boolean {\n return this.renderCompleted;\n }\n\n /**\n * Adds a node view to the render queue\n */\n public add(view: AceNodeView) {\n // We allow the first few code blocks to render synchronously instead of\n // being dumped into the queue for later processing. This slightly increases\n // startup time but prevents the flicker that would otherwise occur as\n // editors render one by one.\n if (this.bypass > 0) {\n this.bypass--;\n view.initEditor();\n return;\n }\n\n this.renderQueue.push(view);\n\n // Defer/debounce rendering of editors until event loop finishes\n if (this.renderTimer === 0) {\n this.scheduleRender(0);\n }\n }\n\n /**\n * Processes the queue of editor instances that need to be rendered.\n */\n private processRenderQueue() {\n // No work to do if queue is empty\n if (this.renderQueue.length === 0) {\n return;\n }\n\n // Don't render while hidden; it wastes resources plus can result in\n // incorrect sizing calculations\n if (!this.visible) {\n return;\n }\n\n // Don't render while the user is actively updating the document (it makes\n // the interface sluggish)\n if (this.updateTimer !== 0) {\n return;\n }\n\n // Compute offset for sorting (based on scroll position)\n let offset = 0;\n if (this.container) {\n offset = this.container.scrollTop;\n }\n\n // Sort the queue if required\n if (this.needsSort) {\n // Sort the render queue based on distance from the top of the viewport\n this.renderQueue.sort((a, b) => {\n return Math.abs(a.dom.offsetTop - offset) - Math.abs(b.dom.offsetTop - offset);\n });\n\n // Clear flag so we don't sort the queue on every render\n this.needsSort = false;\n }\n\n // Pop the next view (editor instance) to be rendered off the stack.\n // Fast-forward past instances that no longer have a position; these can\n // accumulate when NodeViews are added to the render queue but replaced\n // (by a document rebuild) before they have a chance to render.\n let view: AceNodeView | undefined;\n while ((view === null || view === undefined || view.getPos() === undefined) &&\n this.renderQueue.length > 0) {\n view = this.renderQueue.shift();\n }\n\n // Render this view\n if (view) {\n view.initEditor();\n }\n\n if (this.renderQueue.length > 0) {\n // There are still remaining editors to be rendered, so process again on\n // the next event loop.\n //\n // If these editors are near the viewport, render them as soon as\n // possible; otherwise, let the render proceed at a slower pace to\n // increase responsiveness.\n let delayMs = 1000;\n if (this.container) {\n const distance = Math.abs(this.renderQueue[0].dom.offsetTop - offset);\n if (distance < this.container.offsetHeight * 2) {\n // Container is near the viewport, so render it ASAP\n delayMs = 0;\n }\n }\n this.scheduleRender(delayMs);\n } else {\n // No remaining editors; we're done.\n this.renderCompleted = true;\n this.destroy();\n }\n }\n\n /**\n * Cancels the timer that is responsible for triggering the processing of the\n * next unit in the render queue.\n */\n private cancelTimer() {\n if (this.renderTimer !== 0) {\n window.clearTimeout(this.renderTimer);\n this.renderTimer = 0;\n }\n }\n\n /**\n * Reschedules a pending render, or schedules a new one.\n */\n private scheduleRender(delayMs: number) {\n this.cancelTimer();\n this.renderTimer = window.setTimeout(() => {\n this.processRenderQueue();\n this.renderTimer = 0;\n }, delayMs);\n }\n\n /**\n * Cleans up the render queue instance\n */\n private destroy() {\n // Cancel any pending renders\n this.cancelTimer();\n\n // Clear any pending update timer\n if (this.updateTimer !== 0) {\n window.clearTimeout(this.updateTimer);\n }\n\n // Remove event subscriptions\n this.subscriptions.forEach(unsub => unsub());\n\n // Clean up resize observer\n if (this.observer) {\n this.observer.disconnect();\n }\n }\n}\n","/*\n * ace-placeholder.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\n/**\n * Represents a placeholder (preview) rendering of an Ace editor. Since Ace\n * editors are somewhat expensive to draw, this placeholder is used in place\n * of a real editor instance to make code visible and allow for correct height\n * computations.\n */\nexport class AcePlaceholder {\n private readonly element: HTMLElement;\n\n constructor(content: string) {\n const ele = document.createElement('pre');\n ele.innerText = content;\n ele.className = 'ace_editor';\n this.element = ele;\n }\n\n public getElement() {\n return this.element;\n }\n}\n","/*\n * ace-node-views.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { GapCursor } from 'prosemirror-gapcursor';\nimport { AceNodeView } from './ace';\nimport { EditorView } from 'prosemirror-view';\n\n/**\n * Track all Ace node view instances to implement additional behavior\n * (e.g. gap cursor for clicks between editor instances)\n */\n\nexport class AceNodeViews {\n private nodeViews: AceNodeView[];\n\n constructor() {\n this.nodeViews = [];\n }\n public add(nodeView: AceNodeView) {\n this.nodeViews.push(nodeView);\n }\n\n public remove(nodeView: AceNodeView) {\n const index = this.nodeViews.indexOf(nodeView);\n if (index >= 0) {\n this.nodeViews.splice(index, 1);\n }\n }\n\n public handleClick(view: EditorView, event: Event): boolean {\n // alias to mouseEvent\n const mouseEvent = event as MouseEvent;\n\n // see if the click is between 2 contiguously located node views\n for (const nodeView of this.nodeViews) {\n // gap cursor we might detect\n let gapCursor: GapCursor | null = null;\n\n // get the position\n const pos = nodeView.getPos();\n const $pos = view.state.doc.resolve(pos);\n\n // if the previous node is code, see if the click is between the 2 nodes\n if ($pos.nodeBefore && $pos.nodeBefore.type.spec.code) {\n // get our bounding rect\n const dom = nodeView.dom;\n const nodeViewRect = dom.getBoundingClientRect();\n\n // get the previous node's bounding rect\n const prevNodePos = pos - $pos.nodeBefore!.nodeSize;\n const prevNodeView = this.nodeViews.find(nv => nv.getPos() === prevNodePos);\n if (prevNodeView) {\n const prevNodeRect = prevNodeView.dom.getBoundingClientRect();\n\n // check for a click between the two nodes\n const mouseY = mouseEvent.clientY;\n if (mouseY > prevNodeRect.top + prevNodeRect.height && mouseY < nodeViewRect.top) {\n gapCursor = new GapCursor($pos, $pos);\n }\n }\n\n // if there is no previous node and the click is above us then gap cursor above\n // (only do this if the cursor is within 150 pixels of the left edge)\n } else if (\n !$pos.nodeBefore &&\n $pos.depth === 1 &&\n mouseEvent.clientY < nodeView.dom.getBoundingClientRect().top &&\n Math.abs(mouseEvent.clientX - nodeView.dom.getBoundingClientRect().left) < 150\n ) {\n gapCursor = new GapCursor($pos, $pos);\n }\n\n // return gapCursor if we found one\n if (gapCursor) {\n const tr = view.state.tr;\n\n // notify the node views that we are setting a gap cursor\n this.nodeViews.forEach(ndView => ndView.setGapCursorPending(true));\n\n // ensure the view is focused\n view.focus();\n\n // set the selection\n tr.setSelection(gapCursor);\n view.dispatch(tr);\n\n // notify the node views that we are done setting the gap cursor\n this.nodeViews.forEach(ndView => ndView.setGapCursorPending(false));\n\n // prevent default event handling\n event.preventDefault();\n event.stopImmediatePropagation();\n return true;\n }\n }\n\n return false;\n }\n}\n","/*\n * attr_edit.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema } from 'prosemirror-model';\n\nimport { EditorUI } from '../../api/ui';\nimport { pandocAttrEnabled } from '../../api/pandoc_attr';\n\nimport { AttrEditCommand } from './attr_edit-command';\nimport { AttrEditOptions } from '../../api/attr_edit';\nimport { PandocExtensions } from '../../api/pandoc';\nimport { AttrEditDecorationPlugin } from './attr_edit-decoration';\nimport { Extension } from '../../api/extension';\nimport { hasFencedCodeBlocks } from '../../api/pandoc_format';\n\nexport const kEditAttrShortcut = 'F4';\n\nexport function attrEditExtension(\n pandocExtensions: PandocExtensions,\n ui: EditorUI,\n editors: AttrEditOptions[],\n): Extension {\n const hasAttr = pandocAttrEnabled(pandocExtensions) || hasFencedCodeBlocks(pandocExtensions);\n\n return {\n commands: (_schema: Schema) => {\n if (hasAttr) {\n return [new AttrEditCommand(ui, pandocExtensions, editors)];\n } else {\n return [];\n }\n },\n\n plugins: (_schema: Schema) => {\n if (hasAttr) {\n return [new AttrEditDecorationPlugin(ui, pandocExtensions, editors)];\n } else {\n return [];\n }\n },\n };\n}\n","/*\n * attr_edit-command.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorState, Transaction, NodeSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { Mark, Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport { findParentNodeOfType, NodeWithPos } from 'prosemirror-utils';\n\nimport { EditorUI } from '../../api/ui';\nimport { pandocAttrInSpec } from '../../api/pandoc_attr';\nimport { getSelectionMarkRange } from '../../api/mark';\nimport { EditorCommandId, ProsemirrorCommand } from '../../api/command';\n\nimport { kEditAttrShortcut } from './attr_edit';\nimport { AttrEditOptions } from '../../api/attr_edit';\nimport { pandocAutoIdentifier, gfmAutoIdentifier } from '../../api/pandoc_id';\nimport { PandocExtensions } from '../../api/pandoc';\nimport { fragmentText } from '../../api/fragment';\n\nexport class AttrEditCommand extends ProsemirrorCommand {\n constructor(ui: EditorUI, pandocExtensions: PandocExtensions, editors: AttrEditOptions[]) {\n super(EditorCommandId.AttrEdit, [kEditAttrShortcut], attrEditCommandFn(ui, pandocExtensions, editors));\n }\n}\n\nexport function attrEditCommandFn(\n ui: EditorUI, \n pandocExtensions: PandocExtensions, \n editors: AttrEditOptions[]\n) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n // see if there is an active mark with attrs or a parent node with attrs\n const marks = state.storedMarks || state.selection.$head.marks();\n const mark = marks.find((m: Mark) => pandocAttrInSpec(m.type.spec));\n\n let node: ProsemirrorNode | null = null;\n let pos: number = 0;\n // node selection of node with attributes\n if (state.selection instanceof NodeSelection && pandocAttrInSpec(state.selection.node.type.spec)) {\n node = state.selection.node;\n pos = state.selection.$anchor.pos;\n } else {\n // selection inside node with editable attributes\n const nodeTypes = editors.map(editor => editor.type(state.schema));\n const parentWithAttrs = findParentNodeOfType(nodeTypes)(state.selection);\n if (parentWithAttrs) {\n node = parentWithAttrs.node;\n pos = parentWithAttrs.pos;\n }\n }\n\n // return false (disabled) for no targets\n if (!mark && !node) {\n return false;\n }\n\n // if this is a node and we have a custom attribute editor then just delegate to that\n if (node) {\n const editor = editors.find(ed => ed.type(state.schema) === node!.type)!;\n if (editor && editor.editFn) {\n return editor.editFn()(state, dispatch, view);\n }\n }\n\n // edit attributes\n async function asyncEditAttrs() {\n if (dispatch) {\n if (mark) {\n await editMarkAttrs(mark, state, dispatch, ui);\n } else {\n await editNodeAttrs(node!, pos, state, dispatch, ui, pandocExtensions);\n }\n if (view) {\n view.focus();\n }\n }\n }\n asyncEditAttrs();\n\n // return true\n return true;\n };\n}\n\nexport function attrEditNodeCommandFn(nodeWithPos: NodeWithPos, \n ui: EditorUI, \n pandocExtensions: PandocExtensions, \n editors: AttrEditOptions[]) {\n \n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\n\n // alias\n const { node, pos } = nodeWithPos;\n\n // registered editor\n const editor = editors.find(ed => ed.type(state.schema) === node!.type)!;\n if (editor && editor.editFn) {\n return editor.editFn()(state, dispatch, view);\n }\n\n // generic editor\n async function asyncEditAttrs() {\n if (dispatch) {\n await editNodeAttrs(node!, pos, state, dispatch, ui, pandocExtensions);\n if (view) {\n view.focus();\n }\n }\n }\n asyncEditAttrs();\n\n // return true\n return true;\n };\n}\n\nasync function editMarkAttrs(\n mark: Mark,\n state: EditorState,\n dispatch: (tr: Transaction) => void,\n ui: EditorUI,\n): Promise {\n const attrs = mark.attrs;\n const markType = mark.type;\n const result = await ui.dialogs.editAttr({ ...attrs });\n if (result) {\n const tr = state.tr;\n const range = getSelectionMarkRange(state.selection, markType);\n tr.removeMark(range.from, range.to, markType);\n tr.addMark(\n range.from,\n range.to,\n markType.create({\n ...attrs,\n ...result.attr,\n }),\n );\n dispatch(tr);\n }\n}\n\nasync function editNodeAttrs(\n node: ProsemirrorNode,\n pos: number,\n state: EditorState,\n dispatch: (tr: Transaction) => void,\n ui: EditorUI,\n pandocExtensions: PandocExtensions,\n): Promise {\n const attrs = node.attrs;\n const result = await ui.dialogs.editAttr({ ...attrs }, idHint(node, pandocExtensions));\n if (result) {\n dispatch(\n state.tr.setNodeMarkup(pos, node.type, {\n ...attrs,\n ...result.attr,\n }),\n );\n }\n}\n\nfunction idHint(node: ProsemirrorNode, pandocExtensions: PandocExtensions) {\n if (node.type === node.type.schema.nodes.heading) {\n const unemoji = pandocExtensions.gfm_auto_identifiers;\n const text = fragmentText(node.content, unemoji);\n\n if (pandocExtensions.gfm_auto_identifiers) {\n return gfmAutoIdentifier(text, pandocExtensions.ascii_identifiers);\n } else {\n return pandocAutoIdentifier(text, pandocExtensions.ascii_identifiers);\n }\n } else {\n return undefined;\n }\n}\n","/*\n * attr_edit-decoration.tsx\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Plugin, PluginKey, Transaction, EditorState } from 'prosemirror-state';\nimport { DecorationSet, EditorView, Decoration } from 'prosemirror-view';\n\nimport * as React from 'react';\n\nimport { EditorUI } from '../../api/ui';\nimport { AttrEditOptions } from '../../api/attr_edit';\nimport { ImageButton } from '../../api/widgets/button';\nimport { CommandFn } from '../../api/command';\nimport { AttrProps } from '../../api/ui-dialogs';\nimport { WidgetProps, reactRenderForEditorView } from '../../api/widgets/react';\nimport { PandocExtensions } from '../../api/pandoc';\n\nimport { kEditAttrShortcut } from './attr_edit';\nimport { attrEditNodeCommandFn } from './attr_edit-command';\n\nimport './attr_edit-decoration.css';\n\ninterface AttrEditDecorationProps extends WidgetProps {\n tags: string[];\n attrs: AttrProps;\n editFn: CommandFn;\n view: EditorView;\n ui: EditorUI;\n}\n\nconst AttrEditDecoration: React.FC = props => {\n const buttonTitle = `${props.ui.context.translateText('Edit Attributes')} (${kEditAttrShortcut})`;\n\n const onClick = () => {\n props.editFn(props.view.state, props.view.dispatch, props.view);\n };\n\n return (\n
\n {props.tags.length\n ? props.tags.map(tag => {\n return (\n \n {tag}\n \n );\n })\n : null}\n {props.editFn(props.view.state) ? (\n \n ) : null}\n
\n );\n};\n\nconst key = new PluginKey('attr_edit_decoration');\n\nexport class AttrEditDecorationPlugin extends Plugin {\n constructor(ui: EditorUI, pandocExtensions: PandocExtensions, editors: AttrEditOptions[]) {\n super({\n key,\n state: {\n init: (_config: { [key: string]: any }) => {\n return DecorationSet.empty;\n },\n apply: (tr: Transaction, old: DecorationSet, _oldState: EditorState, newState: EditorState) => {\n // node types\n const schema = newState.schema;\n const nodeTypes = editors.map(ed => ed.type(schema));\n\n // decorations to return\n const decorations: Decoration[] = [];\n\n // start from current selection\n const $head = tr.selection.$head;\n\n for (let i=1; i<=$head.depth; i++) {\n\n const parentWithAttrs = { node: $head.node(i), pos: $head.before(i) };\n if (!nodeTypes.includes(parentWithAttrs.node.type)) {\n continue;\n }\n\n // get editor\n const editor = editors.find(ed => ed.type(schema) === parentWithAttrs.node.type)!;\n\n // screen for noDecorator\n if (editor.noDecorator) {\n continue;\n }\n\n // provide some editor defaults\n editor.tags =\n editor.tags ||\n (editorNode => {\n const attrTags = [];\n if (editorNode.attrs.id) {\n attrTags.push(`#${editorNode.attrs.id}`);\n }\n if (editorNode.attrs.classes && editorNode.attrs.classes.length) {\n attrTags.push(`${editorNode.attrs.classes.map((clz: string) => '.' + clz).join(' ')}`);\n }\n return attrTags;\n });\n editor.offset = editor.offset || { top: 0, right: 0 };\n\n // get editFn\n const editFn = (editorUI: EditorUI) => attrEditNodeCommandFn(parentWithAttrs, editorUI, pandocExtensions, editors);\n\n // get attrs/tags\n const node = parentWithAttrs.node;\n const attrs = node.attrs;\n const tags = editor.tags(node);\n\n // attr_edit controls\n const attrEditDecoration = Decoration.widget(\n parentWithAttrs.pos,\n (view: EditorView, getPos: () => number) => {\n // does the offsetParent have any right padding we need to offset for?\n // we normally use right: 5px for positioning but that is relative to\n // the edge of the offsetParent. However, some offset parents (e.g. a\n // td or a nested div) have their own internal padding to account for\n // so we look for it here\n let rightPaddingOffset = 0;\n const attrsNode = view.nodeDOM(getPos());\n if (attrsNode) {\n const attrsEl = attrsNode as HTMLElement;\n if (attrsEl.offsetParent) {\n const offsetParentStyle = window.getComputedStyle(attrsEl.offsetParent);\n rightPaddingOffset = -parseInt(offsetParentStyle.paddingRight!, 10) || 0;\n }\n }\n\n // cacculate position offsets\n const baseOffset = editor.offset || { top: 0, right: 0 };\n const xOffset = baseOffset.right + rightPaddingOffset;\n const yOffset = baseOffset.top + 6;\n const cssProps: React.CSSProperties = {\n transform: `translate(${xOffset}px,-${yOffset}px)`,\n };\n\n // create attr edit react component\n const attrEdit = (\n \n );\n\n // create decorator and render attr editor into it\n const decoration = window.document.createElement('div');\n reactRenderForEditorView(attrEdit, decoration, view);\n\n return decoration;\n },\n {\n // re-use existing instance for same tags\n key: `tags:${tags.join('/')}`,\n ignoreSelection: true,\n stopEvent: () => {\n return true;\n },\n },\n );\n\n decorations.push(attrEditDecoration);\n }\n\n \n // return decorations\n return DecorationSet.create(tr.doc, decorations);\n },\n },\n props: {\n decorations: (state: EditorState) => {\n return key.getState(state);\n },\n },\n });\n }\n}\n","/*\n * editor-theme.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nexport interface EditorTheme {\n darkMode: boolean;\n solarizedMode: boolean;\n cursorColor: string;\n selectionColor: string;\n nodeSelectionColor: string;\n backgroundColor: string;\n metadataBackgroundColor: string;\n chunkBackgroundColor: string;\n spanBackgroundColor: string;\n divBackgroundColor: string;\n commentColor: string;\n commentBackgroundColor: string;\n gutterBackgroundColor: string;\n gutterTextColor: string;\n textColor: string;\n lightTextColor: string;\n placeholderTextColor: string;\n invisibleTextColor: string;\n linkTextColor: string;\n surfaceWidgetTextColor: string;\n markupTextColor: string;\n findTextBackgroundColor: string;\n findTextBorderColor: string;\n borderBackgroundColor: string;\n blockBorderColor: string;\n focusOutlineColor: string;\n paneBorderColor: string;\n fixedWidthFont: string;\n fixedWidthFontSizePt: number;\n proportionalFont: string;\n proportionalFontSizePt: number;\n code: CodeTheme;\n}\n\nexport interface CodeTheme {\n keywordColor: string;\n atomColor: string;\n numberColor: string;\n variableColor: string;\n defColor: string;\n operatorColor: string;\n commentColor: string;\n stringColor: string;\n metaColor: string;\n builtinColor: string;\n bracketColor: string;\n tagColor: string;\n attributeColor: string;\n hrColor: string;\n linkColor: string;\n errorColor: string;\n}\n\nexport function defaultTheme(): EditorTheme {\n return {\n darkMode: false,\n solarizedMode: false,\n cursorColor: 'black',\n selectionColor: '#8cf',\n nodeSelectionColor: 'rgb(102,155,243)',\n backgroundColor: 'white',\n metadataBackgroundColor: 'rgb(255, 255, 255)',\n chunkBackgroundColor: 'rgb(251,251,251)',\n spanBackgroundColor: '#fff8dc',\n divBackgroundColor: 'rgb(243, 243, 243)',\n commentColor: '#3c4c72',\n commentBackgroundColor: '#FFECCB',\n gutterBackgroundColor: '#f0f0f0',\n gutterTextColor: '#333',\n textColor: 'black',\n surfaceWidgetTextColor: 'rgba(0,0,0,0.5)',\n lightTextColor: 'rgb(60, 76, 114)',\n linkTextColor: '#106ba3',\n placeholderTextColor: 'gray',\n invisibleTextColor: 'rgb(191, 191, 191)',\n markupTextColor: 'rgb(185, 6, 144)',\n findTextBackgroundColor: 'rgb(250, 250, 255)',\n findTextBorderColor: 'rgb(200, 200, 250)',\n borderBackgroundColor: '#ddd',\n blockBorderColor: '#ddd',\n focusOutlineColor: '#5d84cd',\n paneBorderColor: 'silver',\n fixedWidthFont: 'monospace, monospace',\n fixedWidthFontSizePt: 9,\n proportionalFont: '\"Lucida Sans\", \"DejaVu Sans\", \"Lucida Grande\", \"Segoe UI\", Verdana, Helvetica, sans-serif',\n proportionalFontSizePt: 10,\n code: {\n keywordColor: 'rgb(0, 0, 255)',\n atomColor: 'rgb(88, 92, 246)',\n numberColor: 'rgb(0, 0, 205)',\n variableColor: 'rgb(0, 0, 0)',\n defColor: 'rgb(0, 0, 0)',\n operatorColor: 'rgb(104, 118, 135)',\n commentColor: 'rgb(76, 136, 107)',\n stringColor: 'rgb(3, 106, 7)',\n metaColor: 'rgb(0, 0, 0)',\n builtinColor: 'rgb(0, 0, 0)',\n bracketColor: 'rgb(104, 118, 135)',\n tagColor: 'rgb(0, 22, 142)',\n attributeColor: 'rgb(0, 0, 0)',\n hrColor: 'rgb(0, 0, 0)',\n linkColor: 'rgb(0, 0, 255)',\n errorColor: 'rgb(197, 6, 11)',\n },\n };\n}\n\nexport function applyTheme(theme: EditorTheme) {\n // merge w/ defaults\n const defaults = defaultTheme();\n theme = {\n ...defaults,\n ...theme,\n code: {\n ...defaults.code,\n ...theme.code,\n },\n };\n\n // generate theme css\n const themeCss = `\n .pm-default-theme .pm-background-color {\n background-color: ${defaults.backgroundColor} !important;\n }\n .pm-default-theme .pm-text-color {\n color: ${defaults.textColor} !important;\n }\n .pm-default-theme .pm-border-background-color {\n background-color: ${defaults.borderBackgroundColor} !important;\n }\n .pm-default-theme .pm-input-text {\n border-color: ${defaults.paneBorderColor} !important\n }\n .pm-default-theme .pm-block-border-color {\n border-color: ${defaults.blockBorderColor} !important;\n }\n .pm-default-theme .pm-input-outline-button {\n color: ${defaults.textColor};\n border-color: ${defaults.textColor};\n background-color: ${defaults.backgroundColor};\n }\n .pm-default-theme .pm-selected-navigation-tree-item {\n background-color: ${defaults.findTextBackgroundColor} !important;\n border-color: ${defaults.findTextBorderColor} !important;\n }\n .pm-default-theme .pm-navigation-tree-item {\n border-color: ${defaults.backgroundColor} !important;\n }\n .pm-default-theme .pm-block-border-color {\n border-color: ${defaults.blockBorderColor} !important;\n }\n .pm-default-theme .pm-focus-outline-color {\n border-color: ${defaults.focusOutlineColor} !important;\n }\n .pm-default-theme .pm-input-button {\n border-color: ${defaults.borderBackgroundColor};\n background-color: ${defaults.backgroundColor};\n }\n .pm-default-theme .pm-placeholder-text-color {\n color: ${defaults.placeholderTextColor} !important;\n }\n .pm-default-theme .pm-background-color *::selection {\n background-color: ${defaults.selectionColor} !important;\n }\n .pm-default-theme .pm-find-text,\n .pm-default-theme .pm-list-item-selected,\n .pm-default-theme .pm-grid-item-selected {\n background-color: ${defaults.findTextBackgroundColor} !important;\n box-shadow: 0 0 0 1px ${defaults.findTextBorderColor}; \n border-radius: 3px;\n }\n .pm-default-theme .pm-rstudio-button {\n border-color: DarkGray !important;\n }\n .pm-cursor-color {\n caret-color: ${theme.cursorColor}\n }\n .pm-background-color {\n background-color: ${theme.backgroundColor} !important;\n }\n .pm-metadata-background-color {\n background-color: ${theme.metadataBackgroundColor} !important;\n }\n .pm-chunk-background-color {\n background-color: ${theme.chunkBackgroundColor} !important;\n }\n .pm-span-background-color {\n background-color: ${theme.spanBackgroundColor} !important;\n }\n .pm-div-background-color {\n background-color: ${theme.divBackgroundColor} !important;\n }\n .pm-nbsp-background-color {\n background-color: ${theme.spanBackgroundColor} !important;\n }\n .pm-comment-color {\n color: ${theme.commentColor} !important;\n }\n .pm-comment-background-color {\n background-color: ${theme.commentBackgroundColor} !important;\n }\n .pm-text-color {\n color: ${theme.textColor} !important;\n }\n .pm-surface-widget-text-color {\n color: ${theme.surfaceWidgetTextColor} !important;\n }\n .pm-light-text-color {\n color: ${theme.lightTextColor} !important;\n }\n .pm-placeholder-text-color {\n color: ${theme.placeholderTextColor} !important;\n }\n .pm-invisible-text-color {\n color: ${theme.invisibleTextColor} !important;\n }\n .pm-link-text-color {\n color: ${theme.linkTextColor} !important;\n }\n .pm-markup-text-color {\n color: ${theme.markupTextColor} !important;\n }\n .pm-find-text,\n .pm-list-item-selected,\n .pm-grid-item-selected {\n background-color: ${theme.findTextBackgroundColor} !important;\n box-shadow: 0 0 0 1px ${theme.findTextBorderColor}; \n border-radius: 3px;\n }\n .pm-selected-text {\n background-color: ${theme.selectionColor} !important;\n }\n .pm-selected-list-item {\n background-color: ${theme.findTextBackgroundColor} !important;\n border: 1px solid ${theme.findTextBorderColor} !important;\n border-radius: 3px;\n }\n .pm-dark-mode .pm-selected-list-item {\n background-color: ${theme.chunkBackgroundColor} !important;\n border: 1px solid transparent !important;\n }\n .pm-navigation-tree-item {\n border: 1px solid ${theme.backgroundColor} !important;\n border-radius: 3px;\n margin-left: 2px;\n margin-right: 2px;\n }\n .pm-selected-navigation-tree-item {\n background-color: ${theme.findTextBackgroundColor} !important;\n border: 1px solid ${theme.findTextBorderColor} !important;\n border-radius: 3px;\n margin-left: 2px;\n margin-right: 2px;\n }\n .pm-border-background-color {\n background-color: ${theme.borderBackgroundColor}!important;\n }\n .pm-block-border-color {\n border-color: ${theme.blockBorderColor} !important;\n }\n .pm-focus-outline-color {\n border-color: ${theme.focusOutlineColor} !important;\n }\n .pm-pane-border-color {\n border-color: ${theme.paneBorderColor} !important;\n }\n .pm-div .pm-div {\n border-color: ${theme.focusOutlineColor} !important;\n }\n .pm-raw-block-border {\n border-color: ${theme.markupTextColor} !important;\n }\n .pm-popup {\n box-shadow: 0 1px 3px ${theme.blockBorderColor} !important;\n }\n .pm-selected-node-outline-color,\n .ProseMirror-selectednode {\n outline-color: ${theme.nodeSelectionColor} !important;\n }\n .pm-selected-node-border-color {\n border-color: ${theme.nodeSelectionColor} !important;\n }\n .pm-dark-mode .pm-selected-node-outline-color,\n .pm-dark-mode .ProseMirror-selectednode {\n outline-color: ${theme.nodeSelectionColor} !important;\n }\n .pm-dark-mode .pm-selected-node-border-color {\n border-color: ${theme.nodeSelectionColor} !important;\n }\n .pm-background-color *::selection {\n background-color: ${theme.selectionColor} !important;\n }\n .pm-background-color *::-moz-selection {\n background-color: ${theme.selectionColor} !important;\n }\n .pm-fixedwidth-font {\n font-family: ${theme.fixedWidthFont} !important;\n font-size: ${theme.fixedWidthFontSizePt}pt !important;\n }\n .pm-proportional-font {\n font-family: ${theme.proportionalFont} !important;\n font-size: ${theme.proportionalFontSizePt}pt !important;\n }\n .pm-emoji-font {\n font-family: ${theme.fixedWidthFont} !important;\n }\n .pm-input-text {\n border-color: ${theme.paneBorderColor};\n }\n .pm-input-button {\n border-color: ${theme.borderBackgroundColor};\n background-color: ${theme.backgroundColor};\n }\n .pm-input-outline-button {\n color: ${theme.textColor};\n border-color: ${theme.textColor};\n background-color: ${theme.backgroundColor};\n }\n .pm-ace-first-line-meta .ace_text-layer .ace_line_group:first-child,\n .pm-ace-first-line-meta .ace_text-layer .ace_line_group:first-child span {\n color: ${theme.lightTextColor} !important;\n }\n .ProseMirror-gapcursor:after {\n border-top: 1px solid ${theme.textColor};\n }\n `;\n\n // set style\n setStyleElement('pm-editor-theme-styles-id', themeCss);\n}\n\nexport function applyPadding(padding: string) {\n const paddingCss = `\n .pm-editing-root-node {\n padding-left: ${padding} !important;\n padding-right: ${padding} !important;\n }\n `;\n setStyleElement('pm-editor-padding-styles-id', paddingCss);\n}\n\nfunction setStyleElement(id: string, css: string) {\n // get access to style element (create if necessary)\n let styleEl = window.document.getElementById(id);\n if (styleEl === null) {\n styleEl = window.document.createElement('style');\n styleEl.setAttribute('id', id);\n styleEl.setAttribute('type', 'text/css');\n window.document.head.appendChild(styleEl);\n }\n\n // set css\n styleEl.innerHTML = css;\n}\n","/*\n * editor-images.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorUIImages } from '../api/ui-images';\n\nimport copyImage from './images/copy.png';\nimport propertiesImage from './images/properties.png';\nimport propertiesDecoImage from './images/properties_deco.png';\nimport propertiesDecoDarkImage from './images/properties_deco_dark.png';\nimport removelinkImage from './images/removelink.png';\nimport runchunkImage from './images/runchunk.png';\nimport runprevchunksImage from './images/runprevchunks.png';\nimport searchImage from './images/search.png';\nimport searchProgressImage from './images/search_progress.gif';\n\nimport omniInsertGenericImage from './images/omni_insert/generic.png';\nimport heading1Image from './images/omni_insert/heading1.png';\nimport heading1DarkImage from './images/omni_insert/heading1_dark.png';\nimport heading2Image from './images/omni_insert/heading2.png';\nimport heading2DarkImage from './images/omni_insert/heading2_dark.png';\nimport heading3Image from './images/omni_insert/heading3.png';\nimport heading3DarkImage from './images/omni_insert/heading3_dark.png';\nimport heading4Image from './images/omni_insert/heading4.png';\nimport heading4DarkImage from './images/omni_insert/heading4_dark.png';\nimport bulletListImage from './images/omni_insert/bullet_list.png';\nimport bulletListDarkImage from './images/omni_insert/bullet_list_dark.png';\nimport orderedListImage from './images/omni_insert/ordered_list.png';\nimport orderedListDarkImage from './images/omni_insert/ordered_list_dark.png';\nimport blockquoteImage from './images/omni_insert/blockquote.png';\nimport blockquoteDarkImage from './images/omni_insert/blockquote_dark.png';\nimport mathInlineImage from './images/omni_insert/math_inline.png';\nimport mathInlineDarkImage from './images/omni_insert/math_inline_dark.png';\nimport mathDisplayImage from './images/omni_insert/math_display.png';\nimport mathDisplayDarkImage from './images/omni_insert/math_display_dark.png';\nimport htmlBlockImage from './images/omni_insert/html_block.png';\nimport htmlBlockDarkImage from './images/omni_insert/html_block_dark.png';\nimport lineBlockImage from './images/omni_insert/line_block.png';\nimport lineBlockDarkImage from './images/omni_insert/line_block_dark.png';\nimport emojiImage from './images/omni_insert/emoji.png';\nimport emojiDarkImage from './images/omni_insert/emoji_dark.png';\nimport commentImage from './images/omni_insert/comment.png';\nimport commentDarkImage from './images/omni_insert/comment_dark.png';\nimport divImage from './images/omni_insert/div.png';\nimport divDarkImage from './images/omni_insert/div_dark.png';\nimport codeBlockImage from './images/omni_insert/code_block.png';\nimport codeBlockDarkImage from './images/omni_insert/code_block_dark.png';\nimport footnoteImage from './images/omni_insert/footnote.png';\nimport footnoteDarkImage from './images/omni_insert/footnote_dark.png';\nimport citationImage from './images/omni_insert/citation.png';\nimport citationDarkImage from './images/omni_insert/citation_dark.png';\nimport crossReferenceImage from './images/omni_insert/cross_reference.png';\nimport crossReferenceDarkImage from './images/omni_insert/cross_reference_dark.png';\nimport symbolImage from './images/omni_insert/symbol.png';\nimport symbolDarkImage from './images/omni_insert/symbol_dark.png';\nimport tableImage from './images/omni_insert/table.png';\nimport tableDarkImage from './images/omni_insert/table_dark.png';\nimport definitionListImage from './images/omni_insert/definition_list.png';\nimport definitionListDarkImage from './images/omni_insert/definition_list_dark.png';\nimport horizontalRuleImage from './images/omni_insert/horizontal_rule.png';\nimport horizontalRuleDarkImage from './images/omni_insert/horizontal_rule_dark.png';\nimport imgImage from './images/omni_insert/image.png';\nimport imgDarkImage from './images/omni_insert/image_dark.png';\nimport linkImage from './images/omni_insert/link.png';\nimport linkDarkImage from './images/omni_insert/link_dark.png';\nimport paragraphImage from './images/omni_insert/paragraph.png';\nimport paragraphDarkImage from './images/omni_insert/paragraph_dark.png';\nimport rawBlockImage from './images/omni_insert/raw_block.png';\nimport rawBlockDarkImage from './images/omni_insert/raw_block_dark.png';\nimport rawInlineImage from './images/omni_insert/raw_inline.png';\nimport rawInlineDarkImage from './images/omni_insert/raw_inline_dark.png';\nimport texBlockImage from './images/omni_insert/tex_block.png';\nimport texBlockDarkImage from './images/omni_insert/tex_block_dark.png';\nimport yamlBlockImage from './images/omni_insert/yaml_block.png';\nimport yamlBlockDarkImage from './images/omni_insert/yaml_block_dark.png';\nimport pythonChunkImage from './images/omni_insert/python_chunk.png';\nimport sqlChunkImage from './images/omni_insert/sql_chunk.png';\nimport d3ChunkImage from './images/omni_insert/d3_chunk.png';\nimport stanChunkImage from './images/omni_insert/stan_chunk.png';\nimport bashChunkImage from './images/omni_insert/bash_chunk.png';\nimport bashChunkDarkImage from './images/omni_insert/bash_chunk_dark.png';\nimport rChunkImage from './images/omni_insert/r_chunk.png';\nimport rChunkDarkImage from './images/omni_insert/r_chunk_dark.png';\nimport rcppChunkImage from './images/omni_insert/rcpp_chunk.png';\nimport rcppChunkDarkImage from './images/omni_insert/rcpp_chunk_dark.png';\n\nimport articleImage from './images/citations/article.png';\nimport articleDarkImage from './images/citations/article_dark.png';\nimport bookImage from './images/citations/book.png';\nimport bookDarkImage from './images/citations/book_dark.png';\nimport broadcastImage from './images/citations/broadcast.png';\nimport broadcastDarkImage from './images/citations/broadcast_dark.png';\nimport dataImage from './images/citations/data.png';\nimport dataDarkImage from './images/citations/data_dark.png';\nimport entryImage from './images/citations/entry.png';\nimport entryDarkImage from './images/citations/entry_dark.png';\nimport imageImage from './images/citations/image.png';\nimport imageDarkImage from './images/citations/image_dark.png';\nimport legalImage from './images/citations/legal.png';\nimport legalDarkImage from './images/citations/legal_dark.png';\nimport mapImage from './images/citations/map.png';\nimport mapDarkImage from './images/citations/map_dark.png';\nimport movieImage from './images/citations/movie.png';\nimport movieDarkImage from './images/citations/movie_dark.png';\nimport otherImage from './images/citations/other.png';\nimport otherDarkImage from './images/citations/other_dark.png';\nimport songImage from './images/citations/song.png';\nimport songDarkImage from './images/citations/song_dark.png';\nimport webImage from './images/citations/web.png';\nimport webDarkImage from './images/citations/web_dark.png';\nimport zoteroOverlayImage from './images/citations/zotero-overlay.png';\nimport localSourcesImage from './images/citations/insert/local-sources.png';\nimport bibliographyImage from './images/citations/insert/bibliography.png';\nimport bibliographyFolderImage from './images/citations/insert/bibliography-folder.png';\nimport zoteroRootImage from './images/citations/insert/zotero-root.png';\nimport zoteroLibraryImage from './images/citations/insert/zotero-library.png';\nimport zoteroCollectionImage from './images/citations/insert/zotero-collection.png';\nimport doiImage from './images/citations/insert/doi.png';\nimport crossRefImage from './images/citations/insert/crossref.png';\nimport pubmedImage from './images/citations/insert/pubmed.png';\nimport dataciteImage from './images/citations/insert/datacite.png';\n\nimport tagDelete from './images/widgets/tag-delete.png';\nimport tagEdit from './images/widgets/tag-edit.png';\n\nexport function defaultEditorUIImages(): EditorUIImages {\n return {\n copy: copyImage,\n properties: propertiesImage,\n properties_deco: propertiesDecoImage,\n properties_deco_dark: propertiesDecoDarkImage,\n removelink: removelinkImage,\n runchunk: runchunkImage,\n runprevchunks: runprevchunksImage,\n search: searchImage,\n search_progress: searchProgressImage,\n omni_insert: {\n generic: omniInsertGenericImage,\n heading1: heading1Image,\n heading1_dark: heading1DarkImage,\n heading2: heading2Image,\n heading2_dark: heading2DarkImage,\n heading3: heading3Image,\n heading3_dark: heading3DarkImage,\n heading4: heading4Image,\n heading4_dark: heading4DarkImage,\n bullet_list: bulletListImage,\n bullet_list_dark: bulletListDarkImage,\n ordered_list: orderedListImage,\n ordered_list_dark: orderedListDarkImage,\n blockquote: blockquoteImage,\n blockquote_dark: blockquoteDarkImage,\n math_inline: mathInlineImage,\n math_inline_dark: mathInlineDarkImage,\n math_display: mathDisplayImage,\n math_display_dark: mathDisplayDarkImage,\n html_block: htmlBlockImage,\n html_block_dark: htmlBlockDarkImage,\n line_block: lineBlockImage,\n line_block_dark: lineBlockDarkImage,\n emoji: emojiImage,\n emoji_dark: emojiDarkImage,\n comment: commentImage,\n comment_dark: commentDarkImage,\n div: divImage,\n div_dark: divDarkImage,\n code_block: codeBlockImage,\n code_block_dark: codeBlockDarkImage,\n footnote: footnoteImage,\n footnote_dark: footnoteDarkImage,\n citation: citationImage,\n citation_dark: citationDarkImage,\n cross_reference: crossReferenceImage,\n cross_reference_dark: crossReferenceDarkImage,\n symbol: symbolImage,\n symbol_dark: symbolDarkImage,\n table: tableImage,\n table_dark: tableDarkImage,\n definition_list: definitionListImage,\n definition_list_dark: definitionListDarkImage,\n horizontal_rule: horizontalRuleImage,\n horizontal_rule_dark: horizontalRuleDarkImage,\n image: imgImage,\n image_dark: imgDarkImage,\n link: linkImage,\n link_dark: linkDarkImage,\n paragraph: paragraphImage,\n paragraph_dark: paragraphDarkImage,\n raw_block: rawBlockImage,\n raw_block_dark: rawBlockDarkImage,\n raw_inline: rawInlineImage,\n raw_inline_dark: rawInlineDarkImage,\n tex_block: texBlockImage,\n tex_block_dark: texBlockDarkImage,\n yaml_block: yamlBlockImage,\n yaml_block_dark: yamlBlockDarkImage,\n python_chunk: pythonChunkImage,\n sql_chunk: sqlChunkImage,\n d3_chunk: d3ChunkImage,\n stan_chunk: stanChunkImage,\n bash_chunk: bashChunkImage,\n bash_chunk_dark: bashChunkDarkImage,\n r_chunk: rChunkImage,\n r_chunk_dark: rChunkDarkImage,\n rcpp_chunk: rcppChunkImage,\n rcpp_chunk_dark: rcppChunkDarkImage,\n },\n citations: {\n article: articleImage,\n article_dark: articleDarkImage,\n book: bookImage,\n book_dark: bookDarkImage,\n broadcast: broadcastImage,\n broadcast_dark: broadcastDarkImage,\n data: dataImage,\n data_dark: dataDarkImage,\n entry: entryImage,\n entry_dark: entryDarkImage,\n image: imageImage,\n image_dark: imageDarkImage,\n legal: legalImage,\n legal_dark: legalDarkImage,\n map: mapImage,\n map_dark: mapDarkImage,\n movie: movieImage,\n movie_dark: movieDarkImage,\n other: otherImage,\n other_dark: otherDarkImage,\n song: songImage,\n song_dark: songDarkImage,\n web: webImage,\n web_dark: webDarkImage,\n zoteroOverlay: zoteroOverlayImage,\n local_sources: localSourcesImage,\n bibligraphy: bibliographyImage,\n bibligraphy_folder: bibliographyFolderImage,\n zotero_library: zoteroLibraryImage,\n zotero_collection: zoteroCollectionImage,\n zotero_root: zoteroRootImage,\n doi: doiImage,\n crossref: crossRefImage,\n pubmed: pubmedImage,\n datacite: dataciteImage,\n },\n widgets: {\n tag_delete: tagDelete,\n tag_edit: tagEdit,\n },\n };\n}\n","/*\n * editor-menus.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorMenuItem, EditorUI } from '../api/ui';\nimport { tableMenu } from '../api/table';\nimport { EditorCommandId, EditorCommand } from '../api/command';\nimport { Editor } from './editor';\n\nexport interface EditorMenus {\n format: EditorMenuItem[];\n insert: EditorMenuItem[];\n table: EditorMenuItem[];\n}\n\nexport function editorMenus(ui: EditorUI, commands: EditorCommand[]) {\n return {\n format: formatMenu(ui, commands),\n insert: insertMenu(ui, commands),\n table: tableMenu(true, ui),\n };\n}\n\nfunction formatMenu(ui: EditorUI, commands: EditorCommand[]) {\n return [\n { command: EditorCommandId.Strong },\n { command: EditorCommandId.Em },\n { command: EditorCommandId.Underline },\n { command: EditorCommandId.Code },\n {\n text: ui.context.translateText('Text'),\n subMenu: {\n items: [\n { command: EditorCommandId.Strikeout },\n { command: EditorCommandId.Superscript },\n { command: EditorCommandId.Subscript },\n { command: EditorCommandId.Smallcaps },\n ],\n },\n },\n { separator: true },\n {\n text: ui.context.translateText('Bullets & Numbering'),\n subMenu: {\n items: [\n { command: EditorCommandId.BulletList },\n { command: EditorCommandId.OrderedList },\n { separator: true },\n { command: EditorCommandId.TightList },\n { separator: true },\n { command: EditorCommandId.ListItemCheck },\n { command: EditorCommandId.ListItemCheckToggle },\n { separator: true },\n { command: EditorCommandId.ListItemSink },\n { command: EditorCommandId.ListItemLift },\n { separator: true },\n { command: EditorCommandId.EditListProperties },\n ],\n },\n },\n { separator: true },\n { command: codeBlockCommand(commands) },\n { command: EditorCommandId.Blockquote },\n { command: EditorCommandId.LineBlock },\n { separator: haveAnyOf(commands, EditorCommandId.Div, EditorCommandId.Span) },\n { command: EditorCommandId.Div },\n { command: EditorCommandId.Span },\n { separator: true },\n {\n text: ui.context.translateText('Raw'),\n subMenu: {\n items: [\n { command: EditorCommandId.HTMLInline },\n { command: EditorCommandId.HTMLBlock },\n { separator: true },\n { command: EditorCommandId.TexInline },\n { command: EditorCommandId.TexBlock },\n { separator: true },\n { command: EditorCommandId.RawInline },\n { command: EditorCommandId.RawBlock },\n ],\n },\n },\n { separator: true },\n { command: EditorCommandId.ClearFormatting },\n { separator: true },\n { command: EditorCommandId.AttrEdit },\n ];\n}\n\nfunction insertMenu(ui: EditorUI, commands: EditorCommand[]) {\n return [\n { command: EditorCommandId.OmniInsert },\n ...(haveAnyOf(commands, EditorCommandId.RCodeChunk, EditorCommandId.PythonCodeChunk)\n ? [\n { separator: true },\n {\n text: ui.context.translateText('Code Chunk'),\n subMenu: {\n items: [\n { command: EditorCommandId.RCodeChunk },\n { separator: true },\n { command: EditorCommandId.PythonCodeChunk },\n { command: EditorCommandId.BashCodeChunk },\n { command: EditorCommandId.RcppCodeChunk },\n { command: EditorCommandId.SQLCodeChunk },\n { command: EditorCommandId.D3CodeChunk },\n { command: EditorCommandId.StanCodeChunk },\n ],\n },\n },\n ]\n : []),\n { separator: true },\n { command: EditorCommandId.Citation },\n { command: EditorCommandId.CrossReference },\n { command: EditorCommandId.Footnote },\n { separator: true },\n { command: EditorCommandId.Image },\n { command: EditorCommandId.Link },\n { command: EditorCommandId.HorizontalRule },\n ...(haveAnyOf(commands, EditorCommandId.DefinitionList)\n ? [\n { separator: true },\n {\n text: ui.context.translateText('Definition'),\n subMenu: {\n items: [\n { command: EditorCommandId.DefinitionList },\n { separator: true },\n { command: EditorCommandId.DefinitionTerm },\n { command: EditorCommandId.DefinitionDescription },\n ],\n },\n },\n ]\n : []),\n { separator: true },\n { command: EditorCommandId.InlineMath },\n { command: EditorCommandId.DisplayMath },\n { separator: true },\n {\n text: ui.context.translateText('Special Characters'),\n subMenu: {\n items: [\n { command: EditorCommandId.Emoji },\n { command: EditorCommandId.Symbol },\n { separator: true },\n { command: EditorCommandId.EnDash },\n { command: EditorCommandId.EmDash },\n { separator: true },\n { command: EditorCommandId.NonBreakingSpace },\n { separator: true },\n { command: EditorCommandId.HardLineBreak },\n ],\n },\n },\n { separator: true },\n { command: EditorCommandId.ParagraphInsert },\n { command: EditorCommandId.CodeBlockFormat },\n { command: EditorCommandId.InsertDiv },\n { command: EditorCommandId.YamlMetadata },\n { separator: true },\n { command: EditorCommandId.Shortcode },\n { separator: true },\n { command: EditorCommandId.HTMLComment },\n ];\n}\n\nfunction haveAnyOf(commands: EditorCommand[], ...ids: EditorCommandId[]) {\n for (const command of commands) {\n if (ids.includes(command.id)) {\n return true;\n }\n }\n return false;\n}\n\nfunction codeBlockCommand(commands: EditorCommand[]) {\n return haveAnyOf(commands, EditorCommandId.CodeBlockFormat)\n ? EditorCommandId.CodeBlockFormat\n : EditorCommandId.CodeBlock;\n}\n","/*\n * table.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { EditorCommandId } from './command';\nimport { EditorUI } from './ui';\n\nexport interface TableCapabilities {\n captions: boolean;\n headerOptional: boolean;\n multiline: boolean;\n}\n\nexport function tableMenu(insert: boolean, ui: EditorUI) {\n return [\n ...(insert ? [{ command: EditorCommandId.TableInsertTable }] : []),\n { command: EditorCommandId.TableAddRowBefore },\n { command: EditorCommandId.TableAddRowAfter },\n { separator: true },\n { command: EditorCommandId.TableAddColumnBefore },\n { command: EditorCommandId.TableAddColumnAfter },\n { separator: true },\n { command: EditorCommandId.TableDeleteRow },\n { command: EditorCommandId.TableDeleteColumn },\n { separator: true },\n { command: EditorCommandId.TableDeleteTable },\n { separator: true },\n {\n text: ui.context.translateText('Align Column'),\n subMenu: {\n items: [\n { command: EditorCommandId.TableAlignColumnLeft },\n { command: EditorCommandId.TableAlignColumnCenter },\n { command: EditorCommandId.TableAlignColumnRight },\n { separator: true },\n { command: EditorCommandId.TableAlignColumnDefault },\n ],\n },\n },\n { separator: true },\n { command: EditorCommandId.TableToggleHeader },\n { command: EditorCommandId.TableToggleCaption },\n ];\n}\n","/*\n * editor-schema.ts\n *\n * Copyright (C) 2021 by RStudio, PBC\n *\n * Unless you have received this program directly from RStudio pursuant\n * to the terms of a commercial license agreement with RStudio, then\n * this program is licensed to you under the terms of version 3 of the\n * GNU Affero General Public License. This program is distributed WITHOUT\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n *\n */\n\nimport { Schema, NodeSpec, MarkSpec, Node as ProsemirrorNode } from 'prosemirror-model';\n\nimport { ExtensionManager } from './editor-extensions';\nimport { PandocNode } from '../api/node';\nimport { PandocMark } from '../api/mark';\n\nexport function editorSchema(extensions: ExtensionManager): Schema {\n // build in doc node + nodes from extensions\n const nodes: { [name: string]: NodeSpec } = {\n doc: {\n attrs: {\n initial: { default: false },\n },\n content: 'body notes',\n },\n\n body: {\n content: 'block+',\n isolating: true,\n parseDOM: [{ tag: 'div[class*=\"body\"]' }],\n toDOM() {\n return [\n 'div',\n { class: 'body pm-cursor-color pm-text-color pm-background-color pm-editing-root-node' },\n ['div', { class: 'pm-content' }, 0],\n ];\n },\n },\n\n notes: {\n content: 'note*',\n parseDOM: [{ tag: 'div[class*=\"notes\"]' }],\n toDOM() {\n return [\n 'div',\n { class: 'notes pm-cursor-color pm-text-color pm-background-color pm-editing-root-node' },\n ['div', { class: 'pm-content' }, 0],\n ];\n },\n },\n\n note: {\n content: 'block+',\n attrs: {\n ref: {},\n number: { default: 1 },\n },\n isolating: true,\n parseDOM: [\n {\n tag: 'div[class*=\"note\"]',\n getAttrs(dom: Node | string) {\n const el = dom as Element;\n return {\n ref: el.getAttribute('data-ref'),\n };\n },\n },\n ],\n toDOM(node: ProsemirrorNode) {\n return [\n 'div',\n { 'data-ref': node.attrs.ref, class: 'note pm-footnote-body', 'data-number': node.attrs.number },\n 0,\n ];\n },\n },\n };\n extensions.pandocNodes().forEach((node: PandocNode) => {\n nodes[node.name] = node.spec;\n });\n\n // marks from extensions\n const marks: { [name: string]: MarkSpec } = {};\n extensions.pandocMarks().forEach((mark: PandocMark) => {\n marks[mark.name] = mark.spec;\n });\n\n // allow code to exclude marks that don't support input rules\n // (e.g. marks that denote a special escape sequences from markdown,\n // like raw_tex, raw_html, shortcodes, xrefs, math, etc.)\n if (marks.code) {\n const excludeInCode = extensions\n .pandocMarks()\n .filter(mark => mark.noInputRules && mark.name !== 'code')\n .map(mark => mark.name)\n .join(' ');\n marks.code.excludes = excludeInCode;\n }\n\n // return schema\n return new Schema({\n nodes,\n marks,\n });\n}\n"]} \ No newline at end of file overalldiffered=1 (not bit-by-bit identical) overall=1