,'``.._ ,'``. :,--._:)\,:,._,.: All Glory to :`--,'' :`...';\ the HYPNO TOAD! `,' `---' `. / : / \ ,' :\.___,-. `...,---'``````-..._ |: \ ( ) ;: ) \ _,-. `. ( // `' \ : `.// ) ) , ; ,-|`. _,'/ ) ) ,' ,' ( :`.`-..____..=:.-': . _,' ,' `,'\ ``--....-)=' `._, \ ,') _ '``._ _.-/ _ `. (_) / )' ; / \ \`-.' `--( `-:`. `' ___..' _,-' |/ `.) `-. `.`.``-----``--, .' |/`.\`' ,','); SSt ` (/ (/
インターネットで発見。
みなさんこんにちは!
私の小さな開発を共有したい:ローカルで使用できるプリンター。
免責事項
プロジェクトは開発中であり、徹底的にテストする必要があります。
特徴
- 引用符を
«„“»および“''”置き換えます(英語版)。 レベルの数に制限はありません-タイポグラファーは単に偶数/奇数を交互に切り替えます-どこで設定可能ですか - インチの配列、アポストロフィ:
4′ 、 20″ - 複雑な記号:省略記号、著作権、商標、矢印など:
(c)さらに、キリル文字で書かれていても - テキストと数値範囲のハイフンを長いダッシュに置き換えます
- 電話番号のハイフンを短いダッシュに置き換える
- マイナス記号と乗算記号の配置
40 など、数字と後続の単語を不可解なハイフンで関連付ける- ユニオンと1〜2文字の単語とそれに続く単語のリンク
- 測定単位と数字の分離(おそらく、近いうちに飲酒するでしょう。偽陽性の結果が出る可能性は非常に高いでしょう)
- 省略形の不可解なスペース:
.. . .になります。 . . -通常のギャップは不連続になります と (最後にドットあり、なし)をルーブル記号に置き換えます-文の最後に一致が見つかった場合にポイントを削除するため、おそらくそれを飲むでしょう- 分数
1/2 1/3などの置換 既存のユニコード文字に - 余分なスペースと改行の削除、最初と最後のトリミング
- ケースのヒープ内の不可解なスペースの配置
- htmlタグには影響せず、コンテンツを無視します
(head|iframe|pre|code|script|style) - タイポグラファーが無視する文字列を渡すことができます
例
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', '@'),
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には、 EscapePhrases 、 EscapeHtml 、 TypoQuotes 、 Expressions複数のプロセッサが付属しています。
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»>ます。
タイポクォート
引用符を付けます。 活版印刷が属性loq 、 roq 、 leq 、 reqをリストすることをloqします。 例:
from typus import BaseTypus from typus.chars import LAQUO, RAQUO, DLQUO, LDQUO class MyTypus(BaseTypus):
typus.mixinsモジュールには既製のEnQuotesとRuQuotesがあります。
表現
式の機能を提供します。 プリンターの初期化中に、すべてのレギュラーがコンパイルされ、プロセッサーインスタンスに保存されます。
デバッグについて
タイポグラファーにdebug=Trueを渡すと、すべての改行しないスペースがアンダースコアに置き換えられます。これはデバッグに役立ちます。
ru_typus('(c) me', debug=True) '_me'
デモ
重要:デモは非常に単純な仮想マシンで実行され、機能のデモを目的としています。
(正直なところ)何も保存しません。サイトのソースコードはgithubにあります。
インストールと使用
pip install -e git://github.com/byashimov/typus.git
次:
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.'
ドキュメント
この記事は、私が英語に不器用な翻訳をするまで、そのように考えることができます。
適合性
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-CIは2.5サポートしていません。また、手動で確認するために常に作業するわけではないので、まだ使用する(思いやりがある)場合は、インストール後にテストを実行します。
プロジェクトページ 。
計画といくつかのアイデア
- タイポグラファーに下線リンクまたはhtmlタグを追加する予定はありません。 これはテキストプロセッサ(マークダウン、リテキストなど)によって占有される必要があります。 さらに、誰もが独自のケースを持っています。
- また、タイポグラファーにテキストの誤りを訂正してほしくありません。
- ほとんどすべてのタイポグラファーは、
&などの安全でない文字をhtmlエンティティに変換します。 現時点では、なぜこれを行うべきかは明確ではありません。ブラウザ、検索エンジン、パーサーはそのようなテキストに簡単に対応し、CPUをそのように追いかけてコードを読めなくするつもりはありません。 具体的な例がありがたいです。 - おそらく
ru_typusはウクライナ語とベラルーシ語のテキスト(および場合によっては他のテキスト)に対応するでしょう。もしそうなら、これをプロジェクトの説明に追加します。
すべてが好きです。
PSハブのインラインコードを強調表示するある種の地獄