import file to conversion project
This commit is contained in:
20
tct/src/tct/FileConversionProject.hx
Normal file
20
tct/src/tct/FileConversionProject.hx
Normal 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 {}
|
65
tct/src/tct/FileConversionProject.kiss
Normal file
65
tct/src/tct/FileConversionProject.kiss
Normal 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)
|
@@ -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
1
tct/test/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.tct/
|
3
tct/test/test.in
Normal file
3
tct/test/test.in
Normal file
@@ -0,0 +1,3 @@
|
||||
here
|
||||
|
||||
there
|
Reference in New Issue
Block a user