qiitaのストック記事が500件だった

こういうのをスクレイピングと呼ぶのかわからないが楽しい

grep -Pだとパール正規表現使えるぽい。u-link-no-underlineの指定を汎用的にかきたいね。ハイフン以外の文字列とハイフンで指定するのかな??

コード表示

curl -s https://qiita.com/ukijumotahaneniarukenia/like?page={1..25} | grep -o "\<a class=\"u-link-no-underline\" .*" | grep -o "href.*" | grep -oP ".*(?=</a)" | sed -e 's/href="//' -e 's/\">/\t/' | awk '{print "https://qiita.com"$1"\t"}{$1="";print $0" ""UNKO"}' | sed ':a;N;/UNKO/!ba;s/\n\{1,\}/ /g;s/UNKO//g;' | nl

generate-script.awkなるものを読んで思った所感

参考文献

 

参考にしたコマンド

上田さんのシェルこうそく開発手法にopenコマンド出て来て、それはmacだったので、linuxだとxdg-openにあたるぽい。徐にソースコードを落として適当に漁った。面白くて楽しい本!第2版も買いたいんだよなー。

フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門  
コード表示

[oracle@centos scripts]$ xdg-open --version
xdg-open 1.1.0 rc1
[oracle@centos scripts]$ yum provides xdg-open | grep -B 4 "$(which xdg-open)"
xdg-utils-1.1.0-0.17.20120809git.el7.noarch : Basic desktop integration
                                            : functions
リポジトリー        : base
一致          :
ファイル名    : /usr/bin/xdg-open
--
xdg-utils-1.1.0-0.17.20120809git.el7.noarch : Basic desktop integration
                                            : functions
リポジトリー        : @anaconda
一致          :
ファイル名    : /usr/bin/xdg-open

ソースコードダウンロード

こういうのは規格とか調べないと汎用的なものは作れなそう

コード表示

[oracle@centos src]$ cat install.sh
#!/bin/bash

sudo yumdownloader --source xdg-utils-1.1.0-0.17.20120809git.el7.noarch

rpmdev-extract xdg-utils-1.1.0-0.17.20120809git.el7.src.rpm

cd xdg-utils-1.1.0-0.17.20120809git.el7.src

tar -xvf xdg-utils-1.1.0-20120809git.tar.gz

適当にファイル用意した

外部ファイルをgetlineでパス指定して読み込むんかーと。マークをsedで削除しちゃっているけど。ちなみにANKOはあんこじゃない。あんこの絵文字ない。

コード表示

[oracle@centos awk]$ ll ANKO UNKO gen.awk exclude.sed in out
-rwxr-xr-x. 1 oracle docker  72  7月 14 10:20 ANKO
-rwxr-xr-x. 1 oracle docker  72  7月 14 10:20 UNKO
-rw-r--r--. 1 oracle docker  16  7月 14 10:30 exclude.sed
-rwxr-xr-x. 1 oracle docker 172  7月 14 10:19 gen.awk
-rwxr-xr-x. 1 oracle docker  60  7月 14 10:24 in
-rw-r--r--. 1 oracle docker 194  7月 14 10:33 out
[oracle@centos awk]$ cat ANKO
for i in $(yes "$(echo -ne '\U1F194')" | head -n 5);do echo -ne $i;done
[oracle@centos awk]$ cat UNKO
for i in $(yes "$(echo -ne '\U1F4A9')" | head -n 5);do echo -ne $i;done
[oracle@centos awk]$ cat exclude.sed
/UNKO/d
/ANKO/d
[oracle@centos awk]$ cat gen.awk
#!/usr/local/bin/awk

{
  print
}

/UNKO/{
  while (getline < "./UNKO")
    print
  close ("./UNKO")
}

/ANKO/{
  while (getline < "./ANKO")
    print
  close ("./ANKO")
}
[oracle@centos awk]$ cat in
#!/bin/bash

unko(){
UNKO
}

anko(){
ANKO
}

unko
anko
echo
[oracle@centos awk]$ cat out
#!/bin/bash

unko(){
for i in $(yes "$(echo -ne '\U1F4A9')" | head -n 5);do echo -ne $i;done
}

anko(){
for i in $(yes "$(echo -ne '\U1F194')" | head -n 5);do echo -ne $i;done
}

unko
anko
echo

実行

いろいろごったに。三位一体感ある。teeでoutファイルを生成しつつ、結果を標準出力にだす。これはdebugしやすそう。


[oracle@centos awk]$ awk -f gen.awk in | sed -f exclude.sed | tee out | bash
💩💩💩💩💩🆔🆔🆔🆔🆔
[oracle@centos awk]$ ./out
bash: ./out: 許可がありません
[oracle@centos awk]$ chmod +x ./out
[oracle@centos awk]$ ./out
💩💩💩💩💩🆔🆔🆔🆔🆔

所感

切り出すと、どこに何かいたか把握するのたいへんなんだよな。ただ、それも楽しい。

bashの配列であそんだ

参考文献

配列の初期化

コード表示

[oracle@centos ~]$ echo {a..c} | sed -e 's/ /\n/g'
a
b
c
[oracle@centos ~]$ while read line;do echo ${line}; done < <(echo {a..c} | sed -e 's/ /\n/g')
a
b
c
[oracle@centos ~]$ ary=();while read line;do ary+=(${line}); done < <(echo {a..c} | sed -e 's/ /\n/g')
[oracle@centos ~]$ echo ${ary[@]}
a b c
[oracle@centos ~]$ echo ${#ary[@]}
3
[oracle@centos ~]$ ary=($(echo {a..c} | sed -e 's/ /\n/g'))
[oracle@centos ~]$ echo ${#ary[@]}
1
[oracle@centos ~]$ echo ${ary[@]}
a
b
c
[oracle@centos ~]$ ary=($(echo {a..c}))
[oracle@centos ~]$ echo ${#ary[@]}
1
[oracle@centos ~]$ echo ${ary[@]}
a b c

配列のコピー

こんなかんじ

コード表示

[oracle@centos ~]$ ary=();while read line;do ary+=(${line}); done < <(echo {a..c} | sed -e 's/ /\n/g')
[oracle@centos ~]$ echo ${ary[@]}
a b c
[oracle@centos ~]$ echo ${#ary[@]}
3
[oracle@centos ~]$ aryy=(${ary[@]})
[oracle@centos ~]$ echo ${aryy[@]}
a b c
[oracle@centos ~]$ echo ${#aryy[@]}
3

配列参照するときインデックス気にしなくてイイ

コード表示

[oracle@centos ~]$ ary=($(echo {a..c}))
[oracle@centos ~]$ for i in ${ary[@]};do echo $i; done
a b c
[oracle@centos ~]$ ary=();while read line;do ary+=(${line}); done < <(echo {a..c} | sed -e 's/ /\n/g')
[oracle@centos ~]$ for i in ${ary[@]};do echo $i; done
a
b
c

配列の添字てんかいできるんだね、インデックス気にしたいならこっちか

コード表示

[oracle@centos ~]$ ary=($(echo {a..c}))
[oracle@centos ~]$ echo ${!ary[@]}
0
[oracle@centos ~]$ ary=();while read line;do ary+=(${line}); done < <(echo {a..c} | sed -e 's/ /\n/g')
[oracle@centos ~]$ echo ${!ary[@]}
0 1 2
[oracle@centos ~]$ for i in ${!ary[@]};do echo $i'-->'${ary[$i]};done
0-->a
1-->b
2-->c
[oracle@centos ~]$ for ((i=0;i<${#ary[@]};i++));do echo $i'-->'${ary[$i]};done
0-->a
1-->b
2-->c

配列の要素追加とか要素削除とか

一括削除、一括生成。コピーとか。

コード表示

[oracle@centos ~]$ ary=();while read line;do ary+=(${line}); done < <(echo {a..c} | sed -e 's/ /\n/g')
[oracle@centos ~]$ for ((i=0;i<${#ary[@]};i++));do echo $i'-->'${ary[$i]};done
0-->a
1-->b
2-->c
[oracle@centos ~]$ while read line;do ary+=(${line}); done < <(echo {a..c} | sed -e 's/ /\n/g')
[oracle@centos ~]$ for ((i=0;i<${#ary[@]};i++));do echo $i'-->'${ary[$i]};done
0-->a
1-->b
2-->c
3-->a
4-->b
5-->c
[oracle@centos ~]$ for ((i=0;i<${#ary[@]};i++));do echo $i'-->'${ary[$i]};done
0-->a
1-->b
2-->c
3-->a
4-->b
5-->c
[oracle@centos ~]$ unset ary[@]
[oracle@centos ~]$ for ((i=0;i<${#ary[@]};i++));do echo $i'-->'${ary[$i]};done
[oracle@centos ~]$ ary=();while read line;do ary+=(${line}); done < <(echo {a..c} | sed -e 's/ /\n/g')
[oracle@centos ~]$ for i in ${!ary[@]};do echo $i'-->'${ary[$i]}; done
0-->a
1-->b
2-->c
[oracle@centos ~]$ unset ary[1]
[oracle@centos ~]$ for i in ${!ary[@]};do echo $i'-->'${ary[$i]}; done
0-->a
2-->c
[oracle@centos ~]$ ary=();while read line;do ary+=(${line}); done < <(echo {a..c} | sed -e 's/ /\n/g')
[oracle@centos ~]$ for i in ${!ary[@]};do echo $i'-->'${ary[$i]}; done
0-->a
1-->b
2-->c
[oracle@centos ~]$ unset ary[0]
[oracle@centos ~]$ for i in ${!ary[@]};do echo $i'-->'${ary[$i]}; done
1-->b
2-->c
[oracle@centos ~]$ ary=();while read line;do ary+=(${line}); done < <(echo {a..c} | sed -e 's/ /\n/g')
[oracle@centos ~]$ for i in ${!ary[@]};do echo $i'-->'${ary[$i]}; done
0-->a
1-->b
2-->c
[oracle@centos ~]$ unset ary[2]
[oracle@centos ~]$ for i in ${!ary[@]};do echo $i'-->'${ary[$i]}; done
0-->a
1-->b
[oracle@centos ~]$ ary=();while read line;do ary+=(${line}); done < <(echo {a..c} | sed -e 's/ /\n/g')
[oracle@centos ~]$ for i in ${!ary[@]};do echo $i'-->'${ary[$i]}; done
0-->a
1-->b
2-->c
[oracle@centos ~]$ unset ary[1]
[oracle@centos ~]$ for i in ${!ary[@]};do echo $i'-->'${ary[$i]}; done
0-->a
2-->c
[oracle@centos ~]$ tmp=(${ary[@]});while read line;do ary=();ary+=(${line}); done < <(echo ${tmp[@]})
[oracle@centos ~]$ for i in ${!ary[@]};do echo $i'-->'${ary[$i]}; done
0-->a
1-->c

配列のスライス的な奴

コード表示

[oracle@centos ~]$ ary=();while read line;do ary+=(${line}); done < <(echo {a..z} | sed -e 's/ /\n/g')
[oracle@centos ~]$ for i in ${!ary[@]};do echo $i'-->'${ary[@]:0:$i}; done
[oracle@centos ~]$ for i in ${!ary[@]};do echo $i+1'-->'${ary[@]:0:$i+1}; done

[oracle@centos ~]$ for i in ${!ary[@]};do echo $(($i+1))'-->'${ary[@]:0:$i+1}; done

[oracle@centos ~]$ for i in ${!ary[@]};do echo $i+1'-->'${ary[@]:-($i+1)}; done

[oracle@centos ~]$ for i in ${!ary[@]};do echo $i+1'-->'${ary[@]: -($i+1)}; done

[oracle@centos ~]$ for i in ${!ary[@]};do echo $(($i+1))'-->'${ary[@]: -($i+1)}; done

[oracle@centos ~]$ for i in ${!ary[@]};do echo $(printf '%02d' $(echo $(($i+1))))'-->'${ary[@]: -($i+1)}; done

[oracle@centos ~]$ for i in ${!ary[@]};do echo $(printf '%02d' $(echo $(($i+1))))'-->'${ary[@]: -($i+1)}; done

[oracle@centos ~]$ for i in ${!ary[@]};do echo $(printf '%02d' $(echo $(($i+1))))'-->'${ary[@]:0:$i+1}; done

[oracle@centos ~]$ for i in ${!ary[@]};do echo $(printf '%02d' $(echo $(($i+1))))'-->'${ary[@]:$i:$i+1}; done

[oracle@centos ~]$ for i in ${!ary[@]};do echo $(printf '%02d' $(echo $(($i+1))))'-->'${ary[@]:$i:1}; done

[oracle@centos ~]$ for i in ${!ary[@]};do echo $(printf '%02d' $(echo $(($i+1))))'-->'${ary[@]:-$i:1}; done

asciiコード定義ファイルからasciiコード定義確認スクリプトを作ってみた話

まえがき

本当は自己収束型のシェルスクリプトを目指していたんだけど、脱線しすぎた。自己収束型っていうのは頭の中のイメージ。まだうまく言葉で表現できていないや。

参考文献

ASCII / ISO 8859-1 (Latin-1) Table with HTML Entity Names  

______$(echo -e ‘\U1F4A9’)______.sh

コード表示

#!/bin/bash

_insert_shebang(){
  FILE_NM=$1
  sed -i '1i#!/bin/bash\n' ${FILE_NM}
}

_grt_exec_priv(){
  FILE_NM=$1
  #echo -n "password:"
  read -s password echo ${password} | sudo -S chmod +x ${FILE_NM}
}

_exec(){
  FILE_NM=$1
  source ${FILE_NM}
}

_trap_rm_tmpdir(){
  local TMP_DIR=$1
  trap "rm -rf ${TMP_DIR}" EXIT
}

_clean(){
  local FNM=$1
  rm -f "${FNM}"
}

_def_ascii_code(){
  local FNM=$1
cat <<EOF >${FNM}
32&47
58&64
91&96
123&126
EOF
}

_def_ascii_cnst(){
  local FNM=$1
cat <<EOF >${FNM}
LNF='x0a'
SPA='x20'
ECM='x21'
DQT='x22'
NSG='x23'
DLR='x24'
PCT='x25'
AMP='x26'
SQT='x27'
LPS='x28'
RPS='x29'
AST='x2a'
PLS='x2b'
CNM='x2c'
PYN='x2d'
DOT='x2e'
SLS='x2f'
CLN='x3a'
SCN='x3b'
LTS='x3c'
EQL='x3d'
GTS='x3e'
QES='x3f'
ATM='x40'
LSB='x5b'
BSL='x5c'
RSB='x5d'
CLT='x5e'
USC='x5f'
BQT='x60'
LCB='x7b'
VTB='x7c'
RCB='x7d'
TLD='x7e'
EOF
}

_pre_prc(){
  local IPUT=$1
  sed -e '/^#!/d' -e '/^$/d' <<<${IPUT}
}

_mk_func_frame(){
  local FNM=$1
cat <<EOF >${FNM}
#!/bin/bash

source ./${SRC_FNM}

_f(){
  echo "" | awk '{
    @
  }'
}

_f
EOF
}

_mk_call_ascii_cnst(){
  local SRC_FNM=$1
  local TGT_FNM=$2
  local IPUT=$(while read LN;do
    local LFT=${LN%=*}
    _pre_prc ${LFT}
  done < <(cat ${SRC_FNM}))
  local TMP_DIR=$(mktemp -d)
  _trap_rm_tmpdir ${TMP_DIR}
  echo "${IPUT}" >${TMP_DIR}/tmp
  local BUILD_CMD=$(while read LN;do
    RN=$(echo ${LN} | sed -e 's/ .*//');
    ASCII_NM=$(echo ${LN} | sed -e 's/.* //');
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
      ASCII_NM="'${ASCII_NM}'"
      DLR="\'${DLR}'"
      SPA="\'${SPA}'"
      LCB="\'${LCB}'"
      RCB="\'${RCB}'"
      BSL="\'${BSL}'"
      EQL="\'${EQL}'"
      DQT="\'${DQT}'"
      SQT="\'${SQT}'"
      LNF="\'${LNF}'"
    }
    {
      print ASCII_NM""EQL""DQT""BSL""BSL""BSL""SQT""DLR""LCB""ASCII_NM""RCB""SQT""DQT""LNF"""print"SPA""ASCII_NM""
    }
    '
  done < <(cat ${TMP_DIR}/tmp | nl))
  BUILD_CMD=$(echo "${BUILD_CMD}" | sed ':a;N;$!ba;s/\n/@/g')
  sed -i -e 's:@:'"$BUILD_CMD"':g' ${TGT_FNM}
  cat ${TGT_FNM} | tr '@' '\n' >${TMP_DIR}/tmpp
  cp ${TMP_DIR}/tmpp ${TGT_FNM}
}

_main(){
  SRC_FNM=$1
  TGT_FNM=$2
  source ./${SRC_FNM}
  _clean ${SRC_FNM}
  _def_ascii_cnst ${SRC_FNM}
  _insert_shebang ${SRC_FNM}
  _grt_exec_priv ${SRC_FNM}
  _clean ${TGT_FNM}
  _mk_func_frame ${TGT_FNM}
  _mk_call_ascii_cnst ${SRC_FNM} ${TGT_FNM}
  _grt_exec_priv ${TGT_FNM}
  _exec ${TGT_FNM}
}

_main def_ascii_cnst.sh call_ascii_cnst.sh

実行例


[oracle@centos rr]$ ll
合計 48
-rw-r--r--. 1 oracle docker   95  6月 10 00:42 README.md
-rw-r--r--. 1 oracle docker  965  6月 14 19:49 call_ascii_cnst.sh
drwxr-xr-x. 3 oracle docker 4096  6月  9 18:28 cnst
-rw-r--r--. 1 oracle docker  353  6月 14 20:00 def_ascii_cnst.sh
drwxr-xr-x. 4 oracle docker 4096  6月  9 18:28 func
drwxr-xr-x. 2 oracle docker 4096  6月  9 18:28 iput
drwxr-xr-x. 5 oracle docker 4096  6月 10 21:26 main
-rwxr-xr-x. 1 oracle docker 1160  6月 13 07:33 t.sh
drwxr-xr-x. 5 oracle docker 4096  6月 14 14:24 test
-rwxr-xr-x. 1 oracle docker 4228  6月 14 19:50 tt.sh
drwxr-xr-x. 2 oracle docker 4096  6月 13 07:23 util
[oracle@centos rr]$ vi ______$(echo -e '\U1F4A9')______.sh
[oracle@centos rr]$ ll
合計 52
-rw-r--r--. 1 oracle docker   95  6月 10 00:42 README.md
-rw-r--r--. 1 oracle docker 2435  6月 14 20:02 ______?______.sh
-rw-r--r--. 1 oracle docker  965  6月 14 19:49 call_ascii_cnst.sh
drwxr-xr-x. 3 oracle docker 4096  6月  9 18:28 cnst
-rw-r--r--. 1 oracle docker  353  6月 14 20:00 def_ascii_cnst.sh
drwxr-xr-x. 4 oracle docker 4096  6月  9 18:28 func
drwxr-xr-x. 2 oracle docker 4096  6月  9 18:28 iput
drwxr-xr-x. 5 oracle docker 4096  6月 10 21:26 main
-rwxr-xr-x. 1 oracle docker 1160  6月 13 07:33 t.sh
drwxr-xr-x. 5 oracle docker 4096  6月 14 14:24 test
-rwxr-xr-x. 1 oracle docker 4228  6月 14 19:50 tt.sh
drwxr-xr-x. 2 oracle docker 4096  6月 13 07:23 util
[oracle@centos rr]$ ./______$(echo -e '\U1F4A9')______.sh
bash: ./______💩______.sh: 許可がありません
[oracle@centos rr]$ chmod +x ______$(echo -e '\U1F4A9')______.sh
[oracle@centos rr]$ ll
合計 52
-rw-r--r--. 1 oracle docker   95  6月 10 00:42 README.md
-rwxr-xr-x. 1 oracle docker 2435  6月 14 20:02 ______?______.sh
-rw-r--r--. 1 oracle docker  965  6月 14 19:49 call_ascii_cnst.sh
drwxr-xr-x. 3 oracle docker 4096  6月  9 18:28 cnst
-rw-r--r--. 1 oracle docker  353  6月 14 20:03 def_ascii_cnst.sh
drwxr-xr-x. 4 oracle docker 4096  6月  9 18:28 func
drwxr-xr-x. 2 oracle docker 4096  6月  9 18:28 iput
drwxr-xr-x. 5 oracle docker 4096  6月 10 21:26 main
-rwxr-xr-x. 1 oracle docker 1160  6月 13 07:33 t.sh
drwxr-xr-x. 5 oracle docker 4096  6月 14 14:24 test
-rwxr-xr-x. 1 oracle docker 4228  6月 14 19:50 tt.sh
drwxr-xr-x. 2 oracle docker 4096  6月 13 07:23 util
[oracle@centos rr]$ ./______$(echo -e '\U1F4A9')______.sh | nl
[sudo] oracle のパスワード:
[sudo] oracle のパスワード:
       
       
     1	 
     2	!
     3	"
     4	#
     5	$
     6	%
     7	&
     8	'
     9	(
    10	)
    11	*
    12	+
    13	,
    14	-
    15	.
    16	/
    17	:
    18	;
    19	<
    20	=
    21	>
    22	?
    23	@
    24	[
    25	\
    26	]
    27	^
    28	_
    29	`
    30	{
    31	|
    32	}
    33	~
[oracle@centos rr]$ 

あとがき

ファイル名にうんこが描けたのが収穫。awkはエスケープ専門で使ったらよさそうかな。使い易い。さて、ランニングするぞー!fin。

Unicodeで管理している文字集合をエンコーディング方式UTF-8で色々出力してみた話

まえがき

unicode12.0が2019年6月12日にでて、ニュースで知ったので、ちょっとだけ触れて見ることにした。文字すき。unicodeって名前かっこいい。コードポイント覚えよう。。楽しい。b^^

 

参考文献

emojiに分類名つけるのに役に立つよ

Unicode® Character Name Index  

emojiもコード化

Unicode絵文字(Emoji)  

公式ページ

The Unicode Consortium  

忘れたから調べた

ビット(bit)とバイト(Byte) 情報量の単位と2進数  

Wikiは安定

Unicode一覧 0000-0FFF  

emoji特化

Complete List of Emoji  

ここのフォントをダウンロードしてきました

Google Noto Fonts  

いんすこ時に参照

シェル上で🍣🍣(Unicode絵文字)を表示させる  

ターミナルに表示する際に参照

bashでUnicodeのコードポイントを扱う  

ここをみればビット演算周り思い出せそう

Bash $((算術式)) のすべて - A 基本編  

ダンプコマンド

od コマンド  

endianオプションなくない??

エンディアンの変更  

絵文字いんすこ

コード表示

[oracle@centos gg]$ mkdir ~/.fonts && cd ~/.fonts
[oracle@centos .fonts]$ curl -LO https://noto-website-2.storage.googleapis.com/pkgs/Noto-unhinted.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1062M  100 1062M    0     0  39.8M      0  0:00:26  0:00:26 --:--:-- 44.1M
[oracle@centos .fonts]$ ll
合計 1088444
-rw-r--r--. 1 oracle docker 1114561068  6月 14 09:11 Noto-unhinted.zip
[oracle@centos .fonts]$ unzip Noto-unhinted.zip && rm Noto-unhinted.zip
Archive:  Noto-unhinted.zip
  inflating: LICENSE_OFL.txt         
  inflating: NotoColorEmoji.ttf      
  inflating: NotoEmoji-Regular.ttf   
  inflating: NotoKufiArabic-Bold.ttf  
  inflating: NotoKufiArabic-Regular.ttf  
  inflating: NotoMono-Regular.ttf    
  inflating: NotoNaskhArabic-Bold.ttf  
  inflating: NotoNaskhArabic-Regular.ttf  
  inflating: NotoNaskhArabicUI-Bold.ttf  
  inflating: NotoNaskhArabicUI-Regular.ttf  
  inflating: NotoNastaliqUrdu-Regular.ttf  
  inflating: NotoSans-Black.ttf      
  inflating: NotoSans-BlackItalic.ttf  
  inflating: NotoSans-Bold.ttf       
  inflating: NotoSans-BoldItalic.ttf  
  inflating: NotoSans-Condensed.ttf  
  inflating: NotoSans-CondensedBlack.ttf  
  inflating: NotoSans-CondensedBlackItalic.ttf  
  inflating: NotoSans-CondensedBold.ttf  
  inflating: NotoSans-CondensedBoldItalic.ttf  
  inflating: NotoSans-CondensedExtraBold.ttf  
  inflating: NotoSans-CondensedExtraBoldItalic.ttf  
  inflating: NotoSans-CondensedExtraLight.ttf  
  inflating: NotoSans-CondensedExtraLightItalic.ttf  
  inflating: NotoSans-CondensedItalic.ttf  
  inflating: NotoSans-CondensedLight.ttf  
  inflating: NotoSans-CondensedLightItalic.ttf  
  inflating: NotoSans-CondensedMedium.ttf  
  inflating: NotoSans-CondensedMediumItalic.ttf  
  inflating: NotoSans-CondensedSemiBold.ttf  
  inflating: NotoSans-CondensedSemiBoldItalic.ttf  
  inflating: NotoSans-CondensedThin.ttf  
  inflating: NotoSans-CondensedThinItalic.ttf  
  inflating: NotoSans-ExtraBold.ttf  
  inflating: NotoSans-ExtraBoldItalic.ttf  
  inflating: NotoSans-ExtraCondensed.ttf  
  inflating: NotoSans-ExtraCondensedBlack.ttf  
  inflating: NotoSans-ExtraCondensedBlackItalic.ttf  
  inflating: NotoSans-ExtraCondensedBold.ttf  
  inflating: NotoSans-ExtraCondensedBoldItalic.ttf  
  inflating: NotoSans-ExtraCondensedExtraBold.ttf  
  inflating: NotoSans-ExtraCondensedExtraBoldItalic.ttf  
  inflating: NotoSans-ExtraCondensedExtraLight.ttf  
  inflating: NotoSans-ExtraCondensedExtraLightItalic.ttf  
  inflating: NotoSans-ExtraCondensedItalic.ttf  
  inflating: NotoSans-ExtraCondensedLight.ttf  
  inflating: NotoSans-ExtraCondensedLightItalic.ttf  
  inflating: NotoSans-ExtraCondensedMedium.ttf  
  inflating: NotoSans-ExtraCondensedMediumItalic.ttf  
  inflating: NotoSans-ExtraCondensedSemiBold.ttf  
  inflating: NotoSans-ExtraCondensedSemiBoldItalic.ttf  
  inflating: NotoSans-ExtraCondensedThin.ttf  
  inflating: NotoSans-ExtraCondensedThinItalic.ttf  
  inflating: NotoSans-ExtraLight.ttf  
  inflating: NotoSans-ExtraLightItalic.ttf  
  inflating: NotoSans-Italic.ttf     
  inflating: NotoSans-Light.ttf      
  inflating: NotoSans-LightItalic.ttf  
  inflating: NotoSans-Medium.ttf     
  inflating: NotoSans-MediumItalic.ttf  
  inflating: NotoSans-Regular.ttf    
  inflating: NotoSans-SemiBold.ttf   
  inflating: NotoSans-SemiBoldItalic.ttf  
  inflating: NotoSans-SemiCondensed.ttf  
  inflating: NotoSans-SemiCondensedBlack.ttf  
  inflating: NotoSans-SemiCondensedBlackItalic.ttf  
  inflating: NotoSans-SemiCondensedBold.ttf  
  inflating: NotoSans-SemiCondensedBoldItalic.ttf  
  inflating: NotoSans-SemiCondensedExtraBold.ttf  
  inflating: NotoSans-SemiCondensedExtraBoldItalic.ttf  
  inflating: NotoSans-SemiCondensedExtraLight.ttf  
  inflating: NotoSans-SemiCondensedExtraLightItalic.ttf  
  inflating: NotoSans-SemiCondensedItalic.ttf  
  inflating: NotoSans-SemiCondensedLight.ttf  
  inflating: NotoSans-SemiCondensedLightItalic.ttf  
  inflating: NotoSans-SemiCondensedMedium.ttf  
  inflating: NotoSans-SemiCondensedMediumItalic.ttf  
  inflating: NotoSans-SemiCondensedSemiBold.ttf  
  inflating: NotoSans-SemiCondensedSemiBoldItalic.ttf  
  inflating: NotoSans-SemiCondensedThin.ttf  
  inflating: NotoSans-SemiCondensedThinItalic.ttf  
  inflating: NotoSans-Thin.ttf       
  inflating: NotoSans-ThinItalic.ttf  
  inflating: NotoSansAdlam-Regular.ttf  
  inflating: NotoSansAdlamUnjoined-Regular.ttf  
  inflating: NotoSansAnatolianHieroglyphs-Regular.ttf  
  inflating: NotoSansArabic-Black.ttf  
  inflating: NotoSansArabic-Bold.ttf  
  inflating: NotoSansArabic-Condensed.ttf  
  inflating: NotoSansArabic-CondensedBlack.ttf  
  inflating: NotoSansArabic-CondensedBold.ttf  
  inflating: NotoSansArabic-CondensedExtraBold.ttf  
  inflating: NotoSansArabic-CondensedExtraLight.ttf  
  inflating: NotoSansArabic-CondensedLight.ttf  
  inflating: NotoSansArabic-CondensedMedium.ttf  
  inflating: NotoSansArabic-CondensedSemiBold.ttf  
  inflating: NotoSansArabic-CondensedThin.ttf  
  inflating: NotoSansArabic-ExtraBold.ttf  
  inflating: NotoSansArabic-ExtraCondensed.ttf  
  inflating: NotoSansArabic-ExtraCondensedBlack.ttf  
  inflating: NotoSansArabic-ExtraCondensedBold.ttf  
  inflating: NotoSansArabic-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansArabic-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansArabic-ExtraCondensedLight.ttf  
  inflating: NotoSansArabic-ExtraCondensedMedium.ttf  
  inflating: NotoSansArabic-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansArabic-ExtraCondensedThin.ttf  
  inflating: NotoSansArabic-ExtraLight.ttf  
  inflating: NotoSansArabic-Light.ttf  
  inflating: NotoSansArabic-Medium.ttf  
  inflating: NotoSansArabic-Regular.ttf  
  inflating: NotoSansArabic-SemiBold.ttf  
  inflating: NotoSansArabic-SemiCondensed.ttf  
  inflating: NotoSansArabic-SemiCondensedBlack.ttf  
  inflating: NotoSansArabic-SemiCondensedBold.ttf  
  inflating: NotoSansArabic-SemiCondensedExtraBold.ttf  
  inflating: NotoSansArabic-SemiCondensedExtraLight.ttf  
  inflating: NotoSansArabic-SemiCondensedLight.ttf  
  inflating: NotoSansArabic-SemiCondensedMedium.ttf  
  inflating: NotoSansArabic-SemiCondensedSemiBold.ttf  
  inflating: NotoSansArabic-SemiCondensedThin.ttf  
  inflating: NotoSansArabic-Thin.ttf  
  inflating: NotoSansArabicUI-Black.ttf  
  inflating: NotoSansArabicUI-Bold.ttf  
  inflating: NotoSansArabicUI-Condensed.ttf  
  inflating: NotoSansArabicUI-CondensedBlack.ttf  
  inflating: NotoSansArabicUI-CondensedBold.ttf  
  inflating: NotoSansArabicUI-CondensedExtraBold.ttf  
  inflating: NotoSansArabicUI-CondensedExtraLight.ttf  
  inflating: NotoSansArabicUI-CondensedLight.ttf  
  inflating: NotoSansArabicUI-CondensedMedium.ttf  
  inflating: NotoSansArabicUI-CondensedSemiBold.ttf  
  inflating: NotoSansArabicUI-CondensedThin.ttf  
  inflating: NotoSansArabicUI-ExtraBold.ttf  
  inflating: NotoSansArabicUI-ExtraCondensed.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedBold.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedLight.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedThin.ttf  
  inflating: NotoSansArabicUI-ExtraLight.ttf  
  inflating: NotoSansArabicUI-Light.ttf  
  inflating: NotoSansArabicUI-Medium.ttf  
  inflating: NotoSansArabicUI-Regular.ttf  
  inflating: NotoSansArabicUI-SemiBold.ttf  
  inflating: NotoSansArabicUI-SemiCondensed.ttf  
  inflating: NotoSansArabicUI-SemiCondensedBlack.ttf  
  inflating: NotoSansArabicUI-SemiCondensedBold.ttf  
  inflating: NotoSansArabicUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansArabicUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansArabicUI-SemiCondensedLight.ttf  
  inflating: NotoSansArabicUI-SemiCondensedMedium.ttf  
  inflating: NotoSansArabicUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansArabicUI-SemiCondensedThin.ttf  
  inflating: NotoSansArabicUI-Thin.ttf  
  inflating: NotoSansArmenian-Black.ttf  
  inflating: NotoSansArmenian-Bold.ttf  
  inflating: NotoSansArmenian-Condensed.ttf  
  inflating: NotoSansArmenian-CondensedBlack.ttf  
  inflating: NotoSansArmenian-CondensedBold.ttf  
  inflating: NotoSansArmenian-CondensedExtraBold.ttf  
  inflating: NotoSansArmenian-CondensedExtraLight.ttf  
  inflating: NotoSansArmenian-CondensedLight.ttf  
  inflating: NotoSansArmenian-CondensedMedium.ttf  
  inflating: NotoSansArmenian-CondensedSemiBold.ttf  
  inflating: NotoSansArmenian-CondensedThin.ttf  
  inflating: NotoSansArmenian-ExtraBold.ttf  
  inflating: NotoSansArmenian-ExtraCondensed.ttf  
  inflating: NotoSansArmenian-ExtraCondensedBlack.ttf  
  inflating: NotoSansArmenian-ExtraCondensedBold.ttf  
  inflating: NotoSansArmenian-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansArmenian-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansArmenian-ExtraCondensedLight.ttf  
  inflating: NotoSansArmenian-ExtraCondensedMedium.ttf  
  inflating: NotoSansArmenian-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansArmenian-ExtraCondensedThin.ttf  
  inflating: NotoSansArmenian-ExtraLight.ttf  
  inflating: NotoSansArmenian-Light.ttf  
  inflating: NotoSansArmenian-Medium.ttf  
  inflating: NotoSansArmenian-Regular.ttf  
  inflating: NotoSansArmenian-SemiBold.ttf  
  inflating: NotoSansArmenian-SemiCondensed.ttf  
  inflating: NotoSansArmenian-SemiCondensedBlack.ttf  
  inflating: NotoSansArmenian-SemiCondensedBold.ttf  
  inflating: NotoSansArmenian-SemiCondensedExtraBold.ttf  
  inflating: NotoSansArmenian-SemiCondensedExtraLight.ttf  
  inflating: NotoSansArmenian-SemiCondensedLight.ttf  
  inflating: NotoSansArmenian-SemiCondensedMedium.ttf  
  inflating: NotoSansArmenian-SemiCondensedSemiBold.ttf  
  inflating: NotoSansArmenian-SemiCondensedThin.ttf  
  inflating: NotoSansArmenian-Thin.ttf  
  inflating: NotoSansAvestan-Regular.ttf  
  inflating: NotoSansBalinese-Regular.ttf  
  inflating: NotoSansBamum-Regular.ttf  
  inflating: NotoSansBatak-Regular.ttf  
  inflating: NotoSansBengali-Black.ttf  
  inflating: NotoSansBengali-Bold.ttf  
  inflating: NotoSansBengali-ExtraBold.ttf  
  inflating: NotoSansBengali-ExtraLight.ttf  
  inflating: NotoSansBengali-Light.ttf  
  inflating: NotoSansBengali-Medium.ttf  
  inflating: NotoSansBengali-Regular.ttf  
  inflating: NotoSansBengali-SemiBold.ttf  
  inflating: NotoSansBengali-Thin.ttf  
  inflating: NotoSansBengaliUI-Black.ttf  
  inflating: NotoSansBengaliUI-Bold.ttf  
  inflating: NotoSansBengaliUI-ExtraBold.ttf  
  inflating: NotoSansBengaliUI-ExtraLight.ttf  
  inflating: NotoSansBengaliUI-Light.ttf  
  inflating: NotoSansBengaliUI-Medium.ttf  
  inflating: NotoSansBengaliUI-Regular.ttf  
  inflating: NotoSansBengaliUI-SemiBold.ttf  
  inflating: NotoSansBengaliUI-Thin.ttf  
  inflating: NotoSansBrahmi-Regular.ttf  
  inflating: NotoSansBuginese-Regular.ttf  
  inflating: NotoSansBuhid-Regular.ttf  
  inflating: NotoSansCJKjp-Black.otf  
  inflating: NotoSansCJKjp-Bold.otf  
  inflating: NotoSansCJKjp-DemiLight.otf  
  inflating: NotoSansCJKjp-Light.otf  
  inflating: NotoSansCJKjp-Medium.otf  
  inflating: NotoSansCJKjp-Regular.otf  
  inflating: NotoSansCJKjp-Thin.otf  
  inflating: NotoSansCJKkr-Black.otf  
  inflating: NotoSansCJKkr-Bold.otf  
  inflating: NotoSansCJKkr-DemiLight.otf  
  inflating: NotoSansCJKkr-Light.otf  
  inflating: NotoSansCJKkr-Medium.otf  
  inflating: NotoSansCJKkr-Regular.otf  
  inflating: NotoSansCJKkr-Thin.otf  
  inflating: NotoSansCJKsc-Black.otf  
  inflating: NotoSansCJKsc-Bold.otf  
  inflating: NotoSansCJKsc-DemiLight.otf  
  inflating: NotoSansCJKsc-Light.otf  
  inflating: NotoSansCJKsc-Medium.otf  
  inflating: NotoSansCJKsc-Regular.otf  
  inflating: NotoSansCJKsc-Thin.otf  
  inflating: NotoSansCJKtc-Black.otf  
  inflating: NotoSansCJKtc-Bold.otf  
  inflating: NotoSansCJKtc-DemiLight.otf  
  inflating: NotoSansCJKtc-Light.otf  
  inflating: NotoSansCJKtc-Medium.otf  
  inflating: NotoSansCJKtc-Regular.otf  
  inflating: NotoSansCJKtc-Thin.otf  
  inflating: NotoSansCanadianAboriginal-Regular.ttf  
  inflating: NotoSansCarian-Regular.ttf  
  inflating: NotoSansChakma-Regular.ttf  
  inflating: NotoSansCham-Black.ttf  
  inflating: NotoSansCham-Bold.ttf   
  inflating: NotoSansCham-ExtraBold.ttf  
  inflating: NotoSansCham-ExtraLight.ttf  
  inflating: NotoSansCham-Light.ttf  
  inflating: NotoSansCham-Medium.ttf  
  inflating: NotoSansCham-Regular.ttf  
  inflating: NotoSansCham-SemiBold.ttf  
  inflating: NotoSansCham-Thin.ttf   
  inflating: NotoSansCherokee-Black.ttf  
  inflating: NotoSansCherokee-Bold.ttf  
  inflating: NotoSansCherokee-ExtraBold.ttf  
  inflating: NotoSansCherokee-ExtraLight.ttf  
  inflating: NotoSansCherokee-Light.ttf  
  inflating: NotoSansCherokee-Medium.ttf  
  inflating: NotoSansCherokee-Regular.ttf  
  inflating: NotoSansCherokee-SemiBold.ttf  
  inflating: NotoSansCherokee-Thin.ttf  
  inflating: NotoSansCoptic-Regular.ttf  
  inflating: NotoSansCuneiform-Regular.ttf  
  inflating: NotoSansCypriot-Regular.ttf  
  inflating: NotoSansDeseret-Regular.ttf  
  inflating: NotoSansDevanagari-Black.ttf  
  inflating: NotoSansDevanagari-Bold.ttf  
  inflating: NotoSansDevanagari-Condensed.ttf  
  inflating: NotoSansDevanagari-CondensedBlack.ttf  
  inflating: NotoSansDevanagari-CondensedBold.ttf  
  inflating: NotoSansDevanagari-CondensedExtraBold.ttf  
  inflating: NotoSansDevanagari-CondensedExtraLight.ttf  
  inflating: NotoSansDevanagari-CondensedLight.ttf  
  inflating: NotoSansDevanagari-CondensedMedium.ttf  
  inflating: NotoSansDevanagari-CondensedSemiBold.ttf  
  inflating: NotoSansDevanagari-CondensedThin.ttf  
  inflating: NotoSansDevanagari-ExtraBold.ttf  
  inflating: NotoSansDevanagari-ExtraCondensed.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedBlack.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedBold.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedLight.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedMedium.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedThin.ttf  
  inflating: NotoSansDevanagari-ExtraLight.ttf  
  inflating: NotoSansDevanagari-Light.ttf  
  inflating: NotoSansDevanagari-Medium.ttf  
  inflating: NotoSansDevanagari-Regular.ttf  
  inflating: NotoSansDevanagari-SemiBold.ttf  
  inflating: NotoSansDevanagari-SemiCondensed.ttf  
  inflating: NotoSansDevanagari-SemiCondensedBlack.ttf  
  inflating: NotoSansDevanagari-SemiCondensedBold.ttf  
  inflating: NotoSansDevanagari-SemiCondensedExtraBold.ttf  
  inflating: NotoSansDevanagari-SemiCondensedExtraLight.ttf  
  inflating: NotoSansDevanagari-SemiCondensedLight.ttf  
  inflating: NotoSansDevanagari-SemiCondensedMedium.ttf  
  inflating: NotoSansDevanagari-SemiCondensedSemiBold.ttf  
  inflating: NotoSansDevanagari-SemiCondensedThin.ttf  
  inflating: NotoSansDevanagari-Thin.ttf  
  inflating: NotoSansDevanagariUI-Black.ttf  
  inflating: NotoSansDevanagariUI-Bold.ttf  
  inflating: NotoSansDevanagariUI-Condensed.ttf  
  inflating: NotoSansDevanagariUI-CondensedBlack.ttf  
  inflating: NotoSansDevanagariUI-CondensedBold.ttf  
  inflating: NotoSansDevanagariUI-CondensedExtraBold.ttf  
  inflating: NotoSansDevanagariUI-CondensedExtraLight.ttf  
  inflating: NotoSansDevanagariUI-CondensedLight.ttf  
  inflating: NotoSansDevanagariUI-CondensedMedium.ttf  
  inflating: NotoSansDevanagariUI-CondensedSemiBold.ttf  
  inflating: NotoSansDevanagariUI-CondensedThin.ttf  
  inflating: NotoSansDevanagariUI-ExtraBold.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensed.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedBold.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedLight.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedThin.ttf  
  inflating: NotoSansDevanagariUI-ExtraLight.ttf  
  inflating: NotoSansDevanagariUI-Light.ttf  
  inflating: NotoSansDevanagariUI-Medium.ttf  
  inflating: NotoSansDevanagariUI-Regular.ttf  
  inflating: NotoSansDevanagariUI-SemiBold.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensed.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedBlack.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedBold.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedLight.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedMedium.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedThin.ttf  
  inflating: NotoSansDevanagariUI-Thin.ttf  
  inflating: NotoSansDisplay-Black.ttf  
  inflating: NotoSansDisplay-BlackItalic.ttf  
  inflating: NotoSansDisplay-Bold.ttf  
  inflating: NotoSansDisplay-BoldItalic.ttf  
  inflating: NotoSansDisplay-Condensed.ttf  
  inflating: NotoSansDisplay-CondensedBlack.ttf  
  inflating: NotoSansDisplay-CondensedBlackItalic.ttf  
  inflating: NotoSansDisplay-CondensedBold.ttf  
  inflating: NotoSansDisplay-CondensedBoldItalic.ttf  
  inflating: NotoSansDisplay-CondensedExtraBold.ttf  
  inflating: NotoSansDisplay-CondensedExtraBoldItalic.ttf  
  inflating: NotoSansDisplay-CondensedExtraLight.ttf  
  inflating: NotoSansDisplay-CondensedExtraLightItalic.ttf  
  inflating: NotoSansDisplay-CondensedItalic.ttf  
  inflating: NotoSansDisplay-CondensedLight.ttf  
  inflating: NotoSansDisplay-CondensedLightItalic.ttf  
  inflating: NotoSansDisplay-CondensedMedium.ttf  
  inflating: NotoSansDisplay-CondensedMediumItalic.ttf  
  inflating: NotoSansDisplay-CondensedSemiBold.ttf  
  inflating: NotoSansDisplay-CondensedSemiBoldItalic.ttf  
  inflating: NotoSansDisplay-CondensedThin.ttf  
  inflating: NotoSansDisplay-CondensedThinItalic.ttf  
  inflating: NotoSansDisplay-ExtraBold.ttf  
  inflating: NotoSansDisplay-ExtraBoldItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensed.ttf  
  inflating: NotoSansDisplay-ExtraCondensedBlack.ttf  
  inflating: NotoSansDisplay-ExtraCondensedBlackItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedBold.ttf  
  inflating: NotoSansDisplay-ExtraCondensedBoldItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansDisplay-ExtraCondensedExtraBoldItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansDisplay-ExtraCondensedExtraLightItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedLight.ttf  
  inflating: NotoSansDisplay-ExtraCondensedLightItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedMedium.ttf  
  inflating: NotoSansDisplay-ExtraCondensedMediumItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansDisplay-ExtraCondensedSemiBoldItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedThin.ttf  
  inflating: NotoSansDisplay-ExtraCondensedThinItalic.ttf  
  inflating: NotoSansDisplay-ExtraLight.ttf  
  inflating: NotoSansDisplay-ExtraLightItalic.ttf  
  inflating: NotoSansDisplay-Italic.ttf  
  inflating: NotoSansDisplay-Light.ttf  
  inflating: NotoSansDisplay-LightItalic.ttf  
  inflating: NotoSansDisplay-Medium.ttf  
  inflating: NotoSansDisplay-MediumItalic.ttf  
  inflating: NotoSansDisplay-Regular.ttf  
  inflating: NotoSansDisplay-SemiBold.ttf  
  inflating: NotoSansDisplay-SemiBoldItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensed.ttf  
  inflating: NotoSansDisplay-SemiCondensedBlack.ttf  
  inflating: NotoSansDisplay-SemiCondensedBlackItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedBold.ttf  
  inflating: NotoSansDisplay-SemiCondensedBoldItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedExtraBold.ttf  
  inflating: NotoSansDisplay-SemiCondensedExtraBoldItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedExtraLight.ttf  
  inflating: NotoSansDisplay-SemiCondensedExtraLightItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedLight.ttf  
  inflating: NotoSansDisplay-SemiCondensedLightItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedMedium.ttf  
  inflating: NotoSansDisplay-SemiCondensedMediumItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedSemiBold.ttf  
  inflating: NotoSansDisplay-SemiCondensedSemiBoldItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedThin.ttf  
  inflating: NotoSansDisplay-SemiCondensedThinItalic.ttf  
  inflating: NotoSansDisplay-Thin.ttf  
  inflating: NotoSansDisplay-ThinItalic.ttf  
  inflating: NotoSansEgyptianHieroglyphs-Regular.ttf  
  inflating: NotoSansEthiopic-Black.ttf  
  inflating: NotoSansEthiopic-Bold.ttf  
  inflating: NotoSansEthiopic-Condensed.ttf  
  inflating: NotoSansEthiopic-CondensedBlack.ttf  
  inflating: NotoSansEthiopic-CondensedBold.ttf  
  inflating: NotoSansEthiopic-CondensedExtraBold.ttf  
  inflating: NotoSansEthiopic-CondensedExtraLight.ttf  
  inflating: NotoSansEthiopic-CondensedLight.ttf  
  inflating: NotoSansEthiopic-CondensedMedium.ttf  
  inflating: NotoSansEthiopic-CondensedSemiBold.ttf  
  inflating: NotoSansEthiopic-CondensedThin.ttf  
  inflating: NotoSansEthiopic-ExtraBold.ttf  
  inflating: NotoSansEthiopic-ExtraCondensed.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedBlack.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedBold.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedLight.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedMedium.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedThin.ttf  
  inflating: NotoSansEthiopic-ExtraLight.ttf  
  inflating: NotoSansEthiopic-Light.ttf  
  inflating: NotoSansEthiopic-Medium.ttf  
  inflating: NotoSansEthiopic-Regular.ttf  
  inflating: NotoSansEthiopic-SemiBold.ttf  
  inflating: NotoSansEthiopic-SemiCondensed.ttf  
  inflating: NotoSansEthiopic-SemiCondensedBlack.ttf  
  inflating: NotoSansEthiopic-SemiCondensedBold.ttf  
  inflating: NotoSansEthiopic-SemiCondensedExtraBold.ttf  
  inflating: NotoSansEthiopic-SemiCondensedExtraLight.ttf  
  inflating: NotoSansEthiopic-SemiCondensedLight.ttf  
  inflating: NotoSansEthiopic-SemiCondensedMedium.ttf  
  inflating: NotoSansEthiopic-SemiCondensedSemiBold.ttf  
  inflating: NotoSansEthiopic-SemiCondensedThin.ttf  
  inflating: NotoSansEthiopic-Thin.ttf  
  inflating: NotoSansGeorgian-Black.ttf  
  inflating: NotoSansGeorgian-Bold.ttf  
  inflating: NotoSansGeorgian-Condensed.ttf  
  inflating: NotoSansGeorgian-CondensedBlack.ttf  
  inflating: NotoSansGeorgian-CondensedBold.ttf  
  inflating: NotoSansGeorgian-CondensedExtraBold.ttf  
  inflating: NotoSansGeorgian-CondensedExtraLight.ttf  
  inflating: NotoSansGeorgian-CondensedLight.ttf  
  inflating: NotoSansGeorgian-CondensedMedium.ttf  
  inflating: NotoSansGeorgian-CondensedSemiBold.ttf  
  inflating: NotoSansGeorgian-CondensedThin.ttf  
  inflating: NotoSansGeorgian-ExtraBold.ttf  
  inflating: NotoSansGeorgian-ExtraCondensed.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedBlack.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedBold.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedLight.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedMedium.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedThin.ttf  
  inflating: NotoSansGeorgian-ExtraLight.ttf  
  inflating: NotoSansGeorgian-Light.ttf  
  inflating: NotoSansGeorgian-Medium.ttf  
  inflating: NotoSansGeorgian-Regular.ttf  
  inflating: NotoSansGeorgian-SemiBold.ttf  
  inflating: NotoSansGeorgian-SemiCondensed.ttf  
  inflating: NotoSansGeorgian-SemiCondensedBlack.ttf  
  inflating: NotoSansGeorgian-SemiCondensedBold.ttf  
  inflating: NotoSansGeorgian-SemiCondensedExtraBold.ttf  
  inflating: NotoSansGeorgian-SemiCondensedExtraLight.ttf  
  inflating: NotoSansGeorgian-SemiCondensedLight.ttf  
  inflating: NotoSansGeorgian-SemiCondensedMedium.ttf  
  inflating: NotoSansGeorgian-SemiCondensedSemiBold.ttf  
  inflating: NotoSansGeorgian-SemiCondensedThin.ttf  
  inflating: NotoSansGeorgian-Thin.ttf  
  inflating: NotoSansGlagolitic-Regular.ttf  
  inflating: NotoSansGothic-Regular.ttf  
  inflating: NotoSansGujarati-Bold.ttf  
  inflating: NotoSansGujarati-Regular.ttf  
  inflating: NotoSansGujaratiUI-Bold.ttf  
  inflating: NotoSansGujaratiUI-Regular.ttf  
  inflating: NotoSansGurmukhi-Bold.ttf  
  inflating: NotoSansGurmukhi-Regular.ttf  
  inflating: NotoSansGurmukhiUI-Bold.ttf  
  inflating: NotoSansGurmukhiUI-Regular.ttf  
  inflating: NotoSansHanunoo-Regular.ttf  
  inflating: NotoSansHebrew-Black.ttf  
  inflating: NotoSansHebrew-Bold.ttf  
  inflating: NotoSansHebrew-Condensed.ttf  
  inflating: NotoSansHebrew-CondensedBlack.ttf  
  inflating: NotoSansHebrew-CondensedBold.ttf  
  inflating: NotoSansHebrew-CondensedExtraBold.ttf  
  inflating: NotoSansHebrew-CondensedExtraLight.ttf  
  inflating: NotoSansHebrew-CondensedLight.ttf  
  inflating: NotoSansHebrew-CondensedMedium.ttf  
  inflating: NotoSansHebrew-CondensedSemiBold.ttf  
  inflating: NotoSansHebrew-CondensedThin.ttf  
  inflating: NotoSansHebrew-ExtraBold.ttf  
  inflating: NotoSansHebrew-ExtraCondensed.ttf  
  inflating: NotoSansHebrew-ExtraCondensedBlack.ttf  
  inflating: NotoSansHebrew-ExtraCondensedBold.ttf  
  inflating: NotoSansHebrew-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansHebrew-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansHebrew-ExtraCondensedLight.ttf  
  inflating: NotoSansHebrew-ExtraCondensedMedium.ttf  
  inflating: NotoSansHebrew-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansHebrew-ExtraCondensedThin.ttf  
  inflating: NotoSansHebrew-ExtraLight.ttf  
  inflating: NotoSansHebrew-Light.ttf  
  inflating: NotoSansHebrew-Medium.ttf  
  inflating: NotoSansHebrew-Regular.ttf  
  inflating: NotoSansHebrew-SemiBold.ttf  
  inflating: NotoSansHebrew-SemiCondensed.ttf  
  inflating: NotoSansHebrew-SemiCondensedBlack.ttf  
  inflating: NotoSansHebrew-SemiCondensedBold.ttf  
  inflating: NotoSansHebrew-SemiCondensedExtraBold.ttf  
  inflating: NotoSansHebrew-SemiCondensedExtraLight.ttf  
  inflating: NotoSansHebrew-SemiCondensedLight.ttf  
  inflating: NotoSansHebrew-SemiCondensedMedium.ttf  
  inflating: NotoSansHebrew-SemiCondensedSemiBold.ttf  
  inflating: NotoSansHebrew-SemiCondensedThin.ttf  
  inflating: NotoSansHebrew-Thin.ttf  
  inflating: NotoSansImperialAramaic-Regular.ttf  
  inflating: NotoSansInscriptionalPahlavi-Regular.ttf  
  inflating: NotoSansInscriptionalParthian-Regular.ttf  
  inflating: NotoSansJavanese-Regular.ttf  
  inflating: NotoSansKaithi-Regular.ttf  
  inflating: NotoSansKannada-Bold.ttf  
  inflating: NotoSansKannada-Regular.ttf  
  inflating: NotoSansKannadaUI-Bold.ttf  
  inflating: NotoSansKannadaUI-Regular.ttf  
  inflating: NotoSansKayahLi-Regular.ttf  
  inflating: NotoSansKharoshthi-Regular.ttf  
  inflating: NotoSansKhmer-Black.ttf  
  inflating: NotoSansKhmer-Bold.ttf  
  inflating: NotoSansKhmer-Condensed.ttf  
  inflating: NotoSansKhmer-CondensedBlack.ttf  
  inflating: NotoSansKhmer-CondensedBold.ttf  
  inflating: NotoSansKhmer-CondensedExtraBold.ttf  
  inflating: NotoSansKhmer-CondensedExtraLight.ttf  
  inflating: NotoSansKhmer-CondensedLight.ttf  
  inflating: NotoSansKhmer-CondensedMedium.ttf  
  inflating: NotoSansKhmer-CondensedSemiBold.ttf  
  inflating: NotoSansKhmer-CondensedThin.ttf  
  inflating: NotoSansKhmer-ExtraBold.ttf  
  inflating: NotoSansKhmer-ExtraCondensed.ttf  
  inflating: NotoSansKhmer-ExtraCondensedBlack.ttf  
  inflating: NotoSansKhmer-ExtraCondensedBold.ttf  
  inflating: NotoSansKhmer-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansKhmer-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansKhmer-ExtraCondensedLight.ttf  
  inflating: NotoSansKhmer-ExtraCondensedMedium.ttf  
  inflating: NotoSansKhmer-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansKhmer-ExtraCondensedThin.ttf  
  inflating: NotoSansKhmer-ExtraLight.ttf  
  inflating: NotoSansKhmer-Light.ttf  
  inflating: NotoSansKhmer-Medium.ttf  
  inflating: NotoSansKhmer-Regular.ttf  
  inflating: NotoSansKhmer-SemiBold.ttf  
  inflating: NotoSansKhmer-SemiCondensed.ttf  
  inflating: NotoSansKhmer-SemiCondensedBlack.ttf  
  inflating: NotoSansKhmer-SemiCondensedBold.ttf  
  inflating: NotoSansKhmer-SemiCondensedExtraBold.ttf  
  inflating: NotoSansKhmer-SemiCondensedExtraLight.ttf  
  inflating: NotoSansKhmer-SemiCondensedLight.ttf  
  inflating: NotoSansKhmer-SemiCondensedMedium.ttf  
  inflating: NotoSansKhmer-SemiCondensedSemiBold.ttf  
  inflating: NotoSansKhmer-SemiCondensedThin.ttf  
  inflating: NotoSansKhmer-Thin.ttf  
  inflating: NotoSansKhmerUI-Black.ttf  
  inflating: NotoSansKhmerUI-Bold.ttf  
  inflating: NotoSansKhmerUI-Condensed.ttf  
  inflating: NotoSansKhmerUI-CondensedBlack.ttf  
  inflating: NotoSansKhmerUI-CondensedBold.ttf  
  inflating: NotoSansKhmerUI-CondensedExtraBold.ttf  
  inflating: NotoSansKhmerUI-CondensedExtraLight.ttf  
  inflating: NotoSansKhmerUI-CondensedLight.ttf  
  inflating: NotoSansKhmerUI-CondensedMedium.ttf  
  inflating: NotoSansKhmerUI-CondensedSemiBold.ttf  
  inflating: NotoSansKhmerUI-CondensedThin.ttf  
  inflating: NotoSansKhmerUI-ExtraBold.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensed.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedBold.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedLight.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedThin.ttf  
  inflating: NotoSansKhmerUI-ExtraLight.ttf  
  inflating: NotoSansKhmerUI-Light.ttf  
  inflating: NotoSansKhmerUI-Medium.ttf  
  inflating: NotoSansKhmerUI-Regular.ttf  
  inflating: NotoSansKhmerUI-SemiBold.ttf  
  inflating: NotoSansKhmerUI-SemiCondensed.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedBlack.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedBold.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedLight.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedMedium.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedThin.ttf  
  inflating: NotoSansKhmerUI-Thin.ttf  
  inflating: NotoSansLao-Black.ttf   
  inflating: NotoSansLao-Bold.ttf    
  inflating: NotoSansLao-Condensed.ttf  
  inflating: NotoSansLao-CondensedBlack.ttf  
  inflating: NotoSansLao-CondensedBold.ttf  
  inflating: NotoSansLao-CondensedExtraBold.ttf  
  inflating: NotoSansLao-CondensedExtraLight.ttf  
  inflating: NotoSansLao-CondensedLight.ttf  
  inflating: NotoSansLao-CondensedMedium.ttf  
  inflating: NotoSansLao-CondensedSemiBold.ttf  
  inflating: NotoSansLao-CondensedThin.ttf  
  inflating: NotoSansLao-ExtraBold.ttf  
  inflating: NotoSansLao-ExtraCondensed.ttf  
  inflating: NotoSansLao-ExtraCondensedBlack.ttf  
  inflating: NotoSansLao-ExtraCondensedBold.ttf  
  inflating: NotoSansLao-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansLao-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansLao-ExtraCondensedLight.ttf  
  inflating: NotoSansLao-ExtraCondensedMedium.ttf  
  inflating: NotoSansLao-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansLao-ExtraCondensedThin.ttf  
  inflating: NotoSansLao-ExtraLight.ttf  
  inflating: NotoSansLao-Light.ttf   
  inflating: NotoSansLao-Medium.ttf  
  inflating: NotoSansLao-Regular.ttf  
  inflating: NotoSansLao-SemiBold.ttf  
  inflating: NotoSansLao-SemiCondensed.ttf  
  inflating: NotoSansLao-SemiCondensedBlack.ttf  
  inflating: NotoSansLao-SemiCondensedBold.ttf  
  inflating: NotoSansLao-SemiCondensedExtraBold.ttf  
  inflating: NotoSansLao-SemiCondensedExtraLight.ttf  
  inflating: NotoSansLao-SemiCondensedLight.ttf  
  inflating: NotoSansLao-SemiCondensedMedium.ttf  
  inflating: NotoSansLao-SemiCondensedSemiBold.ttf  
  inflating: NotoSansLao-SemiCondensedThin.ttf  
  inflating: NotoSansLao-Thin.ttf    
  inflating: NotoSansLaoUI-Black.ttf  
  inflating: NotoSansLaoUI-Bold.ttf  
  inflating: NotoSansLaoUI-Condensed.ttf  
  inflating: NotoSansLaoUI-CondensedBlack.ttf  
  inflating: NotoSansLaoUI-CondensedBold.ttf  
  inflating: NotoSansLaoUI-CondensedExtraBold.ttf  
  inflating: NotoSansLaoUI-CondensedExtraLight.ttf  
  inflating: NotoSansLaoUI-CondensedLight.ttf  
  inflating: NotoSansLaoUI-CondensedMedium.ttf  
  inflating: NotoSansLaoUI-CondensedSemiBold.ttf  
  inflating: NotoSansLaoUI-CondensedThin.ttf  
  inflating: NotoSansLaoUI-ExtraBold.ttf  
  inflating: NotoSansLaoUI-ExtraCondensed.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedBold.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedLight.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedThin.ttf  
  inflating: NotoSansLaoUI-ExtraLight.ttf  
  inflating: NotoSansLaoUI-Light.ttf  
  inflating: NotoSansLaoUI-Medium.ttf  
  inflating: NotoSansLaoUI-Regular.ttf  
  inflating: NotoSansLaoUI-SemiBold.ttf  
  inflating: NotoSansLaoUI-SemiCondensed.ttf  
  inflating: NotoSansLaoUI-SemiCondensedBlack.ttf  
  inflating: NotoSansLaoUI-SemiCondensedBold.ttf  
  inflating: NotoSansLaoUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansLaoUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansLaoUI-SemiCondensedLight.ttf  
  inflating: NotoSansLaoUI-SemiCondensedMedium.ttf  
  inflating: NotoSansLaoUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansLaoUI-SemiCondensedThin.ttf  
  inflating: NotoSansLaoUI-Thin.ttf  
  inflating: NotoSansLepcha-Regular.ttf  
  inflating: NotoSansLimbu-Regular.ttf  
  inflating: NotoSansLinearB-Regular.ttf  
  inflating: NotoSansLisu-Regular.ttf  
  inflating: NotoSansLycian-Regular.ttf  
  inflating: NotoSansLydian-Regular.ttf  
  inflating: NotoSansMalayalam-Bold.ttf  
  inflating: NotoSansMalayalam-Regular.ttf  
  inflating: NotoSansMalayalamUI-Bold.ttf  
  inflating: NotoSansMalayalamUI-Regular.ttf  
  inflating: NotoSansMandaic-Regular.ttf  
  inflating: NotoSansMeeteiMayek-Regular.ttf  
  inflating: NotoSansMongolian-Regular.ttf  
  inflating: NotoSansMono-Black.ttf  
  inflating: NotoSansMono-Bold.ttf   
  inflating: NotoSansMono-Condensed.ttf  
  inflating: NotoSansMono-CondensedBlack.ttf  
  inflating: NotoSansMono-CondensedBold.ttf  
  inflating: NotoSansMono-CondensedExtraBold.ttf  
  inflating: NotoSansMono-CondensedExtraLight.ttf  
  inflating: NotoSansMono-CondensedLight.ttf  
  inflating: NotoSansMono-CondensedMedium.ttf  
  inflating: NotoSansMono-CondensedSemiBold.ttf  
  inflating: NotoSansMono-CondensedThin.ttf  
  inflating: NotoSansMono-ExtraBold.ttf  
  inflating: NotoSansMono-ExtraCondensed.ttf  
  inflating: NotoSansMono-ExtraCondensedBlack.ttf  
  inflating: NotoSansMono-ExtraCondensedBold.ttf  
  inflating: NotoSansMono-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansMono-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansMono-ExtraCondensedLight.ttf  
  inflating: NotoSansMono-ExtraCondensedMedium.ttf  
  inflating: NotoSansMono-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansMono-ExtraCondensedThin.ttf  
  inflating: NotoSansMono-ExtraLight.ttf  
  inflating: NotoSansMono-Light.ttf  
  inflating: NotoSansMono-Medium.ttf  
  inflating: NotoSansMono-Regular.ttf  
  inflating: NotoSansMono-SemiBold.ttf  
  inflating: NotoSansMono-SemiCondensed.ttf  
  inflating: NotoSansMono-SemiCondensedBlack.ttf  
  inflating: NotoSansMono-SemiCondensedBold.ttf  
  inflating: NotoSansMono-SemiCondensedExtraBold.ttf  
  inflating: NotoSansMono-SemiCondensedExtraLight.ttf  
  inflating: NotoSansMono-SemiCondensedLight.ttf  
  inflating: NotoSansMono-SemiCondensedMedium.ttf  
  inflating: NotoSansMono-SemiCondensedSemiBold.ttf  
  inflating: NotoSansMono-SemiCondensedThin.ttf  
  inflating: NotoSansMono-Thin.ttf   
  inflating: NotoSansMonoCJKjp-Bold.otf  
  inflating: NotoSansMonoCJKjp-Regular.otf  
  inflating: NotoSansMonoCJKkr-Bold.otf  
  inflating: NotoSansMonoCJKkr-Regular.otf  
  inflating: NotoSansMonoCJKsc-Bold.otf  
  inflating: NotoSansMonoCJKsc-Regular.otf  
  inflating: NotoSansMonoCJKtc-Bold.otf  
  inflating: NotoSansMonoCJKtc-Regular.otf  
  inflating: NotoSansMyanmar-Black.ttf  
  inflating: NotoSansMyanmar-Bold.ttf  
  inflating: NotoSansMyanmar-Condensed.ttf  
  inflating: NotoSansMyanmar-CondensedBlack.ttf  
  inflating: NotoSansMyanmar-CondensedBold.ttf  
  inflating: NotoSansMyanmar-CondensedExtraBold.ttf  
  inflating: NotoSansMyanmar-CondensedExtraLight.ttf  
  inflating: NotoSansMyanmar-CondensedLight.ttf  
  inflating: NotoSansMyanmar-CondensedMedium.ttf  
  inflating: NotoSansMyanmar-CondensedSemiBold.ttf  
  inflating: NotoSansMyanmar-CondensedThin.ttf  
  inflating: NotoSansMyanmar-ExtraBold.ttf  
  inflating: NotoSansMyanmar-ExtraCondensed.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedBlack.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedBold.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedLight.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedMedium.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedThin.ttf  
  inflating: NotoSansMyanmar-ExtraLight.ttf  
  inflating: NotoSansMyanmar-Light.ttf  
  inflating: NotoSansMyanmar-Medium.ttf  
  inflating: NotoSansMyanmar-Regular.ttf  
  inflating: NotoSansMyanmar-SemiBold.ttf  
  inflating: NotoSansMyanmar-SemiCondensed.ttf  
  inflating: NotoSansMyanmar-SemiCondensedBlack.ttf  
  inflating: NotoSansMyanmar-SemiCondensedBold.ttf  
  inflating: NotoSansMyanmar-SemiCondensedExtraBold.ttf  
  inflating: NotoSansMyanmar-SemiCondensedExtraLight.ttf  
  inflating: NotoSansMyanmar-SemiCondensedLight.ttf  
  inflating: NotoSansMyanmar-SemiCondensedMedium.ttf  
  inflating: NotoSansMyanmar-SemiCondensedSemiBold.ttf  
  inflating: NotoSansMyanmar-SemiCondensedThin.ttf  
  inflating: NotoSansMyanmar-Thin.ttf  
  inflating: NotoSansMyanmarUI-Black.ttf  
  inflating: NotoSansMyanmarUI-Bold.ttf  
  inflating: NotoSansMyanmarUI-Condensed.ttf  
  inflating: NotoSansMyanmarUI-CondensedBlack.ttf  
  inflating: NotoSansMyanmarUI-CondensedBold.ttf  
  inflating: NotoSansMyanmarUI-CondensedExtraBold.ttf  
  inflating: NotoSansMyanmarUI-CondensedExtraLight.ttf  
  inflating: NotoSansMyanmarUI-CondensedLight.ttf  
  inflating: NotoSansMyanmarUI-CondensedMedium.ttf  
  inflating: NotoSansMyanmarUI-CondensedSemiBold.ttf  
  inflating: NotoSansMyanmarUI-CondensedThin.ttf  
  inflating: NotoSansMyanmarUI-ExtraBold.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensed.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedBold.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedLight.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedThin.ttf  
  inflating: NotoSansMyanmarUI-ExtraLight.ttf  
  inflating: NotoSansMyanmarUI-Light.ttf  
  inflating: NotoSansMyanmarUI-Medium.ttf  
  inflating: NotoSansMyanmarUI-Regular.ttf  
  inflating: NotoSansMyanmarUI-SemiBold.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensed.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedBlack.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedBold.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedLight.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedMedium.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedThin.ttf  
  inflating: NotoSansMyanmarUI-Thin.ttf  
  inflating: NotoSansNKo-Regular.ttf  
  inflating: NotoSansNewTaiLue-Regular.ttf  
  inflating: NotoSansOgham-Regular.ttf  
  inflating: NotoSansOlChiki-Regular.ttf  
  inflating: NotoSansOldItalic-Regular.ttf  
  inflating: NotoSansOldPersian-Regular.ttf  
  inflating: NotoSansOldSouthArabian-Regular.ttf  
  inflating: NotoSansOldTurkic-Regular.ttf  
  inflating: NotoSansOriya-Bold.ttf  
  inflating: NotoSansOriya-Regular.ttf  
  inflating: NotoSansOriyaUI-Bold.ttf  
  inflating: NotoSansOriyaUI-Regular.ttf  
  inflating: NotoSansOsage-Regular.ttf  
  inflating: NotoSansOsmanya-Regular.ttf  
  inflating: NotoSansPhagsPa-Regular.ttf  
  inflating: NotoSansPhoenician-Regular.ttf  
  inflating: NotoSansRejang-Regular.ttf  
  inflating: NotoSansRunic-Regular.ttf  
  inflating: NotoSansSamaritan-Regular.ttf  
  inflating: NotoSansSaurashtra-Regular.ttf  
  inflating: NotoSansShavian-Regular.ttf  
  inflating: NotoSansSinhala-Black.ttf  
  inflating: NotoSansSinhala-Bold.ttf  
  inflating: NotoSansSinhala-Condensed.ttf  
  inflating: NotoSansSinhala-CondensedBlack.ttf  
  inflating: NotoSansSinhala-CondensedBold.ttf  
  inflating: NotoSansSinhala-CondensedExtraBold.ttf  
  inflating: NotoSansSinhala-CondensedExtraLight.ttf  
  inflating: NotoSansSinhala-CondensedLight.ttf  
  inflating: NotoSansSinhala-CondensedMedium.ttf  
  inflating: NotoSansSinhala-CondensedSemiBold.ttf  
  inflating: NotoSansSinhala-CondensedThin.ttf  
  inflating: NotoSansSinhala-ExtraBold.ttf  
  inflating: NotoSansSinhala-ExtraCondensed.ttf  
  inflating: NotoSansSinhala-ExtraCondensedBlack.ttf  
  inflating: NotoSansSinhala-ExtraCondensedBold.ttf  
  inflating: NotoSansSinhala-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansSinhala-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansSinhala-ExtraCondensedLight.ttf  
  inflating: NotoSansSinhala-ExtraCondensedMedium.ttf  
  inflating: NotoSansSinhala-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansSinhala-ExtraCondensedThin.ttf  
  inflating: NotoSansSinhala-ExtraLight.ttf  
  inflating: NotoSansSinhala-Light.ttf  
  inflating: NotoSansSinhala-Medium.ttf  
  inflating: NotoSansSinhala-Regular.ttf  
  inflating: NotoSansSinhala-SemiBold.ttf  
  inflating: NotoSansSinhala-SemiCondensed.ttf  
  inflating: NotoSansSinhala-SemiCondensedBlack.ttf  
  inflating: NotoSansSinhala-SemiCondensedBold.ttf  
  inflating: NotoSansSinhala-SemiCondensedExtraBold.ttf  
  inflating: NotoSansSinhala-SemiCondensedExtraLight.ttf  
  inflating: NotoSansSinhala-SemiCondensedLight.ttf  
  inflating: NotoSansSinhala-SemiCondensedMedium.ttf  
  inflating: NotoSansSinhala-SemiCondensedSemiBold.ttf  
  inflating: NotoSansSinhala-SemiCondensedThin.ttf  
  inflating: NotoSansSinhala-Thin.ttf  
  inflating: NotoSansSinhalaUI-Black.ttf  
  inflating: NotoSansSinhalaUI-Bold.ttf  
  inflating: NotoSansSinhalaUI-Condensed.ttf  
  inflating: NotoSansSinhalaUI-CondensedBlack.ttf  
  inflating: NotoSansSinhalaUI-CondensedBold.ttf  
  inflating: NotoSansSinhalaUI-CondensedExtraBold.ttf  
  inflating: NotoSansSinhalaUI-CondensedExtraLight.ttf  
  inflating: NotoSansSinhalaUI-CondensedLight.ttf  
  inflating: NotoSansSinhalaUI-CondensedMedium.ttf  
  inflating: NotoSansSinhalaUI-CondensedSemiBold.ttf  
  inflating: NotoSansSinhalaUI-CondensedThin.ttf  
  inflating: NotoSansSinhalaUI-ExtraBold.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensed.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedBold.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedLight.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedThin.ttf  
  inflating: NotoSansSinhalaUI-ExtraLight.ttf  
  inflating: NotoSansSinhalaUI-Light.ttf  
  inflating: NotoSansSinhalaUI-Medium.ttf  
  inflating: NotoSansSinhalaUI-Regular.ttf  
  inflating: NotoSansSinhalaUI-SemiBold.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensed.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedBlack.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedBold.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedLight.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedMedium.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedThin.ttf  
  inflating: NotoSansSinhalaUI-Thin.ttf  
  inflating: NotoSansSundanese-Regular.ttf  
  inflating: NotoSansSylotiNagri-Regular.ttf  
  inflating: NotoSansSymbols-Black.ttf  
  inflating: NotoSansSymbols-Bold.ttf  
  inflating: NotoSansSymbols-ExtraBold.ttf  
  inflating: NotoSansSymbols-ExtraLight.ttf  
  inflating: NotoSansSymbols-Light.ttf  
  inflating: NotoSansSymbols-Medium.ttf  
  inflating: NotoSansSymbols-Regular.ttf  
  inflating: NotoSansSymbols-SemiBold.ttf  
  inflating: NotoSansSymbols-Thin.ttf  
  inflating: NotoSansSymbols2-Regular.ttf  
  inflating: NotoSansSyriacEastern-Regular.ttf  
  inflating: NotoSansSyriacEstrangela-Regular.ttf  
  inflating: NotoSansSyriacWestern-Regular.ttf  
  inflating: NotoSansTagalog-Regular.ttf  
  inflating: NotoSansTagbanwa-Regular.ttf  
  inflating: NotoSansTaiLe-Regular.ttf  
  inflating: NotoSansTaiTham-Regular.ttf  
  inflating: NotoSansTaiViet-Regular.ttf  
  inflating: NotoSansTamil-Black.ttf  
  inflating: NotoSansTamil-Bold.ttf  
  inflating: NotoSansTamil-Condensed.ttf  
  inflating: NotoSansTamil-CondensedBlack.ttf  
  inflating: NotoSansTamil-CondensedBold.ttf  
  inflating: NotoSansTamil-CondensedExtraBold.ttf  
  inflating: NotoSansTamil-CondensedExtraLight.ttf  
  inflating: NotoSansTamil-CondensedLight.ttf  
  inflating: NotoSansTamil-CondensedMedium.ttf  
  inflating: NotoSansTamil-CondensedSemiBold.ttf  
  inflating: NotoSansTamil-CondensedThin.ttf  
  inflating: NotoSansTamil-ExtraBold.ttf  
  inflating: NotoSansTamil-ExtraCondensed.ttf  
  inflating: NotoSansTamil-ExtraCondensedBlack.ttf  
  inflating: NotoSansTamil-ExtraCondensedBold.ttf  
  inflating: NotoSansTamil-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansTamil-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansTamil-ExtraCondensedLight.ttf  
  inflating: NotoSansTamil-ExtraCondensedMedium.ttf  
  inflating: NotoSansTamil-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansTamil-ExtraCondensedThin.ttf  
  inflating: NotoSansTamil-ExtraLight.ttf  
  inflating: NotoSansTamil-Light.ttf  
  inflating: NotoSansTamil-Medium.ttf  
  inflating: NotoSansTamil-Regular.ttf  
  inflating: NotoSansTamil-SemiBold.ttf  
  inflating: NotoSansTamil-SemiCondensed.ttf  
  inflating: NotoSansTamil-SemiCondensedBlack.ttf  
  inflating: NotoSansTamil-SemiCondensedBold.ttf  
  inflating: NotoSansTamil-SemiCondensedExtraBold.ttf  
  inflating: NotoSansTamil-SemiCondensedExtraLight.ttf  
  inflating: NotoSansTamil-SemiCondensedLight.ttf  
  inflating: NotoSansTamil-SemiCondensedMedium.ttf  
  inflating: NotoSansTamil-SemiCondensedSemiBold.ttf  
  inflating: NotoSansTamil-SemiCondensedThin.ttf  
  inflating: NotoSansTamil-Thin.ttf  
  inflating: NotoSansTamilUI-Black.ttf  
  inflating: NotoSansTamilUI-Bold.ttf  
  inflating: NotoSansTamilUI-Condensed.ttf  
  inflating: NotoSansTamilUI-CondensedBlack.ttf  
  inflating: NotoSansTamilUI-CondensedBold.ttf  
  inflating: NotoSansTamilUI-CondensedExtraBold.ttf  
  inflating: NotoSansTamilUI-CondensedExtraLight.ttf  
  inflating: NotoSansTamilUI-CondensedLight.ttf  
  inflating: NotoSansTamilUI-CondensedMedium.ttf  
  inflating: NotoSansTamilUI-CondensedSemiBold.ttf  
  inflating: NotoSansTamilUI-CondensedThin.ttf  
  inflating: NotoSansTamilUI-ExtraBold.ttf  
  inflating: NotoSansTamilUI-ExtraCondensed.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedBold.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedLight.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedThin.ttf  
  inflating: NotoSansTamilUI-ExtraLight.ttf  
  inflating: NotoSansTamilUI-Light.ttf  
  inflating: NotoSansTamilUI-Medium.ttf  
  inflating: NotoSansTamilUI-Regular.ttf  
  inflating: NotoSansTamilUI-SemiBold.ttf  
  inflating: NotoSansTamilUI-SemiCondensed.ttf  
  inflating: NotoSansTamilUI-SemiCondensedBlack.ttf  
  inflating: NotoSansTamilUI-SemiCondensedBold.ttf  
  inflating: NotoSansTamilUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansTamilUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansTamilUI-SemiCondensedLight.ttf  
  inflating: NotoSansTamilUI-SemiCondensedMedium.ttf  
  inflating: NotoSansTamilUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansTamilUI-SemiCondensedThin.ttf  
  inflating: NotoSansTamilUI-Thin.ttf  
  inflating: NotoSansTelugu-Bold.ttf  
  inflating: NotoSansTelugu-Regular.ttf  
  inflating: NotoSansTeluguUI-Bold.ttf  
  inflating: NotoSansTeluguUI-Regular.ttf  
  inflating: NotoSansThaana-Bold.ttf  
  inflating: NotoSansThaana-Regular.ttf  
  inflating: NotoSansThai-Black.ttf  
  inflating: NotoSansThai-Bold.ttf   
  inflating: NotoSansThai-Condensed.ttf  
  inflating: NotoSansThai-CondensedBlack.ttf  
  inflating: NotoSansThai-CondensedBold.ttf  
  inflating: NotoSansThai-CondensedExtraBold.ttf  
  inflating: NotoSansThai-CondensedExtraLight.ttf  
  inflating: NotoSansThai-CondensedLight.ttf  
  inflating: NotoSansThai-CondensedMedium.ttf  
  inflating: NotoSansThai-CondensedSemiBold.ttf  
  inflating: NotoSansThai-CondensedThin.ttf  
  inflating: NotoSansThai-ExtraBold.ttf  
  inflating: NotoSansThai-ExtraCondensed.ttf  
  inflating: NotoSansThai-ExtraCondensedBlack.ttf  
  inflating: NotoSansThai-ExtraCondensedBold.ttf  
  inflating: NotoSansThai-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansThai-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansThai-ExtraCondensedLight.ttf  
  inflating: NotoSansThai-ExtraCondensedMedium.ttf  
  inflating: NotoSansThai-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansThai-ExtraCondensedThin.ttf  
  inflating: NotoSansThai-ExtraLight.ttf  
  inflating: NotoSansThai-Light.ttf  
  inflating: NotoSansThai-Medium.ttf  
  inflating: NotoSansThai-Regular.ttf  
  inflating: NotoSansThai-SemiBold.ttf  
  inflating: NotoSansThai-SemiCondensed.ttf  
  inflating: NotoSansThai-SemiCondensedBlack.ttf  
  inflating: NotoSansThai-SemiCondensedBold.ttf  
  inflating: NotoSansThai-SemiCondensedExtraBold.ttf  
  inflating: NotoSansThai-SemiCondensedExtraLight.ttf  
  inflating: NotoSansThai-SemiCondensedLight.ttf  
  inflating: NotoSansThai-SemiCondensedMedium.ttf  
  inflating: NotoSansThai-SemiCondensedSemiBold.ttf  
  inflating: NotoSansThai-SemiCondensedThin.ttf  
  inflating: NotoSansThai-Thin.ttf   
  inflating: NotoSansThaiUI-Black.ttf  
  inflating: NotoSansThaiUI-Bold.ttf  
  inflating: NotoSansThaiUI-Condensed.ttf  
  inflating: NotoSansThaiUI-CondensedBlack.ttf  
  inflating: NotoSansThaiUI-CondensedBold.ttf  
  inflating: NotoSansThaiUI-CondensedExtraBold.ttf  
  inflating: NotoSansThaiUI-CondensedExtraLight.ttf  
  inflating: NotoSansThaiUI-CondensedLight.ttf  
  inflating: NotoSansThaiUI-CondensedMedium.ttf  
  inflating: NotoSansThaiUI-CondensedSemiBold.ttf  
  inflating: NotoSansThaiUI-CondensedThin.ttf  
  inflating: NotoSansThaiUI-ExtraBold.ttf  
  inflating: NotoSansThaiUI-ExtraCondensed.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedBold.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedLight.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedThin.ttf  
  inflating: NotoSansThaiUI-ExtraLight.ttf  
  inflating: NotoSansThaiUI-Light.ttf  
  inflating: NotoSansThaiUI-Medium.ttf  
  inflating: NotoSansThaiUI-Regular.ttf  
  inflating: NotoSansThaiUI-SemiBold.ttf  
  inflating: NotoSansThaiUI-SemiCondensed.ttf  
  inflating: NotoSansThaiUI-SemiCondensedBlack.ttf  
  inflating: NotoSansThaiUI-SemiCondensedBold.ttf  
  inflating: NotoSansThaiUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansThaiUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansThaiUI-SemiCondensedLight.ttf  
  inflating: NotoSansThaiUI-SemiCondensedMedium.ttf  
  inflating: NotoSansThaiUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansThaiUI-SemiCondensedThin.ttf  
  inflating: NotoSansThaiUI-Thin.ttf  
  inflating: NotoSansTibetan-Bold.ttf  
  inflating: NotoSansTibetan-Regular.ttf  
  inflating: NotoSansTifinagh-Regular.ttf  
  inflating: NotoSansUgaritic-Regular.ttf  
  inflating: NotoSansVai-Regular.ttf  
  inflating: NotoSansYi-Regular.ttf  
  inflating: NotoSerif-Black.ttf     
  inflating: NotoSerif-BlackItalic.ttf  
  inflating: NotoSerif-Bold.ttf      
  inflating: NotoSerif-BoldItalic.ttf  
  inflating: NotoSerif-Condensed.ttf  
  inflating: NotoSerif-CondensedBlack.ttf  
  inflating: NotoSerif-CondensedBlackItalic.ttf  
  inflating: NotoSerif-CondensedBold.ttf  
  inflating: NotoSerif-CondensedBoldItalic.ttf  
  inflating: NotoSerif-CondensedExtraBold.ttf  
  inflating: NotoSerif-CondensedExtraBoldItalic.ttf  
  inflating: NotoSerif-CondensedExtraLight.ttf  
  inflating: NotoSerif-CondensedExtraLightItalic.ttf  
  inflating: NotoSerif-CondensedItalic.ttf  
  inflating: NotoSerif-CondensedLight.ttf  
  inflating: NotoSerif-CondensedLightItalic.ttf  
  inflating: NotoSerif-CondensedMedium.ttf  
  inflating: NotoSerif-CondensedMediumItalic.ttf  
  inflating: NotoSerif-CondensedSemiBold.ttf  
  inflating: NotoSerif-CondensedSemiBoldItalic.ttf  
  inflating: NotoSerif-CondensedThin.ttf  
  inflating: NotoSerif-CondensedThinItalic.ttf  
  inflating: NotoSerif-ExtraBold.ttf  
  inflating: NotoSerif-ExtraBoldItalic.ttf  
  inflating: NotoSerif-ExtraCondensed.ttf  
  inflating: NotoSerif-ExtraCondensedBlack.ttf  
  inflating: NotoSerif-ExtraCondensedBlackItalic.ttf  
  inflating: NotoSerif-ExtraCondensedBold.ttf  
  inflating: NotoSerif-ExtraCondensedBoldItalic.ttf  
  inflating: NotoSerif-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerif-ExtraCondensedExtraBoldItalic.ttf  
  inflating: NotoSerif-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerif-ExtraCondensedExtraLightItalic.ttf  
  inflating: NotoSerif-ExtraCondensedItalic.ttf  
  inflating: NotoSerif-ExtraCondensedLight.ttf  
  inflating: NotoSerif-ExtraCondensedLightItalic.ttf  
  inflating: NotoSerif-ExtraCondensedMedium.ttf  
  inflating: NotoSerif-ExtraCondensedMediumItalic.ttf  
  inflating: NotoSerif-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerif-ExtraCondensedSemiBoldItalic.ttf  
  inflating: NotoSerif-ExtraCondensedThin.ttf  
  inflating: NotoSerif-ExtraCondensedThinItalic.ttf  
  inflating: NotoSerif-ExtraLight.ttf  
  inflating: NotoSerif-ExtraLightItalic.ttf  
  inflating: NotoSerif-Italic.ttf    
  inflating: NotoSerif-Light.ttf     
  inflating: NotoSerif-LightItalic.ttf  
  inflating: NotoSerif-Medium.ttf    
  inflating: NotoSerif-MediumItalic.ttf  
  inflating: NotoSerif-Regular.ttf   
  inflating: NotoSerif-SemiBold.ttf  
  inflating: NotoSerif-SemiBoldItalic.ttf  
  inflating: NotoSerif-SemiCondensed.ttf  
  inflating: NotoSerif-SemiCondensedBlack.ttf  
  inflating: NotoSerif-SemiCondensedBlackItalic.ttf  
  inflating: NotoSerif-SemiCondensedBold.ttf  
  inflating: NotoSerif-SemiCondensedBoldItalic.ttf  
  inflating: NotoSerif-SemiCondensedExtraBold.ttf  
  inflating: NotoSerif-SemiCondensedExtraBoldItalic.ttf  
  inflating: NotoSerif-SemiCondensedExtraLight.ttf  
  inflating: NotoSerif-SemiCondensedExtraLightItalic.ttf  
  inflating: NotoSerif-SemiCondensedItalic.ttf  
  inflating: NotoSerif-SemiCondensedLight.ttf  
  inflating: NotoSerif-SemiCondensedLightItalic.ttf  
  inflating: NotoSerif-SemiCondensedMedium.ttf  
  inflating: NotoSerif-SemiCondensedMediumItalic.ttf  
  inflating: NotoSerif-SemiCondensedSemiBold.ttf  
  inflating: NotoSerif-SemiCondensedSemiBoldItalic.ttf  
  inflating: NotoSerif-SemiCondensedThin.ttf  
  inflating: NotoSerif-SemiCondensedThinItalic.ttf  
  inflating: NotoSerif-Thin.ttf      
  inflating: NotoSerif-ThinItalic.ttf  
  inflating: NotoSerifArmenian-Black.ttf  
  inflating: NotoSerifArmenian-Bold.ttf  
  inflating: NotoSerifArmenian-Condensed.ttf  
  inflating: NotoSerifArmenian-CondensedBlack.ttf  
  inflating: NotoSerifArmenian-CondensedBold.ttf  
  inflating: NotoSerifArmenian-CondensedExtraBold.ttf  
  inflating: NotoSerifArmenian-CondensedExtraLight.ttf  
  inflating: NotoSerifArmenian-CondensedLight.ttf  
  inflating: NotoSerifArmenian-CondensedMedium.ttf  
  inflating: NotoSerifArmenian-CondensedSemiBold.ttf  
  inflating: NotoSerifArmenian-CondensedThin.ttf  
  inflating: NotoSerifArmenian-ExtraBold.ttf  
  inflating: NotoSerifArmenian-ExtraCondensed.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedBlack.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedBold.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedLight.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedMedium.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedThin.ttf  
  inflating: NotoSerifArmenian-ExtraLight.ttf  
  inflating: NotoSerifArmenian-Light.ttf  
  inflating: NotoSerifArmenian-Medium.ttf  
  inflating: NotoSerifArmenian-Regular.ttf  
  inflating: NotoSerifArmenian-SemiBold.ttf  
  inflating: NotoSerifArmenian-SemiCondensed.ttf  
  inflating: NotoSerifArmenian-SemiCondensedBlack.ttf  
  inflating: NotoSerifArmenian-SemiCondensedBold.ttf  
  inflating: NotoSerifArmenian-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifArmenian-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifArmenian-SemiCondensedLight.ttf  
  inflating: NotoSerifArmenian-SemiCondensedMedium.ttf  
  inflating: NotoSerifArmenian-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifArmenian-SemiCondensedThin.ttf  
  inflating: NotoSerifArmenian-Thin.ttf  
  inflating: NotoSerifBengali-Bold.ttf  
  inflating: NotoSerifBengali-Regular.ttf  
  inflating: NotoSerifCJKjp-Black.otf  
  inflating: NotoSerifCJKjp-Bold.otf  
  inflating: NotoSerifCJKjp-ExtraLight.otf  
  inflating: NotoSerifCJKjp-Light.otf  
  inflating: NotoSerifCJKjp-Medium.otf  
  inflating: NotoSerifCJKjp-Regular.otf  
  inflating: NotoSerifCJKjp-SemiBold.otf  
  inflating: NotoSerifCJKkr-Black.otf  
  inflating: NotoSerifCJKkr-Bold.otf  
  inflating: NotoSerifCJKkr-ExtraLight.otf  
  inflating: NotoSerifCJKkr-Light.otf  
  inflating: NotoSerifCJKkr-Medium.otf  
  inflating: NotoSerifCJKkr-Regular.otf  
  inflating: NotoSerifCJKkr-SemiBold.otf  
  inflating: NotoSerifCJKsc-Black.otf  
  inflating: NotoSerifCJKsc-Bold.otf  
  inflating: NotoSerifCJKsc-ExtraLight.otf  
  inflating: NotoSerifCJKsc-Light.otf  
  inflating: NotoSerifCJKsc-Medium.otf  
  inflating: NotoSerifCJKsc-Regular.otf  
  inflating: NotoSerifCJKsc-SemiBold.otf  
  inflating: NotoSerifCJKtc-Black.otf  
  inflating: NotoSerifCJKtc-Bold.otf  
  inflating: NotoSerifCJKtc-ExtraLight.otf  
  inflating: NotoSerifCJKtc-Light.otf  
  inflating: NotoSerifCJKtc-Medium.otf  
  inflating: NotoSerifCJKtc-Regular.otf  
  inflating: NotoSerifCJKtc-SemiBold.otf  
  inflating: NotoSerifDevanagari-Bold.ttf  
  inflating: NotoSerifDevanagari-Regular.ttf  
  inflating: NotoSerifDisplay-Black.ttf  
  inflating: NotoSerifDisplay-BlackItalic.ttf  
  inflating: NotoSerifDisplay-Bold.ttf  
  inflating: NotoSerifDisplay-BoldItalic.ttf  
  inflating: NotoSerifDisplay-Condensed.ttf  
  inflating: NotoSerifDisplay-CondensedBlack.ttf  
  inflating: NotoSerifDisplay-CondensedBlackItalic.ttf  
  inflating: NotoSerifDisplay-CondensedBold.ttf  
  inflating: NotoSerifDisplay-CondensedBoldItalic.ttf  
  inflating: NotoSerifDisplay-CondensedExtraBold.ttf  
  inflating: NotoSerifDisplay-CondensedExtraBoldItalic.ttf  
  inflating: NotoSerifDisplay-CondensedExtraLight.ttf  
  inflating: NotoSerifDisplay-CondensedExtraLightItalic.ttf  
  inflating: NotoSerifDisplay-CondensedItalic.ttf  
  inflating: NotoSerifDisplay-CondensedLight.ttf  
  inflating: NotoSerifDisplay-CondensedLightItalic.ttf  
  inflating: NotoSerifDisplay-CondensedMedium.ttf  
  inflating: NotoSerifDisplay-CondensedMediumItalic.ttf  
  inflating: NotoSerifDisplay-CondensedSemiBold.ttf  
  inflating: NotoSerifDisplay-CondensedSemiBoldItalic.ttf  
  inflating: NotoSerifDisplay-CondensedThin.ttf  
  inflating: NotoSerifDisplay-CondensedThinItalic.ttf  
  inflating: NotoSerifDisplay-ExtraBold.ttf  
  inflating: NotoSerifDisplay-ExtraBoldItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensed.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedBlack.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedBlackItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedBold.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedBoldItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedExtraBoldItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedExtraLightItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedLight.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedLightItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedMedium.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedMediumItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedSemiBoldItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedThin.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedThinItalic.ttf  
  inflating: NotoSerifDisplay-ExtraLight.ttf  
  inflating: NotoSerifDisplay-ExtraLightItalic.ttf  
  inflating: NotoSerifDisplay-Italic.ttf  
  inflating: NotoSerifDisplay-Light.ttf  
  inflating: NotoSerifDisplay-LightItalic.ttf  
  inflating: NotoSerifDisplay-Medium.ttf  
  inflating: NotoSerifDisplay-MediumItalic.ttf  
  inflating: NotoSerifDisplay-Regular.ttf  
  inflating: NotoSerifDisplay-SemiBold.ttf  
  inflating: NotoSerifDisplay-SemiBoldItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensed.ttf  
  inflating: NotoSerifDisplay-SemiCondensedBlack.ttf  
  inflating: NotoSerifDisplay-SemiCondensedBlackItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedBold.ttf  
  inflating: NotoSerifDisplay-SemiCondensedBoldItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifDisplay-SemiCondensedExtraBoldItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifDisplay-SemiCondensedExtraLightItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedLight.ttf  
  inflating: NotoSerifDisplay-SemiCondensedLightItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedMedium.ttf  
  inflating: NotoSerifDisplay-SemiCondensedMediumItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifDisplay-SemiCondensedSemiBoldItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedThin.ttf  
  inflating: NotoSerifDisplay-SemiCondensedThinItalic.ttf  
  inflating: NotoSerifDisplay-Thin.ttf  
  inflating: NotoSerifDisplay-ThinItalic.ttf  
  inflating: NotoSerifEthiopic-Black.ttf  
  inflating: NotoSerifEthiopic-Bold.ttf  
  inflating: NotoSerifEthiopic-Condensed.ttf  
  inflating: NotoSerifEthiopic-CondensedBlack.ttf  
  inflating: NotoSerifEthiopic-CondensedBold.ttf  
  inflating: NotoSerifEthiopic-CondensedExtraBold.ttf  
  inflating: NotoSerifEthiopic-CondensedExtraLight.ttf  
  inflating: NotoSerifEthiopic-CondensedLight.ttf  
  inflating: NotoSerifEthiopic-CondensedMedium.ttf  
  inflating: NotoSerifEthiopic-CondensedSemiBold.ttf  
  inflating: NotoSerifEthiopic-CondensedThin.ttf  
  inflating: NotoSerifEthiopic-ExtraBold.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensed.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedBlack.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedBold.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedLight.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedMedium.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedThin.ttf  
  inflating: NotoSerifEthiopic-ExtraLight.ttf  
  inflating: NotoSerifEthiopic-Light.ttf  
  inflating: NotoSerifEthiopic-Medium.ttf  
  inflating: NotoSerifEthiopic-Regular.ttf  
  inflating: NotoSerifEthiopic-SemiBold.ttf  
  inflating: NotoSerifEthiopic-SemiCondensed.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedBlack.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedBold.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedLight.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedMedium.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedThin.ttf  
  inflating: NotoSerifEthiopic-Thin.ttf  
  inflating: NotoSerifGeorgian-Black.ttf  
  inflating: NotoSerifGeorgian-Bold.ttf  
  inflating: NotoSerifGeorgian-Condensed.ttf  
  inflating: NotoSerifGeorgian-CondensedBlack.ttf  
  inflating: NotoSerifGeorgian-CondensedBold.ttf  
  inflating: NotoSerifGeorgian-CondensedExtraBold.ttf  
  inflating: NotoSerifGeorgian-CondensedExtraLight.ttf  
  inflating: NotoSerifGeorgian-CondensedLight.ttf  
  inflating: NotoSerifGeorgian-CondensedMedium.ttf  
  inflating: NotoSerifGeorgian-CondensedSemiBold.ttf  
  inflating: NotoSerifGeorgian-CondensedThin.ttf  
  inflating: NotoSerifGeorgian-ExtraBold.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensed.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedBlack.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedBold.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedLight.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedMedium.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedThin.ttf  
  inflating: NotoSerifGeorgian-ExtraLight.ttf  
  inflating: NotoSerifGeorgian-Light.ttf  
  inflating: NotoSerifGeorgian-Medium.ttf  
  inflating: NotoSerifGeorgian-Regular.ttf  
  inflating: NotoSerifGeorgian-SemiBold.ttf  
  inflating: NotoSerifGeorgian-SemiCondensed.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedBlack.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedBold.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedLight.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedMedium.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedThin.ttf  
  inflating: NotoSerifGeorgian-Thin.ttf  
  inflating: NotoSerifGujarati-Bold.ttf  
  inflating: NotoSerifGujarati-Regular.ttf  
  inflating: NotoSerifHebrew-Black.ttf  
  inflating: NotoSerifHebrew-Bold.ttf  
  inflating: NotoSerifHebrew-Condensed.ttf  
  inflating: NotoSerifHebrew-CondensedBlack.ttf  
  inflating: NotoSerifHebrew-CondensedBold.ttf  
  inflating: NotoSerifHebrew-CondensedExtraBold.ttf  
  inflating: NotoSerifHebrew-CondensedExtraLight.ttf  
  inflating: NotoSerifHebrew-CondensedLight.ttf  
  inflating: NotoSerifHebrew-CondensedMedium.ttf  
  inflating: NotoSerifHebrew-CondensedSemiBold.ttf  
  inflating: NotoSerifHebrew-CondensedThin.ttf  
  inflating: NotoSerifHebrew-ExtraBold.ttf  
  inflating: NotoSerifHebrew-ExtraCondensed.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedBlack.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedBold.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedLight.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedMedium.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedThin.ttf  
  inflating: NotoSerifHebrew-ExtraLight.ttf  
  inflating: NotoSerifHebrew-Light.ttf  
  inflating: NotoSerifHebrew-Medium.ttf  
  inflating: NotoSerifHebrew-Regular.ttf  
  inflating: NotoSerifHebrew-SemiBold.ttf  
  inflating: NotoSerifHebrew-SemiCondensed.ttf  
  inflating: NotoSerifHebrew-SemiCondensedBlack.ttf  
  inflating: NotoSerifHebrew-SemiCondensedBold.ttf  
  inflating: NotoSerifHebrew-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifHebrew-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifHebrew-SemiCondensedLight.ttf  
  inflating: NotoSerifHebrew-SemiCondensedMedium.ttf  
  inflating: NotoSerifHebrew-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifHebrew-SemiCondensedThin.ttf  
  inflating: NotoSerifHebrew-Thin.ttf  
  inflating: NotoSerifKannada-Bold.ttf  
  inflating: NotoSerifKannada-Regular.ttf  
  inflating: NotoSerifKhmer-Black.ttf  
  inflating: NotoSerifKhmer-Bold.ttf  
  inflating: NotoSerifKhmer-Condensed.ttf  
  inflating: NotoSerifKhmer-CondensedBlack.ttf  
  inflating: NotoSerifKhmer-CondensedBold.ttf  
  inflating: NotoSerifKhmer-CondensedExtraBold.ttf  
  inflating: NotoSerifKhmer-CondensedExtraLight.ttf  
  inflating: NotoSerifKhmer-CondensedLight.ttf  
  inflating: NotoSerifKhmer-CondensedMedium.ttf  
  inflating: NotoSerifKhmer-CondensedSemiBold.ttf  
  inflating: NotoSerifKhmer-CondensedThin.ttf  
  inflating: NotoSerifKhmer-ExtraBold.ttf  
  inflating: NotoSerifKhmer-ExtraCondensed.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedBlack.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedBold.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedLight.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedMedium.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedThin.ttf  
  inflating: NotoSerifKhmer-ExtraLight.ttf  
  inflating: NotoSerifKhmer-Light.ttf  
  inflating: NotoSerifKhmer-Medium.ttf  
  inflating: NotoSerifKhmer-Regular.ttf  
  inflating: NotoSerifKhmer-SemiBold.ttf  
  inflating: NotoSerifKhmer-SemiCondensed.ttf  
  inflating: NotoSerifKhmer-SemiCondensedBlack.ttf  
  inflating: NotoSerifKhmer-SemiCondensedBold.ttf  
  inflating: NotoSerifKhmer-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifKhmer-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifKhmer-SemiCondensedLight.ttf  
  inflating: NotoSerifKhmer-SemiCondensedMedium.ttf  
  inflating: NotoSerifKhmer-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifKhmer-SemiCondensedThin.ttf  
  inflating: NotoSerifKhmer-Thin.ttf  
  inflating: NotoSerifLao-Black.ttf  
  inflating: NotoSerifLao-Bold.ttf   
  inflating: NotoSerifLao-Condensed.ttf  
  inflating: NotoSerifLao-CondensedBlack.ttf  
  inflating: NotoSerifLao-CondensedBold.ttf  
  inflating: NotoSerifLao-CondensedExtraBold.ttf  
  inflating: NotoSerifLao-CondensedExtraLight.ttf  
  inflating: NotoSerifLao-CondensedLight.ttf  
  inflating: NotoSerifLao-CondensedMedium.ttf  
  inflating: NotoSerifLao-CondensedSemiBold.ttf  
  inflating: NotoSerifLao-CondensedThin.ttf  
  inflating: NotoSerifLao-ExtraBold.ttf  
  inflating: NotoSerifLao-ExtraCondensed.ttf  
  inflating: NotoSerifLao-ExtraCondensedBlack.ttf  
  inflating: NotoSerifLao-ExtraCondensedBold.ttf  
  inflating: NotoSerifLao-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifLao-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifLao-ExtraCondensedLight.ttf  
  inflating: NotoSerifLao-ExtraCondensedMedium.ttf  
  inflating: NotoSerifLao-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifLao-ExtraCondensedThin.ttf  
  inflating: NotoSerifLao-ExtraLight.ttf  
  inflating: NotoSerifLao-Light.ttf  
  inflating: NotoSerifLao-Medium.ttf  
  inflating: NotoSerifLao-Regular.ttf  
  inflating: NotoSerifLao-SemiBold.ttf  
  inflating: NotoSerifLao-SemiCondensed.ttf  
  inflating: NotoSerifLao-SemiCondensedBlack.ttf  
  inflating: NotoSerifLao-SemiCondensedBold.ttf  
  inflating: NotoSerifLao-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifLao-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifLao-SemiCondensedLight.ttf  
  inflating: NotoSerifLao-SemiCondensedMedium.ttf  
  inflating: NotoSerifLao-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifLao-SemiCondensedThin.ttf  
  inflating: NotoSerifLao-Thin.ttf   
  inflating: NotoSerifMalayalam-Bold.ttf  
  inflating: NotoSerifMalayalam-Regular.ttf  
  inflating: NotoSerifMyanmar-Black.ttf  
  inflating: NotoSerifMyanmar-Bold.ttf  
  inflating: NotoSerifMyanmar-Condensed.ttf  
  inflating: NotoSerifMyanmar-CondensedBlack.ttf  
  inflating: NotoSerifMyanmar-CondensedBold.ttf  
  inflating: NotoSerifMyanmar-CondensedExtraBold.ttf  
  inflating: NotoSerifMyanmar-CondensedExtraLight.ttf  
  inflating: NotoSerifMyanmar-CondensedLight.ttf  
  inflating: NotoSerifMyanmar-CondensedMedium.ttf  
  inflating: NotoSerifMyanmar-CondensedSemiBold.ttf  
  inflating: NotoSerifMyanmar-CondensedThin.ttf  
  inflating: NotoSerifMyanmar-ExtraBold.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensed.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedBlack.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedBold.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedLight.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedMedium.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedThin.ttf  
  inflating: NotoSerifMyanmar-ExtraLight.ttf  
  inflating: NotoSerifMyanmar-Light.ttf  
  inflating: NotoSerifMyanmar-Medium.ttf  
  inflating: NotoSerifMyanmar-Regular.ttf  
  inflating: NotoSerifMyanmar-SemiBold.ttf  
  inflating: NotoSerifMyanmar-SemiCondensed.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedBlack.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedBold.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedLight.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedMedium.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedThin.ttf  
  inflating: NotoSerifMyanmar-Thin.ttf  
  inflating: NotoSerifSinhala-Black.ttf  
  inflating: NotoSerifSinhala-Bold.ttf  
  inflating: NotoSerifSinhala-ExtraBold.ttf  
  inflating: NotoSerifSinhala-ExtraLight.ttf  
  inflating: NotoSerifSinhala-Light.ttf  
  inflating: NotoSerifSinhala-Medium.ttf  
  inflating: NotoSerifSinhala-Regular.ttf  
  inflating: NotoSerifSinhala-SemiBold.ttf  
  inflating: NotoSerifSinhala-Thin.ttf  
  inflating: NotoSerifTamil-Black.ttf  
  inflating: NotoSerifTamil-Bold.ttf  
  inflating: NotoSerifTamil-Condensed.ttf  
  inflating: NotoSerifTamil-CondensedBlack.ttf  
  inflating: NotoSerifTamil-CondensedBold.ttf  
  inflating: NotoSerifTamil-CondensedExtraBold.ttf  
  inflating: NotoSerifTamil-CondensedExtraLight.ttf  
  inflating: NotoSerifTamil-CondensedLight.ttf  
  inflating: NotoSerifTamil-CondensedMedium.ttf  
  inflating: NotoSerifTamil-CondensedSemiBold.ttf  
  inflating: NotoSerifTamil-CondensedThin.ttf  
  inflating: NotoSerifTamil-ExtraBold.ttf  
  inflating: NotoSerifTamil-ExtraCondensed.ttf  
  inflating: NotoSerifTamil-ExtraCondensedBlack.ttf  
  inflating: NotoSerifTamil-ExtraCondensedBold.ttf  
  inflating: NotoSerifTamil-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifTamil-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifTamil-ExtraCondensedLight.ttf  
  inflating: NotoSerifTamil-ExtraCondensedMedium.ttf  
  inflating: NotoSerifTamil-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifTamil-ExtraCondensedThin.ttf  
  inflating: NotoSerifTamil-ExtraLight.ttf  
  inflating: NotoSerifTamil-Light.ttf  
  inflating: NotoSerifTamil-Medium.ttf  
  inflating: NotoSerifTamil-Regular.ttf  
  inflating: NotoSerifTamil-SemiBold.ttf  
  inflating: NotoSerifTamil-SemiCondensed.ttf  
  inflating: NotoSerifTamil-SemiCondensedBlack.ttf  
  inflating: NotoSerifTamil-SemiCondensedBold.ttf  
  inflating: NotoSerifTamil-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifTamil-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifTamil-SemiCondensedLight.ttf  
  inflating: NotoSerifTamil-SemiCondensedMedium.ttf  
  inflating: NotoSerifTamil-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifTamil-SemiCondensedThin.ttf  
  inflating: NotoSerifTamil-Thin.ttf  
  inflating: NotoSerifTelugu-Bold.ttf  
  inflating: NotoSerifTelugu-Regular.ttf  
  inflating: NotoSerifThai-Black.ttf  
  inflating: NotoSerifThai-Bold.ttf  
  inflating: NotoSerifThai-Condensed.ttf  
  inflating: NotoSerifThai-CondensedBlack.ttf  
  inflating: NotoSerifThai-CondensedBold.ttf  
  inflating: NotoSerifThai-CondensedExtraBold.ttf  
  inflating: NotoSerifThai-CondensedExtraLight.ttf  
  inflating: NotoSerifThai-CondensedLight.ttf  
  inflating: NotoSerifThai-CondensedMedium.ttf  
  inflating: NotoSerifThai-CondensedSemiBold.ttf  
  inflating: NotoSerifThai-CondensedThin.ttf  
  inflating: NotoSerifThai-ExtraBold.ttf  
  inflating: NotoSerifThai-ExtraCondensed.ttf  
  inflating: NotoSerifThai-ExtraCondensedBlack.ttf  
  inflating: NotoSerifThai-ExtraCondensedBold.ttf  
  inflating: NotoSerifThai-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifThai-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifThai-ExtraCondensedLight.ttf  
  inflating: NotoSerifThai-ExtraCondensedMedium.ttf  
  inflating: NotoSerifThai-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifThai-ExtraCondensedThin.ttf  
  inflating: NotoSerifThai-ExtraLight.ttf  
  inflating: NotoSerifThai-Light.ttf  
  inflating: NotoSerifThai-Medium.ttf  
  inflating: NotoSerifThai-Regular.ttf  
  inflating: NotoSerifThai-SemiBold.ttf  
  inflating: NotoSerifThai-SemiCondensed.ttf  
  inflating: NotoSerifThai-SemiCondensedBlack.ttf  
  inflating: NotoSerifThai-SemiCondensedBold.ttf  
  inflating: NotoSerifThai-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifThai-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifThai-SemiCondensedLight.ttf  
  inflating: NotoSerifThai-SemiCondensedMedium.ttf  
  inflating: NotoSerifThai-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifThai-SemiCondensedThin.ttf  
  inflating: NotoSerifThai-Thin.ttf  
  inflating: README                  

ターミナル設定変更

Noto Emoji Regular に変更するんだ

fmt_clr_cnst.sh

コード表示

[oracle@centos gg]$ cat fmt_clr_cnst.sh
#!/bin/bash
NORMAL=$(tput sgr0)
FG_RED=$(tput setaf 1)
FG_GREEN=$(tput setaf 2)
FG_YELLOW=$(tput setaf 3)
FG_BLUE=$(tput setaf 4)
FG_MAGENTA=$(tput setaf 5)
FG_CYAN=$(tput setaf 6)
FG_WHITE=$(tput setaf 7)

fmt_clr_func.sh

コード表示

[oracle@centos gg]$ cat fmt_clr_func.sh
#!/bin/bash
source ./fmt_clr_cnst.sh;
fg_red(){
  echo -e "${FG_RED}$*${NORMAL}";
}
fg_green(){
  echo -e "${FG_GREEN}$*${NORMAL}";
}
fg_yellow(){
  echo -e "${FG_YELLOW}$*${NORMAL}";
}
fg_blue(){
  echo -e "${FG_BLUE}$*${NORMAL}";
}
fg_magenta(){
  echo -e "${FG_MAGENTA}$*${NORMAL}";
}
fg_cyan(){
  echo -e "${FG_CYAN}$*${NORMAL}";
}
fg_white(){
  echo -e "${FG_WHITE}$*${NORMAL}";
}

fmt_deco_func.sh

中央揃えにしようとしたなごり。(してない。)

コード表示

[oracle@centos gg]$ cat fmt_deco_func.sh
#!/bin/bash

_lpd(){
  local PD=$1
  local STR=$2
  printf "|%${PD}s|\n" ${STR};
}

_rpd(){
  local PD=$1
  local STR=$2
  printf "|%-${PD}s|\n" ${STR};
}

_aln_ctr(){
  local PD=$1
  local STR=$2
  echo "" | awk '
  {
    PD="'${PD}'"
    STR="'${STR}'"
    printf "%" int(PD+length(STR)/2) "s\n",STR
  }
  '
}

_deco_ful_pd(){
  local RPT=$1
  local MX_RPT=$2
  local ASCII=$3
  local STR=$4
  local PD=$5
  local LN=$(echo ""|awk '
  {
    RPT="'${RPT}'"
    ASCII="'${ASCII}'"
    while(RPT-- >0)printf(ASCII)
  }')
  echo "$(_lpd ${MX_RPT} ${LN})$(_rpd ${PD} ${STR})$(_rpd ${MX_RPT} ${LN})"
}

trap_get_winsize.sh

コード表示

[oracle@centos gg]$ cat trap_get_winsize.sh
#!/bin/bash

trap '_win_sz' WINCH

_win_sz(){
  WIN_Y=$(tput lines)
  WIN_X=$(tput cols)
  :
}

_win_sz

_main.sh

コード表示

[oracle@centos gg]$ cat ./_main.sh
#!/bin/bash

source ./trap_get_winsize.sh
source ./fmt_deco_func.sh
source ./fmt_clr_func.sh

_uni_str(){
  CODE_POINT=$1
  ZERO_PAD=$2
  echo -n -e \\U$(printf "%0${ZERO_PAD}x" ${CODE_POINT})
}

_turn_back(){
  STR=$1
  WID=$2
  fold -w ${WID} <<<${STR}
}

_uni_code(){
  FROM_RN=$1
  TO_RN=$2
  ZERO_PAD=$3
  while read RN;do
    _uni_str ${RN} ${ZERO_PAD}
  done < <(seq ${FROM_RN} ${TO_RN})
}

_main(){
  START_CODE_POINT=$1
  END_CODE_POINT=$2
  ZERO_PAD=$3
  FOLD=$4
  _turn_back $(_uni_code ${START_CODE_POINT} ${END_CODE_POINT} ${ZERO_PAD}) ${FOLD}
}

fg_cyan "$(_deco_ful_pd  30 30 '\\x40' 'Japanese_Hiragana' 30 )"
_main '0x3040' '0x309f' 4 ${WIN_X}
fg_cyan "$(_deco_ful_pd 30 30 '\\x23' 'Japanese_Katakana' 30)"
_main '0x30a0' '0x30ff' 4 ${WIN_X}
fg_cyan "$(_deco_ful_pd 30 30 '\\x25' 'Box_Drawing' 30)"
_main '0x2500' '0x257f' 4 ${WIN_X}
fg_cyan "$(_deco_ful_pd 30 30 '\\x24' 'Miscellaneous_Symbols' 30)"
_main '0x2600' '0x26ff' 4 ${WIN_X}
fg_cyan "$(_deco_ful_pd 30 30 '\\x3d' 'Dingbats' 30)"
_main '0x2700' '0x27ff' 4 ${WIN_X}
fg_cyan "$(_deco_ful_pd 30 30 '\\x2a' 'Arrows,User_Interface' 30)"
_main '0x1f300' '0x1f3ff' 5 ${WIN_X}
fg_cyan "$(_deco_ful_pd 30 30 '\\x26' 'Animal_Symbols' 30)"
_main '0x1f400' '0x1f4ff' 5 ${WIN_X}
fg_cyan "$(_deco_ful_pd 30 30 '\\x2b' 'Emoticons' 30)"
_main '0x1f600' '0x1f64f' 5 ${WIN_X}

実行例

いつも使っているやつだと臨場感伝わりにくいからベタって貼った。

[oracle@centos gg]$ ./_main.sh
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@||Japanese_Hiragana             ||@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
぀ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖ゗゘゙゚゛゜ゝゞゟ
|##############################||Japanese_Katakana             ||##############################|
゠ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿ
|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%||Box_Drawing                   ||%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|
─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿
|$||Miscellaneous_Symbols         ||$|
☀☁☂☃☄★☆☇☈☉☊☋☌☍☎☏☐☑☒☓☔☕☖☗☘☙☚☛☜☝☞☟☠☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯☰☱☲☳☴☵☶☷☸☹☺☻☼☽☾☿♀♁♂♃♄♅♆♇♈♉♊♋♌♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟♠♡♢♣♤♥♦♧♨♩♪♫♬♭♮♯♰♱♲♳♴♵♶♷♸♹♺♻♼♽♾♿⚀⚁⚂⚃⚄⚅⚆⚇⚈⚉⚊⚋⚌⚍⚎⚏⚐⚑⚒⚓⚔⚕⚖⚗⚘⚙⚚⚛⚜⚝⚞⚟⚠⚡⚢⚣⚤⚥⚦⚧⚨⚩⚪⚫⚬⚭⚮⚯⚰⚱⚲⚳⚴⚵⚶⚷⚸⚹⚺⚻⚼⚽⚾⚿⛀⛁⛂⛃⛄⛅⛆⛇⛈⛉⛊⛋⛌⛍⛎⛏⛐⛑⛒⛓⛔⛕⛖⛗⛘⛙⛚⛛⛜⛝⛞⛟⛠⛡⛢⛣⛤⛥⛦⛧⛨⛩⛪⛫⛬⛭⛮⛯⛰⛱⛲⛳⛴⛵⛶⛷⛸⛹⛺⛻⛼⛽⛾⛿
|==============================||Dingbats                      ||==============================|
✀✁✂✃✄✅✆✇✈✉✊✋✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟✠✡✢✣✤✥✦✧✨✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋❌❍❎❏❐❑❒❓❔❕❖❗❘❙❚❛❜❝❞❟❠❡❢❣❤❥❦❧❨❩❪❫❬❭❮❯❰❱❲❳❴❵❶❷❸❹❺❻❼❽❾❿➀➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓➔➕➖➗➘➙➚➛➜➝➞➟➠➡➢➣➤➥➦➧➨➩➪➫➬➭➮➯➰➱➲➳➴➵➶➷➸➹➺➻➼➽➾➿⟀⟁⟂⟃⟄⟅⟆⟇⟈⟉⟊⟋⟌⟍⟎⟏⟐⟑⟒⟓⟔⟕⟖⟗⟘⟙⟚⟛⟜⟝⟞⟟⟠⟡⟢⟣⟤⟥⟦⟧⟨
⟩⟪⟫⟬⟭⟮⟯⟰⟱⟲⟳⟴⟵⟶⟷⟸⟹⟺⟻⟼⟽⟾⟿
|******************************||Arrows,User_Interface         ||******************************|
🌀🌁🌂🌃🌄🌅🌆🌇🌈🌉🌊🌋🌌🌍🌎🌏🌐🌑🌒🌓🌔🌕🌖🌗🌘🌙🌚🌛🌜🌝🌞🌟🌠🌡🌢🌣🌤🌥🌦🌧🌨🌩🌪🌫🌬🌭🌮🌯🌰🌱🌲🌳🌴🌵🌶🌷🌸🌹🌺🌻🌼🌽🌾🌿🍀🍁🍂🍃🍄🍅🍆🍇🍈🍉🍊🍋🍌🍍🍎🍏🍐🍑🍒🍓🍔🍕🍖🍗🍘🍙🍚🍛🍜🍝🍞🍟🍠🍡🍢🍣🍤🍥🍦🍧🍨🍩🍪🍫🍬🍭🍮🍯🍰🍱🍲🍳🍴🍵🍶🍷🍸🍹🍺🍻🍼🍽🍾🍿🎀🎁🎂🎃🎄🎅🎆🎇🎈🎉🎊🎋🎌🎍🎎🎏🎐🎑🎒🎓🎔🎕🎖🎗🎘🎙🎚🎛🎜🎝🎞🎟🎠🎡🎢🎣🎤🎥🎦🎧🎨🎩🎪🎫🎬🎭🎮🎯🎰🎱🎲🎳🎴🎵🎶🎷🎸🎹🎺🎻🎼🎽🎾🎿🏀🏁🏂🏃🏄🏅🏆🏇🏈🏉🏊🏋🏌🏍🏎🏏🏐🏑🏒🏓🏔🏕🏖🏗🏘🏙🏚🏛🏜🏝🏞🏟🏠🏡🏢🏣🏤🏥🏦🏧🏨🏩🏪🏫🏬🏭🏮🏯🏰🏱🏲🏳🏴🏵🏶🏷🏸🏹🏺🏻🏼🏽🏾🏿
|&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&||Animal_Symbols                ||&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&|
🐀🐁🐂🐃🐄🐅🐆🐇🐈🐉🐊🐋🐌🐍🐎🐏🐐🐑🐒🐓🐔🐕🐖🐗🐘🐙🐚🐛🐜🐝🐞🐟🐠🐡🐢🐣🐤🐥🐦🐧🐨🐩🐪🐫🐬🐭🐮🐯🐰🐱🐲🐳🐴🐵🐶🐷🐸🐹🐺🐻🐼🐽🐾🐿👀👁👂👃👄👅👆👇👈👉👊👋👌👍👎👏👐👑👒👓👔👕👖👗👘👙👚👛👜👝👞👟👠👡👢👣👤👥👦👧👨👩👪👫👬👭👮👯👰👱👲👳👴👵👶👷👸👹👺👻👼👽👾👿💀💁💂💃💄💅💆💇💈💉💊💋💌💍💎💏💐💑💒💓💔💕💖💗💘💙💚💛💜💝💞💟💠💡💢💣💤💥💦💧💨💩💪💫💬💭💮💯💰💱💲💳💴💵💶💷💸💹💺💻💼💽💾💿📀📁📂📃📄📅📆📇📈📉📊📋📌📍📎📏📐📑📒📓📔📕📖📗📘📙📚📛📜📝📞📟📠📡📢📣📤📥📦📧📨📩📪📫📬📭📮📯📰📱📲📳📴📵📶📷📸📹📺📻📼📽📾📿
|++++++++++++++++++++++++++++++||Emoticons                     ||++++++++++++++++++++++++++++++|
😀😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😑😒😓😔😕😖😗😘😙😚😛😜😝😞😟😠😡😢😣😤😥😦😧😨😩😪😫😬😭😮😯😰😱😲😳😴😵😶😷😸😹😺😻😼😽😾😿🙀🙁🙂🙃🙄🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏

ターミナルだとこんな感じ。伝わるかなー。

あとがき

githubで製作中のascii artはascii artじゃなくなりそうな予感。。脱線しかしなさそう。まぁ、楽しいからいいか!以上、ありがとうございました。

おまけ

カラフルうんこ基礎編。くそみたいなことに時間費やしたぜ!b^^ fin。


[oracle@centos gg]$ ./___unco___.sh
💩
💩
💩
💩
💩
💩
💩

bashメソッド抜き出しシェルスクリプトを作成した話(しかけ)

tt.shスクリプト

localをはずしてrutineが呼ばれた順にvariableが上書きされていくことを利用しています。

コード表示

[oracle@centos rr]$ cat tt.sh
#!/bin/bash

_arg_prc(){
  ARG_LZ=$1
  ARG_LZ=$(echo "" | awk '
  BEGIN{
    ARG_LZ="'${ARG_LZ}'"
  }
  {
    print ARG_LZ

  }')
  SRC_FNM=$(echo "${ARG_LZ}" | tr ' ' '\n')
}

_cp(){
  FILE_NM=$1
  echo "${FILE_NM}"
  CMD="grep \")\s*{\" "${FILE_NM}" | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh' | xargs -t -I@ bash -c 'cp ${FILE_NM} test/@'"
  eval "${CMD}"
}

_while_prc_cp(){
  SRC_FNM="$1"
  echo "${SRC_FNM}"
  echo "${SRC_FNM}" | while read F;do
    _cp "${F}" 
  done
}

_while_prc_lzup(){
  SRC_FNM="$1"
  echo "${SRC_FNM}" | while read F;do
    _lzup "${F}" 
  done
}

_lzup(){
  SRC_FNM="$1"
  TGT_FNM=$(grep ")\s*{" ${SRC_FNM} | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh')
  echo "${TGT_FNM}"
  RUTINE_NM=$(echo "${TGT_FNM//_test/}" | sed -e 's/.sh//g')
  echo "${RUTINE_NM}"
}

_arg_prc $*
_while_prc_cp "${SRC_FNM}"
_while_prc_lzup "${SRC_FNM}"

t.shスクリプト

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

_build_cmd(){
  START_RN=$1
  END_RN=$2
  FILE_NM=$3
  BUILD_CMD="sed -i -n '""${START_RN}"",""${END_RN}""p""'"" ${FILE_NM}"
}

_first_filter(){
  START_STR=$1
  END_STR=$2
  FILE_NM=$3
  GET_START_RN_CMD="sed -n '/${START_STR}/=' ${FILE_NM} | tail -n 1"
  GET_END_RN_CMD="sed -n '/${END_STR}/=' ${FILE_NM} | tail -n 1"
  START_RN=$(eval "${GET_START_RN_CMD}")
  END_RN=$(eval "${GET_END_RN_CMD}")
}

_second_filter(){
  START_STR=$1
  END_STR=$2
  FILE_NM=$3
  GET_START_RN_CMD="sed -n '/${START_STR}/=' ${FILE_NM} | tail -n 1"
  GET_END_RN_CMD="sed -n '/${END_STR}/=' ${FILE_NM} | head -n 1"
  START_RN=$(eval "${GET_START_RN_CMD}")
  END_RN=$(eval "${GET_END_RN_CMD}")
}

_exec_cmd(){
  BUILD_CMD="$1"
  eval ${BUILD_CMD}
}

_insert_shebang(){
  FILE_NM=$1
  sed -i '1i#!/bin/bash\n' ${FILE_NM}
}

_main(){
  START_STR=$1
  END_STR=$2
  FILE_NM=$3
  _first_filter ${START_STR} ${END_STR} ${FILE_NM}
  _build_cmd ${START_RN} ${END_RN} ${FILE_NM}
  _exec_cmd "${BUILD_CMD}"
  _second_filter ${START_STR} ${END_STR} ${FILE_NM}
  _build_cmd ${START_RN} ${END_RN} ${FILE_NM}
  _exec_cmd "${BUILD_CMD}"
  _insert_shebang ${FILE_NM}
}

_main $1 $2 $3

tt.sh実行

コード表示

[oracle@centos rr]$ ./tt.sh "test/make/\\x2a.sh\\x20util/\\x2a.sh"
test/make/*.sh
util/*.sh
test/make/*.sh
bash -c cp test/make/*.sh test/_test_call_dynamic_cmd.sh 
bash -c cp test/make/*.sh test/_test_cmd_test_clean.sh 
bash -c cp test/make/*.sh test/_test_grp.sh 
bash -c cp test/make/*.sh test/_test_join.sh 
bash -c cp test/make/*.sh test/_test_split.sh 
bash -c cp test/make/*.sh test/_test_replica_cmd.sh 
bash -c cp test/make/*.sh test/_test_sort_cmd_with_str.sh 
bash -c cp test/make/*.sh test/_test_sort_cmd_with_numkey.sh 
bash -c cp test/make/*.sh test/_test_replace_cmd.sh 
bash -c cp test/make/*.sh test/_test_grp_rn.sh 
bash -c cp test/make/*.sh test/_test_mk_decopd_dynamic_cmd_non_tac.sh 
bash -c cp test/make/*.sh test/_test_mk_decopd_dynamic_cmd_tac.sh 
bash -c cp test/make/*.sh test/_test_mk_pd_dynamic_cmd_tac.sh 
bash -c cp test/make/*.sh test/_test_mk_pd_dynamic_cmd_non_tac.sh 
bash -c cp test/make/*.sh test/_test_mk_ascii_dynamic_cmd.sh 
bash -c cp test/make/*.sh test/_test_mk_ascii_code_non_lf.sh 
bash -c cp test/make/*.sh test/_test_mk_ascii_code.sh 
bash -c cp test/make/*.sh test/_test_mk_ascii_char_non_lf.sh 
bash -c cp test/make/*.sh test/_test_mk_ascii_char.sh 
bash -c cp test/make/*.sh test/_test_radical_replica_str.sh 
bash -c cp test/make/*.sh test/_test_gradual_non_tac_replica_str.sh 
bash -c cp test/make/*.sh test/_test_gradual_tac_replica_str.sh 
bash -c cp test/make/*.sh test/_test_mk_pd_tac_cmd.sh 
util/*.sh
bash -c cp util/*.sh test/_test_lpd.sh 
bash -c cp util/*.sh test/_test_rpd.sh 
bash -c cp util/*.sh test/_test_deco_ful_rev.sh 
bash -c cp util/*.sh test/_test_deco_ful.sh 
bash -c cp util/*.sh test/_test_deco_ful_pd.sh 
bash -c cp util/*.sh test/_test_deco_lft_lpd.sh 
bash -c cp util/*.sh test/_test_deco_lft.sh 
bash -c cp util/*.sh test/_test_deco_rgt_rpd.sh 
bash -c cp util/*.sh test/_test_deco_rgt.sh 
_test_call_dynamic_cmd.sh
_test_cmd_test_clean.sh
_test_grp.sh
_test_join.sh
_test_split.sh
_test_replica_cmd.sh
_test_sort_cmd_with_str.sh
_test_sort_cmd_with_numkey.sh
_test_replace_cmd.sh
_test_grp_rn.sh
_test_mk_decopd_dynamic_cmd_non_tac.sh
_test_mk_decopd_dynamic_cmd_tac.sh
_test_mk_pd_dynamic_cmd_tac.sh
_test_mk_pd_dynamic_cmd_non_tac.sh
_test_mk_ascii_dynamic_cmd.sh
_test_mk_ascii_code_non_lf.sh
_test_mk_ascii_code.sh
_test_mk_ascii_char_non_lf.sh
_test_mk_ascii_char.sh
_test_radical_replica_str.sh
_test_gradual_non_tac_replica_str.sh
_test_gradual_tac_replica_str.sh
_test_mk_pd_tac_cmd.sh
_call_dynamic_cmd
_cmd_clean
_grp
_join
_split
_replica_cmd
_sort_cmd_with_str
_sort_cmd_with_numkey
_replace_cmd
_grp_rn
_mk_decopd_dynamic_cmd_non_tac
_mk_decopd_dynamic_cmd_tac
_mk_pd_dynamic_cmd_tac
_mk_pd_dynamic_cmd_non_tac
_mk_ascii_dynamic_cmd
_mk_ascii_code_non_lf
_mk_ascii_code
_mk_ascii_char_non_lf
_mk_ascii_char
_radical_replica_str
_gradual_non_tac_replica_str
_gradual_tac_replica_str
_mk_pd_tac_cmd
_test_lpd.sh
_test_rpd.sh
_test_deco_ful_rev.sh
_test_deco_ful.sh
_test_deco_ful_pd.sh
_test_deco_lft_lpd.sh
_test_deco_lft.sh
_test_deco_rgt_rpd.sh
_test_deco_rgt.sh
_lpd
_rpd
_deco_ful_rev
_deco_ful
_deco_ful_pd
_deco_lft_lpd
_deco_lft
_deco_rgt_rpd
_deco_rgt
[oracle@centos rr]$ tree test
test
├── __test.sh
├── _test_call_dynamic_cmd.sh
├── _test_cmd_test_clean.sh
├── _test_deco_ful.sh
├── _test_deco_ful_pd.sh
├── _test_deco_ful_rev.sh
├── _test_deco_lft.sh
├── _test_deco_lft_lpd.sh
├── _test_deco_rgt.sh
├── _test_deco_rgt_rpd.sh
├── _test_gradual_non_tac_replica_str.sh
├── _test_gradual_tac_replica_str.sh
├── _test_grp.sh
├── _test_grp_rn.sh
├── _test_join.sh
├── _test_lpd.sh
├── _test_mk_ascii_char.sh
├── _test_mk_ascii_char_non_lf.sh
├── _test_mk_ascii_code.sh
├── _test_mk_ascii_code_non_lf.sh
├── _test_mk_ascii_dynamic_cmd.sh
├── _test_mk_decopd_dynamic_cmd_non_tac.sh
├── _test_mk_decopd_dynamic_cmd_tac.sh
├── _test_mk_pd_dynamic_cmd_non_tac.sh
├── _test_mk_pd_dynamic_cmd_tac.sh
├── _test_mk_pd_tac_cmd.sh
├── _test_radical_replica_str.sh
├── _test_replace_cmd.sh
├── _test_replica_cmd.sh
├── _test_rpd.sh
├── _test_sort_cmd_with_numkey.sh
├── _test_sort_cmd_with_str.sh
├── _test_split.sh
├── make
│   └── mk_exe_cmd.sh
├── oput
└── tmp

3 directories, 34 files

t.sh実行

とりま一つだけ

コード表示

[oracle@centos rr]$ cat test/_test_split.sh
#!/bin/bash

_call_dynamic_cmd(){
  while read cmd;do
    eval ${cmd};
  done < <(cat $(pwd)/test/oput/mk_dynamic_cmd);
}

_cmd_test_clean(){
  rm -rf $(pwd)/test/{tmp,oput}/*
}

_grp(){
  local RN=$1
  local GRP=$2
  while read LINE;do
     echo ${LINE} | sed -e s/GRP/${GRP}/ | bash;
  done < <(seq ${RN} | xargs -I@ bash -c 'echo echo $\(\(@%GRP\)\)')
}

_join(){
  local LFT=$1
  local RGT=$2
  local TGT_FILE=$3
  paste -d ' ' ${LFT} ${RGT} > ${TGT_FILE}
}

_split(){
  local SRC_FILE=$1
  local TGT_FILE=$2
  cat ${SRC_FILE} | awk '
  BEGIN{
    TGT_FILE="'${TGT_FILE}'"
  }
  {
    print > TGT_FILE"_split_"$1
  }
  '
}

_replica_cmd(){
  local LINE_START=$1
  local LINE_END=$2
  local SRC_FILE=$3
  local TGT_FILE=$4
  seq ${LINE_START} ${LINE_END} | while read RN;do
    cat ${SRC_FILE}
  done > ${TGT_FILE}
}

_sort_cmd_with_str(){
  local SORT_KEY=$1
  local SRC_FILE=$2
  local TGT_FILE=$3
  sort -k ${SORT_KEY},${SORT_KEY} ${SRC_FILE} >> ${TGT_FILE}
}

_sort_cmd_with_numkey(){
  local SORT_KEY=$1
  local SRC_FILE=$2
  local TGT_FILE=$3
  sort -n -k ${SORT_KEY},${SORT_KEY} ${SRC_FILE} >> ${TGT_FILE}
}

_replace_cmd(){
  local LINE_START=$1
  local LINE_END=$2
  local TGT_FILE=$3
  while read F;do
    cat ${F} | nl | awk '
    BEGIN{
    }
    {
      print $3"\x20"$1"\x20"$5"\x20"$6;
    }
    '
  done < <((find $(pwd)/test/tmp -type f -name "*split*")) > ${TGT_FILE}
}

_grp_rn(){
  local LINE_START=$1
  local LINE_END=$2
  local REPLICA=$3
  local ZERO_PAD=$4
  local PLAIN_FILE=$(pwd)/test/tmp/mk_dynamic_cmd
  local POSTREPLICA_FILE=$(pwd)/test/tmp/mk_postreplica_dynamic_cmd
  local POSTSORT_FILE=$(pwd)/test/tmp/mk_postsort_dynamic_cmd
  local GRPTMP_FILE=$(pwd)/test/tmp/grptmp
  local POSTGRP_FILE=$(pwd)/test/tmp/mk_postgrp_dynamic_cmd
  local POSTREPLACE_FILE=$(pwd)/test/tmp/mk_postreplace_dynamic_cmd
  local OPUT_FILE=$(pwd)/test/oput/mk_dynamic_cmd
  _replica_cmd ${LINE_START} ${LINE_END} ${PLAIN_FILE} ${POSTREPLICA_FILE}
  _sort_cmd_with_str ${ZERO_PAD} ${POSTREPLICA_FILE} ${POSTSORT_FILE}
  printf "%0${ZERO_PAD}g\n" $(_grp $(cat ${POSTSORT_FILE} | wc -l) $(($(cat ${POSTSORT_FILE} | wc -l)/${REPLICA}))) | sort > ${GRPTMP_FILE}
  _join ${GRPTMP_FILE} ${POSTSORT_FILE} ${POSTGRP_FILE}
  _split ${POSTGRP_FILE} ${POSTGRP_FILE}
  _replace_cmd  ${LINE_START} ${LINE_END} ${POSTREPLACE_FILE}
  cp ${POSTREPLACE_FILE} ${OPUT_FILE}
}

_mk_decopd_dynamic_cmd_non_tac(){
  local LINE_START=$1
  local LINE_END=$2
  local MX_PAD=$3
  local CMD=$4
  local ASCII=$5
  local STR=$6
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
      MX_PAD="'${MX_PAD}'"
      CMD="'${CMD}'"
      ASCII="'${ASCII}'"
      STR="'${STR}'"
    }
    {
      print CMD"\x20"RN"\x20"MX_PAD"\x20\x27"STR"\x27\x20\x27"ASCII"\x27"
    }
    '
  done < <(seq ${LINE_START} ${LINE_END}) >> $(pwd)/test/oput/mk_dynamic_cmd
}

_mk_decopd_dynamic_cmd_tac(){
  local LINE_START=$1
  local LINE_END=$2
  local MX_PAD=$3
  local CMD=$4
  local ASCII=$5
  local STR=$6
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
      MX_PAD="'${MX_PAD}'"
      CMD="'${CMD}'"
      ASCII="'${ASCII}'"
      STR="'${STR}'"
    }
    {
      print CMD"\x20"RN"\x20"MX_PAD"\x20\x27"STR"\x27\x20\x27"ASCII"\x27"
    }
    '
  done < <(seq ${LINE_START} ${LINE_END} | tac) >> $(pwd)/test/oput/mk_dynamic_cmd
}

_mk_pd_dynamic_cmd_tac(){
  local LINE_START=$1
  local LINE_END=$2
  local CMD=$3
  local STR=$4
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
      CMD="'${CMD}'"
      STR="'${STR}'"
    }
    {
      print CMD"\x20"RN"\x20\x27"STR"\x27"
    }
    '
  done < <(seq ${LINE_START} ${LINE_END} | tac) >> $(pwd)/test/oput/mk_dynamic_cmd
}

_mk_pd_dynamic_cmd_non_tac(){
  local LINE_START=$1
  local LINE_END=$2
  local CMD=$3
  local STR=$4
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
      CMD="'${CMD}'"
      STR="'${STR}'"
    }
    {
      print CMD"\x20"RN"\x20\x27"STR"\x27"
    }
    '
  done < <(seq ${LINE_START} ${LINE_END}) >> $(pwd)/test/oput/mk_dynamic_cmd
}

_mk_ascii_dynamic_cmd(){
  local LINE_START=$1
  local LINE_END=$2
  local CMD=$3
  local STR=$4
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
      CMD="'${CMD}'"
      STR="'${STR}'"
    }
    {
      ASCII=sprintf("%c",strtonum(RN))
      print CMD"\x20""RNN""\x20\x27"ASCII"\x27\x20\x27"STR"\x27"
    }
    '
  done < <(seq ${LINE_START} ${LINE_END}) >> $(pwd)/test/tmp/mk_dynamic_cmd
}

_mk_ascii_code_non_lf(){
  local LINE_START=$1
  local LINE_END=$2
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
    }
    {
      printf("\\x%x",strtonum(RN))
    }
    '
  done < <(seq ${LINE_START} ${LINE_END})
}

_mk_ascii_code(){
  local LINE_START=$1
  local LINE_END=$2
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
    }
    {
      printf("\\x%x\n",strtonum(RN))
    }
    '
  done < <(seq ${LINE_START} ${LINE_END})
}

_mk_ascii_char_non_lf(){
  local LINE_START=$1
  local LINE_END=$2
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
    }
    {
      printf("%c",strtonum(RN))
    }
    '
  done < <(seq ${LINE_START} ${LINE_END})
}

_mk_ascii_char(){
  local LINE_START=$1
  local LINE_END=$2
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
    }
    {
      ASCII=sprintf("%c",strtonum(RN))
      print ASCII
    }
    '
  done < <(seq ${LINE_START} ${LINE_END})
}


_radical_replica_str(){
  local STR=$1
  local START_RN=$2
  local INTERVAL=$3
  local END_RN=$4
  local LN=$(while read RN;do
    printf "%${RN}s" ${STR};
  done < <(seq ${START_RN} ${INTERVAL} ${END_RN}))
  echo "'"${LN}"'" | sed -e 's/ //g';
}

_gradual_non_tac_replica_str(){
  local STR=$1
  local START_RN=$2
  local INTERVAL=$3
  local END_RN=$4
  while read RN;do
    TMP_LN=$(printf "%$((RN==1?1:RN))s" "@");
    REP=$(echo "${TMP_LN}" | sed -e 's/ /@/g');
    echo "'"${REP//@/${STR}}"'";
  done < <(seq ${START_RN} ${INTERVAL} ${END_RN})
}

_gradual_tac_replica_str(){
  local STR=$1
  local START_RN=$2
  local INTERVAL=$3
  local END_RN=$4
  while read RN;do
    TMP_LN=$(printf "%$((RN==1?1:RN))s" "@");
    REP=$(echo "${TMP_LN}" | sed -e 's/ /@/g');
    echo "'"${REP//@/${STR}}"'";
  done < <(seq ${START_RN} ${INTERVAL} ${END_RN} | tac)
}

_mk_pd_tac_cmd(){
  STR=$1
  START_RN=$2
  INTERVAL=$3
  END_RN=$4
  DYN_CMD=$5
  PAD_CMD=$6
  REP_CMD=$7
  while read RN;do
    TMP=$( sed -e 's/ /@/g' <<<$(${REP_CMD} ${STR} ${START_RN} ${INTERVAL} ${RN}))
    echo ${TMP}
    #TODO  --opiton -a -b -c
    #${DYN_CMD} ${START_RN} ${RN} ${PAD_CMD} ${TMP##*@} 
    #${DYN_CMD} ${START_RN} ${END_RN} ${PAD_CMD} ${TMP##*@} 
    #${DYN_CMD} ${END_RN} ${END_RN} ${PAD_CMD} ${TMP##*@} 
  done < <(seq ${START_RN} ${INTERVAL} ${END_RN})
}
[oracle@centos rr]$ ./t.sh "_split(){" "^}" "test/_test_split.sh"
[oracle@centos rr]$ cat test/_test_split.sh
#!/bin/bash

_split(){
  local SRC_FILE=$1
  local TGT_FILE=$2
  cat ${SRC_FILE} | awk '
  BEGIN{
    TGT_FILE="'${TGT_FILE}'"
  }
  {
    print > TGT_FILE"_split_"$1
  }
  '
}

bash配列の間接参照

スクリプト

インデックスに注目

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

prt_ary_ok(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(echo ${ARY} | sed -e 's/ /\n/g')
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

prt_ary_ng(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ="${ARY}"
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

echo "____________e_____________"
ary=();
while read LN;do
  ary+=(${LN});
done < <(echo {a..c} | sed -e 's/ /\n/g')
echo ${ary[@]}
echo ${#ary[@]}
for i in ${ary[@]};do
  echo $i;
done
for i in ${!ary[@]};do
  echo $i'-->'${ary[$i]};
done

prt_ary_ng ary
prt_ary_ok ary

実行例

インデックスに注目

コード表示

[oracle@centos rr]$ ./t.sh
____________e_____________
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
prt_ary_ng
a b c
1
a
b
c
0-->a b c
____________i_____________
prt_ary_ok
a b c
3
a
b
c
0-->a
1-->b
2-->c

こっちのほうがおしゃれかな

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

prt_ary_ok(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<$(echo ${ARY}))
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

prt_ary_ng(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ="${ARY}"
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

echo "____________e_____________"
ary=();
while read LN;do
  ary+=(${LN});
done < <(sed -e 's/ /\n/g' <<<$(echo {a..c}))
echo ${ary[@]}
echo ${#ary[@]}
for i in ${ary[@]};do
  echo $i;
done
for i in ${!ary[@]};do
  echo $i'-->'${ary[$i]};
done

prt_ary_ng ary
prt_ary_ok ary

こっちのほうもおしゃれかな

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

prt_ary_ok(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<${ARY})
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

prt_ary_ng(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ="${ARY}"
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

echo "____________e_____________"
ary=();
while read LN;do
  ary+=(${LN});
done < <(sed -e 's/ /\n/g' <<<$(echo {a..c}))
echo ${ary[@]}
echo ${#ary[@]}
for i in ${ary[@]};do
  echo $i;
done
for i in ${!ary[@]};do
  echo $i'-->'${ary[$i]};
done

prt_ary_ng $*
prt_ary_ok $*

[oracle@centos rr]$ ./t.sh ary
____________e_____________
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
prt_ary_ng
a b c
1
a
b
c
0-->a b c
____________i_____________
prt_ary_ok
a b c
3
a
b
c
0-->a
1-->b
2-->c

こっちのほうもおしゃれかな

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

prt_ary_ok(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<${ARY})
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

prt_ary_ng(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ="${ARY}"
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

echo "____________e_____________"
ary=();
while read LN;do
  ary+=(${LN});
done < <(sed -e 's/ /\n/g' <<<"$1")
echo ${ary[@]}
echo ${#ary[@]}
for i in ${ary[@]};do
  echo $i;
done
for i in ${!ary[@]};do
  echo $i'-->'${ary[$i]};
done

prt_ary_ng ary
prt_ary_ok ary
[oracle@centos rr]$ ./t.sh "$(echo {a..c})"
____________e_____________
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
prt_ary_ng
a b c
1
a
b
c
0-->a b c
____________i_____________
prt_ary_ok
a b c
3
a
b
c
0-->a
1-->b
2-->c

こっちのほうもおしゃれかな

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

prt_ary_ok(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<${ARY})
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

prt_ary_ng(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ="${ARY}"
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

echo "____________e_____________"
ary=();
while read LN;do
  ary+=(${LN});
done < <(sed -e 's/ /\n/g' <<<"$2")
echo ${ary[@]}
echo ${#ary[@]}
for i in ${ary[@]};do
  echo $i;
done
for i in ${!ary[@]};do
  echo $i'-->'${ary[$i]};
done

prt_ary_ng "$1" "$2"
prt_ary_ok "$1" "$2"
[oracle@centos rr]$ ./t.sh ary "$(echo {a..c})"
____________e_____________
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
prt_ary_ng
a b c
1
a
b
c
0-->a b c
____________i_____________
prt_ary_ok
a b c
3
a
b
c
0-->a
1-->b
2-->c

こっちのほうもおしゃれかな

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

set_ary(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<${ARY})
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

call_ary(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<${ARY})
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

echo "____________e_____________"
ary=();
while read LN;do
  ary+=(${LN});
done < <(sed -e 's/ /\n/g' <<<"$2")
echo ${ary[@]}
echo ${#ary[@]}
for i in ${ary[@]};do
  echo $i;
done
for i in ${!ary[@]};do
  echo $i'-->'${ary[$i]};
done

set_ary "$1" "$2"
call_ary "LZ"
[oracle@centos rr]$ ./t.sh ary "$(echo {a..c})"
____________e_____________
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
set_ary
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
call_ary

0

こっちのほうもおしゃれかな

localはずすと見えるね

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

set_ary(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<${ARY})
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

call_ary(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<${ARY})
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

echo "____________e_____________"
ary=();
while read LN;do
  ary+=(${LN});
done < <(sed -e 's/ /\n/g' <<<"$2")
echo ${ary[@]}
echo ${#ary[@]}
for i in ${ary[@]};do
  echo $i;
done
for i in ${!ary[@]};do
  echo $i'-->'${ary[$i]};
done

set_ary "$1" "$2"
call_ary "LZ"
[oracle@centos rr]$ ./t.sh ary "$(echo {a..c})"
____________e_____________
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
set_ary
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
call_ary
a b c
3
a
b
c
0-->a
1-->b
2-->c

最後に

local外したシェルスクリプトを別ファイルのshellからcallできるようになる

コード表示

[oracle@centos rr]$ cat tt.sh
#!/bin/bash

source ./t.sh ary "$(echo {a..c})"
source ./t.sh ary "$(echo {A..C})"
[oracle@centos rr]$ ./tt.sh
____________e_____________
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
set_ary
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
call_ary
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________e_____________
A B C
3
A
B
C
0-->A
1-->B
2-->C
____________i_____________
set_ary
A B C
3
A
B
C
0-->A
1-->B
2-->C
____________i_____________
call_ary
A B C
3
A
B
C
0-->A
1-->B
2-->C

1つのファイルを元にリネームしつつ複数ファイルにブレース展開

実行例

コード表示

[oracle@centos rr]$ grep ")\s*{" test/make/*.sh | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh' | xargs -I@ bash -c 'echo test/__test.sh test/@'
test/__test.sh test/_test_call_dynamic_cmd.sh
test/__test.sh test/_test_cmd_test_clean.sh
test/__test.sh test/_test_grp.sh
test/__test.sh test/_test_join.sh
test/__test.sh test/_test_split.sh
test/__test.sh test/_test_replica_cmd.sh
test/__test.sh test/_test_sort_cmd_with_str.sh
test/__test.sh test/_test_sort_cmd_with_numkey.sh
test/__test.sh test/_test_replace_cmd.sh
test/__test.sh test/_test_grp_rn.sh
test/__test.sh test/_test_mk_decopd_dynamic_cmd_non_tac.sh
test/__test.sh test/_test_mk_decopd_dynamic_cmd_tac.sh
test/__test.sh test/_test_mk_pd_dynamic_cmd_tac.sh
test/__test.sh test/_test_mk_pd_dynamic_cmd_non_tac.sh
test/__test.sh test/_test_mk_ascii_dynamic_cmd.sh
test/__test.sh test/_test_mk_ascii_code_non_lf.sh
test/__test.sh test/_test_mk_ascii_code.sh
test/__test.sh test/_test_mk_ascii_char_non_lf.sh
test/__test.sh test/_test_mk_ascii_char.sh
test/__test.sh test/_test_radical_replica_str.sh
test/__test.sh test/_test_gradual_non_tac_replica_str.sh
test/__test.sh test/_test_gradual_tac_replica_str.sh
test/__test.sh test/_test_mk_pd_tac_cmd.sh
[oracle@centos rr]$ grep ")\s*{" util/*.sh | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh' | xargs -I@ bash -c 'echo test/__test.sh test/@'
test/__test.sh test/_test_lpd.sh
test/__test.sh test/_test_rpd.sh
test/__test.sh test/_test_deco_ful_rev.sh
test/__test.sh test/_test_deco_ful.sh
test/__test.sh test/_test_deco_ful_pd.sh
test/__test.sh test/_test_deco_lft_lpd.sh
test/__test.sh test/_test_deco_lft.sh
test/__test.sh test/_test_deco_rgt_rpd.sh
test/__test.sh test/_test_deco_rgt.sh
[oracle@centos rr]$ grep ")\s*{" test/make/*.sh | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh' | xargs -I@ bash -c 'cp test/__test.sh test/@'
[oracle@centos rr]$ grep ")\s*{" util/*.sh | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh' | xargs -I@ bash -c 'cp test/__test.sh test/@'
[oracle@centos rr]$ tree
.
├── README.md
├── cnst
│   └── clr
│       ├── def_bgclr_cnst.sh
│       └── def_fgclr_cnst.sh
├── func
│   ├── clr
│   │   ├── def_bgclr_func.sh
│   │   └── def_fgclr_func.sh
│   └── exe
│       └── def_call_func.sh
├── iput
│   └── clr
├── main
│   ├── _main.sh
│   ├── make
│   │   ├── mk_call_func.sh
│   │   ├── mk_clr_cnst.sh
│   │   ├── mk_clr_func.sh
│   │   └── mk_exe_cmd.sh
│   ├── oput
│   │   └── mk_dynamic_cmd
│   └── tmp
├── test
│   ├── __test.sh
│   ├── _test_call_dynamic_cmd.sh
│   ├── _test_cmd_test_clean.sh
│   ├── _test_deco_ful.sh
│   ├── _test_deco_ful_pd.sh
│   ├── _test_deco_ful_rev.sh
│   ├── _test_deco_lft.sh
│   ├── _test_deco_lft_lpd.sh
│   ├── _test_deco_rgt.sh
│   ├── _test_deco_rgt_rpd.sh
│   ├── _test_gradual_non_tac_replica_str.sh
│   ├── _test_gradual_tac_replica_str.sh
│   ├── _test_grp.sh
│   ├── _test_grp_rn.sh
│   ├── _test_join.sh
│   ├── _test_lpd.sh
│   ├── _test_mk_ascii_char.sh
│   ├── _test_mk_ascii_char_non_lf.sh
│   ├── _test_mk_ascii_code.sh
│   ├── _test_mk_ascii_code_non_lf.sh
│   ├── _test_mk_ascii_dynamic_cmd.sh
│   ├── _test_mk_decopd_dynamic_cmd_non_tac.sh
│   ├── _test_mk_decopd_dynamic_cmd_tac.sh
│   ├── _test_mk_pd_dynamic_cmd_non_tac.sh
│   ├── _test_mk_pd_dynamic_cmd_tac.sh
│   ├── _test_mk_pd_tac_cmd.sh
│   ├── _test_radical_replica_str.sh
│   ├── _test_replace_cmd.sh
│   ├── _test_replica_cmd.sh
│   ├── _test_rpd.sh
│   ├── _test_sort_cmd_with_numkey.sh
│   ├── _test_sort_cmd_with_str.sh
│   ├── _test_split.sh
│   ├── make
│   │   └── mk_exe_cmd.sh
│   ├── oput
│   └── tmp
└── util
    └── def_deco_func.sh

15 directories, 48 files

[oracle@centos rr]$ grep ")\s*{" util/*.sh | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh' | xargs -I@ bash -c 'cp util/* test/@'

[oracle@centos rr]$ grep ")\s*{" test/make/*.sh | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh' | xargs -I@ bash -c 'cp test/make/* test/@'

bashの変数展開を使用したリネーム

変更前

コード表示

[oracle@centos pp]$ find $(pwd) -name "*inter*"
/home/oracle/pp/util/interface.sh
/home/oracle/pp/cmd/interface.sh
/home/oracle/pp/exec/interface.sh
/home/oracle/pp/ref/interface.sh

変更

コード表示

[oracle@centos pp]$ find $(pwd) -name "*inter*" | xargs -I@ bash -c 'tmp=@;f=${tmp##*/};d=${tmp%/*};echo mv ${d}/${f} ${d}/if.sh '
mv /home/oracle/pp/util/interface.sh /home/oracle/pp/util/if.sh
mv /home/oracle/pp/cmd/interface.sh /home/oracle/pp/cmd/if.sh
mv /home/oracle/pp/exec/interface.sh /home/oracle/pp/exec/if.sh
mv /home/oracle/pp/ref/interface.sh /home/oracle/pp/ref/if.sh
[oracle@centos pp]$ find $(pwd) -name "*inter*" | xargs -I@ bash -c 'tmp=@;f=${tmp##*/};d=${tmp%/*};mv ${d}/${f} ${d}/if.sh '

変更後

コード表示

[oracle@centos pp]$ find $(pwd) -name "*inter*"
[oracle@centos pp]$ find $(pwd) -name "*if*"
/home/oracle/pp/util/if.sh
/home/oracle/pp/cmd/if.sh
/home/oracle/pp/exec/if.sh
/home/oracle/pp/ref/if.sh

awkでbashファンクション作成

結果のイメージ

コード表示

[oracle@centos pp]$ ll
合計 20
-rw-r--r--. 1 oracle docker   35  6月  7 06:57 clr
drwxr-xr-x. 2 oracle docker 4096  6月  7 07:57 const
-rw-r--r--. 1 oracle docker  310  6月  7 07:57 def_bg_func.sh
-rw-r--r--. 1 oracle docker  310  6月  7 07:57 def_fg_func.sh
-rwxr-xr-x. 1 oracle docker  646  6月  7 07:56 mkfunc.sh
[oracle@centos pp]$ tree
.
├── clr
├── const
│   ├── def_clr_bg.sh
│   └── def_clr_fg.sh
├── def_bg_func.sh
├── def_fg_func.sh
└── mkfunc.sh

1 directory, 6 files
[oracle@centos pp]$ cat def_bg_func.sh
#!/bin/bash
source ./const/*;
red(){
  echo -e "${BG_RED}$*${NORMAL}";
}
green(){
  echo -e "${BG_GREEN}$*${NORMAL}";
}
yellow(){
  echo -e "${BG_YELLOW}$*${NORMAL}";
}
blue(){
  echo -e "${BG_BLUE}$*${NORMAL}";
}
magenta(){
  echo -e "${BG_MAGENTA}$*${NORMAL}";
}
cyan(){
  echo -e "${BG_CYAN}$*${NORMAL}";
}
[oracle@centos pp]$ cat def_fg_func.sh
#!/bin/bash
source ./const/*;
red(){
  echo -e "${FG_RED}$*${NORMAL}";
}
green(){
  echo -e "${FG_GREEN}$*${NORMAL}";
}
yellow(){
  echo -e "${FG_YELLOW}$*${NORMAL}";
}
blue(){
  echo -e "${FG_BLUE}$*${NORMAL}";
}
magenta(){
  echo -e "${FG_MAGENTA}$*${NORMAL}";
}
cyan(){
  echo -e "${FG_CYAN}$*${NORMAL}";
}

mkfunc.sh

コード表示

[oracle@centos pp]$ cat ./mkfunc.sh
#!/bin/bash
flg=$1
fnm=$2
while read line;do
  rn=$(echo ${line} | sed -e 's/ .*//');
  func_name=$(echo ${line} | sed -e 's/.* //');
  const_name=$(echo ${func_name^^});
  echo " "| awk '
  BEGIN{
    FLG="'${flg}'"
  }
  {
    RN="'${rn}'"
    if(RN == "1"){
      print "#!/bin/bash"
      print "source ./const/*;"
    }
    FUNC_NAME="'${func_name}'"
    CONST_NAME="'FG_${const_name}'"
    if(FLG == "bg"){
      CONST_NAME="'BG_${const_name}'"
    }
    print FUNC_NAME"\x28\x29\x7b\x0a\x20\x20""echo -e ""\x22""${"CONST_NAME"}""\x24\x2a""${NORMAL}""\x22\x3b\x0a\x7d"
  }'
done < <(cat clr | nl) >${fnm}

あとがき

もうちょい工夫したいけど時間ないから、fin!!!