diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2025-09-01 16:44:58 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2025-09-01 16:44:58 -0400 |
| commit | ed50c5fefb8892ad2ba5262491669f268ddbd436 (patch) | |
| tree | e93a6a8b7e963c37a001691751d6845d10e0cbf8 /examples/ini/ini.tm | |
| parent | 02a99d24a310c04622a875dcf4b0c6fd2de71332 (diff) | |
Overhaul code to stop keeping examples and libraries in the same repo,
but instead spin each out into its own repo.
Diffstat (limited to 'examples/ini/ini.tm')
| -rw-r--r-- | examples/ini/ini.tm | 61 |
1 files changed, 0 insertions, 61 deletions
diff --git a/examples/ini/ini.tm b/examples/ini/ini.tm deleted file mode 100644 index 4dc27725..00000000 --- a/examples/ini/ini.tm +++ /dev/null @@ -1,61 +0,0 @@ - -use patterns - -_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)\[]") - sections : @{Text=@{Text=Text}} - current_section : @{Text=Text} - - # Line wraps: - text = text.replace_pattern($Pat/\\{1 nl}{0+space}/, " ") - - for line in text.lines() - line = line.trim() - skip if line.starts_with(";") or line.starts_with("#") - if line.matches_pattern($Pat/[?]/) - section_name := line.replace($Pat/[?]/, "@1").trim().lower() - current_section = @{} - sections[section_name] = current_section - else if line.matches_pattern($Pat/{..}={..}/) - key := line.replace_pattern($Pat/{..}={..}/, "@1").trim().lower() - value := line.replace_pattern($Pat/{..}={..}/, "@2").trim() - current_section[key] = value - - return {k=v[] for k,v in sections[]} - -func main(path:Path, key:Text?) - keys := (key or "").split($|/|) - if keys.length > 2 - exit(" - Too many arguments! - $_USAGE - ") - - data := parse_ini(path) - if keys.length < 1 or keys[1] == '*' - say("$data") - return - - section := keys[1].lower() - section_data := data[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] == '*' - say("$section_data") - return - - section_key := keys[2].lower() - value := section_data[section_key] or exit(" - Invalid key: \[31;1]$section_key\[] - Valid keys: \[1]$(", ".join([s.quoted() for s in section_data.keys]))\[] - ") - say(value) |
