晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/alt/ruby22/lib64/ruby/2.2.0/rdoc/i18n/ |
| Current File : //opt/alt/ruby22/lib64/ruby/2.2.0/rdoc/i18n/text.rb |
##
# An i18n supported text.
#
# This object provides the following two features:
#
# * Extracts translation messages from wrapped raw text.
# * Translates wrapped raw text in specified locale.
#
# Wrapped raw text is one of String, RDoc::Comment or Array of them.
class RDoc::I18n::Text
##
# Creates a new i18n supported text for +raw+ text.
def initialize(raw)
@raw = raw
end
##
# Extracts translation target messages and yields each message.
#
# Each yielded message is a Hash. It consists of the followings:
#
# :type :: :paragraph
# :paragraph :: String (The translation target message itself.)
# :line_no :: Integer (The line number of the :paragraph is started.)
#
# The above content may be added in the future.
def extract_messages
parse do |part|
case part[:type]
when :empty_line
# ignore
when :paragraph
yield(part)
end
end
end
# Translates raw text into +locale+.
def translate(locale)
translated_text = ''
parse do |part|
case part[:type]
when :paragraph
translated_text << locale.translate(part[:paragraph])
when :empty_line
translated_text << part[:line]
else
raise "should not reach here: unexpected type: #{type}"
end
end
translated_text
end
private
def parse(&block)
paragraph = ''
paragraph_start_line = 0
line_no = 0
each_line(@raw) do |line|
line_no += 1
case line
when /\A\s*\z/
if paragraph.empty?
emit_empty_line_event(line, line_no, &block)
else
paragraph << line
emit_paragraph_event(paragraph, paragraph_start_line, line_no,
&block)
paragraph = ''
end
else
paragraph_start_line = line_no if paragraph.empty?
paragraph << line
end
end
unless paragraph.empty?
emit_paragraph_event(paragraph, paragraph_start_line, line_no, &block)
end
end
def each_line(raw, &block)
case raw
when RDoc::Comment
raw.text.each_line(&block)
when Array
raw.each do |comment, location|
each_line(comment, &block)
end
else
raw.each_line(&block)
end
end
def emit_empty_line_event(line, line_no)
part = {
:type => :empty_line,
:line => line,
:line_no => line_no,
}
yield(part)
end
def emit_paragraph_event(paragraph, paragraph_start_line, line_no, &block)
paragraph_part = {
:type => :paragraph,
:line_no => paragraph_start_line,
}
match_data = /(\s*)\z/.match(paragraph)
if match_data
paragraph_part[:paragraph] = match_data.pre_match
yield(paragraph_part)
emit_empty_line_event(match_data[1], line_no, &block)
else
paragraph_part[:paragraph] = paragraph
yield(paragraph_part)
end
end
end
|