typus-Pythonのローカルタイポグラフ

,'``.._ ,'``. :,--._:)\,:,._,.: All Glory to :`--,'' :`...';\ the HYPNO TOAD! `,' `---' `. / : / \ ,' :\.___,-. `...,---'``````-..._ |: \ ( ) ;: ) \ _,-. `. ( // `' \ : `.// ) ) , ; ,-|`. _,'/ ) ) ,' ,' ( :`.`-..____..=:.-': . _,' ,' `,'\ ``--....-)=' `._, \ ,') _ '``._ _.-/ _ `. (_) / )' ; / \ \`-.' `--( `-:`. `' ___..' _,-' |/ `.) `-. `.`.``-----``--, .' |/`.\`' ,','); SSt ` (/ (/ 

インターネットで発見。


みなさんこんにちは!
私の小さな開発を共有したい:ローカルで使用できるプリンター。


免責事項


プロジェクトは開発中であり、徹底的にテストする必要があります。


特徴




 from typus import ru_typus ru_typus('00" "11 \'22\' 11"? "11 \'22 "33 33?"\' 11" 00 "11 \'22\' 11" 0"') '00″ «11 „22“ 11»? «11 „22 «33 33?»“ 11» 00 «11 „22“ 11» 0″' 

数値はネストのレベルです。 最初の引用符がゼロになっている場合、別のレベルがあるため、インチが出ました。


仕組み


 class BaseTypus(EnRuExpressions, TypusCore): processors = (EscapePhrases, EscapeHtml, TypoQuotes, Expressions) class RuTypus(RuQuotes, BaseTypus): pass ru_typus = RuTypus() 

タイプスは「プロセッサー」と「式」で構成されています。


表現


これらは(regex, replace) re.sub(regex, replace)渡されre.sub(regex, replace)順次実行されるペア(regex, replace)です(以下を参照)。 タイポグラファーのほぼ全体が「表現」です。 これらは、接頭辞expr_持つメソッドとして記述され、関数はネストされたリストを返す必要があります。 1つの「式」は一連の「式」を返すことができます。


 class MyTypus(Typus): expressions = Typus.expressions + 'http://bar' def expr_http://bar(self): expr = ( (r'\d', '@'), #    @ ) return expr 

3番目のオプションの引数は、 re.compileに渡されるre.compileで、デフォルトではre.I | re.U | re.M | re.S re.I | re.U | re.M | re.S re.I | re.U | re.M | re.S
ところで、 replaceは関数にすることができます。re.subを参照してください。


シーケンスを決定するために、タイポグラフ属性が使用されます- expressions 、式名のリストを保存します 。 超過分をオフにできます:


 from typus import RuTypus exclude_expressions = ('ruble', 'math') class MyTypus(RuTypus): expressions = (e for e in RuTypus.expressions if e not in exclude_expressions) 

expressionsはジェネレーターになることができますが、シーケンスとして行われる場合、これを行うことができます:


 def expr_http://bar(self): if 'some' in self.expressions: return baz return egg 

ボックスには式の組み合わせが1つだけありますEnRuExpressionsですが、ほぼすべての作業を行います。


式はExpressionsプロセッサを使用します。


プロセッサー


時々、あなたは単純なレギュラーを取り除くことができない、あなたは超機能を作らなければなりません。 プロセッサーは、クラス機能デコレーターであり、タイポグラファーの作成中に開始され、テキストの処理時に呼び出されます。 プリンタのインスタンス自体がそのインスタンス(プロセッサインスタンス)に渡されるため、プロセッサはその構成にアクセスできます。


複数のプロセッサを使用する場合、それらは順番に互いに装飾します。 たとえば、次のように:


  html     ,    -           

Typusには、 EscapePhrasesEscapeHtmlTypoQuotesExpressions複数のプロセッサが付属しています。


EscapePhrases


特定のテキストを処理できない場合や、タイポグラファーがこの場所でシャットダウンすることを事前に知っている場合があります。その場合、これを行うことができます。


 typus('"http://bar 2""', escape_phrases=['2"']) '«http://bar 2"»' 

これがないと、タイポグラファーは«http://bar 2»"という閉じ引用に会うことになり«http://bar 2»"


 typus('  (c)  (c)', escape_phrases=[' (c)']) '  (c)  ' 

引数escape_phrasesは、CRUDアプリケーション(別名「管理パネル」)の別のフィールドとしてescape_phrasesことができます。コンテンツマネージャーは、セパレーターを介してフレーズを一覧表示し、それらをタイポグラファーに渡します。


テキストを分割するには、ユーティリティを使用できます。


 from typus.utils import splinter split = splinter(',') split('a, b,c ') == ['a', 'b', 'c'] split('a, b\,c') == ['a', 'b,c'] 

splinterはエスケープされた区切り文字を理解し、各フレーズに対してstr.strip()を呼び出します。


EscapeHtml


タイポグラファーの前にhtmlタグを表現し、その後に返します。 これがないと、 <img src="http://bar"><img src=«http://bar»>ます。


タイポクォート


引用符を付けます。 活版印刷が属性loqroqleqreqをリストすることをloqします。 例:


 from typus import BaseTypus from typus.chars import LAQUO, RAQUO, DLQUO, LDQUO class MyTypus(BaseTypus): #  ,  ,  ,   loq, roq, leq, req = LAQUO, RAQUO, DLQUO, LDQUO 

typus.mixinsモジュールには既製のEnQuotesRuQuotesがあります。


表現


式の機能を提供します。 プリンターの初期化中に、すべてのレギュラーがコンパイルされ、プロセッサーインスタンスに保存されます。


デバッグについて


タイポグラファーにdebug=Trueを渡すと、すべての改行しないスペースがアンダースコアに置き換えられます。これはデバッグに役立ちます。


 ru_typus('(c) me', debug=True) '_me' 

デモ


重要:デモは非常に単純な仮想マシンで実行され、機能のデモを目的としています。


(正直なところ)何も保存しません。サイトのソースコードはgithubにあります。


インストールと使用


 pip install -e git://github.com/byashimov/typus.git#egg=typus 

次:


 from typus import en_typus, ru_typus en_typus('"Beautiful is better than ugly." (c) Tim Peters.', debug=True) '“Beautiful is_better than ugly.” _Tim Peters.' # _ for nbsp ru_typus('" ,  ." ()  .') '« ,  .»  .' # cyrillic '' in '()' 

ドキュメント


この記事は、私が英語に不器用な翻訳をするまで、そのように考えることができます。


適合性


 Name Stmts Miss Cover ----------------------------------------- typus/__init__.py 8 0 100% typus/chars.py 18 0 100% typus/core.py 24 0 100% typus/mixins.py 77 0 100% typus/processors.py 99 0 100% typus/utils.py 30 0 100% ----------------------------------------- TOTAL 256 0 100% ________________ summary ________________ py25: commands succeeded py26: commands succeeded py27: commands succeeded py33: commands succeeded py34: commands succeeded py35: commands succeeded congratulations :) 

私が使用しているTravis-CI2.5サポートしていません。また、手動で確認するために常に作業するわけではないので、まだ使用する(思いやりがある)場合は、インストール後にテストを実行します。


プロジェクトページ


計画といくつかのアイデア



すべてが好きです。


PSハブのインラインコードを強調表示するある種の地獄



Source: https://habr.com/ru/post/J303608/


All Articles