other improvements, thanks Vladyslav
This commit is contained in:
@@ -1 +1 @@
|
||||
Version 2.00.0 (2012-07-20 16:47:55) dev
|
||||
Version 2.00.0 (2012-07-20 17:37:48) dev
|
||||
|
||||
@@ -392,7 +392,7 @@ def peek():
|
||||
app = get_app(request.vars.app)
|
||||
filename = '/'.join(request.args)
|
||||
if request.vars.app:
|
||||
path = abspath(filename, gluon=False)
|
||||
path = abspath(filename)
|
||||
else:
|
||||
path = apath(filename, r=request)
|
||||
try:
|
||||
@@ -696,7 +696,7 @@ def edit_language():
|
||||
s = strings[key]
|
||||
(prefix, sep, key) = key.partition('\x01')
|
||||
if sep:
|
||||
prefix = SPAN(prefix+': ', _style='color: blue;')
|
||||
prefix = SPAN(prefix+': ', _class='tm_ftag')
|
||||
k = key
|
||||
else:
|
||||
(k, prefix) = (prefix, '')
|
||||
@@ -1034,7 +1034,7 @@ def create_file():
|
||||
anchor='#'+request.vars.id if request.vars.id else ''
|
||||
if request.vars.app:
|
||||
app = get_app(request.vars.app)
|
||||
path = abspath(request.vars.location, gluon=False)
|
||||
path = abspath(request.vars.location)
|
||||
else:
|
||||
app = get_app(name=request.vars.location.split('/')[0])
|
||||
path = apath(request.vars.location, r=request)
|
||||
|
||||
@@ -1248,3 +1248,4 @@ color: #222;
|
||||
.error, .error a {color:red}
|
||||
.pluralsform thead td {font-weight:bold; font-size:1.2em; padding-bottom:5px}
|
||||
.pluralsform td {padding-left:5px}
|
||||
.tm_ftag {color:blue}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -667,19 +667,19 @@ def render(text,extra={},allowed={},sep='p',URL=None,environment=None,latex='goo
|
||||
'<p>[[probe]]</p>'
|
||||
|
||||
>>> render(r"\\\\[[probe]]")
|
||||
'<p>\\\\<span id="probe"></span></p>'
|
||||
'<p>\\\\<a name="markmin_probe"></a></p>'
|
||||
|
||||
>>> render(r"\\\\\\[[probe]]")
|
||||
'<p>\\\\[[probe]]</p>'
|
||||
|
||||
>>> render(r"\\\\\\\\[[probe]]")
|
||||
'<p>\\\\\\\\<span id="probe"></span></p>'
|
||||
'<p>\\\\\\\\<a name="markmin_probe"></a></p>'
|
||||
|
||||
>>> render(r"\\\\\\\\\[[probe]]")
|
||||
'<p>\\\\\\\\[[probe]]</p>'
|
||||
|
||||
>>> render(r"\\\\\\\\\\\[[probe]]")
|
||||
'<p>\\\\\\\\\\\\<span id="probe"></span></p>'
|
||||
'<p>\\\\\\\\\\\\<a name="markmin_probe"></a></p>'
|
||||
|
||||
>>> render("``[[ [\\[[probe\]\\]] URL\\[x\\]]]``:red[dummy_params]")
|
||||
'<span style="color: red"><a href="URL[x]" title="[[probe]]">URL[x]</a></span>'
|
||||
@@ -725,6 +725,10 @@ def render(text,extra={},allowed={},sep='p',URL=None,environment=None,latex='goo
|
||||
|
||||
>>> render("**@{probe}**", environment=dict(probe="this is a test"))
|
||||
'<p><strong>this is a test</strong></p>'
|
||||
|
||||
>>> render('[[id1 [span **messag** in ''markmin''] ]] ... [[**link** to id [link\\\'s title] #mark1]]')
|
||||
'<p><a name="markmin_id1">span <strong>messag</strong> in markmin</a> ... <a href="#markmin_mark1" title="link\\\'s title"><strong>link</strong> to id</a></p>'
|
||||
|
||||
"""
|
||||
text = str(text or '')
|
||||
text = regex_backslash.sub(lambda m: m.group(1).translate(ttab_in), text)
|
||||
@@ -855,7 +859,7 @@ def render(text,extra={},allowed={},sep='p',URL=None,environment=None,latex='goo
|
||||
""" paragraphs in lists """
|
||||
lent=len(t)
|
||||
if lent>lev:
|
||||
return parse_list(t, '.', s, 'ul', lev, mtag)
|
||||
return parse_list(t, '.', s, 'ul', lev, mtag, lineno)
|
||||
elif lent<lev:
|
||||
while ltags[-1]>lent:
|
||||
ltags.pop()
|
||||
@@ -986,7 +990,9 @@ def render(text,extra={},allowed={},sep='p',URL=None,environment=None,latex='goo
|
||||
URL,
|
||||
environment,
|
||||
latex,
|
||||
auto)
|
||||
auto,
|
||||
class_prefix,
|
||||
id_prefix)
|
||||
)
|
||||
mtag='q'
|
||||
else:
|
||||
@@ -1100,7 +1106,8 @@ def render(text,extra={},allowed={},sep='p',URL=None,environment=None,latex='goo
|
||||
elif p in ('left','right'):
|
||||
style = ' style="float:%s"' % p
|
||||
if p in ('video','audio'):
|
||||
t = render(t, {}, {}, 'br', URL, environment, latex, auto)
|
||||
t = render(t, {}, {}, 'br', URL, environment, latex,
|
||||
auto, class_prefix, id_prefix)
|
||||
return '<%(p)s controls="controls"%(title)s%(width)s><source src="%(k)s" />%(t)s</%(p)s>' \
|
||||
% dict(p=p, title=title, width=width, k=k, t=t)
|
||||
alt = ' alt="%s"'%escape(t).replace(META, DISABLED_META) if t else ''
|
||||
@@ -1115,13 +1122,19 @@ def render(text,extra={},allowed={},sep='p',URL=None,environment=None,latex='goo
|
||||
t = t or ''
|
||||
a = escape(a) if a else ''
|
||||
if k:
|
||||
if k.startswith('#'):
|
||||
k = '#'+id_prefix+k[1:]
|
||||
k = escape(k)
|
||||
title = ' title="%s"' % a.replace(META, DISABLED_META) if a else ''
|
||||
target = ' target="_blank"' if p == 'popup' else ''
|
||||
t = render(t, {}, {}, 'br', URL, environment, latex, auto) if t else k
|
||||
t = render(t, {}, {}, 'br', URL, environment, latex, auto,
|
||||
class_prefix, id_prefix) if t else k
|
||||
return '<a href="%(k)s"%(title)s%(target)s>%(t)s</a>' \
|
||||
% dict(k=k, title=title, target=target, t=t)
|
||||
return '<span id="%s">%s</span>' % (escape(t),a)
|
||||
return '<a name="%s">%s</a>' % (escape(id_prefix+t),
|
||||
render(a, {},{},'br', URL,
|
||||
environment, latex, auto,
|
||||
class_prefix, id_prefix))
|
||||
|
||||
parts = text.split(LINK)
|
||||
text = parts[0]
|
||||
@@ -1183,21 +1196,36 @@ def markmin2html(text, extra={}, allowed={}, sep='p', auto=True):
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
import doctest
|
||||
from textwrap import dedent
|
||||
|
||||
html=dedent("""
|
||||
<!doctype html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||
%(style)s
|
||||
<title>%(title)s</title>
|
||||
</head>
|
||||
<body>
|
||||
%(body)s
|
||||
</body>
|
||||
</html>""")[1:]
|
||||
|
||||
if sys.argv[1:2] == ['-h']:
|
||||
print """<html><body>
|
||||
<style>
|
||||
blockquote { background-color: lime; }
|
||||
thead { color: white; background-color: gray; text-align: center; }
|
||||
tfoot { color: white; background-color: gray; }
|
||||
style=dedent("""
|
||||
<style>
|
||||
blockquote { background-color: lime; }
|
||||
thead { color: white; background-color: gray; text-align: center; }
|
||||
tfoot { color: white; background-color: gray; }
|
||||
.tableclass1 { background-color: yellow; }
|
||||
.tableclass1 thead { color: yellow; background-color: green; }
|
||||
.tableclass1 tfoot { color: yellow; background-color: green; }
|
||||
|
||||
.tableclass1 { background-color: yellow; }
|
||||
.tableclass1 thead { color: yellow; background-color: green; }
|
||||
.tableclass1 tfoot { color: yellow; background-color: green; }
|
||||
td.num { text-align: right; }
|
||||
pre { background-color: #E0E0E0; }
|
||||
</style>""")[1:]
|
||||
|
||||
td.num { text-align: right; }
|
||||
pre { background-color: #E0E0E0; }
|
||||
</style>
|
||||
"""+markmin2html(__doc__)+'</body></html>'
|
||||
print html % dict(title="Markmin markup language", style=style, body=markmin2html(__doc__))
|
||||
elif sys.argv[1:2] == ['-t']:
|
||||
from timeit import Timer
|
||||
loops=1000
|
||||
@@ -1208,7 +1236,7 @@ if __name__ == '__main__':
|
||||
elif len(sys.argv) > 1:
|
||||
fargv = open(sys.argv[1],'r')
|
||||
try:
|
||||
print '<html><body>'+markmin2html(fargv.read())+'</body></html>'
|
||||
print html % dict(title=sys.argv[1], style='', body=markmin2html(fargv.read()))
|
||||
finally:
|
||||
fargv.close()
|
||||
else:
|
||||
|
||||
+24
-23
@@ -15,7 +15,7 @@ import __builtin__
|
||||
__all__ = ['Utf8']
|
||||
|
||||
repr_escape_tab={}
|
||||
for i in xrange(1,32): repr_escape_tab[i]=ur'\x%02i'%i
|
||||
for i in range(1,32): repr_escape_tab[i]=ur'\x%02x'%i
|
||||
repr_escape_tab[7]=u'\\a'
|
||||
repr_escape_tab[8]=u'\\b'
|
||||
repr_escape_tab[9]=u'\\t'
|
||||
@@ -71,6 +71,24 @@ def size(string):
|
||||
"""
|
||||
return Utf8(string).__size__()
|
||||
|
||||
def truncate(string, length, dots='...'):
|
||||
""" returns string of length < *length* or truncate
|
||||
string with adding *dots* suffix to the string's end
|
||||
|
||||
args:
|
||||
length (int): max length of string
|
||||
dots (str or unicode): string suffix, when string is cutted
|
||||
|
||||
returns:
|
||||
(utf8-str): original or cutted string
|
||||
"""
|
||||
text = unicode(string, 'utf-8')
|
||||
dots = unicode(dots, 'utf-8') if isinstance(dots, str) else dots
|
||||
if len(text) > length:
|
||||
text = text[:length-len(dots)] + dots
|
||||
return str.__new__(Utf8, text.encode('utf-8'))
|
||||
|
||||
|
||||
class Utf8(str):
|
||||
"""
|
||||
Class for utf8 string storing and manipulations
|
||||
@@ -131,23 +149,6 @@ class Utf8(str):
|
||||
else:
|
||||
return "'"+unicode(self, 'utf-8').translate(repr_escape_tab2).encode('utf-8')+"'"
|
||||
|
||||
def truncate(self, length, dots='...'):
|
||||
""" returns string of length < *length* or truncate
|
||||
string with adding *dots* suffix to the string's end
|
||||
|
||||
args:
|
||||
length (int): max length of string
|
||||
dots (str or unicode): string suffix, when string is cutted
|
||||
|
||||
returns:
|
||||
(utf8-str): original or cutted string
|
||||
"""
|
||||
text = unicode(self, 'utf-8')
|
||||
dots = unicode(dots, 'utf-8') if isinstance(dots, str) else dots
|
||||
if len(text) > length:
|
||||
text = text[:length-len(dots)] + dots
|
||||
return str.__new__(Utf8, text.encode('utf-8'))
|
||||
|
||||
def __size__(self):
|
||||
""" length of utf-8 string in bytes """
|
||||
return str.__len__(self)
|
||||
@@ -419,15 +420,15 @@ if __name__ == '__main__':
|
||||
'прОБА є prOBE'
|
||||
>>> type(s.swapcase())
|
||||
<class '__main__.Utf8'>
|
||||
>>> s.truncate(10)
|
||||
>>> truncate(s, 10)
|
||||
'ПРоба Є...'
|
||||
>>> s.truncate(20)
|
||||
>>> truncate(s, 20)
|
||||
'ПРоба Є PRobe'
|
||||
>>> s.truncate(10, '•••') # utf-8 string as *dots*
|
||||
>>> truncate(s, 10, '•••') # utf-8 string as *dots*
|
||||
'ПРоба Є•••'
|
||||
>>> s.truncate(10, u'®') # you can use unicode string as *dots*
|
||||
>>> truncate(s, 10, u'®') # you can use unicode string as *dots*
|
||||
'ПРоба Є P®'
|
||||
>>> type(s.truncate(10))
|
||||
>>> type(truncate(s, 10))
|
||||
<class '__main__.Utf8'>
|
||||
>>> Utf8(s.encode('koi8-u'), 'koi8-u')
|
||||
'ПРоба Є PRobe'
|
||||
|
||||
Reference in New Issue
Block a user