TXTBLCNT

簡単なテキストの表組みツール(txtbl)のためのさらなるツール


ソースコード

txtblcnt-140129.tgz


ビルド

$ tar xzf txtblcnt-<yymmdd>.tgz
$ cd txtblcnt-<yymmdd>
$ make


お試し

txtblコマンドが使える状態になってる前提です

Linuxな環境

$ tac tbl.txt | ./tblcnt | tac | txtbl

BSDな環境

$ tail -r tbl.txt | ./tblcnt | tail -r | txtbl

行を逆順に表示するコマンドを2回使います。
Linuxな環境では tac コマンド (catの逆)
BSDな環境では tail コマンドの-rオプション指定を使います

次のように表示されます

+----+----+-----+
|foo1|bar1|hoge1|
|    |    +-----+
|    |    |hoge2|
|    +----+-----+
|    |bar2|hoge3|
|    |    +-----+
|    |    |hoge4|
|    |    +-----+
|    |    |hoge5|
+----+----+-----+
|foo2|bar3      |
+----+----+-----+
|foo3|bar4|hoge6|
+----+----+-----+
|foo4     |hoge7|
+---------+-----+
$ 

tbl.txt の内容

foo1
 bar1
  hoge1
  hoge2
 bar2
  hoge3
  hoge4
  hoge5
foo2
 bar3
foo3
 bar4
  hoge6
foo4
  hoge7

行頭に連続するスペースまたはタブの数が、表の列方向の位置(カラム位置)に対応します。
列方向の位置が減少するときは、行方向の位置を増やして更新します


インストール

$ cd txtblcnt-<yymmdd>
$ sudo cp tblcnt /usr/local/bin/

txtblcnt スクリプトを用意してみました

#!/bin/sh

TAC=tac
#TAC="tail -r"

${TAC} | tblcnt | ${TAC} | txtbl

# EOF

Linux用になっています。BSDの場合は冒頭のTAC指定を"tail -r"にします

$ sudo cp txtblcnt /usr/local/bin/


実行例

txtblのときの例にならって

$ txtblcnt < foo2.txt
+------+----------------------------------------------------------------------+
|関数名|int foo_send(const unsigned char *buf, unsigned bytes)                |
+------+----------------------------------------------------------------------+
|説明  |データ送信開始                                                        |
+------+----------------------------------------------------------------------+
|引数                                                                         |
+------+--------+---------------------+---------------------------------------+
|項番  |仮引数名|         型          |                 説明                  |
+------+--------+---------------------+---------------------------------------+
|1     |buf     |const unsigned char *|送信するデータの先頭アドレス           |
+------+--------+---------------------+---------------------------------------+
|2     |bytes   |unsigned             |送信するデータのバイト数(最大4096*9=36K|
|      |        |                     |バイトまで指定可能)                    |
+------+--------+---------------------+---------------------------------------+
|返却値                                                                       |
+------+----+-----------------------------------------------------------------+
|項番  | 型 |                              説明                               |
+------+----+---+---------------------+---------------------------------------+
|1     |int |0  |FOO_OK               |正常終了                               |
|      |    +---+---------------------+---------------------------------------+
|      |    |<0 |FOO_EINVAL           |パラメータの値が異常である             |
|      |    |   +---------------------+---------------------------------------+
|      |    |   |FOO_EBUSY            |現在送信中である                       |
|      |    |   +---------------------+---------------------------------------+
|      |    |   |FOO_EIO              |エラーが検出された                     |
|      |    |   +---------------------+---------------------------------------+
|      |    |   |FOO_ETIMEDOUT        |タイムアウト発生                       |
+------+----+---+---------------------+---------------------------------------+
| 前提                                                                        |
|   FOOドライバが初期化されていること。すでに送信中でないこと。               |
| 結果                                                                        |
|   指定した長さのデータが、送信開始される。送信の完了はドライバ状態の通知を  |
|   利用すること。                                                            |
| 概略説明                                                                    |
|   指定されたデータを、DMA送信バッファにコピーして、送信を開始する。         |
+-----------------------------------------------------------------------------+
$ 

$ cat foo2.txt
関数名
 int foo_send(const unsigned char *buf, unsigned bytes)
説明
 データ送信開始
引数
項番
 仮引数名
   型 \c
    説明 \c
1
 buf
   const unsigned char *
    送信するデータの先頭アドレス
2
 bytes
   unsigned
    送信するデータのバイト数(最大4096*9=36K\nバイトまで指定可能)
返却値 
項番
 型 \c
  説明 \c
1
 int
  0
   FOO_OK
    正常終了
  <0
   FOO_EINVAL
    パラメータの値が異常である
   FOO_EBUSY
    現在送信中である
   FOO_EIO
    エラーが検出された
   FOO_ETIMEDOUT
    タイムアウト発生
\~ 前提\n   FOOドライバが初期化されていること。すでに送信中でないこと。\n 結果\n   指定した長さのデータが、送信開始される。送信の完了はドライバ状態の通知を\n   利用すること。\n 概略説明\n   指定されたデータを、DMA送信バッファにコピーして、送信を開始する。
$