Sha256: 3062a3a6d05d1f2311a38cb9f0866deee82ac88f93ad9dee5e92b69478aa712b

Contents?: true

Size: 1.37 KB

Versions: 11

Compression:

Stored size: 1.37 KB

Contents

require "optparse"
require "uri"
require "fileutils"
require "tempfile"
require "strscan"

canonical_base_url = "https://docs.ruby-lang.org/ja/latest/"
base_dir = nil

parser = OptionParser.new
parser.on("--canonical-base-url=URL", "Canonical base URL") do |url|
  canonical_base_url = URI(url)
end
parser.on("--base-dir=DIR", "Base directory") do |dir|
  base_dir = dir
end

begin
  parser.parse!
rescue OptionParser::ParseError => ex
  $stderr.puts ex.message
  $stderr.push parser.help
  exit(false)
end

def insert_canonical_url(canonical_base_url, entry)
  canonical_link = %Q(<link rel="canonical" href="#{canonical_base_url + entry}">\n)
  scanner = StringScanner.new(File.read(entry))
  Tempfile.create(File.basename(entry)) do |file|
    loop do
      if scanner.scan(%r!( +)<link rel="icon" type="image/png" href=".+">\n!)
        matched = scanner.matched
        file.write(matched)
        file.write(scanner[1])
        file.write(canonical_link)
      end
      ch = scanner.getch
      if ch
        file.write(ch)
      else
        break
      end
    end
    mode = File.stat(entry).mode
    file.flush
    FileUtils.cp(file.path, entry)
    File.chmod(mode, entry)
  end
end

Dir.chdir(base_dir) do
  Dir.glob("**/*.html") do |entry|
    print entry
    insert_canonical_url(canonical_base_url, entry)
    print "\r"
    print " " * entry.bytesize
    print "\r"
  end
  puts "done"
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
bitclust-dev-1.3.0 tools/insert-canonical.rb
bitclust-dev-1.2.6 tools/insert-canonical.rb
bitclust-dev-1.2.5 tools/insert-canonical.rb
bitclust-dev-1.2.4 tools/insert-canonical.rb
bitclust-dev-1.2.3 tools/insert-canonical.rb
bitclust-dev-1.2.2 tools/insert-canonical.rb
bitclust-dev-1.2.1 tools/insert-canonical.rb
bitclust-dev-1.2.0 tools/insert-canonical.rb
bitclust-dev-1.1.1 tools/insert-canonical.rb
bitclust-dev-1.1.0 tools/insert-canonical.rb
bitclust-dev-1.0.0 tools/insert-canonical.rb