PHP 8.2.31
Preview: encoding.rb Size: 2.86 KB
/proc/thread-self/root/opt/alt/ruby23/lib64/ruby/2.3.0/rdoc/encoding.rb

# coding: US-ASCII
# frozen_string_literal: false

##
# 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
      begin
        encoding ||= Encoding.default_external
        orig_encoding = content.encoding

        if not orig_encoding.ascii_compatible? then
          content.encode! encoding
        elsif 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
      rescue Encoding::InvalidByteSequenceError,
             Encoding::UndefinedConversionError => e
        if force_transcode then
          content.force_encoding orig_encoding
          content.encode!(encoding,
                          :invalid => :replace, :undef => :replace,
                          :replace => '?')
          return content
        else
          warn "unable to convert #{e.message} for #{filename}, skipping"
          return nil
        end
      end
    end

    content
  rescue ArgumentError => e
    raise unless e.message =~ /unknown encoding name - (.*)/
    warn "unknown encoding name \"#{$1}\" for #{filename}, skipping"
    nil
  rescue Errno::EISDIR, Errno::ENOENT
    nil
  end

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

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

    first_line = $1

    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: 9 × Files: 46

Name Size Perms Modified Actions
context DIR
- drwxr-xr-x 2024-03-03 22:43:27
Edit Download
generator DIR
- drwxr-xr-x 2024-03-03 22:43:27
Edit Download
i18n DIR
- drwxr-xr-x 2024-03-03 22:43:27
Edit Download
markdown DIR
- drwxr-xr-x 2024-03-03 22:43:27
Edit Download
markup DIR
- drwxr-xr-x 2024-03-03 22:43:27
Edit Download
parser DIR
- drwxr-xr-x 2024-03-03 22:43:27
Edit Download
rd DIR
- drwxr-xr-x 2024-03-03 22:43:27
Edit Download
ri DIR
- drwxr-xr-x 2024-03-03 22:43:27
Edit Download
stats DIR
- drwxr-xr-x 2024-03-03 22:43:27
Edit Download
2.12 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
173 B lrw-r--r-- 2015-12-16 05:07:31
Edit Download
7.07 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
3.76 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
19.76 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
9.41 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
152 B lrw-r--r-- 2015-12-16 05:07:31
Edit Download
5.32 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
3.58 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
28.79 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
5.85 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
2.86 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
825 B lrw-r--r-- 2015-12-16 05:07:31
Edit Download
401 B lrw-r--r-- 2015-12-20 06:36:57
Edit Download
171 B lrw-r--r-- 2015-12-16 05:07:31
Edit Download
1.80 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
145 B lrw-r--r-- 2015-12-16 05:07:31
Edit Download
182 B lrw-r--r-- 2015-12-16 05:07:31
Edit Download
173 B lrw-r--r-- 2015-12-16 05:07:31
Edit Download
2.62 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
373.78 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
28.27 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
130 B lrw-r--r-- 2015-12-16 05:07:31
Edit Download
9.04 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
2.75 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
2.13 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
1.43 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
30.92 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
8.09 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
3.57 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
13.63 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
966 B lrw-r--r-- 2015-12-16 05:07:31
Edit Download
346 B lrw-r--r-- 2015-12-16 05:07:31
Edit Download
5.29 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
27.75 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
11.35 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
11.88 KB lrw-r--r-- 2015-12-22 12:08:13
Edit Download
409 B lrw-r--r-- 2015-12-16 05:07:31
Edit Download
10.48 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
22.40 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
7.69 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
4.19 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
7.89 KB lrw-r--r-- 2015-12-22 12:08:13
Edit Download
2.50 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
6.29 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
5.44 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download

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