PDF から SVG にできないかと考えて、ちょっと調べていたら Ghostscript で
できるらしいのでやってみた。都合よく Cygwin に Ghostscript が入っている
ので、これを使うことに。pdf は試しに IPA の文書を使ってみた。
https://www.ipa.go.jp/files/000050724.pdf
gs コマンドで。
$ gs -dBATCH -dNOPAUSE -dSAFER -sDEVICE=svg -sOutputFile=test.svg 000050724.pdf
GPL Ghostscript 9.15 (2014-09-22)
Copyright (C) 2014 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Unknown device: svg
Unrecoverable error: syntaxerror in --nostringval--
Operand stack:
defaultdevice
Unrecoverable error: undefined in .uninstallpagedevice
Operand stack:
defaultdevice
Unknown device: svg と返ってきた。対応デバイスの確認をしてみる。
$ gs --help
GPL Ghostscript 9.15 (2014-09-22)
Copyright (C) 2014 Artifex Software, Inc. All rights reserved.
Usage: gs [switches] [file1.ps file2.ps ...]
~snip~
Input formats: PostScript PostScriptLevel1 PostScriptLevel2 PostScriptLevel3 PDF
Default output device: x11alpha
Available devices:
alc1900 alc2000 alc4000 alc4100 alc8500 alc8600 alc9100 ap3250 appledmp
atx23 atx24 atx38 bbox bit bitcmyk bitrgb bitrgbtags bj10e bj10v bj10vh
bj200 bjc600 bjc800 bjc880j bjccmyk bjccolor bjcgray bjcmono bmp16 bmp16m
bmp256 bmp32b bmpgray bmpmono bmpsep1 bmpsep8 ccr cdeskjet cdj1600 cdj500
cdj550 cdj670 cdj850 cdj880 cdj890 cdj970 cdjcolor cdjmono cdnj500 cfax
chp2200 cif cljet5 cljet5c cljet5pr coslw2p coslwxl cp50 declj250 deskjet
devicen dfaxhigh dfaxlow display dj505j djet500 djet500c dl2100 dnj650c
epl2050 epl2050p epl2120 epl2500 epl2750 epl5800 epl5900 epl6100 epl6200
eplcolor eplmono eps2write eps9high eps9mid epson epsonc escp escpage
faxg3 faxg32d faxg4 fmlbp fmpr fpng fs600 gdi hl1240 hl1250 hl7x0
hpdj1120c hpdj310 hpdj320 hpdj340 hpdj400 hpdj500 hpdj500c hpdj510
hpdj520 hpdj540 hpdj550c hpdj560c hpdj600 hpdj660c hpdj670c hpdj680c
hpdj690c hpdj850c hpdj855c hpdj870c hpdj890c hpdjplus hpdjportable ibmpro
ijs imagen inferno ink_cov inkcov itk24i itk38 iwhi iwlo iwlq jetp3852
jj100 jpeg jpegcmyk jpeggray la50 la70 la75 la75plus laserjet lbp310
lbp320 lbp8 lex2050 lex3200 lex5700 lex7000 lips2p lips3 lips4 lips4v
lj250 lj3100sw lj4dith lj4dithp lj5gray lj5mono ljet2p ljet3 ljet3d ljet4
ljet4d ljet4pjl ljetplus ln03 lp1800 lp1900 lp2000 lp2200 lp2400 lp2500
lp2563 lp3000c lp7500 lp7700 lp7900 lp8000 lp8000c lp8100 lp8200c lp8300c
lp8300f lp8400f lp8500c lp8600 lp8600f lp8700 lp8800c lp8900 lp9000b
lp9000c lp9100 lp9200b lp9200c lp9300 lp9400 lp9500c lp9600 lp9600s
lp9800c lps4500 lps6500 lq850 lxm3200 lxm5700m m8510 mag16 mag256
md1xMono md2k md50Eco md50Mono md5k mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8
mgrmono miff24 mj500c mj6000c mj700v2c mj8000c ml600 necp6 npdl nullpage
oce9050 oki182 oki4w okiibm oprp opvp paintjet pam pamcmyk32 pamcmyk4 pbm
pbmraw pcl3 pcx16 pcx24b pcx256 pcx256 pcx2up pcxcmyk pcxgray pcxmono
pdfwrite pdfwrite pdfwrite pgm pgmraw pgnm pgnmraw photoex picty180 pj
pjetxl pjxl pjxl300 pkm pkmraw pksm pksmraw plan plan9bm planc plang
plank planm png16 png16m png256 png48 pngalpha pnggray pngmono pnm pnmraw
ppm ppmraw pr1000 pr1000_4 pr150 pr201 ps2write psdcmyk psdcmykog psdrgb
pxlcolor pxlmono r4081 rinkj rpdl samsunggdi sgirgb sj48 spotcmyk st800
stcolor sunhmono t4693d2 t4693d4 t4693d8 tek4696 tiff12nc tiff24nc
tiff32nc tiff48nc tiff64nc tiffcrle tiffg3 tiffg32d tiffg4 tiffgray
tifflzw tiffpack tiffscaled tiffsep tiffsep1 txtwrite uniprint x11
x11alpha x11cmyk x11cmyk2 x11cmyk4 x11cmyk8 x11gray2 x11gray4 x11mono
x11rg16x x11rg32x xcf xes xpswrite
~snip~
ですと。これは何かを追加すれば対応するのか、コンパイルからし直さないと
いかないのか、判断するために、ソースコードを取ってきた。
[toyota@mygeeto tmp]$ wget -q ftp://ftp.gnu.org/gnu/ghostscript/gnu-ghostscript
-9.14.0.tar.bz2
[toyota@mygeeto tmp]$ tar xfj gnu-ghostscript-9.14.0.tar.bz2
[toyota@mygeeto tmp]$ cd gnu-ghostscript-9.14.0/
grep なんかでドキュメントも含めて確認すると、以下の気になる文書があった。
web にもあったので、そのリンク。
[toyota@mygeeto gnu-ghostscript-9.14.0]$ less doc/Details8.htm
~snip~
There are two new devices in this release, both experimental. Behdad Esfahbod
has contributed a cairo output device which uses the cairo graphics library to
generate PDF, SVG, EPS, or PNG files, based on the requested filename extension.
The svgwrite device directly outputs Scalable Vector Graphics, the W3C XML
vector graphics format. Both support only vector art at this point; text and
images will not be represented efficiently.
~snip~
Rename the svg device to svgwrite to avoid conflict with the SVG interpreter.
The device is still selected as -sDEVICE=svg, just the name used internally
has been changed.
~snip~
Copy the expat-2.0.1 tag source into the gs tree.
This 3rd party library is needed for XPS and eventually SVG support.
~snip~
まずは、-sDEVICE=svg じゃなくて -sDEVICE=svgwrite にするべきこと。svg でも
まだ使えると書いてあるけど。それより大事なことで、SVG を使うには expat が
必要なのと、cairo も必要なこと。
試しに cygwin の setup で expat をインストールしてみた。
現象は変わらず。よく考えたら、xpswrite があるから関係ないか。pdfwrite とか
png256 等もあるので、cairo も関係なさそう。仕方ない、コンパイルしてみるか。
実際には Linux 環境で使いたいので Linux 環境で configure オプションを確認
してみた。
[toyota@mygeeto gnu-ghostscript-9.14.0]$ ./configure --help
~snip~
--with-drivers=LIST Drivers to support, separated by commas.
Either list the drivers or use aliases:
ALL = all drivers
FILES = all file format drivers
PRINTERS = all printer drivers
Printers:
APPLE = all Apple printers
BROTHER = all Brother printers
CANON = all Canon printers
EPSON = all Epson printers
HP = all HP printers
IBM = all IBM printers
JAPAN = older japanese printers
LEXMARK = all Lexmark printers
OKI = all OKI printers
PCLXL = all PCL XL/6 printers
File formats:
BMP = Output to bmp files
FAX = Output to fax files
JPEG = Output to JPEG files
PBM = Output to PBM/PNM
PCX = Output to PCX
PNG = Output to PNG
PS = Output to PostScript/PDF
TIFF = Output to TIFF
You can mix both variants, e.g.
--with-drivers=HP,stcolor would build HP drivers and
the Epson stcolor driver.
Aliases must be uppercase (a 3rd party driver might
have the same name).
Default: ALL
~snip~
SVG が選べないみたいだけど、デフォルトは ALL みたいなので、configure を
実行してみた。
[toyota@mygeeto gnu-ghostscript-9.14.0]$ ./configurep
~snip~
checking for local jpeg library source... no
checking for jpeg_set_defaults in -ljpeg... no
configure: error: I wasn't able to find a copy
of the jpeg library. This is required for compiling
ghostscript. Please download a copy of the source,
e.g. from http://www.ijg.org/, unpack it at the
top level of the gs source tree, and rename
the directory to 'jpeg'.
libjpeg が必要らしく。先が長そうなので、明日に持ち越し。
昨日の続き。libjpeg から入れる。
[toyota@mygeeto ~]$ cd /tmp
[toyota@mygeeto tmp]$ wget -q http://www.ijg.org/files/jpegsrc.v9b.tar.gz
[toyota@mygeeto tmp]$ tar xfz jpegsrc.v9b.tar.gz
[toyota@mygeeto tmp]$ cd jpeg-9b/
[toyota@mygeeto jpeg-9b]$ ls -l
~snip~
[toyota@mygeeto jpeg-9b]$ ./configure --help
~snip~
[toyota@mygeeto jpeg-9b]$ ./configure
~snip~
[toyota@mygeeto jpeg-9b]$ make
~snip~
[toyota@mygeeto jpeg-9b]$ su
Password:
[root@mygeeto jpeg-9b]# make install
~snip~
jpeg のライブラリは問題なく入ったので、ghostscript のコンパイルに戻る。
[toyota@mygeeto ~]$ cd /tmp
[toyota@mygeeto tmp]$ cd gnu-ghostscript-9.14.0/
[toyota@mygeeto gnu-ghostscript-9.14.0]$ ./configure
~snip~
checking for local png library source... no
checking for png_create_write_struct in -lpng... no
configure: disabling png output devices
checking for local lcms2 library source... no
checking for system lcms2 library... checking for cmsGetTransformOutputFormat i
n -llcms2... no
configure: WARNING: lcms2 not found, or too old
checking for local lcms library source... configure: error: LittleCMS source no
t found!
やっぱり、昨日やらないで正解だった。他にも warning が出ていて。
configure: WARNING: disabling support for libpaper
configure: WARNING: freetype library source not found...using native rasterizer
気になるので、解決していく。
[toyota@mygeeto gnu-ghostscript-9.14.0]$ cd /tmp
[toyota@mygeeto tmp]$ wget -q http://ftp.us.debian.org/debian/pool/main/libp/li
bpaper/libpaper_1.1.24%2bnmu4.tar.gz
[toyota@mygeeto tmp]$ tar xfz libpaper_1.1.24+nmu4.tar.gz
[toyota@mygeeto tmp]$ cd libpaper-1.1.24+nmu4/
[toyota@mygeeto libpaper-1.1.24+nmu4]$ ls -l
~snip~
[toyota@mygeeto libpaper-1.1.24+nmu4]$ ./configure --help
~snip~
[toyota@mygeeto libpaper-1.1.24+nmu4]$ ./configure
~snip~
[toyota@mygeeto libpaper-1.1.24+nmu4]$ make
~snip~
[toyota@mygeeto libpaper-1.1.24+nmu4]$ su
Password:
[root@mygeeto libpaper-1.1.24+nmu4]# make install
~snip~
libpaper は問題なく入った。次は freetype のインストール。この freetype
って何するものなのか調べたら。
FreeType 2 is a software font engine that is designed to be small,
efficient, highly customizable and portable while capable of
producing high-quality output (glyph images). It can be used in
graphics libraries, display servers, font conversion tools, text
image generation tools, and many other products as well.
なのだと。わかるような、わからないような。入れるだけ、入れてみる。
[toyota@mygeeto tmp]$ wget -q http://download.savannah.gnu.org/releases/freetyp
e/freetype-2.6.3.tar.gz
[toyota@mygeeto tmp]$ tar xvf freetype-2.6.3.tar.gz
[toyota@mygeeto tmp]$ cd freetype-2.6.3/
[toyota@mygeeto freetype-2.6.3]$ ls -l
~snip~
[toyota@mygeeto freetype-2.6.3]$ ./configure --help
~snip~
[toyota@mygeeto freetype-2.6.3]$ ./configure
~snip~
checking for BZIP2... no
checking for BZ2_bzDecompress in -lbz2... no
checking for LIBPNG... no
checking for libpng-config... no
checking for HARFBUZZ... no
configure: creating ./config.status
config.status: creating unix-cc.mk
config.status: creating unix-def.mk
config.status: creating ftconfig.h
config.status: executing libtool commands
configure:
Library configuration:
external zlib: yes (pkg-config)
bzip2: no
libpng: no
harfbuzz: no
make: Nothing to be done for `unix'.
この後、make をしてみたら問題なく通ったけど、libpng はこの先必要そうだし、
bzip2 も入れておいて損はないので、先に入れてから make することにした。
[toyota@mygeeto tmp]$ wget -q ftp://ftp.simplesystems.org/pub/libpng/png/src/li
bpng16/libpng-1.6.21.tar.gz
[toyota@mygeeto tmp]$ md5sum libpng-1.6.21.tar.gz
aca36ec8e0a3b406a5912243bc243717 libpng-1.6.21.tar.gz
[toyota@mygeeto tmp]$ tar xfz libpng-1.6.21.tar.gz
[toyota@mygeeto tmp]$ cd libpng-1.6.21
[toyota@mygeeto libpng-1.6.21]$ ls -l
~snip~
[toyota@mygeeto libpng-1.6.21]$ ./configure --help
~snip~
[toyota@mygeeto libpng-1.6.21]$ ./configure
~snip~
[toyota@mygeeto libpng-1.6.21]$ make
~snip~
[toyota@mygeeto libpng-1.6.21]$ su
Password:
[root@mygeeto libpng-1.6.21]# make install
~snip~
libpng は問題なく。bzip2 はコマンド自体入っている。
[toyota@mygeeto ~]$ which bzip2
/usr/bin/bzip2
ライブラリだけ入れる感じでやってみる。
[toyota@mygeeto tmp]$ wget -q http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
[toyota@mygeeto tmp]$ md5sum bzip2-1.0.6.tar.gz
00b516f4704d4a7cb50a1d97e6e8e15b bzip2-1.0.6.tar.gz
[toyota@mygeeto tmp]$ tar xfz bzip2-1.0.6.tar.gz
~snip~
[toyota@mygeeto tmp]$ cd bzip2-1.0.6/
[toyota@mygeeto bzip2-1.0.6]$ ls -la
~snip~
[toyota@mygeeto bzip2-1.0.6]$ make
~snip~
Makefile には install-lib なんて無い。手動で入れる。make install では、
こんな感じなので。
install: bzip2 bzip2recover
if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi
if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi
if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi
if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi
if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi
cp -f bzip2 $(PREFIX)/bin/bzip2
cp -f bzip2 $(PREFIX)/bin/bunzip2
cp -f bzip2 $(PREFIX)/bin/bzcat
cp -f bzip2recover $(PREFIX)/bin/bzip2recover
chmod a+x $(PREFIX)/bin/bzip2
chmod a+x $(PREFIX)/bin/bunzip2
chmod a+x $(PREFIX)/bin/bzcat
chmod a+x $(PREFIX)/bin/bzip2recover
cp -f bzip2.1 $(PREFIX)/man/man1
chmod a+r $(PREFIX)/man/man1/bzip2.1
cp -f bzlib.h $(PREFIX)/include
chmod a+r $(PREFIX)/include/bzlib.h
cp -f libbz2.a $(PREFIX)/lib
chmod a+r $(PREFIX)/lib/libbz2.a
cp -f bzgrep $(PREFIX)/bin/bzgrep
ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep
ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep
chmod a+x $(PREFIX)/bin/bzgrep
cp -f bzmore $(PREFIX)/bin/bzmore
ln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless
chmod a+x $(PREFIX)/bin/bzmore
cp -f bzdiff $(PREFIX)/bin/bzdiff
ln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp
chmod a+x $(PREFIX)/bin/bzdiff
cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1
chmod a+r $(PREFIX)/man/man1/bzgrep.1
chmod a+r $(PREFIX)/man/man1/bzmore.1
chmod a+r $(PREFIX)/man/man1/bzdiff.1
echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1
echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1
echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1
echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1
ライブラリと include ファイルだけ入れる。
[toyota@mygeeto bzip2-1.0.6]$ su
Password:
[root@mygeeto bzip2-1.0.6]# cp -f bzlib.h /usr/local/include
[root@mygeeto bzip2-1.0.6]# chmod a+r /usr/local/include/bzlib.h
[root@mygeeto bzip2-1.0.6]# cp -f libbz2.a /usr/local/lib
[root@mygeeto bzip2-1.0.6]# chmod a+r /usr/local/lib/libbz2.a
これで大丈夫かな。
もう1つ、harfbuzz が何かと調べたら、
HarfBuzz is an OpenType text shaping engine.
ということで。SVG ファイル生成に関係ある気がするので、入れるだけ入れる
ことにした。
[toyota@mygeeto tmp]$ wget -q https://www.freedesktop.org/software/harfbuzz/rel
ease/harfbuzz-1.2.5.tar.bz2
[toyota@mygeeto tmp]$ sha256sum harfbuzz-1.2.5.tar.bz2
cfca0b6ba42c36a1f7b03fffb926dc4d137be2aa2a2ad8930259072e43a347d5 harfbuzz-1.2.
5.tar.bz2
[toyota@mygeeto tmp]$ tar xfj harfbuzz-1.2.5.tar.bz2
[toyota@mygeeto tmp]$ cd harfbuzz-1.2.5/
[toyota@mygeeto harfbuzz-1.2.5]$ ls -l
~snip~
[toyota@mygeeto harfbuzz-1.2.5]$ ./configure --help
~snip~
[toyota@mygeeto harfbuzz-1.2.5]$ ./configure
~snip~
[toyota@mygeeto harfbuzz-1.2.5]$ make
~snip~
[toyota@mygeeto harfbuzz-1.2.5]$ su
Password:
[root@mygeeto harfbuzz-1.2.5]# make install
~snip~
何をやっていたのか忘れた。freetype に戻って。
[toyota@mygeeto /]$ cd /tmp/freetype-2.6.3/
[toyota@mygeeto freetype-2.6.3]$ ./configure
~snip~
checking for HARFBUZZ... no
configure: creating ./config.status
config.status: creating unix-cc.mk
config.status: creating unix-def.mk
config.status: creating ftconfig.h
config.status: executing libtool commands
configure:
Library configuration:
external zlib: yes (pkg-config)
bzip2: yes (autoconf test)
libpng: yes (libpng-config)
harfbuzz: no
make: Nothing to be done for `unix'.
harfbuzz を認識してくれないな。少し調べてみたら、両方入れるには
FreeType → HarfBuzz → FreeType
という順番でいれると web ページがあった。その通りやってみることにする。
[toyota@mygeeto freetype-2.6.3]$ make
~snip~
/usr/bin/ld: /usr/local/lib/libbz2.a(bzlib.o): relocation R_X86_64_32S against
`BZ2_crc32Table' can not be used when making a shared object; recompile with -f
PIC
/usr/local/lib/libbz2.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [/tmp/freetype-2.6.3/objs/libfreetype.la] Error 1
libbz2 を -fPIC でコンパイルしろとか。ここは素直に従うことに。
[toyota@mygeeto freetype-2.6.3]$ cd /tmp/bzip2-1.0.6/
[toyota@mygeeto bzip2-1.0.6]$ cp -p Makefile Makefile.bak
[toyota@mygeeto bzip2-1.0.6]$ vi Makefile
[toyota@mygeeto bzip2-1.0.6]$ diff Makefile.bak Makefile
24c24
< CFLAGS=-Wall -Winline -O2 -g $(BIGFILES)
---
> CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) -fPIC
[toyota@mygeeto bzip2-1.0.6]$ make clean
[toyota@mygeeto bzip2-1.0.6]$ make
~snip~
[toyota@mygeeto bzip2-1.0.6]$ diff bzlib.h /usr/local/include/bzlib.h
[toyota@mygeeto bzip2-1.0.6]$ cmp libbz2.a /usr/local/lib/libbz2.a
libbz2.a /usr/local/lib/libbz2.a differ: char 30, line 2
[toyota@mygeeto bzip2-1.0.6]$ su
Password:
[root@mygeeto bzip2-1.0.6]# cp -f libbz2.a /usr/local/lib
cp: overwrite '/usr/local/lib/libbz2.a'? yes
[root@mygeeto bzip2-1.0.6]# chmod a+r /usr/local/lib/libbz2.a
freetype に戻って、make し直し。
[toyota@mygeeto freetype-2.6.3]$ make clean
~snip~
[toyota@mygeeto freetype-2.6.3]$ make
~snip~
[toyota@mygeeto freetype-2.6.3]$ su
Password:
[root@mygeeto freetype-2.6.3]# make install
~snip~
harfbuzz に戻って。
[toyota@mygeeto freetype-2.6.3]$ cd /tmp/harfbuzz-1.2.5/
[toyota@mygeeto harfbuzz-1.2.5]$ ./configure
~snip~
checking for FREETYPE... no
~snip~
Font callbacks (the more the better):
FreeType: false
freetype を認識してくれないな。長くなりそうなので、明日にする。
harfbuzz の configure で freetype を認識させる。harfbuzz の configure で
何をやっているのか確認する。ちょっと見辛かったので、config.log を見ると。
configure:18817: checking for FREETYPE
configure:18825: $PKG_CONFIG --exists --print-errors "$FREETYPE_DEPS"
Package freetype2 was not found in the pkg-config search path.
Perhaps you should add the directory containing `freetype2.pc'
to the PKG_CONFIG_PATH environment variable
No package 'freetype2' found
configure:18828: $? = 1
configure:18843: $PKG_CONFIG --exists --print-errors "$FREETYPE_DEPS"
Package freetype2 was not found in the pkg-config search path.
Perhaps you should add the directory containing `freetype2.pc'
to the PKG_CONFIG_PATH environment variable
No package 'freetype2' found
configure:18846: $? = 1
No package 'freetype2' found
configure:18874: result: no
configure:18888: error: FreeType support requested but libfreetype2 not found
となっていた。pkg-config で freetype が見えていないみたい。pc ファイル
自体はあるのか見てみる。
[toyota@mygeeto tmp]$ find /usr -name harfbuzz.pc
/usr/local/lib/pkgconfig/harfbuzz.pc
[toyota@mygeeto tmp]$ ls /usr/local/lib/pkgconfig/
freetype2.pc harfbuzz.pc libpng.pc libpng16.pc
[toyota@mygeeto tmp]$ pkg-config --modversion freetype2
Package freetype2 was not found in the pkg-config search path.
Perhaps you should add the directory containing `freetype2.pc'
to the PKG_CONFIG_PATH environment variable
No package 'freetype2' found
pkg-config コマンドが /usr/local/lib/pkgconfig 以下を読んでないみたい。
環境変数を変えて、もう一度やってみる。
[toyota@mygeeto harfbuzz-1.2.5]$ echo $PKG_CONFIG_PATH
[toyota@mygeeto harfbuzz-1.2.5]$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
[toyota@mygeeto harfbuzz-1.2.5]$ pkg-config --modversion freetype2
18.3.12
[toyota@mygeeto harfbuzz-1.2.5]$ ./configure --with-freetype=yes
~snip~
Font callbacks (the more the better):
FreeType: true
大丈夫そうなので、make してインストールまで。
[toyota@mygeeto harfbuzz-1.2.5]$ make
~snip~
[toyota@mygeeto harfbuzz-1.2.5]$ su
Password:
[root@mygeeto harfbuzz-1.2.5]# make install
これで、また freetype に戻って、make する。
[toyota@mygeeto harfbuzz-1.2.5]$ cd /tmp/freetype-2.6.3/
[toyota@mygeeto freetype-2.6.3]$ make distclean
[toyota@mygeeto freetype-2.6.3]$ ./configure
~snip~
Library configuration:
external zlib: yes (pkg-config)
bzip2: yes (autoconf test)
libpng: yes (pkg-config)
harfbuzz: yes (pkg-config)
make: Nothing to be done for `unix'.
[toyota@mygeeto freetype-2.6.3]$ make
~snip~
警告が少し出た感じがしたけど、大丈夫かな。インストールして、freetype と
harfbuzz のインストール完了。
[toyota@mygeeto freetype-2.6.3]$ su
Password:
[root@mygeeto freetype-2.6.3]# make install
~snip~
次は lcms2 のインストール。lcms2 は Little CMS 2 のことで、何をするもの
なのか調べてみると。
Little CMS intends to be an OPEN SOURCE small-footprint color management
engine, with special focus on accuracy and performance.
とのこと。ダウンロードして make する。
[toyota@mygeeto tmp]$ wget -q https://github.com/mm2/Little-CMS/archive/lcms2-2
.7.tar.gz
[toyota@mygeeto tmp]$ tar xfz lcms2-2.7.tar.gz
[toyota@mygeeto tmp]$ cd Little-CMS-lcms2-2.7/
[toyota@mygeeto Little-CMS-lcms2-2.7]$ ls
~snip~
[toyota@mygeeto Little-CMS-lcms2-2.7]$ ./configure --help
~snip~
[toyota@mygeeto Little-CMS-lcms2-2.7]$ ./configure
~snip~
[toyota@mygeeto Little-CMS-lcms2-2.7]$ make
~snip~
[toyota@mygeeto Little-CMS-lcms2-2.7]$ su
Password:
[root@mygeeto Little-CMS-lcms2-2.7]# make install
~snip~
怖いぐらいにあっさり入った。ほとんど忘れかけていた Ghostscript に戻って
configure の続き。
[toyota@mygeeto Little-CMS-lcms2-2.7]$ cd /tmp/gnu-ghostscript-9.14.0/
[toyota@mygeeto gnu-ghostscript-9.14.0]$ ./configure
~snip~
問題なく通った。make してみるが。
[toyota@mygeeto gnu-ghostscript-9.14.0]$ make
gcc -O2 -Wall -Wstrict-prototypes -Wundef -Wmissing-declarations -Wmissing-prot
otypes -Wwrite-strings -Wno-strict-aliasing -Wdeclaration-after-statement -fno-
builtin -fno-common -DHAVE_STDINT_H=1 -DHAVE_DIRENT_H=1 -DHAVE_SYS_DIR_H=1 -DHA
VE_SYS_TIME_H=1 -DHAVE_SYS_TIMES_H=1 -DHAVE_INTTYPES_H=1 -DGX_COLOR_INDEX_TYPE=
"unsigned long int" -DUSE_LIBPAPER -I./base -o ./obj/aux/genconf ./base/genc
onf.c -ldl -lm -lpaper -rdynamic -ldl -L/usr/local/lib -lfreetype -lz
gcc -O2 -Wall -Wstrict-prototypes -Wundef -Wmissing-declarations -Wmissing-prot
otypes -Wwrite-strings -Wno-strict-aliasing -Wdeclaration-after-statement -fno-
builtin -fno-common -DHAVE_STDINT_H=1 -DHAVE_DIRENT_H=1 -DHAVE_SYS_DIR_H=1 -DHA
VE_SYS_TIME_H=1 -DHAVE_SYS_TIMES_H=1 -DHAVE_INTTYPES_H=1 -DGX_COLOR_INDEX_TYPE=
"unsigned long int" -DUSE_LIBPAPER -I./base -o ./obj/aux/echogs ./base/echog
s.c -ldl -lm -lpaper -rdynamic -ldl -L/usr/local/lib -lfreetype -lz
./obj/aux/echogs -w ./obj/devs.tr - -include ./obj/unix_
./obj/aux/echogs: error while loading shared libraries: libpaper.so.1: cannot o
pen shared object file: No such file or directory
make: *** [obj/devs.tr] Error 127
echogs コマンドの実行で libpaper.so.1 が無いとエラーで止まってしまった。
状況を確認してみた。
[toyota@mygeeto gnu-ghostscript-9.14.0]$ ls /usr/local/lib/libpaper*
/usr/local/lib/libpaper.a /usr/local/lib/libpaper.so.1
/usr/local/lib/libpaper.la /usr/local/lib/libpaper.so.1.1.2
/usr/local/lib/libpaper.so
[toyota@mygeeto gnu-ghostscript-9.14.0]$ ldd ./obj/aux/echogs
linux-vdso.so.1 => (0x00007fff9d7da000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fc37374d000)
libm.so.6 => /lib64/libm.so.6 (0x00007fc37344b000)
libpaper.so.1 => not found
libfreetype.so.6 => /lib64/libfreetype.so.6 (0x00007fc3731a5000)
libz.so.1 => /lib64/libz.so.1 (0x00007fc372f8f000)
libc.so.6 => /lib64/libc.so.6 (0x00007fc372bcd000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc37395c000)
ということみたい。/usr/local/lib を見に行くようにして、ldconfig を実行
する。
[toyota@mygeeto gnu-ghostscript-9.14.0]$ su
Password:
[root@mygeeto gnu-ghostscript-9.14.0]# vi /etc/ld.so.conf.d/local.conf
[root@mygeeto gnu-ghostscript-9.14.0]# cat /etc/ld.so.conf.d/local.conf
/usr/local/lib
[root@mygeeto gnu-ghostscript-9.14.0]# ldconfig
[root@mygeeto gnu-ghostscript-9.14.0]# exit
exit
[toyota@mygeeto gnu-ghostscript-9.14.0]$ ldd ./obj/aux/echogs
linux-vdso.so.1 => (0x00007fffed3fe000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f13e36b4000)
libm.so.6 => /lib64/libm.so.6 (0x00007f13e33b2000)
libpaper.so.1 => /usr/local/lib/libpaper.so.1 (0x00007f13e31ad000)
libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x00007f13e2f10000)
libz.so.1 => /lib64/libz.so.1 (0x00007f13e2cfa000)
libc.so.6 => /lib64/libc.so.6 (0x00007f13e2938000)
/lib64/ld-linux-x86-64.so.2 (0x00007f13e38c3000)
libharfbuzz.so.0 => /usr/local/lib/libharfbuzz.so.0 (0x00007f13e26bc000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f13e24ac000)
libpng16.so.16 => /usr/local/lib/libpng16.so.16 (0x00007f13e227a000)
これで動くようになっただろうから、make の再実行。今度は問題なく最後まで
通った。
何で Ghostscript が必要になったのか思い出して、gs コマンドを実行する。
[toyota@mygeeto gnu-ghostscript-9.14.0]$ ./bin/gs --help
GNU Ghostscript 9.14.0 (2014-07-02)
Copyright (C) 2014 Artifex Software, Inc. All rights reserved.
~snip~
Input formats: PostScript PostScriptLevel1 PostScriptLevel2 PostScriptLevel3 PDF
Default output device: bbox
Available devices:
alc1900 alc2000 alc4000 alc4100 alc8500 alc8600 alc9100 ap3250 appledmp
atx23 atx24 atx38 bbox bit bitcmyk bitrgb bitrgbtags bj10e bj10v bj10vh
bj200 bjc600 bjc800 bjc880j bjccmyk bjccolor bjcgray bjcmono bmp16 bmp16m
bmp256 bmp32b bmpgray bmpmono bmpsep1 bmpsep8 ccr cdeskjet cdj1600 cdj500
cdj550 cdj670 cdj850 cdj880 cdj890 cdj970 cdjcolor cdjmono cdnj500
chp2200 cif cljet5 cljet5c cljet5pr coslw2p coslwxl cp50 declj250 deskjet
devicen dj505j djet500 djet500c dl2100 dnj650c epl2050 epl2050p epl2120
epl2500 epl2750 epl5800 epl5900 epl6100 epl6200 eplcolor eplmono
eps2write eps9high eps9mid epson epsonc epswrite escp escpage fmlbp fmpr
fpng fs600 gdi hl1240 hl1250 hl7x0 hpdj1120c hpdj310 hpdj320 hpdj340
hpdj400 hpdj500 hpdj500c hpdj510 hpdj520 hpdj540 hpdj550c hpdj560c
hpdj600 hpdj660c hpdj670c hpdj680c hpdj690c hpdj850c hpdj855c hpdj870c
hpdj890c hpdjplus hpdjportable ibmpro ijs imagen inferno ink_cov inkcov
iwhi iwlo iwlq jetp3852 jj100 jpeg jpegcmyk jpeggray la50 la70 la75
la75plus laserjet lbp310 lbp320 lbp8 lex2050 lex3200 lex5700 lex7000
lips2p lips3 lips4 lips4v lj250 lj3100sw lj4dith lj4dithp lj5gray lj5mono
ljet2p ljet3 ljet3d ljet4 ljet4d ljet4pjl ljetplus ln03 lp1800 lp1900
lp2000 lp2200 lp2400 lp2500 lp2563 lp3000c lp7500 lp7700 lp7900 lp8000
lp8000c lp8100 lp8200c lp8300c lp8300f lp8400f lp8500c lp8600 lp8600f
lp8700 lp8800c lp8900 lp9000b lp9000c lp9100 lp9200b lp9200c lp9300
lp9400 lp9500c lp9600 lp9600s lp9800c lps4500 lps6500 lq850 lxm3200
lxm5700m m8510 mag16 mag256 md1xMono md2k md50Eco md50Mono md5k mgr4 mgr8
mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 mj500c mj6000c mj700v2c mj8000c
ml600 necp6 npdl nullpage oce9050 oki182 oki4w okiibm oprp opvp paintjet
pam pamcmyk32 pamcmyk4 pbm pbmraw pcl3 pcx16 pcx24b pcx256 pcx256 pcx2up
pcxcmyk pcxgray pcxmono pdfwrite pdfwrite pdfwrite pgm pgmraw pgnm
pgnmraw photoex picty180 pj pjetxl pjxl pjxl300 pkm pkmraw pksm pksmraw
plan plan9bm planc plang plank planm png16 png16m png256 png48 pngalpha
pnggray pngmono pnm pnmraw ppm ppmraw pr1000 pr1000_4 pr150 pr201
ps2write psdcmyk psdcmykog psdrgb pxlcolor pxlmono r4081 rinkj rpdl
samsunggdi sgirgb sj48 spotcmyk st800 stcolor sunhmono t4693d2 t4693d4
t4693d8 tek4696 txtwrite uniprint xcf xes xpswrite
~snip~
やっぱり SVG が入ってない。続きは明日。
Ghostscript での SVG サポートの続き。Ghostscript のソースを眺めたけれど、
SVG 辺りのソースは入っていない感じ。git で確認してみる。
9.07 から 9.08 に変わるときに無くなっている。このとき、gdev から始まる
デバイス関係のソースコードが base ディレクトリから devices ディレクトリに
ごっそり移動になって、一応 9.08 の devices ディレクトリも確認してみたが、
やっぱり入っていない。と思ったが、devices/vector にあった。無くなったのは
9.08 から 9.14 に変わったときなので、9.08 のものをとってきて、コンパイル
してみる。
[toyota@mygeeto ~]$ cd /tmp/gnu-ghostscript-9.14.0/devices/vector
[toyota@mygeeto vector]$ wget -q -O gdevsvg.c "http://git.savannah.gnu.org/cgi
t/ghostscript.git/plain/devices/vector/gdevsvg.c?id=release-9_08_0"
[toyota@mygeeto vector]$ cd ..
[toyota@mygeeto devices]$ cp devs.mak devs.mak.bak
[toyota@mygeeto devices]$ vi devs.mak
[toyota@mygeeto devices]$ diff devs.mak.bak devs.mak
1196a1197,1206
> # Scalable Vector Graphics (SVG) output device
>
> svgwrite_=$(DEVOBJ)gdevsvg.$(OBJ)
> $(DD)svgwrite.dev : $(DEVS_MAK) $(svgwrite_) $(GDEV) $(GLD)vector.dev
> $(SETDEV2) $(DD)svgwrite $(svgwrite_)
> $(ADDMOD) $(DD)svgwrite -include $(GLD)vector
>
> $(DEVOBJ)gdevsvg.$(OBJ) : $(DEVVECSRC)gdevsvg.c $(gx_h) $(gdevvec_h)
> $(DEVCC) $(DEVO_)gdevsvg.$(OBJ) $(C_) $(DEVVECSRC)gdevsvg.c
>
[toyota@mygeeto devices]$ cd ..
[toyota@mygeeto gnu-ghostscript-9.14.0]$ cp configure configure.bak
[toyota@mygeeto gnu-ghostscript-9.14.0]$ vi configure
[toyota@mygeeto gnu-ghostscript-9.14.0]$ diff configure.bak configure
670a671
> SVG_DEVS
16680a16682
> SVG_DEVS0=""
16711a16714
> SVGDEV='svgwrite'
16742c16745
< F_DEVS0="$F_DEVS0 $BMP_DEVS $FAX_DEVS $JPEG_DEVS $TIFFDEVS $P
CX_DEVS $PBM_DEVS $PS_DEVS $MISC_FDEVS $XPSDEV"
---
> F_DEVS0="$F_DEVS0 $BMP_DEVS $FAX_DEVS $JPEG_DEVS $TIFFDEVS $P
CX_DEVS $PBM_DEVS $PS_DEVS $MISC_FDEVS $XPSDEV $SVGDEV"
16835a16839,16843
> SVG)
> # SVG writing
> SVG_DEVS0="$SVGDEV"
> ;;
>
16882a16891,16895
> NTS_EXCLUDES="$(echo \"$SVG_DEVS0{@:0}\" | grep -o $ntsdev) $NTS_EXCLUDES
"
> SVG_DEVS0=`echo $SVG_DEVS0 | sed "s/\b$ntsdev\b//g"`
> done
>
> for ntsdev in $NTS_DEVS ; do
16929a16943,16946
> fi
>
> if test -n "$SVG_DEVS0"; then
> SVG_DEVS=`(for i in $SVG_DEVS0; do d='$(DD)'${i}.dev; if ( grep '^'$d $no
ncontribmakefiles 2>&1 >/dev/null) || ( ! test -z "$CONTRIBINCLUDE" ); then ec
ho $d; fi; done) | sort | uniq | tr '\012\015' ' '`
改行が入って汚くなったけど、xpswrite と同じように svgwrite を追加した感じ。
これで make してみる。
[toyota@mygeeto gnu-ghostscript-9.14.0]$ make distclean
~snip~
[toyota@mygeeto gnu-ghostscript-9.14.0]$ ./configure
~snip~
[toyota@mygeeto gnu-ghostscript-9.14.0]$ make
~snip~
gcc -DHAVE_MKSTEMP -DHAVE_FILE64 -DHAVE_FSEEKO -DHAVE_MKSTEMP64 -DHAVE_SETLO
CALE -DHAVE_SSE2 -DHAVE_BSWAP32 -DHAVE_BYTESWAP_H -DHAVE_STRERROR -O2 -Wall -W
strict-prototypes -Wundef -Wmissing-declarations -Wmissing-prototypes -Wwrite-s
trings -Wno-strict-aliasing -Wdeclaration-after-statement -fno-builtin -fno-com
mon -DHAVE_STDINT_H=1 -DHAVE_DIRENT_H=1 -DHAVE_SYS_DIR_H=1 -DHAVE_SYS_TIME_H=1
-DHAVE_SYS_TIMES_H=1 -DHAVE_INTTYPES_H=1 -DGX_COLOR_INDEX_TYPE="unsigned long i
nt" -DUSE_LIBPAPER -I./obj -I./base -I./obj -I./devices -I./devices/vector
-o ./obj/gdevsvg.o -c ./devices/vector/gdevsvg.c
./devices/vector/gdevsvg.c:141:42: error: unknown type name 'floatp'
svg_setlinewidth(gx_device_vector *vdev, floatp width);
~snip~
floatp が宣言されていないとかで、エラーがずらっと。周りのファイルを見て
みると、そのまま double にしているので、double に置き換える。
[toyota@mygeeto gnu-ghostscript-9.14.0]$ mv devices/vector/gdevsvg.c devices/ve
ctor/gdevsvg.c.bak
[toyota@mygeeto gnu-ghostscript-9.14.0]$ sed 's/floatp/double/g' devices/vector
/gdevsvg.c.bak > devices/vector/gdevsvg.c
[toyota@mygeeto gnu-ghostscript-9.14.0]$ make
~snip~
問題なく終了した。gs コマンドを実行してみる。
[toyota@mygeeto gnu-ghostscript-9.14.0]$ ./bin/gs --help
~snip~
ps2write psdcmyk psdcmykog psdrgb pxlcolor pxlmono r4081 rinkj rpdl
samsunggdi sgirgb sj48 spotcmyk st800 stcolor sunhmono svg t4693d2
t4693d4 t4693d8 tek4696 txtwrite uniprint xcf xes xpswrite
~snip~
svg が出てきた。xps は xpswrite と出ていて美しくないので、ちょっと編集
した。
[toyota@mygeeto gnu-ghostscript-9.14.0]$ vi devices/vector/gdevsvg.c
ここで
const gx_device_svg gs_svgwrite_device = {
svg_device_body("svg", 24),
svg_device_procs
};
となっている "svg" を "svgwrite" にして、make の再実行。これで。
[toyota@mygeeto gnu-ghostscript-9.14.0]$ ./bin/gs --help
~snip~
samsunggdi sgirgb sj48 spotcmyk st800 stcolor sunhmono svgwrite t4693d2
t4693d4 t4693d8 tek4696 txtwrite uniprint xcf xes xpswrite
~snip~
svgwrite になった。長かった。明日は、実際に pdf から svg に変換できるか
やってみる。
昨日作った Ghostscript を使って pdf から svg に変換してみる。ちゃんと変換
できて、実用的なものができるかどうか。
[toyota@mygeeto tmp]$ ./gnu-ghostscript-9.14.0/bin/gs -dBATCH -dNOPAUSE -dSAFER
-sDEVICE=svgwrite -sOutputFile=000050724.svg 000050724.pdf
GNU Ghostscript 9.14 (2014-07-02)
Copyright (C) 2014 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
**** Warning: An error occurred while reading an XREF table.
**** The file has been damaged. This may have been caused
**** by a problem while converting or transfering the file.
**** Ghostscript will attempt to recover the data.
Processing pages 1 through 2.
Page 1
| ./devices/vector/gdevsvg.c:335: svg_put_params(): undefined
Page 2
| ./devices/vector/gdevsvg.c:335: svg_put_params(): undefined
Can't find (or can't open) font file %rom%Resource/Font/ArialMT.
Can't find (or can't open) font file ArialMT.
Can't find (or can't open) font file %rom%Resource/Font/ArialMT.
Can't find (or can't open) font file ArialMT.
Querying operating system for font files...
Didn't find this font on the system!
Substituting font Helvetica for ArialMT.
Loading NimbusSanL-Regu font from %rom%Resource/Font/NimbusSanL-Regu... 3797472
2261138 3997940 2410007 3 done.
| ./devices/vector/gdevsvg.c:335: svg_put_params(): undefined
**** This file had errors that were repaired or ignored.
**** The file was produced by:
**** >>>> Microsoftョ Word 2013 <<<<
**** Please notify the author of the software that produced this
**** file that it does not conform to Adobe's published PDF
**** specification.
フォントがないとか、svg_put_params(): undefined とかちょいちょい嫌なエラーが
出ているけど、ファイルはできたみたい。
[toyota@mygeeto tmp]$ ls -l 000050724.*
-rw-rw-r-- 1 toyota toyota 265975 Apr 1 18:59 000050724.pdf
-rw-rw-r-- 1 toyota toyota 14213977 Apr 5 22:48 000050724.svg
とんでもなくファイルサイズが増えている。できた SVG ファイルをエディタで
見てみたら、当たり前だけどテキストで。このファイルをブラウザで表示して
みた。
Internet Explorer 11.0.9600.18231
|
Google Chrome 49.0.2623.110
|
Opera 36.0
|
Mozilla Firefox 45.0.1
|
元 PDF + Adobe Reader(65%縮小表示)
|
いくつかわかったことがあって。
・1ページ目しか入っていない
・サイズが width=595 height=841pt の固定になった
・どのブラウザでも大きさ、レイアウトは一致
・IE の文字の処理がへたくそ(アンチエイリアスしてない)
・Chrome / Opera の画像にはノイズが乗る
という感じで、処理エンジンによってだいぶ見た目が異なることがわかった。
SVG ファイルを眺めていてわかったけど、font のデータがなかったせいなのか、
文字も全て図形データで扱っている。画像なんかもテキストで表現しているので
このファイルサイズになってしまったのか。
半角英数字のフォントが違うように見えるのは、フォントが無かったからなの
だろうけど、Ghostscript に入っているフォントを確認してみた。
[toyota@mygeeto tmp]$ cd gnu-ghostscript-9.14.0/Resource/Font/
[toyota@mygeeto Font]$ ls -l
total 1540
-rw-r--r-- 1 toyota toyota 45469 Jul 2 2014 CenturySchL-Bold
-rw-r--r-- 1 toyota toyota 44923 Jul 2 2014 CenturySchL-BoldItal
-rw-r--r-- 1 toyota toyota 45573 Jul 2 2014 CenturySchL-Ital
-rw-r--r-- 1 toyota toyota 45404 Jul 2 2014 CenturySchL-Roma
-rw-r--r-- 1 toyota toyota 87395 Jul 2 2014 Dingbats
-rw-r--r-- 1 toyota toyota 49013 Jul 2 2014 NimbusMonL-Bold
-rw-r--r-- 1 toyota toyota 47518 Jul 2 2014 NimbusMonL-BoldObli
-rw-r--r-- 1 toyota toyota 44973 Jul 2 2014 NimbusMonL-Regu
-rw-r--r-- 1 toyota toyota 43953 Jul 2 2014 NimbusMonL-ReguObli
-rw-r--r-- 1 toyota toyota 41938 Jul 2 2014 NimbusRomNo9L-Medi
-rw-r--r-- 1 toyota toyota 43088 Jul 2 2014 NimbusRomNo9L-MediItal
-rw-r--r-- 1 toyota toyota 42910 Jul 2 2014 NimbusRomNo9L-Regu
-rw-r--r-- 1 toyota toyota 44278 Jul 2 2014 NimbusRomNo9L-ReguItal
-rw-r--r-- 1 toyota toyota 32580 Jul 2 2014 NimbusSanL-Bold
-rw-r--r-- 1 toyota toyota 31940 Jul 2 2014 NimbusSanL-BoldCond
-rw-r--r-- 1 toyota toyota 34439 Jul 2 2014 NimbusSanL-BoldCondItal
-rw-r--r-- 1 toyota toyota 34791 Jul 2 2014 NimbusSanL-BoldItal
-rw-r--r-- 1 toyota toyota 31529 Jul 2 2014 NimbusSanL-Regu
-rw-r--r-- 1 toyota toyota 31110 Jul 2 2014 NimbusSanL-ReguCond
-rw-r--r-- 1 toyota toyota 33501 Jul 2 2014 NimbusSanL-ReguCondItal
-rw-r--r-- 1 toyota toyota 34256 Jul 2 2014 NimbusSanL-ReguItal
-rw-r--r-- 1 toyota toyota 61146 Jul 2 2014 StandardSymL
-rw-r--r-- 1 toyota toyota 42939 Jul 2 2014 URWBookmanL-DemiBold
-rw-r--r-- 1 toyota toyota 43394 Jul 2 2014 URWBookmanL-DemiBoldItal
-rw-r--r-- 1 toyota toyota 42665 Jul 2 2014 URWBookmanL-Ligh
-rw-r--r-- 1 toyota toyota 43341 Jul 2 2014 URWBookmanL-LighItal
-rw-r--r-- 1 toyota toyota 50399 Jul 2 2014 URWChanceryL-MediItal
-rw-r--r-- 1 toyota toyota 31290 Jul 2 2014 URWGothicL-Book
-rw-r--r-- 1 toyota toyota 32141 Jul 2 2014 URWGothicL-BookObli
-rw-r--r-- 1 toyota toyota 32831 Jul 2 2014 URWGothicL-Demi
-rw-r--r-- 1 toyota toyota 32763 Jul 2 2014 URWGothicL-DemiObli
-rw-r--r-- 1 toyota toyota 52389 Jul 2 2014 URWPalladioL-Bold
-rw-r--r-- 1 toyota toyota 53365 Jul 2 2014 URWPalladioL-BoldItal
-rw-r--r-- 1 toyota toyota 51901 Jul 2 2014 URWPalladioL-Ital
-rw-r--r-- 1 toyota toyota 52222 Jul 2 2014 URWPalladioL-Roma
という感じ。PDF から SVG に変換して実用するには、ちょっと問題が多いかな。
昨日の続き。フォントを用意してあげたとき、作られる SVG に影響があるのか
やってみた。まず、Microsoft Word で 半角英数字だけの文書を作成して PDF で
保存した。Reader で開いてプロパティを確認。
ついでに、昨日の変換した IPA の文書はこんな感じ。さすがに日本語のフォントは
IPA フォントを使っている。MS 明朝の文字も見えるけど。
で、この作った PDF ファイルを SVG に変換。arial.ttf を引っ張ってきて、
/tmp に置いてから。
[toyota@mygeeto tmp]$ export GS_FONTPATH=/tmp
[toyota@mygeeto tmp]$ ls /tmp/*.ttf
/tmp/arial.ttf
[toyota@mygeeto tmp]$ ./gnu-ghostscript-9.14.0/bin/gs -dBATCH -dNOPAUSE -dSAFER
-sDEVICE=svgwrite -sOutputFile=2016040600.svg 2016040600.pdf
GNU Ghostscript 9.14 (2014-07-02)
Copyright (C) 2014 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
**** Warning: An error occurred while reading an XREF table.
**** The file has been damaged. This may have been caused
**** by a problem while converting or transfering the file.
**** Ghostscript will attempt to recover the data.
Processing pages 1 through 1.
Page 1
| ./devices/vector/gdevsvg.c:335: svg_put_params(): undefined
Can't find (or can't open) font file %rom%Resource/Font/ArialMT.
Can't find (or can't open) font file ArialMT.
Can't find (or can't open) font file %rom%Resource/Font/ArialMT.
Can't find (or can't open) font file ArialMT.
Scanning /tmp for fonts... **** Warning: can't process font stream, loading f
ont by the name.
Loading ArialMT font from /tmp/arial.ttf... 3980548 2257912 3274836 1873311 3 d
one.
| ./devices/vector/gdevsvg.c:335: svg_put_params(): undefined
**** This file had errors that were repaired or ignored.
**** The file was produced by:
**** >>>> Microsoftョ Word 2013 <<<<
**** Please notify the author of the software that produced this
**** file that it does not conform to Adobe's published PDF
**** specification.
見た感じ用意した arial.ttf が使われた。出来たファイルのサイズを確認して
みる。
[toyota@mygeeto tmp]$ ls -l 2016040600.*
-rwxr-xr-x 1 toyota toyota 17411 Apr 6 22:09 2016040600.pdf
-rw-rw-r-- 1 toyota toyota 858875 Apr 6 22:10 2016040600.svg
だいぶサイズが大きくなった。中を眺めてみると、やっぱり文字も図形で扱って
居る感じで。元の PDF と SVG を比較。サイズが異なるので、SVG のサイズ指定を
拡大して、Firefox で表示した結果。
PDF + Adobe Reader 10.1.15
|
SVG + Firefox 45.0.1
|
フォントの感じは同じように見える。フォントに関してはベクタデータではない
感じで、svg ファイルを少しいじって拡大してみると。
SVG 拡大
|
ギザギザ感と横線が出てしまう。svg ファイルの中身から見ても、横長の棒を
組み合わせて文字を作っている。ちゃんとしたベクタデータに変換してくれる
ソフトってないものかな。あったらサイズが小さくなるだろうし。
前から考えていたことがあって。文は何でも良いのだけど、例えば
「吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。」
の文を1文字で表してみようと。何を言っているのか理解に苦しむだろうけど、
簡単に言うと、上記の文字を全部含んだフォントを作ってしまえばと思って。
昨日 SVG ファイルを作ることができた。SVG はベクタデータなので、同じベクタ
データのフォントファイルに変換できたら、複数文字を含んだ1文字分のフォントを
作ることで長文も1文字分で表せると。さっそくやってみる。
まずは、word で文を作って PDF で保存した。それを Ghostscript で変換して
SVG にした。SVG からフォントファイルに変換できるソフトは無いかと調べると、
web でのサービスだけど IcoMoon というところでできるようなので、やってみた。
IcoMoon App
最初は操作が良くわからないけど、使っているうちになんとなくわかるように
なってきた。出力したフォントで、ページを作ってみた。
横幅が大きくて途中で切れているけど、a と入れているだけで複数文字を表示
できている。ブラウザいくつかで試したけど、Firefox だと表示が汚い。
昨日の続き。フォントを @font-face で指定すると、表示するのにちょっと時間が
かかる。html を読み込んだあとに、フォントファイルを取得しているせいだろう
けど、ローカルにあるファイルごときでも1秒ぐらいかかる。web で表示させた
場合、フォントファイルだけ読み込みに失敗する可能性もあるので、さらに時間が
かかることが予想されるし。ここは、DATA URI スキームの出番だ、ということで
できるかどうかわからないけど、やってみることにした。
テストなので、1文字分のフォントを作成。IPA のフォントをサブセットフォント
メーカーというソフトで取り出した。
この ttf ファイルを base64 にして文字にした。mime type がわからないので、
/etc/mime.types ファイルを参考に、html はこんな感じになった。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=charset=utf-8">
<title>test for font-face</title>
<style type="text/css" media="screen, print">
@font-face {
font-family: "ipaa";
src: url('data:application/font-sfnt;base64,AAEAAAALAI~長いので省略~');
}
</style>
</head>
<body>
<span style="font-family: 'ipaa'; font-size: 48pt;">a</span>
</body>
</html>
実際の html はここに。
読み込みのタイムラグもないし、良い感じになった。
一昨日とか昨日の続きというか、前から考えていたこと。web ページを公開すると
どこからともなく bot がやってくる。お行儀の良い bot なら文句はないのだけど
robot.txt なんて無視したり、メールアドレスを収集したりするような頂けない
bot も多数ある。
最近ではメールアドレスを画像にしても解析するものがあるとかで、効果が薄く
なってきている。
そのメールアドレスについて、画像化ではなくフォント化という方法が取れる。
これは、一昨日にやったテストで実現したもので、画像解析はあってもフォント
解析までしないでしょうという前提。さらに、昨日やったように、html に入れて
しまえば、そこらの bot ではそこまで解析しないでしょう。
もう1つ考えていることが、フォントを使った換字式暗号を作って、bot 対策や
コピペ対策にできないかと。やるだけやってみる。
まず、文字の置き換えルールを作成。適当に並べてこんな感じにした。
abcdefghijklmnopqrstuvwxyz
xqjezsbiurpydmfhwlkotgacvn
次に必要な文字を昨日使ったサブセットフォントメーカーで取り出す。ここから
どうしたものかと悩んで、FontForge というソフトが使えそうなので、ダウン
ロードしてインストール。FontForge でさっき作ったフォントを開いてみた。
文字列を上で作ったルールで入れ替える。
保存して、ファイルサイズを見てみた。
4.51KB しかない。予想よりもだいぶ小さくなった。フォントビューアーで開いて
みた、
ちゃんと換字されている。あとは文書の作成。変換が面倒なので、配列を作って
一括変換した。
元の文章は。
in cryptography, a substitution cipher is a method of encoding by which units of plaintext are replaced with ciphertext, according to a fixed system; the "units" may be single letters (the most common), pairs of letters, triplets of letters, mixtures of the above, and so forth. the receiver deciphers the text by performing the inverse substitution.
|
変換すると、こうなった。
um jlvhofblxhiv, x ktqkouotoufm juhizl uk x dzoife fs zmjfeumb qv aiuji tmuok fs hyxumozco xlz lzhyxjze auoi juhizlozco, xjjfleumb of x sucze kvkozd; oiz "tmuok" dxv qz kumbyz yzoozlk (oiz dfko jfddfm), hxulk fs yzoozlk, oluhyzok fs yzoozlk, ducotlzk fs oiz xqfgz, xme kf sfloi. oiz lzjzugzl ezjuhizlk oiz ozco qv hzlsfldumb oiz umgzlkz ktqkouotoufm.
|
この文書を出力頻度分析にかけてみた。
Result
文字数:351、パターン数:29
# 文字 出現回数 出現割合(%)
1 56 15.95
2 z 37 10.54
3 o 36 10.26
4 u 24 6.84
5 l 20 5.70
6 k 20 5.70
7 f 19 5.41
8 i 15 4.27
9 m 14 3.99
10 x 12 3.42
文書を見ても、x が a なのは確実だし、頻度から z は e だろうし、解読でき
そうな感じだな。今回は解読とかじゃなくて、簡単にコピーさせないものなので
特に問題ないけど。
文字を変換するのに5分ぐらいで作った C# のコードを一応載せておく。
char[] cp = "xqjezsbiurpydmfhwlkotgacvn".ToCharArray();
char[] tr = textBox1.Text.ToCharArray();
for (int i = 0; i < tr.Length; i++ )
{
if(tr[i] >= 'a' && tr[i] <= 'z'){
tr[i] = cp[((int)tr[i] - 'a')];
}
}
textBox2.Text = new string(tr);
これを html にフォントと一緒に組み込むのは、明日に。
昨日の続き。このページで実験すると面倒そうなので、新しく html ファイルを
作って、そこでやってみた。表示してみると。
um jlvhofblxhiv, x ktqkouotoufm juhizl uk x dzoife以下略
となった。ここで間違いに気が付く。A→B に変換したものは B→Aにしないと
いけなかった。A→B と2回やっただけになっているので、C# のコードを修正して
作り直した。
逆変換の並びは。
abcdefghijklmnopqrstuvwxyz
wgxmdovphcsrnztkbjfuiyqale
になって、変換するとこうなった。
hz xjlkutvjwkpl, w figfuhuiuhtz xhkpdj hf w nduptm to dzxtmhzv gl qphxp izhuf to krwhzudau wjd jdkrwxdm qhup xhkpdjudau, wxxtjmhzv ut w ohadm flfudn; upd "izhuf" nwl gd fhzvrd rduudjf (upd ntfu xtnntz), kwhjf to rduudjf, ujhkrduf to rduudjf, nhauijdf to upd wgtyd, wzm ft otjup. upd jdxdhydj mdxhkpdjf upd udau gl kdjotjnhzv upd hzydjfd figfuhuiuhtz.
|
これで html を作成してみた。
文字列のコピー対策になった。日本語を入れたり、2文字表示のフォントを入れたり
したら、よりコピーされにくくなる。他にも「携帯」「裏技」の文字をそれぞれ、
「地球」「環境」などのフォント変換しておいて、検索エンジンからやってくる
人を増やすというおかしなこともできる。
ただし、テキストブラウザの人とか、対応していないブラウザの人には無意味な
文字が延々と続くことになる。
このあたり、フォントを埋め込む PDF なんかでも応用ができそう。
Android studio + エミュレータを使っているとメモリがきつくなり、Photoshop を
同時に起動できなかったりする状態を改善すべく、メモリを買った。
今入っているメモリが CL11 なので、少しお高い CL9 のではなく CL11 の安い
のでシリコンパワー製のを購入した。
ぼけちゃったけど、チップもシリコンパワー製。片面実装のものなので、1チップ
あたり 512MB ということになる。
さっそく装着して、bios 画面を見てみたら、ちゃんと 16GB で認識してくれた。
最近の bios はプリントスクリーンの機能が付いていてありがたい。
それにマウスも使えるし、便利な時代になったものだ。ASUS SPD Information と
いう項目でメモリ詳細が見られるので、見てみた。
製造は2016年の12週目で、3月終わりぐらいかな。新しいものみたい。
bios での確認は終わったので Windows の起動をしてみた。CPU-Z でメモリ動作を
確認してみると。
Dual になっている。理由はわからないけど、良しとするか。一応、HDBench で
ベンチマークを取ったけど、以前と変わらないのでここには載せず。
最近のメモリは永久保証が付いているとは言え、しばらく経ってからの交換と
なると時間がかかりそうなので、この際だからメモリのテストをしようかと。
MemTest86 をダウンロードしてきて、CD に焼こうかと思ったが、焼いたところで
この先3年ぐらいは使わない気がするし、そんな先だと新しいバージョンが出て
いるだろうから、少し考えて CD を作るのをやめた。
で、どうしたかと言うと、USB メモリを使う USB メモリ版を作ることにした。
USB Drive 版をダウンロードして、imageUSB を起動した。
附属してきた IMG ファイルを書き込んで完了。USB メモリから起動するように
bios を変更して、起動してみたが。ウンともスンとも言わない。モニタが省電力
モードにならないので、出力しているようだけど、キーボードを押しても何も
表示されないまま。
USB メモリの作成に失敗したかと、もう一度同じことをやってみたけど、全く
変わらず。USB 3.0 の場所に刺しているのが悪いのかと、USB メモリを抜いた
瞬間、MemTest86 の画面が出た。USB 2.0 に刺しても同じで、やっぱり抜いた
瞬間に起動した。良くわからないけど、起動したから良しとする。
えらく時間がかかりそう。
結局、テストが終了するのに9時間20分もかゝり、問題はなかったので、このまま
使うことに。
昨日使った USB メモリの中身を削除して、別なデータを入れようとしたら容量が
50MB ぐらいしかない。フォーマットし直しかと思って Explorer からフォーマット
しようとしても、48MB の容量から選べない。
仕方なく「ディスクの管理」を起動してみたが、USB メモリの中のパーティションを
削除することができない。最後の手段ということで、管理者モードでコマンド
プロンプトを開いて、diskpart を使って削除。削除するのも
delete partition override
と override を付けないと駄目で、USB メモリのフォーマットごときで、かなり
時間を使ってしまった。これ、一般の人はどうしてるんだろうか。
vi でファイルを編集していて、「+」文字の検索をしようと、いつものように
/+
という感じで、正規表現で使われる文字だからうまく検索できないかもな、と
少し思いつつもやってみたら、案の定。
E866: (NFA 正規表現) 位置が誤っています: +
E64:\+ の後になにもありません
と出てきた。一応、バージョンは。
[toyota@mygeeto ~]$ vi --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 10 2014 06:55:55)
Included patches: 1-160
~省略~
ということで、どうしたものかと頭を捻って繰り返すこと5回ぐらい、これで検索
することができた。
/\(+\)
もっと頭の良いやり方があるような気もする。
Android Atudio 2 が出たのだけど、少し様子を見ていた。でも、やっぱり新しい
バージョンの方が良いだろうということで、インストールすることにした。と
言っても、ダウンロードする容量が 1G 以上あるので、時間がかかりそう。
ダウンロードが完了して、インストール。前のバージョンはバッサリと削除する
ことにした。
アンインストール処理後、インストールが始まった。また、ネットワークから
大量のダウンロードしながらインストールかと思ったけど、そうでもないみたい。
5分ぐらいでインストールは完了した。もっとかかると思っていたけど、あっさり
だったな。
これまで作ったアプリが動くか試そうと思ったけど、続きは明日に。
昨日 Update した Android Studio を起動してみた。設定の引き継ぎをするか
聞いてきたので、引継ぎをして。
Android Studio 自体は無事に起動した。
プロジェクトでは、エラーが出ていた。
Error: Gradle version 2.10 is required. Current version is 2.8. If using the
gradle wrapper, try editing the distributionUrl in C:\Users\toyota\
AndroidStudioProjects\ListViewTest\gradle\wrapper\gradle-wrapper.properties to
gradle-2.10-all.zip
Fix Gradle wrapper and re-import project
Gradle settings
gradle-2.10 なるものが入っているか、確認してみた。
$ pwd
/cygdrive/c/Program Files/Android
$ find ./ -name "gradle-2.10*"
./Android Studio/gradle/gradle-2.10
あるみたい。「Fix Gradle wrapper and re-import project」をクリックしたら
自動的に更新してくれて解決した。
Android Studio 2.0 を少し使ってみて、大きく変わったと思ったのが、アプリを
実行するときの動作。実機やエミュレータを選択する辺りが、両方同時に起動
したり、ソースが変わってないときの動作が違って戸惑った。まだ慣れないけど、
そのうちなんとかなるでしょう。
Google でいつものように検索をしてみたら、最近は身長までも Google が答えて
くれて、検索エンジンの域をだいぶ超えていると感じて。
あのタブーを検索してみたらどうなるのか、やってみた。
結果は出たけど、この数字が出てくるみたい。
10日の続き。html の変換を自動でできないかと、考えてみた。まず、html を
解析してタグの削除をして、文字毎に改行を入れた後、sort と uniq を使い、
使っている文字を抽出してみようかと。
まず、sort コマンドと uniq コマンドが utf-8 の文字列を扱えるのか、実験
してみた。まずは、cygwin の環境で実験。
$ uname -a
CYGWIN_NT-6.3 falleen 2.4.1(0.293/5/3) 2016-01-24 11:26 x86_64 Cygwin
これで、utf-8 のファイルを作ってやってみた。
$ cat memo
さしすせそ
こ
け
く
き
か
あいうえお
か
き
く
け
こ
五臓六腑
四面楚歌
三面六臂
二束三文
一刀両断
$ sort memo
あいうえお
か
か
き
き
く
く
け
け
こ
こ
さしすせそ
一刀両断
五臓六腑
三面六臂
四面楚歌
二束三文
$ sort memo | uniq
あいうえお
か
き
く
け
こ
さしすせそ
一刀両断
五臓六腑
三面六臂
四面楚歌
二束三文
ちゃんと動作するみたい。同じことを Redhat 7.1 の環境でもやってみた。uname
の結果は。
[toyota@mygeeto tmp]$ uname -s -r -m
Linux 3.10.0-el7.mygeeto.20150701 x86_64
同様に動作した。curl → sed → perl? → sort → uniq で出来るかな。明日、
続きをやってみる。
昨日の続き。まずは、小さな html でタグを削除する実験をしてみる。curl で
yahoo.com のトップページを拾う。
[toyota@mygeeto tmp]$ curl www.yahoo.com
<HTML>
<HEAD>
<TITLE>Document Has Moved</TITLE>
</HEAD>
<BODY BGCOLOR="white" FGCOLOR="black">
<H1>Document Has Moved</H1>
<HR>
<FONT FACE="Helvetica,Arial"><B>
Description: The document you requested has moved to a new location. The new l
ocation is "https://www.yahoo.com/".
</B></FONT>
<HR>
</BODY>
sed を使ってタグを削除してみる。
[toyota@mygeeto tmp]$ curl -s www.yahoo.com | sed -e 's/<[^<]*>//g'
Document Has Moved
Document Has Moved
Description: The document you requested has moved to a new location. The new l
ocation is "https://www.yahoo.com/".
動いている。www.yahoo.co.jp でやってみたら、気になることがいくつか。まず、
が残ってしまうこと。あとは、style タグと script タグの中身が残って
しまうこと。動作的に html の中身を変換するので、title タグも削除したい。
title タグというよりも、head タグごと削除した方が良い。style タグも script
タグも head タグに収めることが多いので、
head タグの削除 → style タグの削除 → script タグの削除 → タグの削除
という順番で削除すれば良いのかな。
sed で head タグごと削除しようとしたら、sed は行ごとに動作するので、うまく
動作せず。tr で改行を削除するようにして。
[toyota@mygeeto tmp]$ curl -s www.yahoo.co.jp | tr -d '\n' | tr -d '\r' | sed -
e 's/<head>.*<\/head>//g' | sed -e 's/<style>.*<\/style>//g' | sed -e 's/<scrip
t>.*<\/script>//g' | sed -e 's/<[^<]*>//g' | sed -e 's/&[^;]*;//g'
ヘルプYahoo! JAPANトップページの機能を正しくご利用いただくには、下記の環境が必
要となります。Windows:Internet Explorer 9.0以上 / Chrome 最新版 / Firefox 最新
~省略~
規取得 ]メール - メールアドレスを取得カレンダー - カレンダーを活用ポイントを確
認ログイン履歴を確認会社概要 - 投資家情報 - 社会的責任 - 企業行動憲章 - 広告掲
載について - 採用情報利用規約 - 免責事項 - メディアステートメント - セキュリテ
ィーの考え方 - プライバシーポリシーCopyright (C) 2016 Yahoo Japan Corporation.
All Rights Reserved.
これで本文のみを取り出すことができた。style と script の削除が後方一致
しているのが気になるのと、> とか を削除するため sed を使って
's/&[^;]*;//g' をしているが、& を & と書いてないところがあって、かなり
削除されてしまっている。
変換するのは私が書いた html の予定なので、この辺りは大丈夫かな。問題が出る
ようだったら、また直すことになるけど。
昨日の続き。調べていたら、sed の -e オプションは複数指定が可能なことを
見つけた。昨日のコマンドはちょっと短くなるな。
今日は、タグを削除した html から、使われている文字を抽出する。まず、sed で
改行を入れて sort, uniq してみる。一昨日使ったファイルで試してみた。
[toyota@mygeeto tmp]$ sed 's/\(.\)/\1\r\n/g' memo
さ
し
~省略~
一
刀
両
断
[toyota@mygeeto tmp]$ sed 's/\(.\)/\1\r\n/g' memo | sort
~省略~
sort を通すと何も出なくなった。そもそも、sed の結果では改行が3回入るので、
動きを見るため、1文字のみのファイルを作ってやってみた。
[toyota@mygeeto tmp]$ cat memo0
あ[toyota@mygeeto tmp]$ od -x memo0
0000000 81e3 0082
0000003
[toyota@mygeeto tmp]$ sed 's/\(.\)/\1\r\n/g' memo0
あ
[toyota@mygeeto tmp]$ sed 's/\(.\)/\1\r\n/g' memo0 | od -x
0000000 0de3 810a 0a0d 0d82 000a
0000011
big endian にしてみると、
E3 0D 0A 81 0D 0A 82 0D 0A
になるので、完全にバラバラにされてしまっている。表示できているのが不思議な
ぐらい。cygwin でもやってみた。
$ cat memo0
あ
$ sed 's/\(.\)/\1\r\n/g' memo0
あ
$ sed 's/\(.\)/\1\r\n/g' memo0 | od -x
0000000 81e3 0d82 000a
0000005
big endian にしてみると、
E3 81 82 0D 0A
になって、うまく動作している。心当たりがあったので、Linux の環境変数 LANG
を確認してみた。
[toyota@mygeeto tmp]$ echo $LANG
C
これが原因かもしれないので、変更して再実行。
[toyota@mygeeto tmp]$ export LANG=ja_JP.UTF-8
[toyota@mygeeto tmp]$ sed 's/\(.\)/\1\r\n/g' memo0
あ
[toyota@mygeeto tmp]$ sed 's/\(.\)/\1\r\n/g' memo0 | od -x
0000000 81e3 0d82 000a
0000005
目的通りの動作になった。最初のファイルでもできるかやってみる。
[toyota@mygeeto tmp]$ sed 's/\(.\)/\1\r\n/g' memo | sort | uniq
あ
い
う
え
お
か
き
く
け
こ
さ
し
す
せ
そ
一
歌
五
三
四
楚
臓
束
断
刀
二
文
面
両
六
腑
臂
大丈夫なので、Yahoo Japan から文字を拾って、最後に改行を削除してみる。
[toyota@mygeeto tmp]$ curl -s www.yahoo.co.jp | tr -d '\n' | tr -d '\r' | sed -
e 's/<head>.*<\/head>//g' -e 's/<style>.*<\/style>//g' -e 's/<script>.*<\/scrip
t>//g' -e 's/<[^>]*>//g' -e 's/&[^;]*;//g' | sed 's/\(.\)/\1\r\n/g' | sort | un
iq | tr -d '\n' | tr -d '\r'
!()-./012356789ABCDEFGIJMNOPRSWY[]acdefghilmnoprstvwxy 、。・:ー「」いえかが
きくこごしすただちっつてでとどなにのはへべまもやりるをァアィイオカキクグゲサシ
ジスセタダッツテデトドナニバヒビピフブプヘペホポマムメモヤュョラリルレロン愛以
~省略~
信振新人図数性整正籍責占線装続逮大脱団地朝聴超定的天田電投動得日任認能配迫半板
版否被必表品不布仏分聞米便捕報方本免毛役約予容用要落覧利履理旅歴連路
後は、フォントファイルからこの文字分だけ抜き出して、入れ替えか再マッピング
させて、と先は長いな。
フォントファイルから指定の文字だけ取り出して、別のフォントファイルに保存
したい。前回は、Windows で動くサブセットフォントメーカーというソフトを
使ったけど、今回は自動で行うので使えない。調べると、FontForge のスクリプト
で出来そうだけど、ちょっと指定が面倒そうな感じ。他に無いかと探したら、
font-optimizer という Perl のスクリプトがあった。使えるかどうか、やって
みる。
[toyota@mygeeto tmp]$ wget -q https://bitbucket.org/philip/font-optimizer/get/3
ec118f146c7.zip
[toyota@mygeeto tmp]$ unzip 3ec118f146c7.zip
Archive: 3ec118f146c7.zip
inflating: philip-font-optimizer-3ec118f146c7/.hg_archival.txt
inflating: philip-font-optimizer-3ec118f146c7/.hgignore
~省略~
実行してみた。
[toyota@mygeeto tmp]$ cd philip-font-optimizer-3ec118f146c7/
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./subset.pl
Can't locate Digest/SHA.pm in @INC (@INC contains: ext/Font-TTF/lib /usr/local/
lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl
5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Font/Subsetter.pm line 31.
BEGIN failed--compilation aborted at Font/Subsetter.pm line 31.
Compilation failed in require at ./subset.pl line 8.
BEGIN failed--compilation aborted at ./subset.pl line 8.
Digest/SHA.pm というモジュールがいるとのこと。ダウンロードして、再実行
してみた。
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ cd /tmp
[toyota@mygeeto tmp]$ wget -q http://search.cpan.org/CPAN/authors/id/M/MS/MSHEL
OR/Digest-SHA-5.95.tar.gz
[toyota@mygeeto tmp]$ tar xfz Digest-SHA-5.95.tar.gz
[toyota@mygeeto tmp]$ mkdir philip-font-optimizer-3ec118f146c7/ext/Font-TTF/lib
/Digest
[toyota@mygeeto tmp]$ cp Digest-SHA-5.95/lib/Digest/SHA.pm philip-font-optimize
r-3ec118f146c7/ext/Font-TTF/lib/Digest/
[toyota@mygeeto tmp]$ cd philip-font-optimizer-3ec118f146c7/
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./subset.pl
Can't locate loadable object for module Digest::SHA in @INC (@INC contains: ext
/Font-TTF/lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/ve
ndor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at
Font/Subsetter.pm line 31.
Compilation failed in require at Font/Subsetter.pm line 31.
BEGIN failed--compilation aborted at Font/Subsetter.pm line 31.
Compilation failed in require at ./subset.pl line 8.
BEGIN failed--compilation aborted at ./subset.pl line 8.
Digest/SHA はコンパイルする必要があるみたい。仕方ない、やることに。
[toyota@mygeeto tmp]$ cd Digest-SHA-5.95/
[toyota@mygeeto Digest-SHA-5.95]$ less README
[toyota@mygeeto Digest-SHA-5.95]$ perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for Digest::SHA
[toyota@mygeeto Digest-SHA-5.95]$ make
cp lib/Digest/SHA.pm blib/lib/Digest/SHA.pm
/usr/bin/perl /usr/share/perl5/vendor_perl/ExtUtils/xsubpp -typemap /usr/share
/perl5/ExtUtils/typemap -typemap typemap SHA.xs > SHA.xsc && mv SHA.xsc SHA.c
gcc -c -I. -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-prote
ctor -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -pi
pe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=
ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -DVERSION=\"5.95\
" -DXS_VERSION=\"5.95\" -fPIC "-I/usr/lib64/perl5/CORE" SHA.c
Running Mkbootstrap for Digest::SHA ()
chmod 644 SHA.bs
rm -f blib/arch/auto/Digest/SHA/SHA.so
gcc -shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-pr
otector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=gene
ric -Wl,-z,relro SHA.o -o blib/arch/auto/Digest/SHA/SHA.so \
\
chmod 755 blib/arch/auto/Digest/SHA/SHA.so
cp SHA.bs blib/arch/auto/Digest/SHA/SHA.bs
chmod 644 blib/arch/auto/Digest/SHA/SHA.bs
cp shasum blib/script/shasum
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/shasum
Manifying blib/man1/shasum.1
Manifying blib/man3/Digest::SHA.3pm
[toyota@mygeeto Digest-SHA-5.95]$ make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0,
'blib/lib', 'blib/arch')" t/*.t
t/allfcns.t ...... ok
t/base64.t ....... ok
t/bitbuf.t ....... ok
t/bitorder.t ..... ok
t/fips180-4.t .... ok
t/fips198.t ...... ok
t/gg.t ........... ok
t/gglong.t ....... ok
t/hmacsha.t ...... ok
t/inheritance.t .. ok
t/ireland.t ...... ok
t/methods.t ...... ok
t/nistbit.t ...... ok
t/nistbyte.t ..... ok
t/pod.t .......... skipped: Test::More not installed
t/podcover.t ..... skipped: Test::More not installed
t/rfc2202.t ...... ok
t/sha1.t ......... ok
t/sha224.t ....... ok
t/sha256.t ....... ok
t/sha384.t ....... ok
t/sha512.t ....... ok
t/state.t ........ ok
t/unicode.t ...... ok
t/woodbury.t ..... ok
All tests successful.
Files=25, Tests=132, 1 wallclock secs ( 0.18 usr 0.04 sys + 0.70 cusr 0.13
csys = 1.05 CPU)
Result: PASS
[toyota@mygeeto Digest-SHA-5.95]$ cd /tmp
[toyota@mygeeto tmp]$ mkdir philip-font-optimizer-3ec118f146c7/ext/Font-TTF/lib
/auto
[toyota@mygeeto tmp]$ mkdir philip-font-optimizer-3ec118f146c7/ext/Font-TTF/lib
/auto/Digest
[toyota@mygeeto tmp]$ mkdir philip-font-optimizer-3ec118f146c7/ext/Font-TTF/lib
/auto/Digest/SHA
[toyota@mygeeto tmp]$ cp Digest-SHA-5.95/blib/lib/Digest/SHA.pm philip-font-opt
imizer-3ec118f146c7/ext/Font-TTF/lib/Digest/
[toyota@mygeeto tmp]$ cp Digest-SHA-5.95/blib/arch/auto/Digest/SHA/SHA.so phili
p-font-optimizer-3ec118f146c7/ext/Font-TTF/lib/auto/Digest/SHA
[toyota@mygeeto tmp]$ cd philip-font-optimizer-3ec118f146c7/
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./subset.pl
Usage:
./subset.pl [options] [inputfile.ttf] [outputfile.ttf]
Options:
--chars=STRING characters to include in the subset (defaults to "test")
--charsfile=FILE utf8-encoded file containing characters to include
--verbose, -v print various details about the font and the subsetting
--include=FEATURES comma-separated list of feature tags to include
(all others will be excluded by default)
--exclude=FEATURES comma-separated list of feature tags to exclude
(all others will be included by default)
--apply=FEATURES comma-separated list of feature tags to apply to the
font directly (folding into the cmap table),
e.g. "smcp" to replace all letters with small-caps
versions. (You should use --include/--exclude to remove
the features, so they don't get applied a second time
when rendering.)
--licensesubst=STRING substitutes STRING in place of the string ${LICENSESUBST}
in the font's License Description
ようやく動いた。長くなったので、続きは明日。
ようやく動作した subset.pl を動かしてみる。IPA のフォントをコピーして、
簡単な文字からやってみることに。
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./subset.pl --chars="abcd"
/tmp/ipagp.ttf abcd.ttf
defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 146.
(Maybe you should just omit the defined()?)
defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 189.
(Maybe you should just omit the defined()?)
defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 295.
(Maybe you should just omit the defined()?)
Uses unhandled table 'vhea'
Uses unhandled table 'vmtx'
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ls -l abcd.ttf
-rw-rw-r-- 1 toyota toyota 55040 4月 22 21:09 abcd.ttf
できた。ファイルサイズが大きい気がするな。Windows のフォントビューアで
確認する。
だめみたい。念のため、html で @font-face の指定をして表示させてみたが、
Chrome でも Firefox でも駄目。file コマンドで確認してみた。
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ file abcd.ttf
abcd.ttf: TrueType font data
TrueType font の判定なので、ファイルの頭はちゃんとできている感じはする
のだけど。ttf って Windows 向けと Mac 向けと違うらしいので、ひょっとしたら
Mac 向けでできてしまったのではないかと思い、以前インストールした FontForge
で開いてみた。
フォント名が不正とかなんとか。問題はフォント名だけなのだろうか。ここで
FontForge が終了すると思ったら、意外にもファイルを開いてくれて。
指定した文字は入っていた。この状態をどう理解して良いのか少し考えてしまうの
だけど、font-optimizer のオプションにフォント名の指定はできないみたいだし、
困った状況。
font-optimizer は Perl なので、ちょっといじってみることにした。まず、この
フォント名を付けている部分を探して、変更した。
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ grep -r "subset of" *
Font/Subsetter.pm: $str->[$plat][$enc]{$lang} = "$uid - subs
et of " . $str->[$plat][$enc]{$lang};
README.txt:smaller files that contain only a subset of the original's glyphs, f
ocusing on
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ cp Font/Subsetter.pm Font/
Subsetter.pm.bak
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ vi Font/Subsetter.pm
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ diff Font/Subsetter.pm.bak
Font/Subsetter.pm
1428c1428
< $str->[$plat][$enc]{$lang} = "$uid - subset of " . $str->
[$plat][$enc]{$lang};
---
> $str->[$plat][$enc]{$lang} = $str->[$plat][$enc]{$lang};
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./subset.pl --chars="abcde
" /tmp/ipagp.ttf abcde.ttf
defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 146.
(Maybe you should just omit the defined()?)
defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 189.
(Maybe you should just omit the defined()?)
defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 295.
(Maybe you should just omit the defined()?)
Uses unhandled table 'vhea'
Uses unhandled table 'vmtx'
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ls -l abcde.ttf
-rw-rw-r-- 1 toyota toyota 54772 4月 22 21:31 abcde.ttf
文字数を増やしたのにファイルサイズが小さくなったのは、フォント名に起因
するところなのでしょう。作成したこのファイルを、フォントビューアで確認
してみたが、やっぱりエラー。FontForge で開いてみると、フォント名が不正
とのエラーはなくなった。TrueType フォント形式じゃなく、他のフォント形式
なのかもしれないと、確認してみたが。
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ file abcde.ttf
abcde.ttf: TrueType font data
と言うことは、フォントビューアでは見られないけど、FontForge では見られる
TrueType フォント形式ということなのだろうか。色々と簡単にはいかないものだ。
昨日の続き。作ったフォントを FontForge で開いたあと、TrueType フォントで
保存しなおしてみることにした。FontForge からフォントの出力を選び、どんな
形式があるのか確認しながら。
TrueType の指定で保存して、出来上がったファイルを見てみる。
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ls -l abcde.ttf abcde2.ttf
-rw-rw-r-- 1 toyota toyota 54772 4月 22 21:31 abcde.ttf
-rwxr-xr-x 1 toyota toyota 4516 4月 23 20:21 abcde2.ttf
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ file abcde*.ttf
abcde.ttf: TrueType font data
abcde2.ttf: TrueType font data
ファイルサイズがだいぶ小さくなった。Windows のフォントビューアで確認すると
ちゃんと見ることができた。html の @font-face で指定して Firefox で開くと
表示できた。
FontForge はスクリプトで実行できるようなので、同じことができるかやって
みることに。まずは、Linux 環境に FontForge のインストール。いつものように
コンパイルからしようと思ったが、嵌りそうなのでここは仕方なく yum を使って
インストールすることに。
[root@mygeeto tmp]# yum search fontforge
Loaded plugins: fastestmirror, langpacks
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
============================ N/S matched: fontforge ============================
fontforge-devel.i686 : Development tools for fontforge
fontforge-devel.x86_64 : Development tools for fontforge
fontforge.i686 : Outline and bitmap font editor
fontforge.x86_64 : Outline and bitmap font editor
Name and summary matches only, use "search all" for everything.
[root@mygeeto tmp]# yum install fontforge
~省略~
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
fontforge x86_64 20120731b-12.el7 base 7.7 M
Installing for dependencies:
ImageMagick x86_64 6.7.8.9-12.el7_2 updates 2.1 M
OpenEXR-libs x86_64 1.7.1-7.el7 base 217 k
autotrace x86_64 0.31.1-37.el7 base 132 k
giflib x86_64 4.1.6-9.el7 base 40 k
ilmbase x86_64 1.0.3-7.el7 base 100 k
libspiro x86_64 20071029-12.el7 base 23 k
libuninameslist x86_64 20091231-8.el7 base 482 k
libwmf-lite x86_64 0.2.8.4-41.el7_1 base 66 k
依存関係があったけど、インストール完了。
FontForge の tutorial を参考に、簡単なスクリプトを書いて実行してみる。
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ vi ttfconv
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ cat ttfconv
#!/usr/bin/fontforge
Open($1)
Generate($1:r + "3.ttf")
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ chmod a+x ttfconv
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./ttfconv abcde.ttf
Copyright (c) 2000-2012 by George Williams.
Executable based on sources from 14:57 GMT 31-Jul-2012.
Library based on sources from 14:57 GMT 31-Jul-2012.
File "./ttfconv", line 2
Open($1)
^
SyntaxError: invalid syntax
うまく動かない。$1 の解釈が問題なのかもと、ファイル名を直に書いてやって
みた。
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ vi ttfconv
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./ttfconv abcde.ttf
Copyright (c) 2000-2012 by George Williams.
Executable based on sources from 14:57 GMT 31-Jul-2012.
Library based on sources from 14:57 GMT 31-Jul-2012.
Traceback (most recent call last):
File "./ttfconv", line 2, in <module>
Open("abcde.ttf")
NameError: name 'Open' is not defined
やっぱり動かない。スクリプトにせず、コマンドの -c オプションでやってみる。
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ fontforge -c 'Open("abcde.t
tf"); Generate("abcde3.ttf")'
Copyright (c) 2000-2012 by George Williams.
Executable based on sources from 14:57 GMT 31-Jul-2012.
Library based on sources from 14:57 GMT 31-Jul-2012.
Traceback (most recent call last):
File "<string>", line 1, in <module>
NameError: name 'Open' is not defined
仕方なく man を眺めたり、実行オプションを見てみると、気になるオプションが
あった。
-lang=py use python for scripts (may precede -script)
-lang=ff use fontforge's legacy scripting language
これかなと思って、-lang=ff を付けてみた。
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ fontforge -lang=ff -c 'Ope
n("abcde.ttf"); Generate("abcde3.ttf")'
Copyright (c) 2000-2012 by George Williams.
Executable based on sources from 14:57 GMT 31-Jul-2012.
Library based on sources from 14:57 GMT 31-Jul-2012.
デフォルトでは python の扱いで実行されてしまい、fontforge スクリプトと
して扱われなくなってしまったということなのかな。できたファイルを確認して
みる。
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ls -l abcde*
-rw-rw-r-- 1 toyota toyota 54772 4月 22 21:31 abcde.ttf
-rwxr-xr-x 1 toyota toyota 4516 4月 23 20:21 abcde2.ttf
-rw-rw-r-- 1 toyota toyota 4516 4月 23 20:58 abcde3.ttf
Windows の FontForge(GUI) で保存したものと同じサイズのものができた。これを
フォントビューアで見てみたが。
ファイルサイズが同じなので、バイナリレベルで比較するしかないかな。長く
なりそうなので、続きは明日。
昨日の続き。Linux の FontForge スクリプトで変換したフォントが、フォント
ビューアでは見られなかった。html の @font-face でも試してみたら、手元の
ブラウザ Firefox, Chrome, Opera, IE では問題なく表示できた。ファイルの
何が違うのだろうと、バイナリレベルで比較してみた。
$ od -x abcde2.ttf > a2
$ od -x abcde3.ttf > a3
$ diff a2 a3
2,4c2,4
< 0000020 e663 e8ce 0000 4811 0000 1c00 4447 4645
< 0000040 2600 0f00 0000 2811 0000 1e00 534f 322f
< 0000060 9655 3179 0000 a801 0000 6000 6d63 7061
---
> 0000020 fb5c 7184 0000 4811 0000 1c00 4447 4645
> 0000040 3600 0300 0000 2811 0000 2000 534f 322f
> 0000060 cb4f 4e79 0000 a801 0000 6000 6d63 7061
10c10
< 0000220 a8f7 6034 0000 2c01 0000 3600 6868 6165
---
> 0000220 950d 81ee 0000 2c01 0000 3600 6868 6165
16c16
< 0000360 5a72 40ef 0000 c810 0000 5000 7270 7065
---
> 0000360 c272 40ef 0000 c810 0000 5000 7270 7065
19,21c19,21
< 0000440 2229 c80f 0000 8811 0000 1a00 0100 0000
< 0000460 0300 ae07 d70e 8de5 0f5f f53c 3f00 0008
< 0000500 0000 0000 f4c6 e081 0000 0000 c9c9 c15f
---
> 0000440 fc2b 6a13 0000 8811 0000 1a00 0100 0000
> 0000460 0300 ae07 c4f5 d1fe 0f5f f53c 3f00 0008
> 0000500 0000 0000 55d3 e1cd 0000 0000 55d3 e1cd
32,33c32,33
< 0000760 0000 0a07 9101 0200 0100 0000 0000 1004
< 0001000 cb05 0000 2000 0100 0008 cd00 0000 0000
---
> 0000760 0000 0a07 9101 0200 0100 0000 0000 2d04
> 0001000 0000 0000 2000 0100 0008 cd00 0000 0000
262c262
< 0010320 a2fe 6800 0000 0000 0000 0000 0000 0000
---
> 0010320 0aff 6800 0000 0000 0000 0000 0000 0000
267,270c267,270
< 0010440 1000 0100 ffff 0300 0100 0000 0c00 0000
< 0010460 1600 0000 0200 0100 0000 0800 0100 0400
< 0010500 0000 0200 0000 0000 0000 0100 0000 0000
< 0010520 28d3 46ed 0000 0000 f4c6 e081 0000 0000
---
> 0010440 1000 0100 ffff 0300 0100 0000 0e00 0000
> 0010460 1800 0000 0000 0200 0100 0000 0800 0100
> 0010500 0400 0000 0200 0000 0000 0100 0000 0000
> 0010520 3dcc cfa2 0000 0000 f4c6 e081 0000 0000
273,275c273,275
< 0010600 0000 0000 0000 0400 0008 2900 0008 0a07
< 0010620 0008 0000 0008 e102 0c01 db02 0c01 d902
< 0010640 0a07 0000
---
> 0010600 0000 0000 0000 0400 0008 e106 0008 0000
> 0010620 0008 0000 0008 2904 fe05 2f04 fe05 3104
> 0010640 0000 0000
ちょっとの差かなと思っていたけど、かなり違っている。ファイル形式の予備知識
ゼロではどう違っているのかわからない。ここは目的であるブラウザで表示できる
ということで、フォントビューアの件は目をつぶることにして、18日からのことを
通しでやってみる。
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ vi makefont
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ cat makefont
url='http://www.yahoo.com/'
curl -s $url | tr -d '\n' | tr -d '\r' | sed -e 's/<head>.*<\/head>//g' -e 's/<
style>.*<\/style>//g' -e 's/<script>.*<\/script>//g' -e 's/<[^>]*>//g' -e 's/&[
^;]*;//g' | sed 's/\(.\)/\1\r\n/g' | sort | uniq | tr -d '\n' | tr -d '\r' > us
echar.$$
./subset.pl --charsfile=usechar.$$ /tmp/ipagp.ttf fonttmp_$$.ttf
rm -f usechar.$$
fontforge -lang=ff -c 'Open($1); Generate($2)' fonttmp_$$.ttf font_$$.ttf
rm -f fonttmp_$$.ttf
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ chmod a+x makefont
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./makefont
defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 146.
(Maybe you should just omit the defined()?)
defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 189.
(Maybe you should just omit the defined()?)
defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 295.
(Maybe you should just omit the defined()?)
Uses unhandled table 'vhea'
Uses unhandled table 'vmtx'
Copyright (c) 2000-2012 by George Williams.
Executable based on sources from 14:57 GMT 31-Jul-2012.
Library based on sources from 14:57 GMT 31-Jul-2012.
出来上がったフォントを Windows の FontForge で見てみると、ちゃんと目的の
文字だけのファイルになったっぽい。
www.yahoo.co.jp のトップページでもやってみる。
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ vi makefont
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./makefont
utf8 "\x80" does not map to Unicode at ./subset.pl line 67, <$f> chunk 1.
Wide character in subroutine entry at Font/Subsetter.pm line 1496.
Copyright (c) 2000-2012 by George Williams.
Executable based on sources from 14:57 GMT 31-Jul-2012.
Library based on sources from 14:57 GMT 31-Jul-2012.
The requested file, fonttmp_8554.ttf, does not exist
Open: Failed to open: fonttmp_8554.ttf
Called from...
<command-string>: line 1
途中の subset.pl が
Wide character in subroutine entry at Font/Subsetter.pm line 1496.
と出して落ちているみたい。そう言えば、複数バイト文字のテストを subset.pl で
やってなかったな。
Subsetter.pm の 1496 行目は。
my $uid = substr(sha1_hex("$filename $chars"), 0, 16);
になっていて、sha1_hex でエラーが出ている。この $uid は、使っている場所を
一昨日削除してしてしまったので、無くても問題なさそう。
my $uid = "";
とすることにした。Digest/SHA はわざわざコンパイルして入れたのに、不要に
なってしまうとは。で、再実行。
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./subset.pl --charsfile=us
echar.8603 /tmp/ipagp.ttf fonttmp.ttf
defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 146.
(Maybe you should just omit the defined()?)
defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 189.
(Maybe you should just omit the defined()?)
defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 295.
(Maybe you should just omit the defined()?)
Uses unhandled table 'vhea'
Uses unhandled table 'vmtx'
大丈夫そうなので、www.yahoo.co.jp を通しでやってみる。
[toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./makefont
defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 146.
(Maybe you should just omit the defined()?)
defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 189.
(Maybe you should just omit the defined()?)
defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 295.
(Maybe you should just omit the defined()?)
Uses unhandled table 'vhea'
Uses unhandled table 'vmtx'
Copyright (c) 2000-2012 by George Williams.
Executable based on sources from 14:57 GMT 31-Jul-2012.
Library based on sources from 14:57 GMT 31-Jul-2012.
Bad ligature component glyph. GID 65535 not less than 218 (in ligature 0)
最後に気になるメッセージを吐いた気がするけど、できあがったフォントを見て
みた。
全部は確認してないが、大丈夫かな。
これで仮完成として、1段階目が完了。最終的には文字入れ替えとフォント入れ
替えを入れないといけないので、もっと大変そう。
ある web ページで window.confirm を使った「続きを読み込みますか?」という
感じの確認が毎回出る。普段、Firefox, Chrome, Opera, IE の4つのブラウザを
用途にわけて使っているが、Opera でそのページを表示したら、「このページで
これ以上ダイアログボックスを生成しない」というチェックが出たので、チェック
を入れて、「OK」ボタンを押した。私のイメージだと、このチェックを入れると
毎回ダイアログを出すことなく「OK」の扱いにしてくれるものだと思っていたが、
単にこのダイアログボックスというか window.confirm が出なくなるものだった。
ダイアログが出なくなったので、その web ページの続きを読むことができなく
なってしまい、困ったことになった。
これを解決しようと思ったが、まず動作の確認をしてみることにした。簡単な
html を作って、Opera で表示させる。作った html はこんな感じ。
<html>
<head>
<title>confirm test</title>
<script language="javascript" type="text/javascript">
<!--
function show(){
if(window.confirm('continue')){
document.getElementById("message").innerText = "done";
}
}
// -->
</script>
</head>
<body>
<p><input type="button" value="view" onClick="show()"></p>
<span id="message"></span>
</body>
</html>
この html を Opera で表示してみると想定通り「このページでこれ以上ダイアログ
ボックスを生成しない」のチェックボックスが出てきた。
チェックを入れずに、「OK」ボタンを押すとちゃんと表示できた。再読込させて
チェックボックスにチェックを入れ、「OK」ボタンを押したら、その時は表示
したが、次回からダイアログが出なくなる。ここまで再現できた。
本題は、これを解除したい。Opera の設定を眺めてみたけど、この動作を解除
できそうな項目がない。C:\User\toyota\AppData\Local とかで、ファイル名を
grep してみたけど、やっぱり見つからない。
困ったときの検索エンジンで、ざっと検索して見つからなかったので、Opera を
英語表示に切り替えて、ファイル名を変えてやってみた。
英語だと「Prevent this page from creating additional dialogues.」なので、
それで検索してみたけど、うまく見つからない。そんなことをしていたら、1つ
大きなことがわかった。Opera を再起動したら、再表示されるようになることを。
調べるまでもなく、最初に試すべきだったな。無駄な30分を使ってしまった。
一昨日の続き。FontForge のスクリプトでも、フォントのサブセットを作ることが
できるようなので、やってみることにした。まずは、簡単なフォントの作成から。
[toyota@mygeeto tmp]$ vi ffscript0
[toyota@mygeeto tmp]$ cat ffscript0
#!/usr/bin/fontforge -lang=ff
Open("ipagp.ttf")
SelectAll()
SelectFewer("a")
DetachAndRemoveGlyphs()
Save("ipagp_a.ttf")
[toyota@mygeeto tmp]$ chmod a+x ffscript0
[toyota@mygeeto tmp]$ ./ffscript0
Copyright (c) 2000-2012 by George Williams.
Executable based on sources from 14:57 GMT 31-Jul-2012.
Library based on sources from 14:57 GMT 31-Jul-2012.
Warning: Mac and Windows entries in the 'name' table differ for the
Family string in the language Japanese
Mac String: IPAPGothic
Windows String: IPA P
Warning: Mac and Windows entries in the 'name' table differ for the
Fullname string in the language Japanese
Mac String: IPAPGothic
Windows String: IPA P
[toyota@mygeeto tmp]$ ls -l ipagp_a.ttf
-rw-rw-r-- 1 toyota toyota 5294 Apr 26 22:02 ipagp_a.ttf
Mac 用途 Windows 用の名前が違っているとか出たが、あっさりできた。Windows の
FontForge で見てみる。
大丈夫そう。web 上の情報だと駄目らしいのだけど、2バイト以上の文字を入れて
やってみた。
[toyota@mygeeto tmp]$ vi ffscript1
[toyota@mygeeto tmp]$ cat ffscript1
#!/usr/bin/fontforge -lang=ff
Open("ipagp.ttf")
SelectAll()
SelectFewer("か")
DetachAndRemoveGlyphs()
Save("ipagp_ka.ttf")
[toyota@mygeeto tmp]$ chmod a+x ffscript1
[toyota@mygeeto tmp]$ ./ffscript1
Copyright (c) 2000-2012 by George Williams.
Executable based on sources from 14:57 GMT 31-Jul-2012.
Library based on sources from 14:57 GMT 31-Jul-2012.
Warning: Mac and Windows entries in the 'name' table differ for the
Family string in the language Japanese
Mac String: IPAPGothic
Windows String: IPA P
Warning: Mac and Windows entries in the 'name' table differ for the
Fullname string in the language Japanese
Mac String: IPAPGothic
Windows String: IPA P
SelectFewer: Character not found:
Called from...
./ffscript1: line 5
やっぱり駄目。これができないので、別なスクリプトやプログラムで Unicode の
コードポイントを出して、スクリプトの元を作っている。「か」のコードポイント
U+304B を使ってやってみた。
[toyota@mygeeto tmp]$ vi ffscript2
[toyota@mygeeto tmp]$ cat ffscript2
#!/usr/bin/fontforge -lang=ff
Open("ipagp.ttf")
SelectAll()
SelectFewer(0u304B)
DetachAndRemoveGlyphs()
Save("ipagp_ka.ttf")
[toyota@mygeeto tmp]$ chmod a+x ffscript2
[toyota@mygeeto tmp]$ ./ffscript2
Copyright (c) 2000-2012 by George Williams.
Executable based on sources from 14:57 GMT 31-Jul-2012.
Library based on sources from 14:57 GMT 31-Jul-2012.
Warning: Mac and Windows entries in the 'name' table differ for the
Family string in the language Japanese
Mac String: IPAPGothic
Windows String: IPA P
Warning: Mac and Windows entries in the 'name' table differ for the
Fullname string in the language Japanese
Mac String: IPAPGothic
Windows String: IPA P
出来たフォントは、ちゃんと指定通り。
もう少しやりたいことに近づける。まず、A と B だけのフォントを作成して、
フォントを入れ替えてみる。
[toyota@mygeeto tmp]$ vi ffscript3
[toyota@mygeeto tmp]$ cat ffscript3
#!/usr/bin/fontforge -lang=ff
Open("ipagp.ttf")
SelectAll()
SelectFewer("A", "B")
DetachAndRemoveGlyphs()
Select("A")
Copy()
Select("C")
Paste()
Select("B")
Copy()
Select("A")
Paste()
Select("C")
Copy()
Select("B")
Paste()
SelectNone()
Select("C")
DetachAndRemoveGlyphs()
Save("ipagp_ab.ttf")
[toyota@mygeeto tmp]$ chmod a+x ffscript3
[toyota@mygeeto tmp]$ ./ffscript3
Copyright (c) 2000-2012 by George Williams.
Executable based on sources from 14:57 GMT 31-Jul-2012.
Library based on sources from 14:57 GMT 31-Jul-2012.
Warning: Mac and Windows entries in the 'name' table differ for the
Family string in the language Japanese
Mac String: IPAPGothic
Windows String: IPA P
Warning: Mac and Windows entries in the 'name' table differ for the
Fullname string in the language Japanese
Mac String: IPAPGothic
Windows String: IPA P
一度 A を C に入れて、B を A に、C を B にということをやっているが、結果は
うまくいった。
文字のところに色が付いているのは何か意味があるのだろうか。このファイルを
html の @font-face で指定してみたが、表示されない。できたファイルを確認
してみた。
[toyota@mygeeto tmp]$ file ipagp*.ttf
ipagp.ttf: TrueType font data
ipagp_ab.ttf: Spline Font Database version 3.0
TrueType フォントじゃなく、Spline Font Database になっている。何でだろうと
スクリプトを見直して、最後 Save じゃなくて Generate にしてみたら。
[toyota@mygeeto tmp]$ file ipagp*.ttf
ipagp.ttf: TrueType font data
ipagp_ab.ttf: TrueType font data
TrueType フォントになって、ブラウザでも表示されるようになった。
昨日の続き。メールアドレスを取得する bot 対策として、フォントを使った置換を
してみる。まずは、メールアドレスで使われる文字列を拾う。RFC 的には、もっと
文字が使えるけど、ここは良く使われているメールアドレスの文字を。
-.@_0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
言語は何でも良かったけど、C# を使って ASCII 順に並び替えて、ランダムに
並び替えるプログラムを作成。逆変換するときの文字列も用意した。
うまく動作したので、さらに昨日やったような FontForge 用のスクリプトを出力
するようにした。
使ってない文字に一度保存しての入れ替えを文字数分だけ繰り返すものが出力
された。このスクリプトを実行して、できたフォントファイルの確認。
[toyota@mygeeto tmp]$ vi ffscript4
[toyota@mygeeto tmp]$ chmod a+x ffscript4
[toyota@mygeeto tmp]$ ./ffscript4
Copyright (c) 2000-2012 by George Williams.
Executable based on sources from 14:57 GMT 31-Jul-2012.
Library based on sources from 14:57 GMT 31-Jul-2012.
Warning: Mac and Windows entries in the 'name' table differ for the
Family string in the language Japanese
Mac String: IPAPGothic
Windows String: IPA P
Warning: Mac and Windows entries in the 'name' table differ for the
Fullname string in the language Japanese
Mac String: IPAPGothic
Windows String: IPA P
[toyota@mygeeto tmp]$ ls -l ipagp_mailadr.ttf
-rw-rw-r-- 1 toyota toyota 10016 Apr 27 20:23 ipagp_mailadr.ttf
10KB ぐらいだったら、画像にしてしまうのと変わらないぐらいの大きさ。この
フォントを一応確認で見てみた。
大丈夫なので、このフォントを使った html を作成してみた。
後は日本語対応したいのと、自動変換したいのと。
Android Studio 2.1 の Update があったので、2.1 にあげてみた。その他にも
いくつか Update があって、まとめて更新。Androiid Studio のバージョンを
あげたためか、それ以外の Update が影響しているのか、エミュレータの動作が
だいぶ変わった。
右側に回転とか拡大させるコントローラが付いた。
起動までの時間は変わらない感じだけど、動作は少し軽くなったかな。
調べものなんかをしていると、たまに自分のページが出てきたりすることがある。
それは良くあることなんだけど、最近このページなんかがプロバイダのドメインで
登録されていたりして、ちょっと嫌な感じだった。
IP アドレスもたまに変わるし、なんとかしようと言うことで Apache の設定を
見直すが、少し悩んでしまった。プロバイダののドメインに対しての VirtualHost
設定をしたところで、IP アドレスが変わるとまた同じことが起きてしまうし、かと
言って tatsuyoshi.net の VirtualHost 扱いにするのも、と思っていたら、既に
VirtualHost だった。ただ、ServerName に一致しないのに何でアクセスができるの
だろうかと不思議に思って Apache のドキュメントを見てみると。
https://httpd.apache.org/docs/current/ja/vhosts/name-based.html
リクエストが来ると、サーバはまず最初に にマッチする IP アドレスかどうかをチェックします。マッチすれば マッチした IP アドレスの のそれぞれのセクションの中から ServerName か ServerAlias に要求されたホスト名があるか探します。 見つかればそのサーバ用の設定を使います。マッチするバーチャルホスト が見つからなければ、マッチした IP アドレスの リストの最初にあるバーチャルホスト が使われます。
結果として、リストの最初のバーチャルホストが デフォルト の バーチャルホストになります。IP アドレスが NameVirtualHost ディレクティブにマッチした場合は、メインのサーバ の DocumentRoot は決して使われません どのバーチャルホストにもマッチしないリクエストに対して、 特別な設定をしたいのであれば、設定ファイル中の最初の コンテナにそれを記述してください。 |
だそうで。VirtualHost の順番を入れ替えれば良さそうだけど、何か別なところに
影響しそうな気もする。どうしたものか。
近所のセブンイレブンに行くと、セブンスポットの張り紙があった。ようやく、
対応したみたい。家に帰って、家から電波が入るか試してみたが、全く入らない。
家からセブンイレブンまでは、地図の距離で 30m ぐらい、高さあるので実際には
もう少しあるのだろうけど。そもそもセブンイレブンの裏側なので、軽量鉄骨に
阻まれて電波も届きにくいのでしょう。wifi のアンテナを向けたいところだけど、
以前設置したアンテナポールの場所からは見通しのきかない場所だし。別な場所に
もう1つアンテナを付けようか。どうしよう。
|