PHP 8.2.31
Preview: encoding.rb Size: 2.52 KB
//proc/thread-self/root/opt/alt/ruby19/lib64/ruby/1.9.1/rdoc/encoding.rb

# coding: US-ASCII

require 'rdoc'

##
# This class is a wrapper around File IO and Encoding that helps RDoc load
# files and convert them to the correct encoding.

module RDoc::Encoding

  ##
  # Reads the contents of +filename+ and handles any encoding directives in
  # the file.
  #
  # The content will be converted to the +encoding+.  If the file cannot be
  # converted a warning will be printed and nil will be returned.
  #
  # If +force_transcode+ is true the document will be transcoded and any
  # unknown character in the target encoding will be replaced with '?'

  def self.read_file filename, encoding, force_transcode = false
    content = open filename, "rb" do |f| f.read end
    content.gsub!("\r\n", "\n") if RUBY_PLATFORM =~ /mswin|mingw/

    utf8 = content.sub!(/\A\xef\xbb\xbf/, '')

    RDoc::Encoding.set_encoding content

    if Object.const_defined? :Encoding then
      encoding ||= Encoding.default_external
      orig_encoding = content.encoding

      if utf8 then
        content.force_encoding Encoding::UTF_8
        content.encode! encoding
      else
        # assume the content is in our output encoding
        content.force_encoding encoding
      end

      unless content.valid_encoding? then
        # revert and try to transcode
        content.force_encoding orig_encoding
        content.encode! encoding
      end

      unless content.valid_encoding? then
        warn "unable to convert #{filename} to #{encoding}, skipping"
        content = nil
      end
    end

    content
  rescue ArgumentError => e
    raise unless e.message =~ /unknown encoding name - (.*)/
    warn "unknown encoding name \"#{$1}\" for #{filename}, skipping"
    nil
  rescue Encoding::UndefinedConversionError => e
    if force_transcode then
      content.force_encoding orig_encoding
      content.encode! encoding, :undef => :replace, :replace => '?'
      content
    else
      warn "unable to convert #{e.message} for #{filename}, skipping"
      nil
    end
  rescue Errno::EISDIR, Errno::ENOENT
    nil
  end

  ##
  # Sets the encoding of +string+ based on the magic comment

  def self.set_encoding string
    first_line = string[/\A(?:#!.*\n)?.*\n/]

    name = case first_line
           when /^<\?xml[^?]*encoding=(["'])(.*?)\1/ then $2
           when /\b(?:en)?coding[=:]\s*([^\s;]+)/i   then $1
           else                                           return
           end

    string.sub! first_line, ''

    return unless Object.const_defined? :Encoding

    enc = Encoding.find name
    string.force_encoding enc if enc
  end

end

Directory Contents

Dirs: 5 × Files: 35

Name Size Perms Modified Actions
generator DIR
- drwxr-xr-x 2024-03-03 22:48:11
Edit Download
markup DIR
- drwxr-xr-x 2024-03-03 22:48:11
Edit Download
parser DIR
- drwxr-xr-x 2024-03-03 22:48:11
Edit Download
ri DIR
- drwxr-xr-x 2024-03-03 22:48:11
Edit Download
stats DIR
- drwxr-xr-x 2024-03-03 22:48:11
Edit Download
2.12 KB lrw-r--r-- 2010-12-20 03:22:49
Edit Download
171 B lrw-r--r-- 2011-02-02 00:32:30
Edit Download
4.54 KB lrw-r--r-- 2011-06-16 04:59:24
Edit Download
2.88 KB lrw-r--r-- 2011-06-16 04:59:24
Edit Download
14.49 KB lrw-r--r-- 2011-08-05 21:21:55
Edit Download
6.56 KB lrw-r--r-- 2011-08-05 21:21:55
Edit Download
535 B lrw-r--r-- 2010-04-01 07:45:16
Edit Download
1.50 KB lrw-r--r-- 2010-12-20 03:22:49
Edit Download
28.14 KB lrw-r--r-- 2011-08-05 21:21:55
Edit Download
5.82 KB lrw-r--r-- 2011-08-05 21:21:55
Edit Download
2.52 KB lrw-r--r-- 2012-02-14 07:55:37
Edit Download
794 B lrw-r--r-- 2011-05-15 11:55:52
Edit Download
1.30 KB lrw-r--r-- 2011-02-02 00:32:30
Edit Download
141 B lrw-r--r-- 2010-04-01 07:45:16
Edit Download
2.11 KB lrw-r--r-- 2010-12-20 03:22:49
Edit Download
2.58 KB lrw-r--r-- 2011-06-29 21:17:31
Edit Download
20.96 KB lrw-r--r-- 2011-08-26 23:58:26
Edit Download
126 B lrw-r--r-- 2010-04-01 07:45:16
Edit Download
7.57 KB lrw-r--r-- 2011-05-15 11:55:52
Edit Download
1.58 KB lrw-r--r-- 2011-02-02 00:32:30
Edit Download
1.24 KB lrw-r--r-- 2011-02-02 00:32:30
Edit Download
18.79 KB lrw-r--r-- 2011-05-14 00:39:16
Edit Download
5.39 KB lrw-r--r-- 2011-08-26 23:58:26
Edit Download
11.97 KB lrw-r--r-- 2011-06-16 04:59:24
Edit Download
963 B lrw-r--r-- 2010-12-20 03:22:49
Edit Download
230 B lrw-r--r-- 2010-04-01 07:45:16
Edit Download
4.50 KB lrw-r--r-- 2011-06-16 04:59:24
Edit Download
26.07 KB lrw-r--r-- 2011-08-24 00:02:17
Edit Download
10.14 KB lrw-r--r-- 2010-12-20 03:22:49
Edit Download
359 B lrw-r--r-- 2011-02-02 00:32:30
Edit Download
9.52 KB lrw-r--r-- 2011-05-14 00:39:16
Edit Download
7.50 KB lrw-r--r-- 2011-05-14 00:39:16
Edit Download
7.22 KB lrw-r--r-- 2011-08-05 21:21:55
Edit Download
1015 B lrw-r--r-- 2010-12-20 03:22:49
Edit Download
10.10 KB lrw-r--r-- 2011-06-29 21:17:31
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).