web-dev-qa-db-ja.com

特定のグリフの共通名を見つけるにはどうすればよいですか?

時々、グリフの名前を知りたいです。たとえば、、ハイフンであるかどうか知りたい-、アンダッシュ、全角ダッシュ、またはマイナス記号。これをコピーしてターミナルに貼り付けて、それが何であるかを確認する方法はありますか?

私のシステムがこれらのグリフの共通名を知っているかどうかはわかりませんが、/usr/share/X11/locale/en_US.UTF-8/Compose。例えば、

<Multi_key> <exclam> <question>         : "‽"   U203D # INTERROBANG

別のグリフの例:????

21
Sparhawk

nicode ユーティリティを試してください:

$ unicode ‽
U+203D INTERROBANG
UTF-8: e2 80 bd  UTF-16BE: 203d  Decimal: &#8253;
‽
Category: Po (Punctuation, Other)
Bidi: ON (Other Neutrals)

または [〜#〜] icu [〜#〜] パッケージのuconvユーティリティ:

$ printf %s ‽ | uconv -x any-name
\N{INTERROBANG}

recode ユーティリティを介して情報を取得することもできます:

$ printf %s ‽ | recode ..dump
UCS2   Mne   Description

203D         point exclarrogatif

またはPerlを使用:

$ printf %s ‽ | Perl -CLS -Mcharnames=:full -lne 'print charnames::viacode(ord) for /./g'
INTERROBANG

それらは、グリフ全体ではなく、そのグリフを構成する文字に関する情報を提供することに注意してください。たとえば、(アキュートアクセントを組み合わせた場合):

$ printf é | uconv -x any-name
\N{LATIN SMALL LETTER E}\N{COMBINING ACUTE ACCENT}

スタンドアロンのéキャラクターとは異なります。

$ printf é | uconv -x any-name
\N{LATIN SMALL LETTER E WITH ACUTE}

これらを再結合するようにuconvに要求できます(結合された形式の場合):

$ printf 'e\u0301b\u0301' | uconv -x '::nfc;::name;'
\N{LATIN SMALL LETTER E WITH ACUTE}\N{LATIN SMALL LETTER B}\N{COMBINING ACUTE ACCENT}

(éには結合された形式がありますが、b́はありません)。

30

あなたはPerlを使うことができます charnamesからviacode関数 モジュール:

$ printf ‽ | Perl -Mcharnames=:full -CLS -nle 'print charnames::viacode(ord)'
INTERROBANG
$ printf ???? | Perl -Mcharnames=:full -CLS -nle 'print charnames::viacode(ord)'
COW

charnames はPerl v5.6.0で最初にリリースされました


Perl 6 は、このクリスマスの日に生産準備が整うので、ここで言及することは価値があります。これは、これまでに見たUnicode文字のサポートが最も優れているためです。 niname method/routineを呼び出すだけです:

$ printf ‽ | Perl6 -ne 'say .uniname'
INTERROBANG

(アキュートアクセントを組み合わせたもの)とスタンドアロンのé文字の両方を使用すると、次のようになります。

# e with combining acute accent
$ printf é | Perl6 -ne 'say .uniname'
LATIN SMALL LETTER E WITH ACUTE

# standalone é
$ printf é | Perl6 -ne 'say .uniname'
LATIN SMALL LETTER E WITH ACUTE

.uniname$_.uninameの省略形です)

5
cuonglm

私が知る最良の方法は、Perlのunipropsを使用することです。 Perlの Unicode::Tussle モジュール。あなたはそれをインストールすることができます

Sudo Perl -MCPAN -e 'install Unicode::Tussle'

次に、テストするグリフで実行できます。

$ uniprops  ‽
U+203D ‹‽› \N{INTERROBANG}
    \pP \p{Po}
    All Any Assigned InPunctuation Punct Is_Punctuation Common Zyyy Po P
       General_Punctuation Gr_Base Grapheme_Base Graph GrBase Other_Punctuation
       Pat_Syn Pattern_Syntax PatSyn Print Punctuation STerm Term
       Terminal_Punctuation Unicode X_POSIX_Graph X_POSIX_Print X_POSIX_Punct

$ uniprops  ????
U+1F404 ‹????› \N{COW}
    \pS \p{So}
    All Any Assigned InMiscPictographs Common Zyyy So S Gr_Base Grapheme_Base Graph
       GrBase Misc_Pictographs Miscellaneous_Symbols_And_Pictographs Other_Symbol
       Print Symbol Unicode X_POSIX_Graph X_POSIX_Print
5
terdon

unicode を使用することもできます。これは、名前だけではなく、さらに多くの情報を出力します。

# unicode –
U+2013 EN DASH
UTF-8: e2 80 93  UTF-16BE: 2013  Decimal: &#8211;
–
Category: Pd (Punctuation, Dash)
Bidi: ON (Other Neutrals)
4
Marco

これでb​​ashスクリプトを作成します。

#!/bin/bash
awk -F ":" '{print $2}' /usr/share/X11/locale/en_US.UTF-8/Compose | grep "$1" | awk -F "#" '{print $2}'

たとえば、namecharなど、必要に応じて名前を付け、実行権限を付与します。

これで、たとえば次のように呼び出すことができます。

./namechar @

結果は次のようになります。

COMMERCIAL AT
1
jcbermu