Sha256: b5fabc624cd5b3b67c93ca068087fed5607c6376c7f88169acc226e7b1309478
Contents?: true
Size: 1.07 KB
Versions: 5
Compression:
Stored size: 1.07 KB
Contents
# frozen_string_literal: true require "treetop" require "set" require_relative "spdx_grammar" class SpdxParser Treetop.load(File.expand_path(File.join(File.dirname(__FILE__), "spdx_parser.treetop"))) SKIP_PARENS = ["NONE", "NOASSERTION", ""].freeze def self.parse(data) parse_tree(data) end def self.parse_licenses(data) tree = parse_tree(data) tree.get_licenses end private_class_method def self.parse_tree(data) parser = SpdxGrammarParser.new # The generated grammar parser is not thread safe # Couldn't figure out treetop to make parens optional data = "(#{data})" unless SKIP_PARENS.include?(data) tree = parser.parse(data) raise SpdxGrammar::SpdxParseError, "Unable to parse expression '#{data}'. Parse error at offset: #{parser.index}" if tree.nil? clean_tree(tree) tree end private_class_method def self.clean_tree(root_node) return if root_node.elements.nil? root_node.elements.delete_if { |node| node.class.name == "Treetop::Runtime::SyntaxNode" } root_node.elements.each { |node| clean_tree(node) } end end
Version data entries
5 entries across 5 versions & 1 rubygems
Version | Path |
---|---|
spdx-3.1.0 | lib/spdx_parser.rb |
spdx-3.0.1 | lib/spdx_parser.rb |
spdx-3.0.0 | lib/spdx_parser.rb |
spdx-2.0.12 | lib/spdx_parser.rb |
spdx-2.0.11 | lib/spdx_parser.rb |