big fts support patch from ivan, some minor tweaks from me
authorxzilla <xzilla>
Fri, 23 Nov 2007 17:58:47 +0000 (17:58 +0000)
committerxzilla <xzilla>
Fri, 23 Nov 2007 17:58:47 +0000 (17:58 +0000)
classes/Misc.php
classes/database/Postgres.php
classes/database/Postgres83.php
fulltext.php
lang/english.php
lang/recoded/english.php

index 7f07e8da8036c30001a0c851882c301efc86240d..691106760ac3bb00af13ede3bb42efeb1c74ed1a 100644 (file)
@@ -2,7 +2,7 @@
        /**
         * Class to hold various commonly used functions
         *
-        * $Id: Misc.php,v 1.163 2007/11/21 12:59:42 ioguix Exp $
+        * $Id: Misc.php,v 1.164 2007/11/23 17:58:47 xzilla Exp $
         */
 
        class Misc {
                                                )
                                        );
 
+                case 'fulltext':
+                    return array (
+                        'ftsconfigs' => array (
+                            'title' => $lang['strftstabconfigs'],
+                            'url'   => 'fulltext.php',
+                            'urlvars' => array('subject' => 'database'),
+                            'hide'  => !$data->hasFTS(),
+                            'help'  => 'PUT_DOC_LINK_HERE',
+                            'tree'  => true,
+                            'icon'  => 'FtsCfg',
+                        ),
+                        'ftsdicts' => array (
+                            'title' => $lang['strftstabdicts'],
+                            'url'   => 'fulltext.php',
+                            'urlvars' => array('subject' => 'database', 'action' => 'viewdicts'),
+                            'hide'  => !$data->hasFTS(),
+                            'help'  => 'PUT_DOC_LINK_HERE',
+                            'tree'  => true,
+                            'icon'  => 'FtsDict',
+                        ),
+                        'ftsparsers' => array (
+                            'title' => $lang['strftstabparsers'],
+                            'url'   => 'fulltext.php',
+                            'urlvars' => array('subject' => 'database', 'action' => 'viewparsers'),
+                            'hide'  => !$data->hasFTS(),
+                            'help'  => 'PUT_DOC_LINK_HERE',
+                            'tree'  => true,
+                            'icon'  => 'FtsParser',
+                        ),
+                    );
+
                                default:
                                        return array();
                        }
index 5058300aecabe52acb6ee0c621916650c7ee60b7..8766d54381ae0ac28892731e39730331fba7794c 100755 (executable)
@@ -4,7 +4,7 @@
  * A class that implements the DB interface for Postgres
  * Note: This class uses ADODB and returns RecordSets.
  *
- * $Id: Postgres.php,v 1.313 2007/11/21 19:10:40 ioguix Exp $
+ * $Id: Postgres.php,v 1.314 2007/11/23 17:58:47 xzilla Exp $
  */
 
 // @@@ THOUGHT: What about inherits? ie. use of ONLY???
@@ -4054,7 +4054,7 @@ class Postgres extends ADODB_base {
                        case 'VIEW':
                        case 'TEXT SEARCH CONFIGURATION':
                        case 'TEXT SEARCH DICTIONARY':
-                       case 'TEXT SEARCH DICTIONARY TEMPLATE':
+                       case 'TEXT SEARCH TEMPLATE':
                        case 'TEXT SEARCH PARSER':
                                $sql .= "\"{$obj_name}\" IS ";
                                break;
index 3c0b7d9aae36164e80563c482579e576f63bd707..5fa55ba1df6a56ca7dcff17be32cb460c140c076 100644 (file)
@@ -3,7 +3,7 @@
 /**
  * PostgreSQL 8.3 support
  *
- * $Id: Postgres83.php,v 1.12 2007/11/16 18:34:24 ioguix Exp $
+ * $Id: Postgres83.php,v 1.13 2007/11/23 17:58:47 xzilla Exp $
  */
 
 include_once('./classes/database/Postgres82.php');
@@ -456,16 +456,18 @@ class Postgres83 extends Postgres82 {
                $this->fieldClean($option);
                $this->clean($comment);
 
-               $sql = "CREATE TEXT SEARCH DICTIONARY";
+               $sql = "CREATE TEXT SEARCH";
                if ($isTemplate) {
-                       $sql .= " TEMPLATE \"{$dictname}\"";
-                       if ($lexize != '') $sql .= " LEXIZE \"{$lexize}\"";
-                       if ($init != '') $sql .= " INIT \"{$init}\"";
-                       $whatToComment = 'TEXT SEARCH DICTIONARY TEMPLATE';
+                       $sql .= " TEMPLATE {$dictname} (";
+                       if ($lexize != '') $sql .= " LEXIZE = {$lexize}";
+                       if ($init != '') $sql .= ", INIT = {$init}";
+            $sql .= ")";
+                       $whatToComment = 'TEXT SEARCH TEMPLATE';
                } else {
-                       $sql .= " \"{$dictname}\"";
-                       if ($template != '') $sql .= " TEMPLATE \"{$template}\"";
-                       if ($option != '') $sql .= " OPTION \"{$option}\"";
+                       $sql .= " DICTIONARY {$dictname} (";
+                       if ($template != '') $sql .= " TEMPLATE = {$template}";
+                       if ($option != '') $sql .= ", {$option}";
+            $sql .= ")";
                        $whatToComment = 'TEXT SEARCH DICTIONARY';
                }
 
index f7a92548c599b281369381f4e0cf97e6af986fc4..db0b48b0b3d50755ad1f91c3e496f9ebbbaeec3f 100644 (file)
@@ -3,7 +3,7 @@
        /**
         * Manage fulltext configurations, dictionaries and mappings
         *
-        * $Id: fulltext.php,v 1.3 2007/10/17 20:56:28 ioguix Exp $
+        * $Id: fulltext.php,v 1.4 2007/11/23 17:58:47 xzilla Exp $
         */
 
        // Include application functions
@@ -18,6 +18,7 @@
 
                $misc->printTrail('database');
                $misc->printTabs('database','fulltext');
+               $misc->printTabs('fulltext','ftsconfigs');
                $misc->printMsg($msg);
 
                $cfgs = $data->getFtsConfigurations();
@@ -60,8 +61,6 @@
 
                echo "<ul class=\"navlink\">\n";
                echo "\t<li><a href=\"fulltext.php?action=createconfig&amp;{$misc->href}\">{$lang['strftscreateconfig']}</a></li>\n";
-               echo "\t<li><a href=\"fulltext.php?action=createdict&amp;{$misc->href}\">{$lang['strftscreatedict']}</a></li>\n";
-               echo "\t<li><a href=\"fulltext.php?action=createparser&amp;{$misc->href}\">{$lang['strftscreateparser']}</a></li>\n";
                echo "</ul>\n";
        }
 
                        doAlterConfig($lang['strftsconfigalteredbad']);
        }
 
+    /**
+     * View list of FTS parsers
+     */
+    function doViewParsers($msg = '') {
+        global $data, $misc;
+        global $lang;
 
-       /**
-        * View details of FTS configuration given
-        */
-       function doViewConfig($ftscfg, $msg = '') {
-               global $data, $misc;
-               global $lang;
-
-               $misc->printTrail('ftscfg');
+        $misc->printTrail('database');
                $misc->printTabs('database','fulltext');
-               $misc->printMsg($msg);
+        $misc->printTabs('fulltext','ftsparsers');
+        $misc->printMsg($msg);
 
-               echo "<h3>{$lang['strftsparsers']}</h3>\n";
+        $parsers = $data->getFtsParsers();
 
-               $parsers = $data->getFtsParsers();
+        $columns = array(
+            'schema' => array(
+                'title' => $lang['strschema'],
+                'field' => field('schema'),
+            ),
+            'name' => array(
+                'title' => $lang['strname'],
+                'field' => field('name'),
+            ),
+            'comment' => array(
+                'title' => $lang['strcomment'],
+                'field' => field('comment'),
+            ),
 
-               $columns = array(
-                       'schema' => array(
-                               'title' => $lang['strschema'],
-                               'field' => field('schema'),
-                       ),
-                       'name' => array(
-                               'title' => $lang['strname'],
-                               'field' => field('name'),
-                       ),
-                       'comment' => array(
-                               'title' => $lang['strcomment'],
-                               'field' => field('comment'),
-                       ),
+        );
 
-               );
+        $actions = array();
 
-               $actions = array();
+        $misc->printTable($parsers, $columns, $actions, $lang['strftsnoparsers']);
 
-               $misc->printTable($parsers, $columns, $actions, $lang['strftsnoparsers']);
+        //TODO: create parser
+        //echo "<ul class=\"navlink\">\n";
+        //echo "\t<li><a href=\"#\">{$lang['strftscreateparser']}</a></li>\n";
+        //echo "</ul>\n";
 
-               echo "<h3>{$lang['strftsdicts']}</h3>\n";
+    }
 
-               $dicts = $data->getFtsDictionaries();
 
-               $columns = array(
-                       'schema' => array(
-                               'title' => $lang['strschema'],
-                               'field' => field('schema'),
-                       ),
-                       'name' => array(
-                               'title' => $lang['strname'],
-                               'field' => field('name'),
-                       ),
-                       'actions' => array(
-                               'title' => $lang['stractions'],
-                       ),
-                       'comment' => array(
-                               'title' => $lang['strcomment'],
-                               'field' => field('comment'),
-                       ),
+    /**
+     * View list of FTS dictionaries
+     */
+    function doViewDicts($msg = '') {
+        global $data, $misc;
+        global $lang;
 
-               );
+        $misc->printTrail('database');
+               $misc->printTabs('database','fulltext');
+        $misc->printTabs('fulltext','ftsdicts');
+        $misc->printMsg($msg);
+
+        $dicts = $data->getFtsDictionaries();
+
+        $columns = array(
+            'schema' => array(
+                'title' => $lang['strschema'],
+                'field' => field('schema'),
+            ),
+            'name' => array(
+                'title' => $lang['strname'],
+                'field' => field('name'),
+            ),
+            'actions' => array(
+                'title' => $lang['stractions'],
+            ),
+            'comment' => array(
+                'title' => $lang['strcomment'],
+                'field' => field('comment'),
+            ),
+
+        );
+
+        $actions = array(
+            'drop' => array(
+                'title' => $lang['strdrop'],
+                'url'   => "fulltext.php?action=dropdict&amp;{$misc->href}&amp;",
+                'vars'  => array('ftsdict' => 'name'),
+            ),
+            'alter' => array(
+                'title' => $lang['stralter'],
+                'url'   => "fulltext.php?action=alterdict&amp;{$misc->href}&amp;",
+                'vars'  => array('ftsdict' => 'name'),
+            ),
+        );
+
+        $misc->printTable($dicts, $columns, $actions, $lang['strftsnodicts']);
+
+        echo "<ul class=\"navlink\">\n";
+        echo "\t<li><a href=\"fulltext.php?action=createdict&amp;{$misc->href}&amp;\">{$lang['strftscreatedict']}</a></li>\n";
+        echo "</ul>\n";
 
-               $actions = array(
-                       'drop' => array(
-                               'title' => $lang['strdrop'],
-                               'url'   => "fulltext.php?action=dropdict&amp;{$misc->href}&amp;ftscfg={$ftscfg}&amp;",
-                               'vars'  => array('ftsdict' => 'name'),
-                       ),
-                       'alter' => array(
-                               'title' => $lang['stralter'],
-                               'url'   => "fulltext.php?action=alterdict&amp;{$misc->href}&amp;ftscfg={$ftscfg}&amp;",
-                               'vars'  => array('ftsdict' => 'name'),
-                       ),
-               );
+    }
 
-               $misc->printTable($dicts, $columns, $actions, $lang['strftsnodicts']);
+
+       /**
+        * View details of FTS configuration given
+        */
+       function doViewConfig($ftscfg, $msg = '') {
+               global $data, $misc;
+               global $lang;
+
+               $misc->printTrail('ftscfg');
+               $misc->printTabs('database','fulltext');
+               $misc->printTabs('fulltext','ftsconfigs');
+               $misc->printMsg($msg);
 
                echo "<h3>{$lang['strftsconfigmap']}</h3>\n";
 
                        'name' => array(
                                'title' => $lang['strftsmapping'],
                                'field' => field('name'),
-                               //'url'   => "fulltext.php?action=viewtoken&amp;{$misc->href}&amp;",
-                               //'vars'        => array('ftscfg' => 'name'),
                        ),
                        'dictionaries' => array(
                                'title' => $lang['strftsdicts'],
                                'title' => $lang['stralter'],
                                'url'   => "fulltext.php?action=altermapping&amp;{$misc->href}&amp;",
                                'vars'  => array('mapping' => 'name', 'ftscfg' => 'cfgname'),
-                               'multiaction' => 'altermapping',
                        ),
                        'multiactions' => array(
                                'keycols' => array('mapping' => 'name'),
 
                echo "<ul class=\"navlink\">\n";
                echo "\t<li><a href=\"fulltext.php?action=addmapping&amp;{$misc->href}&ftscfg={$ftscfg}\">{$lang['strftsaddmapping']}</a></li>\n";
-               echo "\t<li><a href=\"#\">{$lang['strftscreateconfig']}</a></li>\n";
-               echo "<\t<li>a href=\"#\">{$lang['strftscreatedict']}</a></li>\n";
                echo "</ul>\n";
 
        }
                echo "\t\t<td class=\"data1\"><input name=\"formName\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"",
                        htmlspecialchars($_POST['formName']), "\" />&nbsp;",
                        "<input type=\"checkbox\" name=\"formIsTemplate\" id=\"formIsTemplate\"", @$_POST['formIsTemplate'] ? ' checked="checked" ' : '',
-                       "onchange=\"document.getElementsByName('formTemplate')[0].disabled = this.checked;document.getElementsByName('formLexize')[0].disabled = !this.checked;document.getElementsByName('formInit')[0].disabled = !this.checked;\" />",
+                       "onchange=\"document.getElementsByName('formTemplate')[0].disabled = this.checked;document.getElementsByName('formOption')[0].disabled = this.checked;document.getElementsByName('formLexize')[0].disabled = !this.checked;document.getElementsByName('formInit')[0].disabled = !this.checked;\" />",
                        "<label for=\"formIsTemplate\">{$lang['strftscreatedicttemplate']}</label></td>\n\t</tr>\n";
 
                // Template
                        "/></td>\n\t</tr>\n";
 
                // Option
-               echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strftsoption']}</th>\n";
+               echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strftsoptionsvalues']}</th>\n";
                echo "\t\t<td class=\"data1\"><input name=\"formOption\" size=\"32\" maxlength=\"1000\" value=\"",
                        htmlspecialchars($_POST['formOption']), "\" /></td>\n\t</tr>\n";
 
                        $status = $data->createFtsDictionary($_POST['formName'], @$_POST['formIsTemplate'], @$_POST['formTemplate'], @$_POST['formLexize'], @$_POST['formInit'], @$_POST['formOption'], $_POST['formComment']);
                        if ($status == 0) {
                                $_reload_browser = true;
-                               doDefault($lang['strftsdictcreated']);
+                               doViewDicts($lang['strftsdictcreated']);
                        }
                        else
                                doCreateDict($lang['strftsdictcreatedbad']);
                        echo "</table>\n";
                        echo "<p><input type=\"hidden\" name=\"action\" value=\"alterdict\" />\n";
                        echo "<input type=\"hidden\" name=\"ftsdict\" value=\"", htmlspecialchars($_POST['ftsdict']), "\" />\n";
-                       echo "<input type=\"hidden\" name=\"ftscfg\" value=\"", htmlspecialchars($_REQUEST['ftscfg']), "\" />\n";
-                       echo "<input type=\"hidden\" name=\"prev_action\" value=\"viewconfig\" /></p>\n";
+                       echo "<input type=\"hidden\" name=\"prev_action\" value=\"viewdicts\" /></p>\n";
                        echo $misc->form;
                        echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n";
                        echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n";
 
                $status = $data->updateFtsDictionary($_POST['ftsdict'], $_POST['formComment'], $_POST['formName']);
                if ($status == 0)
-                       doDefault($lang['strftsdictaltered']);
+                       doViewDicts($lang['strftsdictaltered']);
                else
                        doAlterDict($lang['strftsdictalteredbad']);
        }
             if (is_array($_REQUEST['mapping'])) {
                 $status = $data->changeFtsMapping($_REQUEST['ftscfg'], $_REQUEST['mapping'], 'drop');
                                if ($status != 0) {
-                                       doDefault($lang['strftsmappingdroppedbad']);
+                                       doViewConfig($_REQUEST['ftscfg'], $lang['strftsmappingdroppedbad']);
                                        return;
                                }
-                               doDefault($lang['strftsmappingdropped']);
+                               doViewConfig($_REQUEST['ftscfg'], $lang['strftsmappingdropped']);
             } else {
                            $status = $data->changeFtsMapping($_REQUEST['ftscfg'], array($_REQUEST['mapping']), 'drop');
                            if ($status == 0) {
-                                   doDefault($lang['strftsmappingdropped']);
+                                   doViewConfig($_REQUEST['ftscfg'], $lang['strftsmappingdropped']);
                            } else {
-                                   doDefault($lang['strftsmappingdroppedbad']);
+                                   doViewConfig($_REQUEST['ftscfg'], $lang['strftsmappingdroppedbad']);
                            }
             }
                }
        function doTree() {
                global $misc, $data, $lang, $slony;
 
-               $ftscfgs = $data->getFtsConfigurations();
+        $tabs = $misc->getNavTabs('fulltext');        
+        $items = $misc->adjustTabsForTree($tabs);        
 
                $reqvars = $misc->getRequestVars('ftscfg');
 
                $attrs = array(
-                       'text'   => field('name'),
-                       'icon'   => 'Fts',
-                       'toolTip'=> field('comment'),
+            'text'   => noEscape(field('title')),
+            'icon'   => field('icon'),
                        'action' => url('fulltext.php',
                                                        $reqvars,
-                                                       array(
-                                                               'action' => 'viewconfig',
-                                                               'ftscfg'  => field('name')
-                                                       )
+                            field('urlvars')
                                                ),
-                       'branch' => ifempty(
-                               field('branch'), '', url('fulltext.php',
-                                                       $reqvars,
-                                                       array(
-                                                               'action'  => 'subtree',
-                                                               'ftscfg'  => field('name')
-                                                       )
-                                               )),
+            'branch' => url('fulltext.php',
+                            $reqvars,
+                            array(
+                                'action'  => 'subtree',
+                                'what'  => field('icon') // IZ: yeah, it's ugly, but I do not want to change navigation tabs arrays
+                            )
+                        ),
                );
 
-               $misc->printTreeXML($ftscfgs, $attrs);
+               $misc->printTreeXML($items, $attrs);
 
                exit;
        }
 
+    function doSubTree($what) {
+        global $misc, $data, $lang;
+        
+        switch($what) {
+               case 'FtsCfg':
+                $items = $data->getFtsConfigurations();
+                $urlvars = array('action' => 'viewconfig', 'ftscfg' => field('name'));
+                break;
+            case 'FtsDict':
+                $items = $data->getFtsDictionaries();
+                $urlvars = array('action' => 'viewdicts');
+                break;
+            case 'FtsParser':
+                $items = $data->getFtsParsers();
+                $urlvars = array('action' => 'viewparsers');
+                break;
+            default:
+                exit;
+        }
+
+        $reqvars = $misc->getRequestVars('ftscfg');
+                
+        $attrs = array(
+            'text'   => noEscape(field('name')),
+            'icon'   => $what,
+            'toolTip'=> field('comment'),
+            'action' => url('fulltext.php',
+                            $reqvars,
+                            $urlvars
+                        ),
+            'branch' => ifempty(
+                field('branch'), '', url('fulltext.php',
+                            $reqvars,
+                            array(
+                                'action'  => 'subtree',
+                                'ftscfg'  => field('name')
+                            )
+                        )),
+        );
+        
+        $misc->printTreeXML($items, $attrs);
+        exit;
+    }
+
 
        if ($action == 'tree') doTree();
+    if ($action == 'subtree') doSubTree($_REQUEST['what']);
 
        $misc->printHeader($lang['strschemas']);
        $misc->printBody();
                case 'viewconfig':
                        doViewConfig($_REQUEST['ftscfg']);
                        break;
+        case 'viewparsers':
+            doViewParsers();
+            break;
+        case 'viewdicts':
+            doViewDicts();
+            break;
                case 'createdict':
                        if (isset($_POST['create'])) doSaveCreateDict();
                        else doCreateDict();
index b21547be9528114a3e867ab27fb7607dbfb16699..e381f14118ad0b64ba864823b50a3a6b19d0d701 100755 (executable)
@@ -4,7 +4,7 @@
         * English language file for phpPgAdmin.  Use this as a basis
         * for new translations.
         *
-        * $Id: english.php,v 1.221 2007/11/15 06:06:45 xzilla Exp $
+        * $Id: english.php,v 1.222 2007/11/23 17:58:47 xzilla Exp $
         */
 
        // Language and character set
        // Fulltext search
        $lang['strfulltext'] = 'Full Text Search';
        $lang['strftsconfig'] = 'FTS configuration';
+    $lang['strftsconfigs'] = 'Configurations';
        $lang['strftscreateconfig'] = 'Create FTS configuration';
        $lang['strftscreatedict'] = 'Create dictionary';
        $lang['strftscreatedicttemplate'] = 'Create dictionary template';
        $lang['strftsdictcreatedbad'] = 'FTS dictionary creation failed.';
        $lang['strftslexize'] = 'Lexize';
        $lang['strftsinit'] = 'Init';
-       $lang['strftsoption'] = 'Option';
+       $lang['strftsoptionsvalues'] = 'Options and Values';
        $lang['strftsdictneedsname'] = 'You must give a name for your FTS dictionary.';
        $lang['strftsdictdropped'] = 'FTS dictionary dropped.';
        $lang['strftsdictdroppedbad'] = 'FTS dictionary drop failed.';
        $lang['strftsmappingalteredbad'] = 'FTS mapping alter failed.';
        $lang['strftsmappingadded'] = 'FTS mapping added.';
        $lang['strftsmappingaddedbad'] = 'FTS mapping add failed.';
-       
-       
+    $lang['strftsmappingdropped'] = 'FTS mapping dropped.';
+    $lang['strftsmappingdroppedbad'] = 'FTS mapping drop failed.';
+    $lang['strftstabconfigs'] = 'Configurations';
+       $lang['strftstabdicts'] = 'Dictionaries';
+       $lang['strftstabparsers'] = 'Parsers';
+    
+    
 ?>
index 9210bf3dfdb9a83b3ac0fd99296f7d3cc993be79..ea59e81fc9b26fa3ebd5f22566f982f2e90d0a3d 100644 (file)
@@ -4,7 +4,7 @@
         * English language file for phpPgAdmin.  Use this as a basis
         * for new translations.
         *
-        * $Id: english.php,v 1.173 2007/11/15 06:06:46 xzilla Exp $
+        * $Id: english.php,v 1.174 2007/11/23 17:58:47 xzilla Exp $
         */
 
        // Language and character set
        // Fulltext search
        $lang['strfulltext'] = 'Full Text Search';
        $lang['strftsconfig'] = 'FTS configuration';
+    $lang['strftsconfigs'] = 'Configurations';
        $lang['strftscreateconfig'] = 'Create FTS configuration';
        $lang['strftscreatedict'] = 'Create dictionary';
        $lang['strftscreatedicttemplate'] = 'Create dictionary template';
        $lang['strftsdictcreatedbad'] = 'FTS dictionary creation failed.';
        $lang['strftslexize'] = 'Lexize';
        $lang['strftsinit'] = 'Init';
-       $lang['strftsoption'] = 'Option';
+       $lang['strftsoptionsvalues'] = 'Options and Values';
        $lang['strftsdictneedsname'] = 'You must give a name for your FTS dictionary.';
        $lang['strftsdictdropped'] = 'FTS dictionary dropped.';
        $lang['strftsdictdroppedbad'] = 'FTS dictionary drop failed.';
        $lang['strftsmappingalteredbad'] = 'FTS mapping alter failed.';
        $lang['strftsmappingadded'] = 'FTS mapping added.';
        $lang['strftsmappingaddedbad'] = 'FTS mapping add failed.';
-       
-       
+    $lang['strftsmappingdropped'] = 'FTS mapping dropped.';
+    $lang['strftsmappingdroppedbad'] = 'FTS mapping drop failed.';
+    $lang['strftstabconfigs'] = 'Configurations';
+       $lang['strftstabdicts'] = 'Dictionaries';
+       $lang['strftstabparsers'] = 'Parsers';
+    
+    
 ?>