]> granicus.if.org Git - php/commitdiff
* table support working
authorStig Bakken <ssb@php.net>
Fri, 22 Mar 2002 11:57:45 +0000 (11:57 +0000)
committerStig Bakken <ssb@php.net>
Fri, 22 Mar 2002 11:57:45 +0000 (11:57 +0000)
* added bold support for xterm/vt220/vt100 terminals

pear/PEAR/Frontend/CLI.php

index 22ff6785285517864f1084b0b18cee98e2548ad0..feabe90c9135704a00388d342a87adc65a7c56c2 100644 (file)
@@ -1,36 +1,84 @@
 <?php
+/*
+  +----------------------------------------------------------------------+
+  | PHP Version 4                                                        |
+  +----------------------------------------------------------------------+
+  | Copyright (c) 1997-2002 The PHP Group                                |
+  +----------------------------------------------------------------------+
+  | This source file is subject to version 2.02 of the PHP license,      |
+  | that is bundled with this package in the file LICENSE, and is        |
+  | available at through the world-wide-web at                           |
+  | http://www.php.net/license/2_02.txt.                                 |
+  | If you did not receive a copy of the PHP license and are unable to   |
+  | obtain it through the world-wide-web, please send a note to          |
+  | license@php.net so we can mail you a copy immediately.               |
+  +----------------------------------------------------------------------+
+  | Author: Stig Sæther Bakken <ssb@fast.no>                             |
+  +----------------------------------------------------------------------+
+
+  $Id$ 
+*/
 
 require_once "PEAR.php";
 
 class PEAR_Frontend_CLI extends PEAR
 {
+    // {{{ properties
+
     var $omode = 'plain';
     var $params = array();
+    var $term = array(
+        'bold' => '',
+        'normal' => '',
+        );
+
+    // }}}
+
+    // {{{ constructor
 
     function PEAR_Frontend_CLI()
     {
         parent::PEAR();
-    }
 
-    function _PEAR_Frontend_CLI()
-    {
-        parent::_PEAR();
-        if ($this->omode) {
-            $this->endOutput();
+        if (isset($_ENV['TERM'])) {
+            if (preg_match('/^(xterm|vt220)/', $_ENV['TERM'])) {
+                $this->term['bold'] = sprintf("%c%c%c%c", 27, 91, 49, 109);
+                $this->term['normal']=sprintf("%c%c%c", 27, 91, 109);
+            } elseif (preg_match('/^vt100/', $_ENV['TERM'])) {
+                $this->term['bold'] = sprintf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0);
+                $this->term['normal']=sprintf("%c%c%c%c%c", 27, 91, 109, 0, 0);
+            }
+        } elseif (OS_WINDOWS) {
+            // XXX add ANSI codes here
         }
     }
 
+    // }}}
+
+    // For now, all the display functions print a "| " at the
+    // beginning of the line.  This is just a temporary thing, it
+    // is for discovering commands that use print instead of
+    // the UI layer.
+
+    // {{{ displayLine(text)
+
     function displayLine($text)
     {
         print "| $text\n";
     }
 
+    // }}}
+    // {{{ displayHeading(title)
+
     function displayHeading($title)
     {
-        print "| ".strtoupper($title)."\n";
+        print "| ".$this->bold($title)."\n";
         print "| ".str_repeat("=", strlen($title))."\n";
     }
 
+    // }}}
+    // {{{ userDialog(prompt, [type], [default])
+
     function userDialog($prompt, $type = 'text', $default = '')
     {
         if ($type == 'password') {
@@ -54,6 +102,9 @@ class PEAR_Frontend_CLI extends PEAR
         return $line;
     }
 
+    // }}}
+    // {{{ userConfirm(prompt, [default])
+
     function userConfirm($prompt, $default = 'yes')
     {
         static $positives = array('y', 'yes', 'on', '1');
@@ -78,6 +129,9 @@ class PEAR_Frontend_CLI extends PEAR
         return false;
     }
 
+    // }}}
+    // {{{ startTable([params])
+
     function startTable($params = array())
     {
         $this->omode = 'table';
@@ -87,11 +141,14 @@ class PEAR_Frontend_CLI extends PEAR
         $this->params = $params;
     }
 
+    // }}}
+    // {{{ tableRow(columns, [rowparams], [colparams])
+
     function tableRow($columns, $rowparams = array(), $colparams = array())
     {
         for ($i = 0; $i < sizeof($columns); $i++) {
             if (!isset($this->params['widest'][$i]) ||
-                strlen($columns[$i] > $this->params['widest'][$i]))
+                strlen($columns[$i]) > $this->params['widest'][$i])
             {
                 $this->params['widest'][$i] = strlen($columns[$i]);
             }
@@ -109,6 +166,9 @@ class PEAR_Frontend_CLI extends PEAR
         $this->params['table_data'][] = $new_row;
     }
 
+    // }}}
+    // {{{ endTable()
+
     function endTable()
     {
         $this->omode = '';
@@ -125,30 +185,72 @@ class PEAR_Frontend_CLI extends PEAR
                 }
             }
         }
-        if (empty($params['border'])) {
-            $cellstart = " ";
-            $rowend = "\n";
+        if (empty($border)) {
+            $cellstart = ' ';
+            $cellend = ' ';
+            $rowend = '';
             $padrowend = false;
+            $borderline = '';
         } else {
-            $cellstart = "| ";
-            $rowend = " |\n";
+            $cellstart = '| ';
+            $cellend = ' ';
+            $rowend = '|';
             $padrowend = true;
-            $borderline = "+";
+            $borderline = '+';
             foreach ($width as $w) {
-                $borderline .= str_repeat('-', $w + 2);
+                $borderline .= str_repeat('-', $w + strlen($cellstart) + strlen($cellend) - 1);
+                $borderline .= '+';
             }
         }
+        if ($borderline) {
+            $this->displayLine($borderline);
+        }
         for ($i = 0; $i < sizeof($table_data); $i++) {
             extract($table_data[$i]);
+            $rowtext = '';
             for ($c = 0; $c < sizeof($data); $c++) {
+                if (isset($colparams[$c])) {
+                    $attribs = array_merge($rowparams, $colparams);
+                } else {
+                    $attribs = $rowparams;
+                }
                 $w = $width[$c];
                 $l = strlen($data[$c]);
+                $cell = $data[$c];
                 if ($l > $w) {
-                    print
+                    $cell = substr($cell, 0, $w);
                 }
+                if (isset($attribs['bold'])) {
+                    $cell = $this->bold($cell);
+                }
+                if ($l < $w) {
+                    // not using str_pad here because we may
+                    // add bold escape characters to $cell
+                    $cell .= str_repeat(' ', $w - $l);
+                }
+                
+                $rowtext .= $cellstart . $cell . $cellend;
             }
+            $rowtext .= $rowend;
+            $this->displayLine($rowtext);
+        }
+        if ($borderline) {
+            $this->displayLine($borderline);
         }
     }
+
+    // }}}
+    // {{{ bold($text)
+
+    function bold($text)
+    {
+        if (empty($this->term['bold'])) {
+            return strtoupper($text);
+        }
+        return $this->term['bold'] . $text . $this->term['normal'];
+    }
+
+    // }}}
 }
 
 ?>
\ No newline at end of file