summaryrefslogtreecommitdiffstats
path: root/lib/templatescript.sh
diff options
context:
space:
mode:
Diffstat (limited to 'lib/templatescript.sh')
-rwxr-xr-xlib/templatescript.sh155
1 files changed, 155 insertions, 0 deletions
diff --git a/lib/templatescript.sh b/lib/templatescript.sh
new file mode 100755
index 000000000..ec8a2be48
--- /dev/null
+++ b/lib/templatescript.sh
@@ -0,0 +1,155 @@
+#!/bin/sh
+######### This script is finally not used as it is here.
+######### But it can be used as a template for applying any kind of
+######### processing to a KOffice document (mainly the shell part of it).
+
+if [ $# -ne 2 ]; then
+ echo "$0 :"
+ echo "converts a KPresenter document from the old format to the new one (v2)"
+ echo "due to the new text object."
+ echo
+ echo "Usage: $0 <inputfile> <outputfile>"
+ echo
+ echo "Copyright (c) David Faure 2000, licensed under the GPL version 2"
+ exit
+fi
+
+if test ! -f $1; then
+ echo "$0 : Could not find file $1"
+ exit
+fi
+
+echo "Creating temporary directory..."
+tmpdir=/tmp/kprconverter
+mkdir $tmpdir 2>/dev/null
+cp $1 /tmp/kprconverter/input.kpr
+lastdir=`pwd`
+cd /tmp/kprconverter
+
+echo "Extracting XML document..."
+tar xvzf input.kpr | sed -e 's/^/ /' && rm -f input.kpr || exit 1
+
+echo "Converting document..."
+perl -w -e \
+'
+open(INPUT, "<$ARGV[0]") || die "Cannot open $ARGV[0]";
+open(OUTPUT, ">$ARGV[1]") || die "Cannot create $ARGV[1]";
+$objType="";
+$insideParag=0;
+$insideObj=0;
+$currentText="";
+$currentTextType=0;
+while (<INPUT>)
+{
+ if (/<TEXTOBJ/)
+ {
+ # Save object type of the TEXTOBJ tag
+ $objType=$1 if (m/objType=(\"[0-9]+\")/);
+ s/gap=/margin=/;
+ }
+ elsif (/<PARAGRAPH/)
+ {
+ $insideParag=1;
+ s/<PARAGRAPH /<P /;
+ s/>$/ type=$objType>/;
+ }
+ elsif (/<\/PARAGRAPH>/)
+ {
+ $insideParag=0;
+ s/<\/PARAGRAPH/<\/P/;
+ # Flush last text tag
+ $_ = $currentText . "</TEXT>\n" . $_ if ($currentText);
+ $currentText="";
+ }
+ elsif (/<LINE/ || /<\/LINE/)
+ {
+ $_ = "" if ($insideParag); # ignore
+ }
+ elsif (/<OBJ>/)
+ {
+ $insideObj=1;
+ $_ = ""; # ignore
+ }
+ elsif (/<\/OBJ>/)
+ {
+ $insideObj=0;
+ $_ = ""; # ignore
+ }
+ elsif ($insideObj)
+ {
+ $toprint="";
+ if (m/<TYPE value="([0-9]+)"/)
+ {
+ $currentTextType=$1;
+ if ($currentTextType) # 1 -> this is a white space
+ {
+ # If we have a previous text element, we keep it (merging)
+ # Otherwise this white space is the first one in the object -> cheat
+ $currentTextType=0 if (!$currentText);
+ }
+ if (!$currentTextType) # 0 -> normal text
+ {
+ # If we have a previous text element, write it out
+ $toprint = $currentText . "</TEXT>\n" if ($currentText);
+ # Start a new text element
+ $currentText = " <TEXT ";
+ }
+ }
+ elsif (/<FONT/ && !$currentTextType) # normal text
+ {
+ s/\s*<FONT //;
+ s/\/>//;
+ chomp;
+ # Append all attributes
+ $currentText = $currentText . $_;
+ }
+ elsif (/<COLOR/ && !$currentTextType) # normal text
+ {
+ $red=$1 if (m/red=\"([0-9]+)\"/);
+ $green=$1 if (m/green=\"([0-9]+)\"/);
+ $blue=$1 if (m/blue=\"([0-9]+)\"/);
+ # Convert color to HTML representation
+ $currentText = $currentText . sprintf(" color=\"#%02x%02x%02x\"", $red, $green, $blue );
+ }
+ elsif (m/<TEXT>(.*)<\/TEXT>/)
+ {
+ if (!$currentTextType) # normal text
+ {
+ # Close opening tag and append the text - but don t do more yet
+ @entities=split( "(&[a-z]+;)", $1);
+ $text="";
+ foreach ( @entities )
+ {
+ if (!/&lt;/ && !/&gt;/ )
+ {
+ # Replace & by &amp; but only if not in an entity
+ s/\&/\&amp;/g;
+ }
+ $text = $text . $_;
+ }
+ $currentText = $currentText . ">" . $text;
+ }
+ else
+ {
+ # White space. Simply appending, closing the text tag.
+ $toprint = $currentText . $1 . "</TEXT>\n";
+ $currentText = ""; # reset
+ }
+ }
+ $_=$toprint;
+ }
+
+ print OUTPUT $_;
+}
+close(INPUT);
+close(OUTPUT);
+' maindoc.xml newmaindoc.xml
+
+mv -f newmaindoc.xml maindoc.xml
+
+echo "Repackaging document..."
+tar cvzf output.kpr * | sed -e 's/^/ /'
+cd $lastdir
+mv -f /tmp/kprconverter/output.kpr $2
+
+echo "Done!"