public
Created

This is a very basic representation of internationalized documentation support in ruby.

  • Download Gist
rdoc_i18n.rb
Ruby
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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
# This is a very basic representation of internationalized documentation
# support in ruby.
#
# To use this demo try the following commands:
#
# ruby rdoc_i18n.rb Class#allocate
# ruby rdoc_i18n.rb -h Class#allocate > output.html
# # then open output.html in your browser
# ruby rdoc_i18n.rb --lang ja Class#allocate
#
# For more resources, and ideas, see:
#
# https://github.com/svenfuchs/i18n
# http://guides.rubyonrails.org/i18n.html
#
require 'rdoc'
require 'psych'
require 'optparse'
require 'ostruct'
 
doc = Psych.load(DATA.read)
 
options = OpenStruct.new
# Defaults
options.html = false
options.lang = "en"
 
OptionParser.new do |opts|
opts.on("-h", "--html", "Output HTML") { options.html = true }
opts.on("--lang LANGUAGE", "Language to use for translation of documents") do |v|
options.lang = v
end
end.parse!
 
query = ARGV.first.dup
 
tokens = RDoc::RubyLex.tokenize query, RDoc::Options.new
 
begin
if options.html
renderer = RDoc::Markup
formatter = RDoc::Markup::ToHtml.new(RDoc::Options.new, nil)
 
puts renderer.parse(doc[options.lang][tokens[0].text][tokens[1].text]).accept(formatter)
else
puts doc[options.lang][tokens[0].text][tokens[1].text]
end
rescue
raise "Nothing known about #{tokens[0].text}#{tokens[1].text}"
end
 
__END__
en:
"Class":
"#allocate": |
call-seq:
class.allocate() -> obj
 
Allocates space for a new object of <i>class</i>'s class and does not
call initialize on the new instance. The returned object must be an
instance of <i>class</i>.
 
klass = Class.new do
def initialize(*args)
@initialized = true
end
 
def initialized?
@initialized || false
end
end
 
klass.allocate.initialized? #=> false
"::new": |
call-seq:
Class.new(super_class=Object) -> a_class
Class.new(super_class=Object) { |mod| ... } -> a_class
 
Creates a new anonymous (unnamed) class with the given superclass
(or <code>Object</code> if no parameter is given). You can give a
class a name by assigning the class object to a constant.
 
If a block is given, it is passed the class object, and the block
is evaluated in the context of this class using
<code>class_eval</code>.
 
fred = Class.new do
def meth1
"hello"
end
def meth2
"bye"
end
end
 
a = fred.new #=> #<#<Class:0x100381890>:0x100376b98>
a.meth1 #=> "hello"
a.meth2 #=> "bye"
 
Assign the class to a constant (name starting uppercase) if you
want to treat it like a regular class.
ja:
"Class":
"#allocate": |
自身のインスタンスを生成して返します。生成したオブジェクトは 自身のインスタンスであること以外には何も特性を持ちません。
"::new": |
新しく名前の付いていない superclass のサブクラスを生成します。
 
名前のないクラスは、最初に名前を求める際に代入されている定数名を検 索し、見つかった定数名をクラス名とします。
 
p foo = Class.new # => #<Class:0x401b90f8>
p foo.name # => ""
Foo = foo # ここで p foo すれば "Foo" 固定
Bar = foo
p foo.name # => "Bar" ("Foo" になるか "Bar" になるかは不定)
ブロックが与えられた場合、生成したクラスを引数として クラスのコンテキストでブロックを実行します。以下のコードと同じです。
 
klass = Class.new(superclass)
klass.module_eval {|m| ... }
klass
この場合も生成したクラスを返します。 ブロックの実行は Class#initialize が行います。
 
[PARAM] superclass:
生成するクラスのスーパークラスを指定します。
例:
 
k = Class.new{|c|
def initialize
p "in initialize"
end
 
def hoge
p "hoge hoge hoge"
end
}
o = k.new #=> "in initialize"
o.hoge #=> "hoge hoge hoge"

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.