1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head><title>load_from_stream (MOFile)</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style>
.ruby-comment { color: green; font-style: italic }
.ruby-constant { color: #4433aa; font-weight: bold; }
.ruby-identifier { color: #222222; }
.ruby-ivar { color: #2233dd; }
.ruby-keyword { color: #3333FF; font-weight: bold }
.ruby-node { color: #777777; }
.ruby-operator { color: #111111; }
.ruby-regexp { color: #662222; }
.ruby-value { color: #662222; font-style: italic }
.kw { color: #3333FF; font-weight: bold }
.cmt { color: green; font-style: italic }
.str { color: #662222; font-style: italic }
.re { color: #662222; }
</style>
</head>
<body bgcolor="white">
<pre><span class="ruby-comment cmt"># File lib/gettext/mo.rb, line 76</span>
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">load_from_stream</span>(<span class="ruby-identifier">io</span>)
<span class="ruby-identifier">magic</span> = <span class="ruby-identifier">io</span>.<span class="ruby-identifier">read</span>(<span class="ruby-value">4</span>)
<span class="ruby-keyword kw">case</span> <span class="ruby-identifier">magic</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-constant">MAGIC_BIG_ENDIAN</span>
<span class="ruby-ivar">@little_endian</span> = <span class="ruby-keyword kw">false</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-constant">MAGIC_LITTLE_ENDIAN</span>
<span class="ruby-ivar">@little_endian</span> = <span class="ruby-keyword kw">true</span>
<span class="ruby-keyword kw">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">InvalidFormat</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">sprintf</span>(<span class="ruby-value str">"Unknown signature %s"</span>, <span class="ruby-identifier">magic</span>.<span class="ruby-identifier">dump</span>))
<span class="ruby-keyword kw">end</span>
<span class="ruby-identifier">header</span> = <span class="ruby-constant">Header</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">magic</span>, <span class="ruby-operator">*</span>(<span class="ruby-identifier">io</span>.<span class="ruby-identifier">read</span>(<span class="ruby-value">4</span> <span class="ruby-operator">*</span> <span class="ruby-value">6</span>).<span class="ruby-identifier">unpack</span>(<span class="ruby-ivar">@little_endian</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'V6'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'N6'</span>)))
<span class="ruby-identifier">raise</span> <span class="ruby-constant">InvalidFormat</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">sprintf</span>(<span class="ruby-value str">"file format revision %d isn't supported"</span>, <span class="ruby-identifier">header</span>.<span class="ruby-identifier">revision</span>)) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">header</span>.<span class="ruby-identifier">revision</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
<span class="ruby-identifier">io</span>.<span class="ruby-identifier">pos</span> = <span class="ruby-identifier">header</span>.<span class="ruby-identifier">orig_table_offset</span>
<span class="ruby-identifier">orig_table_data</span> = <span class="ruby-identifier">io</span>.<span class="ruby-identifier">read</span>((<span class="ruby-value">4</span> <span class="ruby-operator">*</span> <span class="ruby-value">2</span>) <span class="ruby-operator">*</span> <span class="ruby-identifier">header</span>.<span class="ruby-identifier">nstrings</span>).<span class="ruby-identifier">unpack</span>(<span class="ruby-ivar">@little_endian</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'V*'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'N*'</span>)
<span class="ruby-identifier">io</span>.<span class="ruby-identifier">pos</span> = <span class="ruby-identifier">header</span>.<span class="ruby-identifier">translated_table_offset</span>
<span class="ruby-identifier">trans_table_data</span> = <span class="ruby-identifier">io</span>.<span class="ruby-identifier">read</span>((<span class="ruby-value">4</span> <span class="ruby-operator">*</span> <span class="ruby-value">2</span>) <span class="ruby-operator">*</span> <span class="ruby-identifier">header</span>.<span class="ruby-identifier">nstrings</span>).<span class="ruby-identifier">unpack</span>(<span class="ruby-ivar">@little_endian</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'V*'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'N*'</span>)
<span class="ruby-identifier">original_strings</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">header</span>.<span class="ruby-identifier">nstrings</span>)
<span class="ruby-keyword kw">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword kw">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-identifier">header</span>.<span class="ruby-identifier">nstrings</span>
<span class="ruby-identifier">io</span>.<span class="ruby-identifier">pos</span> = <span class="ruby-identifier">orig_table_data</span>[<span class="ruby-identifier">i</span> <span class="ruby-operator">*</span> <span class="ruby-value">2</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>]
<span class="ruby-identifier">original_strings</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-identifier">io</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">orig_table_data</span>[<span class="ruby-identifier">i</span> <span class="ruby-operator">*</span> <span class="ruby-value">2</span> <span class="ruby-operator">+</span> <span class="ruby-value">0</span>])
<span class="ruby-keyword kw">end</span>
<span class="ruby-identifier">clear</span>
<span class="ruby-keyword kw">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword kw">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-identifier">header</span>.<span class="ruby-identifier">nstrings</span>
<span class="ruby-identifier">io</span>.<span class="ruby-identifier">pos</span> = <span class="ruby-identifier">trans_table_data</span>[<span class="ruby-identifier">i</span> <span class="ruby-operator">*</span> <span class="ruby-value">2</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>]
<span class="ruby-identifier">str</span> = <span class="ruby-identifier">io</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">trans_table_data</span>[<span class="ruby-identifier">i</span> <span class="ruby-operator">*</span> <span class="ruby-value">2</span> <span class="ruby-operator">+</span> <span class="ruby-value">0</span>])
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">original_strings</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">""</span>
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">str</span>
<span class="ruby-ivar">@charset</span> = <span class="ruby-keyword kw">nil</span>
<span class="ruby-ivar">@nplurals</span> = <span class="ruby-keyword kw">nil</span>
<span class="ruby-ivar">@plural</span> = <span class="ruby-keyword kw">nil</span>
<span class="ruby-identifier">str</span>.<span class="ruby-identifier">each_line</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
<span class="ruby-keyword kw">if</span> <span class="ruby-regexp re">/^Content-Type:/i</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">line</span> <span class="ruby-keyword kw">and</span> <span class="ruby-regexp re">/charset=((?:\w|-)+)/i</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">line</span>
<span class="ruby-ivar">@charset</span> = <span class="ruby-identifier">$1</span>
<span class="ruby-keyword kw">elsif</span> <span class="ruby-regexp re">/^Plural-Forms:\s*nplurals\s*\=\s*(\d*);\s*plural\s*\=\s*([^;]*)\n?/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">line</span>
<span class="ruby-ivar">@nplurals</span> = <span class="ruby-identifier">$1</span>
<span class="ruby-ivar">@plural</span> = <span class="ruby-identifier">$2</span>
<span class="ruby-keyword kw">end</span>
<span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@charset</span> <span class="ruby-keyword kw">and</span> <span class="ruby-ivar">@nplurals</span>
}
<span class="ruby-ivar">@nplurals</span> = <span class="ruby-value str">"1"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@nplurals</span>
<span class="ruby-ivar">@plural</span> = <span class="ruby-value str">"0"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@plural</span>
<span class="ruby-keyword kw">end</span>
<span class="ruby-keyword kw">else</span>
<span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@output_charset</span>
<span class="ruby-keyword kw">begin</span>
<span class="ruby-identifier">str</span> = <span class="ruby-constant">Iconv</span>.<span class="ruby-identifier">iconv</span>(<span class="ruby-ivar">@output_charset</span>, <span class="ruby-ivar">@charset</span>, <span class="ruby-identifier">str</span>).<span class="ruby-identifier">join</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@charset</span>
<span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Iconv</span><span class="ruby-operator">::</span><span class="ruby-constant">Failure</span>
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$DEBUG</span>
<span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span> <span class="ruby-value str">"@charset = "</span>, <span class="ruby-ivar">@charset</span>, <span class="ruby-value str">"\n"</span>
<span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span> <span class="ruby-value str">"@output_charset = "</span>, <span class="ruby-ivar">@output_charset</span>, <span class="ruby-value str">"\n"</span>
<span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span> <span class="ruby-value str">"msgid = "</span>, <span class="ruby-identifier">original_strings</span>[<span class="ruby-identifier">i</span>], <span class="ruby-value str">"\n"</span>
<span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span> <span class="ruby-value str">"msgstr = "</span>, <span class="ruby-identifier">str</span>, <span class="ruby-value str">"\n"</span>
<span class="ruby-keyword kw">end</span>
<span class="ruby-keyword kw">end</span>
<span class="ruby-keyword kw">end</span>
<span class="ruby-keyword kw">end</span>
<span class="ruby-keyword kw">self</span>[<span class="ruby-identifier">original_strings</span>[<span class="ruby-identifier">i</span>]] = <span class="ruby-identifier">str</span>
<span class="ruby-keyword kw">end</span>
<span class="ruby-keyword kw">self</span>
<span class="ruby-keyword kw">end</span></pre>
</body>
</html>
|