"fair_copy": Fair copying utility in C
hacker emblem Happy Hacking!


English Here (machine translation)

fair_copy: 英数半角文字列を矩形テキスト領域に収めるユーティリティ

この C 言語ユーティリティは、半角英数文字列を矩形テキスト領域に収まるように整形した文字列を出力します。ここで「収まる」というのは、文字列に含まれる語が矩形領域の複数行に分かち書きされないようにすることを意味しています。ただし、一語の長さが矩形領域の幅桁数を超えている場合、その語は分かち書きされてしまう制限をもちます。また、ハイフネーションの機能はありません。

API を使用するためのヘッダは fair_copy.h で、API の実装は fair_copy.c です。API の説明は、この文書で後述しています。

テスト・プログラム fair_copy-test.ctest.bash そして make ファイル Makefile を記述しました。テストは、テストデータファイル test-data-files.tar.gz

        $ gunzip -c test-data-files.tar.gz | tar -xvf -
で展開した後で、
        $ make clean; make; make test
とコマンド実行することで行えます。

API の説明

  1. 半角英数文字列を矩形テキスト領域に収まるように整形する fair_copy()
    int fair_copy(char *src
    , Fair_copy_line_control linectl
    , size_t rows
    , size_t cols
    , size_t dst_sz
    , char *dst
    , size_t *processed_rows
    );

    src には変換する半角整数文字列 (ASCII コード) を渡します。
    linectl には、変換結果の文字列を表示する際に矩形テキスト領域の各行の行末に改行コードが必要な場合は Fair_copy_line_breaking を、矩形領域の行幅いっぱいになると自動的に次行に折り返す場合は Fair_copy_wrap_around を指定します。
    rows には矩形テキスト領域の行数を指定します。
    cols には矩形テキスト領域の桁数を指定します。
    dst_sz には変換後の文字列を出力するメモリ領域 dst のサイズを指定します。
    dst には矩形テキスト領域に収まるように整形された文字列が出力されます。整形前の文字列中のタブ文字 '\t' は空白文字 ' ' として扱われます。出力される文字列内の改行コードは "\n" だけになります。
    processed_rows には整形後のテキストが矩形領域の何行分になったかを出力します。

    dst に NULL を指定すると、整形後の文字列が必要とするテキスト矩形領域の行数を processed_rows に出力します。dst に NULL を指定された場合、rows と dst_sz を無視します。

    戻り値は以下の意味を持ちます。

    • FAIR_COPY_NORMAL_END (= 0) : 正常終了
    • FAIR_COPY_ILLEGAL_ARGS (= 1) : 不正な引数を渡された場合
    • FAIR_COPY_NO_MEMORY (= 2) : 整形処理用の動的メモリ獲得に失敗した場合 (システム・メモリ不足)
    • FAIR_COPY_ROWS_OVER (= 3) : 整形結果が矩形領域の行数を超過する場合