Commit 4df5d2c3 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Force all files to be read as UTF-8 in Ruby 1.9.

In Ruby 1.9 reading files through builtin IO class attempted to
auto-detect the encoding which sometimes failed.

Created JsDuck::IO to be used instead of it, which forces all files
to be treated as UTF-8.  It also behaves well in Ruby 1.8 - just
doing nothing with the input and causing no errors.
parent e94ae15b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ require 'jsduck/parallel_wrap'
require 'jsduck/logger'
require 'jsduck/assets'
require 'jsduck/json_duck'
require 'jsduck/io'
require 'jsduck/lint'
require 'jsduck/template_dir'
require 'jsduck/class_writer'
@@ -81,7 +82,7 @@ module JsDuck
    def parallel_parse(filenames)
      @parallel.map(filenames) do |fname|
        Logger.instance.log("Parsing", fname)
        SourceFile.new(IO.read(fname), fname, @opts)
        SourceFile.new(JsDuck::IO.read(fname), fname, @opts)
      end
    end

+2 −1
Original line number Diff line number Diff line
require 'jsduck/logger'
require 'jsduck/json_duck'
require 'jsduck/io'
require 'jsduck/null_object'
require 'jsduck/logger'
require 'jsduck/grouped_asset'
@@ -51,7 +52,7 @@ module JsDuck
      @formatter.doc_context = {:filename => guide_file, :linenr => 0}
      name = File.basename(in_dir)
      @formatter.img_path = "guides/#{name}"
      html = add_toc(guide, @formatter.format(IO.read(guide_file)))
      html = add_toc(guide, @formatter.format(JsDuck::IO.read(guide_file)))

      JsonDuck.write_jsonp(out_dir+"/README.js", name, {:guide => html, :title => guide["title"]})
    end
+2 −1
Original line number Diff line number Diff line
require 'jsduck/logger'
require 'jsduck/io'
require 'fileutils'

module JsDuck
@@ -49,7 +50,7 @@ module JsDuck
    # Opens in_file, replaces {keys} inside it, writes to out_file
    def write_template(in_file, out_file, replacements)
      Logger.instance.log("Writing", out_file)
      html = IO.read(in_file)
      html = JsDuck::IO.read(in_file)
      html.gsub!(/\{\w+\}/) do |key|
        replacements[key] ? replacements[key] : key
      end

lib/jsduck/io.rb

0 → 100644
+18 −0
Original line number Diff line number Diff line
module JsDuck

  # A helper to use instead the builtin IO class to read files in
  # correct encoding.
  #
  # By default in Ruby 1.9 the encoding is auto-detected, which can
  # have surprising results.  So in here we force all files to be
  # treated as UTF-8.
  class IO

    # Reads given filename into string
    def self.read(filename)
      File.open(filename, "r:UTF-8") {|f| f.read }
    end

  end

end
+2 −1
Original line number Diff line number Diff line
require 'jsduck/io'
require 'json'

module JsDuck
@@ -33,7 +34,7 @@ module JsDuck

    # Reads and parses JSON from file
    def self.read(filename)
      self.parse(IO.read(filename))
      self.parse(JsDuck::IO.read(filename))
    end

    # Parses JSON string
Loading