Posts

Showing posts from December, 2017

CL-PDF と ZPB-TTF の擴張

* きっかけ 文書生成に CL-PDF を利用させてもらふやうになつて久しいが、ある日某部門から、特定のPDFリーダ (Adobe AcrobatReader) で文字化けせずにテキストをcopy/pasteできるやうにとの要請を受けた。 ghostscriptを使ってpdf壓縮をすると、サイズは小さくはなるのだが、copy/pasteしたときに一部テキストが文字化けする。 とくに IPAMincho を埋込んだ部分は壓縮前であつても文字化けする。[ 例 ] これは Google Chrome や Safari でも同樣。ただし、Microsoft Edge や FireFox などでは、文字化けせずにcopy/pasteが出來る。 * pdf2text 一部browserでは文字化けしないのだから、文字化けする方に技術的不具合があることは容易に想像できるが、これを證明するために自分で pdf2text 處理をprogram してみた。 一部ブラウザは =/Encoding /Identity-H= 指定されてゐるとテキストを拾へないやうだ。 =/CIDSystemInfo= に =/Ordering(UCS)= とあるのだから、 UCS2 か UCS4 のコードだと思って解釋できさうなものだし、事實拾へるブラウザもあるわけだが、自分で書いたコードでは UCS2 として解釋しテキスト抽出に成功させた。 CL-USER(93): (pdf:pdf2text "~/project/cl-pdf/PDFs/Identity-H.pdf") ;; Inside non-filter file #<EQL hash-table with 1 entry @ #x1042bdf32> ("いろはにほへどちりぬるをあさきゆめみしゑひもせすわがよたれぞつねならむわがよたれぞつねならむ.....") * Encoding さうかうするうちに、 =/Encoding /UniJIS-UTF16-H= としてやれば、ブラウザの如何にかかはらず、テキスト抽出が出來る事に氣付いた。 ただし、 =/Identity-H= を =/UniJIS-UTF16-H= に置換へるだけでは cl-p

AllegroServe Patch

aserveとwebactionsは開發環境として重寶してゐるが、get-multipart-headerで日本語ファイル名が通らない問題があったので、 本patch をあてがって對應してゐる。 また、 =*reserved-path-characters*= の =%= にあたる箇所の sbit を立てて  =parse-uri= の問題を囘避してゐる。

CL-PDF patch

CL-PDF にはお世話になつて久しいが、ここ一年、かなり突っ込んだ使ひ方をした爲、幾つか問題に遭遇した。 このpatch をあてて利用させてもらつてゐる。 patchの意味はソースの中にコメントしたつもりだが、以下に概要を並べる。 External-formatの問題 file-length が +xref-search-size+ よりも小さい時に對應 digit-charとして小文字も有効 read-nameにおいて 拡張ASCIIも認める write-object で空白が含まれる名前を其の儘出すのは不味い read-objectへのpatch find-font-object に於いてexisting-documentの中に同じ名前のfont指定がすでになされてゐたらfont-objectを作らない、換りに pseudo-font-object を作る 同 font毎に個別の名前を與へるやうにする 重複を避けるためにadd-dict-valueをchage-dict-valueに置き換へた imageには固有の名前が必要

Common Lisp ZIP patch

とあるprojectでsystemへのpatchあて機能が必要となった。 普通なら git pull して load-system をし直す UI をどこかに用意すれば濟む話だが、あひにくsystemはinternetから切り放された環境にinstallされてある。 仕方がないので、zipにまとめたpatchを管理者に送り、systemへsubmitしてもらふといふ原始的な形で機能を整へることとした。 幸、  Common Lisp ZIP といふ便利なものがあったので、これを拾ってきたが、どうも作者は、localeと external-format を混同してゐるやうで、originalのままでは使ひものにならない。 そこで このpatch を摘要して間に合せてゐる。Program Interface が大きく變はるので、pull request は送ってないし、その豫定もない。 また、compressに時間がかかるので compiler-macroを驅使してoptimization を行なった。

Hyperspec を讀む

Hyperspec を讀む Common Lisp でプログラムを書いてゐながら Hyperspec を讀む習慣の無い人が多いやうなので、 その人達の爲に Hyperspec の水先案内をしてみようと思ふ。 先づは Introduction から始めて、非定期的に更新していくつもりである。 なほ、 野矢茂樹さん ではないが、 Hyperspec を讀む といふテキストを讀んでも Hyperspec を讀んだことにはならない。 本當に讀むべきはかういふ戯れ文ではなく Hyperspec のはうである。くれぐれも注意のこと。 Table of Contents 1. Introduction 1.1. Scope, Purpose, and History 1.1.1. Scope and Purpose 1.1.2. History 1.2. Organization of the Document 1.3. Referenced Publications 1.4. Definitions 1.4.1. Notational Conventions 1.4.2. Error Terminology 1.4.3. Sections Not Formally Part Of This Standard 1.4.4. Interpreting Dictionary Entries 1.5. Conformance 1.6. Language Extensions 1.7. Language Subsets 1.8. Deprecated Language Features 1.9. Symbols in the COMMON-LISP Package 2. Syntax 2.1. Character Syntax 2.1.1. Readtables 2.1.2. Variables that affect the Lisp Reader 2.1.3. Standard Characters 2.1.4. Character Syntax Types 2.2. Reader Algorithm 2.3. Interpretation of

Common Lisp コーディングスタイルについて

Common Lisp コーディングスタイルについて 一つの文章は、一つ若しくは幾つかの單語から成り立つてゐるのでありますから、 單語の選擇のよしあしが根本であることは、申す迄もありません。そこで、 その選び方についての心得を申しませうなら、  異を樹てようとするな と云ふことに歸着するのであります。それを、もう少し詳しく、 箇條書きにして申しますと、  一 分り易い語を選ぶこと  二 成るべく昔から使ひ馴れた古語を選ぶこと  三 適當な古語が見付からない時に、新語を使ふやうにすること  四 古語も新語も見付からない時でも、造語、─ 自分で勝手に新奇な言葉を拵へることは愼しむべきこと  五 據り所のある言葉でも、耳遠い、むづかしい成語よりは、耳馴れた外來語や俗語の方を選ぶべきこと 等であります。         谷崎潤一郎 『文章讀本』 はじめに 先づ始めにお断りしておきますが、 ここで述べるコーディングスタイルを コーディング規則のやうな馬鹿げたものと同じにしないでもらひたい。 スタイルはあくまで指針であつて規則ではありません。 規則とはそれを強制するだけでなく、それが何故さうあるか考へることを禁ずるものです。 スタイルは、それが何故さうあるかを理解しない者に押し付けることが不可能な種類のものです。 自分で考へようとしない人にいくらスタイルを説いたところで無駄である。 このことを踏まへた上で次に進むことにしませう。 何故にスタイルが問題となるのか わたしも含め、たれもがつい忘れがちなことは、「プログラムは人に讀まれる」といふことです。 コンピューターに向かつてゐると仕事とは本來「人」相手のものだといふ、 あたりまへの意識が薄れてきてしまふ。 しかしプログラマーが相手をするべきは、コンピューターよりもむしろ人だと考へるべきです。 あなたが今日書いたプログラムは明日たれか別の人が讀まんとも限らない。 たとへあなたしか讀まないプログラムであつても、 一年もたてばその「あなた」もまた「別人」になつてゐるのだ、 とたしか G.M. ワインバーグが何かの本で言つてました。 プログラムを書く上で留意すべき事項は多々ありますが、 人が讀んでわかるやうに書く