,'``.._ ,'``. :,--._:)\,:,._,.: 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', '@'), # @ ) 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には、 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): # , , , loq, roq, leq, req = LAQUO, RAQUO, DLQUO, LDQUO
typus.mixins
モジュールには既製のEnQuotes
とRuQuotes
があります。
表現
式の機能を提供します。 プリンターの初期化中に、すべてのレギュラーがコンパイルされ、プロセッサーインスタンスに保存されます。
デバッグについて
タイポグラファーに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-CIは2.5
サポートしていません。また、手動で確認するために常に作業するわけではないので、まだ使用する(思いやりがある)場合は、インストール後にテストを実行します。
計画といくつかのアイデア
- タイポグラファーに下線リンクまたはhtmlタグを追加する予定はありません。 これはテキストプロセッサ(マークダウン、リテキストなど)によって占有される必要があります。 さらに、誰もが独自のケースを持っています。
- また、タイポグラファーにテキストの誤りを訂正してほしくありません。
- ほとんどすべてのタイポグラファーは、
&
などの安全でない文字をhtmlエンティティに変換します。 現時点では、なぜこれを行うべきかは明確ではありません。ブラウザ、検索エンジン、パーサーはそのようなテキストに簡単に対応し、CPUをそのように追いかけてコードを読めなくするつもりはありません。 具体的な例がありがたいです。 - おそらく
ru_typus
はウクライナ語とベラルーシ語のテキスト(および場合によっては他のテキスト)に対応するでしょう。もしそうなら、これをプロジェクトの説明に追加します。
すべてが好きです。
PSハブのインラインコードを強調表示するある種の地獄