ワークフローの続き。
ソースを精査する前に、Lispの外の自分の環境のencodingを調べてみる。
** Mac OS X Leopard
http://images.apple.com/jp/macosx/pdf/L355785A_UNIX_TB_J.pdf
-----
OS内部(ってどこ?): UTF-32 [たぶんNFDなんじゃないか]
ファイルシステム(HFS+): UTF-16 [NFD]
アプリケーション: アプリケーション毎
Terminal.app: 選択可能。ただしUnicodeとしては、UTF-8 [NFD] (UTF-8-mac)。
-----
Ubuntuについては別途調べる。
** Allegro Common Lisp
http://www.franz.com/support/documentation/8.1/doc/iacl.htm
-----
internal representation: UTF-16
external formats:
Name Nicknames Comments
---- --------- --------
:latin1 :ascii, :8-bit, :iso8859-1, t
:1250 For MS Windows
:1251 For MS Windows
:1252 For MS Windows
:1253 For MS Windows
:1254 For MS Windows
:1255 For MS Windows
:1256 For MS Windows
:1257 For MS Windows
:1258 For MS Windows
:iso8859-2 :latin-2, :latin2
:iso8859-3 :latin-3, :latin3
:iso8859-4 :latin-4, :latin4
:iso8859-5 :latin-5, :latin5
:iso8859-6 :latin-6, :latin6
:iso8859-7 :latin-7, :latin7
:iso8859-8 :latin-8, :latin8
:iso8859-9 :latin-9, :latin9
:iso8859-14 :latin-14, :latin14
:iso8859-15 :latin-15, :latin15
:koi8-r
:emacs-mule For eli
:octets For uncovered octets
:void
:utf8 :utf-8
:big5
:gb2312
:euc :ujis
:874 For MS Windows
:932 For MS Windows
:936 For MS Windows
:949 For MS Windows
:950 For MS Windows
:jis
:shiftjis
:unicode BOM対応(BOM無しはLE)
などなど。まだいろいろあるようだ。
さて、internal representationとexternal formatsの関係について。
まず、REPL。Unicode Standardで定義されている名前を#\[name]に使える。
ただし空白はunderscoreにする。名前が無いものはそのまま?使える。
---
CL-USER(7): #\latin_capital_letter_l_with_stroke
#\Ł
CL-USER(8): (code-char #x0141)
#\Ł
CL-USER(9): #\気
#\気
---
実はこれはeli経由でやっているので、すんなりいくのはeliの賜物な気が
する。eliはexternal formats経由でやりとりしているので、純粋に
REPL(純粋なREPLって何だ?)の話題ではないといえばない。
さて、ACLでは、streamとforeign-function callにて、自動変換機能をもっ
ている。ここでの変換というのは、internal representaion と external
formats の間のこと。
さてexternal formatsの指定がどうなされているか。
まず*locale*にある。
---
CL-USER(6): *locale*
#<locale "ja_JP" [:UTF8-BASE] @ #x1000695502>
---
これが採用される。次に個別のstreamをopenする際に指定できる。これは
implemetation dependentであるexternal file formatをplaceとして利用
している、ということ。
これらexternal-formatsの指定にしたがってstreamに関するたとえば
read-charやwrite-charは動作する。
Streamのexternal-formatを調べるには例えばinspect。
---
CL-USER(12): (inspect *standard-output*)
A TENURED TERMINAL-SIMPLE-STREAM @ #x1000245e42 = #<TERMINAL-SIMPLE-STREAM [initial terminal io] fd 0/1 @ #x1000245e42>
0 Class --------> #<STANDARD-CLASS TERMINAL-SIMPLE-STREAM>
1 J-WRITE-BYTE -> #<Function DUAL-CHANNEL-WRITE-BYTE>
...
16 EXTERNAL-FORMAT -> The symbol :EMACS-MULE
...
36 SRC-POSITION-TABLE -> The symbol NIL
[1i] CL-USER(13):
---
-----
さて、これでソースを精査しようかと思ったが、closure-commonは.asdファ
イルの中でいろいろやっているようだ。
ASDFについておさらいをしてからか、もしくはしつつ進もう。
こつこつ。
0 件のコメント:
コメントを投稿