Created
September 28, 2010 11:28
-
-
Save masaakif/600823 to your computer and use it in GitHub Desktop.
Merge HTML files with images/css to one HTML file
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "fileutils" | |
def formatCode(line) | |
line2 = line + "<br/>" | |
len = line2.length | |
line3 = "" | |
len.times{|i| | |
c = line2[i].chr | |
if c == " " then | |
line3 = line3 + " " | |
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 + " " | |
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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
how do I use this?