class Oozby
Oozby
class loads up files and evaluates them to a syntax tree, and renders to openscad source code
Constants
- Version
Attributes
debug[RW]
filter_errors[RW]
Public Class Methods
new()
click to toggle source
# File lib/oozby/base.rb, line 7 def initialize @code_tree = [] @filter_errors = false @debug = false end
version()
click to toggle source
# File lib/oozby/version.rb, line 4 def self.version Oozby::Version end
Public Instance Methods
abstract_tree()
click to toggle source
# File lib/oozby/base.rb, line 58 def abstract_tree @code_tree end
parse(code, filename: 'eval')
click to toggle source
parse oozby code in to a syntax tree
# File lib/oozby/base.rb, line 14 def parse code, filename: 'eval' env = Oozby::Environment.new(ooz: self) if File.exists? filename current_dir = Dir.pwd Dir.chdir File.dirname(filename) end # rescue block to filter out junk oozby library stuff from backtraces begin compiled = eval("lambda {; #{code}\n }", nil, filename) env._execute_oozby(&compiled) rescue StandardError, NoMethodError => err backtrace = $!.backtrace #backtrace = backtrace.select { |item| !item.include? __dir__ } unless backtrace.first.include? __dir__ if @filter_errors # and backtrace.index { |i| i.include? ".oozby:" } < 3 execute_oozby_idx = backtrace.index { |i| i.include? "in `_execute_oozby'" } backtrace = backtrace[0...execute_oozby_idx] if execute_oozby_idx backtrace.delete_if do |item| filename = item.split(':').first filename = File.realpath(filename) filename.start_with? __dir__ end end raise $!, $!.message, backtrace end @code_tree = env._abstract_tree ensure Dir.chdir current_dir if current_dir end
parse_file(filename)
click to toggle source
parse a file containing oozby code in to a syntax tree
# File lib/oozby/base.rb, line 48 def parse_file filename parse File.read(filename), filename: filename end
render()
click to toggle source
render the last parsed oozby code in to openscad source code
# File lib/oozby/base.rb, line 53 def render renderer = Oozby::Render.new(ooz: self) renderer.render(@code_tree, clean: true).join("\n") + "\n" end