mvp
This commit is contained in:
parent
b14564021b
commit
6bd9bc97da
6 changed files with 144 additions and 0 deletions
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
nimbledeps
|
||||
nimble.develop
|
||||
nimble.paths
|
||||
bin/
|
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2024 Daylin Morgan
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
10
config.nims
Normal file
10
config.nims
Normal file
|
@ -0,0 +1,10 @@
|
|||
task build, "build":
|
||||
switch("outdir", "bin")
|
||||
setCommand "c", "src/typstgen.nim"
|
||||
|
||||
|
||||
# begin Nimble config (version 2)
|
||||
--noNimblePath
|
||||
when withDir(thisDir(), system.fileExists("nimble.paths")):
|
||||
include "nimble.paths"
|
||||
# end Nimble config
|
26
nimble.lock
Normal file
26
nimble.lock
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"version": 2,
|
||||
"packages": {
|
||||
"hwylterm": {
|
||||
"version": "0.1.0",
|
||||
"vcsRevision": "7385a93110f95e1d67d803780efa014fdc960779",
|
||||
"url": "https://github.com/daylinmorgan/hwylterm",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [],
|
||||
"checksums": {
|
||||
"sha1": "bf170216cff989ea17abfb97946b9f0804c0e50b"
|
||||
}
|
||||
},
|
||||
"yaml": {
|
||||
"version": "2.1.1",
|
||||
"vcsRevision": "48a90e36e82bd97457dae87e86efe423dcd3bb40",
|
||||
"url": "https://github.com/flyx/NimYAML",
|
||||
"downloadMethod": "git",
|
||||
"dependencies": [],
|
||||
"checksums": {
|
||||
"sha1": "302727fcd74c79d0697a4e909d26455d61a5b979"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tasks": {}
|
||||
}
|
68
src/typstgen.nim
Normal file
68
src/typstgen.nim
Normal file
|
@ -0,0 +1,68 @@
|
|||
import std/[streams, tables, strutils, os]
|
||||
import yaml, hwylterm
|
||||
|
||||
|
||||
type
|
||||
Config = object
|
||||
components {.defaultVal: @[]}: seq[Table[string, string]]
|
||||
templates {.defaultVal: initTable[string, string]()}: Table[string, string]
|
||||
|
||||
|
||||
proc typstGen(configPath: string) =
|
||||
|
||||
var config: Config
|
||||
var s = newFileStream(configPath)
|
||||
load(s, config)
|
||||
s.close()
|
||||
|
||||
var output: string
|
||||
|
||||
if not config.templates.hasKey("raw"):
|
||||
config.templates["raw"] = "$text"
|
||||
|
||||
|
||||
func componentToFmtArgs(t: Table[string, string]): seq[string] =
|
||||
for k, v in t.pairs:
|
||||
result.add k
|
||||
result.add v
|
||||
|
||||
for component in config.components:
|
||||
var kind = "figure"
|
||||
var component = component
|
||||
discard component.pop("kind", kind)
|
||||
output &= config.templates[kind] % componentToFmtArgs(component)
|
||||
|
||||
echo output
|
||||
|
||||
|
||||
when isMainModule:
|
||||
import hwylterm/[cli, parseopt3]
|
||||
proc writeHelp() =
|
||||
echo newHwylCli(
|
||||
"[bold]typstgen[/] [[[faint]-h[/]]",
|
||||
"""
|
||||
typstgen --config typstgen.yml""",
|
||||
[
|
||||
("h", "help", "show this help"),
|
||||
("c","config", "path to config file"),
|
||||
]
|
||||
)
|
||||
var p = initOptParser()
|
||||
var configPath = "typstgen.yml"
|
||||
for kind, key, val in p.getopt():
|
||||
case kind
|
||||
of cmdError: quit($bb"[red]cli error[/]: " & p.message)
|
||||
of cmdEnd: assert false
|
||||
of cmdArgument: quit($bb"[red] unexpected argument[/]: " & key)
|
||||
of cmdShortOption, cmdLongOption:
|
||||
case key
|
||||
of "help", "h":
|
||||
writeHelp(); quit 0
|
||||
of "config", "c":
|
||||
configPath = val
|
||||
|
||||
if not fileExists(configPath):
|
||||
quit($bbfmt("file: [b] {configPath} does not exist"))
|
||||
typstGen(configPath)
|
||||
|
||||
|
15
typstgen.nimble
Normal file
15
typstgen.nimble
Normal file
|
@ -0,0 +1,15 @@
|
|||
# Package
|
||||
|
||||
version = "0.1.0"
|
||||
author = "Daylin Morgan"
|
||||
description = "generating typst files"
|
||||
license = "MIT"
|
||||
srcDir = "src"
|
||||
bin = @["typstgen"]
|
||||
|
||||
|
||||
# Dependencies
|
||||
|
||||
requires "nim >= 2.2.0"
|
||||
requires "yaml >= 2.1.1"
|
||||
requires "https://github.com/daylinmorgan/hwylterm#HEAD"
|
Loading…
Reference in a new issue