trinitry 0.2.2

A very simple programming language, used to map functions to commands
Documentation
// 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