Skip to content

Instantly share code, notes, and snippets.

@masaakif
Created September 28, 2010 11:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save masaakif/600823 to your computer and use it in GitHub Desktop.
Save masaakif/600823 to your computer and use it in GitHub Desktop.
Merge HTML files with images/css to one HTML file
require "fileutils"
def formatCode(line)
line2 = line + "<br/>"
len = line2.length
line3 = ""
len.times{|i|
c = line2[i].chr
if c == " " then
line3 = line3 + "&emsp;"
else
line3 = line3 + line2[i,len]
break
end
}
return line3
end
def moveFiles(dst, css)
Dir.mkdir(dst) unless FileTest.exist?(dst)
FileUtils.cp(css, dst + "/" + css) unless FileTest.exist?(dst + "/" + css)
Dir.glob("print_*").each{|o|
File.rename(o, dst + "/" + o) unless FileTest.exist?(dst + "/" + o)
}
end
class HtmlMerger
def initialize(header_height = 0, footer_height = 0)
@en_header = header_height
@h_footer = footer_height
end
def countLine
return nil unless FileTest.file?(@src)
File.open(@src){|f|
while line = f.gets
return f.lineno if f.eof
end
}
end
def merge(src, dst, header = false, footer = false)
@src = src
@dst = dst
@header = header
@footer = footer
@lineno = countLine
printf "%5d(lines) : %s\n", @lineno, @src
mergeMain if @lineno
end
private
def mergeMain
@st_footer = @lineno - @h_footer
open(@dst, "a"){|@f|
open(@src){|@io|
@inPre = false
while @line = @io.gets
writeLine
end
@line = nil
@inPre = nil
@st_footer = nil
@lineno = nil
}
}
end
def writeLine
if (@footer == false && @io.lineno > @st_footer) then
#nothing to do
elsif (@header == false && @io.lineno < @en_header) then
#nothing to do
elsif (@header == false && @io.lineno == @en_header) then
if @line.index("if(self.E)self.E") then
l2 = "<div>" + @line.split(/<\/div><div>/)[1]
@f.write(l2)
else
@f.write(@line)
end
else
if @inPre == false && @line.index("<pre>") then
@inPre = true
end
if @inPre == true && @line.index("</pre>") then
@inPre = false
end
if @inPre == true then
@line = formatCode(@line)
end
@f.write(@line)
end
end
def formatCode(line)
line2 = line + "<br/>"
len = line2.length
line3 = ""
len.times{|i|
c = line2[i].chr
if c == " " then
line3 = line3 + "&emsp;"
else
line3 = line3 + line2[i,len]
break
end
}
return line3
end
end
# header = true : Keep header / false : delete header
# footer = true : Keep footer / false : delete footer
def mergeInto(src, dst, header = false, footer = false)
lineno = 0
File.open(src){|f|
while line = f.gets
lineno = f.lineno if f.eof?
end
}
printf "%5d(lines) : %s\n", lineno, src
open(dst, "a"){|f|
open(src) {|io|
inPre = false
while line = io.gets
(isValid, line, inPre) = getSafariLine(line, header, footer, inPre)
f.write(line) if isValid
end
}
}
end
# copy globalstyle.css to all directories
css = "globalstyle.css"
header_height = 57
footer_height = 5
ARGV.length.times{|i|
v = ARGV[i]
if v.index("-o=") then
dst = "Compiled/" + v[3,v.length]
moveFiles(dst, css)
Dir.chdir(dst)
end
if v.index("-h=") then
header_height = v[3,v.length].to_i
end
if v.index("-f=") then
footer_height = v[3,v.length].to_i
end
}
l = Dir::pwd.split(/\//)
mergedFile = l[l.length - 1] + ".html"
File.delete(mergedFile) if FileTest.file?(mergedFile)
Dir.glob("*_files").each{ |o|
next unless FileTest.directory?(o)
FileUtils.cp(css, o + "/" + css) unless FileTest.file?(o + "/" + css)
}
# merge *.htm to mergedFile
l = Dir.glob("*.htm")
lst = l.length
cnt = 1
l.each{ |o|
next if FileTest.directory?(o)
hm = HtmlMerger.new(header_height, footer_height)
if (cnt == 1) then
# keep header but delete last part
#mergeInto(o, mergedFile, true, false)
hm.merge(o, mergedFile, true, false)
elsif (cnt == lst) then
# delete header but keep last part
#mergeInto(o, mergedFile, false, true)
hm.merge(o, mergedFile, false, true)
else
# delete both header and last
#mergeInto(o, mergedFile)
hm.merge(o, mergedFile)
end
cnt += 1
}
printf "%s created.\n", mergedFile
@hl24a3
Copy link

hl24a3 commented Apr 15, 2022

how do I use this?

@morethanhater
Copy link

how do I use this?

lol, true

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment