Kapitel 5. DocBook med WYSIWYG

Hvis du ikke er så stærk i at anvende DocBook, eller blot vil have en mulighed for at fremstille en hurtig artikel, er dette kapitel sikkert interessant for dig.

5.1. OpenOffice.org1.1

Dette afsnit vil omhandle en af de nye spændende faciliteter i OpenOffice.org 1.1, som er muligheden for, at kunne fremstille dokumenter i OpenOffice.org og bagefter få dem gemt i DocBook format. At denne facilitet er interessant, har sin begrundelse i, at man bagefter kan konvertere sit dokumentet til et utal af forskellige formater. I øjeblikket er følgende formater understøttet:

Efter gennemlæsning af dette afsnit vil du være i stand til, at fremstille dit første dokument i DocBook format.

5.1.1. Installation af openOffice 1.1

Før du kan anvende DocBook fra OpenOffice.org, skal det selvfølgeligt først installeres, og da formålet er at skrive DocBook-filer, kan du ikke anvende standardinstallationen; du må i stedet vælge interaktiv installation. Se nedenstående skærmdump viser, skal du køre install med kommandolinjetilvalget -interactive. Det gøres på følgende måde: ./install -interactive .

Usage: install [options]
Options: [defaults in brackets after descriptions]
Configuration:
--help print help message (this message)
--version print the version of OpenOffice.org to be installed
--prefix=PREFIX install OpenOffice.org into PREFIX [/usr/local]
--single install single user version of OpenOffice.org
--interactive install OpenOffice.org using interactive mode

Når du når frem til nedenstående skærmbillede, skal du vælge custom install , da du her skal tilvælge filtre, der gør import/eksport af DocBook-filer muligt.

Herefter vil nedenstående skærmbillede fremkomme, hvor du skal klikke på symbolet ud for XSLT Sample Filters. Efter du har klikket, skulle du gerne se det markeret med en blå pil. Markeringen sikrer, at du installerer de nødvendige DocBook filtre.

Når du har foretaget ovenstående valg, vil du få at vide, at du har givet alle nødvendige informationer til, at OpenOffice.org kan installeres. Du skal så sikre dig, at det næste skærmbillede ser ud på følgende måde:

Det er af vital betydning, at du har installeret Java på din computer, da import/eksport af DocBook filer skal parses gennem et Java-program. Er der ikke installeret Java, bør du afslutte installationen og installere Java først - bemærk, at kun Sun's Java j2se, se http://java.sun.com/j2se/, kan anvendes. Har du derimod Java installeret, men installationsprogrammet blot ikke kan finde det, skal du vælge Browse. Du vil her have mulighed for at vise installationsprogrammet, hvor du har installeret Java. Hvis du viser den det rigtige sted, skal det fremgå af vinduet, hvor du kan se mine Java-installationer.

Når du har installeret OpenOffice.org, kan du begynde at lave DocBook filer.

5.1.2. Fremstilling af DocBook filer

Når du selv skal fremstille DocBook filer, er det såre enkelt: Åben et nyt dokument - File->New->Text Document, og gem det i DocBook format - File->Save As. Se nedenstående billede.

De faciliteter du har til rådighed, kan du se i under paragraph styles - fremkommer når du trykker <F11 > på tastaturet. Bemærk endvidere her, at du har 5 mulige styles, da iconerne øverst i vinduet underindeler custom styles i 5 kategorier: Paragraph styles, character styles, frame styles, page styles og numbering styles. Dem jeg har prøvet indtil videre, har virket efter hensigten, men en væsentlig undtagelse: Alle elementer under paragraph styles der starter med Section, virker ikke! For at kunne inddele dokumentet i afsnit, skal du i stedet for vælge de normale heading-elementer, og husk lige på i den forbindelse, at HTML-standarden kun understøtter heading1 (<h1></h1>) - heading6 (<h6></h6>). Indsættelse af grafik virker også; anvendes på normal vis, blot skal grafikken efterfølgende kopieres ned i samme katalog, hvor du placerer html-filerne.

Små fejl, jeg har fundet, udover den nævnte med sections er, at når man laver en tankestreg, udskifter OpenOffice.org den med en anden type tankestreg, der desværre ikke findes i Latin-1 tegnsættet, hvorfor oversættelse vil give fejl, du må derfor enten undlade at benytte tankestreg eller manuelt udskifte alle OpenOffice.org tankestreger med de generiske fra Latin-1. En anden væsentlig fejl er, at den attribut der bestemmer hvilket sprog dokumentet generes i, sættes forkert. Herudover er der problemet med, at OpenOffice.org arbejder i UTF-8 tegnsættet, hvorimod at DocBook, på trods af at der er specificeret UTF-8 som tegnsæt, oversætter filerne til Latin-1, hvilket betyder, at alle danske tegn forsvinder fra dokumentet. Det er sikkert blot et spørgsmål om at sætte et korrekt kommandolinjetilvalg til docbook2html, men det har jeg indtil videre ladet ligge. Alle disse fejl kan du selvfølgeligt rette manuelt, mens hvis du ikke har mod på det, kan du i stedet for, benytte dette lille perl-script til at få dine dokumenter konverteret fra UTF-8 til Latin-1. Hent perl-scriptet . Scriptet ser ud på følgende måde:

#!/usr/bin/env perl
use strict;
use warnings qw(syntax);
use File::Find;
my ($lang, $encoding, $name) = (undef,undef,"");
my $copyright = "This script is copyrigt 2003, by Michael Rasmussen, mir\@datanom.net. The script is licensed under GPL.\n";
if (!@ARGV || $ARGV[0] eq "-u" || $ARGV[0] eq "--usage") {
        print $copyright;
        print "Usage:\n";
        if (substr($0,0,1) eq ".") {
                $name = substr($0,2);
        }
        else {
                $name = "$0";
        }
        print "\t",$name;
        print " [ [-h | --help] | [-u | --usage] ]\n";
        print "or\n";
        print "\t",$name," files...\n\n";
        print "\t-h [ --help ]\n\t\tShow extended help.\n";
        print "\t-u [ --usage ]\n\t\tShow briefe help (this text).\n";
        exit(0);
}
if ($ARGV[0] eq "-h" || $ARGV[0] eq "--help") {
        print $copyright;
        print "This script is intended to help people who wants to use OpenOffice.org\n";
        print "to write DocBook-XML source files. The purpose for this script is to\n";
        print "make it easy for people to correct the Openoffice files for known errors,\n";
        print "of which the most important ones is the wrong attribut value for the language\n";
        print "attribut <lang>, and that the encoding option for XML does not reflect the chosen\n";
        print "language format for the output.\n";
        print "\nFor this transition to happen smoothly, you need to suply input to the script for\n";
        print "the desired language and encoding style. The default is:\n";
        print "lang = da\n";
        print "encoding = iso-8859-1\n";
        print "\nIf you find any bugs or have any comments, you are most welcome to send me\n";
        print "an email. My email address is: mir\@datanom.net.\n";
        exit(0);
}
my @files = @ARGV;
my ($filename,@temp,$name,$ext);
my $first = 1;
while (<>) {
        if ($first) {
        $filename = shift @files;
        ($name,my $dummy,$ext) = File::Basename::fileparse($filename,qr{\.xml}); 
        if (!defined $lang) {
                print "Input desired language for DocBook output[da]: ";
                chomp ($lang = <STDIN>);
                if ($lang =~ /^\s*$/) {
                        $lang = "da";
                }
        }
        if (!defined $encoding) {
                print "Input desired encoding style for DocBook output[iso-8859-1]: ";
                chomp ($encoding = <STDIN>);
                if ($encoding =~ /^\s*$/) {
                        $encoding = "iso-8859-1";
                }
                $first = 0;
        }
        if (/^\<\?xml/) {
                $_ =~ s/encoding=['|"](.*)['|"]/encoding="$encoding"/g;
        }
        if (/(^<book|^<article)/) {
                $_ =~ s/lang=['|"](.*)['|"]/lang="$lang"/g;
        }
        push (@temp,$_);
        if (eof(ARGV)) {
                close ARGV;
                $filename = "temp".$$;
                open (OUTPUT,">$filename") or die "Error: $!";
                print OUTPUT @temp;
                close OUTPUT;
                system "iconv -f utf-8 -t $encoding -o $name.iso$ext $filename";
                $first = 1;
                @temp = ();
                system "rm -f $filename";
        }
}
exit(0);

Til sidst kan jeg i parantes bemærke, at hele dette dokument er skrevet udelukkende i OpenOffice.org med en enkelt udtagelse. OpenOffice.org har ikke implementeret elementet screen endnu, så derfor har jeg selv manuelt måtte indsætte det. Man kunne i stedet for have benyttet elementet ComputerOutput, men da vi som standard benytter screen i Friheden til at vælge serien, har jeg undladt dette.