-- This file is part of Reno desktop. -- -- Reno desktop is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. -- -- Reno desktop is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License along with Reno desktop. If not, see . local parsers = require("parsers") function rprint(t,ident) ident = ident or 0 for k,v in pairs(t) do print((" "):rep(ident)..k,v) if type(v) == "table" then rprint(v,ident+4) end end end -- Conf parser local data = [[ # Global variables [global] terminal = "$HOME/.local/bin/st" browser = "prime-run librewolf" modkey = "Mod4" theme = "reno98" shell = "zsh" # Keybindings # Format: (++...)+ = "" # "modkey" as modifier will be substituted for modkey variable in [global] [keys] "modkey+Up" = ":root.client_next" "modkey+Down" = ":root.client_previous" "modkey+Control+Up" = ":root.screen_next" "modkey+Control+Down" = ":root.screen_previous" "modkey+Tab" = ":root.client_swap" "modkey+Return" = ":root.spawn_terminal" "modkey+Shift+Return" = ":root.spawn_browser" # Client keys only work if a focused client exists "modkey+Shift+c" = ":client.kill" "modkey+t" = ":client.cycle_screen" "modkey+o" = ":client.ontop" "modkey+b" = ":client.below" "modkey+f" = ":client.fullscreen" "modkey+n" = ":client.minimize" "modkey+m" = ":client.maximize" ]] for k,v in pairs(parsers.conf(data)) do print("Block: ["..k.."]") for kk,vv in pairs(v) do print(kk,vv) end end -- yaml-like (pactl) parser data = [[ Sink Input #75 Driver: PipeWire Owner Module: n/a Client: 58 Sink: 46 Sample Specification: float32le 2ch 44100Hz Channel Map: front-left,front-right Format: pcm, format.sample_format = "\"float32le\"" format.rate = "44100" format.channels = "2" format.channel_map = "\"front-left,front-right\"" Corked: no Mute: no Volume: front-left: 38326 / 58% / -13.98 dB, front-right: 38326 / 58% / -13.98 dB balance 0.00 Buffer Latency: 0 usec Sink Latency: 0 usec Resample method: PipeWire Properties: client.api = "pipewire-pulse" pulse.server.type = "unix" application.name = "LibreWolf" application.process.id = "1756" application.process.user = "yessiest" application.process.host = "architect" application.process.binary = "librewolf" application.language = "C.UTF-8" window.x11.display = ":0" application.process.machine_id = "a8099c2d12fe88c3df940ed562adbe8c" application.process.session_id = "1" media.name = "AudioStream" node.rate = "1/44100" node.latency = "3307/44100" stream.is-live = "true" node.name = "LibreWolf" node.autoconnect = "true" node.want-driver = "true" media.class = "Stream/Output/Audio" adapt.follower.spa-node = "" object.register = "false" factory.id = "6" clock.quantum-limit = "8192" factory.mode = "split" audio.adapt.follower = "" library.name = "audioconvert/libspa-audioconvert" client.id = "56" object.id = "57" object.serial = "75" pulse.attr.maxlength = "4194304" pulse.attr.tlength = "44104" pulse.attr.prebuf = "35296" pulse.attr.minreq = "8816" module-stream-restore.id = "sink-input-by-application-name:LibreWolf" ]] rprint(parsers.yaml_pseudo(data)) -- Fast incomplete yaml parser data = [[ Sink Input #73 Driver: PipeWire Owner Module: n/a Client: 58 Sink: 46 Sample Specification: float32le 2ch 44100Hz Channel Map: front-left,front-right Format: pcm, format.sample_format = "\"float32le\"" format.rate = "44100" format.channels = "2" format.channel_map = "\"front-left,front-right\"" Corked: no Mute: no Volume: front-left: 38326 / 58% / -13.98 dB, front-right: 38326 / 58% / -13.98 dB balance 0.00 Buffer Latency: 0 usec Sink Latency: 0 usec Resample method: PipeWire Properties: client.api = "pipewire-pulse" pulse.server.type = "unix" application.name = "LibreWolf" application.process.id = "1756" application.process.user = "yessiest" application.process.host = "architect" application.process.binary = "librewolf" application.language = "C.UTF-8" window.x11.display = ":0" application.process.machine_id = "a8099c2d12fe88c3df940ed562adbe8c" application.process.session_id = "1" media.name = "AudioStream" node.rate = "1/44100" node.latency = "3307/44100" stream.is-live = "true" node.name = "LibreWolf" node.autoconnect = "true" node.want-driver = "true" media.class = "Stream/Output/Audio" adapt.follower.spa-node = "" object.register = "false" factory.id = "6" clock.quantum-limit = "8192" factory.mode = "split" audio.adapt.follower = "" library.name = "audioconvert/libspa-audioconvert" client.id = "56" object.id = "57" object.serial = "75" pulse.attr.maxlength = "4194304" pulse.attr.tlength = "44104" pulse.attr.prebuf = "35296" pulse.attr.minreq = "8816" module-stream-restore.id = "sink-input-by-application-name:LibreWolf" Sink Input #75 Driver: PipeWire Owner Module: n/a Client: 58 Sink: 46 Sample Specification: float32le 2ch 44100Hz Channel Map: front-left,front-right Format: pcm, format.sample_format = "\"float32le\"" format.rate = "44100" format.channels = "2" format.channel_map = "\"front-left,front-right\"" Corked: no Mute: no Volume: front-left: 38326 / 58% / -13.98 dB, front-right: 38326 / 58% / -13.98 dB balance 0.00 Buffer Latency: 0 usec Sink Latency: 0 usec Resample method: PipeWire Properties: client.api = "pipewire-pulse" pulse.server.type = "unix" application.name = "LibreWolf" application.process.id = "1756" application.process.user = "yessiest" application.process.host = "architect" application.process.binary = "librewolf" application.language = "C.UTF-8" window.x11.display = ":0" application.process.machine_id = "a8099c2d12fe88c3df940ed562adbe8c" application.process.session_id = "1" media.name = "AudioStream" node.rate = "1/44100" node.latency = "3307/44100" stream.is-live = "true" node.name = "LibreWolf" node.autoconnect = "true" node.want-driver = "true" media.class = "Stream/Output/Audio" adapt.follower.spa-node = "" object.register = "false" factory.id = "6" clock.quantum-limit = "8192" factory.mode = "split" audio.adapt.follower = "" library.name = "audioconvert/libspa-audioconvert" client.id = "56" object.id = "57" object.serial = "75" pulse.attr.maxlength = "4194304" pulse.attr.tlength = "44104" pulse.attr.prebuf = "35296" pulse.attr.minreq = "8816" module-stream-restore.id = "sink-input-by-application-name:LibreWolf" ]] rprint(parsers.fast_split_yaml(data))