aboutsummaryrefslogtreecommitdiff
path: root/examples/ini.tm
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-09-15 17:50:43 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-09-15 17:50:43 -0400
commit8b512adbbcf62f49b3e92410e643c86f2e70908a (patch)
treeb3f5e08c6589bc7c00e2a089fbe5304cb60d742a /examples/ini.tm
parent3d1a102a8d8425b8f4a08b78c77ee4b38f6de55b (diff)
Move each example to its own folder
Diffstat (limited to 'examples/ini.tm')
-rw-r--r--examples/ini.tm59
1 files changed, 0 insertions, 59 deletions
diff --git a/examples/ini.tm b/examples/ini.tm
deleted file mode 100644
index c0d490cb..00000000
--- a/examples/ini.tm
+++ /dev/null
@@ -1,59 +0,0 @@
-_USAGE := "
- Usage: ini <filename> "[section[/key]]"
-"
-_HELP := "
- ini: A .ini config file reader tool.
- $_USAGE
-"
-
-func parse_ini(path:Path)->{Text:{Text:Text}}:
- text := path:read():or_exit("Could not read INI file: $\[31;1]$(path.text_content)$\[]")
- sections := {:Text:@{Text:Text}}
- current_section := @{:Text:Text}
- sections:set("", current_section)
-
- # Line wraps:
- text = text:replace($/\{1 nl}{0+space}/, " ")
-
- for line in text:lines():
- line = line:trim()
- skip if line:starts_with(";") or line:starts_with("#")
- if line:matches($/[?]/):
- section_name := line:replace($/[?]/, "\1"):trim():lower()
- current_section = @{:Text:Text}
- sections:set(section_name, current_section)
- else if line:matches($/{..}={..}/):
- key := line:replace($/{..}={..}/, "\1"):trim():lower()
- value := line:replace($/{..}={..}/, "\2"):trim()
- current_section:set(key, value)
-
- return {k:v[] for k,v in sections}
-
-func main(path:Path, key:Text):
- keys := key:split($Pattern"/")
- if keys.length > 2:
- exit("
- Too many arguments!
- $_USAGE
- ")
-
- data := parse_ini(path)
- if keys.length < 1 or keys[1] == '*':
- !! $data
- return
-
- section := keys[1]:lower()
- section_data := data:get(section):or_exit("
- Invalid section name: $\[31;1]$section$\[]
- Valid names: $\[1]$(", ":join([k:quoted() for k in data.keys]))$\[]
- ")
- if keys.length < 2 or keys[2] == '*':
- !! $section_data
- return
-
- section_key := keys[2]:lower()
- value := section_data:get(section_key):or_exit("
- Invalid key: $\[31;1]$section_key$\[]
- Valid keys: $\[1]$(", ":join([s:quoted() for s in section_data.keys]))$\[]
- ")
- say(value)