もう一人のY君

iPhoneアプリのレビューやアップデートレビューなどを書いています. たまに数学の記事も書きます.

もう一人のY君 MENU  MENU

【iPhoneショートカット】絵文字の各種コードを取得するレシピ【Unicode,UTF-8,etc...】

f:id:thetheorier:20210715101551p:plain

 多少強引なところはあります.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のiOSバージョン : iOS14.6

 

 

スポンサーリンク

 

 

 

ダウンロード

www.icloud.com

 今回は直リンクです.

 

 

結果を得るためのアイデア

 今回はキーボードで予め入力した絵文字に対する名前やUnicode、UTFなどのコードを取得することが目的です.

 

apps.timwhitlock.info

 コードの取得について, 今回はTim Whitlockというサイトを利用しています.

 

https://apps.timwhitlock.info/unicode/inspect?s=😊

 

のように, 指定のURLの末尾に絵文字そのものを入れて検索することが可能なためショートカットと相性がよいです.

 

 

f:id:thetheorier:20210715102256p:plain

 ただし絵文字によってはコードが一種類, つまり一つの絵文字で構成されている場合と…

 

 

f:id:thetheorier:20210715102354p:plain

 コードが2つ, つまり2つの絵文字からなる場合(Surrogate、サロゲート), またそれとはまた別にコードが2つでありながらサロゲートでないケース, 少なくともこの3通りあるようです.

 

 「Webの内容を取得」で対象ページの本文を取得し, 該当箇所を取り出せばOKなわけですが, 上記の違いによって同じコードの行数が異なり, その対応が面倒です.

 

 今回はサロゲートの有無をメインにコードの数で場合分けすることにします.

 

 

フロー

f:id:thetheorier:20210715103430p:plain

 今回は予め「テキスト」アクションに希望の絵文字を書き込んでおきます.

 これを「テキストを分割」で一文字ごとに分割し, 「各項目を繰り返す」で一文字ずつ処理します.

 この「各項目を繰り返す」は以降すべてのアクションを内包します.

 各絵文字である「繰返し項目」に対し, 

 

https://apps.timwhitlock.info/unicode/inspect?s=「繰り返し項目」

 

の内容を取得します.

 

 

f:id:thetheorier:20210715103838p:plain

 コードの種類がいくつかどうかはHex Dec Oct…とある行の上にあり, また実際のコードは「Webの内容を取得」で得られたテキストにおいて「Block」の行の次から始まります.

 よってこれらの情報を取り出すために「テキストを分割」を複数使います.

 「 unique」で分割したことで最初の項の末尾がコードの種類の数が, さらに「Block」で分割したことで3つ目の項がコードを含みます.

 

 

f:id:thetheorier:20210715104816p:plain

 というわけで分割したテキストを更に改行で分割し, 末項を取り出します.

 正しければこれがコード数であるはずです.

 

 

f:id:thetheorier:20210715104933p:plain

 同じく分割したテキストの3項目を取り出し, 改行で分割しておきます.

 でないと改行を含むとはいえショートカット上では一つの塊であるため, そのままでは指定行の取り出しができません.

 

 

 これでコード数, つまり繰り返し回数とコード本体を含むテキストが得られました.

 

 

f:id:thetheorier:20210715105848p:plain

 これを用いて順番にテキストを取り出せばいいんですがそうシンプルではありません.

 画像の通り, テキスト分割で生まれた空行と, Unicode手前の2項目が手前に存在するため, 必要なテキストは(固定とはいえ)4行目から始まります.

 

 

f:id:thetheorier:20210715111121p:plain

 というわけで, サロゲートの判断のためにはじめに分割したテキストの2項目目を取り出しておき, また上の目的から好きな変数としてtmpに4を代入しておきます.

 

 

f:id:thetheorier:20210715111309p:plain

 if文を追加し, 先程取ってきた分割テキストの2項目目に"Surroagates"の文字が含まれているかどうかで場合分けします.

 まずが含んでいてる場合から.

 コード数で同じ処理を繰り返します.

 Surrogatesを含んでいる場合, 取り出すべき情報は

 

Code,UTF-8,UTF-16 LE,Surrogates,Name 

 

の5種なのでtmp行からtmp+4行必要になります.

 

 

f:id:thetheorier:20210715111821p:plain

 各5行を取り出し, 好きな変数で置きます.

 ただし絵文字が複数ある場合を想定し, 「変数を設定」でなく「変数に追加」を使用します.

 繰り返しの最後に変数tmpが2つ目のコードの先頭になるよう(今回は)9を足して上書きします.

 

 これでサロゲートありの場合でのデータ取得は終わりました.

 

 

f:id:thetheorier:20210715112050p:plain

 続いてサロゲートがない場合です.

 これはサロゲートありの場合とほとんど同じで, 異なるのは取得する行数と, 2種類目の先頭行の指定, そしてSurrogatesの変数が不要な点です.

 まず今回の行数は前回に比べ1つ減っているのでtmp+4からtmp+3と変わります.

 

 

f:id:thetheorier:20210715112514p:plain

 2項目目への頭出しも, 1項目減っているためtmp+9でなくtmp+8になります.

 

 この2点とsurrogatesを扱わないこと以外はサロゲートありとまったく同じなので全体は省略します.

 

 

f:id:thetheorier:20210715112717p:plain

 必要な情報は概ね揃ったので表示処理を行います.

 せっかく「絵文字の名前を取得」で日本名がわかるので, これも入れておきましょう.

 またこれらのアクションが含まれている「各項目を繰り返す」の「繰り返し項目」は各々の絵文字そのものですから, 見た目のためにこれも入れておきます.

 あとはサロゲートの有無があるためこの場合分けで表示スタイルを分けることとなります.

 見た目を気にしないなら一緒にしてしまっても構いません.

 

 

 

blog.thetheorier.com

 「各項目を繰り返す」の最後に, 各変数をクリアしておきます.

 今回, コードが複数存在することを想定して「変数に追加」を使用しているため, このままだと前回の内容を含んだまま情報が追加されてしまうからです.

 共有などを使用しないスタンドアロン型レシピ限定で使えるテクニックです.

 

 

f:id:thetheorier:20210715113038p:plain

 やり方は簡単で, 「変数を設定」で対象の変数に「ショートカットの入力」を代入するだけです.

 共有などを行わないレシピでは「ショートカットの入力」は常に空データであることを利用しています.

 

 

実行

f:id:thetheorier:20210715113808p:plain

 timwhitlock.infoの仕様でコードによって半角スペースが間に入っていたりするので, 不要の場合は予め取り除く必要があります.

 

 

f:id:thetheorier:20210715114401p:plain

 またちょっとしたことですが, 「変数に追加」で複数追加されると末項に空行が付いてくるようで, 画像の通り1種類のときと違って空行が一つずつ入っているのがわかります.

 これも気になる人は表示する前に整える必要があります.

 

 

 依頼を受けて作った試作を改善させたのが今作です.

 必要な種類が揃っているサイト自体を見つけるのに苦労した…というのもありますね, 大抵はUnicodeならUnicodeだけ、UTFならUTFだけ、UTF-8があってもUTF-16がない…という状況でした.

 JSONもいくつかありますがそれも上と同じで採用できませんでした、あればもっと簡単に作れるんですけどね…

 

 ちなみに, 絵文字と銘打っていますがUnicode云々の話ですからアルファベットやひらがな、漢字ももちろん対応しています.

 ただし英名が存在しない場合があります.