lib/fig/grammar.treetop in fig-0.1.62 vs lib/fig/grammar.treetop in fig-0.1.64

- old
+ new

@@ -1,237 +1,222 @@ +# Treetop (http://treetop.rubyforge.org/) grammar for package definitions. + require 'fig/package' require 'fig/packagedescriptor' require 'fig/parser' require 'fig/statement/archive' require 'fig/statement/command' require 'fig/statement/configuration' require 'fig/statement/include' require 'fig/statement/override' require 'fig/statement/path' -require 'fig/statement/publish' require 'fig/statement/resource' require 'fig/statement/retrieve' require 'fig/statement/set' module Fig + grammar Fig + rule package + optional_ws statements:(package_statement*) optional_ws { + def to_package(directory, build_state) + Package.new( + build_state.descriptor.name, + build_state.descriptor.version, + directory, + statements.elements.map do + |statement| + statement.to_package_statement(build_state) + end + ) + end + } + end -grammar Fig - rule package - optional_ws statements:(package_statement*) optional_ws { - def to_package(descriptor, directory) - Package.new( - descriptor.name, - descriptor.version, - directory, - statements.elements.map do - |statement| - statement.to_package_statement(descriptor) - end - ) - end - } - end + rule package_statement + archive / resource / retrieve / config + end - rule package_statement - archive / resource / retrieve / config - end + rule archive + statement_start:"archive" ws resource_url { + def to_package_statement(build_state) + Statement::Archive.new( + build_state.node_location(statement_start), + build_state.source_description, + resource_url.value.text_value + ) + end + } + end - rule archive - statement_start:"archive" ws resource_url { - def to_package_statement(descriptor) - Statement::Archive.new( - Parser.node_location(statement_start), resource_url.value.text_value - ) - end - } - end + rule resource + statement_start:"resource" ws resource_url { + def to_package_statement(build_state) + Statement::Resource.new( + build_state.node_location(statement_start), + build_state.source_description, + resource_url.value.text_value + ) + end + } + end - rule resource - statement_start:"resource" ws resource_url { - def to_package_statement(descriptor) - Statement::Resource.new( - Parser.node_location(statement_start), resource_url.value.text_value - ) - end - } - end + rule retrieve + statement_start:"retrieve" ws var:environment_variable_name "->" path:retrieve_path ws { + def to_package_statement(build_state) + Statement::Retrieve.new( + build_state.node_location(statement_start), + build_state.source_description, + var.text_value, + path.text_value + ) + end + } + end - rule retrieve - statement_start:"retrieve" ws var:retrieve_variable_name "->" path:retrieve_path ws { - def to_package_statement(descriptor) - Statement::Retrieve.new( - Parser.node_location(statement_start), - var.text_value, - path.text_value - ) - end - } - end + rule retrieve_path + [a-zA-Z0-9_/.\[\]-]+ + end - rule retrieve_variable_name - [@a-zA-Z0-9/._]+ - end + rule config + statement_start:"config" ws config_name ws statements:config_statement* "end" ws { + def to_package_statement(build_state) + Statement::Configuration.new( + build_state.node_location(statement_start), + build_state.source_description, + config_name.text_value, + statements.elements.map do + |statement| + statement.to_config_statement(build_state) + end + ) + end + } + end - rule retrieve_path - [a-zA-Z0-9_/.\[\]-]+ - end + rule config_name + [a-zA-Z0-9_.-]+ + end - rule config - statement_start:"config" ws config_name ws statements:config_statement* "end" ws { - def to_package_statement(descriptor) - Statement::Configuration.new( - Parser.node_location(statement_start), - config_name.text_value, - statements.elements.map do - |statement| - statement.to_config_statement(descriptor) - end - ) - end - } - end + rule config_statement + override / include / command / path / set + end - rule config_statement - include / command / path / set - end + rule include + statement_start:"include" ws descriptor_string ws { + def to_config_statement(build_state) + include_descriptor = + Statement::Include.parse_descriptor( + descriptor_string.text_value.strip, + :source_description => + build_state.node_location_description(descriptor_string), + :validation_context => ' for an include statement' + ) - rule include - statement_start:"include" ws descriptor overrides:(override*) { - def to_config_statement(containing_package_descriptor) - Statement::Include.new( - Parser.node_location(statement_start), - PackageDescriptor.parse(descriptor.text_value.strip), - overrides.elements.map{ |e| e.to_override }, - containing_package_descriptor - ) - end - } - end + Statement::Include.new( + build_state.node_location(statement_start), + build_state.source_description, + include_descriptor, + build_state.descriptor + ) + end + } + end - rule override - statement_start:"override" ws package_name "/" version_name ws { - def to_override - return Statement::Override.new( - Parser.node_location(statement_start), - package_name.text_value, - version_name.text_value - ) - end - } - end + rule override + statement_start:"override" ws descriptor_string ws { + def to_config_statement(build_state) + descriptor = + Statement::Override.parse_descriptor( + descriptor_string.text_value.strip, + :source_description => + build_state.node_location_description(descriptor_string), + :validation_context => ' for an override statement' + ) - rule path - statement_start:("append" / "path" / "add") ws name:environment_variable_name "=" value:path_value ws { - def to_config_statement(descriptor) - Statement::Path.new( - Parser.node_location(statement_start), - name.text_value, - value.text_value - ) - end - } - end + return Statement::Override.new( + build_state.node_location(statement_start), + build_state.source_description, + descriptor.name, + descriptor.version + ) + end + } + end - rule environment_variable_name - [a-zA-Z0-9_]+ - end + rule path + statement_start:("add" / "append" / "path") ws name_value:[\S]+ ws { + def to_config_statement(build_state) + return build_state.new_environment_variable_statement( + Statement::Path, statement_start, name_value + ) + end + } + end - rule path_value - # Characters blocked in the value: - # ;: - Windows/*nix path separators - # "<>| - Characters not allowed in filenames on Windows - # \s - Necessary for the "ws" token to work - [^;:"<>|\s]+ - end + rule environment_variable_name + [a-zA-Z0-9_]+ + end - rule set - statement_start:"set" ws name:environment_variable_name "=" value:set_value ws { - def to_config_statement(descriptor) - Statement::Set.new( - Parser.node_location(statement_start), - name.text_value, - value.text_value - ) - end - } - end + rule set + statement_start:"set" ws name_value:[\S]+ ws { + def to_config_statement(build_state) + return build_state.new_environment_variable_statement( + Statement::Set, statement_start, name_value + ) + end + } + end - rule set_value - [\S]* - end - - rule command - statement_start:"command" ws string { - def to_config_statement(descriptor) - Statement::Command.new( - Parser.node_location(statement_start), string.value.text_value - ) - end - } - end - - rule string - '"' value:(!'"' . )* '"' ws - end - - rule descriptor - ((package:package_name ("/" version:version_name)? (":" config:config_name)? ws) / - (":" config:config_name ws)) { - def get_version - elements.each do |element| - if element.respond_to?(:version) - return element.version.text_value - end + rule command + statement_start:"command" ws string { + def to_config_statement(build_state) + Statement::Command.new( + build_state.node_location(statement_start), + build_state.source_description, + string.value.text_value + ) end - nil - end - def get_config - return self.config.text_value if self.respond_to?(:config) - elements.each do |element| - if element.respond_to?(:config) - return element.config.text_value - end - end - nil - end - } - end + } + end - rule package_name - [a-zA-Z0-9_.-]+ - end + rule string + '"' value:(!'"' . )* '"' ws + end - rule version_name - [a-zA-Z0-9_.-]+ - end + rule descriptor_string + [\S]+ + end - rule config_name - [a-zA-Z0-9_.-]+ - end + rule package_name + [a-zA-Z0-9_.-]+ + end - rule resource_url - # Unquoted allows globbing for files, quoted does not. - # - # Unquoted, anything but: - # @ - To allow for package substitution - # "<>| - Characters not allowed in filenames on Windows - # \s - Necessary for the "ws" token to work - (value:[^@"<>|\s]+ ws) + rule version_name + [a-zA-Z0-9_.-]+ + end - # Unquoted, anything but: - # @ - To allow for package substitution - # "<>| - Characters not allowed in filenames on Windows - # *?\[\]{} - Characters significant to Dir.glob() - # \s - We just don't want these. :] (May need to allow space.) - / ('"' value:[^@"<>|*?\[\]{}\s]+ '"' ws) - end + rule resource_url + # Unquoted allows globbing for files, quoted does not. + # + # Unquoted, anything but: + # @ - To allow for package substitution + # "<>| - Characters not allowed in filenames on Windows + # \s - Necessary for the "ws" token to work + (value:[^@"<>|\s]+ ws) - rule ws - [ \n\r\t]+ - end + # Quoted, anything but: + # @ - To allow for package substitution + # "<>| - Characters not allowed in filenames on Windows + # *?\[\]{} - Characters significant to Dir.glob() + # \s - We just don't want these. :] (May need to allow space.) + / ('"' value:[^@"<>|*?\[\]{}\s]+ '"' ws) + end - rule optional_ws - [ \n\r\t]* - end -end + rule ws + [ \n\r\t]+ + end + rule optional_ws + [ \n\r\t]* + end + end end