Add a (ChatGPT-provided) script to subset feather icons
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
parent
2f60004241
commit
ce8f8fb872
50
chatgpt-subset-feather-icon.rb
Normal file
50
chatgpt-subset-feather-icon.rb
Normal file
@ -0,0 +1,50 @@
|
||||
#!/usr/bin/env ruby
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'nokogiri'
|
||||
require 'set'
|
||||
|
||||
# 1) Find all HTML files, excluding those in "venv/"
|
||||
files = Dir.glob("**/*.html").reject { |f| f.start_with?("venv") }
|
||||
|
||||
# 2) Extract used Feather icons
|
||||
used_icons = Set.new
|
||||
|
||||
files.each do |file|
|
||||
# Parse each HTML file
|
||||
doc = File.open(file, "r:UTF-8") { |f| Nokogiri::HTML(f) }
|
||||
|
||||
# Look for <use xlink:href="/feather-sprite.svg#iconName">
|
||||
doc.css("use").each do |use_tag|
|
||||
href = use_tag["xlink:href"] || use_tag["href"]
|
||||
if href && href.start_with?("/feather-sprite.svg#")
|
||||
icon_name = href.split("#").last
|
||||
used_icons << icon_name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
puts "Found #{used_icons.size} unique icons: #{used_icons.to_a.join(', ')}"
|
||||
|
||||
# 3) Load the full feather-sprite.svg as XML
|
||||
sprite_doc = File.open("feather-sprite.svg", "r:UTF-8") { |f| Nokogiri::XML(f) }
|
||||
|
||||
# 4) Create a new SVG with only the required symbols
|
||||
new_svg = Nokogiri::XML::Document.new
|
||||
svg_tag = Nokogiri::XML::Node.new("svg", new_svg)
|
||||
svg_tag["xmlns"] = "http://www.w3.org/2000/svg"
|
||||
new_svg.add_child(svg_tag)
|
||||
|
||||
sprite_doc.css("symbol").each do |symbol_node|
|
||||
if used_icons.include?(symbol_node["id"])
|
||||
# Duplicate the symbol node (so it can be inserted in the new document)
|
||||
svg_tag.add_child(symbol_node.dup)
|
||||
end
|
||||
end
|
||||
|
||||
# 5) Save the subset sprite
|
||||
File.open("custom-sprite.svg", "w:UTF-8") do |f|
|
||||
f.write(new_svg.to_xml)
|
||||
end
|
||||
|
||||
puts "Generated custom-sprite.svg with only the required icons."
|
Loading…
Reference in New Issue
Block a user