晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /lib/python3.6/site-packages/setroubleshoot/ |
Upload File : |
# Authors: John Dennis <jdennis@redhat.com>
#
# Copyright (C) 2007 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
__all__ = [
'escape_html',
'unescape_html',
'html_to_text',
'html_document',
]
import syslog
import sys
if sys.version_info > (3,):
import html
import html.parser
import html.entities
from io import StringIO
else:
import htmllib
from StringIO import StringIO
import formatter as Formatter
import string
from types import *
#------------------------------------------------------------------------------
class TextWriter(Formatter.DumbWriter):
def __init__(self, file=None, maxcol=80, indent_width=4):
Formatter.DumbWriter.__init__(self, file, maxcol)
self.indent_level = 0
self.indent_width = indent_width
self._set_indent()
def _set_indent(self):
self.indent_col = self.indent_level * self.indent_width
self.indent = ' ' * self.indent_col
def new_margin(self, margin, level):
self.indent_level = level
self._set_indent()
def send_label_data(self, data):
data = data + ' '
if len(data) > self.indent_col:
self.send_literal_data(data)
else:
offset = self.indent_col - len(data)
self.send_literal_data(' ' * offset + data)
def send_flowing_data(self, data):
if not data:
return
atbreak = self.atbreak or data[0] in string.whitespace
col = self.col
maxcol = self.maxcol
write = self.file.write
col = self.col
if col == 0:
write(self.indent)
col = self.indent_col
for word in data.split():
if atbreak:
if col + len(word) >= maxcol:
write('\n' + self.indent)
col = self.indent_col
else:
write(' ')
col = col + 1
write(word)
col = col + len(word)
atbreak = 1
self.col = col
self.atbreak = data[-1] in string.whitespace
if sys.version_info > (3,):
class HTMLParserAnchor(html.parser.HTMLParser):
def __init__(self, formatter, strict=False, convert_charrefs=False):
super(HTMLParserAnchor, self).__init__()
self.formatter = formatter
self.anchor_href = None
def handle_starttag(self, tag, attrs):
if tag == 'a':
for key, value in attrs:
if key == 'href':
self.anchor_href = value
def handle_endtag(self, tag):
if tag == 'a':
if self.anchor_href != None:
self.formatter.writer.send_flowing_data('(' + self.anchor_href + ')')
self.anchor_href = None
def handle_data(self, data):
self.formatter.writer.send_flowing_data(data)
else:
class HTMLParserAnchor(htmllib.HTMLParser):
def __init__(self, formatter, verbose=0):
htmllib.HTMLParser.__init__(self, formatter, verbose)
def anchor_bgn(self, href, name, type):
self.anchor = href
def anchor_end(self):
if self.anchor:
self.handle_data(' (%s) ' % self.anchor)
self.anchor = None
#------------------------------------------------------------------------------
def escape_html(s):
if s is None:
return None
try:
s = s.replace("&", "&") # Must be done first!
s = s.replace("<", "<")
s = s.replace(">", ">")
s = s.replace("'", "'")
s = s.replace('"', """)
except:
pass
return s
def unescape_html(s):
if s is None:
return None
if '&' not in s:
return s
s = s.replace("<", "<")
s = s.replace(">", ">")
s = s.replace("'", "'")
s = s.replace(""", '"')
s = s.replace("&", "&") # Must be last
return s
def html_to_text(html, maxcol=80):
try:
buffer = StringIO()
formatter = Formatter.AbstractFormatter(TextWriter(buffer, maxcol))
parser = HTMLParserAnchor(formatter)
parser.feed(html)
parser.close()
text = buffer.getvalue()
buffer.close()
return text
except Exception as e:
syslog.syslog(syslog.LOG_ERR, 'cannot convert html to text: %s' % e)
return None
def html_document(*body_components):
'''Wrap the body components in a HTML document structure with a valid header.
Accepts a variable number of arguments of of which canb be:
* string
* a sequences of strings (tuple or list).
* a callable object taking no parameters and returning a string or sequence of strings.
'''
head = '<html>\n <head>\n <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>\n </head>\n <body>\n'
tail = '\n </body>\n</html>'
doc = head
for body_component in body_components:
if isinstance(body_component, six.string_types):
doc += body_component
elif isinstance(body_component, (tuple, list)):
for item in body_component:
doc += item
elif callable(body_component):
result = body_component()
if isinstance(result, (tuple, list)):
for item in result:
doc += item
else:
doc += result
else:
doc += body_component
doc += tail
return doc