# HG changeset patch # User svartalf # Date 1270796706 -32400 # Node ID 8b38e2a95dc8cb8d36c8226e270976d1f1143289 # Parent 87fc0037c357aa7f4856a7f79b6f0a06bf8afc18 Простые BB коды diff -r 87fc0037c357aa7f4856a7f79b6f0a06bf8afc18 -r 8b38e2a95dc8cb8d36c8226e270976d1f1143289 pytyph/constants.py --- a/pytyph/constants.py Fri Apr 09 15:21:01 2010 +0900 +++ b/pytyph/constants.py Fri Apr 09 16:05:06 2010 +0900 @@ -8,3 +8,7 @@ ГОУ ДОД|ГОУ|ФГОУ СПО|ГОУ ДПО|ГОУ ВПО|ГОУ СПО|ОГОУ|ОГОУ НПО|ОГОУ СПО|ГП|ОГУ| ОГУП|АО|ТОО|МУЗМПТПНОО|ГУП|АНО|ОГУК|ОГУЗ|НУЗ|МУ|ФГП|ФГУЗ|НКОУ|ГОУ НПО|МДОУ| НДОУ|ГДОУ|ГК|НИИ'''.replace('\n', '') + +url = ur'https?://(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|localhost|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?::\d+)?(?:/?|[/?]\S+)' + +email = ur"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*|^\"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*\")@(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?" diff -r 87fc0037c357aa7f4856a7f79b6f0a06bf8afc18 -r 8b38e2a95dc8cb8d36c8226e270976d1f1143289 pytyph/rules/acronyms.py --- a/pytyph/rules/acronyms.py Fri Apr 09 15:21:01 2010 +0900 +++ b/pytyph/rules/acronyms.py Fri Apr 09 16:05:06 2010 +0900 @@ -12,8 +12,6 @@ from pytyph.typograph import Rule from pytyph.constants import metrics, ownerships -print ownerships - rules = ( # Привязка сокращений форм собственности к названиям организаций diff -r 87fc0037c357aa7f4856a7f79b6f0a06bf8afc18 -r 8b38e2a95dc8cb8d36c8226e270976d1f1143289 pytyph/rules/bb.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pytyph/rules/bb.py Fri Apr 09 16:05:06 2010 +0900 @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- + +''' +BB коды + +[i][/i] +[b][/b] +[u][/u] +[q][/q] +[url http://example.org]Example[/url] +[email example@example.com]Example[/email] +[list] + [*] Один + [*] Два + [*] Три +[/list] +''' + +import re + +from pytyph.typograph import Rule +from pytyph.constants import url, email + +rules = ( + + # Полужирное начертание + Rule(ur'\[b\](.*?)\[\/b\]', ur'\1', classes=('bb',)), + + # Курсив + Rule(ur'\[i\](.*?)\[\/i\]', ur'\1', classes=('bb',)), + + # Подчеркнутый текст + Rule(ur'\[u\](.*?)\[\/u\]', ur'\1', classes=('bb',)), + + # Цитаты + Rule(ur'\[q\](.*?)\[\/q\]', ur'
\1', classes=('bb',)), + + # Ссылки + # TODO: Определение самой ссылки (см. pytyph.constants) + # TODO: Если текст ссылки слишком длинный, укорачиваем его + Rule(ur'\[url\s+(.*?)\](.*?)\[\/url\]', ur'\2', classes=('bb',)), + + # Адреса почты + # TODO: Определение адреса почты (см. pytyph.constants) + # TODO: Если текст ссылки слишком длинный, укорачиваем его + Rule(ur'\[email\s+(.*?)\](.*?)\[/email\]', u'\g<2>', classes=('bb',)), +) diff -r 87fc0037c357aa7f4856a7f79b6f0a06bf8afc18 -r 8b38e2a95dc8cb8d36c8226e270976d1f1143289 pytyph/rules/punctuation.py --- a/pytyph/rules/punctuation.py Fri Apr 09 15:21:01 2010 +0900 +++ b/pytyph/rules/punctuation.py Fri Apr 09 16:05:06 2010 +0900 @@ -24,7 +24,7 @@ Rule(ur'\s+(?=[\.,:;!\?…])', ''), # Расстановка пробелов после знака препинания - Rule(ur'(?<=[\.,:;!\?…])(?![\.,:;!\?…\s])', ' ',priority = 100), + Rule(ur'(?<=[\.,:;!\?…])(?![\.,:;!\?…\s])\d', ' ',priority = 100), # Расстановка запятых перед а, но Rule(ur'(?<=[^,])(?=\s(?:а|но)\s)', ur','), diff -r 87fc0037c357aa7f4856a7f79b6f0a06bf8afc18 -r 8b38e2a95dc8cb8d36c8226e270976d1f1143289 pytyph/tests/bb.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pytyph/tests/bb.py Fri Apr 09 16:05:06 2010 +0900 @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- + +import unittest + +from pytyph.typograph import Typograph + +class BBTest(unittest.TestCase): + + def setUp(self): + self.typograph = Typograph() + + def testBold(self): + test = u'[b]How do you do?[/b]' + right = u'How do you do?' + + self.assertEqual(self.typograph.process(test), right) + + def testItalic(self): + test = u'[i]How do you do?[/i]' + right = u'How do you do?' + + self.assertEqual(self.typograph.process(test), right) + + def testUnderline(self): + test = u'[u]How do you do?[/u]' + right = u'How do you do?' + + self.assertEqual(self.typograph.process(test), right) + + def testQuote(self): + test = u'[q]How do you do?[/q]' + right = u'
How do you do?' + + self.assertEqual(self.typograph.process(test), right) + + def testUrl(self): + test = u'[url http://example.org]Example[/url]' + right = u'Example' + + self.assertEqual(self.typograph.process(test), right) + + def testMail(self): + test = u'[email example@example.org]Example[/email]' + right = u'Example' + + self.assertEqual(self.typograph.process(test), right) + + +if __name__ == '__main__': + unittest.main()