Skip to content

Commit

Permalink
Add a script for generating HTML screenshot list (#154)
Browse files Browse the repository at this point in the history
  • Loading branch information
maxim authored and mbadolato committed Apr 9, 2019
1 parent 2d3bd82 commit 4441f87
Showing 1 changed file with 91 additions and 0 deletions.
91 changes: 91 additions & 0 deletions tools/genHTML
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
#!/usr/bin/env ruby

require 'uri'

# Levenshtein distance implementation taken from:
# https://stackoverflow.com/a/16323861/155351
def lev(s, t)
m = s.length
n = t.length
return m if n == 0
return n if m == 0

d = Array.new(m+1) {Array.new(n+1)}

(0..m).each {|i| d[i][0] = i}
(0..n).each {|j| d[0][j] = j}
(1..n).each do |j|
(1..m).each do |i|
d[i][j] =
if s[i-1] == t[j-1]
d[i-1][j-1]
else
[ d[i-1][j]+1,
d[i][j-1]+1,
d[i-1][j-1]+1,
].min
end
end
end

d[m][n]
end

def find_scheme_lev(screenshot_file_name, all_scheme_names)
all_scheme_names
.map {|scheme_name| [lev(screenshot_file_name, scheme_name), scheme_name]}
.min
end

def find_scheme_naive(screenshot_file_name, all_scheme_names)
naive_guess =
screenshot_file_name
.capitalize
.gsub(/-(.)/) {|match| match[1].upcase}
.gsub(/_(.)/) {|match| " #{match[1].upcase}"}

return naive_guess if all_scheme_names.include?(naive_guess)
end

def build_screenshot_scheme_map
all_scheme_names = Dir["schemes/*.itermcolors"].map { |path|
File.basename(path, ".itermcolors")
}

found_schemes = []
stragglers = []

Dir['screenshots/*.png'].each do |path|
screenshot_file_name = File.basename(path, '.png')

if scheme_name = find_scheme_naive(screenshot_file_name, all_scheme_names)
found_schemes << [screenshot_file_name, scheme_name]
all_scheme_names.delete(scheme_name)
else
stragglers << screenshot_file_name
end
end

stragglers.each do |screenshot_file_name|
distance, scheme_name =
find_scheme_lev(screenshot_file_name, all_scheme_names)

if distance < 10
found_schemes << [screenshot_file_name, scheme_name]
all_scheme_names.delete(scheme_name)
else
found_schemes << [screenshot_file_name, nil]
end
end

found_schemes.sort
end

build_screenshot_scheme_map.reject{|pair| pair.last.nil?}.each do |screenshot_name, scheme_name|
puts <<-HTML
<p><a href="https://raw.githubusercontent.com/mbadolato/iTerm2-Color-Schemes/master/schemes/#{URI.escape(scheme_name)}.itermcolors"><strong>#{scheme_name}</strong></a></p>
<p><img src="https://raw.githubusercontent.com/mbadolato/iTerm2-Color-Schemes/master/screenshots/#{URI.escape(screenshot_name)}.png" alt="Screenshot"></p>
HTML
end

0 comments on commit 4441f87

Please sign in to comment.