Pike-memo

C++/Java-likeなスクリプト処理系Pikeを使ってみよう、というページ。

基本リンク

Pikeとは?

長所

短所

インストール

UNIXっぽいOSではまぁ適当にその流儀で。

Windows 2000/XPの場合は、オフィシャルのバイナリを利用するのが楽。もっとも多少DLLが足りないこともあるので、その辺は適当に。

基本的な諸々

日本語対応

Pikeの文字列は基本的にUnicodeであり、その範囲内であれば概ね日本語も正しく扱えるらしい。

変換する必要がある場合には以下のような処理を行う。

string unicode_string = Locale.Charset.decoder("shift_jis")->clear()->feed(sjis_string)->drain();
string sjis_string = Locale.Charset.encoder("shift_jis")->clear()->feed(unicode_string)->drain();

日本語に使うエンコード形式としては"euc-jp"や"iso-2022-jp"、"utf-8"もサポートされている模様。

ファイル入出力

基本はStdio.Fileオブジェクトを生成してhogeという感じだが、適当でいいときには適当な手段も用意されていて、

といった関数がそれ。

画像操作

Pikeの特徴の一つである強力な標準画像操作ライブラリ群について。

基本的な入出力

入力

Pikeにおける画像は基本的にImageモジュールのImageクラスとして扱われる(Image.Image)。

Image.Imageクラスは何通りかのコンストラクタを通じて生成することも可能だが、画像ファイルから生成する場合、

  1. ファイルを読み込んでstring型変数に格納。
  2. Image.[画像形式].decode関数でImage.Imageオブジェクトに変換。

といった手順を踏むことになる。が、Image.load()関数を利用して画像形式を自動判別させて自動的に画像ファイルを読み込むこともできる。

出力

Image.[画像形式].encode()にImage.Imageオブジェクトを渡すことでstring型のデータが返されるので、それを標準出力に吐いてリダイレクトするなり、適当にファイルに書き込むなりして画像ファイルが生成できる。

文字列描画

基本的な手順としては、

  1. Image.Fonts.set_font_dirs()でフォントディレクトリの設定
  2. Image.Fonts.open_font()でImage.Fonts.Fontオブジェクトを生成
  3. Image.Fonts.Font()->write()でImage.Image型のマスクを生成
  4. 生成されたマスクを使ってImage.Image()->paste_alpha_color()等で画像に描画

といった手順を踏むことになる。

特徴的な文法

class Point
{
  private int x;
  private int y;
  create(int ax, int ay)
  {
    x = ax;
    y = ay;
  }
}

というようなコンストラクタでメンバの初期化が必要な典型的なクラスの記述を、

class Point(private int x, private int y)
{
}

と省略できる。