Make devwiki & wiki use colors :3

master
sfan5 2014-07-20 20:46:13 +02:00
parent a3a854f344
commit 2680733831
2 changed files with 62 additions and 28 deletions

View File

@ -9,23 +9,30 @@ import web
import urllib.parse import urllib.parse
wikiuri_g = 'http://dev.minetest.net/index.php?title=%s&printable=yes' wikiuri_g = 'http://dev.minetest.net/index.php?title=%s&printable=yes'
wikiuri_r = 'http://dev.minetest.net/index.php?title=%s' wikiuri_r = 'http://dev.minetest.net/%s'
r_content = re.compile(r'(?i)<div[^>]+class=.mw-content-ltr.>') r_content = re.compile(r'(?i)<div[^>]+class=.mw-content-ltr.>')
r_paragraph = re.compile(r'(?ims)<p>(.+?)</p>') r_paragraph = re.compile(r'(?ims)<p>(.+?)</p>')
r_sentenceend = re.compile(r'\.[^\.]') r_sentenceend = re.compile(r'\.[ A-Z]')
transforms = [ transforms = [
re.compile(r'(?i)<a [^>]+>(.+?)</a>'), (re.compile(r'(?i)<a [^>]+>(.+?)</a>'), "\g<1>"),
re.compile(r'(?i)<b>(.+?)</b>'), (re.compile(r'(?i)<b>(.+?)</b>'), "\x02\g<1>\x02"),
re.compile(r'(?i)<i>(.+?)</i>'), (re.compile(r'(?i)<i>(.+?)</i>'), "\x1d\g<1>\x1d"),
(re.compile(r'(?i)<u>(.+?)</u>'), "\x1f\g<1>\x1f"),
(re.compile(r'(?i)<code>(.+?)</code>'), "\x0315\g<1>\x03 "),
(re.compile(r'(?i)<br\s*/?>'), ""),
]
nottext = [
re.compile(r'(?i)^<br\s*/?>$')
] ]
def wiki(phenny, input): def devwiki(phenny, input):
term = input.group(2) term = input.group(2)
if not term: if not term:
return return
log.log("event", "%s queried Developer Wiki for '%s'" % (log.fmt_user(input), term), phenny) log.log("event", "%s queried Developer Wiki for '%s'" % (log.fmt_user(input), term), phenny)
term = term.replace(" ", "_")
term = web.urlencode(term) term = web.urlencode(term)
data, scode = web.get(wikiuri_g % term) data, scode = web.get(wikiuri_g % term)
@ -38,19 +45,29 @@ def wiki(phenny, input):
return phenny.say("Sorry, did not find anything.") return phenny.say("Sorry, did not find anything.")
data = data[m.span()[1]:] data = data[m.span()[1]:]
m = re.search(r_paragraph, data) mi = re.finditer(r_paragraph, data)
if not m: text = ""
for m in mi:
abort = False
for e in nottext:
if re.search(e, m.group(1)):
abort = True
break
if abort:
continue
text = m.group(1)
break
if not text:
return phenny.say("Sorry, did not find anything.") return phenny.say("Sorry, did not find anything.")
data = m.group(1) for tf in transforms:
for transform in transforms: text = re.sub(tf[0], tf[1], text)
data = re.sub(transform, '\g<1>', data) m = re.search(r_sentenceend, text)
m = re.search(r_sentenceend, data)
if m: if m:
data = data[:m.span()[1]-1] text = text[:m.span()[1]-1]
phenny.say('"%s" - %s ' % (web.decode(data), wikiuri_r % term)) phenny.say('"%s" - %s ' % (web.decode(text), wikiuri_r % term))
wiki.commands = ['devwik', 'devwiki'] devwiki.commands = ['dev', 'devwiki']
wiki.priority = 'high' devwiki.priority = 'high'
if __name__ == '__main__': if __name__ == '__main__':
print(__doc__.strip()) print(__doc__.strip())

41
wiki.py
View File

@ -8,16 +8,22 @@ import re
import web import web
import urllib.parse import urllib.parse
wikiuri_g = 'http://wiki.minetest.net/%s?printable=yes' wikiuri_g = 'http://wiki.minetest.net/index.php?title=%s&printable=yes'
wikiuri_r = 'http://wiki.minetest.net/%s' wikiuri_r = 'http://wiki.minetest.net/%s'
r_content = re.compile(r'(?i)<div[^>]+class=.mw-content-ltr.>') r_content = re.compile(r'(?i)<div[^>]+class=.mw-content-ltr.>')
r_paragraph = re.compile(r'(?ims)<p>(.+?)</p>') r_paragraph = re.compile(r'(?ims)<p>(.+?)</p>')
r_sentenceend = re.compile(r'\.[^\.]') r_sentenceend = re.compile(r'\.[^\.]')
transforms = [ transforms = [
re.compile(r'(?i)<a [^>]+>(.+?)</a>'), (re.compile(r'(?i)<a [^>]+>(.+?)</a>'), "\g<1>"),
re.compile(r'(?i)<b>(.+?)</b>'), (re.compile(r'(?i)<b>(.+?)</b>'), "\x02\g<1>\x02"),
re.compile(r'(?i)<i>(.+?)</i>'), (re.compile(r'(?i)<i>(.+?)</i>'), "\x1d\g<1>\x1d"),
(re.compile(r'(?i)<u>(.+?)</u>'), "\x1f\g<1>\x1f"),
(re.compile(r'(?i)<code>(.+?)</code>'), "\x0315\g<1>\x03 "),
(re.compile(r'(?i)<br\s*/?>'), ""),
]
nottext = [
re.compile(r'(?i)^<br\s*/?>$')
] ]
def wiki(phenny, input): def wiki(phenny, input):
@ -26,6 +32,7 @@ def wiki(phenny, input):
return return
log.log("event", "%s queried Wiki for '%s'" % (log.fmt_user(input), term), phenny) log.log("event", "%s queried Wiki for '%s'" % (log.fmt_user(input), term), phenny)
term = term.replace(" ", "_")
term = web.urlencode(term) term = web.urlencode(term)
data, scode = web.get(wikiuri_g % term) data, scode = web.get(wikiuri_g % term)
@ -38,16 +45,26 @@ def wiki(phenny, input):
return phenny.say("Sorry, did not find anything.") return phenny.say("Sorry, did not find anything.")
data = data[m.span()[1]:] data = data[m.span()[1]:]
m = re.search(r_paragraph, data) mi = re.finditer(r_paragraph, data)
if not m: text = ""
for m in mi:
abort = False
for e in nottext:
if re.search(e, m.group(1)):
abort = True
break
if abort:
continue
text = m.group(1)
break
if not text:
return phenny.say("Sorry, did not find anything.") return phenny.say("Sorry, did not find anything.")
data = m.group(1) for tf in transforms:
for transform in transforms: text = re.sub(tf[0], tf[1], text)
data = re.sub(transform, '\g<1>', data) m = re.search(r_sentenceend, text)
m = re.search(r_sentenceend, data)
if m: if m:
data = data[:m.span()[1]-1] text = text[:m.span()[1]-1]
phenny.say('"%s" - %s ' % (web.decode(data), wikiuri_r % term)) phenny.say('"%s" - %s ' % (web.decode(text), wikiuri_r % term))
wiki.commands = ['wik', 'wiki'] wiki.commands = ['wik', 'wiki']
wiki.priority = 'high' wiki.priority = 'high'