晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/alt/ruby24/lib64/ruby/2.4.0/rdoc/generator/pot/ |
| Current File : //opt/alt/ruby24/lib64/ruby/2.4.0/rdoc/generator/pot/po_entry.rb |
# frozen_string_literal: false
##
# A PO entry in PO
class RDoc::Generator::POT::POEntry
# The msgid content
attr_reader :msgid
# The msgstr content
attr_reader :msgstr
# The comment content created by translator (PO editor)
attr_reader :translator_comment
# The comment content extracted from source file
attr_reader :extracted_comment
# The locations where the PO entry is extracted
attr_reader :references
# The flags of the PO entry
attr_reader :flags
##
# Creates a PO entry for +msgid+. Other valus can be specified by
# +options+.
def initialize msgid, options = {}
@msgid = msgid
@msgstr = options[:msgstr] || ""
@translator_comment = options[:translator_comment]
@extracted_comment = options[:extracted_comment]
@references = options[:references] || []
@flags = options[:flags] || []
end
##
# Returns the PO entry in PO format.
def to_s
entry = ''
entry << format_translator_comment
entry << format_extracted_comment
entry << format_references
entry << format_flags
entry << <<-ENTRY
msgid #{format_message(@msgid)}
msgstr #{format_message(@msgstr)}
ENTRY
end
##
# Merges the PO entry with +other_entry+.
def merge other_entry
options = {
:extracted_comment => merge_string(@extracted_comment,
other_entry.extracted_comment),
:translator_comment => merge_string(@translator_comment,
other_entry.translator_comment),
:references => merge_array(@references,
other_entry.references),
:flags => merge_array(@flags,
other_entry.flags),
}
self.class.new(@msgid, options)
end
private
def format_comment mark, comment
return '' unless comment
return '' if comment.empty?
formatted_comment = ''
comment.each_line do |line|
formatted_comment << "#{mark} #{line}"
end
formatted_comment << "\n" unless formatted_comment.end_with?("\n")
formatted_comment
end
def format_translator_comment
format_comment('#', @translator_comment)
end
def format_extracted_comment
format_comment('#.', @extracted_comment)
end
def format_references
return '' if @references.empty?
formatted_references = ''
@references.sort.each do |file, line|
formatted_references << "\#: #{file}:#{line}\n"
end
formatted_references
end
def format_flags
return '' if @flags.empty?
formatted_flags = flags.join(",")
"\#, #{formatted_flags}\n"
end
def format_message message
return "\"#{escape(message)}\"" unless message.include?("\n")
formatted_message = '""'
message.each_line do |line|
formatted_message << "\n"
formatted_message << "\"#{escape(line)}\""
end
formatted_message
end
def escape string
string.gsub(/["\\\t\n]/) do |special_character|
case special_character
when "\t"
"\\t"
when "\n"
"\\n"
else
"\\#{special_character}"
end
end
end
def merge_string string1, string2
[string1, string2].compact.join("\n")
end
def merge_array array1, array2
(array1 + array2).uniq
end
end
|