From 5ff83f6734442b115b25ea9c72afef30c2bde4da Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Fri, 17 Nov 2023 19:22:18 -0500 Subject: [PATCH] Add propane and initial scene grammar --- .gitignore | 1 + Rsconscript | 11 +++++++++- propane | 45 +++++++++++++++++++++++++++++++++++++++++ src/sceneparser.propane | 22 ++++++++++++++++++++ 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100755 propane create mode 100644 src/sceneparser.propane diff --git a/.gitignore b/.gitignore index 4bcdb79..fc4982b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /fart *.bmp *.png +/.propane* /.rscons* /build/ diff --git a/Rsconscript b/Rsconscript index c3cd7b9..cc36dc6 100644 --- a/Rsconscript +++ b/Rsconscript @@ -6,7 +6,16 @@ fart_env = env "fart" do |env| env["DFLAGS"] += %w[-Werror -O2] env["D_IMPORT_PATH"] += %w[src] - env["sources"] = glob("src/**/*.d") + env.Command("^/src/sceneparser.d", "src/sceneparser.propane", + "CMD" => %w[./propane ${_SOURCES} ${_TARGET}], + "CMD_DESC" => "Generating scene parser") + env.add_build_hook do |builder| + if builder.sources.first =~ /sceneparser\.d/ + builder.vars["DFLAGS"] -= %w[-Werror] + end + end + + env["sources"] = glob("src/**/*.d") + ["^/src/sceneparser.d"] env.Program("fart", "${sources}") end diff --git a/propane b/propane new file mode 100755 index 0000000..1aee622 --- /dev/null +++ b/propane @@ -0,0 +1,45 @@ +#!/usr/bin/env ruby + +# The MIT License (MIT) +# +# Copyright (c) 2010-2023 Josh Holtrop +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + + +script = File.join(File.dirname(__FILE__), ".propane-1.0.0-5dab693259ff5ad86cc8d86fdd20c552.rb") +unless File.exist?(script) + if File.read(__FILE__, mode: "rb") =~ /^#==>(.*)/ + require "zlib" + require "base64" + encoded_compressed = $1 + unescaped_compressed = Base64.decode64(encoded_compressed) + inflated = Zlib::Inflate.inflate(unescaped_compressed) + File.open(script, "wb") do |fh| + fh.write(inflated) + end + else + raise "Could not decompress." + end +end +load script +if __FILE__ == $0 + Propane::CLI.new.run(ARGV) +end +#==>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 diff --git a/src/sceneparser.propane b/src/sceneparser.propane new file mode 100644 index 0000000..7f644f8 --- /dev/null +++ b/src/sceneparser.propane @@ -0,0 +1,22 @@ +<< +import std.conv; +>> + +token background; +token comma /,/; +token number /\d+(\.\d+)?/; +token lt //; +token semicolon /;/; + +Start -> Statements; + +Statements -> ; + +Statements -> Statement Statements; + +Statement -> BackgroundStatement; + +BackgroundStatement -> background Vec3 semicolon; + +Vec3 -> lt number comma number comma number gt;