diff --git a/helpers/xslt_generation.rb b/helpers/xslt_generation.rb index fdac54db..a013fb09 100644 --- a/helpers/xslt_generation.rb +++ b/helpers/xslt_generation.rb @@ -18,16 +18,18 @@ def initialize(errorString) def generate_xslt(docx) -# hardcoded stuff +# Initialize the xsl @top = ' + progid="Word.Document" ' +@bottom = '' document = "" debug = false @@ -61,12 +63,13 @@ def generate_xslt(docx) count = count + 1 next end - + + # Execute when between two Ω omega = compress(omega) # now, we replace omega with the real deal # - # + # # replace[count] = "" count = count + 1 @@ -93,17 +96,18 @@ def generate_xslt(docx) next end + # Execute when between two § omega = compress(omega) # now, we replace omega with the real deal - # - # + # + # # replace[count] = "" count = count + 1 end - # remove all the Ω and put the document back together + # remove all the § and put the document back together document = replace.join("") @@ -125,12 +129,14 @@ def generate_xslt(docx) next end + # Execute when between two π omega = compress(omega) replace[count] = "" count = count + 1 end + # remove all the π and put the document back together document = replace.join("") ########################### @@ -149,14 +155,15 @@ def generate_xslt(docx) count = count + 1 next end - + + # Execute when between two ∞ omega = compress(omega) replace[count] = "" - count = count + 1 end + # remove all the π and put the document back together document = replace.join("") ############################### @@ -181,6 +188,7 @@ def generate_xslt(docx) next end + # Execute when between two æ omega = compress(omega) if omega =~ /:::/ @@ -194,11 +202,11 @@ def generate_xslt(docx) q = "" conditions.each do |condition| - # add uppercase/lowercase to allow users to test for string matches (e.g. type='Database') - q << "" unless q.include?("" end q << " + # and every necessary x = replace[count-1].reverse.sub("#{q}".reverse).reverse replace[count-1] = x end @@ -216,6 +224,7 @@ def generate_xslt(docx) else #skip back to the previous TABLEROW x = replace[count-1].reverse.sub("" unless q.include?("" end else for_iffies.push(0) end - - # we need to search backwards for '' or '") - space = replace[count-1].rindex(" space - x = replace[count-1].reverse.sub("".reverse,"#{q}".reverse).reverse - replace[count-1] = x + + # Replace everything behind ¬ in the current paragraph for + # and every necessary + x = replace[count-1].sub(/]*?>((?]).)*$/,"#{q}") + replace[count-1] = x + + tagIndex = replace[count+1].rindex("") + chooseIndex = replace[count+1].rindex("µ") + if chooseIndex.nil? or tagIndex < chooseIndex + # if there isn't any µ before the end of the paragraph, delete the rest of the paragraph + replace[count+1] = replace[count+1].sub(/^<\/w:t>.*?<\/w:r>.*?<\/w:p>/, '') else - x = replace[count-1].reverse.sub("#{q}" - if document.include?("".reverse,"#{cs}".reverse).reverse + # Replace everything behind the first † in the current paragraph for + x = replace[count-1].sub(/]*?>((?]).)*$/,"") replace[count-1] = x - + # Remove the rest of the paragraph + replace[count+1] = replace[count+1].sub(/^<\/w:t>.*?<\/w:r>.*?<\/w:p>/, '') + replace[count]='' count = count + 1 end + + # remove all the † and put the document back together document = replace.join("") ########################### # ÷ - otherwise . Used in XSLT choose loops - document = document.gsub('÷',"") + + q = "" + document.each_line("÷"){ |a| + if a =~ /÷/ + # replace the first before a ÷ for + x = a.reverse.sub("".reverse,"".reverse).reverse + a = x.gsub('÷','') + end + + q << a + } + document = q ########################### # ¥ - ends an if statement @@ -340,7 +365,7 @@ def generate_xslt(docx) document.each_line("¥"){ |a| if subst x = "" - # we need to search forwards for '' + # Replace the first after a ¥ for x = a.sub("","") a = x subst = false @@ -385,9 +410,10 @@ def generate_xslt(docx) next end + # Execute when between two ƒ omega = compress(omega) - # we need to search backwards for '' or ' behind the first ƒ in the current paragraph for woutspace = replace[count-1].rindex("") space = replace[count-1].rindex("' or '") - space = replace[count-1].rindex(" space - x = replace[count-1].reverse.sub("".reverse,"".reverse).reverse - replace[count-1] = x - else - x = replace[count-1].reverse.sub("" + count = count + 1 end + # remove all the µ and put the document back together document = replace.join("") ############################### @@ -455,7 +472,7 @@ def generate_xslt(docx) document.each_line("å"){ |a| if subst x = "" - # we need to search forwards for '' + # Replace the first after a å for x = a.sub("","") a = x subst = false @@ -506,7 +523,7 @@ def generate_xslt(docx) document.each_line("≠"){ |a| if subst x = "" - # we need to search forwards for '' + # Replace the first after a ≠ for x = a.sub("","") a = x subst = false @@ -520,15 +537,15 @@ def generate_xslt(docx) } document = q - ############################### # ∆ - end for-each # add end if's end_ifs = '' r_for_iffies.each do |fi| + # Replace each paragraph containing a ∆ by the appropritate number of and a end_ifs = ""*fi - document = document.sub('∆',"#{end_ifs}") + document = document.sub(/]*?>((?]).)*∆<\/w:t>.*?<\/w:r>.*?<\/w:p>/,"#{end_ifs}") end ########################### @@ -542,6 +559,9 @@ def generate_xslt(docx) # final changes placed here document = white_space(document) + # add in xslt footer + document = document + @bottom + #return the xslt return document end