summaryrefslogtreecommitdiff
path: root/Docs/Support/docbook-split
diff options
context:
space:
mode:
Diffstat (limited to 'Docs/Support/docbook-split')
-rwxr-xr-xDocs/Support/docbook-split70
1 files changed, 70 insertions, 0 deletions
diff --git a/Docs/Support/docbook-split b/Docs/Support/docbook-split
new file mode 100755
index 00000000000..eafb437efe4
--- /dev/null
+++ b/Docs/Support/docbook-split
@@ -0,0 +1,70 @@
+#! /usr/bin/perl -w
+# O'Reilly's Perl script to chop mysql.xml into separate ch/apps/index files.
+# The indexes are actually not used, they're created straight from the xrefs.
+# Breaks the MySQL reference manual into chapters, appendices, and indexes.
+
+use strict;
+
+my $app_letter = "a"; # Start appendix letters at "a"
+my $chap_num = 1; # Start chapter numbers at one (there is no preface)
+my $directory = "mysql_refman_" . time;
+my $ext = ".xml";
+my $line = "";
+my $output_name = "";
+my $start_text = "";
+
+mkdir $directory unless -d $directory;
+
+while (defined $line) {
+ if ($line =~ /(<chapter.+)/i ) {
+ $start_text = $1;
+ $output_name = sprintf("ch%02d%s", $chap_num, $ext);
+ ++$chap_num;
+ &process_file("chapter");
+ }
+ elsif ($line =~ /(<appendix.+)/i ) {
+ $start_text = $1 ;
+ $output_name = "app$app_letter$ext";
+ ++$app_letter;
+ &process_file("appendix");
+ }
+ elsif ($line =~ /(<index\s+id=")(.*?)(">.*)/i ) {
+ $start_text = $1 . $2 . $3;
+ $output_name = lc($2) . $ext;
+ &process_file("index");
+ }
+ else {
+ # Skip junk in between chapters, appendices and indexes.
+ $line = <>;
+ }
+}
+
+sub process_file {
+ my $marker = shift;
+ my $path = "$directory/$output_name";
+
+ open (OUTPUT_FILE, ">$path") or die "Cannot open $path";
+
+ print STDERR "Creating $path\n";
+
+ # Print out XML PI
+ print OUTPUT_FILE "<?xml version='1.0' encoding='ISO-8859-1'?>\n";
+
+ # Print whatever happened to appear at the end of the previous chapter.
+ print OUTPUT_FILE "$start_text\n" if $start_text;
+
+ while (defined $line) {
+ $line = <>;
+
+ # Note: Anything after the terminating marker is lost, just like
+ # lines in between chapters.
+ if ($line =~ /(.*<\/\s*$marker\s*>)/i ) {
+ print OUTPUT_FILE "$1\n" if $1;
+ close OUTPUT_FILE;
+ return;
+ }
+ print OUTPUT_FILE $line;
+ }
+}
+
+exit 0;