diff --git a/projects/kiss-vscode/src/ktxt2/KTxt2.kiss b/projects/kiss-vscode/src/ktxt2/KTxt2.kiss index 99005058..8db77062 100644 --- a/projects/kiss-vscode/src/ktxt2/KTxt2.kiss +++ b/projects/kiss-vscode/src/ktxt2/KTxt2.kiss @@ -63,7 +63,8 @@ (function :String toString [:Array elements] (apply + (for element elements - "${blockStartEnd}${element.source}$(if element.outputLocked lockedStart unlockedStart)${element.output}${blockStartEnd}"))) + (assertLet [(Block (objectWith source outputLocked output)) element] + "${blockStartEnd}${source}$(if outputLocked lockedStart unlockedStart)${output}${blockStartEnd}")))) // To save window space after each block editor, ΒΆ can be used in place of \n\n (function :String applySpecialChars [:String text] @@ -101,4 +102,17 @@ (objectWith sourceType outputType canConvert name)) (dictSet validMap name c)) (otherwise {}))) - validMap)) \ No newline at end of file + validMap)) + +(#when (or sys hxnodejs) + (function :String tryFullAutoConvert [:String ktxt2File :Array conversions] + (let [elements (splitFileElements (Stream.fromFile ktxt2File)) + [base sourceExt outputExt _] (ktxt2File.split ".")] + (doFor element elements + (assertLet [(Block element) element] + (unless element.outputLocked + (let [conversions (validConversions conversions "${base}.${sourceExt}" "${base}.${outputExt}" element.source)] + (when (= 1 (count conversions)) + (let [onlyConversion (first (collect (conversions.iterator)))] + (set element.output (onlyConversion.convert element.source)))))))) + (toString elements)))) \ No newline at end of file diff --git a/projects/kiss-vscode/src/ktxt2/KTxt2Editor.kiss b/projects/kiss-vscode/src/ktxt2/KTxt2Editor.kiss index 72e1b6de..43d357bf 100644 --- a/projects/kiss-vscode/src/ktxt2/KTxt2Editor.kiss +++ b/projects/kiss-vscode/src/ktxt2/KTxt2Editor.kiss @@ -273,6 +273,9 @@ (postMessage (objectWith [type "tryAutoConvert"] source output outputStart outputEnd))) (otherwise (throw "element $element is not a block")))) +(function tryFullAutoConvert [] + (postMessage (object type "tryFullAutoConvert"))) + (function blockElements [source output locked idx] (let [outerDiv (document.createElement "div") :js.html.Element sourceDiv (cast (document.createElement "div")) @@ -280,7 +283,7 @@ convertLink (document.createElement "a") xLink (document.createElement "a") lockLink (document.createElement "a") - exportLink (document.createElement "a") + fullConvLink (document.createElement "a") blockLinkBefore (document.createElement "a") blockLinkAfter (document.createElement "a") ] (outerDiv.setAttribute "class" "container") @@ -325,9 +328,9 @@ (lockLink.addEventListener "click" ->(changeLockStatus (nth ktxt2Elements idx) !locked)) (outerDiv.appendChild lockLink) - (set exportLink.innerHTML "export") - (exportLink.addEventListener "click" export) - (outerDiv.appendChild exportLink) + (set fullConvLink.innerHTML "convertAll") + (fullConvLink.addEventListener "click" tryFullAutoConvert) + (outerDiv.appendChild fullConvLink) (content.appendChild outerDiv) (content.appendChild (document.createElement "br")) (content.appendChild blockLinkAfter))) @@ -413,4 +416,4 @@ (scrollToPageTop)) (function export [] - (postMessage (object type "export"))) \ No newline at end of file + (postMessage (object type "export"))) diff --git a/projects/kiss-vscode/src/ktxt2/KTxt2EditorProvider.kiss b/projects/kiss-vscode/src/ktxt2/KTxt2EditorProvider.kiss index ca872c73..e0bafc41 100644 --- a/projects/kiss-vscode/src/ktxt2/KTxt2EditorProvider.kiss +++ b/projects/kiss-vscode/src/ktxt2/KTxt2EditorProvider.kiss @@ -51,6 +51,11 @@ ((objectWith [type "deleteBlock"] start end) (makeEdit ->edit (edit.delete document.uri (new Range (streamPosToOffsetDocumentPos start -KTxt2.blockStartEnd.length) (streamPosToOffsetDocumentPos end KTxt2.blockStartEnd.length))))) + + ((object type "tryFullAutoConvert") + (let [fullConverted (KTxt2.tryFullAutoConvert document.fileName Main.config.conversions)] + (makeEdit + ->edit (edit.replace document.uri (let [fullText (document.getText)] (new Range (document.positionAt 0) (document.positionAt (- fullText.length 1)))) fullConverted)))) ((objectWith [type "tryAutoConvert"] source output outputStart outputEnd) (let [[base sourceExt outputExt _] (document.fileName.split ".") conversions