Skip to content
This repository was archived by the owner on May 3, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 61 additions & 70 deletions helpers/xslt_generation.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# encoding: ASCII-8BIT
require 'rubygems'
require './model/master.rb'
require 'cgi'
Expand All @@ -19,12 +18,12 @@ def initialize(errorString)

class TemplateVerificationError < ReportingError
attr :template_tree

def initialize(errorString, template_tree)
super(errorString)
@template_tree = template_tree
end

def to_s
return "#{errorString}"
end
Expand Down Expand Up @@ -77,12 +76,12 @@ def verify_document(document)
if i+2 < metacharacters.length && metacharacters[i+2][1] == "µ"
tree.concat("#{tabs}¬#{condition}¬ ")
else
tree.concat("#{tabs}¬#{condition}¬\n")
tree.concat("#{tabs}¬#{condition}¬\n")
end
buffer.push("¬")
i = i+1


# ∆ character
when "∆"
previous = buffer.pop()
Expand All @@ -99,13 +98,13 @@ def verify_document(document)
end
locate_error(error, document, metacharacters[i][0])
tree_valid = false

tree.concat("#{tabs}∆ ←\n")
break
end
tree.concat("#{tabs}∆\n")


# † character
when "†"
tabs = "\t" * buffer.length
Expand All @@ -120,12 +119,12 @@ def verify_document(document)
tree.concat("#{tabs}†#{condition}†\n")
buffer.push("†")
i = i+1

# ¥ character
when "¥"
previous = buffer.pop()
tabs = "\t" * buffer.length

if previous != "†"
if previous == "¬"
error = "error when closing loop, expected ∆, got ¥ instead"
Expand All @@ -139,14 +138,14 @@ def verify_document(document)
# error.concat" at line #{document[0..metacharacters[i][0]].scan(/(?=<w:p( |>))/).count}"
locate_error(error, document, metacharacters[i][0])
tree_valid = false
tree.concat("#{tabs}¥ ←\n")

tree.concat("#{tabs}¥ ←\n")
break
end
tree.concat("#{tabs}¥\n")
tree.concat("#{tabs}¥\n")



# µ character
when "µ"
tabs = "\t" * buffer.length
Expand All @@ -162,12 +161,12 @@ def verify_document(document)
tree.concat("µ#{condition}µ\n")
buffer[-1] = "µ"
else
tree.concat("#{tabs}µ#{condition}µ\n")
tree.concat("#{tabs}µ#{condition}µ\n")
buffer.push("µ")
end
i = i+1


# ƒ character
when "ƒ"
tabs = "\t" * buffer.length
Expand All @@ -193,26 +192,26 @@ def verify_document(document)
break
end
i = i+1

# ÷ character
when "÷"
tabs = "\t" * buffer.length
if buffer[-1] == "µ" || buffer[-1] == "¬µ"
tree.concat("#{tabs}÷\n")
buffer[-1] = buffer[-1] + "÷"
else
else
error = "Error with a ÷ character : character must be inside a choose structure"
tree.concat("#{tabs}÷ ←\n")
tree_valid = false
locate_error(error, document, metacharacters[i][0])
break
end

# ≠ character
when "≠"
previous = buffer.pop()
tabs = "\t" * buffer.length

if previous != "¬µ÷"
if previous == "¬"
error = "error when closing loop, expected ∆, got ≠ instead"
Expand All @@ -227,17 +226,17 @@ def verify_document(document)
end
tree_valid = false
locate_error(error, document, metacharacters[i][0])

tree.concat("#{tabs}≠ ←\n")
break
end
tree.concat("#{tabs}≠\n")

# å character
when "å"
previous = buffer.pop()
tabs = "\t" * buffer.length

if previous != "µ÷"
if previous == "¬"
error = "error when closing loop, expected ∆, got å instead"
Expand All @@ -252,7 +251,7 @@ def verify_document(document)
end
tree_valid = false
locate_error(error, document, metacharacters[i][0])

tree.concat("#{tabs}å ←\n")
break
end
Expand All @@ -270,32 +269,32 @@ def verify_document(document)
end
j = j+1
end

tabs = "\t" * buffer.length

if j+i == metacharacters.length || not(tree_valid)
error = "Error with a ツ character : character without pair"
tree_valid = false
locate_error(error, document, metacharacters[i][0])
tree.concat("#{tabs}ツ ←\n")
break
end

if j.even?
error = "Error with a π character : character without pair"
tree_valid = false
content = document[metacharacters[i][0]+3..metacharacters[i+j][0]-1].gsub(/<.*?>/,"")
tree.concat("#{tabs}ツ#{content}ツ ←\n")
break
end


content = document[metacharacters[i][0]+3..metacharacters[i+j][0]-1].gsub(/<.*?>/,"")
tree.concat("#{tabs}ツ#{content}ツ\n")
i = i+j
i = i+j



# § character
when "§"
tabs = "\t" * buffer.length
Expand All @@ -308,9 +307,9 @@ def verify_document(document)
end
content = document[metacharacters[i][0]+2..metacharacters[i+1][0]-1].gsub(/<.*?>/,"")
tree.concat("#{tabs}§#{content}§\n")
i = i+1
i = i+1


# Ω character
when "Ω"
tabs = "\t" * buffer.length
Expand All @@ -321,45 +320,37 @@ def verify_document(document)
locate_error(error, document, metacharacters[i][0])
break
end
if buffer.grep(/^¬/).any?
error = "Error with a Ω character : must not be used inside loop"
tree_valid = false
content = document[metacharacters[i][0]+2..metacharacters[i+1][0]-1].gsub(/<.*?>/,"")
tree.concat("#{tabs}Ω#{content}Ω ←\n")
locate_error(error, document, metacharacters[i][0])
break
end
content = document[metacharacters[i][0]+2..metacharacters[i+1][0]-1].gsub(/<.*?>/,"")
tree.concat("#{tabs}Ω#{content}Ω\n")
i = i+1
i = i+1
# π character
when "π"
tabs = "\t" * buffer.length
if metacharacters[i+1][1] != "π"
if metacharacters[i+1][1] != "π"
error = "Error with a π character : character without pair"
tree_valid = false
tree.concat("#{tabs}π ←\n")
locate_error(error, document, metacharacters[i][0])
break
end

content = document[metacharacters[i][0]+2..metacharacters[i+1][0]-1].gsub(/<.*?>/,"")
tree.concat("#{tabs}π#{content}π\n")
i = i+1
i = i+1

# æ character
when "æ"
tabs = "\t" * buffer.length
if metacharacters[i+1][1] != "æ"
if metacharacters[i+1][1] != "æ"
error = "Error with a æ character : character without pair"
tree_valid = false
tree.concat("#{tabs}æ ←\n")
locate_error(error, document, metacharacters[i][0])
break
end

condition = document[metacharacters[i][0]+2..metacharacters[i+1][0]-1].gsub(/<.*?>/,"")

if /<w:tbl[ >]((?<!<\/w:tbl>).)*$/.match(document[0..metacharacters[i][0]]).nil?
error = "Error with a æ character : character must be inside of table"
tree_valid = false
Expand All @@ -370,32 +361,32 @@ def verify_document(document)
tree.concat("#{tabs}æ#{condition}æ\n")
buffer.push("æ")
i = i+1

# ∞ character
when "∞"
tabs = "\t" * buffer.length
if metacharacters[i+1][1] != "∞"
if metacharacters[i+1][1] != "∞"
error = "Error with a ∞ character : character without pair"
tree_valid = false
tree.concat("#{tabs}∞ ←\n")
locate_error(error, document, metacharacters[i][0])
break
end

condition = document[metacharacters[i][0]+3..metacharacters[i+1][0]-1].gsub(/<.*?>/,"")

tree.concat("#{tabs}∞#{condition}∞\n")
i = i+1

# end of table
when "<\/w:tr>"
if buffer[-1] == "æ"
buffer.pop()
end

end
i = i+1

i = i+1
end
if not(buffer.empty?) && tree_valid
previous = buffer.pop()
Expand All @@ -415,9 +406,9 @@ def verify_document(document)
tree.concat("#{tabs}←\n")
tree_valid = false
end

return tree_valid, error, tree

end

def generate_xslt(docx)
Expand All @@ -439,12 +430,12 @@ def generate_xslt(docx)
debug = false

document = read_rels(docx,"word/document.xml")

document.force_encoding("UTF-8")
tree_valid, error, tree = verify_document(document)
if not(tree_valid)
raise TemplateVerificationError.new(error,tree)
end

# fix for curly apostrophes
document = document.gsub(/‘/,"'")
document = document.gsub(/’/,"'")
Expand Down Expand Up @@ -488,7 +479,7 @@ def generate_xslt(docx)
#<xsl:for-each select="report/reports">
#<w:t xml:space="preserve"> <xsl:value-of select="contact_name"/> </w:t>
#</xsl:for-each>
replace[count] = "<xsl:for-each select=\"report/reports\"><xsl:value-of select=\"#{omega.downcase}\"/></xsl:for-each>"
replace[count] = "<xsl:value-of select=\"/report/reports/#{omega.downcase}\"/>"
count = count + 1
end

Expand Down Expand Up @@ -1067,7 +1058,7 @@ def generate_xslt_components(docx)

components.each do |component|
document = read_rels(docx,component)

document.force_encoding("UTF-8")
# replace {} for the sake of XSL
document = document.gsub("{","{{").gsub("}","}}")

Expand Down Expand Up @@ -1172,4 +1163,4 @@ def compress(omega)
end

return replacement
end
end
16 changes: 10 additions & 6 deletions routes/admin.rb
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@
config_options['cvss'] = false
config_options['cvssv3'] = false
config_options['riskmatrix'] = false
config_options['nist800'] = false
config_options['nist800'] = false
end

File.open('./config.json', 'w') do |f|
Expand Down Expand Up @@ -546,11 +546,15 @@
error = false
detail = ''
begin
xslt = generate_xslt(docx)
xslt_components = generate_xslt_components(docx)
rescue ReportingError => detail
error = true
end
xslt = generate_xslt(docx)
xslt_components = generate_xslt_components(docx)
rescue TemplateVerificationError => detail
@error_message = CGI::escapeHTML(detail.errorString)
@tree = CGI::escapeHTML(detail.template_tree)
return haml :template_error, encode_html: true
rescue ReportingError => detail
error = true
end

if error
"The report template you uploaded threw an error when parsing:<p><p> #{detail.errorString}"
Expand Down