import file to conversion project

This commit is contained in:
2023-05-28 15:10:47 -06:00
parent 840656734f
commit 4ecabc33de
5 changed files with 109 additions and 1 deletions

View File

@@ -0,0 +1,20 @@
package tct;
import kiss.Prelude;
import kiss.List;
import uuid.Uuid;
import sys.io.File;
import sys.FileSystem;
using haxe.io.Path;
typedef Block = {
id:String,
inText:String,
outText:String,
locked:Bool
};
@:build(kiss.Kiss.build())
class FileConversionProject {}

View File

@@ -0,0 +1,65 @@
(defNew &private
[
&prop :String directory
&prop :String inExtension
&prop :String outExtension
&prop :String outBlockTerminator
&prop :Array<Block> blocks
// TODO store an array of undo history i.e. EditBlock(id, inFrom, inTo, outFrom, outTo)
// InsertBlock(idx, id)
// EditBlockStatus(id, status),
]
[
:String inFile "${directory}/$(.withoutExtension (directory.withoutDirectory)).${inExtension}"
:String outFile "${directory}/$(.withoutExtension (directory.withoutDirectory)).${outExtension}"
:String blockDir "${directory}/blocks"
:String tctFile "${directory}/tct.txt"
])
(function loadDirectory [directory]
// TODO
)
(function importFile [:String inFile :String outExtension :String inBlockDelimiter :String outBlockTerminator]
(let [inExtension (inFile.extension)
content (File.getContent inFile)
inBlockContent (content.split inBlockDelimiter)]
(.fullSave
(new FileConversionProject
"$(inFile.withoutExtension).tct"
inExtension
outExtension
outBlockTerminator
(for [idx section] (enumerate inBlockContent)
(when (= idx (- inBlockContent.length 1))
(set inBlockDelimiter ""))
(object
id (Uuid.v4)
inText "${section}${inBlockDelimiter}"
outText ""
locked false))))))
(method :FileConversionProject fullSave []
(unless (and (FileSystem.exists directory) (FileSystem.isDirectory directory))
(FileSystem.createDirectory directory))
(unless (and (FileSystem.exists blockDir) (FileSystem.isDirectory blockDir))
(FileSystem.createDirectory blockDir))
(let [&mut tctContent ""]
(+= tctContent "${inExtension}|||${outExtension}|||${outBlockTerminator}|||\n")
(doFor block blocks
(+= tctContent "${block.id} ${block.locked}\n")
(File.saveContent tctFile tctContent)))
(doFor block blocks
(File.saveContent "${blockDir}/${block.id}.${inExtension}" block.inText)
(File.saveContent "${blockDir}/${block.id}.${outExtension}" block.outText))
(File.saveContent inFile
(.join (for block blocks block.inText) ""))
(File.saveContent outFile
(.join (for block blocks block.outText) ""))
this)

View File

@@ -1 +1,20 @@
(print "Hello world!")
(import sys.io.File)
(import sys.FileSystem)
(function rmrf [directory]
(walkDirectory "" directory ->file (FileSystem.deleteFile file) null ->dir (FileSystem.deleteDirectory dir))
(FileSystem.deleteDirectory directory))
// Test import file in a folder:
(FileConversionProject.importFile "test/test.in" "out" "\n\n" "\n")
(assert (FileSystem.exists "test/test.tct/tct.txt"))
(assertEquals (File.getContent "test/test.in") (File.getContent "test/test.tct/test.in"))
(rmrf "test/test.tct")
// Test import file in current directory:
(let [cwd (Sys.getCwd)]
(Sys.setCwd "${cwd}/test")
(FileConversionProject.importFile "test.in" "out" "\n\n" "\n")
(assert (FileSystem.exists "test.tct/tct.txt"))
(rmrf "test.tct")
(Sys.setCwd cwd))

1
tct/test/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*.tct/

3
tct/test/test.in Normal file
View File

@@ -0,0 +1,3 @@
here
there