Corn flake8
This commit is contained in:
parent
4774189495
commit
ea98e48a15
3
Pipfile
3
Pipfile
|
@ -4,10 +4,11 @@ verify_ssl = true
|
|||
name = 'pypi'
|
||||
|
||||
[requires]
|
||||
python_version = '3.6'
|
||||
python_version = '3.7'
|
||||
|
||||
[packages]
|
||||
regex = '*'
|
||||
|
||||
[dev-packages]
|
||||
sphinx = '*'
|
||||
pudb = '*'
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "6e1b84fcb804088935285008b44bd4b05be953563380302b468b4bafbbd7ed97"
|
||||
"sha256": "47d74a67e04adbda8d9502f7b0f14e7cf8adbb701407750d8e319a932ddc0e10"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {
|
||||
|
@ -109,6 +109,13 @@
|
|||
],
|
||||
"version": "==17.1"
|
||||
},
|
||||
"pudb": {
|
||||
"hashes": [
|
||||
"sha256:8d8b974641b7a7a2a721af01c9dce5eac8e05a2ceebc2680725ba8eef1ca876e"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2018.1"
|
||||
},
|
||||
"pygments": {
|
||||
"hashes": [
|
||||
"sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d",
|
||||
|
@ -174,6 +181,12 @@
|
|||
],
|
||||
"markers": "python_version != '3.3.*' and python_version != '3.0.*' and python_version != '3.2.*' and python_version >= '2.6' and python_version < '4' and python_version != '3.1.*'",
|
||||
"version": "==1.23"
|
||||
},
|
||||
"urwid": {
|
||||
"hashes": [
|
||||
"sha256:644d3e3900867161a2fc9287a9762753d66bd194754679adb26aede559bcccbc"
|
||||
],
|
||||
"version": "==2.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,3 +37,7 @@ source-dir = docs
|
|||
|
||||
[wheel]
|
||||
universal = True
|
||||
|
||||
[flake8]
|
||||
ignore = F401, F403, E128, E131, E241, E261, E265, E271, W191
|
||||
exclude = .git, __pycache__, build, dist, docs/conf.py, test.py, test
|
||||
|
|
|
@ -169,6 +169,10 @@ __test_cases = {
|
|||
'style="padding-bottom: 75%"><iframe ' \
|
||||
'src="https://www.youtube.com/embed/XEjLoHdbVeE" frameborder="0" ' \
|
||||
'allowfullscreen></iframe></div>',
|
||||
'lol[youtube]h4WLX8hfpJw': '<p>lol</p><div class="video-wrapper" ' \
|
||||
'style="padding-bottom: 56.25%"><iframe ' \
|
||||
'src="https://www.youtube.com/embed/h4WLX8hfpJw" frameborder="0" ' \
|
||||
'allowfullscreen></iframe></div>',
|
||||
|
||||
# Progress bars.
|
||||
'[progress=lol]mdr[/progress]': '<p>[progress=lol]mdr[/progress]</p>',
|
||||
|
@ -206,6 +210,6 @@ exec("class TextoutHTMLTest(_unittest.TestCase):\n maxDiff = None\n" + \
|
|||
# If run as main script, run the test function.
|
||||
|
||||
if __name__ == '__main__':
|
||||
çunittest.main()
|
||||
_unittest.main()
|
||||
|
||||
# End of file.
|
||||
|
|
|
@ -400,6 +400,9 @@ class Translator:
|
|||
`end` represents the full version of the ending tag marker,
|
||||
for displaying if the tag is invalid. """
|
||||
|
||||
if not self.queue:
|
||||
return
|
||||
|
||||
# Even if we had no beginning, no content and no end, what is
|
||||
# here has to be distinguished from what was right before!
|
||||
# So we need to flush the text group for this.
|
||||
|
|
|
@ -8,10 +8,11 @@ from .. import BlockTag as _BlockTag
|
|||
|
||||
__all__ = ["AlignTag"]
|
||||
|
||||
|
||||
class AlignTag(_BlockTag):
|
||||
""" Main tag for aligning paragraphs.
|
||||
Example uses:
|
||||
|
||||
|
||||
[align=center]This text is centered horizontally.[/align]
|
||||
[justify]This text is justified.[/justify]
|
||||
"""
|
||||
|
@ -31,7 +32,7 @@ class AlignTag(_BlockTag):
|
|||
|
||||
if not name:
|
||||
align = None
|
||||
elif name == 'align' and value != None:
|
||||
elif name == 'align' and value is not None:
|
||||
align = _align[value]
|
||||
else:
|
||||
align = _align[name[1:-1]]
|
||||
|
|
|
@ -8,10 +8,11 @@ from .. import BlockTag as _BlockTag, InlineTag as _InlineTag
|
|||
|
||||
__all__ = ["CodeTag", "InlineCodeTag", "NoEvalTag"]
|
||||
|
||||
|
||||
class CodeTag(_BlockTag):
|
||||
""" The basic code tag, for displaying code.
|
||||
Example uses:
|
||||
|
||||
|
||||
[code]int main()
|
||||
{
|
||||
printf("hello, world");
|
||||
|
@ -34,11 +35,12 @@ class CodeTag(_BlockTag):
|
|||
def end_lightscript(self):
|
||||
return '```\n'
|
||||
|
||||
|
||||
class InlineCodeTag(_InlineTag):
|
||||
""" Inline code tag, doesn't display a box, simply doesn't evaluate
|
||||
the content and uses monospace font.
|
||||
Example uses:
|
||||
|
||||
|
||||
`some inline code`
|
||||
[inlinecode][b]The tags will be shown verbatim.[/b][/inlinecode]
|
||||
[inlinecode][inlinecode][i]This also[/inlinecode] works![/inlinecode]
|
||||
|
@ -60,10 +62,11 @@ class InlineCodeTag(_InlineTag):
|
|||
def end_lightscript(self):
|
||||
return '`'
|
||||
|
||||
|
||||
class NoEvalTag(_InlineTag):
|
||||
""" Inline code tag, simply doesn't evaluate the content.
|
||||
Example uses:
|
||||
|
||||
|
||||
[noeval][b]wow, and no need for monospace![/b][/noeval]
|
||||
"""
|
||||
|
||||
|
|
|
@ -9,10 +9,11 @@ from html import escape as _htmlescape
|
|||
|
||||
__all__ = ["ImageTag", "AdminImageTag"]
|
||||
|
||||
|
||||
class ImageTag(_BlockTag):
|
||||
""" The main tag for displaying an image.
|
||||
Example uses:
|
||||
|
||||
|
||||
[img]picture_url[/img]
|
||||
[img=center]picture_url[/img]
|
||||
[img=12x24]picture_url[/img]
|
||||
|
@ -41,7 +42,7 @@ class ImageTag(_BlockTag):
|
|||
self._height = None
|
||||
self._align = None
|
||||
|
||||
for arg in ("", value)[value != None].split('|'):
|
||||
for arg in ("", value)[value is not None].split('|'):
|
||||
if not arg:
|
||||
pass
|
||||
elif arg[0] in '0123456789x':
|
||||
|
@ -49,13 +50,17 @@ class ImageTag(_BlockTag):
|
|||
self._height = None
|
||||
|
||||
dim = arg.split('x')
|
||||
try: self._width = int(dim[0])
|
||||
except: pass
|
||||
try: self._height = int(dim[1])
|
||||
except: pass
|
||||
try:
|
||||
self._width = int(dim[0])
|
||||
except ValueError:
|
||||
pass
|
||||
try:
|
||||
self._height = int(dim[1])
|
||||
except ValueError:
|
||||
pass
|
||||
elif arg in _align:
|
||||
al, fl = _align[arg]
|
||||
if al != None:
|
||||
if al is not None:
|
||||
self._align = al
|
||||
if fl:
|
||||
self._float = True
|
||||
|
@ -95,12 +100,13 @@ class ImageTag(_BlockTag):
|
|||
url = self._url.replace('[', '%5B').replace(']', '%5D')
|
||||
return '[[image:{}]]'.format(url)
|
||||
|
||||
|
||||
class AdminImageTag(ImageTag):
|
||||
""" This tag is special for Planète Casio, as it takes images from
|
||||
the `ad`ministration's image folder.
|
||||
It just adds this folder's prefix.
|
||||
Example uses:
|
||||
|
||||
|
||||
[adimg]some_picture.png[/img]
|
||||
[adimg=center]some_picture.png[/img]
|
||||
[adimg=12x24]some_picture.png[/img]
|
||||
|
|
|
@ -11,10 +11,11 @@ __all__ = ["LabelTag", "TargetTag"]
|
|||
|
||||
_labelexpr = _re.compile('^[a-z0-9-]{1,16}$', _re.I)
|
||||
|
||||
|
||||
class LabelTag(_InlineTag):
|
||||
""" The label tag, defines an anchor at a point of the post.
|
||||
Example uses:
|
||||
|
||||
|
||||
[label=installation]Installation de tel logiciel... (no ending req.)
|
||||
[label=compilation][/label] Compilation de tel logiciel...
|
||||
"""
|
||||
|
@ -33,10 +34,11 @@ class LabelTag(_InlineTag):
|
|||
name = self.tweak("label_prefix", "") + self._label
|
||||
return '<a name="{}"></a>'.format(name)
|
||||
|
||||
|
||||
class TargetTag(_InlineTag):
|
||||
""" The goto tag, links to an anchor defined in the post.
|
||||
Example uses:
|
||||
|
||||
|
||||
[target=installation]Check out the installation manual[/target]!
|
||||
"""
|
||||
|
||||
|
|
|
@ -9,10 +9,11 @@ from html import escape as _htmlescape
|
|||
|
||||
__all__ = ["LinkTag", "ProfileTag", "TopicTag", "TutorialTag", "ProgramTag"]
|
||||
|
||||
|
||||
class LinkTag(_InlineTag):
|
||||
""" The main link tag.
|
||||
Example uses:
|
||||
|
||||
|
||||
[url=https://example.org/hi]Go to example.org[/url]!
|
||||
[url=/Fr/index.php][/url]
|
||||
[url]https://random.org/randomize.php[/url] """
|
||||
|
@ -33,7 +34,7 @@ class LinkTag(_InlineTag):
|
|||
# If there is no value, wait until we have a content to
|
||||
# decide if we are valid or not.
|
||||
|
||||
if value == None:
|
||||
if value is None:
|
||||
self.preprocess = self._preprocess_if_no_value
|
||||
return
|
||||
|
||||
|
@ -63,11 +64,12 @@ class LinkTag(_InlineTag):
|
|||
url = self._url.replace('(', '%28').replace(')', '%29')
|
||||
return ']({})'.format(url)
|
||||
|
||||
|
||||
class ProfileTag(LinkTag):
|
||||
""" A special link tag for Planète Casio's profiles.
|
||||
Adds the prefix to the content, and sets the value.
|
||||
Example uses:
|
||||
|
||||
|
||||
[profil]Cakeisalie5[/] """
|
||||
|
||||
aliases = ('[profil]', '[profile]')
|
||||
|
@ -82,7 +84,7 @@ class ProfileTag(LinkTag):
|
|||
|
||||
username = content
|
||||
allowed = "abcdefghijklmnopqrstuvwxyz0123456789_ -."
|
||||
if any(not car in allowed for car in allowed):
|
||||
if any(car not in allowed for car in allowed):
|
||||
raise ValueError("invalid username!")
|
||||
|
||||
# Prepare the tag.
|
||||
|
@ -91,11 +93,12 @@ class ProfileTag(LinkTag):
|
|||
'?membre={}'.format(username)
|
||||
self._validate()
|
||||
|
||||
|
||||
class TopicTag(LinkTag):
|
||||
""" A special link tag for Planète Casio's topics.
|
||||
Adds the prefix to the content, and sets the value.
|
||||
Example uses:
|
||||
|
||||
|
||||
[topic]234[/] """
|
||||
|
||||
aliases = ('[topic]',)
|
||||
|
@ -116,11 +119,12 @@ class TopicTag(LinkTag):
|
|||
f'lecture_sujet.php?id={topic}'
|
||||
self._validate()
|
||||
|
||||
|
||||
class TutorialTag(LinkTag):
|
||||
""" A special link tag for Planète Casio's tutorial.
|
||||
Adds the prefix to the content, and sets the value.
|
||||
Example uses:
|
||||
|
||||
|
||||
[tutorial]71[/tutorial]
|
||||
[tuto]71[/tuto] """
|
||||
|
||||
|
@ -142,11 +146,12 @@ class TutorialTag(LinkTag):
|
|||
f'tutoriels.php?id={topic}'
|
||||
self._validate()
|
||||
|
||||
|
||||
class ProgramTag(LinkTag):
|
||||
""" A special link tag for a Planète Casio's program.
|
||||
Adds the prefix to the content, and sets the value.
|
||||
Example uses:
|
||||
|
||||
|
||||
[program]3598[/program]
|
||||
[prog]3598[/prog] """
|
||||
|
||||
|
|
|
@ -8,10 +8,11 @@ from .. import BlockTag as _BlockTag
|
|||
|
||||
__all__ = ["ProgressTag"]
|
||||
|
||||
|
||||
class ProgressTag(_BlockTag):
|
||||
""" Progress tag, used to display the progress on anything.
|
||||
Usage:
|
||||
|
||||
|
||||
[progress=50]My great progress bar[/progress]
|
||||
[progress=100][/progress] """
|
||||
|
||||
|
@ -28,8 +29,8 @@ class ProgressTag(_BlockTag):
|
|||
|
||||
def end_html(self):
|
||||
return '' \
|
||||
'<div class="progress">' \
|
||||
'<div class="progress-inner" style="width: {}%;"> {}%' \
|
||||
'</div></div></div>'.format(self._val, self._val)
|
||||
'<div class="progress">' \
|
||||
'<div class="progress-inner" style="width: {}%;"> {}%' \
|
||||
'</div></div></div>'.format(self._val, self._val)
|
||||
|
||||
# End of file.
|
||||
|
|
|
@ -8,10 +8,11 @@ from .. import BlockTag as _BlockTag
|
|||
|
||||
__all__ = ["QuoteTag"]
|
||||
|
||||
|
||||
class QuoteTag(_BlockTag):
|
||||
""" The main tag for quoting someone.
|
||||
Example uses:
|
||||
|
||||
|
||||
[quote]Hey, I said that![/quote]
|
||||
[quote=Someone important]I said something important, and it's
|
||||
multiline and [b]formatted[/b]!
|
||||
|
|
|
@ -9,6 +9,7 @@ from .. import InlineTag as _InlineTag
|
|||
|
||||
__all__ = ["RotTag"]
|
||||
|
||||
|
||||
class RotTag(_InlineTag):
|
||||
""" Tag which un-rot13 a content.
|
||||
Demonstration tag for content processing.
|
||||
|
|
|
@ -9,10 +9,11 @@ from .. import BlockTag as _BlockTag
|
|||
|
||||
__all__ = ["ShowTag"]
|
||||
|
||||
|
||||
class ShowTag(_BlockTag):
|
||||
""" Tag which shows the HTML code that is produced by textout().
|
||||
Example uses:
|
||||
|
||||
|
||||
[show][b]hello world![/show]
|
||||
"""
|
||||
|
||||
|
|
|
@ -16,124 +16,154 @@ __all__ = ["TwistedSmiley", "EvilSmiley", "SmileSmiley", "WinkSmiley",
|
|||
|
||||
_prefix = '/images/smileys/'
|
||||
|
||||
|
||||
class TwistedSmiley(_Smiley):
|
||||
aliases = ('>:)',)
|
||||
url = _prefix + 'twisted.gif'
|
||||
|
||||
|
||||
class EvilSmiley(_Smiley):
|
||||
aliases = ('>:(', ':grr:')
|
||||
url = _prefix + 'evil.gif'
|
||||
|
||||
|
||||
class SmileSmiley(_Smiley):
|
||||
aliases = (':)',)
|
||||
url = _prefix + 'smile.gif'
|
||||
|
||||
|
||||
class WinkSmiley(_Smiley):
|
||||
aliases = (';)',)
|
||||
url = _prefix + 'wink.gif'
|
||||
|
||||
|
||||
class SadSmiley(_Smiley):
|
||||
aliases = (':(',)
|
||||
url = _prefix + 'sad.gif'
|
||||
|
||||
|
||||
class GrinSmiley(_Smiley):
|
||||
aliases = (':D', ':grin:')
|
||||
url = _prefix + 'grin.gif'
|
||||
|
||||
|
||||
class HeheSmiley(_Smiley):
|
||||
aliases = (':p',)
|
||||
url = _prefix + 'hehe.gif'
|
||||
|
||||
|
||||
class CoolSmiley(_Smiley):
|
||||
aliases = (':cool:',)
|
||||
url = _prefix + 'cool.gif'
|
||||
|
||||
|
||||
class Cool2Smiley(_Smiley):
|
||||
aliases = ('8-)',)
|
||||
url = _prefix + 'cool2.gif'
|
||||
|
||||
|
||||
class MadSmiley(_Smiley):
|
||||
aliases = (':@',)
|
||||
url = _prefix + 'mad.gif'
|
||||
|
||||
|
||||
class EekSmiley(_Smiley):
|
||||
aliases = ('0_0',)
|
||||
url = _prefix + 'eek.gif'
|
||||
|
||||
|
||||
class MrGreenSmiley(_Smiley):
|
||||
aliases = (':E', ':mrgreen:')
|
||||
url = _prefix + 'mrgreen.gif'
|
||||
|
||||
|
||||
class ShockedSmiley(_Smiley):
|
||||
aliases = (':O',)
|
||||
url = _prefix + 'shocked.gif'
|
||||
|
||||
|
||||
class ConfusedSmiley(_Smiley):
|
||||
aliases = (':s', ':oops:')
|
||||
url = _prefix + 'confused2.gif'
|
||||
|
||||
|
||||
class EyebrowsSmiley(_Smiley):
|
||||
aliases = ('^^',)
|
||||
url = _prefix + 'eyebrows.gif'
|
||||
|
||||
|
||||
class CrySmiley(_Smiley):
|
||||
aliases = (":'(", ":cry:")
|
||||
url = _prefix + 'cry.gif'
|
||||
|
||||
|
||||
# FIXME
|
||||
#class WhistleSmiley(_Smiley):
|
||||
# aliases = (":-°", ':whistle:')
|
||||
# url = _prefix + 'whistle.gif'
|
||||
# height = '15px'
|
||||
|
||||
|
||||
class LolSmiley(_Smiley):
|
||||
aliases = (":lol:",)
|
||||
url = _prefix + 'lol.gif'
|
||||
|
||||
|
||||
class SorrySmiley(_Smiley):
|
||||
aliases = (":sry:",)
|
||||
url = _prefix + 'redface.gif'
|
||||
|
||||
|
||||
class RollEyesSmiley(_Smiley):
|
||||
aliases = (":mmm:",)
|
||||
url = _prefix + 'rolleyes.gif'
|
||||
|
||||
|
||||
class WazaSmiley(_Smiley):
|
||||
aliases = (":waza:",)
|
||||
url = _prefix + 'waza.gif'
|
||||
|
||||
|
||||
class HereSmiley(_Smiley):
|
||||
aliases = (":here:", ":arrow:")
|
||||
url = _prefix + 'pointer.gif'
|
||||
|
||||
|
||||
class BowSmiley(_Smiley):
|
||||
aliases = (":bow:",)
|
||||
url = _prefix + 'bow.gif'
|
||||
|
||||
|
||||
class GoodSmiley(_Smiley):
|
||||
aliases = (":good:",)
|
||||
url = _prefix + 'welldone.gif'
|
||||
|
||||
|
||||
class LoveSmiley(_Smiley):
|
||||
aliases = (":love:",)
|
||||
url = _prefix + 'love.gif'
|
||||
|
||||
|
||||
class OuchSmiley(_Smiley):
|
||||
aliases = (":aie:",)
|
||||
url = _prefix + 'banghead2.gif'
|
||||
|
||||
|
||||
class FacepalmSmiley(_Smiley):
|
||||
aliases = (":facepalm:",)
|
||||
url = _prefix + 'facepalm.gif'
|
||||
|
||||
|
||||
class InsultsSmiley(_Smiley):
|
||||
aliases = (":argh:",)
|
||||
url = _prefix + 'insults.gif'
|
||||
|
||||
|
||||
class WhatSmiley(_Smiley):
|
||||
aliases = (":?:",)
|
||||
url = _prefix + 'what.gif'
|
||||
|
||||
|
||||
class ExclSmiley(_Smiley):
|
||||
aliases = (":!:",)
|
||||
url = _prefix + 'excl.gif'
|
||||
|
|
|
@ -8,12 +8,13 @@ from .. import BlockTag as _BlockTag
|
|||
|
||||
__all__ = ["SpoilerTag"]
|
||||
|
||||
|
||||
class SpoilerTag(_BlockTag):
|
||||
""" Hide content at first glance, force people to click to read content.
|
||||
These elements can contain 'secret' elements such as solutions, source
|
||||
code, or various other things.
|
||||
Example uses:
|
||||
|
||||
|
||||
[spoiler]This is hidden![/spoiler]
|
||||
[spoiler=Y a quelque chose de caché !|Ah, bah en fait non :)]:E
|
||||
And it's multiline, [big]and formatted[/big], as usual :D[/spoiler]
|
||||
|
@ -37,11 +38,11 @@ class SpoilerTag(_BlockTag):
|
|||
|
||||
def begin_html(self):
|
||||
return '<div class="spoiler">' \
|
||||
'<div class="title on" onclick="toggleSpoiler(this.parentNode, ' \
|
||||
'\'open\');"><p>{}</p></div>' \
|
||||
'<div class="title off" onclick="toggleSpoiler(this.parentNode, ' \
|
||||
'\'close\');"><p>{}</p></div>' \
|
||||
'<div class="off">'.format(self._closed, self._open)
|
||||
'<div class="title on" onclick="toggleSpoiler(this.parentNode, ' \
|
||||
'\'open\');"><p>{}</p></div>' \
|
||||
'<div class="title off" onclick="toggleSpoiler(this.parentNode, ' \
|
||||
'\'close\');"><p>{}</p></div>' \
|
||||
'<div class="off">'.format(self._closed, self._open)
|
||||
|
||||
def end_html(self):
|
||||
return '</div></div>'
|
||||
|
|
|
@ -30,10 +30,11 @@ _fonts = {
|
|||
# Tag definition.
|
||||
# ---
|
||||
|
||||
|
||||
class TextTag(_InlineTag):
|
||||
""" Main tag for setting text formatting.
|
||||
Example uses:
|
||||
|
||||
|
||||
[b]Bold text.[/b]
|
||||
[i]Italic text.[/i]
|
||||
[u]Underlined text.[/u]
|
||||
|
@ -45,10 +46,10 @@ class TextTag(_InlineTag):
|
|||
[color=blue]This as well[/color]
|
||||
[color=rgb(255, 255, 255, 0.4)]BLACKNESS[/color]
|
||||
[color=hsl(0, 100%, 0.5)]This will be red.[/color]
|
||||
|
||||
|
||||
Also supports a hack used on Planète Casio for a while, which
|
||||
is a CSS injection, e.g.:
|
||||
|
||||
|
||||
[color=brown; size: 16pt]Hello world![/color]
|
||||
"""
|
||||
|
||||
|
@ -77,7 +78,7 @@ class TextTag(_InlineTag):
|
|||
|
||||
def get_props(value):
|
||||
props = ''
|
||||
if value != None:
|
||||
if value is not None:
|
||||
index = value.find(';')
|
||||
if index >= 0:
|
||||
props = value[index + 1:]
|
||||
|
@ -153,7 +154,7 @@ class TextTag(_InlineTag):
|
|||
|
||||
if not value or \
|
||||
any(c != '0' for c in value[:-3]) or \
|
||||
any(not c in '0123456789' for c in value[-3:]):
|
||||
any(c not in '0123456789' for c in value[-3:]):
|
||||
continue
|
||||
|
||||
value = int(value[-3:])
|
||||
|
@ -182,13 +183,13 @@ class TextTag(_InlineTag):
|
|||
if self._italic:
|
||||
props.append('font-style: italic')
|
||||
if self._underline or self._strike or self._overline:
|
||||
props.append('text-decoration:{}{}{}'.format(' underline' \
|
||||
if self._underline else '', ' line-through' \
|
||||
if self._strike else '', ' overline' \
|
||||
props.append('text-decoration:{}{}{}'.format(' underline'
|
||||
if self._underline else '', ' line-through'
|
||||
if self._strike else '', ' overline'
|
||||
if self._overline else ''))
|
||||
else:
|
||||
if self._overline:
|
||||
props.append('text-decoration:{}'.format(' overline' \
|
||||
props.append('text-decoration:{}'.format(' overline'
|
||||
if self._overline else ''))
|
||||
|
||||
if self._font:
|
||||
|
@ -206,13 +207,13 @@ class TextTag(_InlineTag):
|
|||
|
||||
props.append('color: #%02X%02X%02X' % self._color[0:3])
|
||||
if self._color[3] < 1.0:
|
||||
props.append('color: rgba({}, {}, {}, {})' \
|
||||
props.append('color: rgba({}, {}, {}, {})'
|
||||
.format(*self._color))
|
||||
|
||||
if self._bgcolor and self._bgcolor[3] != 0.0:
|
||||
props.append('background-color: #%02X%02X%02X' % self._color[0:3])
|
||||
if self._bgcolor[3] < 1.0:
|
||||
props.append('background-color: rgba({}, {}, {}, {})' \
|
||||
props.append('background-color: rgba({}, {}, {}, {})'
|
||||
.format(*self._bgcolor))
|
||||
|
||||
if self._size:
|
||||
|
@ -225,8 +226,8 @@ class TextTag(_InlineTag):
|
|||
|
||||
cls, props = self._get_css()
|
||||
if cls or props:
|
||||
props = '<span{}{}>'.format(' class="{}"'.format(' '.join(cls)) \
|
||||
if cls else '', ' style="{}"'.format('; '.join(props)) \
|
||||
props = '<span{}{}>'.format(' class="{}"'.format(' '.join(cls))
|
||||
if cls else '', ' style="{}"'.format('; '.join(props))
|
||||
if props else '')
|
||||
else:
|
||||
props = ''
|
||||
|
|
|
@ -8,10 +8,11 @@ from .. import BlockTag as _BlockTag
|
|||
|
||||
__all__ = ["TitleTag"]
|
||||
|
||||
|
||||
class TitleTag(_BlockTag):
|
||||
""" The title tag.
|
||||
Example uses:
|
||||
|
||||
|
||||
[title]Some title[/title]
|
||||
[subtitle]Some subtitle[/subtitle]
|
||||
"""
|
||||
|
|
|
@ -14,11 +14,12 @@ __all__ = ["VideoTag", "YoutubeTag"]
|
|||
_defaultratio_w = 16
|
||||
_defaultratio_h = 9
|
||||
|
||||
|
||||
class VideoTag(_BlockTag):
|
||||
""" The video tag, puts a preview of the video whose URL is given.
|
||||
Only a few 'big' services are supported for now.
|
||||
Example uses:
|
||||
|
||||
|
||||
[video]video_url[/video]
|
||||
[video=4:3]video_url[/video]
|
||||
[video tiny]video_url[/video tiny]
|
||||
|
@ -77,7 +78,7 @@ class VideoTag(_BlockTag):
|
|||
self._video = self.video(content)
|
||||
except:
|
||||
url = _urlparse.urlparse(content)
|
||||
if not url.scheme in ('http', 'https'):
|
||||
if url.scheme not in ('http', 'https'):
|
||||
raise Exception("No allowed prefix!")
|
||||
|
||||
self._video = content
|
||||
|
@ -117,10 +118,11 @@ class VideoTag(_BlockTag):
|
|||
url = self._url.replace('[', '%5B').replace(']', '%5D')
|
||||
return '[[image:{}]]'.format(url)
|
||||
|
||||
|
||||
class YoutubeTag(VideoTag):
|
||||
""" Alias for the video tag with only the Youtube possibility.
|
||||
Example uses:
|
||||
|
||||
|
||||
[youtube]okMK1NYRySI[/youtube] """
|
||||
|
||||
aliases = ('[youtube]',)
|
||||
|
|
|
@ -11,6 +11,7 @@ from .. import Video as _Video
|
|||
|
||||
__all__ = ["YouTubeVideo", "DailymotionVideo", "VimeoVideo"]
|
||||
|
||||
|
||||
class YouTubeVideo(_Video):
|
||||
""" Get a video from Youtube. """
|
||||
|
||||
|
@ -18,7 +19,7 @@ class YouTubeVideo(_Video):
|
|||
|
||||
def __init__(self, url):
|
||||
url = _urlparse.urlparse(url)
|
||||
if not url.scheme in ('http', 'https'):
|
||||
if url.scheme not in ('http', 'https'):
|
||||
raise Exception
|
||||
|
||||
if url.netloc == "youtu.be":
|
||||
|
@ -36,6 +37,7 @@ class YouTubeVideo(_Video):
|
|||
|
||||
self.embed = f"https://www.youtube.com/embed/{self._id}"
|
||||
|
||||
|
||||
class DailymotionVideo(_Video):
|
||||
""" Get a video from Dailymotion. """
|
||||
|
||||
|
@ -43,7 +45,7 @@ class DailymotionVideo(_Video):
|
|||
|
||||
def __init__(self, url):
|
||||
url = _urlparse.urlparse(url)
|
||||
if not url.scheme in ('http', 'https'):
|
||||
if url.scheme not in ('http', 'https'):
|
||||
raise Exception
|
||||
|
||||
if url.netloc in ('dailymotion.com', 'www.dailymotion.com'):
|
||||
|
@ -53,6 +55,7 @@ class DailymotionVideo(_Video):
|
|||
|
||||
self.embed = f"https://www.dailymotion.com/embed/video/{self._code}"
|
||||
|
||||
|
||||
class VimeoVideo(_Video):
|
||||
""" Get a video from Vimeo. """
|
||||
|
||||
|
@ -60,7 +63,7 @@ class VimeoVideo(_Video):
|
|||
|
||||
def __init__(self, url):
|
||||
url = _urlparse.urlparse(url)
|
||||
if not url.scheme in ('http', 'https'):
|
||||
if url.scheme not in ('http', 'https'):
|
||||
raise Exception
|
||||
|
||||
if url.netloc in ('vimeo.com', 'www.vimeo.com'):
|
||||
|
|
Loading…
Reference in New Issue