// Copyright (C) 2024 - 2024:
// The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
// SPDX-License-Identifier: LGPL-3.0-or-later
//
// This file is part of the Trinitry crate for Trinitrix.
//
// Trinitry is free software: you can redistribute it and/or modify
// it under the terms of the Lesser GNU General Public License as
// published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// This program 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
// and the Lesser GNU General Public License along with this program.
// If not, see <https://www.gnu.org/licenses/>.
command_chars = { ASCII_ALPHANUMERIC | "_" | "-" | "." }
argument_chars = {
!(
"'" |
" " |
"\""
)
~ ANY
}
whitespace = _{ " " } // lower case to avoid the special treatment of `WHITESPACE`
quote = _{ "\"" }
q = _{ quote }
single_quote = _{ "'" }
sq = _{ single_quote }
command = { command_chars+ }
arg_quoted = { q ~ (!q ~ (argument_chars | " " | "'" ))+ ~ q }
arg_single_quoted = { sq ~ (!sq ~ (argument_chars | " " | "\"" ))+ ~ sq }
arg = { (argument_chars | "\"" | "'")+ }
argument = { whitespace+ ~ (arg_quoted | arg_single_quoted | arg )}
trinitry = { SOI ~ #command = command ~ (#argument = argument)* ~ EOI }
// better than no syntax highlight:
// vim: ft=peg