gxg-framework/doc/GxG/Support/Library/Transcoding.html
2021-11-16 08:41:53 -08:00

723 lines
55 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>module GxG::Support::Library::Transcoding - RDoc Documentation</title>
<script type="text/javascript">
var rdoc_rel_prefix = "../../../";
var index_rel_prefix = "../../../";
</script>
<script src="../../../js/navigation.js" defer></script>
<script src="../../../js/search.js" defer></script>
<script src="../../../js/search_index.js" defer></script>
<script src="../../../js/searcher.js" defer></script>
<script src="../../../js/darkfish.js" defer></script>
<link href="../../../css/fonts.css" rel="stylesheet">
<link href="../../../css/rdoc.css" rel="stylesheet">
<body id="top" role="document" class="module">
<nav role="navigation">
<div id="project-navigation">
<div id="home-section" role="region" title="Quick navigation" class="nav-section">
<h2>
<a href="../../../index.html" rel="home">Home</a>
</h2>
<div id="table-of-contents-navigation">
<a href="../../../table_of_contents.html#pages">Pages</a>
<a href="../../../table_of_contents.html#classes">Classes</a>
<a href="../../../table_of_contents.html#methods">Methods</a>
</div>
</div>
<div id="search-section" role="search" class="project-section initially-hidden">
<form action="#" method="get" accept-charset="utf-8">
<div id="search-field-wrapper">
<input id="search-field" role="combobox" aria-label="Search"
aria-autocomplete="list" aria-controls="search-results"
type="text" name="search" placeholder="Search" spellcheck="false"
title="Type to search, Up and Down to navigate, Enter to load">
</div>
<ul id="search-results" aria-label="Search Results"
aria-busy="false" aria-expanded="false"
aria-atomic="false" class="initially-hidden"></ul>
</form>
</div>
</div>
<div id="class-metadata">
<!-- Method Quickref -->
<div id="method-list-section" class="nav-section">
<h3>Methods</h3>
<ul class="link-list" role="directory">
<li ><a href="#method-i-convert_to_string">#convert_to_string</a>
<li ><a href="#method-i-field_separator_used">#field_separator_used</a>
<li ><a href="#method-i-newline_option_used">#newline_option_used</a>
<li ><a href="#method-i-newline_used">#newline_used</a>
<li ><a href="#method-i-prepare_conversion_options">#prepare_conversion_options</a>
<li ><a href="#method-i-record_separator_used">#record_separator_used</a>
<li ><a href="#method-i-transcode_to_external">#transcode_to_external</a>
<li ><a href="#method-i-transcode_to_internal">#transcode_to_internal</a>
</ul>
</div>
</div>
</nav>
<main role="main" aria-labelledby="module-GxG::Support::Library::Transcoding">
<h1 id="module-GxG::Support::Library::Transcoding" class="module">
module GxG::Support::Library::Transcoding
</h1>
<section class="description">
</section>
<section id="5Buntitled-5D" class="documentation-section">
<section id="public-instance-5Buntitled-5D-method-details" class="method-section">
<header>
<h3>Public Instance Methods</h3>
</header>
<div id="method-i-convert_to_string" class="method-detail ">
<div class="method-heading">
<span class="method-name">convert_to_string</span><span
class="method-args">(the_object=nil,encoding=::Encoding.default_external,conversion_options={})</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="convert_to_string-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_transcode.rb, line 214</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">convert_to_string</span>(<span class="ruby-identifier">the_object</span>=<span class="ruby-keyword">nil</span>,<span class="ruby-identifier">encoding</span>=<span class="ruby-operator">::</span><span class="ruby-constant">Encoding</span>.<span class="ruby-identifier">default_external</span>,<span class="ruby-identifier">conversion_options</span>={})
<span class="ruby-comment"># return the supplied string, or supported object string data, or UTF_8 codepoint, un-transcoded</span>
<span class="ruby-comment"># encoding is used for when a byte value integer is passed to know what encoding to set.</span>
<span class="ruby-identifier">the_string</span> = <span class="ruby-string">&quot;&quot;</span>
<span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">force_encoding</span>(<span class="ruby-identifier">encoding</span> <span class="ruby-operator">||</span> <span class="ruby-operator">::</span><span class="ruby-constant">Encoding</span>.<span class="ruby-identifier">default_external</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_object</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_object</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Array</span>)
<span class="ruby-identifier">dataset</span> = <span class="ruby-identifier">the_object</span>.<span class="ruby-identifier">flatten</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">dataset</span> = [(<span class="ruby-identifier">the_object</span>)]
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">dataset</span>.<span class="ruby-identifier">to_enum</span>(<span class="ruby-value">:each</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">object</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">buffer</span> = <span class="ruby-string">&quot;&quot;</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">object</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">String</span>)
<span class="ruby-comment"># find the string content of these classes and pass them for transcoding: Numeric, String, ::IO via gets, ::StringIO via gets, ::GxG::ByteArray</span>
<span class="ruby-identifier">buffer</span> = <span class="ruby-identifier">object</span>.<span class="ruby-identifier">dup</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">object</span>.<span class="ruby-identifier">is_any?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">IO</span>, <span class="ruby-operator">::</span><span class="ruby-constant">StringIO</span>)
<span class="ruby-comment"># Note: what issues arise when the_object is in binary mode? Also, how does this scale to very large things or files?</span>
<span class="ruby-identifier">buffer</span> = <span class="ruby-identifier">object</span>.<span class="ruby-identifier">gets</span>().<span class="ruby-identifier">to_s</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">object</span>.<span class="ruby-identifier">is_any?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">ByteArray</span>)
<span class="ruby-identifier">buffer</span> = <span class="ruby-identifier">object</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">object</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Numeric</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">object</span>.<span class="ruby-identifier">to_i</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">0</span>
<span class="ruby-identifier">data</span> = <span class="ruby-string">&quot;&quot;</span>
<span class="ruby-keyword">if</span> (<span class="ruby-value">0xFFFFFFFF</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">object</span>.<span class="ruby-identifier">to_i</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">255</span>
<span class="ruby-comment"># interprets as unicode code point</span>
<span class="ruby-identifier">data</span>.<span class="ruby-identifier">force_encoding</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Encoding</span><span class="ruby-operator">::</span><span class="ruby-constant">UTF_8</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># interprets as a char value in its own encoding, no transcoding needed.</span>
<span class="ruby-identifier">data</span>.<span class="ruby-identifier">force_encoding</span>(<span class="ruby-identifier">encoding</span> <span class="ruby-operator">||</span> <span class="ruby-operator">::</span><span class="ruby-constant">Encoding</span>.<span class="ruby-identifier">default_external</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">buffer</span> = (<span class="ruby-identifier">data</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">object</span>.<span class="ruby-identifier">to_i</span>)
<span class="ruby-identifier">data</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># signed integers not supported for char values or codepoints at this time.</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">encoding</span> <span class="ruby-operator">==</span> (<span class="ruby-identifier">encoding</span> <span class="ruby-operator">||</span> <span class="ruby-operator">::</span><span class="ruby-constant">Encoding</span>.<span class="ruby-identifier">default_external</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">binmode?</span>())
<span class="ruby-identifier">the_string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">buffer</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># ::String::transcode_options((encoding || ::Encoding.default_external),buffer.encoding, (conversion_options || {}))</span>
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">binmode?</span>()
<span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">to_enum</span>(<span class="ruby-value">:chars</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_char</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">the_char</span>.<span class="ruby-identifier">to_enum</span>(<span class="ruby-value">:bytes</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_byte</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">the_string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">the_byte</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">nl_op</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">newline_option_used</span>(<span class="ruby-identifier">conversion_options</span>)
<span class="ruby-identifier">options</span> = {}
<span class="ruby-keyword">if</span> <span class="ruby-identifier">nl_op</span>
<span class="ruby-identifier">options</span>[(<span class="ruby-identifier">nl_op</span>)] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">the_string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">transcode!</span>((<span class="ruby-identifier">encoding</span> <span class="ruby-operator">||</span> <span class="ruby-operator">::</span><span class="ruby-constant">Encoding</span>.<span class="ruby-identifier">default_external</span>),<span class="ruby-identifier">options</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">the_string</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-field_separator_used" class="method-detail ">
<div class="method-heading">
<span class="method-name">field_separator_used</span><span
class="method-args">(io_channel=:external)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="field_separator_used-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_transcode.rb, line 162</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">field_separator_used</span>(<span class="ruby-identifier">io_channel</span>=<span class="ruby-value">:external</span>)
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-value">:@internal_encoding</span>)
<span class="ruby-ivar">@internal_encoding</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-value">:@internal_field_separator</span>)
<span class="ruby-ivar">@internal_field_separator</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-value">:@external_field_separator</span>)
<span class="ruby-ivar">@external_field_separator</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">field_separator</span> = <span class="ruby-string">&quot;&quot;</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">io_channel</span> <span class="ruby-operator">==</span> <span class="ruby-value">:internal</span>
<span class="ruby-identifier">field_separator</span>.<span class="ruby-identifier">force_encoding</span>((<span class="ruby-ivar">@internal_encoding</span> <span class="ruby-operator">||</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">external_encoding</span>))
<span class="ruby-identifier">field_separator</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-ivar">@internal_field_separator</span> <span class="ruby-operator">||</span> (<span class="ruby-identifier">$,</span>).<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">io_channel</span> = <span class="ruby-value">:external</span>
<span class="ruby-identifier">field_separator</span>.<span class="ruby-identifier">force_encoding</span>(<span class="ruby-keyword">self</span>.<span class="ruby-identifier">external_encoding</span>)
<span class="ruby-identifier">field_separator</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-ivar">@external_field_separator</span> <span class="ruby-operator">||</span> (<span class="ruby-identifier">$,</span>).<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">field_separator</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-identifier">field_separator</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-newline_option_used" class="method-detail ">
<div class="method-heading">
<span class="method-name">newline_option_used</span><span
class="method-args">(io_channel=:external)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="newline_option_used-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_transcode.rb, line 103</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">newline_option_used</span>(<span class="ruby-identifier">io_channel</span>=<span class="ruby-value">:external</span>)
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-value">:@conversion_options</span>)
<span class="ruby-ivar">@conversion_options</span> = {<span class="ruby-value">:internal</span> <span class="ruby-operator">=&gt;</span> {}, <span class="ruby-value">:external</span> <span class="ruby-operator">=&gt;</span> {}}
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># determine the correct new_line trancoding option used</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">io_channel</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
<span class="ruby-identifier">options</span> = <span class="ruby-identifier">io_channel</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">options</span> = (<span class="ruby-ivar">@conversion_options</span>[(<span class="ruby-identifier">io_channel</span>.<span class="ruby-identifier">to_sym</span>)] <span class="ruby-operator">||</span> {})
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:cr_newline</span>]
<span class="ruby-value">:cr_newline</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:crlf_newline</span>]
<span class="ruby-value">:crlf_newline</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:universal_newline</span>]
<span class="ruby-value">:universal_newline</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># use nil if none specified</span>
<span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-newline_used" class="method-detail ">
<div class="method-heading">
<span class="method-name">newline_used</span><span
class="method-args">(io_channel=:external)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="newline_used-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_transcode.rb, line 130</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">newline_used</span>(<span class="ruby-identifier">io_channel</span>=<span class="ruby-value">:external</span>)
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-value">:@conversion_options</span>)
<span class="ruby-ivar">@conversion_options</span> = {<span class="ruby-value">:internal</span> <span class="ruby-operator">=&gt;</span> {}, <span class="ruby-value">:external</span> <span class="ruby-operator">=&gt;</span> {}}
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-value">:@internal_encoding</span>)
<span class="ruby-ivar">@internal_encoding</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">newline</span> = <span class="ruby-string">&quot;&quot;</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">io_channel</span> <span class="ruby-operator">==</span> <span class="ruby-value">:internal</span>
<span class="ruby-identifier">newline</span>.<span class="ruby-identifier">force_encoding</span>((<span class="ruby-ivar">@internal_encoding</span> <span class="ruby-operator">||</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">external_encoding</span>))
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">io_channel</span> = <span class="ruby-value">:external</span>
<span class="ruby-identifier">newline</span>.<span class="ruby-identifier">force_encoding</span>(<span class="ruby-keyword">self</span>.<span class="ruby-identifier">external_encoding</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># determine the correct new_line_separator</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@conversion_options</span>[(<span class="ruby-identifier">io_channel</span>)][<span class="ruby-value">:cr_newline</span>]
<span class="ruby-identifier">newline</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;\r&quot;</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@conversion_options</span>[(<span class="ruby-identifier">io_channel</span>)][<span class="ruby-value">:crlf_newline</span>]
<span class="ruby-identifier">newline</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;\r\n&quot;</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@conversion_options</span>[(<span class="ruby-identifier">io_channel</span>)][<span class="ruby-value">:universal_newline</span>]
<span class="ruby-identifier">newline</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;\n&quot;</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># use global default if none specified</span>
<span class="ruby-identifier">newline</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">$/</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">newline</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-prepare_conversion_options" class="method-detail ">
<div class="method-heading">
<span class="method-name">prepare_conversion_options</span><span
class="method-args">(options={})</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Instance Methods</p>
<div class="method-source-code" id="prepare_conversion_options-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_transcode.rb, line 8</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">prepare_conversion_options</span>(<span class="ruby-identifier">options</span>={})
<span class="ruby-comment"># obsoleted by ::String::transcode_options</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;You must pass conversion options parameter as a Hash&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">new_options</span> = {}
<span class="ruby-comment">#</span>
<span class="ruby-identifier">valid_options</span> = [<span class="ruby-value">:invalid</span>,<span class="ruby-value">:undef</span>,<span class="ruby-value">:replace</span>,<span class="ruby-value">:fallback</span>,<span class="ruby-value">:xml</span>,<span class="ruby-value">:cr_newline</span>,<span class="ruby-value">:crlf_newline</span>,<span class="ruby-value">:universal_newline</span>]
<span class="ruby-comment">#</span>
<span class="ruby-keyword">for</span> <span class="ruby-identifier">the_option_key</span> <span class="ruby-keyword">in</span> <span class="ruby-identifier">valid_options</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[(<span class="ruby-identifier">the_option_key</span>)]
<span class="ruby-comment"># Note Source: http://ruby-doc.org/core-1.9.3/String.html#method-i-encode</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_option_key</span> <span class="ruby-operator">==</span> <span class="ruby-value">:fallback</span>
<span class="ruby-comment"># Sets the replacement string by the given object for undefined character. The object should be a Hash, a Proc, a Method,</span>
<span class="ruby-comment"># or an object which has [] method. Its key is an undefined character encoded in the source encoding of current transcoder.</span>
<span class="ruby-comment"># Its value can be any encoding until it can be converted into the destination encoding of the transcoder.</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">new_options</span>[<span class="ruby-value">:replace</span>]
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">options</span>[<span class="ruby-value">:fallback</span>].<span class="ruby-identifier">is_any?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>, <span class="ruby-operator">::</span><span class="ruby-constant">Struct</span>, <span class="ruby-operator">::</span><span class="ruby-constant">Proc</span>, <span class="ruby-operator">::</span><span class="ruby-constant">Method</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:fallback</span>].<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:[]</span>))
<span class="ruby-comment"># if :fallback will not process an Array as mentioned above ... remove :[] respond_to? condition.</span>
<span class="ruby-identifier">new_options</span>[<span class="ruby-value">:fallback</span>] = <span class="ruby-identifier">options</span>[<span class="ruby-value">:fallback</span>]
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_option_key</span> <span class="ruby-operator">==</span> <span class="ruby-value">:invalid</span>
<span class="ruby-comment"># If the value is :replace, encode replaces invalid byte sequences in str with the replacement character. The default is to</span>
<span class="ruby-comment"># raise the Encoding::InvalidByteSequenceError exception</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">new_options</span>[<span class="ruby-value">:fallback</span>]
<span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:invalid</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:replace</span>
<span class="ruby-identifier">new_options</span>[<span class="ruby-value">:invalid</span>] = <span class="ruby-value">:replace</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">the_option_key</span> <span class="ruby-operator">==</span> <span class="ruby-value">:undef</span>)
<span class="ruby-comment"># If the value is :replace, encode replaces characters which are undefined in the destination encoding with the replacement character.</span>
<span class="ruby-comment"># The default is to raise the Encoding::UndefinedConversionError.</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">new_options</span>[<span class="ruby-value">:fallback</span>]
<span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:undef</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:replace</span>
<span class="ruby-identifier">new_options</span>[<span class="ruby-value">:undef</span>] = <span class="ruby-value">:replace</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">the_option_key</span> <span class="ruby-operator">==</span> <span class="ruby-value">:replace</span>)
<span class="ruby-comment"># Sets the replacement string to the given value. The default replacement string is “uFFFD” for Unicode encoding forms, and “?” otherwise.</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">new_options</span>[<span class="ruby-value">:fallback</span>]
<span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:replace</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">String</span>)
<span class="ruby-identifier">new_options</span>[<span class="ruby-value">:replace</span>] = <span class="ruby-identifier">options</span>[<span class="ruby-value">:replace</span>]
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_option_key</span> <span class="ruby-operator">==</span> <span class="ruby-value">:xml</span>
<span class="ruby-comment"># The value must be :text or :attr. If the value is :text encode replaces undefined characters with their (upper-case hexadecimal) numeric character</span>
<span class="ruby-comment"># references. &amp;, &lt;, and &gt; are converted to “&amp;amp;”, “&amp;lt;”, and “&amp;gt;”, respectively. If the value is :attr, encode also quotes the replacement</span>
<span class="ruby-comment"># result (using ‘“’), and replaces ‘”’ with “&amp;quot;”.</span>
<span class="ruby-keyword">if</span> [<span class="ruby-value">:text</span>, <span class="ruby-value">:attr</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">options</span>[<span class="ruby-value">:xml</span>])
<span class="ruby-identifier">new_options</span>[<span class="ruby-value">:xml</span>] = <span class="ruby-identifier">options</span>[<span class="ruby-value">:xml</span>]
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_option_key</span> <span class="ruby-operator">==</span> <span class="ruby-value">:cr_newline</span>
<span class="ruby-comment"># Replaces LF (“n”) with CR (“r”) if value is true.</span>
<span class="ruby-keyword">unless</span> (<span class="ruby-identifier">new_options</span>[<span class="ruby-value">:crlf_newline</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">new_options</span>[<span class="ruby-value">:universal_newline</span>])
<span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[(<span class="ruby-identifier">the_option_key</span>)] <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
<span class="ruby-identifier">new_options</span>[(<span class="ruby-identifier">the_option_key</span>)] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_option_key</span> <span class="ruby-operator">==</span> <span class="ruby-value">:crlf_newline</span>
<span class="ruby-comment"># Replaces LF (“n”) with CRLF (“rn”) if value is true.</span>
<span class="ruby-keyword">unless</span> (<span class="ruby-identifier">new_options</span>[<span class="ruby-value">:cr_newline</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">new_options</span>[<span class="ruby-value">:universal_newline</span>])
<span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[(<span class="ruby-identifier">the_option_key</span>)] <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
<span class="ruby-identifier">new_options</span>[(<span class="ruby-identifier">the_option_key</span>)] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_option_key</span> <span class="ruby-operator">==</span> <span class="ruby-value">:universal_newline</span>
<span class="ruby-comment"># Replaces CRLF (“rn”) and CR (“r”) with LF (“n”) if value is true.</span>
<span class="ruby-keyword">unless</span> (<span class="ruby-identifier">new_options</span>[<span class="ruby-value">:cr_newline</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">new_options</span>[<span class="ruby-value">:crlf_newline</span>])
<span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[(<span class="ruby-identifier">the_option_key</span>)] <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
<span class="ruby-identifier">new_options</span>[(<span class="ruby-identifier">the_option_key</span>)] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">pause</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">new_options</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-record_separator_used" class="method-detail ">
<div class="method-heading">
<span class="method-name">record_separator_used</span><span
class="method-args">(io_channel=:external)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="record_separator_used-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_transcode.rb, line 188</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">record_separator_used</span>(<span class="ruby-identifier">io_channel</span>=<span class="ruby-value">:external</span>)
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-value">:@internal_encoding</span>)
<span class="ruby-ivar">@internal_encoding</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-value">:@internal_record_separator</span>)
<span class="ruby-ivar">@internal_record_separator</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-value">:@external_record_separator</span>)
<span class="ruby-ivar">@external_record_separator</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">record_separator</span> = <span class="ruby-string">&quot;&quot;</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">io_channel</span> <span class="ruby-operator">==</span> <span class="ruby-value">:internal</span>
<span class="ruby-identifier">record_separator</span>.<span class="ruby-identifier">force_encoding</span>((<span class="ruby-ivar">@internal_encoding</span> <span class="ruby-operator">||</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">external_encoding</span>))
<span class="ruby-identifier">record_separator</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-ivar">@internal_record_separator</span> <span class="ruby-operator">||</span> (<span class="ruby-identifier">$\</span>).<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">io_channel</span> = <span class="ruby-value">:external</span>
<span class="ruby-identifier">record_separator</span>.<span class="ruby-identifier">force_encoding</span>(<span class="ruby-keyword">self</span>.<span class="ruby-identifier">external_encoding</span>)
<span class="ruby-identifier">record_separator</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-ivar">@external_record_separator</span> <span class="ruby-operator">||</span> (<span class="ruby-identifier">$\</span>).<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">record_separator</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-identifier">record_separator</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-transcode_to_external" class="method-detail ">
<div class="method-heading">
<span class="method-name">transcode_to_external</span><span
class="method-args">(the_string=&quot;&quot;)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>TODO: GxG::StringIO : transcoding methods : tie into conversion-options-set-selector supports (dst-encoding,src-encoding). <a href="../../../Hash.html"><code>Hash</code></a> deep-merge method needed.</p>
<div class="method-source-code" id="transcode_to_external-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_transcode.rb, line 287</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">transcode_to_external</span>(<span class="ruby-identifier">the_string</span>=<span class="ruby-string">&quot;&quot;</span>)
<span class="ruby-comment"># return the supplied string, or supported object string data, or UTF_8 codepoint, transcoded</span>
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-value">:@conversion_options</span>)
<span class="ruby-ivar">@conversion_options</span> = {<span class="ruby-value">:internal</span> <span class="ruby-operator">=&gt;</span> {}, <span class="ruby-value">:external</span> <span class="ruby-operator">=&gt;</span> {}}
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-value">:@internal_encoding</span>)
<span class="ruby-ivar">@internal_encoding</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">String</span>)
<span class="ruby-comment"># External conversion options will have to be dynamically generated upon transcode_to_external as *any* encoding is possible, not just internal_encoding</span>
<span class="ruby-identifier">the_string</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">convert_to_string</span>(<span class="ruby-identifier">the_string</span>,<span class="ruby-keyword">self</span>.<span class="ruby-identifier">external_encoding</span>,<span class="ruby-ivar">@conversion_options</span>[<span class="ruby-value">:external</span>])
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">binmode?</span>()
<span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">force_encoding</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Encoding</span><span class="ruby-operator">::</span><span class="ruby-constant">ASCII_8BIT</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">encoding</span> <span class="ruby-operator">!=</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">external_encoding</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">encoding</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@internal_encoding</span>
<span class="ruby-identifier">options</span> = <span class="ruby-operator">::</span><span class="ruby-constant">String</span><span class="ruby-operator">::</span><span class="ruby-identifier">transcode_options</span>(<span class="ruby-keyword">self</span>.<span class="ruby-identifier">external_encoding</span>,<span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">encoding</span>,<span class="ruby-ivar">@conversion_options</span>[<span class="ruby-value">:external</span>])
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># External conversion options will have to be dynamically generated upon transcode_to_external as *any* encoding is possible, not just internal_encoding</span>
<span class="ruby-identifier">nl_op</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">newline_option_used</span>(<span class="ruby-value">:external</span>)
<span class="ruby-identifier">options</span> = {}
<span class="ruby-keyword">if</span> <span class="ruby-identifier">nl_op</span>
<span class="ruby-identifier">options</span>[(<span class="ruby-identifier">nl_op</span>)] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">options</span> = <span class="ruby-operator">::</span><span class="ruby-constant">String</span><span class="ruby-operator">::</span><span class="ruby-identifier">transcode_options</span>(<span class="ruby-keyword">self</span>.<span class="ruby-identifier">external_encoding</span>,<span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">encoding</span>,<span class="ruby-identifier">options</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">transcode!</span>(<span class="ruby-keyword">self</span>.<span class="ruby-identifier">external_encoding</span>,<span class="ruby-identifier">options</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">the_string</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-transcode_to_internal" class="method-detail ">
<div class="method-heading">
<span class="method-name">transcode_to_internal</span><span
class="method-args">(the_string=&quot;&quot;)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="transcode_to_internal-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_transcode.rb, line 324</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">transcode_to_internal</span>(<span class="ruby-identifier">the_string</span>=<span class="ruby-string">&quot;&quot;</span>)
<span class="ruby-comment"># return the supplied string, or supported object string data, or UTF_8 codepoint, transcoded</span>
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-value">:@conversion_options</span>)
<span class="ruby-ivar">@conversion_options</span> = {<span class="ruby-value">:internal</span> <span class="ruby-operator">=&gt;</span> {}, <span class="ruby-value">:external</span> <span class="ruby-operator">=&gt;</span> {}}
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-value">:@internal_encoding</span>)
<span class="ruby-ivar">@internal_encoding</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">if</span> (<span class="ruby-ivar">@internal_encoding</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">binmode?</span>())
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">String</span>)
<span class="ruby-identifier">the_string</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">convert_to_string</span>(<span class="ruby-identifier">the_string</span>,<span class="ruby-ivar">@internal_encoding</span>,<span class="ruby-ivar">@conversion_options</span>[<span class="ruby-value">:internal</span>])
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@internal_encoding</span> <span class="ruby-operator">==</span> <span class="ruby-operator">::</span><span class="ruby-constant">Encoding</span><span class="ruby-operator">::</span><span class="ruby-constant">ASCII_8BIT</span>
<span class="ruby-comment"># for cases where the external encoding is anything but binary, but the internal is set to BINARY.</span>
<span class="ruby-comment"># instead of actually transcoding something char by char into binary - just sets the encoding and filters for newline settings.</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">force_encoding</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Encoding</span><span class="ruby-operator">::</span><span class="ruby-constant">ASCII_8BIT</span>)
<span class="ruby-identifier">nl_op</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">newline_option_used</span>(<span class="ruby-value">:internal</span>)
<span class="ruby-identifier">options</span> = {}
<span class="ruby-keyword">if</span> <span class="ruby-identifier">nl_op</span>
<span class="ruby-identifier">options</span>[(<span class="ruby-identifier">nl_op</span>)] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">the_string</span> = <span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">encode</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Encoding</span><span class="ruby-operator">::</span><span class="ruby-constant">ASCII_8BIT</span>,<span class="ruby-operator">::</span><span class="ruby-constant">Encoding</span><span class="ruby-operator">::</span><span class="ruby-constant">ASCII_8BIT</span>,<span class="ruby-identifier">options</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">encoding</span> <span class="ruby-operator">!=</span> <span class="ruby-ivar">@internal_encoding</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">encoding</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">external_encoding</span>
<span class="ruby-identifier">options</span> = <span class="ruby-operator">::</span><span class="ruby-constant">String</span><span class="ruby-operator">::</span><span class="ruby-identifier">transcode_options</span>(<span class="ruby-ivar">@internal_encoding</span>,<span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">encoding</span>,<span class="ruby-ivar">@conversion_options</span>[<span class="ruby-value">:internal</span>])
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">nl_op</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">newline_option_used</span>(<span class="ruby-value">:internal</span>)
<span class="ruby-identifier">options</span> = {}
<span class="ruby-keyword">if</span> <span class="ruby-identifier">nl_op</span>
<span class="ruby-identifier">options</span>[(<span class="ruby-identifier">nl_op</span>)] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">options</span> = <span class="ruby-operator">::</span><span class="ruby-constant">String</span><span class="ruby-operator">::</span><span class="ruby-identifier">transcode_options</span>(<span class="ruby-ivar">@internal_encoding</span>,<span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">encoding</span>,<span class="ruby-identifier">options</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">the_string</span>.<span class="ruby-identifier">transcode!</span>(<span class="ruby-ivar">@internal_encoding</span>,<span class="ruby-identifier">options</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">the_string</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">transcode_to_external</span>(<span class="ruby-identifier">the_string</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">the_string</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
</section>
</section>
</main>
<footer id="validator-badges" role="contentinfo">
<p><a href="https://validator.w3.org/check/referer">Validate</a>
<p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.1.2.
<p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
</footer>