代码之家  ›  专栏  ›  技术社区  ›  Atif Aziz

HTML表格至_图形文本_用于代码注释

  •  5
  • Atif Aziz  · 技术社区  · 16 年前

    是否有一个工具(理想情况下是基于命令行)可以帮助将源表转换为HTML表,并转换为__图形文本_(可能考虑 ASCII art 对于HTML表)用于代码注释,如下所示?

    例如,给定以下HTML表源

    <TABLE BORDER=1>
      <CAPTION>A test table with merged cells</CAPTION>
      <TR><TH ROWSPAN=2><TH COLSPAN=2>Average
      <TH ROWSPAN=2>other<BR>category<TH>Misc
      <TR><TH>height<TH>weight
      <TR><TH ALIGN=LEFT>males<TD>1.9<TD>0.003
      <TR><TH ALIGN=LEFT ROWSPAN=2>females<TD>1.7<TD>0.002
    </TABLE>
    

    该工具将输出类似以下内容的内容,以嵌入到代码注释中(例如 /*…*/ ):

    /*
              A test table with merged cells
    +----------+-------------------+----------+--------+ 
    |          |      Average      |  other   |  Misc  |
    |          +---------+---------+ category +--------|
    |          |  height |  weight |          |        |
    |----------+---------+---------+----------+--------|
    | males    |   1.9   |  0.003  |          |        |
    |----------+---------+---------+----------+--------|
    | females  |   1.7   |  0.002  |          |        |
    +----------+---------+---------+----------+--------+
    */
    

    背景:从HTML表中读取值的一段代码可以用描述复杂HTML表布局的基于文本的图形表示的注释进行注释。稍后维护代码的人会发现更容易理解,例如,一段代码是如何切片和切割HTML表,或者在某些单元格位置提取值的。

    5 回复  |  直到 8 年前
        1
  •  0
  •   ThePhi    10 年前

    有一个工具可以做到这一点,用python编写:

    见: https://github.com/gustavklopp/DashTable

    仪表板

    HTML表到ASCII表,允许使用colspan&rowspan!

        2
  •  2
  •   SF.    16 年前
        3
  •  2
  •   Quentin    16 年前

    HTML::TreeBuilder Text::ASCIITable 看来他们只需要一点胶水就能完成这项工作。

        4
  •  1
  •   lemon    8 年前

    有另一个工具(yatg,还有另一个表生成器)可以做到这一点,用python编写:

    见: https://github.com/10gic/yatg

    输出示例(Emacs样式):

    +---------+-----------------+----------+
    |         | Average         | Red eyes |
    |         +--------+--------+          |
    |         | height | weight |          |
    +---------+--------+--------+----------+
    | Males   | 1.9    | 0.003  | 40%      |
    +---------+--------+--------+----------+
    | Females | 1.7    | 0.002  | 43%      |
    +---------+--------+--------+----------+
    

    输出示例(ORGMODE样式):

    | Header content 1 | Header content 2 |
    |------------------+------------------|
    | Body content 1   | Body content 2   |
    | Body content 3   | Body content 4   |
    | Body content 5   | Body content 6   |
    

    输出示例(MySQL样式):

    +------------------+------------------+
    | Header content 1 | Header content 2 |
    +------------------+------------------+
    | Body content 1   | Body content 2   |
    | Body content 3   | Body content 4   |
    | Body content 5   | Body content 6   |
    +------------------+------------------+
    

    输出示例(标记样式):

    | Header content 1 | Header content 2 |
    |------------------|------------------|
    | Body content 1   | Body content 2   |
    | Body content 3   | Body content 4   |
    | Body content 5   | Body content 6   |
    
        5
  •  0
  •   Sarfraz    16 年前

    我不知道你说的是哪种语言,但我使用这个函数(php)来实现:

    function text_table($data)
    {
        $keys = array_keys(end($data));
        $size = array_map('strlen', $keys);
    
        foreach(array_map('array_values', $data) as $e)
            $size = array_map('max', $size,
                array_map('strlen', $e));
    
        foreach($size as $n) {
            $form[] = "%-{$n}s";
            $line[] = str_repeat('-', $n);
        }
    
        $form = '| ' . implode(' | ', $form) . " |\n";
        $line = '+-' . implode('-+-', $line) . "-+\n";
        $rows = array(vsprintf($form, $keys));
    
        foreach($data as $e)
            $rows[] = vsprintf($form, $e);
        return $line . implode($line, $rows) . $line;
    }
    

    用途:

        echo "<pre>\n";
        echo text_table($array);
        echo "</pre>\n";
    
    推荐文章