mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge mysql.com:/home/kent/bk/tmp/mysql-5.0-build
into mysql.com:/home/kent/bk/tmp/mysql-5.1-build
This commit is contained in:
@ -1,101 +0,0 @@
|
|||||||
\input texinfo @c -*-texinfo-*-
|
|
||||||
@c
|
|
||||||
@c *********************************************************
|
|
||||||
@c
|
|
||||||
@c This is a dummy placeholder file for internals.texi in the
|
|
||||||
@c MySQL source trees.
|
|
||||||
@c
|
|
||||||
@c Note, that the internals documentation has been moved into a separate
|
|
||||||
@c BitKeeper source tree named "mysqldoc" - do not attempt to edit this
|
|
||||||
@c file! All changes to internals.texi should be done in the mysqldoc tree.
|
|
||||||
@c
|
|
||||||
@c See http://www.mysql.com/doc/en/Installing_source_tree.html
|
|
||||||
@c for information about how to work with BitKeeper source trees.
|
|
||||||
@c
|
|
||||||
@c This dummy file is being replaced with the actual file from the
|
|
||||||
@c mysqldoc tree when building the official source distribution.
|
|
||||||
@c
|
|
||||||
@c Please e-mail docs@mysql.com for more information or if
|
|
||||||
@c you are interested in doing a translation.
|
|
||||||
@c
|
|
||||||
@c *********************************************************
|
|
||||||
@c
|
|
||||||
@c %**start of header
|
|
||||||
|
|
||||||
@setfilename internals.info
|
|
||||||
|
|
||||||
@c We want the types in the same index
|
|
||||||
@syncodeindex tp fn
|
|
||||||
|
|
||||||
@ifclear tex-debug
|
|
||||||
@c This removes the black squares in the right margin
|
|
||||||
@finalout
|
|
||||||
@end ifclear
|
|
||||||
|
|
||||||
@c Set background for HTML
|
|
||||||
@set _body_tags BGCOLOR=silver TEXT=#000000 LINK=#101090 VLINK=#7030B0
|
|
||||||
@c Set some style elements for the manual in HTML form. 'suggested'
|
|
||||||
@c natural language colors: aqua, black, blue, fuchsia, gray, green,
|
|
||||||
@c lime, maroon, navy, olive, purple, red, silver, teal, white, and
|
|
||||||
@c yellow. From Steeve Buehler <ahr@YogElements.com>
|
|
||||||
@set _extra_head <style> code {color:purple} tt {color:green} samp {color:navy} pre {color:maroon} </style>
|
|
||||||
|
|
||||||
@settitle Dummy MySQL internals documentation for version @value{mysql_version}.
|
|
||||||
|
|
||||||
@c We want single-sided heading format, with chapters on new pages. To
|
|
||||||
@c get double-sided format change 'on' below to 'odd'
|
|
||||||
@setchapternewpage on
|
|
||||||
|
|
||||||
@paragraphindent 0
|
|
||||||
|
|
||||||
@c %**end of header
|
|
||||||
|
|
||||||
@ifinfo
|
|
||||||
@format
|
|
||||||
START-INFO-DIR-ENTRY
|
|
||||||
* mysql: (mysql). MySQL documentation.
|
|
||||||
END-INFO-DIR-ENTRY
|
|
||||||
@end format
|
|
||||||
@end ifinfo
|
|
||||||
|
|
||||||
@titlepage
|
|
||||||
@sp 10
|
|
||||||
@center @titlefont{Empty placeholder for the MySQL Internals Documentation}
|
|
||||||
@sp 10
|
|
||||||
@center Copyright @copyright{} 1995-2003 MySQL AB
|
|
||||||
@c blank page after title page makes page 1 be a page front.
|
|
||||||
@c also makes the back of the title page blank.
|
|
||||||
@page
|
|
||||||
@end titlepage
|
|
||||||
|
|
||||||
@c This should be added. The HTML conversion also needs a MySQL version
|
|
||||||
@c number somewhere.
|
|
||||||
|
|
||||||
@iftex
|
|
||||||
@c change this to double if you want formatting for double-sided
|
|
||||||
@c printing
|
|
||||||
@headings single
|
|
||||||
|
|
||||||
@oddheading @thischapter @| @| @thispage
|
|
||||||
@evenheading @thispage @| @| MySQL Internal Reference for Version @value{mysql_version}
|
|
||||||
|
|
||||||
@end iftex
|
|
||||||
|
|
||||||
@node Top, (dir), (dir), (dir)
|
|
||||||
|
|
||||||
@ifinfo
|
|
||||||
This is an empty placeholder file for the MySQL internals documentation.
|
|
||||||
|
|
||||||
The real version of this file is now maintained in a separate BitKeeper
|
|
||||||
source tree! Please see
|
|
||||||
@url{http://www.mysql.com/doc/en/Installing_source_tree.html} for more info
|
|
||||||
on how to work with BitKeeper.
|
|
||||||
|
|
||||||
Please do not attempt to edit this file directly - use the one in the
|
|
||||||
@code{mysqldoc} BK tree instead.
|
|
||||||
|
|
||||||
This file will be replaced with the current @code{internals.texi} when
|
|
||||||
building the official source distribution.
|
|
||||||
@end ifinfo
|
|
||||||
|
|
||||||
@bye
|
|
@ -1,250 +0,0 @@
|
|||||||
#!@PERL@
|
|
||||||
# Copyright (C) 2003 MySQL AB
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; version 2 of the License.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
#
|
|
||||||
# fill_func_tables - parse ../Docs/manual.texi
|
|
||||||
#
|
|
||||||
# Original version by Victor Vagin <vva@mysql.com>
|
|
||||||
#
|
|
||||||
|
|
||||||
my $cat_name= "";
|
|
||||||
my $func_name= "";
|
|
||||||
my $text= "";
|
|
||||||
my $example= "";
|
|
||||||
|
|
||||||
local $mode= "";
|
|
||||||
|
|
||||||
sub prepare_name
|
|
||||||
{
|
|
||||||
my ($a)= @_;
|
|
||||||
|
|
||||||
$a =~ s/(\@itemize \@bullet)/ /g;
|
|
||||||
$a =~ s/(\@end itemize)/ /g;
|
|
||||||
$a =~ s/(\@end multitable)/ /g;
|
|
||||||
$a =~ s/(\@end table)/ /g;
|
|
||||||
$a =~ s/(\@cindex(.*?)\n)/ /g;
|
|
||||||
$a =~ s/(\@multitable \@columnfractions(.*?)\n)/ /g;
|
|
||||||
$a =~ s/(\@node(.*?)\n)/ /g;
|
|
||||||
$a =~ s/(\@tab)/\t/g;
|
|
||||||
$a =~ s/\@item/ /g;
|
|
||||||
$a =~ s/\@code\{((.|\n)+?)\}/$1/go;
|
|
||||||
$a =~ s/\@strong\{(.+?)\}/$1/go;
|
|
||||||
$a =~ s/\@samp\{(.+?)\}/$1/go;
|
|
||||||
$a =~ s/\@emph\{((.|\n)+?)\}/\/$1\//go;
|
|
||||||
$a =~ s/\@xref\{((.|\n)+?)\}/See also : [$1]/go;
|
|
||||||
$a =~ s/\@ref\{((.|\n)+?)\}/[$1]/go;
|
|
||||||
$a =~ s/\'/\'\'/g;
|
|
||||||
$a =~ s/\\/\\\\/g;
|
|
||||||
$a =~ s/\`/\`\`/g;
|
|
||||||
|
|
||||||
$a =~ s/\@table \@code/ /g;
|
|
||||||
|
|
||||||
$a =~ s/\(\)//g;
|
|
||||||
|
|
||||||
$a =~ s/((\w|\s)+)\(([\+-=><\/%*!<>\s]+)\)/$3/gxs; #$a =~ s/((\w|\s)+)\(([\+-=><\/%*!<>\s]+)\)/$3 $1/gxs;
|
|
||||||
$a =~ s/([\+-=><\/%*!<>\s]+)\(((\w|\s)+)\)/$1/gxs;#$a =~ s/([\+-=><\/%*!<>\s]+)\(((\w|\s)+)\)/$1 $2/gxs;
|
|
||||||
$a =~ s/((\w|\s)+)\((.+)\)/$1/gxs;
|
|
||||||
|
|
||||||
return $a;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub prepare_text
|
|
||||||
{
|
|
||||||
my ($a)= @_;
|
|
||||||
|
|
||||||
$a =~ s/(\@itemize \@bullet)/ /g;
|
|
||||||
$a =~ s/(\@end itemize)/ /g;
|
|
||||||
$a =~ s/(\@end multitable)/ /g;
|
|
||||||
$a =~ s/(\@end table)/ /g;
|
|
||||||
$a =~ s/(\@cindex(.*?)\n)/ /g;
|
|
||||||
$a =~ s/(\@multitable \@columnfractions(.*?)\n)/ /g;
|
|
||||||
$a =~ s/(\@node(.*?)\n)/ /g;
|
|
||||||
$a =~ s/(\@tab)/\t/g;
|
|
||||||
$a =~ s/\@itemx/ /g;
|
|
||||||
$a =~ s/\@item/ /g;
|
|
||||||
$a =~ s/\@code\{((.|\n)+?)\}/$1/go;
|
|
||||||
$a =~ s/\@strong\{(.+?)\}/$1/go;
|
|
||||||
$a =~ s/\@samp\{(.+?)\}/$1/go;
|
|
||||||
$a =~ s/\@emph\{((.|\n)+?)\}/\/$1\//go;
|
|
||||||
$a =~ s/\@xref\{((.|\n)+?)\}/See also : [$1]/go;
|
|
||||||
$a =~ s/\@ref\{((.|\n)+?)\}/[$1]/go;
|
|
||||||
$a =~ s/\'/\'\'/g;
|
|
||||||
$a =~ s/\\/\\\\/g;
|
|
||||||
$a =~ s/\`/\`\`/g;
|
|
||||||
$a =~ s/(\n*?)$//g;
|
|
||||||
$a =~ s/\n/\\n/g;
|
|
||||||
|
|
||||||
$a =~ s/\@table \@code/ /g;
|
|
||||||
|
|
||||||
return $a;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub prepare_example
|
|
||||||
{
|
|
||||||
my ($a)= @_;
|
|
||||||
|
|
||||||
$a =~ s/\'/\'\'/g;
|
|
||||||
$a =~ s/\\/\\\\/g;
|
|
||||||
$a =~ s/\`/\`\`/g;
|
|
||||||
$a =~ s/(\n*?)$//g;
|
|
||||||
$a =~ s/\n/\\n/g;
|
|
||||||
|
|
||||||
return $a;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub flush_all
|
|
||||||
{
|
|
||||||
my ($mode) = @_;
|
|
||||||
|
|
||||||
if ($mode eq ""){return;}
|
|
||||||
|
|
||||||
$func_name= prepare_name($func_name);
|
|
||||||
$text= prepare_text($text);
|
|
||||||
$example= prepare_example($example);
|
|
||||||
|
|
||||||
if ($func_name ne "" && $text ne "" && !($func_name =~ /[abcdefghikjlmnopqrstuvwxyz]/)){
|
|
||||||
print "INSERT INTO function (name,description,example) VALUES (";
|
|
||||||
print "'$func_name',";
|
|
||||||
print "'$text',";
|
|
||||||
print "'$example'";
|
|
||||||
print ");\n";
|
|
||||||
print "INSERT INTO function_category (cat_id,func_id) VALUES (\@cur_category,LAST_INSERT_ID());\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
$func_name= "";
|
|
||||||
$text= "";
|
|
||||||
$example= "";
|
|
||||||
$mode= "";
|
|
||||||
}
|
|
||||||
|
|
||||||
sub new_category
|
|
||||||
{
|
|
||||||
my ($category)= @_;
|
|
||||||
|
|
||||||
$category= prepare_text($category);
|
|
||||||
|
|
||||||
print "INSERT INTO function_category_name (name) VALUES (\'$category\');\n";
|
|
||||||
print "SELECT \@cur_category:=LAST_INSERT_ID();\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
print "INSERT INTO db (Host,DB,User,Select_priv) VALUES ('%','mysql_help','','Y');\n";
|
|
||||||
print "CREATE DATABASE mysql_help;\n";
|
|
||||||
|
|
||||||
print "USE mysql_help;\n";
|
|
||||||
|
|
||||||
print "DROP TABLE IF EXISTS function;\n";
|
|
||||||
print "CREATE TABLE function (";
|
|
||||||
print " func_id int unsigned not null auto_increment,";
|
|
||||||
print " name char(64) not null,";
|
|
||||||
print " url char(128) not null,";
|
|
||||||
print " description text not null,";
|
|
||||||
print " example text not null,";
|
|
||||||
print " min_args tinyint not null,";
|
|
||||||
print " max_args tinyint,";
|
|
||||||
print " date_created datetime not null,";
|
|
||||||
print " last_modified timestamp not null,";
|
|
||||||
print " primary key (func_id)";
|
|
||||||
print ") ENGINE=MYISAM;\n\n";
|
|
||||||
|
|
||||||
print "DROP TABLE IF EXISTS function_category_name;\n";
|
|
||||||
print "CREATE TABLE function_category_name (";
|
|
||||||
print " cat_id smallint unsigned not null auto_increment,";
|
|
||||||
print " name char(64) not null,";
|
|
||||||
print " url char(128) not null,";
|
|
||||||
print " date_created datetime not null,";
|
|
||||||
print " last_modified timestamp not null,";
|
|
||||||
print " primary key (cat_id)";
|
|
||||||
print ") ENGINE=MYISAM;\n\n";
|
|
||||||
|
|
||||||
print "DROP TABLE IF EXISTS function_category;\n";
|
|
||||||
print "CREATE TABLE function_category (";
|
|
||||||
print " cat_id smallint unsigned not null references function_category_name,";
|
|
||||||
print " func_id int unsigned not null references function,";
|
|
||||||
print " primary key (cat_id, func_id)";
|
|
||||||
print ") ENGINE=MYISAM;\n\n";
|
|
||||||
|
|
||||||
print "DELETE FROM function_category_name;\n";
|
|
||||||
print "DELETE FROM function_category;\n";
|
|
||||||
print "DELETE FROM function;\n";
|
|
||||||
print "SELECT \@cur_category:=null;\n\n";
|
|
||||||
|
|
||||||
my $in_section_6_3= 0;
|
|
||||||
|
|
||||||
for(<>)
|
|
||||||
{
|
|
||||||
if ($_=~/\@section Functions for Use in \@code{SELECT} and \@code{WHERE} Clauses/ &&
|
|
||||||
!$in_section_6_3){
|
|
||||||
$in_section_6_3= 1;
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($_=~/\@section/ && $in_section_6_3){
|
|
||||||
$in_section_6_3= 0;
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$in_section_6_3) { next; }
|
|
||||||
|
|
||||||
my $c_name= "";
|
|
||||||
|
|
||||||
($c_name)=m|\@c for_mysql_help,(.+?)$|;
|
|
||||||
if (!($c_name eq "") && ! ($c_name =~ m/$cat_name/i)){
|
|
||||||
($cat_name)= $c_name;
|
|
||||||
new_category($cat_name);
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
($c_name)=m|\@subsubsection (.+?)$|;
|
|
||||||
if (!($c_name eq "") && ! ($c_name =~ m/$cat_name/i)){
|
|
||||||
($cat_name)= $c_name;
|
|
||||||
new_category($cat_name);
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
($c_name)=m|\@subsection (.+?)$|;
|
|
||||||
if (!($c_name eq "") && ! ($c_name =~ m/$cat_name/i)){
|
|
||||||
($cat_name)= $c_name;
|
|
||||||
new_category($cat_name);
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
($f_name)=m|\@findex (.+?)$|;
|
|
||||||
if (!($f_name eq "")){
|
|
||||||
flush_all($mode);
|
|
||||||
($func_name)= ($f_name);
|
|
||||||
$mode= "text";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($_=~/\@example/ && ($mode eq "text")){
|
|
||||||
$mode= "example";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($_=~/\@end example/ && ($mode eq "example")){
|
|
||||||
flush_all($mode);
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($mode eq "text") { $text .= $_; }
|
|
||||||
if ($mode eq "example") { $example .= $_; }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
print "DELETE function_category_name ";
|
|
||||||
print "FROM function_category_name ";
|
|
||||||
print "LEFT JOIN function_category ON function_category.cat_id=function_category_name.cat_id ";
|
|
||||||
print "WHERE function_category.cat_id is null;"
|
|
||||||
|
|
@ -1,614 +0,0 @@
|
|||||||
#!@PERL@
|
|
||||||
# Copyright (C) 2003 MySQL AB
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; version 2 of the License.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
# This script generates the SQL statements required by mysql_install_db to
|
|
||||||
# fill up the tables for the server-side online function help, which can be
|
|
||||||
# invoked with "help <function>" from the MySQL client.
|
|
||||||
#
|
|
||||||
# Usage:
|
|
||||||
# fill_help_tables OPTIONS < manual.texi > fill_help_tables.sql
|
|
||||||
#
|
|
||||||
# --help display this helpscreen and exit
|
|
||||||
# --verbose print information about help completeness to STDERR
|
|
||||||
# --lexems=path path to file with lexems. it is used with verbose option.
|
|
||||||
# default value is ../sql/lex.h
|
|
||||||
# Examples:
|
|
||||||
# ./fill_help_tables --help
|
|
||||||
# ./fill_help_tables --verbose < manual.texi > fill_help_tables.sql
|
|
||||||
# ./fill_help_tables < manual.texi > fill_help_tables.sql
|
|
||||||
#
|
|
||||||
# Please note, that you first need to update Docs/manual.texi with the
|
|
||||||
# manual file from the separate "mysqldoc" BitKeeper-Tree! The manual.texi
|
|
||||||
# included in the source tree is just an empty stub file - the full manual
|
|
||||||
# is now maintained in a separate tree.
|
|
||||||
#
|
|
||||||
# extra tags in manual.texi:
|
|
||||||
#
|
|
||||||
# @c help_category <category_name>[@<parent_category_name>]
|
|
||||||
#
|
|
||||||
# @c description_for_help_topic <topic_name> <keyword1> <keyword2>
|
|
||||||
# ....
|
|
||||||
# @c end_description_for_help_topic
|
|
||||||
#
|
|
||||||
# @c example_for_help_topic <topic_name>
|
|
||||||
# @example
|
|
||||||
# ....
|
|
||||||
# @end example
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Original version by Victor Vagin <vva@mysql.com>
|
|
||||||
#
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
use Getopt::Long;
|
|
||||||
|
|
||||||
my $insert_portion_size= 15;
|
|
||||||
my $error_prefix= "---- help parsing errors :";
|
|
||||||
|
|
||||||
my $path_to_lex_file= "../sql/lex.h";
|
|
||||||
my $verbose_option= 0;
|
|
||||||
my $help_option= 0;
|
|
||||||
|
|
||||||
my $cur_line= 0;
|
|
||||||
my $count_errors= 0;
|
|
||||||
|
|
||||||
GetOptions(
|
|
||||||
"help",\$help_option,
|
|
||||||
"verbose",\$verbose_option,
|
|
||||||
"lexems=s",\$path_to_lex_file
|
|
||||||
);
|
|
||||||
|
|
||||||
if ($help_option ne 0)
|
|
||||||
{
|
|
||||||
print <<_HELP;
|
|
||||||
|
|
||||||
This script generates the SQL statements required by mysql_install_db to
|
|
||||||
fill up the tables for the server-side online function help, which can be
|
|
||||||
invoked with "help <function>" from the MySQL client.
|
|
||||||
|
|
||||||
Usage:
|
|
||||||
fill_help_tables OPTIONS < manual.texi > fill_help_tables.sql
|
|
||||||
|
|
||||||
--help display this helpscreen and exit
|
|
||||||
--verbose print information about help completeness to STDERR
|
|
||||||
--lexems=path path to file with lexems. it is used with verbose option.
|
|
||||||
default value is ../sql/lex.h
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
./fill_help_tables --help
|
|
||||||
./fill_help_tables --verbose < manual.texi > fill_help_tables.sql
|
|
||||||
./fill_help_tables < manual.texi > fill_help_tables.sql
|
|
||||||
|
|
||||||
_HELP
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $current_category= "";
|
|
||||||
my $current_parent_category= "";
|
|
||||||
my $next_example_for_topic= "";
|
|
||||||
|
|
||||||
my %topics;
|
|
||||||
my %categories;
|
|
||||||
my %keywords;
|
|
||||||
|
|
||||||
$categories{Contents}->{__parent_category__}= "";
|
|
||||||
|
|
||||||
sub print_error
|
|
||||||
{
|
|
||||||
my ($text)= @_;
|
|
||||||
if ($count_errors==0)
|
|
||||||
{
|
|
||||||
print STDERR "$error_prefix\n";
|
|
||||||
}
|
|
||||||
print STDERR "line $cur_line : $text";
|
|
||||||
$count_errors++;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub add_topic_to_category
|
|
||||||
{
|
|
||||||
my ($topic_name)= @_;
|
|
||||||
|
|
||||||
$categories{$current_category}->{$topic_name}= $topics{$topic_name};
|
|
||||||
my $category= $categories{$current_category};
|
|
||||||
$category->{__name__}= $current_category;
|
|
||||||
|
|
||||||
if (exists($category->{__parent_category__}))
|
|
||||||
{
|
|
||||||
my $old_parent= $category->{__parent_category__};
|
|
||||||
if ($old_parent ne $current_parent_category)
|
|
||||||
{
|
|
||||||
print_error "wrong parent for $current_category\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($current_parent_category ne "")
|
|
||||||
{
|
|
||||||
$category->{__parent_category__}= $current_parent_category;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exists($topics{$topic_name}->{category}))
|
|
||||||
{
|
|
||||||
my $old_category= $topics{$topic_name}->{category};
|
|
||||||
if ($old_category ne $category)
|
|
||||||
{
|
|
||||||
print_error "wrong category for $topic_name (first one's \"$old_category->{__name__}\" second one's \"$current_category\")\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$topics{$topic_name}->{category}= $category;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub add_example
|
|
||||||
{
|
|
||||||
my ($topic_name,$example)= @_;
|
|
||||||
|
|
||||||
$topic_name=~ tr/a-z/A-Z/;
|
|
||||||
|
|
||||||
if (exists($topics{$topic_name}->{example}))
|
|
||||||
{
|
|
||||||
print_error "double example for $topic_name\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
$topics{$topic_name}->{example}= $example;
|
|
||||||
add_topic_to_category($topic_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub add_description
|
|
||||||
{
|
|
||||||
my ($topic_name,$description)= @_;
|
|
||||||
|
|
||||||
$topic_name=~ tr/a-z/A-Z/;
|
|
||||||
|
|
||||||
if (exists($topics{$topic_name}->{description}))
|
|
||||||
{
|
|
||||||
print_error "double description for $topic_name\n";
|
|
||||||
}
|
|
||||||
$topics{$topic_name}->{description}= $description;
|
|
||||||
add_topic_to_category($topic_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub add_keyword
|
|
||||||
{
|
|
||||||
my ($topic_name,$keyword)= @_;
|
|
||||||
|
|
||||||
$topic_name=~ tr/a-z/A-Z/;
|
|
||||||
$keyword=~ tr/a-z/A-Z/;
|
|
||||||
|
|
||||||
push(@{$topics{$topic_name}->{keywords}},$keyword);
|
|
||||||
if (exists($keywords{$keyword}->{$topic_name}))
|
|
||||||
{
|
|
||||||
print_error "double keyword $keyword for $topic_name\n";
|
|
||||||
}
|
|
||||||
$keywords{$keyword}->{$topic_name}= $topics{$topic_name};
|
|
||||||
}
|
|
||||||
|
|
||||||
sub prepare_name
|
|
||||||
{
|
|
||||||
my ($a)= @_;
|
|
||||||
|
|
||||||
$a =~ s/(\@itemize \@bullet)/ /g;
|
|
||||||
$a =~ s/(\@end itemize)/ /g;
|
|
||||||
$a =~ s/(\@end multitable)/ /g;
|
|
||||||
$a =~ s/(\@end table)/ /g;
|
|
||||||
$a =~ s/(\@cindex(.*?)\n)/ /g;
|
|
||||||
$a =~ s/(\@multitable \@columnfractions(.*?)\n)/ /g;
|
|
||||||
$a =~ s/(\@node(.*?)\n)/ /g;
|
|
||||||
$a =~ s/(\@tab)/\t/g;
|
|
||||||
$a =~ s/\@item/ /g;
|
|
||||||
$a =~ s/\@minus\{\}/-/g;
|
|
||||||
$a =~ s/\@dots\{\}/.../g;
|
|
||||||
$a =~ s/\@var\{((.|\n)+?)\}/$1/go;
|
|
||||||
$a =~ s/\@command\{((.|\n)+?)\}/$1/go;
|
|
||||||
$a =~ s/\@code\{((.|\n)+?)\}/$1/go;
|
|
||||||
$a =~ s/\@strong\{(.+?)\}/$1/go;
|
|
||||||
$a =~ s/\@samp\{(.+?)\}/'$1'/go;
|
|
||||||
$a =~ s/\@emph\{((.|\n)+?)\}/\/$1\//go;
|
|
||||||
$a =~ s/\@xref\{((.|\n)+?)\}/See also : [$1]/go;
|
|
||||||
$a =~ s/\@ref\{((.|\n)+?)\}/[$1]/go;
|
|
||||||
$a =~ s/\'/\'\'/g;
|
|
||||||
$a =~ s/\\/\\\\/g;
|
|
||||||
$a =~ s/\`/\`\`/g;
|
|
||||||
|
|
||||||
$a =~ s/\@table \@code/ /g;
|
|
||||||
$a =~ s/\(\)//g;
|
|
||||||
$a =~ s/\"/\\\"/g;
|
|
||||||
|
|
||||||
$a =~ s/((\w|\s)+)\(([\+-=><\/%*!<>\s]+)\)/$3/gxs;
|
|
||||||
$a =~ s/([\+-=><\/%*!<>\s]+)\(((\w|\s)+)\)/$1/gxs;
|
|
||||||
$a =~ s/((\w|\s)+)\((.+)\)/$1/gxs;
|
|
||||||
|
|
||||||
$a =~ s/((\s)+)$//g;
|
|
||||||
|
|
||||||
return $a;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub prepare_description
|
|
||||||
{
|
|
||||||
my ($a)= @_;
|
|
||||||
|
|
||||||
$a =~ s/(\@itemize \@bullet\n)//g;
|
|
||||||
$a =~ s/(\@c help_keyword (.*?)\n)//g;
|
|
||||||
$a =~ s/(\@end itemize\n)//g;
|
|
||||||
$a =~ s/(\@end example\n)//g;
|
|
||||||
$a =~ s/(\@example\n)//g;
|
|
||||||
$a =~ s/(\@{)/{/g;
|
|
||||||
$a =~ s/(\@})/}/g;
|
|
||||||
$a =~ s/(\@end multitable)/ /g;
|
|
||||||
$a =~ s/(\@end table)/ /g;
|
|
||||||
$a =~ s/(\@cindex(.*?)\n)//g;
|
|
||||||
$a =~ s/(\@findex(.*?)\n)//g;
|
|
||||||
$a =~ s/(\@table(.*?)\n)//g;
|
|
||||||
$a =~ s/(\@multitable \@columnfractions(.*?)\n)/ /g;
|
|
||||||
$a =~ s/(\@node(.*?)\n)/ /g;
|
|
||||||
$a =~ s/(\@tab)/\t/g;
|
|
||||||
$a =~ s/\@itemx/ /g;
|
|
||||||
$a =~ s/(\@item\n(\s*?))(\S)/ --- $3/g;
|
|
||||||
$a =~ s/(\@item)/ /g;
|
|
||||||
$a =~ s/(\@tindex\s(.*?)\n)//g;
|
|
||||||
$a =~ s/(\@c\s(.*?)\n)//g;
|
|
||||||
$a =~ s/\@minus\{\}/-/g;
|
|
||||||
$a =~ s/\@dots\{\}/.../g;
|
|
||||||
$a =~ s/\@var\{((.|\n)+?)\}/$1/go;
|
|
||||||
$a =~ s/\@command\{((.|\n)+?)\}/$1/go;
|
|
||||||
$a =~ s/\@code\{((.|\n)+?)\}/$1/go;
|
|
||||||
$a =~ s/\@strong\{(.+?)\}/$1/go;
|
|
||||||
$a =~ s/\@samp\{(.+?)\}/'$1'/go;
|
|
||||||
$a =~ s/\@emph\{((.|\n)+?)\}/\/$1\//go;
|
|
||||||
$a =~ s/\@xref\{((.|\n)+?)\}/See also : [$1]/go;
|
|
||||||
$a =~ s/\@ref\{((.|\n)+?)\}/[$1]/go;
|
|
||||||
$a =~ s/\@w\{((.|\n)+?)\}/$1/go;
|
|
||||||
$a =~ s/\@strong\{((.|\n)+?)\}/\n!!!!\n$1\n!!!!\n/go;
|
|
||||||
$a =~ s/\@file\{((.|\n)+?)\}/\*$1/go;
|
|
||||||
$a =~ s/\\/\\\\/g;
|
|
||||||
$a =~ s/\n\n$/\n/g;
|
|
||||||
$a =~ s/\n\n$/\n/g;
|
|
||||||
$a =~ s/\n\n$/\n/g;
|
|
||||||
$a =~ s/\n\n$/\n/g;
|
|
||||||
$a =~ s/\n\n$/\n/g;
|
|
||||||
$a =~ s/\n/\\n/g;
|
|
||||||
$a =~ s/\"/\\\"/g;
|
|
||||||
|
|
||||||
$a =~ s/\@table \@code/ /g;
|
|
||||||
|
|
||||||
return $a;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub prepare_example
|
|
||||||
{
|
|
||||||
my ($a)= @_;
|
|
||||||
|
|
||||||
$a =~ s/(^\@c for_help_topic(.*?)\n)//g;
|
|
||||||
|
|
||||||
$a =~ s/\@var\{((.|\n)+?)\}/$1/go;
|
|
||||||
$a =~ s/\@dots\{\}/.../g;
|
|
||||||
$a =~ s/\\/\\\\/g;
|
|
||||||
$a =~ s/(\@{)/{/g;
|
|
||||||
$a =~ s/(\@})/}/g;
|
|
||||||
$a =~ s/(\@\@)/\@/g;
|
|
||||||
$a =~ s/(\n*?)$//g;
|
|
||||||
$a =~ s/\n/\\n/g;
|
|
||||||
$a =~ s/\"/\\\"/g;
|
|
||||||
|
|
||||||
return $a;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub parse_example
|
|
||||||
{
|
|
||||||
return if (!($_=~/\@example/));
|
|
||||||
return if ($next_example_for_topic eq "");
|
|
||||||
|
|
||||||
my $topic_name= $next_example_for_topic;
|
|
||||||
$next_example_for_topic= "";
|
|
||||||
my $text= "";
|
|
||||||
|
|
||||||
while (<>)
|
|
||||||
{
|
|
||||||
$cur_line++;
|
|
||||||
last if ($_=~/\@end example/);
|
|
||||||
$text .= $_;
|
|
||||||
}
|
|
||||||
|
|
||||||
$text= prepare_example($text);
|
|
||||||
$topic_name= prepare_name($topic_name);
|
|
||||||
add_example($topic_name,$text) if ($topic_name ne "");
|
|
||||||
}
|
|
||||||
|
|
||||||
sub parse_example_for_topic
|
|
||||||
{
|
|
||||||
my ($for_topic)= m|\@c example_for_help_topic (.+?)$|;
|
|
||||||
return if ($for_topic eq "");
|
|
||||||
|
|
||||||
$next_example_for_topic= $for_topic;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub parse_description
|
|
||||||
{
|
|
||||||
my ($topic_description)= m|\@c description_for_help_topic (.+?)$|;
|
|
||||||
return if ($topic_description eq "");
|
|
||||||
|
|
||||||
my ($topic_name,$topic_keywords)= split(/ /,$topic_description);
|
|
||||||
|
|
||||||
if ($topic_name eq "" || $topic_keywords eq "")
|
|
||||||
{
|
|
||||||
$topic_name= $topic_description;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
my $keyword;
|
|
||||||
foreach $keyword (split(/ /,$topic_keywords))
|
|
||||||
{
|
|
||||||
add_keyword($topic_name,$keyword) if ($keyword ne "");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
my $text= "";
|
|
||||||
|
|
||||||
while (<>)
|
|
||||||
{
|
|
||||||
$cur_line++;
|
|
||||||
last if ($_=~/\@c end_description_for_help_topic/);
|
|
||||||
$text .= $_;
|
|
||||||
}
|
|
||||||
|
|
||||||
$text= prepare_description($text);
|
|
||||||
$topic_name= prepare_name($topic_name);
|
|
||||||
add_description($topic_name,$text);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub parse_category
|
|
||||||
{
|
|
||||||
my ($c_name,$pc_name)= m|\@c help_category (.+?)\@(.+?)$|;
|
|
||||||
|
|
||||||
if ($pc_name ne "")
|
|
||||||
{
|
|
||||||
$current_category= prepare_name($c_name);
|
|
||||||
$current_parent_category= prepare_name($pc_name);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
my ($c_name)=m|\@c help_category (.+?)$|;
|
|
||||||
return if ($c_name eq "");
|
|
||||||
|
|
||||||
$current_category= prepare_name($c_name);
|
|
||||||
$current_parent_category= "Contents"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# parse manual:
|
|
||||||
|
|
||||||
while (<>)
|
|
||||||
{
|
|
||||||
parse_example_for_topic ();
|
|
||||||
parse_example ();
|
|
||||||
parse_description ();
|
|
||||||
parse_category ();
|
|
||||||
$cur_line++;
|
|
||||||
}
|
|
||||||
|
|
||||||
# test results of parsing:
|
|
||||||
|
|
||||||
sub print_bad_names
|
|
||||||
{
|
|
||||||
my($names,$prompt)= @_;
|
|
||||||
if (scalar(@{$names}))
|
|
||||||
{
|
|
||||||
print STDERR "\n-------------- $prompt : \n\n";
|
|
||||||
my $name;
|
|
||||||
foreach $name (@{$names})
|
|
||||||
{
|
|
||||||
print STDERR "$name\n";
|
|
||||||
}
|
|
||||||
print STDERR "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub print_verbose_errors
|
|
||||||
{
|
|
||||||
my($name_of_log_file)= @_;
|
|
||||||
|
|
||||||
my @without_help;
|
|
||||||
my @description_with_at;
|
|
||||||
my @example_with_at;
|
|
||||||
my @without_description;
|
|
||||||
my @without_example;
|
|
||||||
|
|
||||||
print STDERR "\n-------------- parameters of help completeness : \n\n";
|
|
||||||
|
|
||||||
my $count_lex= 0;
|
|
||||||
if (!open (TLEX,"<$path_to_lex_file"))
|
|
||||||
{
|
|
||||||
print STDERR "Error opening lex file \"$path_to_lex_file\" $!\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (<TLEX>)
|
|
||||||
{
|
|
||||||
my ($a,$lex,$b)=m|(.+?)\"(.+?)\"(.+?)$|;
|
|
||||||
next if ($lex eq "");
|
|
||||||
$count_lex++;
|
|
||||||
next if (exists($topics{$lex}) || exists($keywords{$lex}));
|
|
||||||
push(@without_help,$lex);
|
|
||||||
}
|
|
||||||
close(TLEX);
|
|
||||||
print STDERR "number of lexems in \"$path_to_lex_file\" - $count_lex\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
my $name;
|
|
||||||
my @topic_names= keys(%topics);
|
|
||||||
foreach $name (@topic_names)
|
|
||||||
{
|
|
||||||
my $topic= $topics{$name};
|
|
||||||
push(@description_with_at,$name) if ($topic->{description}=~/\@/);
|
|
||||||
push(@example_with_at,$name) if ($topic->{example}=~/\@/);
|
|
||||||
push(@without_description,$name) if (!exists($topic->{description}));
|
|
||||||
push(@without_example,$name) if (!exists($topic->{example}));
|
|
||||||
}
|
|
||||||
|
|
||||||
my $count_categories= scalar(keys(%categories));
|
|
||||||
print STDERR "number of help categories - ",$count_categories,"\n";
|
|
||||||
my $count_topics= scalar(@topic_names);
|
|
||||||
print STDERR "number of help topics - ",$count_topics,"\n";
|
|
||||||
my $count_keywords= scalar(keys(%keywords));
|
|
||||||
print STDERR "number of help keywords - ",$count_keywords,"\n";
|
|
||||||
|
|
||||||
my $count_without_help= scalar(@without_help);
|
|
||||||
my $percent_without_help= $count_lex ?
|
|
||||||
int (($count_without_help/$count_lex)*100) :
|
|
||||||
"100";
|
|
||||||
print_bad_names(\@without_help,"lexems without help (".
|
|
||||||
$count_without_help." ~ ".
|
|
||||||
$percent_without_help."%)");
|
|
||||||
print_bad_names(\@description_with_at,
|
|
||||||
" topics below have symbol \'@\' in their descriptions.\n".
|
|
||||||
"it's probably the litter from 'texi' tags (script needs fixing)");
|
|
||||||
print_bad_names(\@example_with_at,
|
|
||||||
" topics below have symbol \'@\' in their examples.\n".
|
|
||||||
"it's probably the litter from 'texi' tags (script needs fixing)");
|
|
||||||
print_bad_names(\@without_description,"topics without description");
|
|
||||||
|
|
||||||
my $count_without_example= scalar(@without_example);
|
|
||||||
my $percent_without_example= $count_topics ?
|
|
||||||
int (($count_without_example/$count_topics)*100) :
|
|
||||||
"100";
|
|
||||||
print_bad_names(\@without_example,"topics without example (".
|
|
||||||
$count_without_example." ~ ".
|
|
||||||
$percent_without_example."%)");
|
|
||||||
}
|
|
||||||
|
|
||||||
print_verbose_errors if ($verbose_option ne 0);
|
|
||||||
|
|
||||||
# output result
|
|
||||||
|
|
||||||
sub print_insert_header
|
|
||||||
{
|
|
||||||
my($count,$header)= @_;
|
|
||||||
|
|
||||||
if ($count % $insert_portion_size ne 0) {
|
|
||||||
print ",";
|
|
||||||
} else {
|
|
||||||
print ";\n" if ($count ne 0);
|
|
||||||
print "$header";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
-- Copyright (C) 2000-2005 MySQL AB
|
|
||||||
--
|
|
||||||
-- This program is free software; you can redistribute it and/or modify
|
|
||||||
-- it under the terms of the GNU General Public License as published by
|
|
||||||
-- the Free Software Foundation; version 2 of the License.
|
|
||||||
--
|
|
||||||
-- This program is distributed in the hope that it will be useful,
|
|
||||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
-- GNU General Public License for more details.
|
|
||||||
--
|
|
||||||
-- You should have received a copy of the GNU General Public License
|
|
||||||
-- along with this program; if not, write to the Free Software
|
|
||||||
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
EOF
|
|
||||||
print "set sql_mode='';\n";
|
|
||||||
print "delete from help_topic;\n";
|
|
||||||
print "delete from help_category;\n";
|
|
||||||
print "delete from help_keyword;\n";
|
|
||||||
print "delete from help_relation;\n\n";
|
|
||||||
|
|
||||||
my @category_names= keys(%categories);
|
|
||||||
if (scalar(@category_names))
|
|
||||||
{
|
|
||||||
my $cat_name;
|
|
||||||
my $count= 0;
|
|
||||||
foreach $cat_name (@category_names)
|
|
||||||
{
|
|
||||||
$categories{$cat_name}->{__id__}= $count;
|
|
||||||
$count++;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $header= "insert into help_category ".
|
|
||||||
"(help_category_id,name,parent_category_id) values ";
|
|
||||||
$count= 0;
|
|
||||||
foreach $cat_name (@category_names)
|
|
||||||
{
|
|
||||||
print_insert_header($count,$header);
|
|
||||||
my $parent_cat_name= $categories{$cat_name}->{__parent_category__};
|
|
||||||
my $parent_cat_id= $parent_cat_name eq ""
|
|
||||||
? "-1" : $categories{$parent_cat_name}->{__id__};
|
|
||||||
print "($count,\"$cat_name\",$parent_cat_id)";
|
|
||||||
$count++;
|
|
||||||
}
|
|
||||||
printf ";\n\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
my @topic_names= keys(%topics);
|
|
||||||
if (scalar(@topic_names))
|
|
||||||
{
|
|
||||||
my $header= "insert into help_topic ".
|
|
||||||
"(help_topic_id,help_category_id,name,description,example) values ";
|
|
||||||
my $topic_name;
|
|
||||||
my $count= 0;
|
|
||||||
foreach $topic_name (@topic_names)
|
|
||||||
{
|
|
||||||
print_insert_header($count,$header);
|
|
||||||
my $topic= $topics{$topic_name};
|
|
||||||
print "($count,";
|
|
||||||
print "$topic->{category}->{__id__},";
|
|
||||||
print "\"$topic_name\",";
|
|
||||||
print "\"$topic->{description}\",";
|
|
||||||
print "\"$topic->{example}\")";
|
|
||||||
$topics{$topic_name}->{__id__}= $count;
|
|
||||||
$count++;
|
|
||||||
}
|
|
||||||
printf ";\n\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
my @keywords_names= keys(%keywords);
|
|
||||||
if (scalar(@keywords_names))
|
|
||||||
{
|
|
||||||
my $header= "insert into help_keyword (help_keyword_id,name) values ";
|
|
||||||
my $keyword_name;
|
|
||||||
my $count= 0;
|
|
||||||
foreach $keyword_name (@keywords_names)
|
|
||||||
{
|
|
||||||
print_insert_header($count,$header);
|
|
||||||
print "($count,\"$keyword_name\")";
|
|
||||||
$count++;
|
|
||||||
}
|
|
||||||
printf ";\n\n";
|
|
||||||
|
|
||||||
$header= "insert into help_relation ".
|
|
||||||
"(help_topic_id,help_keyword_id) values ";
|
|
||||||
$count= 0;
|
|
||||||
my $count_keyword= 0;
|
|
||||||
foreach $keyword_name (@keywords_names)
|
|
||||||
{
|
|
||||||
my $topic_name;
|
|
||||||
foreach $topic_name (keys(%{$keywords{$keyword_name}}))
|
|
||||||
{
|
|
||||||
print_insert_header($count,$header);
|
|
||||||
print "($topics{$topic_name}->{__id__},$count_keyword)";
|
|
||||||
$count++;
|
|
||||||
}
|
|
||||||
$count_keyword++;
|
|
||||||
}
|
|
||||||
printf ";\n\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($count_errors)
|
|
||||||
{
|
|
||||||
print STDERR "$count_errors errors !!!\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
Reference in New Issue
Block a user