diff options
Diffstat (limited to 'xmerge/source/palmtests/qa')
39 files changed, 11494 insertions, 0 deletions
diff --git a/xmerge/source/palmtests/qa/bin/mysplit.pl b/xmerge/source/palmtests/qa/bin/mysplit.pl new file mode 100755 index 000000000000..172a53a319cc --- /dev/null +++ b/xmerge/source/palmtests/qa/bin/mysplit.pl @@ -0,0 +1,58 @@ +#!/usr/local/bin/perl +######################################################################### + + #************************************************************************* + # +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org 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 Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# + #************************************************************************* + +open(TESTFILE, $ARGV[0]); + +while (<TESTFILE>) +{ + if ($_[1] eq "-q") + { + chomp $_; + @args = split('\|', $_); + @filestuff = split('\.', @args[0]); + $filename = @filestuff[0] . ".infile"; + open (TESTCASE, ">$filename") || die "Error opening $filename"; + print TESTCASE "# @args[1]\n# @args[2]\n"; + print TESTCASE "TEST|@args[1]|QUICKWORD|@filestuff[0]\n" ; + close TESTCASE; + } + if ($_[1] eq "-m") + { + chomp $_; + @args = split('\|', $_); + @filestuff = split('\.', @args[0]); + $filename = @filestuff[0] . ".infile"; + open (TESTCASE, ">$filename") || die "Error opening $filename"; + print TESTCASE "# @args[1]\n# @args[2]\n"; + print TESTCASE "TEST|@args[1]|MINICALC|@filestuff[0]\n" ; + close TESTCASE; + } + +} diff --git a/xmerge/source/palmtests/qa/bin/tappen.pl b/xmerge/source/palmtests/qa/bin/tappen.pl new file mode 100755 index 000000000000..5b365448f9e8 --- /dev/null +++ b/xmerge/source/palmtests/qa/bin/tappen.pl @@ -0,0 +1,61 @@ +#!/usr/bin/perl +######################################################################### + + #************************************************************************* + # +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org 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 Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# + #************************************************************************* + +#################################################################### +# File Name: template.pl +# Version : 1.0 +# Project : XMerge +# Author : Brian Cameron +# Date : 5th Sept. 2001 +# +# Takes x and y from the command line and taps the screen there. +# Assumes pose is already running. +# +########################################################################## + +if ($#ARGV != 1) +{ + print "\nUsage: $0 x y\n\n"; + exit -1; +} + +use lib "$ENV{qa-dir}/lib"; +use converterlib; + +# Put commands to run between the open_connection() and +# close_connection() calls... +# +open_connection(); + +TapPen($ARGV[0], $ARGV[1]); + +close_connection(); + + diff --git a/xmerge/source/palmtests/qa/bin/template.pl b/xmerge/source/palmtests/qa/bin/template.pl new file mode 100755 index 000000000000..f5e3c0cf7668 --- /dev/null +++ b/xmerge/source/palmtests/qa/bin/template.pl @@ -0,0 +1,55 @@ +#!/usr/bin/perl +######################################################################### + + #************************************************************************* + # +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org 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 Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# + #************************************************************************* + +#################################################################### +# File Name: template.pl +# Version : 1.0 +# Project : XMERGE +# Author : Brian Cameron +# Date : 5th Sept. 2001 +# +# This is just a useful script to use as a template to run +# commands. Assumes that pose is already running. +# +########################################################################## + +use lib "$ENV{qa-dir}/lib"; +use converterlib; + +# Put commands to run between the open_connection() and +# close_connection() calls... +# +open_connection(); + +# command(s) go here. + +close_connection(); + + diff --git a/xmerge/source/palmtests/qa/bin/test_driver.pl b/xmerge/source/palmtests/qa/bin/test_driver.pl new file mode 100755 index 000000000000..55d1d44f45d9 --- /dev/null +++ b/xmerge/source/palmtests/qa/bin/test_driver.pl @@ -0,0 +1,785 @@ +#!/usr/bin/perl +######################################################################### + + #************************************************************************* + # +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org 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 Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# + #************************************************************************* + +#################################################################### +# File Name: test_driver.pl +# Version : 1.0 +# Project : Xmerge +# Author : Brian Cameron +# Date : 5th Sept. 2001 +# +# This script does the following: +# +# Processes the input file, and runs the tests specified in that +# file. This will do the following for each test: +# +# 1. Convert a file from XML to PDB format +# 2. Starts up the Palm OS emulator with the appropriate program +# running and the converted file loaded the program. +# 3. Makes automated changes as specified in the inputfile to +# this script.. +# 4. Returns to the main applications window. +# +# Parameter +# Filename to convert and change +# +########################################################################## + +# Turn on auto-flushing +# +$|=1; + +use EmRPC; + +# Directory where converterlib is located... +# +use lib "$ENV{qa-dir}/lib"; +use converterlib; + +#-------------------- Start of main script ------------------------------------ + +# Environmental Settings + +$pose_exe = "$ENV{pose-dir}/pose/posedist/pose"; +$pose_prc = "$ENV{thirdpartyapps-dir}"; +$test_list = ""; +$infile = ""; +$merge_opt = 0; + +# You may need to change this from the default if your pose emulator +# starts faster or slower than mine. +# +if ($ENV{'POSE_TIMEOUT'}) +{ + $pose_timeout = "$ENV{'POSE_TIMEOUT'}"; +} +else +{ + $pose_timeout = 15; +} + +$cmdline_len = @ARGV; +if ($cmdline_len <= 0) +{ + print_usage(); + exit (0); +} + +&process_cmdline(@ARGV); +&print_env(); +&verify_env_options(); + +# Make the output directories with timestamps included in the +# directory names. +# +mkdir $pdb_orig, 0777 || die "can not create directory <$pdb_new>."; +`chmod 777 $pdb_orig`; +mkdir $pdb_new, 0777 || die "can not create directory <$pdb_new>."; +`chmod 777 $pdb_new`; +mkdir $xml_new, 0777 || die "can not create directory <$pdb_new>."; +`chmod 777 $xml_new`; + +&verify_prcs_exist("DBExporter.prc"); + +if ($test_list ne "") +{ + open (TESTLIST, $test_list) || die "Couldn't open testcase list file $test_list"; + + while (<TESTLIST>) + { + &process_testcase($_); + } +} +elsif ($infile ne "") +{ + &process_testcase($infile); +} +else +{ + die ("You didn't supply any test cases to process"); +} + +print "Finished.\n"; +exit(0); + +#-------------------- End of main script ---------------------------------------- + +#-------------------------------------------------------------------------------- +# Various sub routines +#-------------------------------------------------------------------------------- + +# process_testcase +# infile - test case file name +# +# This is the main driver function +# Opens the infile, reads it in parses it, runs the appropriate conversion +# starts pose and load the file into the emulator. It launches the +# appropriate editor and then runs the commands specified in the test case. +# It then exports the file and saves it locally. Finally it is converted +# back to the original office format. +# +sub process_testcase +{ + my $infile = $_[0]; + my $convert_file = ""; + my $rc; + + # Process the inputfile + # + open (INFILE, $infile) || die "Failed to open test case <$infile>"; + + $running_testtype = ""; + + # Process the input file. + # + while ($c_inline = <INFILE>) + { + chomp $c_inline; + @entry = split('\|', $c_inline); + + # Process TEST + # + if ($c_inline =~ /^ *#/ || $c_inline =~ /^[ \t]*$/) + { + # skip comments and blank lines. + # + next; + } + elsif ("$entry[0]" eq "TEST") + { + # Close the test if one is running. + # + &close_program($convert_file); + $running_testtype = ""; + + $valid_test = 0; + + if ($#entry != 3) + { + print "\nERROR, $entry[0] invalid number of arguments\n\n"; + } + else + { + # Start the test. + # + print "\nStarting test: $entry[1]\n"; + $convert_file = $entry[3]; + + if ("$entry[2]" =~ /[Qq][Uu][Ii][Cc][Kk][Ww][Oo][Rr][Dd]/) + { + $xml_extension = "sxw"; + $convert_to = "doc"; + + # Convert XML file to pdb format. + # + $rc = &convert_to_pdb("$xml_orig", $convert_file, $xml_extension , + $convert_to,"$pdb_orig"); + if ($rc != 0) + { + print "\nERROR, problem converting file $convert_file\n\n"; + } + else + { + # Start pose + # + $rc = &start_pose("$pose_exe", + "$pose_prc/Quickword.PRC,$pose_prc/DBExporter.prc,$pdb_orig/$convert_file.pdb", + "Quickword", $pose_timeout); + + if ($rc == 0) + { + &start_quickword(); + $valid_test = 1; + $running_testtype = "QUICKWORD"; + print "\npose launched, begin automated test sequence for QuickWord\n"; + } + else + { + &kill_pose(); + $running_testtype = ""; + } + } + } + elsif ("$entry[2]" =~ /[Mm][Ii][Nn][Ii][Cc][Aa][Ll][Cc]/) + { + $xml_extension = "sxc"; + $convert_to = "minicalc"; + + # Convert XML file to pdb format. + # + $rc = &convert_to_pdb("$xml_orig", $convert_file, + $xml_extension, $convert_to,"$pdb_orig"); + if ($rc != 0) + { + print "\nERROR, problem converting file $convert_file\n\n"; + } + else + { + # Get minicalc PDB file names, since an SXC file can + # be converted to more than one. + # + $pdb_files=""; + $i = 1; + while (-f "$pdb_orig/$convert_file-Sheet$i.pdb") + { + if ($i > 1) + { + $pdb_files .= ","; + } + $pdb_files .= "$pdb_orig/$convert_file-Sheet$i.pdb"; + $i++; + } + $number = $i-1; + + # Start pose + # + $rc = &start_pose("$pose_exe", + "$pose_prc/MiniCalc.prc,$pose_prc/DBExporter.prc,$pdb_files", + "MiniCalc", $pose_timeout); + + if ($rc == 0) + { + &start_minicalc(); + $valid_test = 1; + $running_testtype = "MINICALC"; + print "pose launched, begin automated test sequence for MiniCalc\n"; + } + else + { + &kill_pose(); + $running_testtype = ""; + } + } + } + else + { + print "\nERROR, invalid extension <$entry[2]>\n\n"; + } + } + } + + # Process DB_EXPORT + # + elsif ("$entry[0]" eq "DB_EXPORT") + { + if ($#entry != 1) + { + print "\nERROR, $entry[0] invalid number of arguments\n\n"; + } + else + { + &db_export($entry[1]); + } + } + + # Process TAP_APPLICATIONS + # + elsif ("$entry[0]" eq "TAP_APPLICATIONS") + { + if ($#entry != 0) + { + print "\nERROR, $entry[0] invalid number of arguments\n\n"; + } + else + { + &tap_applications(0); + } + } + + # Process ENTER_STRING_AT_LOCATION + # + elsif ("$entry[0]" eq "ENTER_STRING_AT_LOCATION") + { + if ($#entry != 3) + { + print "\nERROR, $entry[0] invalid number of arguments\n\n"; + } + elsif ($valid_test == 0) + { + print "\nERROR, can not process $entry[0] for invalid test\n\n"; + } + else + { + &enter_string_at_location($entry[1], $entry[2], + $entry[3], $running_testtype); + } + } + + # Process TAP_PEN + # + elsif ("$entry[0]" eq "TAP_PEN") + { + if ($#entry != 2) + { + print "\nERROR, $entry[0] invalid number of arguments\n\n"; + } + elsif ($valid_test == 0) + { + print "\nERROR, can not process $entry[0] for invalid test\n\n"; + } + else + { + &pose_tap_pen($entry[1], $entry[2], 0); + } + } + + # Process TAP_BUTTON + # + elsif ("$entry[0]" eq "TAP_BUTTON") + { + if ($#entry != 1) + { + print "\nERROR, $entry[0] invalid number of arguments\n\n"; + } + elsif ($valid_test == 0) + { + print "\nERROR, can not process $entry[0] for invalid test\n\n"; + } + else + { + &pose_tap_button($entry[1], 0); + } + } + + # Process SLEEP + # + elsif ("$entry[0]" eq "SLEEP") + { + if ($#entry != 1) + { + print "\nERROR, $entry[0] invalid number of arguments\n\n"; + } + else + { + &pose_sleep($entry[1]); + } + } + + # Process MINICALC_ENTER_CELL + # + elsif ("$entry[0]" eq "MINICALC_ENTER_CELL") + { + if ($#entry != 3) + { + print "\nERROR, $entry[0] invalid number of arguments\n\n"; + } + elsif ($valid_test == 0) + { + print "\nERROR, can not process $entry[0] for invalid test\n\n"; + } + else + { + &minicalc_enter_cell($entry[1], $entry[2], $entry[3]); + } + } + + # Process QUICKWORD_FIND_REPLACE + # + elsif ("$entry[0]" eq "QUICKWORD_FIND_REPLACE") + { + if ($#entry != 2) + { + print "\nERROR, $entry[0] invalid number of arguments\n\n"; + } + elsif ($valid_test == 0) + { + print "\nERROR, can not process $entry[0] for invalid test\n\n"; + } + else + { + &quickword_find_replace($entry[1], $entry[2]); + } + } + else + { + print "\nERROR, invalid line <$c_inline>\n"; + } + } + + &close_program($convert_file); +} + +# close_program +# convert_file - file to export +# +# closes the program running in pose and kills pose +# +sub close_program +{ + my $convert_file = $_[0]; + + if ($running_testtype eq "QUICKWORD") + { + print "QuickWord test completed.\n"; + &close_program_quickword($convert_file); + } + elsif ($running_testtype eq "MINICALC") + { + print "MiniCalc test completed.\n"; + &close_program_minicalc($convert_file, $number); + } +} + +# close_program_quickword +# convert_file - file to export +# +# Closes quickword and kills pose +# +sub close_program_quickword +{ + my $convert_file = $_[0]; + my $error_file = "./error.txt"; + my $rc; + + &close_quickword(); + + &db_export($convert_file); + print "Moving /tmp/$convert_file.pdb to $pdb_new\n"; + `mv /tmp/$convert_file.pdb $pdb_new`; + `chmod 666 $pdb_new/$convert_file.pdb`; + + &close_connection(1); + &kill_pose(); + print "\nFinishing test...\n"; + + # The path of where to put the error file should be specified + # in the properties file. Not sure if it is really necessary + # to put this out to a separate file. STDOUT should be fine. + # + $rc = &convert_to_xml($xml_new, $xml_orig, + "$pdb_new/$convert_file.pdb", "doc" , + "sxw", $convert_file, $merge_opt); + if ($rc != 0) + { + print "\nERROR, problem converting file $pdb_new/$convert_file.pdb\n\n"; + } +} + +# close_program_minicalc +# convert_file - file to export +# +# Closes minicalc and kills pose +# +sub close_program_minicalc +{ + my $convert_file = $_[0]; + my $num_files = $_[1]; + my $list=""; + my $rc; + + &close_minicalc(); + + for ($a=1; $a <= $num_files; $a++) + { + &db_export("$convert_file-Sheet$a"); + print "Moving /tmp/$convert_file-Sheet$a.pdb to $pdb_new/\n"; + `mv /tmp/$convert_file-Sheet$a.pdb $pdb_new/`; + `chmod 666 $pdb_new/$convert_file-Sheet$a.pdb`; + } + + &close_connection(1); + &kill_pose(); + print "\nFinishing test...\n"; + + for ($a=1; $a <= $num_files; $a++) + { + $list .="$pdb_new/$convert_file-Sheet$a.pdb " + } + + $rc = &convert_to_xml($xml_new, $xml_orig, "$list", + "minicalc", "sxc", $convert_file, $merge_opt); + if ($rc != 0) + { + print "\nERROR, problem converting file(s) $list\n\n"; + } + + &pose_sleep(5); +} + +# print_usage +# +# prints the usage for this program. +# +sub print_usage +{ + print "Usage : test_driver.pl\n"; + print "\t-test=<file> \t\t: individual test case file to run\n"; + print "\t-list=<file> \t\t: list of test case files\n"; + print "\t-env=<file> \t\t: Properites like file defining env\n"; + print "\t-pose-exe=<fullpath> \t: path to pose executable\n"; + print "\t-pose-prc=<path> \t: path to directory holding prc files\n"; + print "\t-pdb-orig=<path> \t: directory to hold original pdb files\n"; + print "\t-pdb-new=<path> \t: directory to hold new pdb files\n"; + print "\t-xml-orig=<path> \t: directory to hold original office documents\n"; + print "\t-xml-new=<path> \t: directory to hold new office documents\n"; + print "\t-merge \t: Invokes the merge option when converting\n"; + print "\t \t from PDB back to XML.\n"; +} + +# print_env +# +# Prints the current environment. +# +sub print_env +{ + print "\nUsing the following environment:\n"; + print "\tPOSE_EXE = $pose_exe\n"; + print "\tPOSE_PRC = $pose_prc\n"; + print "\tPDB_ORIG = $pdb_orig\n"; + print "\tPDB_NEW = $pdb_new\n"; + print "\tXML_ORIG = $xml_orig\n"; + print "\tXML_NEW = $xml_new\n"; +} + +# process_cmdline +# +# command line options come in as key/value pairs. +# read them and set the appropriate global variable +# +# Sets these globals: pose_exe, pose_prc, xml_orig, xml_new_dir, +# xml_new, pdb_orig_dir, pdb_orig, pdb_new_dir, pdb_new. +# +sub process_cmdline +{ + my $lu_str = &get_date_string(); + + foreach $i (@_) + { + my @arg= split('=', $i); + @arg[0] =~ tr/A-Z/a-z/; + + if (@arg[0] eq "-pose-exe") + { + $pose_exe=$arg[1]; + } + elsif (@arg[0] eq "-pose-prc") + { + $pose_prc=$arg[1]; + } + elsif (@arg[0] eq "-pdb-orig") + { + $pdb_orig_dir=$arg[1]; + $pdb_orig=$arg[1]; + $pdb_orig .= "/"; + $pdb_orig .= "$lu_str"; + } + elsif (@arg[0] eq "-pdb-new") + { + $pdb_new_dir=$arg[1]; + $pdb_new=$arg[1]; + $pdb_new .= "/"; + $pdb_new .= "$lu_str"; + } + elsif (@arg[0] eq "-xml-orig") + { + $xml_orig=$arg[1]; + } + elsif (@arg[0] eq "-xml-new") + { + $xml_new_dir=$arg[1]; + $xml_new=$arg[1]; + $xml_new .= "/"; + $xml_new .= "$lu_str"; + } + elsif (@arg[0] eq "-env") + { + &set_env_from_props($arg[1]); + } + elsif (@arg[0] eq "-list") + { + $test_list = $arg[1]; + } + elsif (@arg[0] eq "-test") + { + $infile = $arg[1]; + } + elsif (@arg[0] eq "-merge") + { + $merge_opt = 1; + } + else + { + print_usage(); + die "Incorrect command line"; + } + } +} + +# set_env_from_props +# infile - property file +# +# Read the properties file, of the form key=value +# Valid key values are : +# POSE_EXE +# POSE_PRC +# POSE_PERL +# TEST_HOME +# PDB_ORIG +# PDB_NEW +# XML_ORIG +# XML_NEW +# If a value is found the appropriate global variable is set. +# +# Sets these globals: pose_exe, pose_prc, xml_orig, xml_new_dir, +# xml_new, pdb_orig_dir, pdb_orig, pdb_new_dir, pdb_new. +# +sub set_env_from_props +{ + my $infile = $_[0]; + my $lu_str = &get_date_string(); + + open(PROPSFILE, $infile) || die "Could not open properties file <$infile>"; + + while (<PROPSFILE>) + { + chomp $_; + my @arg = split('=', $_); + @arg[0] =~ tr/a-z/A-Z/; + my $len = @arg; + if ($len != 2) + { + die "Malformed property in $arg[0]"; + } + if (@arg[0] eq "POSE_EXE") + { + $pose_exe=$arg[1]; + } + elsif (@arg[0] eq "POSE_PRC") + { + $pose_prc=$arg[1]; + } + elsif (@arg[0] eq "PDB_ORIG") + { + $pdb_orig_dir=$arg[1]; + $pdb_orig=$arg[1]; + $pdb_orig .= "/"; + $pdb_orig .= "$lu_str"; + } + elsif (@arg[0] eq "PDB_NEW") + { + $pdb_new_dir=$arg[1]; + $pdb_new=$arg[1]; + $pdb_new .= "/"; + $pdb_new .= "$lu_str"; + } + elsif (@arg[0] eq "XML_ORIG") + { + $xml_orig=$arg[1]; + } + elsif (@arg[0] eq "XML_NEW") + { + $xml_new_dir=$arg[1]; + $xml_new=$arg[1]; + $xml_new .= "/"; + $xml_new .= "$lu_str"; + } + + } + close PROPSFILE; +} + +# verify_env_options +# +# Verify that input options are correctly set. +# Assumes pose_exe, pose_prc, xml_orig, xml_new_dir, +# pdb_orig_dir, and pdb_new_dir are already set. +# +sub verify_env_options +{ + if (!-e "$pose_exe") + { + die "The pose executable cannot be found at $pose_exe."; + } + if (!-x $pose_exe) + { + die "$pose_exe exists but is not executable."; + } + + if (!-e "$pose_prc") + { + die "The PRC directory specified as $pose_prc does not exist."; + } + if (!-d "$pose_prc") + { + die "The PRC location specified as $pose_prc exists, but is not a directory."; + } + + if (!-e "$pdb_orig_dir") + { + die "The original PDB directory specified as $pdb_orig_dir does not exist."; + } + if (!-d "$pdb_orig_dir") + { + die "The original PDB directory specified as $pdb_orig_dir exists but is not a directory."; + } + + if (!-e "$pdb_new_dir") + { + die "The new PDB directory specified as $pdb_new_dir does not exist."; + } + if (!-d "$pdb_new_dir") + { + die "The new PDB directory specified as $pdb_new_dir exists but is not a directory."; + } + + if (!-e "$xml_orig") + { + die "The original Office document directory specified as $xml_orig does not exist."; + } + if (!-d "$xml_orig") + { + die "The original Office document location specified as $xml_orig exists but is not a directory."; + } + + if (!-e "$xml_new_dir") + { + die "The new Office document directory specified as $xml_new_dir does not exist."; + } + if (!-d "$xml_new_dir") + { + die "The new Office document location specified as $xml_new_dir exists but is not a directory."; + } +} + +# verify_prcs_exist +# prcfile - the PRC file to check +# +# Verifies that the specified PRC file exists. +# +sub verify_prcs_exist +{ + my $prcfile = $_[0]; + + if (!-e "$pose_prc/$prcfile") + { + die "The pose PRC directory ($pose_prc) is correct, but I can't find $prcfile there."; + } +} + diff --git a/xmerge/source/palmtests/qa/comparator/OfficeZip.java b/xmerge/source/palmtests/qa/comparator/OfficeZip.java new file mode 100644 index 000000000000..496949cf3d17 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/OfficeZip.java @@ -0,0 +1,241 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +import java.util.List; +import java.util.ListIterator; +import java.util.LinkedList; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; +import java.util.zip.ZipEntry; +import java.util.zip.CRC32; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.IOException; +import java.io.ByteArrayOutputStream; +import org.openoffice.xmerge.util.Debug; + +/** + * Class used by OfficeDocument to handle zip reading and writing, + * as well as storing zip entries. + * + * @author Herbie Ong + */ + +class OfficeZip { + + /** file name of the xml file in a zipped document. */ + private final static String XMLFILE = "content.xml"; + + private final static int BUFFERSIZE = 1024; + + private List entryList = null; + + private int contentIndex = -1; + + private String filename = null; + + private class Entry { + + ZipEntry zipEntry = null; + byte bytes[] = null; + } + + /** + * Constructor + * + * @param filename Full Path to Zip file to process + * + */ + public OfficeZip(String filename) { + this.filename = filename; + } + + + /** + * Read each zip entry in the given InputStream object + * and store in entryList both the ZipEntry object as well + * as the bits of each entry. Return the bytes for the + * entry of XMLFILE. + * + * @param is InputStream object to read from + * @return byte[] byte array of XML file + * @throws IOException if any I/O error occurs + */ + + byte[] read(InputStream is) throws IOException { + + ZipInputStream zis = new ZipInputStream(is); + ZipEntry ze = null; + int i = -1; + + entryList = new LinkedList(); + + while ((ze = zis.getNextEntry()) != null) { + + String name = ze.getName(); + + Entry entry = new Entry(); + entry.zipEntry = ze; + + Debug.log(Debug.TRACE, "reading entry: " + name); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + int len = 0; + byte bytes[] = new byte[BUFFERSIZE]; + + while ((len = zis.read(bytes)) > 0) { + baos.write(bytes, 0, len); + } + + entry.bytes = baos.toByteArray(); + + entryList.add(entry); + + i++; + + if (isContentXML(name)) { + contentIndex = i; + } + } + + if (contentIndex == -1) { + throw new IOException(XMLFILE + " not found."); + } + + Entry contentEntry = (Entry) entryList.get(contentIndex); + + return contentEntry.bytes; + } + + /** + * Write out the XMLFILE as a zip into the OutputStream object. + * + * If a zip inputstream was previously read, then use + * those zip contents to recreate the zip, except for XMLFILE, + * update it using the new content from xmlBytes. + * + * If there was no zip inputstream previously read, write + * XMLFILE out into the zip outputstream. + * + * @param os OutputStream object to write zip + * @param xmlBytes bytes of XMLFILE + * @throws IOException if any I/O errors occur. + */ + + void write(OutputStream os, byte xmlBytes[]) throws IOException { + + ZipOutputStream zos = new ZipOutputStream(os); + + // if read was not invoked previously, store the bytes directly. + if (contentIndex == -1) { + + Debug.log(Debug.TRACE, "Writing out " + XMLFILE + " into zip."); + + ZipEntry ze = new ZipEntry(XMLFILE); + ze.setSize(xmlBytes.length); + + CRC32 crc = new CRC32(); + crc.reset(); + crc.update(xmlBytes); + ze.setCrc(crc.getValue()); + + ze.setTime(System.currentTimeMillis()); + ze.setMethod(ZipEntry.DEFLATED); + + zos.putNextEntry(ze); + zos.write(xmlBytes); + + } else { + + saveEntries(zos, xmlBytes); + } + + zos.close(); + } + + /** + * Used by write method if there was a zip inputstream + * previously read. It would write out each ZipEntry of + * the previously read zip, except for XMLFILE, it would + * update it with new values and with the content from + * xmlBytes. + * + * @param os OutputStream object to write zip + * @param xmlBytes bytes of XMLFILE + * @throws ZipException if any zip I/O errors occur. + */ + + private void saveEntries(ZipOutputStream zos, byte xmlBytes[]) + throws IOException { + + Debug.log(Debug.TRACE, "Writing out the following entries into zip."); + + ListIterator iterator = entryList.listIterator(); + + while (iterator.hasNext()) { + + Entry entry = (Entry) iterator.next(); + ZipEntry ze = entry.zipEntry; + + String name = ze.getName(); + + Debug.log(Debug.TRACE, "... " + name); + + if (isContentXML(name)) { + + // set new values for this ZipEntry + + ZipEntry zipEntry = new ZipEntry(name); + + zipEntry.setMethod(ze.getMethod()); + zipEntry.setSize(xmlBytes.length); + + CRC32 crc = new CRC32(); + crc.reset(); + crc.update(xmlBytes); + zipEntry.setCrc(crc.getValue()); + + zipEntry.setTime(System.currentTimeMillis()); + + zos.putNextEntry(zipEntry); + zos.write(xmlBytes); + + } else { + + zos.putNextEntry(ze); + zos.write(entry.bytes); + } + } + } + + private boolean isContentXML(String name) { + + String lname = name.toLowerCase(); + return lname.equals(XMLFILE); + } +} diff --git a/xmerge/source/palmtests/qa/comparator/PDBDecoder.java b/xmerge/source/palmtests/qa/comparator/PDBDecoder.java new file mode 100644 index 000000000000..8f4dec82f4b5 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/PDBDecoder.java @@ -0,0 +1,135 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + + +import java.io.RandomAccessFile; +import java.io.IOException; + + +/** + * <p>Provides functionality to decode a pdb formatted file into + * a <code>PalmDB</code> object given a file input stream</p> + * + * <p>Sample usage:</p> + * + * <p><blockquote><pre> + * PDBDecoder decoder = new PDBDecoder("sample.pdb"); + * PalmDB palmDB = decoder.parse(); + * </pre></blockquote></p> + * + * <p>Refer to the + * <a href="http://starlite.eng/zensync/eng/converters/palmfileformats.pdf"> + * Palm file format specification</a> for details on the pdb format.</p> + * + * <p>This decoder has the following assumptions on the pdb file ...</p> + * <ol> + * <li><p>There is only one RecordList section in the pdb.</p></li> + * <li><p>The record indices in the RecordList are sorted in order, i.e. the + * first record index refers to record 0, and so forth.</p></li> + * <li><p>The raw records in the record section are sorted as well in order, + * i.e. first record comes ahead of second record, etc.</p></li> + * </ol> + * + * Other decoders assume these as well. + * + * @author Herbie Ong + * @see PalmDB + * @see PDBHeader + * + * @author Herbie Ong + */ + +public final class PDBDecoder { + + /** + * <p>This method decodes a pdb file into a PalmDB object.</p> + * + * <p>First, read in the header data using <code>PDBHeader</code>'s + * <code>read</code> method</p>. Next, read in the record list + * section. Store the record offsets for use when parsing the records. + * Based on these offsets, read in each record's bytes and store + * each in a <code>Record</code> object. Lastly, create a + * <code>PalmDB</code> object with the read in <code>Record</code>s. + * + * @param fileName pdb file name + * @throws IOException if I/O error occurs + */ + + public PalmDB parse(String fileName) throws IOException { + + RandomAccessFile file = new RandomAccessFile(fileName, "r"); + + // read the pdb header + PDBHeader header = new PDBHeader(); + header.read(file); + + Record recArray[] = new Record[header.numRecords]; + + if (header.numRecords != 0) { + + // read in the record indices + offsets + + int recOffset[] = new int[header.numRecords]; + + for (int i = 0; i < header.numRecords; i++) { + + recOffset[i] = file.readInt(); + int attr = file.readInt(); // read in attribute. + } + + // read the records + + int len = 0; + byte[] bytes = null; + + int lastIndex = header.numRecords - 1; + + for (int i = 0; i < lastIndex; i++) { + + file.seek(recOffset[i]); + len = recOffset[i+1] - recOffset[i]; + bytes = new byte[len]; + file.readFully(bytes); + recArray[i] = new Record(bytes); + } + + // last record + file.seek(recOffset[lastIndex]); + len = (int) file.length() - recOffset[lastIndex]; + bytes = new byte[len]; + file.readFully(bytes); + recArray[lastIndex] = new Record(bytes); + } + + file.close(); + + // create PalmDB and return it + PalmDB pdb = new PalmDB(header.pdbName, recArray); + return pdb; + } +} + diff --git a/xmerge/source/palmtests/qa/comparator/PDBHeader.java b/xmerge/source/palmtests/qa/comparator/PDBHeader.java new file mode 100644 index 000000000000..216fd8bd9351 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/PDBHeader.java @@ -0,0 +1,153 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +/** + * <p>Class used only internally by <code>PDBEncoder</code> and + * <code>PDBDecoder</code> to store, read and write a pdb header.</p> + * + * <p>Note that fields are intended to be accessible only at the + * package level.</p> + * + * <p>Some of the fields are internally represented using a + * larger type since Java does not have unsigned types. + * Some are not since they are not relevant for now. + * The <code>read</code> and <code>write</code> methods should + * handle them properly.</p> + * + * @author Herbie Ong + */ + +final class PDBHeader { + + /** name of the database. 32 bytes. */ + byte[] pdbName = null; + + /** flags for the database. Palm UInt16. Unsignedness should be irrelevant. */ + short attribute = 0; + + /** application-specific version for the database. Palm UInt16 */ + int version = 0; + + /** date created. Palm UInt32 */ + long creationDate = 0; + + /** date last modified. Palm UInt32 */ + long modificationDate = 0; + + /** date last backup. Palm UInt32 */ + long lastBackupDate = 0; + + /** + * incremented every time a record is + * added, deleted or modified. Palm UInt32. + */ + long modificationNumber = 0; + + /** optional field. Palm UInt32. Unsignedness should be irrelevant. */ + int appInfoID = 0; + + /** optional field. Palm UInt32. Unsignedness should be irrelevant. */ + int sortInfoID = 0; + + /** database type id. Palm UInt32. Unsignedness should be irrelevant. */ + int typeID = 0; + + /** database creator id. Palm UInt32. Unsignedness should be irrelevant. */ + int creatorID = 0; + + /** ??? */ + int uniqueIDSeed = 0; + + /** see numRecords. 4 bytes. */ + int nextRecordListID = 0; + + /** + * number of records stored in the database header. + * If all the record entries cannot fit in the header, + * then nextRecordList has the local ID of a + * recordList that contains the next set of records. + * Palm UInt16. + */ + int numRecords = 0; + + /** + * Read in the data for the pdb header. Need to + * preserve the unsigned value for some of the fields. + * + * @param di a DataInput object + * @throws IOException if I/O error occurs + */ + + public void read(DataInput in) throws IOException { + + pdbName = new byte[PalmDB.NAME_LENGTH]; + in.readFully(pdbName); + attribute = in.readShort(); + version = in.readUnsignedShort(); + creationDate = ((long) in.readInt()) & 0xffffffffL; + modificationDate = ((long) in.readInt()) & 0xffffffffL; + lastBackupDate = ((long) in.readInt()) & 0xffffffffL; + modificationNumber = ((long) in.readInt()) & 0xffffffffL; + appInfoID = in.readInt(); + sortInfoID = in.readInt(); + creatorID = in.readInt(); + typeID = in.readInt(); + uniqueIDSeed = in.readInt(); + nextRecordListID = in.readInt(); + numRecords = in.readUnsignedShort(); + } + + /** + * Write out pdb header data. + * + * @param out a DataOut object + * @throws IOException if I/O error occurs + */ + + public void write(DataOutput out) throws IOException { + + out.write(pdbName); + out.writeShort(attribute); + out.writeShort(version); + out.writeInt((int) creationDate); + out.writeInt((int) modificationDate); + out.writeInt((int) lastBackupDate); + out.writeInt((int) modificationNumber); + out.writeInt(appInfoID); + out.writeInt(sortInfoID); + out.writeInt(typeID); + out.writeInt(creatorID); + out.writeInt(uniqueIDSeed); + out.writeInt(nextRecordListID); + out.writeShort(numRecords); + } +} + diff --git a/xmerge/source/palmtests/qa/comparator/PDBUtil.java b/xmerge/source/palmtests/qa/comparator/PDBUtil.java new file mode 100644 index 000000000000..bdf8a07d9360 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/PDBUtil.java @@ -0,0 +1,100 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +/** + * Contains common static methods and contants for use within the package. + * + * @author Herbie Ong + */ + +public final class PDBUtil { + + /** difference in seconds from Jan 01, 1904 to Jan 01, 1970 */ + final static long TIME_DIFF = 2082844800; + + /** encoding scheme used */ + final static String ENCODING = "8859_1"; + + /** size of a pdb header in bytes */ + final static int HEADER_SIZE = 78; + + /** + * This method converts a 4 letter string into the Palm ID integer. + * + * It is normally used to convert the Palm creator ID string into + * the integer version of it. Also use for data types, etc. + * + * @param s 4 character string. + * @return int Palm ID representing the string. + * @throws ArrayIndexOutOfBoundsException if string parameter + * contains less than 4 characters. + */ + + public static int intID(String s) { + + int id = -1; + int temp = 0; + + // grab the first char and put it in the high bits + // note that we only want 8 lower bits of it. + temp = (int) s.charAt(0); + id = temp << 24; + + // grab the second char and add it in. + temp = ((int) s.charAt(1)) & 0x00ff; + id += temp << 16; + + // grab the second char and add it in. + temp = ((int) s.charAt(2)) & 0x00ff; + id += temp << 8; + + // grab the last char and add it in + id += ((int) s.charAt(3)) & 0x00ff; + + return id; + } + + /** + * This method converts an integer into a String given + * the Palm ID format. + * + * @param i Palm id. + * @return String string representation. + */ + + public static String stringID(int i) { + + char ch[] = new char[4]; + ch[0] = (char) (i >>> 24); + ch[1] = (char) ((i >> 16) & 0x00ff); + ch[2] = (char) ((i >> 8) & 0x00ff); + ch[3] = (char) (i & 0x00ff); + + return new String(ch); + } +} + diff --git a/xmerge/source/palmtests/qa/comparator/PalmDB.java b/xmerge/source/palmtests/qa/comparator/PalmDB.java new file mode 100644 index 000000000000..e15e7fefa5ff --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/PalmDB.java @@ -0,0 +1,348 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +import java.io.OutputStream; +import java.io.InputStream; +import java.io.DataOutputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; + +/** + * <p>This class contains data for a single Palm database for use during + * a conversion process.</p> + * + * <p>It contains zero or more <code>Record</code> objects stored in an + * array. The index of the <code>Record</code> object in the array is + * the record id or number for that specific <code>Record</code> object. + * Note that this class does not check for maximum number of records + * allowable in an actual pdb.</p> + * + * <p>This class also contains the pdb name associated with the Palm database + * it represents. A pdb name consists of 32 bytes of a certain encoding + * (extended ASCII in this case).</p> + * + * <p>The non default constructors take in a name parameter which may not + * be the exact pdb name to be used. The name parameter in + * <code>String</code> or <code>byte[]</code> are converted to an exact + * <code>NAME_LENGTH</code> byte array. If the length of the name is less + * than <code>NAME_LENGTH</code>, it is padded with '\0' characters. If it + * is more, it gets truncated. The last character in the resulting byte + * array is always a '\0' character. The resulting byte array is stored in + * <code>bName</code>, and a corresponding String object <code>sName</code> + * that contains characters without the '\0' characters.</p> + * + * <p>The {@link #write write} method is called within the + * {@link zensync.util.palm.PalmDBSet#write PalmDBSet.write} method + * for writing out its data to the <code>OutputStream</code> object.</p> + * + * <p>The {@link #read read} method is called within the + * {@link zensync.util.palm.PalmDBSet#read PalmDBSet.read} method + * for reading in its data from the <code>InputStream</code> object.</p> + * + * @author Akhil Arora, Herbie Ong + * @see PalmDBSet + * @see Record + */ + +public final class PalmDB { + + /** number of bytes for the name field in the pdb */ + public final static int NAME_LENGTH = 32; + + /** list of Record objects */ + private Record[] records; + + /** pdb name in bytes */ + private byte[] bName = null; + + /** pdb name in String */ + private String sName = null; + + + /** + * Default constructor for use after a read(). + */ + + public PalmDB() { + + records = new Record[0]; + } + + /** + * Constructor to create object with Record objects. + * recs.length can be zero for an empty pdb. + * + * @param name suggested pdb name in String + * @param recs array of Record objects + * @throws NullPointerException if recs is null + */ + + public PalmDB(String name, Record[] recs) + throws UnsupportedEncodingException { + + this(name.getBytes(PDBUtil.ENCODING), recs); + } + + /** + * Constructor to create object with Record objects. + * recs.length can be zero for an empty pdb. + * + * @param name suggested pdb name in byte array + * @param recs array of Record objects + * @throws NullPointerException if recs is null + */ + + public PalmDB(byte[] name, Record[] recs) + throws UnsupportedEncodingException { + + store(name); + + records = new Record[recs.length]; + System.arraycopy(recs, 0, records, 0, recs.length); + } + + /** + * This private method is mainly used by the constructors above. + * to store bytes into name and also create a String representation. + * and also by the read method. + * + * TODO: Note that this method assumes that the byte array parameter + * contains one character per byte, else it would truncate + * improperly. + * + * @param bytes pdb name in byte array + * @throws UnsupportedEncodingException if ENCODING is not supported + */ + + private void store(byte[] bytes) throws UnsupportedEncodingException { + + // note that this will initialize all bytes in name to 0. + bName = new byte[NAME_LENGTH]; + + // determine minimum length to copy over from bytes to bName. + // Note that the last byte in bName has to be '\0'. + + int lastIndex = NAME_LENGTH - 1; + + int len = (bytes.length < lastIndex)? bytes.length: lastIndex; + + int i; + + for (i = 0; i < len; i++) { + + if (bytes[i] == 0) { + break; + } + + bName[i] = bytes[i]; + } + + // set sName, no need to include the '\0' character. + sName = new String(bName, 0, i, PDBUtil.ENCODING); + } + + /** + * Return the number of records contained in this + * pdb PalmDB object. + * + * @return int number of Record objects + */ + + public int getRecordCount() { + + return records.length; + } + + /** + * Return the specific Record object associated + * with the record number. + * + * @param index record index number + * @return Record the Record object in the specified index + * @throws ArrayIndexOutOfBoundsException if index is out of bounds + */ + + public Record getRecord(int index) { + + return records[index]; + } + + /** + * Return the list of Record objects + * + * @return Record[] the list of Record objects + */ + + public Record[] getRecords() { + + return records; + } + + /** + * Return the PDBName associated with this object in String + * + * @return String pdb name in String + */ + + public String getPDBNameString() { + + return sName; + } + + /** + * Return the PDBName associated with this object + * in byte array of exact length of 32 bytes. + * + * @return byte[] pdb name in byte[] of length 32. + */ + + public byte[] getPDBNameBytes() { + + return bName; + } + + /** + * Write out the number of records followed by what + * will be written out by each Record object. + * + * @param os the stream to write the object to + * @throws IOException if any I/O error occurs + */ + + public void write(OutputStream os) throws IOException { + + DataOutputStream out = new DataOutputStream(os); + + // write out pdb name + out.write(bName); + + // write out 2 bytes for number of records + out.writeShort(records.length); + + // let each Record object write out its own info. + for (int i = 0; i < records.length; i++) + records[i].write(out); + } + + /** + * Read the necessary data to create a pdb from + * the input stream. + * + * @param is the stream to read data from in order + * to restore the object + * @throws IOException if any I/O error occurs + */ + + public void read(InputStream is) throws IOException { + + DataInputStream in = new DataInputStream(is); + + // read in the pdb name. + byte[] bytes = new byte[NAME_LENGTH]; + in.readFully(bytes); + store(bytes); + + // read in number of records + int nrec = in.readUnsignedShort(); + records = new Record[nrec]; + + // read in the Record infos + for (int i = 0; i < nrec; i++) { + + records[i] = new Record(); + records[i].read(in); + } + } + + /** + * Override equals method of Object. + * + * 2 PalmDB objects are equal if they contain the same information, + * i.e. pdb name and records. + * + * This is used primarily for testing purposes only for now. + * + * @param obj a PalmDB object to compare with + * @return boolean true if obj is equal to this, else false. + */ + + public boolean equals(Object obj) { + + boolean bool = false; + + if (obj instanceof PalmDB) { + + PalmDB pdb = (PalmDB) obj; + + checkLabel: { + + // compare sName + + if (!sName.equals(pdb.sName)) { + + break checkLabel; + } + + // compare bName + + if (bName.length != pdb.bName.length) { + + break checkLabel; + } + + for (int i = 0; i < bName.length; i++) { + + if (bName[i] != pdb.bName[i]) { + + break checkLabel; + } + } + + // compare each Record + + if (records.length != pdb.records.length) { + + break checkLabel; + } + + for (int i = 0; i < records.length; i++) { + + if (!records[i].equals(pdb.records[i])) { + + break checkLabel; + } + } + + // all checks done + bool = true; + } + } + + return bool; + } +} diff --git a/xmerge/source/palmtests/qa/comparator/README b/xmerge/source/palmtests/qa/comparator/README new file mode 100644 index 000000000000..ad08e7592d0d --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/README @@ -0,0 +1,10 @@ +Building the Comparator code +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +To build the comparator code, the following is required in your classpath. + + xerces.jar + xmerge.jar + +To Build type + + javac *.java diff --git a/xmerge/source/palmtests/qa/comparator/Record.java b/xmerge/source/palmtests/qa/comparator/Record.java new file mode 100644 index 000000000000..f506f1a2b190 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/Record.java @@ -0,0 +1,165 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +import java.io.OutputStream; +import java.io.InputStream; +import java.io.DataOutputStream; +import java.io.DataInputStream; +import java.io.IOException; + +/** + * <p>Contains the raw bytes for a record in a pdb.</p> + * + * <p>Note that it is not associated with a record number or id.</p> + * + * @author Akhil Arora, Herbie Ong + * @see PalmDB + */ + + +public final class Record { + + /** record bytes */ + private byte[] data; + + /** + * Default constructor. + */ + + public Record() { + + data = new byte[0]; + } + + /** + * Constructor to create a Record filled with bytes. + * Note that this does not check for 64k record sizes. + * User of this class has to check for that. + * + * @param d byte array contents for this object. + */ + + public Record(byte[] d) { + + data = new byte[d.length]; + System.arraycopy(d, 0, data, 0, d.length); + } + + /** + * This method returns the number of bytes in this object. + * + * @return int number of bytes in this object. + */ + + public int getSize() { + + return data.length; + } + + /** + * This method returns the contents of this object. + * + * @return byte[] contents in byte array + */ + + public byte[] getBytes() { + + return data; + } + + /** + * Write out the record length followed by the data + * in this Record object. + * + * @param out the stream to write the object to + * @throws IOException if any I/O error occurs + */ + + + public void write(OutputStream outs) throws IOException { + + DataOutputStream out = new DataOutputStream(outs); + out.writeShort(data.length); + out.write(data); + } + + /** + * Read the necessary data to create a pdb from + * the input stream. + * + * @param in the stream to read data from in order to + * restore the object + * @throws IOException if any I/O error occurs + */ + + public void read(InputStream ins) throws IOException { + + DataInputStream in = new DataInputStream(ins); + int len = in.readUnsignedShort(); + data = new byte[len]; + in.readFully(data); + } + + /** + * Override equals method of Object. + * + * 2 Record objects are equal if they contain the same bytes + * in the array. + * + * This is used primarily for testing purposes only for now. + * + * @param obj a Record object to compare with + * @return boolean true if obj is equal to this, else false. + */ + + public boolean equals(Object obj) { + + boolean bool = false; + + if (obj instanceof Record) { + + Record rec = (Record) obj; + + checkLabel: { + + if (rec.getSize() == data.length) { + + for (int i = 0; i < data.length; i++) { + + if (data[i] != rec.data[i]) { + break checkLabel; + } + } + + bool = true; + } + } + } + + return bool; + } +} diff --git a/xmerge/source/palmtests/qa/comparator/SimplePdbCompare.java b/xmerge/source/palmtests/qa/comparator/SimplePdbCompare.java new file mode 100644 index 000000000000..da01306d9545 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/SimplePdbCompare.java @@ -0,0 +1,94 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +/* + * SimplePdbCompare.java + * + * Created on September 21, 2001, 10:23 AM + */ + +/** + * + * @author mh101528 + * @version + */ +public final class SimplePdbCompare { + + /** Creates new SimplePdbCompare */ + public SimplePdbCompare() { + } + + /** + * @param args the command line arguments + */ + public static void main (String args[]) + { + SimplePdbCompare comparator = new SimplePdbCompare(); + if (comparator.comparePDB(args[0], args[1])) + System.exit(2); + else + System.exit(3); + } + + public boolean comparePDB(String pdbname1, String pdbname2) + { + PalmDB pdb1=null, pdb2=null; + PDBDecoder decoder = new PDBDecoder(); + try + { + pdb1 = decoder.parse(pdbname1); + } + catch (Exception e) + { + System.out.println("Could not parse PDB " + pdbname1); + return false; + } + + try + { + pdb2 = decoder.parse(pdbname2); + } + catch (Exception e) + { + System.out.println("Could not parse PDB " + pdbname2); + return false; + } + + if (pdb1.equals(pdb2)) + { + //writeToLog("PDB " + pdbname1 + " and PDB " + pdbname2 + " are equal"); + System.out.println("PDB " + pdbname1 + " and PDB " + pdbname2 + " are equal"); + return true; + } + else + { + //writeToLog("PDB " + pdbname1 + " and PDB " + pdbname2 + " are not equal"); + System.out.println("PDB " + pdbname1 + " and PDB " + pdbname2 + " are not equal"); + return false; + } + } +} diff --git a/xmerge/source/palmtests/qa/comparator/XmlDiff.java b/xmerge/source/palmtests/qa/comparator/XmlDiff.java new file mode 100644 index 000000000000..d592609d18f3 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/XmlDiff.java @@ -0,0 +1,464 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +import java.io.FileWriter; +import java.io.InputStream; +import java.io.FileInputStream; +import java.io.BufferedInputStream; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.FileNotFoundException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.io.PrintWriter; +import java.util.Vector; +import java.util.Properties; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.ParserConfigurationException; + +import org.w3c.dom.Node; +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; +/** + * This class will diff 2 Xml files. + * + * @author Stephen Mak + */ + +public final class XmlDiff { + + private static final String PROPSFILE = "XmlDiff.properties"; + private static final String FILE1 = "XmlDiff.file1"; + private static final String FILE2 = "XmlDiff.file2"; + private static final String OUTPUT= "XmlDiff.output"; + private static final String IGNORE_TAGS= "XmlDiff.tags"; + + private Properties props_ = null; + private static PrintWriter writer_ = null; + private String[] tags_ = null; + private String file1_ = null; + private String file2_ = null; + + /** + * Constructor. Load the properties file. + */ + + public XmlDiff() throws IOException { + + Class c = this.getClass(); + InputStream is = c.getResourceAsStream(PROPSFILE); + BufferedInputStream bis = new BufferedInputStream(is); + props_ = new Properties(); + props_.load(bis); + bis.close(); + + String file1 = props_.getProperty(FILE1, ""); + String file2 = props_.getProperty(FILE2, ""); + String tagsString = props_.getProperty(IGNORE_TAGS, ""); + String output = props_.getProperty("debug.output", "System.out"); + setOutput(output); + tags_ = parseTags(tagsString); + } + + /** + * diff 2 xml, but overwrite the property file's file1/2 setting with + * the input argument + */ + public boolean diff(String file1, String file2) throws IOException { + file1_ = file1; + file2_ = file2; + return diff(); + } + + public boolean diff() throws IOException { + + boolean result = false; + + writer_.println("parsing "+ file1_ + "..."); + // parse the Xml file + Document doc1 = parseXml(file1_); + + writer_.println("parsing "+ file1_ + "..."); + Document doc2 = parseXml(file2_); + + if (doc1 != null && doc2 != null) { + writer_.println("diffing "+ file1_ + " & " + file2_ + "..."); + result = compareNode(doc1, doc2); + } + return result; + } + + private void diffLog(String errMsg, Node node1, Node node2) { + + String node1Str = ""; + String node2Str = ""; + + if (node1 != null) { + node1Str = "[Type]:" + nodeInfo(node1) + + " [Name]:" + node1.getNodeName(); + if (node1.getNodeValue() != null) + node1Str += " [Value]:" + node1.getNodeValue(); + } + + if (node2 != null) { + node2Str = "[Type]:" + nodeInfo(node2) + + " [Name]:" + node2.getNodeName(); + if (node2.getNodeValue() != null) + node2Str += " [Value]:" + node2.getNodeValue(); + } + + writer_.println(errMsg); + writer_.println(" Node1 - " + node1Str); + writer_.println(" Node2 - " + node2Str); + } + + private String nodeInfo(Node node) { + + String str = null; + switch (node.getNodeType()) { + + case Node.ELEMENT_NODE: + str = "ELEMENT"; + break; + case Node.ATTRIBUTE_NODE: + str = "ATTRIBUTE"; + break; + case Node.TEXT_NODE: + str = "TEXT"; + break; + case Node.CDATA_SECTION_NODE: + str = "CDATA_SECTION"; + break; + case Node.ENTITY_REFERENCE_NODE: + str = "ENTITY_REFERENCE"; + break; + case Node.ENTITY_NODE: + str = "ENTITY"; + break; + case Node.PROCESSING_INSTRUCTION_NODE: + str = "PROCESSING_INSTRUCTION"; + break; + case Node.COMMENT_NODE: + str = "COMMENT"; + break; + case Node.DOCUMENT_NODE: + str = "DOCUMENT"; + break; + case Node.DOCUMENT_TYPE_NODE: + str = "DOCUMENT_TYPE"; + break; + case Node.DOCUMENT_FRAGMENT_NODE: + str = "DOCUMENT_FRAGMENT"; + break; + case Node.NOTATION_NODE: + str = "NOTATION"; + break; + } + return str; + } + + private boolean ignoreTag(String nodeName) { + + + if (tags_ != null) { + for (int i = 0; i < tags_.length; i++) { + if (tags_[i].equals(nodeName)) + return true; + } + } + return false; + } + + // for future use if we want to compare attributes + private boolean attributesEqual(Node node1, Node node2) { + return true; + } + + private boolean compareNode(Node node1, Node node2) { + boolean equal = false; + + while (true) { + + if (node1 == null && node2 == null) { + equal = true; + break; + } else if (node1 == null || node2 == null) { + diffLog("DIFF: one of the node is null", node1, node2); + break; + } + + if (node1.getNodeType() != node2.getNodeType()) { + diffLog("DIFF: nodetype is different", node1, node2); + break; + } + + if (node1.getNodeName() == null && node2.getNodeName() == null) { + // empty + } else if (node1.getNodeName() == null || + node2.getNodeName() == null) { + diffLog("DIFF: one of the nodeName is null", node1, node2); + break; + } else if (!node1.getNodeName().equals(node2.getNodeName())) { + diffLog("DIFF: nodeName is different", node1, node2); + break; + } + + if (ignoreTag(node1.getNodeName())) { + diffLog("DIFF: Some tag(s) is ignored", node1, node2); + equal = true; + break; + } + + if (node1.getNodeValue() == null && node2.getNodeValue() == null) { + // empty + } else if (node1.getNodeValue() == null || + node2.getNodeValue() == null) { + diffLog("DIFF: one of the nodevalue is null", node1, node2); + break; + } else if (!node1.getNodeValue().equals(node2.getNodeValue())) { + diffLog("DIFF: nodeValue is different", node1, node2); + break; + } + + // try to compare attributes if necessary + if (!attributesEqual(node1, node2)) + break; + + NodeList node1Children = node1.getChildNodes(); + NodeList node2Children = node2.getChildNodes(); + + // number of children have to be the same + if (node1Children == null && node2Children == null) { + equal = true; + break; + } + + if (node1Children == null || node2Children == null) { + diffLog("DIFF: one node's children is null", node1, node2); + break; + } + + if (node1Children.getLength() != node2Children.getLength()) { + diffLog("DIFF: num of children is different", node1, node2); + break; + } + + // compare all the childrens + equal = true; + + for (int i = 0; i < node1Children.getLength(); i++) { + if (!compareNode(node1Children.item(i), + node2Children.item(i))) { + equal = false; + break; + } + } + break; + } + + return equal; + } + + private Document parseXml (String filename) throws IOException { + + Document w3cDocument = null; + + FileInputStream fis; + + try { + fis = new FileInputStream(filename); + } catch (FileNotFoundException ex) { + ex.printStackTrace(writer_); + writer_.println(ex.getMessage()); + return w3cDocument; + } + + /** factory for DocumentBuilder objects */ + DocumentBuilderFactory factory = null; + factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + factory.setValidating(false); + + /** DocumentBuilder object */ + DocumentBuilder builder = null; + + try { + builder = factory.newDocumentBuilder(); + } catch (ParserConfigurationException ex) { + ex.printStackTrace(writer_); + writer_.println(ex.getMessage()); + return null; + } + + + builder.setErrorHandler( + new org.xml.sax.ErrorHandler() { + // ignore fatal errors (an exception is guaranteed) + public void fatalError(SAXParseException e) + throws SAXException { + throw e; + } + + public void error(SAXParseException e) + throws SAXParseException { + // make sure validation error is thrown. + throw e; + } + + public void warning(SAXParseException e) + throws SAXParseException { + } + } + ); + + try { + w3cDocument = builder.parse(fis); + w3cDocument.getDocumentElement().normalize(); + } catch (SAXException ex) { + ex.printStackTrace(writer_); + writer_.println(ex.getMessage()); + return w3cDocument; + } + + return w3cDocument; + } + + private String [] parseTags(String tagsString) { + Vector tagsVector = new Vector(); + if (tagsString.length() == 0) + return null; + + int start = 0; + int end = 0; + // break the tag string into a vector of strings by words + for (end = tagsString.indexOf(" ", start); + end != -1 ; + start = end + 1, end = tagsString.indexOf(" ", start)) { + tagsVector.add(tagsString.substring(start,end)); + } + + tagsVector.add(tagsString.substring(start,tagsString.length())); + + // convert the vector to array + String[] tags= new String[tagsVector.size()]; + tagsVector.copyInto(tags); + + return tags; + } + + + /** + * Set the output to the specified argument. + * This method is only used internally to prevent + * invalid string parameter. + * + * @param str output specifier + */ + private static void setOutput(String str) { + + if (writer_ == null) { + + if (str.equals("System.out")) { + + setOutput(System.out); + + } else if (str.equals("System.err")) { + + setOutput(System.err); + + } else { + + try { + + setOutput(new FileWriter(str)); + + } catch (IOException e) { + + e.printStackTrace(System.err); + } + } + } + } + + /** + * Set the output to an OutputStream object. + * + * @param stream OutputStream object + */ + + private static void setOutput(OutputStream stream) { + + setOutput(new OutputStreamWriter(stream)); + } + + /** + * Set the Writer object to manage the output. + * + * @param w Writer object to write out + */ + + private static void setOutput(Writer w) { + + if (writer_ != null) { + + writer_.close(); + } + + writer_ = new PrintWriter(new BufferedWriter(w), true); + } + + public static void main(String args[]) throws IOException { + + if (args.length != 0 && args.length != 2) { + System.out.println("Usage: XmlDiff [<file1> <file2>]."); + return; + } + + XmlDiff xmldiff = new XmlDiff(); + + boolean same = false; + if (args.length == 2) { + same = xmldiff.diff(args[0], args[1]); + } else { + same = xmldiff.diff(); + } + + System.out.println("Diff result: " + same); + if (same) + { + System.out.println("XMLDIFFRESULT:PASSED"); + } else { + System.out.println("XMLDIFFRESULT:FAILED"); + } + } +} + diff --git a/xmerge/source/palmtests/qa/comparator/XmlDiff.properties b/xmerge/source/palmtests/qa/comparator/XmlDiff.properties new file mode 100644 index 000000000000..2fdff0953ed6 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/XmlDiff.properties @@ -0,0 +1,14 @@ +# +# $Id: XmlDiff.properties,v 1.2 2005-10-24 16:13:45 hr Exp $ +# +# This properties file provides info for XmlDiff program +# XmlDiff.file1 is the first input XML file +# XmlDiff.file2 is the second input XML file +# XmlDiff.output is where the output (err/message) go +# XmlDiff.tags are what tagname should ignore (and the subtree under it) +# +# x-no-translate +XmlDiff.file1=test1.xml +XmlDiff.file2=test2.xml +XmlDiff.output=System.err +XmlDiff.tags= diff --git a/xmerge/source/palmtests/qa/comparator/XmlWrapper.java b/xmerge/source/palmtests/qa/comparator/XmlWrapper.java new file mode 100644 index 000000000000..16dddcb0a4f3 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/XmlWrapper.java @@ -0,0 +1,153 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +import java.io.IOException; +import java.io.File; +import java.util.zip.*; + +public class XmlWrapper +{ + public static void main(String args[]) throws IOException + { + System.out.println("args.length is " + args.length); + if (args.length < 2) { + System.out.println("Usage: java XmlWrapper [<zipfile1> <zipfile2>]."); + //return; + System.exit(-1); + + } + + XmlWrapper w = new XmlWrapper(); + File currdirfp = null; + try { + currdirfp = new File("."); + } catch (Exception fx) { + System.out.println("Could not get File instance for current directory \n"); + //return; + System.exit(-1); + } + + File f1 = null; + File f2 = null; + String fname1,fname2; + try { + f1 = File.createTempFile("xmlcomp", ".tmp", currdirfp); + f2 = File.createTempFile("xmlcomp", ".tmp", currdirfp); + } catch (Exception tx) { + System.out.println("Could not create TempFile "); + System.out.println("Exception: " + tx.toString()); + //return; + System.exit(-1); + } + + fname1 = f1.getAbsolutePath(); + fname2 = f2.getAbsolutePath(); + + // get content.xml file from zip file and copy it to temporary + // filename + XmlZipExtract xw1 = new XmlZipExtract(args[0]); + try { + xw1.getContentXml(fname1); + } catch (ZipException e) { + System.out.println("Exception: file is not a ZIP file: " + args[0]); + f1.delete(); + f2.delete(); + //return; + System.exit(-1); + } catch (Exception e) { + System.out.println("Exception: Could not extract XML from " + args[0]); + System.out.println("Exception: " + e.toString()); + f1.delete(); + f2.delete(); + //return; + System.exit(-1); + } + + // get content.xml file from zip file and copy it to temporary + // filename + XmlZipExtract xw2 = new XmlZipExtract(args[1]); + try { + xw2.getContentXml(fname2); + } catch (ZipException e) { + System.out.println("Exception: file is not a ZIP file: " + args[0]); + f1.delete(); + f2.delete(); + //return; + System.exit(-1); + } catch (Exception ex) { + System.out.println(ex.getMessage()); + System.out.println("Exception: Could not extract XML from " + args[1]); + System.out.println("Exception: " + ex.toString()); + f1.delete(); + f2.delete(); + //return; + System.exit(-1); + } + + boolean same = false; + + try + { + XmlDiff xmldiff = new XmlDiff(); + + if (args.length == 2) { + same = xmldiff.diff(fname1, fname2); + } else { + same = xmldiff.diff(); + } + } + catch (Exception ex) + { + System.out.println("XmlDiff failed"); + System.out.println("Exception: " + ex.toString()); + f1.delete(); + f2.delete(); + //return; + System.exit(-1); + } + + System.out.println("Diff result: " + same); + if (same) + { + System.out.println("XMLDIFFRESULT:PASSED"); + } else { + System.out.println("XMLDIFFRESULT:FAILED"); + } + + f1.delete(); + f2.delete(); + + if (same) + { + System.exit(2); + } + else + { + System.exit(3); + } + } +} diff --git a/xmerge/source/palmtests/qa/comparator/XmlZipExtract.java b/xmerge/source/palmtests/qa/comparator/XmlZipExtract.java new file mode 100644 index 000000000000..2e47edd65160 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/XmlZipExtract.java @@ -0,0 +1,144 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +import java.io.IOException; +import java.io.InputStream; +import java.io.FileInputStream; +import java.io.RandomAccessFile; +import java.io.BufferedInputStream; +import java.io.ByteArrayOutputStream; +import java.util.Enumeration; +import java.util.zip.ZipFile; +import java.util.zip.ZipEntry; + +public class XmlZipExtract +{ + + public static final String CONTENT = "Content.xml"; + public static final String OLDCONTENT = "content.xml"; + private static final int BUFFER_SIZE = 2048; + + + /** + * Full path of the Zip file to process. + */ + private String filename = null; + + + /** + * Constructor + * + * @param filename Full Path to Zip file to process + * + */ + public XmlZipExtract(String filename) { + this.filename = filename; + } + + /** + * Copies Content.xml from zip file onto the filename passed as + * an argument + * + * @param fname Full Path to file to which contents have to be copied + * + */ + public void getContentXml(String fname) throws IOException + { + try + { + getContentXmlInt(fname, XmlZipExtract.CONTENT); + } + catch (NullPointerException e1) + { + // If the new name of the content file failed, try + // the older name. + // + System.out.println(filename + " Content.xml does not exist, trying content.xml..."); + try + { + getContentXmlInt(fname, XmlZipExtract.OLDCONTENT); + } + catch (NullPointerException e2) + { + System.out.println(filename + " content.xml does not exist, trying content.xml..."); + throw e2; + } + } + } + + public void getContentXmlInt(String fname, String cname) throws IOException + { + byte b[] = getEntry(cname); + + RandomAccessFile raf=null; + raf = new RandomAccessFile(fname, "rw"); + raf.write(b); + raf.close(); + } + + /** + * Get the specified entry in the zip file as a stream. + * + * @param entryName The name of the entry in the zipfile to get. + * This should be one of the constants defined above. + * + * @return byte[] bits for entryName + * + * @throws IOException if something goes wrong + */ + public byte[] getEntry(String entryName) throws IOException + { + ZipFile zf = new ZipFile(filename); + ZipEntry ze = zf.getEntry(entryName); + byte[] bits = readStream(zf.getInputStream(ze)); + zf.close(); + return bits; + } + + + /** + * Read an InputStream into an array of bytes. + * + * @param is InputStream of data from Zip file + * + * @return an array of Bytes + */ + private byte[] readStream(InputStream is) throws IOException + { + BufferedInputStream bis = new BufferedInputStream(is); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buffer = new byte[BUFFER_SIZE]; + int eof = 0; + while ((eof = bis.read(buffer, 0, buffer.length)) > 0) { + baos.write(buffer, 0, eof); + } + + return baos.toByteArray(); + } +} + + diff --git a/xmerge/source/palmtests/qa/comparator/comparator.pl b/xmerge/source/palmtests/qa/comparator/comparator.pl new file mode 100644 index 000000000000..5ca4f2375689 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/comparator.pl @@ -0,0 +1,248 @@ +#!/usr/bin/perl + +######################################################################### + + #************************************************************************* + # +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org 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 Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# + #************************************************************************* + +$compare_home = "$ENV{QA_COMPARATOR_HOME}"; + +if ($ENV{'CLASSPATH'}) +{ + $classpath_val = "$compare_home:$ENV{'CLASSPATH'}"; +} +else +{ + $classpath_val = "$compare_home"; +} + +print "classpath is $classpath_val\n"; + +$list_file=""; +$orig_dir=""; +$new_dir=""; +$diff_type=""; + +####### BEGIN MAIN ############## +$cmdline_len = @ARGV; +if ($cmdline_len <= 0) +{ + print_usage(); + exit (0); +} + +process_cmdline(@ARGV); +print_env(); +open (LOGFILE, ">$logfile") || die "Cannot open log file $logfile"; +if ($test_list ne "") +{ + open (TESTLIST, $test_list) || die "Couldn't open diff list file $test_list"; + + while (<TESTLIST>) + { + chomp $_; + process_diff(get_file_title($_)); + } +} +close TESTLIST; +close LOGFILE; + +####### END MAIN ############## + +sub process_diff +{ + $_[0] =~ tr/A-Z/a-z/; + + # chdir to the output directory so the temporary files created by + # the java programs are put in the right place. + # + chdir ($xml_new); + + if ($diff_type eq "xml") + { + # Ugly hack, probably a way to tell xerces directly that the dtd's + # are in $compare_home/dtd. + # + `cp $compare_home/dtd/* $xml_new`; + + $cmd = "java -classpath $classpath_val XmlWrapper $xml_orig/$_[0].sxw $xml_new/$_[0].sxw"; + $val = system($cmd)/256; + if ($val == 2) + { + print LOGFILE "$_[0]|TRUE|$xml_orig/$_[0].sxw|$xml_new/$_[0].sxw\n"; + } + elsif($val == 3) + { + print LOGFILE "$_[0]|FALSE|$xml_orig/$_[0].sxw|$xml_new/$_[0].sxw\n"; + } + else + { + print LOGFILE "$_[0]|ERROR|$xml_orig/$_[0].sxw|$xml_new/$_[0].sxw\n"; + } + } + elsif ($diff_type eq "pdb") + { + $cmd = "java -classpath $classpath_val SimplePdbCompare $pdb_orig/$_[0].pdb $pdb_new/$_[0].pdb\n"; + print "Executing: $cmd\n"; + $val = system($cmd)/256; + if ($val == 2) + { + print LOGFILE "$_[0]|TRUE|$pdb_orig/$_[0].pdb|$pdb_new/$_[0].pdb\n"; + } + elsif($val == 3) + { + print LOGFILE "$_[0]|FALSE|$pdb_orig/$_[0].pdb|$pdb_new/$_[0].pdb\n"; + } + else + { + print LOGFILE "$_[0]|ERROR|$pdb_orig/$_[0].pdb|$pdb_new/$_[0].pdb\n"; + } + } + else + { + die "Don't understand test type of $diff_type."; + } +} + +sub process_cmdline +{ + foreach $i (@_) + { + @arg= split('=', $i); + @arg[0] =~ tr/A-Z/a-z/; + + if (@arg[0] eq "-pdb-orig") + { + $pdb_orig=$arg[1]; + } + elsif (@arg[0] eq "-pdb-new") + { + $pdb_new=$arg[1]; + } + elsif (@arg[0] eq "-xml-orig") + { + $xml_orig=$arg[1]; + } + elsif (@arg[0] eq "-xml-new") + { + $xml_new=$arg[1]; + } + elsif (@arg[0] eq "-env") + { + set_env_from_props($arg[1]); + } + elsif (@arg[0] eq "-list") + { + $test_list = $arg[1]; + } + elsif (@arg[0] eq "-one") + { + $infile = $arg[1]; + } + elsif (@arg[0] eq "-type") + { + $diff_type = $arg[1]; + chomp $diff_type; + } + elsif (@arg[0] eq "-log") + { + $logfile = $arg[1]; + } + else + { + print_usage(); + die "Incorrect command line. Don't understand $i"; + } + } +} + +sub set_env_from_props +{ + open(PROPSFILE, $_[0]) || die "Could not open properties file"; + + while (<PROPSFILE>) + { + chomp $_; + @arg = split('=', $_); + @arg[0] =~ tr/a-z/A-Z/; + $len = @arg; + if ($len != 2) + { + die "Malformed property in $ARGV[0]"; + } + + if (@arg[0] eq "PDB_ORIG") + { + $pdb_orig=$arg[1]; + } + elsif (@arg[0] eq "PDB_NEW") + { + $pdb_new=$arg[1]; + } + elsif (@arg[0] eq "XML_ORIG") + { + $xml_orig=$arg[1]; + } + elsif (@arg[0] eq "XML_NEW") + { + $xml_new=$arg[1]; + } + + } + close PROPSFILE; +} + +sub print_usage +{ + print "Usage : compartor.pl - compare Office or pdb files\n"; + print "\t-one=<file> :\t\t individual test case file to run\n"; + print "\t-list=<file> :\t\t list of test case files\n"; + print "\t-env=<file> :\t\t Properites like file defining env\n"; + print "\t-pdb-orig=<path> :\t directory to hold original pdb files\n"; + print "\t-pdb-new=<path> :\t directory to hold new pdb files\n"; + print "\t-xml-orig=<path> :\t directory to hold original office documents\n"; + print "\t-xml-new=<path> :\t directory to hold new office documents\n"; + print "\t-type=<xml|pdb> :\t Invokes the merge option when converting\n"; + print "\t-log=<logfile> :\t Save results to logfile.\n"; +} + +sub print_env +{ + print "Using the following environment:\n"; + print "\tPDB_ORIG = $pdb_orig\n"; + print "\tPDB_NEW = $pdb_new\n"; + print "\tXML_ORIG = $xml_orig\n"; + print "\tXML_NEW = $xml_new\n\n"; +} + +sub get_file_title +{ + @paths = split('\/', $_[0]); + $len = @paths; + @names = split('\.', @paths[$len-1]); + return $names[0]; +} diff --git a/xmerge/source/palmtests/qa/comparator/dtd/Blocklist.dtd b/xmerge/source/palmtests/qa/comparator/dtd/Blocklist.dtd new file mode 100644 index 000000000000..f7bb8eb321bb --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/dtd/Blocklist.dtd @@ -0,0 +1,34 @@ +<!-- + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + Copyright 2000, 2010 Oracle and/or its affiliates. + + OpenOffice.org - a multi-platform office productivity suite + + This file is part of OpenOffice.org. + + OpenOffice.org is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + OpenOffice.org 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 Lesser General Public License version 3 for more details + (a copy is included in the LICENSE file that accompanied this code). + + You should have received a copy of the GNU Lesser General Public License + version 3 along with OpenOffice.org. If not, see + <http://www.openoffice.org/license.html> + for a copy of the LGPLv3 License. + +--> +<!ELEMENT block-list:block-list (block-list:block*) > +<!ATTLIST block-list:block-list + block-list:list-name CDATA #REQUIRED> +<!ELEMENT block-list:block EMPTY> +<!ATTLIST block-list:block + block-list:abbreviated-name CDATA #REQUIRED + block-list:package-name CDATA #REQUIRED + block-list:name CDATA #REQUIRED> diff --git a/xmerge/source/palmtests/qa/comparator/dtd/chart.mod b/xmerge/source/palmtests/qa/comparator/dtd/chart.mod new file mode 100644 index 000000000000..70cbe483ca9c --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/dtd/chart.mod @@ -0,0 +1,228 @@ +<!-- + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + Copyright 2000, 2010 Oracle and/or its affiliates. + + OpenOffice.org - a multi-platform office productivity suite + + This file is part of OpenOffice.org. + + OpenOffice.org is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + OpenOffice.org 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 Lesser General Public License version 3 for more details + (a copy is included in the LICENSE file that accompanied this code). + + You should have received a copy of the GNU Lesser General Public License + version 3 along with OpenOffice.org. If not, see + <http://www.openoffice.org/license.html> + for a copy of the LGPLv3 License. + +--> + + +<!ENTITY % chart-class "(line|area|circle|ring|scatter|radar|bar|stock|add-in)"> +<!ENTITY % chart-solid-type "(cuboid|cylinder|cone|pyramid)"> + +<!-- Chart element --> +<!ELEMENT chart:chart ( chart:title?, chart:subtitle?, chart:legend?, + chart:plot-area, + table:table? )> +<!ATTLIST chart:chart + chart:class %chart-class; #REQUIRED + chart:add-in-name %string; #IMPLIED + chart:table-number-list %string; #IMPLIED + draw:name %string; #IMPLIED + %draw-position; + %draw-size; + %draw-style-name; + chart:style-name %styleName; #IMPLIED> + +<!ATTLIST chart:chart %presentation-class; > +<!ATTLIST chart:chart %zindex;> +<!ATTLIST chart:chart %draw-end-position; > +<!ATTLIST chart:chart draw:id %draw-shape-id; > +<!ATTLIST chart:chart draw:layer %layerName; #IMPLIED> + +<!ATTLIST style:properties + chart:scale-text %boolean; "true" + chart:stock-updown-bars %boolean; "false" + chart:stock-with-volume %boolean; "false" + chart:three-dimensional %boolean; "false" + chart:deep %boolean; "false" + chart:lines %boolean; "false" + chart:percentage %boolean; "false" + chart:solid-type %chart-solid-type; "cuboid" + chart:splines %nonNegativeInteger; "0" + chart:stacked %boolean; "false" + chart:symbol %integer; "-1" + chart:vertical %boolean; "false" + chart:lines-used %nonNegativeInteger; "0" + chart:connect-bars %boolean; "false"> + +<!-- Main/Sub Title --> +<!-- the cell-address attribute is currently not supported for titles --> +<!ELEMENT chart:title (text:p)?> +<!ATTLIST chart:title + table:cell-range %cell-address; #IMPLIED + svg:x %coordinate; #IMPLIED + svg:y %coordinate; #IMPLIED + chart:style-name %styleName; #IMPLIED > + +<!ELEMENT chart:subtitle (text:p)?> +<!ATTLIST chart:subtitle + table:cell-range %cell-address; #IMPLIED + svg:x %coordinate; #IMPLIED + svg:y %coordinate; #IMPLIED + chart:style-name %styleName; #IMPLIED > + +<!-- you must specify either a legend-position or both, x and y coordinates --> +<!ELEMENT chart:legend EMPTY> +<!ATTLIST chart:legend + chart:legend-position (top|left|bottom|right) "right" + svg:x %coordinate; #IMPLIED + svg:y %coordinate; #IMPLIED + chart:style-name %styleName; #IMPLIED > + +<!-- Plot-Area specification --> + +<!ELEMENT chart:plot-area (dr3d:light*, + chart:axis*, + chart:categories?, + chart:series*, + chart:wall?, + chart:floor?) > + +<!ATTLIST chart:plot-area + svg:x %coordinate; #IMPLIED + svg:y %coordinate; #IMPLIED + svg:width %length; #IMPLIED + svg:height %length; #IMPLIED + chart:style-name %styleName; #IMPLIED + table:cell-range-address %cell-range-address; #IMPLIED + chart:table-number-list %string; #IMPLIED + chart:data-source-has-labels (none|row|column|both) "none" > + +<!-- 3d scene attributes on plot-area --> +<!ATTLIST chart:plot-area + dr3d:vrp %vector3D; #IMPLIED + dr3d:vpn %vector3D; #IMPLIED + dr3d:vup %vector3D; #IMPLIED + dr3d:projection (parallel|perspective) #IMPLIED + dr3d:transform CDATA #IMPLIED + dr3d:distance %length; #IMPLIED + dr3d:focal-length %length; #IMPLIED + dr3d:shadow-slant %nonNegativeInteger; #IMPLIED + dr3d:shade-mode (flat|phong|gouraud|draft) #IMPLIED + dr3d:ambient-color %color; #IMPLIED + dr3d:lighting-mode %boolean; #IMPLIED > + +<!ATTLIST style:properties + chart:series-source (columns|rows) "columns" > + +<!ELEMENT chart:wall EMPTY> +<!ATTLIST chart:wall + svg:width %length; #IMPLIED + chart:style-name %styleName; #IMPLIED > + +<!ELEMENT chart:floor EMPTY> +<!ATTLIST chart:floor + svg:width %length; #IMPLIED + chart:style-name %styleName; #IMPLIED > + +<!-- Axis --> + +<!ELEMENT chart:axis (chart:title?, chart:grid*)> +<!ATTLIST chart:axis + chart:class (category|value|series|domain) #REQUIRED + chart:name %string; #IMPLIED + chart:style-name %styleName; #IMPLIED > + +<!ATTLIST style:properties + chart:tick-marks-major-inner %boolean; "false" + chart:tick-marks-major-outer %boolean; "true" + chart:tick-marks-minor-inner %boolean; "false" + chart:tick-marks-minor-outer %boolean; "false" + chart:logarithmic %boolean; "false" + chart:maximum %float; #IMPLIED + chart:minimum %float; #IMPLIED + chart:origin %float; #IMPLIED + chart:interval-major %float; #IMPLIED + chart:interval-minor %float; #IMPLIED + chart:gap-width %integer; #IMPLIED + chart:overlap %integer; #IMPLIED + text:line-break %boolean; "true" + chart:display-label %boolean; "true" + chart:label-arrangement (side-by-side|stagger-even|stagger-odd) "side-by-side" + chart:visible %boolean; "true" + chart:link-data-style-to-source %boolean; "true" > + +<!ELEMENT chart:grid EMPTY> +<!ATTLIST chart:grid + chart:class (major|minor) "major" + chart:style-name %styleName; #IMPLIED > + + +<!ELEMENT chart:categories EMPTY> +<!ATTLIST chart:categories + table:cell-range-address %cell-range-address; #REQUIRED > + +<!-- + each series element must have an cell-range-address element that points + to the underlying table data. + Impl. Note: Internally all href elements are merged to one table range + that represents the data for the whole chart +--> +<!ELEMENT chart:series ( chart:domain*, + chart:data-point* )> +<!ATTLIST chart:series + chart:values-cell-range-address %cell-range-address; #IMPLIED + chart:label-cell-address %cell-address; #IMPLIED + chart:class %chart-class; #IMPLIED + chart:attached-axis %string; #IMPLIED + chart:style-name %styleName; #IMPLIED > + +<!ELEMENT chart:domain EMPTY> +<!ATTLIST chart:domain + table:cell-range-address %cell-range-address; #IMPLIED > + +<!ELEMENT chart:data-point EMPTY> +<!ATTLIST chart:data-point + chart:repeated %nonNegativeInteger; #IMPLIED + chart:style-name %styleName; #IMPLIED > + +<!-- statistical properties --> + +<!ATTLIST style:properties + chart:mean-value %boolean; #IMPLIED + chart:error-category (none|variance|standard-deviation|percentage|error-margin|constant) "none" + chart:error-percentage %float; #IMPLIED + chart:error-margin %float; #IMPLIED + chart:error-lower-limit %float; #IMPLIED + chart:error-upper-limit %float; #IMPLIED + chart:error-upper-indicator %boolean; #IMPLIED + chart:error-lower-indicator %boolean; #IMPLIED + chart:regression-type (none|linear|logarithmic|exponential|power) "none" > + +<!-- data label properties --> + +<!ATTLIST style:properties + chart:data-label-number (none|value|percentage) "none" + chart:data-label-text %boolean; "false" + chart:data-label-symbol %boolean; "false" > + +<!-- general text properties --> + +<!ATTLIST style:properties text:rotation-angle %integer; "0" > + +<!-- symbol properties --> + +<!ATTLIST style:properties + chart:symbol-width %nonNegativeLength; #IMPLIED + chart:symbol-height %nonNegativeLength; #IMPLIED + chart:symbol-image-name %string; #IMPLIED > diff --git a/xmerge/source/palmtests/qa/comparator/dtd/datastyl.mod b/xmerge/source/palmtests/qa/comparator/dtd/datastyl.mod new file mode 100644 index 000000000000..11bc8a8e40b7 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/dtd/datastyl.mod @@ -0,0 +1,168 @@ +<!-- + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + Copyright 2000, 2010 Oracle and/or its affiliates. + + OpenOffice.org - a multi-platform office productivity suite + + This file is part of OpenOffice.org. + + OpenOffice.org is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + OpenOffice.org 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 Lesser General Public License version 3 for more details + (a copy is included in the LICENSE file that accompanied this code). + + You should have received a copy of the GNU Lesser General Public License + version 3 along with OpenOffice.org. If not, see + <http://www.openoffice.org/license.html> + for a copy of the LGPLv3 License. + +--> + +<!-- data styles --> +<!ENTITY % any-number "( number:number | number:scientific-number | number:fraction )"> +<!ENTITY % number-style-content "( (number:text,(%any-number;,number:text?)?) | (%any-number;,number:text?) )"> +<!ELEMENT number:number-style ( style:properties?, %number-style-content;, style:map* )> +<!ELEMENT number:number EMPTY> +<!ELEMENT number:scientific-number EMPTY> +<!ELEMENT number:fraction EMPTY> + +<!ENTITY % currency-symbol-and-text "number:currency-symbol,number:text?"> +<!ENTITY % number-and-text "number:number,number:text?"> +<!ENTITY % currency-symbol-and-number "((%number-and-text;),(%currency-symbol-and-text;)?) | ((%currency-symbol-and-text;),(%number-and-text;)?)"> +<!ENTITY % currency-style-content "number:text?, (%currency-symbol-and-number;)?"> + +<!ELEMENT number:currency-style ( style:properties?, (%currency-style-content;), style:map* )> +<!ELEMENT number:currency-symbol (#PCDATA)> +<!ATTLIST number:currency-symbol number:language CDATA #IMPLIED> +<!ATTLIST number:currency-symbol number:country CDATA #IMPLIED> + +<!ENTITY % percentage-style-content "( (number:text,(%number-and-text;)?) | (%number-and-text;) )"> +<!ELEMENT number:percentage-style ( style:properties?, %percentage-style-content;, style:map* )> + +<!ENTITY % any-date "( number:day | number:month | number:year | number:era | number:day-of-week | number:week-of-year | number:quarter| number:hours | number:am-pm | number:minutes | number:seconds )"> +<!ENTITY % date-style-content "( (number:text,(%any-date;,number:text?)+) | (%any-date;,number:text?)+ )"> +<!ELEMENT number:date-style ( style:properties?, %date-style-content;, style:map* )> +<!ELEMENT number:day EMPTY> +<!ATTLIST number:day number:style (short|long) "short"> +<!ATTLIST number:day number:calendar CDATA #IMPLIED> +<!ELEMENT number:month EMPTY> +<!ATTLIST number:month number:textual %boolean; "false"> +<!ATTLIST number:month number:style (short|long) "short"> +<!ATTLIST number:month number:calendar CDATA #IMPLIED> +<!ELEMENT number:year EMPTY> +<!ATTLIST number:year number:style (short|long) "short"> +<!ATTLIST number:year number:calendar CDATA #IMPLIED> +<!ELEMENT number:era EMPTY> +<!ATTLIST number:era number:style (short|long) "short"> +<!ATTLIST number:era number:calendar CDATA #IMPLIED> +<!ELEMENT number:day-of-week EMPTY> +<!ATTLIST number:day-of-week number:style (short|long) "short"> +<!ATTLIST number:day-of-week number:calendar CDATA #IMPLIED> +<!ELEMENT number:week-of-year EMPTY> +<!ATTLIST number:week-of-year number:calendar CDATA #IMPLIED> +<!ELEMENT number:quarter EMPTY> +<!ATTLIST number:quarter number:style (short|long) "short"> +<!ATTLIST number:quarter number:calendar CDATA #IMPLIED> + +<!ENTITY % any-time "( number:hours | number:am-pm | number:minutes | number:seconds )"> +<!ENTITY % time-style-content "( (number:text,(%any-time;,number:text?)+) | (%any-time;,number:text?)+)"> +<!ELEMENT number:time-style ( style:properties?, %time-style-content;, style:map* )> +<!ELEMENT number:hours EMPTY> +<!ATTLIST number:hours number:style (short|long) "short"> +<!ELEMENT number:minutes EMPTY> +<!ATTLIST number:minutes number:style (short|long) "short"> +<!ELEMENT number:seconds EMPTY> +<!ATTLIST number:seconds number:style (short|long) "short"> +<!ATTLIST number:seconds number:decimal-places %integer; "0"> +<!ELEMENT number:am-pm EMPTY> + +<!ENTITY % boolean-style-content "( (number:text,(number:boolean,number:text?)?) | (number:boolean,number:text?) )"> +<!ELEMENT number:boolean-style ( style:properties?,%boolean-style-content;, style:map* )> +<!ELEMENT number:boolean EMPTY> + +<!ENTITY % text-style-content "( (number:text,(number:text-content,number:text?)?) | (number:text-content,number:text?) )"> +<!ELEMENT number:text-style ( style:properties?,%text-style-content;, style:map* )> +<!ELEMENT number:text (#PCDATA)> +<!ELEMENT number:text-content EMPTY> + +<!ATTLIST number:number-style style:name %styleName; #REQUIRED> +<!ATTLIST number:currency-style style:name %styleName; #REQUIRED> +<!ATTLIST number:percentage-style style:name %styleName; #REQUIRED> +<!ATTLIST number:date-style style:name %styleName; #REQUIRED> +<!ATTLIST number:time-style style:name %styleName; #REQUIRED> +<!ATTLIST number:boolean-style style:name %styleName; #REQUIRED> +<!ATTLIST number:text-style style:name %styleName; #REQUIRED> + +<!ATTLIST number:number-style style:family CDATA #REQUIRED> +<!ATTLIST number:currency-style style:family CDATA #REQUIRED> +<!ATTLIST number:percentage-style style:family CDATA #REQUIRED> +<!ATTLIST number:date-style style:family CDATA #REQUIRED> +<!ATTLIST number:time-style style:family CDATA #REQUIRED> +<!ATTLIST number:boolean-style style:family CDATA #REQUIRED> +<!ATTLIST number:text-style style:family CDATA #REQUIRED> + +<!ATTLIST number:number-style number:language CDATA #IMPLIED> +<!ATTLIST number:currency-style number:language CDATA #IMPLIED> +<!ATTLIST number:percentage-style number:language CDATA #IMPLIED> +<!ATTLIST number:date-style number:language CDATA #IMPLIED> +<!ATTLIST number:time-style number:language CDATA #IMPLIED> +<!ATTLIST number:boolean-style number:language CDATA #IMPLIED> +<!ATTLIST number:text-style number:language CDATA #IMPLIED> + +<!ATTLIST number:number-style number:country CDATA #IMPLIED> +<!ATTLIST number:currency-style number:country CDATA #IMPLIED> +<!ATTLIST number:percentage-style number:country CDATA #IMPLIED> +<!ATTLIST number:date-style number:country CDATA #IMPLIED> +<!ATTLIST number:time-style number:country CDATA #IMPLIED> +<!ATTLIST number:boolean-style number:country CDATA #IMPLIED> +<!ATTLIST number:text-style number:country CDATA #IMPLIED> + +<!ATTLIST number:number-style number:title CDATA #IMPLIED> +<!ATTLIST number:currency-style number:title CDATA #IMPLIED> +<!ATTLIST number:percentage-style number:title CDATA #IMPLIED> +<!ATTLIST number:date-style number:title CDATA #IMPLIED> +<!ATTLIST number:time-style number:title CDATA #IMPLIED> +<!ATTLIST number:boolean-style number:title CDATA #IMPLIED> +<!ATTLIST number:text-style number:title CDATA #IMPLIED> + +<!ATTLIST number:number-style style:volatile %boolean; #IMPLIED> +<!ATTLIST number:currency-style style:volatile %boolean; #IMPLIED> +<!ATTLIST number:percentage-style style:volatile %boolean; #IMPLIED> +<!ATTLIST number:date-style style:volatile %boolean; #IMPLIED> +<!ATTLIST number:time-style style:volatile %boolean; #IMPLIED> +<!ATTLIST number:boolean-style style:volatile %boolean; #IMPLIED> +<!ATTLIST number:text-style style:volatile %boolean; #IMPLIED> + +<!ATTLIST number:currency-style number:automatic-order %boolean; "false"> +<!ATTLIST number:date-style number:automatic-order %boolean; "false"> + +<!ATTLIST number:date-style number:format-source (fixed|language) "fixed"> +<!ATTLIST number:time-style number:format-source (fixed|language) "fixed"> + +<!ATTLIST number:time-style number:truncate-on-overflow %boolean; "true"> + +<!ATTLIST number:number number:decimal-places %integer; #IMPLIED> +<!ATTLIST number:scientific-number number:decimal-places %integer; #IMPLIED> + +<!ATTLIST number:number number:min-integer-digits %integer; #IMPLIED> +<!ATTLIST number:scientific-number number:min-integer-digits %integer; #IMPLIED> +<!ATTLIST number:fraction number:min-integer-digits %integer; #IMPLIED> + +<!ATTLIST number:number number:grouping %boolean; "false"> +<!ATTLIST number:scientific-number number:grouping %boolean; "false"> +<!ATTLIST number:fraction number:grouping %boolean; "false"> + +<!ATTLIST number:number number:decimal-replacement CDATA #IMPLIED> + +<!ATTLIST number:scientific-number number:min-exponent-digits %integer; #IMPLIED> + +<!ATTLIST number:fraction number:min-numerator-digits %integer; #IMPLIED> + +<!ATTLIST number:fraction number:min-denominator-digits %integer; #IMPLIED> diff --git a/xmerge/source/palmtests/qa/comparator/dtd/drawing.mod b/xmerge/source/palmtests/qa/comparator/dtd/drawing.mod new file mode 100644 index 000000000000..aa0a25822a45 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/dtd/drawing.mod @@ -0,0 +1,837 @@ +<!-- + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + Copyright 2000, 2010 Oracle and/or its affiliates. + + OpenOffice.org - a multi-platform office productivity suite + + This file is part of OpenOffice.org. + + OpenOffice.org is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + OpenOffice.org 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 Lesser General Public License version 3 for more details + (a copy is included in the LICENSE file that accompanied this code). + + You should have received a copy of the GNU Lesser General Public License + version 3 along with OpenOffice.org. If not, see + <http://www.openoffice.org/license.html> + for a copy of the LGPLv3 License. + +--> + +<!ENTITY % points "CDATA" > +<!ENTITY % pathData "CDATA" > +<!ENTITY % gradient-style "(linear|axial|radial|ellipsoid|square|rectangular)" > +<!ENTITY % draw-position "svg:x %coordinate; #IMPLIED svg:y %coordinate; #IMPLIED"> +<!ENTITY % draw-end-position "table:end-cell-address %cell-address; #IMPLIED table:end-x %coordinate; #IMPLIED table:end-y %coordinate; #IMPLIED"> +<!ENTITY % draw-size "svg:width %coordinate; #IMPLIED svg:height %coordinate; #IMPLIED"> +<!ENTITY % draw-transform "draw:transform CDATA #IMPLIED"> +<!ENTITY % draw-viewbox "svg:viewBox CDATA #REQUIRED"> +<!ENTITY % draw-style-name "draw:style-name %styleName; #IMPLIED presentation:style-name %styleName; #IMPLIED draw:text-style-name %styleName; #IMPLIED"> +<!ENTITY % draw-shape-id "CDATA #IMPLIED" > +<!ENTITY % draw-text "(text:p|text:unordered-list|text:ordered-list)*"> +<!ENTITY % zindex "draw:z-index %nonNegativeInteger; #IMPLIED"> +<!ENTITY % distance "CDATA"> +<!ENTITY % rectanglePoint "(top-left|top|top-right|left|center|right|bottom-left|bottom|bottom-right)"> +<!ENTITY % vector3D "CDATA"> +<!ENTITY % text-anchor "text:anchor-type %anchorType; #IMPLIED text:anchor-page-number %positiveInteger; #IMPLIED"> +<!ENTITY % layerName "CDATA"> +<!ENTITY % table-background "table:table-background (true | false) #IMPLIED"> + +<!-- commont presentation shape attributes --> +<!ENTITY % presentation-style-name "presentation:style-name %styleName; #IMPLIED"> +<!ENTITY % presentation-classes "(title|outline|subtitle|text|graphic|object|chart|table|orgchart|page|notes)" > +<!-- ENTITY % presentation-class "presentation:class %presentation-classes; #IMPLIED" --> +<!ENTITY % presentation-class "presentation:class %presentation-classes; #IMPLIED presentation:placeholder (true|false) #IMPLIED presentation:user-transformed (true|false) #IMPLIED"> +<!ENTITY % presentationEffects "(none|fade|move|stripes|open|close|dissolve|wavyline|random|lines|laser|appear|hide|move-short|checkerboard|rotate|stretch)" > +<!ENTITY % presentationEffectDirections "(none|from-left|from-top|from-right|from-bottom|from-center|from-upper-left|from-upper-right|from-lower-left|from-lower-right|to-left|to-top|to-right|to-bottom|to-upper-left|to-upper-right|to-lower-right|to-lower-left|path|spiral-inward-left|spiral-inward-right|spiral-outward-left|spiral-outward-right|vertical|horizontal|to-center|clockwise|counter-clockwise)" > +<!ENTITY % presentationSpeeds "(slow|medium|fast)" > + +<!-- Drawing shapes --> +<!ELEMENT draw:rect ( office:events?, %draw-text; )> +<!ATTLIST draw:rect %draw-position; > +<!ATTLIST draw:rect %draw-end-position; > +<!ATTLIST draw:rect %table-background; > +<!ATTLIST draw:rect %draw-size; > +<!ATTLIST draw:rect %draw-style-name; > +<!ATTLIST draw:rect %draw-transform; > +<!ATTLIST draw:rect draw:corner-radius %nonNegativeLength; #IMPLIED> +<!ATTLIST draw:rect %zindex;> +<!ATTLIST draw:rect draw:id %draw-shape-id;> +<!ATTLIST draw:rect %text-anchor;> +<!ATTLIST draw:rect draw:layer %layerName; #IMPLIED> + +<!ELEMENT draw:line ( office:events?, %draw-text; )> +<!ATTLIST draw:line svg:x1 %length; #REQUIRED> +<!ATTLIST draw:line svg:y1 %length; #REQUIRED> +<!ATTLIST draw:line svg:x2 %length; #REQUIRED> +<!ATTLIST draw:line svg:y2 %length; #REQUIRED> +<!ATTLIST draw:line %draw-style-name; > +<!ATTLIST draw:line %draw-transform; > +<!ATTLIST draw:line %zindex;> +<!ATTLIST draw:line %draw-end-position; > +<!ATTLIST draw:line %table-background; > +<!ATTLIST draw:line draw:id %draw-shape-id;> +<!ATTLIST draw:line %text-anchor;> +<!ATTLIST draw:line draw:layer %layerName; #IMPLIED> + +<!ELEMENT draw:polyline ( office:events?, %draw-text; )> +<!ATTLIST draw:polyline %draw-position; > +<!ATTLIST draw:polyline %draw-size; > +<!ATTLIST draw:polyline %draw-viewbox; > +<!ATTLIST draw:polyline draw:points %points; #REQUIRED> +<!ATTLIST draw:polyline %draw-style-name; > +<!ATTLIST draw:polyline %draw-transform; > +<!ATTLIST draw:polyline %zindex;> +<!ATTLIST draw:polyline %draw-end-position; > +<!ATTLIST draw:polyline %table-background; > +<!ATTLIST draw:polyline draw:id %draw-shape-id;> +<!ATTLIST draw:polyline %text-anchor;> +<!ATTLIST draw:polyline draw:layer %layerName; #IMPLIED> + +<!ELEMENT draw:polygon ( office:events?, %draw-text; )> +<!ATTLIST draw:polygon %draw-position; > +<!ATTLIST draw:polygon %draw-end-position; > +<!ATTLIST draw:polygon %table-background; > +<!ATTLIST draw:polygon %draw-size; > +<!ATTLIST draw:polygon %draw-viewbox; > +<!ATTLIST draw:polygon draw:points %points; #REQUIRED > +<!ATTLIST draw:polygon %draw-style-name; > +<!ATTLIST draw:polygon %draw-transform; > +<!ATTLIST draw:polygon %zindex;> +<!ATTLIST draw:polygon draw:id %draw-shape-id;> +<!ATTLIST draw:polygon %text-anchor;> +<!ATTLIST draw:polygon draw:layer %layerName; #IMPLIED> + +<!ELEMENT draw:path ( office:events?, %draw-text; )> +<!ATTLIST draw:path %draw-position;> +<!ATTLIST draw:path %draw-end-position; > +<!ATTLIST draw:path %table-background; > +<!ATTLIST draw:path %draw-size; > +<!ATTLIST draw:path %draw-viewbox; > +<!ATTLIST draw:path svg:d %pathData; #REQUIRED > +<!ATTLIST draw:path %draw-style-name; > +<!ATTLIST draw:path %draw-transform; > +<!ATTLIST draw:path %zindex;> +<!ATTLIST draw:path draw:id %draw-shape-id;> +<!ATTLIST draw:path %text-anchor;> +<!ATTLIST draw:path draw:layer %layerName; #IMPLIED> + +<!ELEMENT draw:circle ( office:events?, %draw-text; )> +<!ATTLIST draw:circle %draw-position; > +<!ATTLIST draw:circle %draw-size; > +<!ATTLIST draw:circle %draw-style-name; > +<!ATTLIST draw:circle %draw-transform; > +<!ATTLIST draw:circle %zindex;> +<!ATTLIST draw:circle %draw-end-position; > +<!ATTLIST draw:circle %table-background; > +<!ATTLIST draw:circle draw:id %draw-shape-id;> +<!ATTLIST draw:circle draw:kind (full|section|cut|arc) "full"> +<!ATTLIST draw:circle draw:start-angle %nonNegativeInteger; #IMPLIED> +<!ATTLIST draw:circle draw:end-angle %nonNegativeInteger; #IMPLIED> +<!ATTLIST draw:circle %text-anchor;> +<!ATTLIST draw:circle draw:layer %layerName; #IMPLIED> + +<!ELEMENT draw:ellipse ( office:events?, %draw-text; )> +<!ATTLIST draw:ellipse %draw-position; > +<!ATTLIST draw:ellipse %draw-size; > +<!ATTLIST draw:ellipse %draw-style-name; > +<!ATTLIST draw:ellipse %draw-transform; > +<!ATTLIST draw:ellipse %zindex;> +<!ATTLIST draw:ellipse %draw-end-position; > +<!ATTLIST draw:ellipse %table-background; > +<!ATTLIST draw:ellipse draw:id %draw-shape-id;> +<!ATTLIST draw:ellipse draw:kind (full|section|cut|arc) "full"> +<!ATTLIST draw:ellipse draw:start-angle %nonNegativeInteger; #IMPLIED> +<!ATTLIST draw:ellipse draw:end-angle %nonNegativeInteger; #IMPLIED> +<!ATTLIST draw:ellipse %text-anchor;> +<!ATTLIST draw:ellipse draw:layer %layerName; #IMPLIED> + +<!ELEMENT draw:connector ( office:events?, %draw-text;)> +<!ATTLIST draw:connector draw:type (standard|lines|line|curve) "standard"> +<!ATTLIST draw:connector draw:line-skew CDATA #IMPLIED> +<!ATTLIST draw:connector %draw-style-name;> +<!ATTLIST draw:connector svg:x1 %coordinate; #REQUIRED> +<!ATTLIST draw:connector svg:y1 %coordinate; #REQUIRED> +<!ATTLIST draw:connector svg:x2 %coordinate; #REQUIRED> +<!ATTLIST draw:connector svg:y2 %coordinate; #REQUIRED> +<!ATTLIST draw:connector draw:start-shape %draw-shape-id;> +<!ATTLIST draw:connector draw:start-glue-point %integer; #IMPLIED> +<!ATTLIST draw:connector draw:end-shape %draw-shape-id;> +<!ATTLIST draw:connector draw:end-glue-point %integer; #IMPLIED> +<!ATTLIST draw:connector %zindex;> +<!ATTLIST draw:connector %draw-end-position; > +<!ATTLIST draw:connector %table-background; > +<!ATTLIST draw:connector draw:id %draw-shape-id;> +<!ATTLIST draw:connector %text-anchor;> +<!ATTLIST draw:connector draw:layer %layerName; #IMPLIED> + +<!ELEMENT draw:control EMPTY> +<!ATTLIST draw:control %draw-style-name;> +<!ATTLIST draw:control %draw-position; > +<!ATTLIST draw:control %draw-size; > +<!ATTLIST draw:control %control-id; > +<!ATTLIST draw:control %zindex;> +<!ATTLIST draw:control %draw-end-position; > +<!ATTLIST draw:control %table-background; > +<!ATTLIST draw:control draw:id %draw-shape-id;> +<!ATTLIST draw:control %text-anchor;> +<!ATTLIST draw:control draw:layer %layerName; #IMPLIED> + +<!ELEMENT draw:g ( office:events?, (%shapes;)* ) > +<!ATTLIST draw:g %draw-transform; > +<!ATTLIST draw:g %draw-style-name; > +<!ATTLIST draw:g %zindex;> +<!ATTLIST draw:g %draw-end-position; > +<!ATTLIST draw:g %table-background; > +<!ATTLIST draw:g draw:id %draw-shape-id;> +<!ATTLIST draw:g %text-anchor;> +<!ATTLIST draw:g draw:layer %layerName; #IMPLIED> + +<!ELEMENT draw:page-thumbnail EMPTY> +<!ATTLIST draw:page-thumbnail draw:page-number %positiveInteger; #IMPLIED> +<!ATTLIST draw:page-thumbnail %draw-position; > +<!ATTLIST draw:page-thumbnail %draw-size; > +<!ATTLIST draw:page-thumbnail %draw-style-name; > +<!ATTLIST draw:page-thumbnail %presentation-class; > +<!ATTLIST draw:page-thumbnail %zindex;> +<!ATTLIST draw:page-thumbnail %draw-end-position; > +<!ATTLIST draw:page-thumbnail %table-background; > +<!ATTLIST draw:page-thumbnail draw:id %draw-shape-id;> +<!ATTLIST draw:page-thumbnail %text-anchor;> +<!ATTLIST draw:page-thumbnail draw:layer %layerName; #IMPLIED> + +<!ELEMENT draw:caption ( office:events?, %draw-text;)> +<!ATTLIST draw:caption %draw-position; > +<!ATTLIST draw:caption %draw-end-position; > +<!ATTLIST draw:caption %table-background; > +<!ATTLIST draw:caption %draw-size; > +<!ATTLIST draw:caption %draw-style-name; > +<!ATTLIST draw:caption %draw-transform; > +<!ATTLIST draw:caption draw:caption-point-x %coordinate; #IMPLIED> +<!ATTLIST draw:caption draw:caption-point-y %coordinate; #IMPLIED> +<!ATTLIST draw:caption %zindex;> +<!ATTLIST draw:caption draw:id %draw-shape-id;> +<!ATTLIST draw:caption %text-anchor;> +<!ATTLIST draw:caption draw:layer %layerName; #IMPLIED> +<!ATTLIST draw:caption draw:corner-radius %nonNegativeLength; #IMPLIED> + +<!ELEMENT draw:measure ( office:events?, %draw-text;)> +<!ATTLIST draw:measure svg:x1 %coordinate; #REQUIRED> +<!ATTLIST draw:measure svg:y1 %coordinate; #REQUIRED> +<!ATTLIST draw:measure svg:x2 %coordinate; #REQUIRED> +<!ATTLIST draw:measure svg:y2 %coordinate; #REQUIRED> +<!ATTLIST draw:measure %draw-end-position; > +<!ATTLIST draw:measure %table-background; > +<!ATTLIST draw:measure %draw-style-name; > +<!ATTLIST draw:measure %draw-transform; > +<!ATTLIST draw:measure %zindex;> +<!ATTLIST draw:measure draw:id %draw-shape-id;> +<!ATTLIST draw:measure %text-anchor;> +<!ATTLIST draw:measure draw:layer %layerName; #IMPLIED> + +<!-- graphic style elements --> +<!ELEMENT draw:gradient EMPTY > +<!ATTLIST draw:gradient draw:name %styleName; #REQUIRED> +<!ATTLIST draw:gradient draw:style %gradient-style; #REQUIRED> +<!ATTLIST draw:gradient draw:cx %coordinate; #IMPLIED> +<!ATTLIST draw:gradient draw:cy %coordinate; #IMPLIED> +<!ATTLIST draw:gradient draw:start-color %color; #IMPLIED> +<!ATTLIST draw:gradient draw:end-color %color; #IMPLIED> +<!ATTLIST draw:gradient draw:start-intensity %percentage; #IMPLIED> +<!ATTLIST draw:gradient draw:end-intensity %percentage; #IMPLIED> +<!ATTLIST draw:gradient draw:angle %integer; #IMPLIED> +<!ATTLIST draw:gradient draw:border %percentage; #IMPLIED> + +<!ELEMENT draw:hatch EMPTY > +<!ATTLIST draw:hatch draw:name %styleName; #REQUIRED> +<!ATTLIST draw:hatch draw:style (single|double|triple) #REQUIRED > +<!ATTLIST draw:hatch draw:color %color; #IMPLIED> +<!ATTLIST draw:hatch draw:distance %length; #IMPLIED> +<!ATTLIST draw:hatch draw:rotation %integer; #IMPLIED> + + +<!ELEMENT draw:fill-image EMPTY > +<!ATTLIST draw:fill-image draw:name %styleName; #REQUIRED> +<!ATTLIST draw:fill-image xlink:href %uriReference; #REQUIRED> +<!ATTLIST draw:fill-image xlink:type (simple) #IMPLIED> +<!ATTLIST draw:fill-image xlink:show (embed) #IMPLIED> +<!ATTLIST draw:fill-image xlink:actuate (onLoad) #IMPLIED> +<!ATTLIST draw:fill-image svg:width %length; #IMPLIED> +<!ATTLIST draw:fill-image svg:height %length; #IMPLIED> + +<!ELEMENT draw:transparency EMPTY> +<!ATTLIST draw:transparency draw:name %styleName; #REQUIRED> +<!ATTLIST draw:transparency draw:style %gradient-style; #REQUIRED> +<!ATTLIST draw:transparency draw:cx %coordinate; #IMPLIED> +<!ATTLIST draw:transparency draw:cy %coordinate; #IMPLIED> +<!ATTLIST draw:transparency draw:start %percentage; #IMPLIED> +<!ATTLIST draw:transparency draw:end %percentage; #IMPLIED> +<!ATTLIST draw:transparency draw:angle %integer; #IMPLIED> +<!ATTLIST draw:transparency draw:border %percentage; #IMPLIED> + +<!ELEMENT draw:marker EMPTY> +<!ATTLIST draw:marker draw:name %styleName; #REQUIRED> +<!ATTLIST draw:marker %draw-viewbox; > +<!ATTLIST draw:marker svg:d %pathData; #REQUIRED> + +<!ELEMENT draw:stroke-dash EMPTY> +<!ATTLIST draw:stroke-dash draw:name %styleName; #REQUIRED> +<!ATTLIST draw:stroke-dash draw:style (rect|round) #IMPLIED> +<!ATTLIST draw:stroke-dash draw:dots1 %integer; #IMPLIED> +<!ATTLIST draw:stroke-dash draw:dots1-length %length; #IMPLIED> +<!ATTLIST draw:stroke-dash draw:dots2 %integer; #IMPLIED> +<!ATTLIST draw:stroke-dash draw:dots2-length %length; #IMPLIED> +<!ATTLIST draw:stroke-dash draw:distance %length; #IMPLIED> + +<!-- stroke attributes --> +<!ATTLIST style:properties draw:stroke (none|dash|solid) #IMPLIED> +<!ATTLIST style:properties draw:stroke-dash CDATA #IMPLIED> +<!ATTLIST style:properties svg:stroke-width %length; #IMPLIED> +<!ATTLIST style:properties svg:stroke-color %color; #IMPLIED> +<!ATTLIST style:properties draw:marker-start %styleName; #IMPLIED> +<!ATTLIST style:properties draw:marker-end %styleName; #IMPLIED> +<!ATTLIST style:properties draw:marker-start-width %length; #IMPLIED> +<!ATTLIST style:properties draw:marker-end-width %length; #IMPLIED> +<!ATTLIST style:properties draw:marker-start-center %boolean; #IMPLIED> +<!ATTLIST style:properties draw:marker-end-center %boolean; #IMPLIED> +<!ATTLIST style:properties svg:stroke-opacity %floatOrPercentage; #IMPLIED> +<!ATTLIST style:properties svg:stroke-linejoin (miter|round|bevel|middle|none|inherit) #IMPLIED> + +<!-- text attributes --> +<!ATTLIST style:properties draw:auto-grow-width %boolean; #IMPLIED> +<!ATTLIST style:properties draw:auto-grow-height %boolean; #IMPLIED> +<!ATTLIST style:properties draw:fit-to-size %boolean; #IMPLIED> +<!ATTLIST style:properties draw:fit-to-contour %boolean; #IMPLIED> +<!ATTLIST style:properties draw:textarea-horizontal-align ( left | center | right | justify ) #IMPLIED> +<!ATTLIST style:properties draw:textarea-vertical-align ( top | middle | bottom ) #IMPLIED> + +<!-- fill attributes --> +<!ATTLIST style:properties draw:fill (none|solid|bitmap|gradient|hatch) #IMPLIED> +<!ATTLIST style:properties draw:fill-color %color; #IMPLIED> +<!ATTLIST style:properties draw:fill-gradient-name %styleName; #IMPLIED> +<!ATTLIST style:properties draw:gradient-step-count CDATA #IMPLIED> +<!ATTLIST style:properties draw:fill-hatch-name %styleName; #IMPLIED> +<!ATTLIST style:properties draw:fill-hatch-solid %boolean; #IMPLIED> +<!ATTLIST style:properties draw:fill-image-name %styleName; #IMPLIED> +<!ATTLIST style:properties style:repeat (no-repeat|repeat|stretch) #IMPLIED> +<!ATTLIST style:properties draw:fill-image-width %lengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties draw:fill-image-height %lengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties draw:fill-image-ref-point-x %percentage; #IMPLIED> +<!ATTLIST style:properties draw:fill-image-ref-point-y %percentage; #IMPLIED> +<!ATTLIST style:properties draw:fill-image-ref-point %rectanglePoint; #IMPLIED> +<!ATTLIST style:properties draw:tile-repeat-offset CDATA #IMPLIED> +<!ATTLIST style:properties draw:transparency %percentage; #IMPLIED> +<!ATTLIST style:properties draw:transparency-name %styleName; #IMPLIED> + +<!-- graphic attributes --> +<!ATTLIST style:properties draw:color-mode (greyscale|mono|watermark|standard) #IMPLIED> +<!ATTLIST style:properties draw:luminance %percentage; #IMPLIED> +<!ATTLIST style:properties draw:contrast %percentage; #IMPLIED> +<!ATTLIST style:properties draw:gamma %percentage; #IMPLIED> +<!ATTLIST style:properties draw:red %percentage; #IMPLIED> +<!ATTLIST style:properties draw:green %percentage; #IMPLIED> +<!ATTLIST style:properties draw:blue %percentage; #IMPLIED> +<!ATTLIST style:properties draw:color-inversion %boolean; #IMPLIED> + +<!-- shadow attributes --> +<!ATTLIST style:properties draw:shadow (visible|hidden) #IMPLIED> +<!ATTLIST style:properties draw:shadow-offset-x %length; #IMPLIED> +<!ATTLIST style:properties draw:shadow-offset-y %length; #IMPLIED> +<!ATTLIST style:properties draw:shadow-color %color; #IMPLIED> +<!ATTLIST style:properties draw:shadow-transparency CDATA #IMPLIED> + +<!-- connector attributes --> +<!ATTLIST style:properties draw:start-line-spacing-horizontal %distance; #IMPLIED> +<!ATTLIST style:properties draw:start-line-spacing-vertical %distance; #IMPLIED> +<!ATTLIST style:properties draw:end-line-spacing-horizontal %distance; #IMPLIED> +<!ATTLIST style:properties draw:end-line-spacing-vertical %distance; #IMPLIED> + +<!-- measure attributes --> +<!ATTLIST style:properties draw:line-distance %distance; #IMPLIED> +<!ATTLIST style:properties draw:guide-overhang %distance; #IMPLIED> +<!ATTLIST style:properties draw:guide-distance %distance; #IMPLIED> +<!ATTLIST style:properties draw:start-guide %distance; #IMPLIED> +<!ATTLIST style:properties draw:end-guide %distance; #IMPLIED> +<!ATTLIST style:properties draw:measure-align (automatic|left-outside|inside|right-outside) #IMPLIED> +<!ATTLIST style:properties draw:measure-vertical-align (automatic|above|below|center) #IMPLIED> +<!ATTLIST style:properties draw:unit (automatic|mm|cm|m|km|pt|pc|inch|ft|mi) #IMPLIED> +<!ATTLIST style:properties draw:show-unit %boolean; #IMPLIED> +<!ATTLIST style:properties draw:placing (below|above) #IMPLIED> +<!ATTLIST style:properties draw:parallel %boolean; #IMPLIED> + +<!-- frame attributes --> +<!ATTLIST style:properties draw:frame-display-scrollbar %boolean; #IMPLIED> +<!ATTLIST style:properties draw:frame-display-border %boolean; #IMPLIED> +<!ATTLIST style:properties draw:frame-margin-horizontal %nonNegativePixelLength; #IMPLIED> +<!ATTLIST style:properties draw:frame-margin-vertical %nonNegativePixelLength; #IMPLIED> +<!ATTLIST style:properties draw:size-protect %boolean; #IMPLIED> +<!ATTLIST style:properties draw:move-protect %boolean; #IMPLIED> + +<!-- ole object attributes --> +<!ATTLIST style:properties draw:visible-area-left %nonNegativeLength; #IMPLIED> +<!ATTLIST style:properties draw:visible-area-top %nonNegativeLength; #IMPLIED> +<!ATTLIST style:properties draw:visible-area-width %positiveLength; #IMPLIED> +<!ATTLIST style:properties draw:visible-area-height %positiveLength; #IMPLIED> + +<!-- fontwork attributes --> +<!ATTLIST style:properties draw:fontwork-style (rotate|upright|slant-x|slant-y|none) #IMPLIED> +<!ATTLIST style:properties draw:fontwork-adjust (left|right|autosize|center) #IMPLIED> +<!ATTLIST style:properties draw:fontwork-distance %distance; #IMPLIED> +<!ATTLIST style:properties draw:fontwork-start %distance; #IMPLIED> +<!ATTLIST style:properties draw:fontwork-mirror %boolean; #IMPLIED> +<!ATTLIST style:properties draw:fontwork-outline %boolean; #IMPLIED> +<!ATTLIST style:properties draw:fontwork-shadow (normal|slant|none) #IMPLIED> +<!ATTLIST style:properties draw:fontwork-shadow-color %color; #IMPLIED> +<!ATTLIST style:properties draw:fontwork-shadow-offset-x %distance; #IMPLIED> +<!ATTLIST style:properties draw:fontwork-shadow-offset-y %distance; #IMPLIED> +<!ATTLIST style:properties draw:fontwork-form (none|top-circle|bottom-circle|left-circle|right-circle|top-arc|bottom-arc|left-arc|right-arc|button1|button2|button3|button4) #IMPLIED> +<!ATTLIST style:properties draw:fontwork-hide-form %boolean; #IMPLIED> +<!ATTLIST style:properties draw:fontwork-shadow-transparence %percentage; #IMPLIED> + +<!-- caption attributes --> +<!ATTLIST style:properties draw:caption-type (straight-line|angled-line|angled-connector-line) #IMPLIED> +<!ATTLIST style:properties draw:caption-angle-type (fixed|free) #IMPLIED> +<!ATTLIST style:properties draw:caption-angle %nonNegativeInteger; #IMPLIED> +<!ATTLIST style:properties draw:caption-gap %distance; #IMPLIED> +<!ATTLIST style:properties draw:caption-escape-direction (horizontal|vertical|auto) #IMPLIED> +<!ATTLIST style:properties draw:caption-escape %lengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties draw:caption-line-length %distance; #IMPLIED> +<!ATTLIST style:properties draw:caption-fit-line-length %boolean; #IMPLIED> + +<!-- Animations --> +<!ELEMENT presentation:sound EMPTY> +<!ATTLIST presentation:sound xlink:href %uriReference; #REQUIRED> +<!ATTLIST presentation:sound xlink:type (simple) #FIXED "simple"> +<!ATTLIST presentation:sound xlink:show (new|replace) #IMPLIED> +<!ATTLIST presentation:sound xlink:actuate (onRequest) "onRequest"> +<!ATTLIST presentation:sound presentation:play-full %boolean; #IMPLIED> + +<!ELEMENT presentation:show-shape (presentation:sound)?> +<!ATTLIST presentation:show-shape draw:shape-id CDATA #REQUIRED> +<!ATTLIST presentation:show-shape presentation:effect %presentationEffects; "none"> +<!ATTLIST presentation:show-shape presentation:direction %presentationEffectDirections; "none"> +<!ATTLIST presentation:show-shape presentation:speed %presentationSpeeds; "medium"> +<!ATTLIST presentation:show-shape presentation:start-scale %percentage; "100%"> +<!ATTLIST presentation:show-shape presentation:path-id CDATA #IMPLIED > + +<!ELEMENT presentation:show-text (presentation:sound)?> +<!ATTLIST presentation:show-text draw:shape-id CDATA #REQUIRED> +<!ATTLIST presentation:show-text presentation:effect %presentationEffects; "none"> +<!ATTLIST presentation:show-text presentation:direction %presentationEffectDirections; "none"> +<!ATTLIST presentation:show-text presentation:speed %presentationSpeeds; "medium"> +<!ATTLIST presentation:show-text presentation:start-scale %percentage; "100%"> +<!ATTLIST presentation:show-text presentation:path-id CDATA #IMPLIED > + +<!ELEMENT presentation:hide-shape (presentation:sound)?> +<!ATTLIST presentation:hide-shape draw:shape-id CDATA #REQUIRED> +<!ATTLIST presentation:hide-shape presentation:effect %presentationEffects; "none"> +<!ATTLIST presentation:hide-shape presentation:direction %presentationEffectDirections; "none"> +<!ATTLIST presentation:hide-shape presentation:speed %presentationSpeeds; "medium"> +<!ATTLIST presentation:hide-shape presentation:start-scale %percentage; "100%"> +<!ATTLIST presentation:hide-shape presentation:path-id CDATA #IMPLIED > + +<!ELEMENT presentation:hide-text (presentation:sound)?> +<!ATTLIST presentation:hide-text draw:shape-id CDATA #REQUIRED> +<!ATTLIST presentation:hide-text presentation:effect %presentationEffects; "none"> +<!ATTLIST presentation:hide-text presentation:direction %presentationEffectDirections; "none"> +<!ATTLIST presentation:hide-text presentation:speed %presentationSpeeds; "medium"> +<!ATTLIST presentation:hide-text presentation:start-scale %percentage; "100%"> +<!ATTLIST presentation:hide-text presentation:path-id CDATA #IMPLIED > + +<!ELEMENT presentation:dim (presentation:sound)?> +<!ATTLIST presentation:dim draw:shape-id CDATA #REQUIRED> +<!ATTLIST presentation:dim draw:color %color; #REQUIRED> + +<!ELEMENT presentation:play EMPTY> +<!ATTLIST presentation:play draw:shape-id CDATA #REQUIRED> +<!ATTLIST presentation:play presentation:speed %presentationSpeeds; "medium"> + +<!ELEMENT presentation:animations (presentation:show-shape|presentation:show-text|presentation:hide-shape|presentation:hide-text|presentation:dim|presentation:play)*> + +<!ELEMENT presentation:show EMPTY> +<!ATTLIST presentation:show presentation:name %styleName; #REQUIRED> +<!ATTLIST presentation:show presentation:pages CDATA #REQUIRED> + +<!ELEMENT presentation:settings (presentation:show)*> +<!ATTLIST presentation:settings presentation:start-page %styleName; #IMPLIED> +<!ATTLIST presentation:settings presentation:show %styleName; #IMPLIED> +<!ATTLIST presentation:settings presentation:full-screen %boolean; "true"> +<!ATTLIST presentation:settings presentation:endless %boolean; "false"> +<!ATTLIST presentation:settings presentation:pause %timeDuration; #IMPLIED> +<!ATTLIST presentation:settings presentation:show-logo %boolean; "false"> +<!ATTLIST presentation:settings presentation:force-manual %boolean; "false"> +<!ATTLIST presentation:settings presentation:mouse-visible %boolean; "true"> +<!ATTLIST presentation:settings presentation:mouse-as-pen %boolean; "false"> +<!ATTLIST presentation:settings presentation:start-with-navigator %boolean; "false"> +<!ATTLIST presentation:settings presentation:animations (enabled|disabled) "enabled"> +<!ATTLIST presentation:settings presentation:stay-on-top %boolean; "false"> +<!ATTLIST presentation:settings presentation:transition-on-click (enabled|disabled) "enabled"> + +<!-- Drawing page --> +<!ELEMENT draw:page (office:forms?,(%shapes;)*,presentation:animations?,presentation:notes?)> +<!ATTLIST draw:page draw:name %string; #IMPLIED> +<!ATTLIST draw:page draw:style-name %styleName; #IMPLIED> +<!ATTLIST draw:page draw:master-page-name %styleName; #REQUIRED> +<!ATTLIST draw:page presentation:presentation-page-layout-name %styleName; #IMPLIED> +<!ATTLIST draw:page draw:id %nonNegativeInteger; #IMPLIED> + +<!-- Presentation notes --> +<!ELEMENT presentation:notes (%shapes;)*> + + +<!-- presentation page layouts --> +<!ELEMENT style:presentation-page-layout (presentation:placeholder)* > +<!ATTLIST style:presentation-page-layout style:name %styleName; #REQUIRED> +<!ELEMENT presentation:placeholder EMPTY > +<!ATTLIST presentation:placeholder presentation:object (title|outline|subtitle|text|graphic|object|chart|orgchart|page|notes|handout) #REQUIRED> +<!ATTLIST presentation:placeholder svg:x %coordinateOrPercentage; #REQUIRED> +<!ATTLIST presentation:placeholder svg:y %coordinateOrPercentage; #REQUIRED> +<!ATTLIST presentation:placeholder svg:width %lengthOrPercentage; #REQUIRED> +<!ATTLIST presentation:placeholder svg:height %lengthOrPercentage; #REQUIRED> + +<!-- presentation page attributes --> +<!ATTLIST style:properties presentation:transition-type (manual|automatic|semi-automatic) #IMPLIED > +<!ATTLIST style:properties presentation:transition-style (none|fade-from-left|fade-from-top|fade-from-right|fade-from-bottom|fade-to-center|fade-from-center|move-from-left|move-from-top|move-from-right|move-from-bottom|roll-from-top|roll-from-left|roll-from-right|roll-from-bottom|vertical-stripes|horizontal-stripes|clockwise|counterclockwise|fade-from-upperleft|fade-from-upperright|fade-from-lowerleft|fade-from-lowerright|close-vertical|close-horizontal|open-vertical|open-horizontal|spiralin-left|spiralin-right|spiralout-left|spiralout-right|dissolve|wavyline-from-left|wavyline-from-top|wavyline-from-right|wavyline-from-bottom|random|stretch-from-left|stretch-from-top|stretch-from-right|stretch-from-bottom|vertical-lines|horizontal-lines) #IMPLIED > +<!ATTLIST style:properties presentation:transition-speed %presentationSpeeds; #IMPLIED > +<!ATTLIST style:properties presentation:duration %timeDuration; #IMPLIED> +<!ATTLIST style:properties presentation:visibility (visible|hidden) #IMPLIED> +<!ATTLIST style:properties draw:background-size (full|border) #IMPLIED> +<!ATTLIST style:properties presentation:background-objects-visible %boolean; #IMPLIED> +<!ATTLIST style:properties presentation:background-visible %boolean; #IMPLIED> + + +<!-- text boxes --> +<!ELEMENT draw:text-box (office:events?,draw:image-map?, + (text:h|text:p|text:ordered-list| + text:unordered-list|table:table|chart:chart| + draw:a|draw:text-box|draw:image)*)> +<!ATTLIST draw:text-box %draw-style-name;> +<!ATTLIST draw:text-box %draw-transform; > +<!ATTLIST draw:text-box draw:name %string; #IMPLIED> +<!ATTLIST draw:text-box draw:chain-next-name %string; #IMPLIED> + +<!ATTLIST draw:text-box %text-anchor;> +<!ATTLIST draw:text-box %draw-position;> +<!ATTLIST draw:text-box %draw-end-position; > +<!ATTLIST draw:text-box %table-background; > +<!ATTLIST draw:text-box svg:width %lengthOrPercentage; #IMPLIED> +<!ATTLIST draw:text-box svg:height %lengthOrPercentage; #IMPLIED> +<!ATTLIST draw:text-box fo:min-height %lengthOrPercentage; #IMPLIED> +<!ATTLIST draw:text-box %zindex;> +<!ATTLIST draw:text-box %presentation-class; > +<!ATTLIST draw:text-box %draw-transform; > +<!ATTLIST draw:text-box draw:id %draw-shape-id;> +<!ATTLIST draw:text-box draw:layer %layerName; #IMPLIED> + +<!-- image --> +<!ELEMENT draw:image (office:binary-data?,office:events?,draw:image-map?,svg:desc?,(draw:contour-polygon|draw:contour-path)?)> +<!ATTLIST draw:image %draw-style-name;> +<!ATTLIST draw:image draw:name %string; #IMPLIED> +<!ATTLIST draw:image xlink:href %uriReference; #IMPLIED> +<!ATTLIST draw:image xlink:type (simple) #IMPLIED> +<!ATTLIST draw:image xlink:show (embed) #IMPLIED> +<!ATTLIST draw:image xlink:actuate (onLoad) #IMPLIED> +<!ATTLIST draw:image draw:filter-name %string; #IMPLIED> +<!ATTLIST draw:image %text-anchor;> +<!ATTLIST draw:image %draw-position;> +<!ATTLIST draw:image %draw-end-position; > +<!ATTLIST draw:image %table-background; > +<!ATTLIST draw:image svg:width %lengthOrPercentage; #IMPLIED> +<!ATTLIST draw:image svg:height %lengthOrPercentage; #IMPLIED> +<!ATTLIST draw:image %presentation-class; > +<!ATTLIST draw:image %zindex;> +<!ATTLIST draw:image draw:id %draw-shape-id;> +<!ATTLIST draw:image draw:layer %layerName; #IMPLIED> + +<!-- objects --> +<!ELEMENT draw:thumbnail EMPTY> +<!ATTLIST draw:thumbnail xlink:href %uriReference; #REQUIRED> +<!ATTLIST draw:thumbnail xlink:type (simple) #IMPLIED> +<!ATTLIST draw:thumbnail xlink:show (embed) #IMPLIED> +<!ATTLIST draw:thumbnail xlink:actuate (onLoad) #IMPLIED> + +<!ELEMENT math:math ANY> <!-- dummy (we have no MathML DTD currently)--> +<!ELEMENT draw:object (draw:thumbnail?,(office:document|math:math)?,office:events?, draw:image-map?, svg:desc?,(draw:contour-polygon|draw:contour-path)?)> +<!ATTLIST draw:object %draw-style-name;> +<!ATTLIST draw:object draw:name %string; #IMPLIED> +<!ATTLIST draw:object xlink:href %uriReference; #IMPLIED> +<!ATTLIST draw:object xlink:type (simple) #IMPLIED> +<!ATTLIST draw:object xlink:show (embed) #IMPLIED> +<!ATTLIST draw:object xlink:actuate (onLoad) #IMPLIED> +<!ATTLIST draw:object %text-anchor;> +<!ATTLIST draw:object %draw-position;> +<!ATTLIST draw:object %draw-end-position; > +<!ATTLIST draw:object %table-background; > +<!ATTLIST draw:object svg:width %lengthOrPercentage; #IMPLIED> +<!ATTLIST draw:object svg:height %lengthOrPercentage; #IMPLIED> +<!ATTLIST draw:object %presentation-class; > +<!ATTLIST draw:object %zindex;> +<!ATTLIST draw:object draw:id %draw-shape-id;> +<!ATTLIST draw:object draw:layer %layerName; #IMPLIED> +<!ATTLIST draw:object draw:notify-on-update-of-ranges %string; #IMPLIED> + +<!ELEMENT draw:object-ole (office:binary-data?|office:events?|draw:image-map?|svg:desc?|draw:contour-polygon?|draw:contour-path?|draw:thumbnail?)> +<!ATTLIST draw:object-ole draw:class-id CDATA #IMPLIED> +<!ATTLIST draw:object-ole %draw-style-name;> +<!ATTLIST draw:object-ole draw:name %string; #IMPLIED> +<!ATTLIST draw:object-ole xlink:href %uriReference; #IMPLIED> +<!ATTLIST draw:object-ole xlink:type (simple) #IMPLIED> +<!ATTLIST draw:object-ole xlink:show (embed) #IMPLIED> +<!ATTLIST draw:object-ole xlink:actuate (onLoad) #IMPLIED> +<!ATTLIST draw:object-ole %text-anchor;> +<!ATTLIST draw:object-ole %draw-position;> +<!ATTLIST draw:object-ole %draw-end-position; > +<!ATTLIST draw:object-ole %table-background; > +<!ATTLIST draw:object-ole svg:width %lengthOrPercentage; #IMPLIED> +<!ATTLIST draw:object-ole svg:height %lengthOrPercentage; #IMPLIED> +<!ATTLIST draw:object-ole %presentation-class; > +<!ATTLIST draw:object-ole %zindex;> +<!ATTLIST draw:object-ole draw:id %draw-shape-id;> +<!ATTLIST draw:object-ole draw:layer %layerName; #IMPLIED> + +<!ELEMENT svg:desc (#PCDATA)> + +<!ELEMENT draw:contour-polygon EMPTY> +<!ATTLIST draw:contour-polygon svg:width %coordinate; #REQUIRED> +<!ATTLIST draw:contour-polygon svg:height %coordinate; #REQUIRED> +<!ATTLIST draw:contour-polygon %draw-viewbox;> +<!ATTLIST draw:contour-polygon svg:points %points; #REQUIRED> + +<!ELEMENT draw:contour-path EMPTY> +<!ATTLIST draw:contour-path svg:width %coordinate; #REQUIRED> +<!ATTLIST draw:contour-path svg:height %coordinate; #REQUIRED> +<!ATTLIST draw:contour-path %draw-viewbox;> +<!ATTLIST draw:contour-path svg:d %pathData; #REQUIRED> + +<!-- hyperlink --> +<!ELEMENT draw:a (draw:image|draw:text-box)> +<!ATTLIST draw:a xlink:href %uriReference; #REQUIRED> +<!ATTLIST draw:a xlink:type (simple) #FIXED "simple"> +<!ATTLIST draw:a xlink:show (new|replace) #IMPLIED> +<!ATTLIST draw:a xlink:actuate (onRequest) "onRequest"> +<!ATTLIST draw:a office:name %string; #IMPLIED> +<!ATTLIST draw:a office:target-frame-name %string; #IMPLIED> +<!ATTLIST draw:a office:server-map %boolean; "false"> + +<!-- 3d properties --> +<!ATTLIST style:properties dr3d:horizontal-segments %nonNegativeInteger; #IMPLIED> +<!ATTLIST style:properties dr3d:vertical-segments %nonNegativeInteger; #IMPLIED> +<!ATTLIST style:properties dr3d:edge-rounding %percentage; #IMPLIED> +<!ATTLIST style:properties dr3d:edge-rounding-mode (correct|attractive) #IMPLIED> +<!ATTLIST style:properties dr3d:back-scale %percentage; #IMPLIED> +<!ATTLIST style:properties dr3d:end-angle %nonNegativeInteger; #IMPLIED> +<!ATTLIST style:properties dr3d:depth %length; #IMPLIED> +<!ATTLIST style:properties dr3d:backface-culling (enabled|disabled) #IMPLIED> +<!ATTLIST style:properties dr3d:lighting-mode (standard|double-sided) #IMPLIED> +<!ATTLIST style:properties dr3d:normals-kind (object|flat|sphere) #IMPLIED> +<!ATTLIST style:properties dr3d:normals-direction (normal|inverse) #IMPLIED> +<!ATTLIST style:properties dr3d:texture-generation-mode-x (object|parallel|sphere) #IMPLIED> +<!ATTLIST style:properties dr3d:texture-generation-mode-y (object|parallel|sphere) #IMPLIED> +<!ATTLIST style:properties dr3d:texture-kind (luminance|intesity|color) #IMPLIED> +<!ATTLIST style:properties dr3d:texture-filter (enabled|disabled) #IMPLIED> +<!ATTLIST style:properties dr3d:texture-mode (replace|modulate|blend) #IMPLIED> +<!ATTLIST style:properties dr3d:ambient-color %color; #IMPLIED> +<!ATTLIST style:properties dr3d:emissive-color %color; #IMPLIED> +<!ATTLIST style:properties dr3d:specular-color %color; #IMPLIED> +<!ATTLIST style:properties dr3d:diffuse-color %color; #IMPLIED> +<!ATTLIST style:properties dr3d:shininess %percentage; #IMPLIED> +<!ATTLIST style:properties dr3d:shadow (visible|hidden) #IMPLIED> + +<!ELEMENT dr3d:light EMPTY> +<!ATTLIST dr3d:light dr3d:diffuse-color %color; #IMPLIED> +<!ATTLIST dr3d:light dr3d:direction %vector3D; #REQUIRED> +<!ATTLIST dr3d:light dr3d:enabled %boolean; #IMPLIED> +<!ATTLIST dr3d:light dr3d:specular %boolean; #IMPLIED> + +<!ENTITY % shapes3d "(dr3d:scene|dr3d:extrude|dr3d:sphere|dr3d:rotate|dr3d:cube)"> + +<!ELEMENT dr3d:cube EMPTY> +<!ATTLIST dr3d:cube dr3d:transform CDATA #IMPLIED> +<!ATTLIST dr3d:cube dr3d:min-edge %vector3D; #IMPLIED> +<!ATTLIST dr3d:cube dr3d:max-edge %vector3D; #IMPLIED> +<!ATTLIST dr3d:cube %zindex;> +<!ATTLIST dr3d:cube draw:id %draw-shape-id;> +<!ATTLIST dr3d:cube %draw-end-position; > +<!ATTLIST dr3d:cube %table-background; > +<!ATTLIST dr3d:cube %draw-style-name; > +<!ATTLIST dr3d:cube draw:layer %layerName; #IMPLIED> + +<!ELEMENT dr3d:sphere EMPTY> +<!ATTLIST dr3d:sphere dr3d:transform CDATA #IMPLIED> +<!ATTLIST dr3d:sphere dr3d:center %vector3D; #IMPLIED> +<!ATTLIST dr3d:sphere dr3d:size %vector3D; #IMPLIED> +<!ATTLIST dr3d:sphere %zindex;> +<!ATTLIST dr3d:sphere draw:id %draw-shape-id;> +<!ATTLIST dr3d:sphere %draw-end-position; > +<!ATTLIST dr3d:sphere %table-background; > +<!ATTLIST dr3d:sphere %draw-style-name; > +<!ATTLIST dr3d:sphere draw:layer %layerName; #IMPLIED> + +<!ELEMENT dr3d:extrude EMPTY> +<!ATTLIST dr3d:extrude dr3d:transform CDATA #IMPLIED> +<!ATTLIST dr3d:extrude %draw-viewbox;> +<!ATTLIST dr3d:extrude svg:d %pathData; #REQUIRED > +<!ATTLIST dr3d:extrude %zindex;> +<!ATTLIST dr3d:extrude draw:id %draw-shape-id;> +<!ATTLIST dr3d:extrude %draw-end-position; > +<!ATTLIST dr3d:extrude %table-background; > +<!ATTLIST dr3d:extrude %draw-style-name; > +<!ATTLIST dr3d:extrude draw:layer %layerName; #IMPLIED> + +<!ELEMENT dr3d:rotate EMPTY> +<!ATTLIST dr3d:rotate dr3d:transform CDATA #IMPLIED> +<!ATTLIST dr3d:rotate %draw-viewbox;> +<!ATTLIST dr3d:rotate svg:d %pathData; #REQUIRED > +<!ATTLIST dr3d:rotate %zindex;> +<!ATTLIST dr3d:rotate draw:id %draw-shape-id;> +<!ATTLIST dr3d:rotate %draw-end-position; > +<!ATTLIST dr3d:rotate %table-background; > +<!ATTLIST dr3d:rotate %draw-style-name; > +<!ATTLIST dr3d:rotate draw:layer %layerName; #IMPLIED> + +<!ELEMENT dr3d:scene (dr3d:light*,(%shapes3d;)*)> +<!ATTLIST dr3d:scene %draw-style-name; > +<!ATTLIST dr3d:scene svg:x %coordinate; #IMPLIED> +<!ATTLIST dr3d:scene svg:y %coordinate; #IMPLIED> +<!ATTLIST dr3d:scene svg:width %length; #IMPLIED> +<!ATTLIST dr3d:scene svg:height %length; #IMPLIED> +<!ATTLIST dr3d:scene dr3d:vrp %vector3D; #IMPLIED> +<!ATTLIST dr3d:scene dr3d:vpn %vector3D; #IMPLIED> +<!ATTLIST dr3d:scene dr3d:vup %vector3D; #IMPLIED> +<!ATTLIST dr3d:scene dr3d:projection (parallel|perspective) #IMPLIED> +<!ATTLIST dr3d:scene dr3d:transform CDATA #IMPLIED> +<!ATTLIST dr3d:scene dr3d:distance %length; #IMPLIED> +<!ATTLIST dr3d:scene dr3d:focal-length %length; #IMPLIED> +<!ATTLIST dr3d:scene dr3d:shadow-slant %nonNegativeInteger; #IMPLIED> +<!ATTLIST dr3d:scene dr3d:shade-mode (flat|phong|gouraud|draft) #IMPLIED> +<!ATTLIST dr3d:scene dr3d:ambient-color %color; #IMPLIED> +<!ATTLIST dr3d:scene dr3d:lighting-mode %boolean; #IMPLIED> +<!ATTLIST dr3d:scene %zindex;> +<!ATTLIST dr3d:scene draw:id %draw-shape-id;> +<!ATTLIST dr3d:scene %draw-end-position; > +<!ATTLIST dr3d:scene %table-background; > + +<!-- layer --> + +<!ELEMENT draw:layer-set (draw:layer*)> + +<!ELEMENT draw:layer EMPTY> +<!ATTLIST draw:layer draw:name %layerName; #REQUIRED> + +<!-- events --> +<!ELEMENT presentation:event (presentation:sound)?> +<!ATTLIST presentation:event %event-name;> +<!ATTLIST presentation:event presentation:action (none|previous-page|next-page|first-page|last-page|hide|stop|execute|show|verb|fade-out|sound) #REQUIRED> +<!ATTLIST presentation:event presentation:effect %presentationEffects; "none"> +<!ATTLIST presentation:event presentation:direction %presentationEffectDirections; "none"> +<!ATTLIST presentation:event presentation:speed %presentationSpeeds; "medium"> +<!ATTLIST presentation:event presentation:start-scale %percentage; "100%"> +<!ATTLIST presentation:event xlink:href %uriReference; #IMPLIED> +<!ATTLIST presentation:event xlink:type (simple) #IMPLIED> +<!ATTLIST presentation:event xlink:show (embed) #IMPLIED> +<!ATTLIST presentation:event xlink:actuate (onRequest) #IMPLIED> +<!ATTLIST presentation:event presentation:verb %nonNegativeInteger; #IMPLIED> + +<!-- applets --> +<!ELEMENT draw:applet (draw:thumbnail?, draw:param*, svg:desc?)> +<!ATTLIST draw:applet xlink:href %uriReference; #IMPLIED> +<!ATTLIST draw:applet xlink:type (simple) #IMPLIED> +<!ATTLIST draw:applet xlink:show (embed) #IMPLIED> +<!ATTLIST draw:applet xlink:actuate (onLoad) #IMPLIED> +<!ATTLIST draw:applet draw:code CDATA #REQUIRED> +<!ATTLIST draw:applet draw:object CDATA #IMPLIED> +<!ATTLIST draw:applet draw:archive CDATA #IMPLIED> +<!ATTLIST draw:applet draw:may-script %boolean; "false"> +<!ATTLIST draw:applet draw:name CDATA #IMPLIED> +<!ATTLIST draw:applet %draw-style-name;> +<!ATTLIST draw:applet svg:width %lengthOrPercentage; #IMPLIED> +<!ATTLIST draw:applet svg:height %lengthOrPercentage; #IMPLIED> +<!ATTLIST draw:applet %zindex;> +<!ATTLIST draw:applet draw:layer %layerName; #IMPLIED> +<!ATTLIST draw:applet %draw-position;> +<!ATTLIST draw:applet %draw-end-position; > + +<!-- plugins --> +<!ELEMENT draw:plugin (draw:thumbnail?, draw:param*, svg:desc?)> +<!ATTLIST draw:plugin xlink:href %uriReference; #IMPLIED> +<!ATTLIST draw:plugin xlink:type (simple) #IMPLIED> +<!ATTLIST draw:plugin xlink:show (embed) #IMPLIED> +<!ATTLIST draw:plugin xlink:actuate (onLoad) #IMPLIED> +<!ATTLIST draw:plugin draw:mime-type CDATA #IMPLIED> +<!ATTLIST draw:plugin draw:name CDATA #IMPLIED> +<!ATTLIST draw:plugin %draw-style-name;> +<!ATTLIST draw:plugin svg:width %lengthOrPercentage; #IMPLIED> +<!ATTLIST draw:plugin svg:height %lengthOrPercentage; #IMPLIED> +<!ATTLIST draw:plugin %zindex;> +<!ATTLIST draw:plugin draw:layer %layerName; #IMPLIED> +<!ATTLIST draw:plugin %draw-position;> +<!ATTLIST draw:plugin %draw-end-position; > + +<!-- Paramaters --> +<!ELEMENT draw:param EMPTY> +<!ATTLIST draw:param draw:name CDATA #IMPLIED> +<!ATTLIST draw:param draw:value CDATA #IMPLIED> + +<!-- Floating Frames --> +<!ELEMENT draw:floating-frame (draw:thumbnail?, svg:desc?)> +<!ATTLIST draw:floating-frame xlink:href %uriReference; #IMPLIED> +<!ATTLIST draw:floating-frame xlink:type (simple) #IMPLIED> +<!ATTLIST draw:floating-frame xlink:show (embed) #IMPLIED> +<!ATTLIST draw:floating-frame xlink:actuate (onLoad) #IMPLIED> +<!ATTLIST draw:floating-frame draw:name CDATA #IMPLIED> +<!ATTLIST draw:floating-frame draw:frame-name CDATA #IMPLIED> +<!ATTLIST draw:floating-frame %draw-style-name;> +<!ATTLIST draw:floating-frame svg:width %lengthOrPercentage; #IMPLIED> +<!ATTLIST draw:floating-frame svg:height %lengthOrPercentage; #IMPLIED> +<!ATTLIST draw:floating-frame %zindex;> +<!ATTLIST draw:floating-frame draw:layer %layerName; #IMPLIED> +<!ATTLIST draw:floating-frame %draw-position;> +<!ATTLIST draw:floating-frame %draw-end-position; > + +<!-- Image Maps --> +<!ELEMENT draw:image-map + (draw:area-rectangle|draw:area-circle|draw:area-polygon)*> + +<!ELEMENT draw:area-rectangle (svg:desc?,office:events?)> +<!ATTLIST draw:area-rectangle xlink:href %uriReference; #IMPLIED> +<!ATTLIST draw:area-rectangle xlink:type (simple) #IMPLIED> +<!ATTLIST draw:area-rectangle office:target-frame-name CDATA #IMPLIED> +<!ATTLIST draw:area-rectangle xlink:show (new|replace) #IMPLIED> +<!ATTLIST draw:area-rectangle office:name CDATA #IMPLIED> +<!ATTLIST draw:area-rectangle draw:nohref (nohref) #IMPLIED> +<!ATTLIST draw:area-rectangle svg:x %coordinate; #REQUIRED> +<!ATTLIST draw:area-rectangle svg:y %coordinate; #REQUIRED> +<!ATTLIST draw:area-rectangle svg:width %coordinate; #REQUIRED> +<!ATTLIST draw:area-rectangle svg:height %coordinate; #REQUIRED> + +<!ELEMENT draw:area-circle (svg:desc?,office:events?)> +<!ATTLIST draw:area-circle xlink:href %uriReference; #IMPLIED> +<!ATTLIST draw:area-circle xlink:type (simple) #IMPLIED> +<!ATTLIST draw:area-circle office:target-frame-name CDATA #IMPLIED> +<!ATTLIST draw:area-circle xlink:show (new|replace) #IMPLIED> +<!ATTLIST draw:area-circle office:name CDATA #IMPLIED> +<!ATTLIST draw:area-circle draw:nohref (nohref) #IMPLIED> +<!ATTLIST draw:area-circle svg:cx %coordinate; #REQUIRED> +<!ATTLIST draw:area-circle svg:cy %coordinate; #REQUIRED> +<!ATTLIST draw:area-circle svg:r %coordinate; #REQUIRED> + +<!ELEMENT draw:area-polygon (svg:desc?,office:events?)> +<!ATTLIST draw:area-polygon xlink:href %uriReference; #IMPLIED> +<!ATTLIST draw:area-polygon xlink:type (simple) #IMPLIED> +<!ATTLIST draw:area-polygon office:target-frame-name CDATA #IMPLIED> +<!ATTLIST draw:area-polygon xlink:show (new|replace) #IMPLIED> +<!ATTLIST draw:area-polygon office:name CDATA #IMPLIED> +<!ATTLIST draw:area-polygon draw:nohref (nohref) #IMPLIED> +<!ATTLIST draw:area-polygon svg:x %coordinate; #REQUIRED> +<!ATTLIST draw:area-polygon svg:y %coordinate; #REQUIRED> +<!ATTLIST draw:area-polygon svg:width %coordinate; #REQUIRED> +<!ATTLIST draw:area-polygon svg:height %coordinate; #REQUIRED> +<!ATTLIST draw:area-polygon svg:points %points; #REQUIRED> +<!ATTLIST draw:area-polygon svg:viewBox CDATA #REQUIRED> diff --git a/xmerge/source/palmtests/qa/comparator/dtd/dtypes.mod b/xmerge/source/palmtests/qa/comparator/dtd/dtypes.mod new file mode 100644 index 000000000000..e4d640d012c8 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/dtd/dtypes.mod @@ -0,0 +1,143 @@ +<!-- + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + Copyright 2000, 2010 Oracle and/or its affiliates. + + OpenOffice.org - a multi-platform office productivity suite + + This file is part of OpenOffice.org. + + OpenOffice.org is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + OpenOffice.org 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 Lesser General Public License version 3 for more details + (a copy is included in the LICENSE file that accompanied this code). + + You should have received a copy of the GNU Lesser General Public License + version 3 along with OpenOffice.org. If not, see + <http://www.openoffice.org/license.html> + for a copy of the LGPLv3 License. + +--> + +<!-- datatypes corresponding to XML Schema Part 2 W3C Working draft of --> +<!-- 07 April 2000 --> + +<!-- string --> +<!ENTITY % string "CDATA"> +<!ENTITY % cString "#PCDATA"> + +<!-- boolean (values are "true" and "false" --> +<!ENTITY % boolean "CDATA"> + +<!-- integer ( ..., -2, -1, 0, 1, 2, ...) --> +<!ENTITY % integer "CDATA"> + +<!-- non negative integer ( 0, 1, 2, ...) --> +<!ENTITY % nonNegativeInteger "CDATA"> + +<!-- positive integer ( 1, 2, ...) --> +<!ENTITY % positiveInteger "CDATA"> +<!ENTITY % cPositiveInteger "#PCDATA"> + +<!ENTITY % positiveNumberOrDefault "CDATA"> + +<!-- time duration as specified by ISO8601, section 5.5.3.2 --> +<!ENTITY % timeDuration "CDATA"> +<!ENTITY % cTimeDuration "#PCDATA"> + +<!-- time instance as specified by ISO8601, section 5.4 --> +<!ENTITY % timeInstance "CDATA"> +<!ENTITY % cTimeInstance "#PCDATA"> + +<!-- date instance as specified by ISO8601, section 5.2.1.1, extended format--> +<!ENTITY % date "CDATA"> +<!ENTITY % cDate "#PCDATA"> + +<!-- date duration, like timDuration but truncated to full dates --> +<!ENTITY % dateDuration "CDATA"> +<!ENTITY % cDateDuration "#PCDATA"> + +<!-- URI reference --> +<!ENTITY % uriReference "CDATA"> + +<!-- language code as specified by RFC1766 --> +<!ENTITY % language "CDATA"> +<!ENTITY % cLanguage "#PCDATA"> + +<!-- float --> +<!ENTITY % float "CDATA"> + +<!-- Some other common used data types --> + +<!-- a single UNICODE character --> +<!ENTITY % character "CDATA"> + +<!-- a style name --> +<!ENTITY % styleName "CDATA"> + +<!-- a target frame mame --> +<!ENTITY % targetFrameName "CDATA"> + +<!-- a language without a country as specified by ISO639 --> +<!ENTITY % languageOnly "CDATA"> + +<!-- a country as specified by ISO3166 --> +<!ENTITY % country "CDATA"> + +<!-- a color value having the format #rrggbb --> +<!ENTITY % color "CDATA"> +<!-- a color value having the format #rrggbb or "transparent" --> +<!ENTITY % transparentOrColor "CDATA"> + +<!-- a percentage --> +<!ENTITY % percentage "CDATA"> + +<!-- a length (i.e. 1cm or .6inch) --> +<!ENTITY % length "CDATA"> +<!ENTITY % positiveLength "CDATA"> +<!ENTITY % nonNegativeLength "CDATA"> +<!ENTITY % lengthOrNoLimit "CDATA"> + +<!-- a length or a percentage --> +<!ENTITY % lengthOrPercentage "CDATA"> +<!ENTITY % positiveLengthOrPercentage "CDATA"> + +<!-- a pixel length (i.e. 2px) --> +<!ENTITY % nonNegativePixelLength "CDATA"> + +<!-- a float or a percentage --> +<!ENTITY % floatOrPercentage "CDATA"> + +<!-- a text encoding --> +<!ENTITY % textEncoding "CDATA"> + +<!-- cell address and cell range address --> +<!ENTITY % cell-address "CDATA"> +<!ENTITY % cell-range-address "CDATA"> +<!ENTITY % cell-range-address-list "CDATA"> + +<!-- value types --> +<!ENTITY % valueType "(float|time|date|percentage|currency|boolean|string)"> + +<!-- an svg coordinate in different distance formats --> +<!ENTITY % coordinate "CDATA"> + +<!ENTITY % coordinateOrPercentage "CDATA"> + +<!ENTITY % shape "draw:rect|draw:line|draw:polyline|draw:polygon|draw:path| + draw:circle|draw:ellipse|draw:g|draw:page-thumbnail| + draw:text-box|draw:image|draw:object|draw:object-ole| + draw:applet|draw:floating-frame|draw:plugin| + draw:measure|draw:caption|draw:connector|chart:chart| + dr3d:scene|draw:control" > +<!ENTITY % shapes "(%shape;)" > + +<!ENTITY % anchorType "(page|frame|paragraph|char|as-char)"> + +<!ENTITY % control-id "form:id CDATA #REQUIRED"> diff --git a/xmerge/source/palmtests/qa/comparator/dtd/form.mod b/xmerge/source/palmtests/qa/comparator/dtd/form.mod new file mode 100644 index 000000000000..77a91206c451 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/dtd/form.mod @@ -0,0 +1,308 @@ +<!-- + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + Copyright 2000, 2010 Oracle and/or its affiliates. + + OpenOffice.org - a multi-platform office productivity suite + + This file is part of OpenOffice.org. + + OpenOffice.org is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + OpenOffice.org 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 Lesser General Public License version 3 for more details + (a copy is included in the LICENSE file that accompanied this code). + + You should have received a copy of the GNU Lesser General Public License + version 3 along with OpenOffice.org. If not, see + <http://www.openoffice.org/license.html> + for a copy of the LGPLv3 License. + +--> + +<!ENTITY % controls "form:text|form:textarea|form:fixed-text|form:file| + form:password|form:formatted-text|form:button|form:image| + form:checkbox|form:radio|form:listbox|form:combobox|form:frame| + form:hidden|form:image-frame|form:grid|form:generic-control"> + +<!ENTITY % name "form:name CDATA #IMPLIED"> +<!ENTITY % service-name "form:service-name CDATA #IMPLIED"> + +<!ENTITY % navigation "(none|current|parent)"> +<!ENTITY % cycles "(records|current|page)"> +<!ENTITY % url "CDATA"> + + +<!ENTITY % types "(submit|reset|push|url)"> +<!ENTITY % button-type "form:button-type %types; 'push'"> +<!ENTITY % current-selected "form:current-selected %boolean; 'false'"> +<!ENTITY % current-value "form:current-value CDATA #IMPLIED"> +<!ENTITY % value "form:value CDATA #IMPLIED"> +<!ENTITY % disabled "form:disabled %boolean; 'false'"> +<!ENTITY % dropdown "form:dropdown %boolean; 'false'"> +<!ENTITY % for "form:for CDATA #IMPLIED"> +<!ENTITY % image-data "form:image-data %url; #IMPLIED"> +<!ENTITY % label "form:label CDATA #IMPLIED"> +<!ENTITY % max-length "form:max-length CDATA #IMPLIED"> +<!ENTITY % printable "form:printable %boolean; 'true'"> +<!ENTITY % readonly "form:readonly %boolean; 'false'"> +<!ENTITY % size "form:size CDATA #IMPLIED"> +<!ENTITY % selected "form:selected %boolean; 'false'"> +<!ENTITY % size "form:size CDATA #IMPLIED"> +<!ENTITY % tab-index "form:tab-index CDATA #IMPLIED"> +<!ENTITY % target-frame "office:target-frame CDATA '_blank'"> +<!ENTITY % target-location "xlink:href %url; #IMPLIED"> +<!ENTITY % tab-stop "form:tab-stop %boolean; 'true'"> +<!ENTITY % title "form:title CDATA #IMPLIED"> +<!ENTITY % default-value "form:default-value CDATA #IMPLIED"> +<!ENTITY % bound-column "form:bound-column CDATA #IMPLIED"> +<!ENTITY % convert-empty "form:convert-empty-to-null %boolean; 'false'"> +<!ENTITY % data-field "form:data-field CDATA #IMPLIED"> +<!ENTITY % list-source "form:list-source CDATA #IMPLIED"> +<!ENTITY % list-source-types "(table|query|sql|sql-pass-through|value-list|table-fields)"> +<!ENTITY % list-source-type "form:list-source-type %list-source-types; #IMPLIED"> + +<!ELEMENT form:control (%controls;)+> +<!ATTLIST form:control %name; + %service-name; + %control-id;> + +<!ELEMENT form:form (form:properties?, office:events?, (form:control|form:form)*)> +<!ATTLIST form:form %name; %service-name;> +<!ATTLIST form:form xlink:href %url; #IMPLIED> +<!ATTLIST form:form form:enctype CDATA "application/x-www-form-urlencoded"> +<!ATTLIST form:form form:method CDATA "get"> +<!ATTLIST form:form office:target-frame CDATA "_blank"> +<!ATTLIST form:form form:allow-deletes %boolean; "true"> +<!ATTLIST form:form form:allow-inserts %boolean; "true"> +<!ATTLIST form:form form:allow-updates %boolean; "true"> +<!ATTLIST form:form form:apply-filter %boolean; "false"> +<!ATTLIST form:form form:command CDATA #IMPLIED> +<!ATTLIST form:form form:command-type (table|query|command) "command"> +<!ATTLIST form:form form:datasource CDATA #IMPLIED> +<!ATTLIST form:form form:detail-fields CDATA #IMPLIED> +<!ATTLIST form:form form:escape-processing %boolean; "true"> +<!ATTLIST form:form form:filter CDATA #IMPLIED> +<!ATTLIST form:form form:ignore-result %boolean; "false"> +<!ATTLIST form:form form:master-fields CDATA #IMPLIED> +<!ATTLIST form:form form:navigation-mode %navigation; #IMPLIED> +<!ATTLIST form:form form:order CDATA #IMPLIED> +<!ATTLIST form:form form:tab-cycle %cycles; #IMPLIED> + +<!ELEMENT office:forms (form:form*)> +<!ATTLIST office:forms form:automatic-focus %boolean; "false"> +<!ATTLIST office:forms form:apply-design-mode %boolean; "true"> + +<!ELEMENT form:text (form:properties?, office:events?)> +<!ATTLIST form:text %current-value; + %disabled; + %max-length; + %printable; + %readonly; + %tab-index; + %tab-stop; + %title; + %value; + %convert-empty; + %data-field;> + +<!ELEMENT form:textarea (form:properties?, office:events?)> +<!ATTLIST form:textarea %current-value; + %disabled; + %max-length; + %printable; + %readonly; + %tab-index; + %tab-stop; + %title; + %value; + %convert-empty; + %data-field;> + +<!ELEMENT form:password (form:properties?, office:events?)> +<!ATTLIST form:password %disabled; + %max-length; + %printable; + %tab-index; + %tab-stop; + %title; + %value; + %convert-empty;> + +<!ATTLIST form:password form:echo-char CDATA "*"> + +<!ELEMENT form:file (form:properties?, office:events?)> +<!ATTLIST form:file %current-value; + %disabled; + %max-length; + %printable; + %readonly; + %tab-index; + %tab-stop; + %title; + %value;> + +<!ELEMENT form:formatted-text (form:properties?, office:events?)> +<!ATTLIST form:formatted-text %current-value; + %disabled; + %max-length; + %printable; + %readonly; + %tab-index; + %tab-stop; + %title; + %value; + %convert-empty; + %data-field;> +<!ATTLIST form:formatted-text form:max-value CDATA #IMPLIED> +<!ATTLIST form:formatted-text form:min-value CDATA #IMPLIED> +<!ATTLIST form:formatted-text form:validation %boolean; "false"> + +<!ELEMENT form:fixed-text (form:properties?, office:events?)> +<!ATTLIST form:fixed-text %for; + %disabled; + %label; + %printable; + %title;> +<!ATTLIST form:fixed-text form:multi-line %boolean; "false"> + +<!ELEMENT form:combobox (form:properties?, office:events?, form:item*)> +<!ATTLIST form:combobox %current-value; + %disabled; + %dropdown; + %max-length; + %printable; + %readonly; + %size; + %tab-index; + %tab-stop; + %title; + %value; + %convert-empty; + %data-field; + %list-source; + %list-source-type;> +<!ATTLIST form:combobox form:auto-complete %boolean; #IMPLIED> + +<!ELEMENT form:item (#PCDATA)> +<!ATTLIST form:item %label;> + +<!ELEMENT form:listbox (form:properties?, office:events?, form:option*)> +<!ATTLIST form:listbox %disabled; + %dropdown; + %printable; + %size; + %tab-index; + %tab-stop; + %title; + %bound-column; + %data-field; + %list-source; + %list-source-type;> +<!ATTLIST form:listbox form:multiple %boolean; "false"> + +<!ELEMENT form:option (#PCDATA)> +<!ATTLIST form:option %current-selected; + %selected; + %label; + %value;> + +<!ELEMENT form:button (form:properties?, office:events?)> +<!ATTLIST form:button %button-type; + %disabled; + %label; + %image-data; + %printable; + %tab-index; + %tab-stop; + %target-frame; + %target-location; + %title; + %value;> +<!ATTLIST form:button form:default-button %boolean; "false"> + +<!ELEMENT form:image (form:properties?, office:events?)> +<!ATTLIST form:image %button-type; + %disabled; + %image-data; + %printable; + %tab-index; + %tab-stop; + %target-frame; + %target-location; + %title; + %value;> + +<!ELEMENT form:checkbox (form:properties?, office:events?)> +<!ATTLIST form:checkbox %disabled; + %label; + %printable; + %tab-index; + %tab-stop; + %title; + %value; + %data-field;> +<!ENTITY % states "(unchecked|checked|unknown)"> +<!ATTLIST form:checkbox form:current-state %states; #IMPLIED> +<!ATTLIST form:checkbox form:is-tristate %boolean; "false"> +<!ATTLIST form:checkbox form:state %states; "unchecked"> + +<!ELEMENT form:radio (form:properties?, office:events?)> +<!ATTLIST form:radio %current-selected; + %disabled; + %label; + %printable; + %selected; + %tab-index; + %tab-stop; + %title; + %value; + %data-field;> + +<!ELEMENT form:frame (form:properties?, office:events?)> +<!ATTLIST form:frame %disabled; + %for; + %label; + %printable; + %title;> + +<!ELEMENT form:image-frame (form:properties?, office:events?)> +<!ATTLIST form:image-frame %disabled; + %image-data; + %printable; + %readonly; + %title; + %data-field;> + +<!ELEMENT form:hidden (form:properties?, office:events?)> +<!ATTLIST form:hidden %name; + %service-name; + %value;> + +<!ELEMENT form:grid (form:properties?, office:events?, form:column*)> +<!ATTLIST form:grid %disabled; + %printable; + %tab-index; + %tab-stop; + %title;> +<!ENTITY % column-type "form:text| form:textarea| form:formatted-text|form:checkbox| form:listbox| form:combobox"> +<!ELEMENT form:column (%column-type;)+> +<!ATTLIST form:column %name; + %service-name; + %label;> + +<!ELEMENT form:generic-control (form:properties?, office:events?)> + + +<!ELEMENT form:properties (form:property+)> +<!ELEMENT form:property (form:property-value*)> +<!ATTLIST form:property form:property-is-list %boolean; #IMPLIED> +<!ATTLIST form:property form:property-name CDATA #REQUIRED> +<!ATTLIST form:property form:property-type (boolean|short|int|long|double|string) #REQUIRED> +<!ELEMENT form:property-value (#PCDATA)> + diff --git a/xmerge/source/palmtests/qa/comparator/dtd/meta.mod b/xmerge/source/palmtests/qa/comparator/dtd/meta.mod new file mode 100644 index 000000000000..1ea845bcb02d --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/dtd/meta.mod @@ -0,0 +1,90 @@ +<!-- + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + Copyright 2000, 2010 Oracle and/or its affiliates. + + OpenOffice.org - a multi-platform office productivity suite + + This file is part of OpenOffice.org. + + OpenOffice.org is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + OpenOffice.org 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 Lesser General Public License version 3 for more details + (a copy is included in the LICENSE file that accompanied this code). + + You should have received a copy of the GNU Lesser General Public License + version 3 along with OpenOffice.org. If not, see + <http://www.openoffice.org/license.html> + for a copy of the LGPLv3 License. + +--> + + +<!ELEMENT meta:generator (%cString;)> + +<!ELEMENT dc:title (%cString;)> + +<!ELEMENT dc:description (%cString;)> + +<!ELEMENT dc:subject (%cString;)> + +<!ELEMENT meta:keywords (meta:keyword)*> +<!ELEMENT meta:keyword (%cString;)> + +<!ELEMENT meta:initial-creator (%cString;)> + +<!ELEMENT dc:creator (%cString;)> + +<!ELEMENT meta:printed-by (%cString;)> + +<!ELEMENT meta:creation-date (%cTimeInstance;)> + +<!ELEMENT dc:date (%cTimeInstance;)> + +<!ELEMENT meta:print-date (%cTimeInstance;)> + +<!ELEMENT meta:template EMPTY> +<!ATTLIST meta:template xlink:type (simple) #FIXED "simple"> +<!ATTLIST meta:template xlink:actuate (onRequest) "onRequest"> +<!ATTLIST meta:template xlink:href %uriReference; #REQUIRED> +<!ATTLIST meta:template xlink:title %string; #IMPLIED> +<!ATTLIST meta:template meta:date %timeInstance; #IMPLIED> + +<!ELEMENT meta:auto-reload EMPTY> +<!ATTLIST meta:auto-reload xlink:type (simple) #IMPLIED> +<!ATTLIST meta:auto-reload xlink:show (replace) #IMPLIED> +<!ATTLIST meta:auto-reload xlink:actuate (onLoad) #IMPLIED> +<!ATTLIST meta:auto-reload xlink:href %uriReference; #IMPLIED> +<!ATTLIST meta:auto-reload meta:delay %timeDuration; "P0S"> + +<!ELEMENT meta:hyperlink-behaviour EMPTY> +<!ATTLIST meta:hyperlink-behaviour office:target-frame-name %targetFrameName; #IMPLIED> +<!ATTLIST meta:hyperlink-behaviour xlink:show (new|replace) #IMPLIED> + +<!ELEMENT dc:language (%cLanguage;)> + +<!ELEMENT meta:editing-cycles (%cPositiveInteger;)> + +<!ELEMENT meta:editing-duration (%cTimeDuration;)> + +<!ELEMENT meta:user-defined (%cString;)> +<!ATTLIST meta:user-defined meta:name %string; #REQUIRED> + +<!ELEMENT meta:document-statistic EMPTY> +<!ATTLIST meta:document-statistic meta:page-count %positiveInteger; #IMPLIED + meta:table-count %nonNegativeInteger; #IMPLIED + meta:draw-count %nonNegativeInteger; #IMPLIED + meta:image-count %nonNegativeInteger; #IMPLIED + meta:ole-object-count %nonNegativeInteger; #IMPLIED + meta:paragraph-count %nonNegativeInteger; #IMPLIED + meta:word-count %nonNegativeInteger; #IMPLIED + meta:character-count %nonNegativeInteger; #IMPLIED + meta:row-count %nonNegativeInteger; #IMPLIED + meta:cell-count %nonNegativeInteger; #IMPLIED + meta:object-count %positiveInteger; #IMPLIED> diff --git a/xmerge/source/palmtests/qa/comparator/dtd/nmspace.mod b/xmerge/source/palmtests/qa/comparator/dtd/nmspace.mod new file mode 100644 index 000000000000..b7f6b64140a6 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/dtd/nmspace.mod @@ -0,0 +1,50 @@ +<!-- + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + Copyright 2000, 2010 Oracle and/or its affiliates. + + OpenOffice.org - a multi-platform office productivity suite + + This file is part of OpenOffice.org. + + OpenOffice.org is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + OpenOffice.org 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 Lesser General Public License version 3 for more details + (a copy is included in the LICENSE file that accompanied this code). + + You should have received a copy of the GNU Lesser General Public License + version 3 along with OpenOffice.org. If not, see + <http://www.openoffice.org/license.html> + for a copy of the LGPLv3 License. + +--> + +<!ENTITY nFO "http://www.w3.org/1999/XSL/Format"> +<!ENTITY nXLink "http://www.w3.org/1999/xlink"> +<!ENTITY nSVG "http://www.w3.org/2000/svg"> + +<!-- StarOffice namespace names and prefixes --> + +<!ENTITY nOpenOffice "http://openoffice.org/2000"> +<!ENTITY nOpenOffice2001 "http://openoffice.org/2001"> + +<!ENTITY nOffice "&nOpenOffice;/office"> +<!ENTITY nStyle "&nOpenOffice;/style"> +<!ENTITY nText "&nOpenOffice;/text"> +<!ENTITY nTable "&nOpenOffice;/table"> +<!ENTITY nMeta "&nOpenOffice;/meta"> +<!ENTITY nScript "&nOpenOffice;/script"> +<!ENTITY nDraw "&nOpenOffice;/drawing"> +<!ENTITY nChart "&nOpenOffice;/chart"> +<!ENTITY nNumber "&nOpenOffice;/datastyle"> +<!ENTITY nConfig "&nOpenOffice2001;/config"> + + +<!-- dublin core namespace name and prefic --> +<!ENTITY nDC "http://purl.org/dc/elements/1.1/"> diff --git a/xmerge/source/palmtests/qa/comparator/dtd/office.dtd b/xmerge/source/palmtests/qa/comparator/dtd/office.dtd new file mode 100644 index 000000000000..9bcd37edf325 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/dtd/office.dtd @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + Copyright 2000, 2010 Oracle and/or its affiliates. + + OpenOffice.org - a multi-platform office productivity suite + + This file is part of OpenOffice.org. + + OpenOffice.org is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + OpenOffice.org 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 Lesser General Public License version 3 for more details + (a copy is included in the LICENSE file that accompanied this code). + + You should have received a copy of the GNU Lesser General Public License + version 3 along with OpenOffice.org. If not, see + <http://www.openoffice.org/license.html> + for a copy of the LGPLv3 License. + +--> + +<!ENTITY % dtypes-mod SYSTEM "dtypes.mod"> +%dtypes-mod; +<!ENTITY % nmspace-mod SYSTEM "nmspace.mod"> +%nmspace-mod; +<!ENTITY % style-mod SYSTEM "style.mod"> +%style-mod; +<!ENTITY % office-mod SYSTEM "office.mod"> +%office-mod; +<!ENTITY % meta-mod SYSTEM "meta.mod"> +%meta-mod; +<!ENTITY % script-mod SYSTEM "script.mod"> +%script-mod; +<!ENTITY % drawing-mod SYSTEM "drawing.mod"> +%drawing-mod; +<!ENTITY % text-mod SYSTEM "text.mod"> +%text-mod; +<!ENTITY % table-mod SYSTEM "table.mod"> +%table-mod; +<!ENTITY % chart-mod SYSTEM "chart.mod"> +%chart-mod; +<!ENTITY % datastyl-mod SYSTEM "datastyl.mod"> +%datastyl-mod; +<!ENTITY % form-mod SYSTEM "form.mod"> +%form-mod; +<!ENTITY % settings-mod SYSTEM "settings.mod"> +%settings-mod; diff --git a/xmerge/source/palmtests/qa/comparator/dtd/office.mod b/xmerge/source/palmtests/qa/comparator/dtd/office.mod new file mode 100644 index 000000000000..f8e3775fa6da --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/dtd/office.mod @@ -0,0 +1,234 @@ +<!-- + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + Copyright 2000, 2010 Oracle and/or its affiliates. + + OpenOffice.org - a multi-platform office productivity suite + + This file is part of OpenOffice.org. + + OpenOffice.org is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + OpenOffice.org 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 Lesser General Public License version 3 for more details + (a copy is included in the LICENSE file that accompanied this code). + + You should have received a copy of the GNU Lesser General Public License + version 3 along with OpenOffice.org. If not, see + <http://www.openoffice.org/license.html> + for a copy of the LGPLv3 License. + +--> + +<!ELEMENT office:document ( office:meta?, + office:settings?, + office:script?, + office:font-decls?, + office:styles?, + office:automatic-styles?, + office:master-styles?, + office:body ) > + +<!ATTLIST office:document xmlns:office CDATA #FIXED "&nOffice;"> +<!ATTLIST office:document xmlns:meta CDATA #FIXED "&nMeta;"> +<!ATTLIST office:document xmlns:script CDATA #FIXED "&nScript;"> +<!ATTLIST office:document xmlns:style CDATA #FIXED "&nStyle;"> +<!ATTLIST office:document xmlns:text CDATA #FIXED "&nText;"> +<!ATTLIST office:document xmlns:table CDATA #FIXED "&nTable;"> +<!ATTLIST office:document xmlns:draw CDATA #FIXED "&nDraw;"> +<!ATTLIST office:document xmlns:chart CDATA #FIXED "&nChart;"> +<!ATTLIST office:document xmlns:number CDATA #FIXED "&nNumber;"> +<!ATTLIST office:document xmlns:fo CDATA #FIXED "&nFO;"> +<!ATTLIST office:document xmlns:xlink CDATA #FIXED "&nXLink;"> +<!ATTLIST office:document xmlns:svg CDATA #FIXED "&nSVG;"> +<!ATTLIST office:document xmlns:dc CDATA #FIXED "&nDC;"> + +<!ATTLIST office:document office:class + (text|text-global| + drawing|presentation| + spreadsheet|chart) #REQUIRED> + +<!ATTLIST office:document office:version %string; #IMPLIED> + +<!-- document-styles --> +<!ELEMENT office:document-styles ( + office:font-decls?, + office:styles?, + office:automatic-styles?, + office:master-styles? ) > + +<!ATTLIST office:document-styles xmlns:office CDATA #FIXED "&nOffice;"> +<!ATTLIST office:document-styles xmlns:meta CDATA #FIXED "&nMeta;"> +<!ATTLIST office:document-styles xmlns:script CDATA #FIXED "&nScript;"> +<!ATTLIST office:document-styles xmlns:style CDATA #FIXED "&nStyle;"> +<!ATTLIST office:document-styles xmlns:text CDATA #FIXED "&nText;"> +<!ATTLIST office:document-styles xmlns:table CDATA #FIXED "&nTable;"> +<!ATTLIST office:document-styles xmlns:draw CDATA #FIXED "&nDraw;"> +<!ATTLIST office:document-styles xmlns:chart CDATA #FIXED "&nChart;"> +<!ATTLIST office:document-styles xmlns:number CDATA #FIXED "&nNumber;"> +<!ATTLIST office:document-styles xmlns:fo CDATA #FIXED "&nFO;"> +<!ATTLIST office:document-styles xmlns:xlink CDATA #FIXED "&nXLink;"> +<!ATTLIST office:document-styles xmlns:svg CDATA #FIXED "&nSVG;"> +<!ATTLIST office:document-styles xmlns:dc CDATA #FIXED "&nDC;"> + +<!ATTLIST office:document-styles office:version %string; #IMPLIED> + +<!-- document-content --> + +<!ELEMENT office:document-content ( + office:script?, + office:font-decls?, + office:automatic-styles?, + office:body ) > + +<!ATTLIST office:document-content xmlns:office CDATA #FIXED "&nOffice;"> +<!ATTLIST office:document-content xmlns:meta CDATA #FIXED "&nMeta;"> +<!ATTLIST office:document-content xmlns:script CDATA #FIXED "&nScript;"> +<!ATTLIST office:document-content xmlns:style CDATA #FIXED "&nStyle;"> +<!ATTLIST office:document-content xmlns:text CDATA #FIXED "&nText;"> +<!ATTLIST office:document-content xmlns:table CDATA #FIXED "&nTable;"> +<!ATTLIST office:document-content xmlns:draw CDATA #FIXED "&nDraw;"> +<!ATTLIST office:document-content xmlns:chart CDATA #FIXED "&nChart;"> +<!ATTLIST office:document-content xmlns:number CDATA #FIXED "&nNumber;"> +<!ATTLIST office:document-content xmlns:fo CDATA #FIXED "&nFO;"> +<!ATTLIST office:document-content xmlns:xlink CDATA #FIXED "&nXLink;"> +<!ATTLIST office:document-content xmlns:svg CDATA #FIXED "&nSVG;"> +<!ATTLIST office:document-content xmlns:dc CDATA #FIXED "&nDC;"> + +<!ATTLIST office:document-content office:class + (text|text-global| + drawing|presentation| + spreadsheet|chart) #REQUIRED> + +<!ATTLIST office:document-content office:version %string; #IMPLIED> + +<!-- document-content --> + +<!ELEMENT office:document-meta ( office:meta? ) > + +<!ATTLIST office:document-meta xmlns:office CDATA #FIXED "&nOffice;"> +<!ATTLIST office:document-meta xmlns:meta CDATA #FIXED "&nMeta;"> +<!ATTLIST office:document-meta xmlns:script CDATA #FIXED "&nScript;"> +<!ATTLIST office:document-meta xmlns:style CDATA #FIXED "&nStyle;"> +<!ATTLIST office:document-meta xmlns:text CDATA #FIXED "&nText;"> +<!ATTLIST office:document-meta xmlns:table CDATA #FIXED "&nTable;"> +<!ATTLIST office:document-meta xmlns:draw CDATA #FIXED "&nDraw;"> +<!ATTLIST office:document-meta xmlns:chart CDATA #FIXED "&nChart;"> +<!ATTLIST office:document-meta xmlns:number CDATA #FIXED "&nNumber;"> +<!ATTLIST office:document-meta xmlns:fo CDATA #FIXED "&nFO;"> +<!ATTLIST office:document-meta xmlns:xlink CDATA #FIXED "&nXLink;"> +<!ATTLIST office:document-meta xmlns:svg CDATA #FIXED "&nSVG;"> +<!ATTLIST office:document-meta xmlns:dc CDATA #FIXED "&nDC;"> + +<!ATTLIST office:document-meta office:version %string; #IMPLIED> + +<!ELEMENT office:document-settings (office:settings) > +<!ATTLIST office:document-settings xmlns:office CDATA #FIXED "&nOffice;"> +<!ATTLIST office:document-settings xmlns:xlink CDATA #FIXED "&nXLink;"> +<!ATTLIST office:document-settings xmlns:config CDATA #FIXED "&nConfig;"> + +<!ATTLIST office:document-settings office:version %string; #IMPLIED> + +<!ENTITY % meta "(meta:generator?, + dc:title?, + dc:description?, + dc:subject?, + meta:initial-creator?, + meta:creation-date?, + dc:creator?, + dc:date?, + meta:printed-by?, + meta:print-date?, + meta:keywords?, + dc:language?, + meta:editing-cycles?, + meta:editing-duration?, + meta:hyperlink-behaviour?, + meta:auto-reload?, + meta:template?, + meta:user-defined*, + meta:document-statistic?)"> +<!ELEMENT office:meta %meta;> + +<!ENTITY % script "(script:library-embedded | + script:library-linked)*"> +<!ELEMENT office:script %script;> + +<!ELEMENT office:font-decls (style:font-decl)*> + +<!ENTITY % styles "(style:default-style|style:style|text:list-style| + number:number-style|number:currency-style|number:percentage-style| + number:date-style|number:time-style|number:boolean-style| + number:text-style| + draw:gradient|draw:hatch|draw:fill-image|draw:marker|draw:stroke-dash| + style:presentation-page-layout|draw:transparency)"> + +<!-- Validity constraint: The elements + text:outline-style, + text:footnotes-configuration, + text:endnotes-configuration, + text:bibliography-configuration and + text:linenumbering-configuration + may appear only once! + Unfortunatetly, this constraint cannot be easily specified in the DTD. +--> +<!ELEMENT office:styles (%styles;|text:outline-style| + text:footnotes-configuration|text:endnotes-configuration| + text:bibliography-configuration|text:linenumbering-configuration)*> + +<!ELEMENT office:automatic-styles (%styles;|style:page-master)*> + +<!ELEMENT office:master-styles (draw:layer-set?,style:handout-master?,style:master-page*) > + +<!ENTITY % text-decls "text:variable-decls?, text:sequence-decls?, + text:user-field-decls?, text:dde-connection-decls?, + text:alphabetical-index-auto-mark-file?" > + +<!ENTITY % change-marks "text:change | text:change-start | text:change-end"> + +<!ENTITY % body "(office:forms?,(text:tracked-changes|table:tracked-changes)?,%text-decls;,table:calculation-settings?,table:content-validations?,table:label-ranges?, + (text:h|text:p|text:ordered-list| + text:unordered-list|table:table|draw:page| + draw:a|%shape;|text:section|text:table-of-content| + text:illustration-index|text:table-index|text:object-index| + text:user-index|text:alphabetical-index|text:bibliography| + %change-marks;)*, + table:named-expressions?, + table:database-ranges?,table:data-pilot-tables?, + table:consolidation?, + table:dde-links?, + presentation:settings?)"> +<!ELEMENT office:body %body;> +<!ATTLIST office:body table:structure-protected %boolean; "false" + table:protection-key CDATA #IMPLIED> + +<!ELEMENT office:events (script:event|presentation:event)*> + +<!-- DDE source: for text sections and tables --> +<!ELEMENT office:dde-source EMPTY> +<!ATTLIST office:dde-source office:dde-application CDATA #IMPLIED> +<!ATTLIST office:dde-source office:dde-topic CDATA #IMPLIED> +<!ATTLIST office:dde-source office:dde-item CDATA #IMPLIED> +<!ATTLIST office:dde-source office:automatic-update %boolean; "false"> +<!ATTLIST office:dde-source office:name CDATA #IMPLIED> +<!ATTLIST office:dde-source table:conversion-mode (into-default-style-data-style|into-english-number|let-text) "into-default-style-data-style" > + +<!-- annotations --> +<!-- limitation: in the current implementation, only plain text inside of + paragraphs is supported --> +<!ELEMENT office:annotation (text:p)*> +<!ATTLIST office:annotation office:author %string; #IMPLIED> +<!ATTLIST office:annotation office:create-date %date; #IMPLIED> +<!ATTLIST office:annotation office:create-date-string %string; #IMPLIED> +<!ATTLIST office:annotation office:display %boolean; "false"> + +<!ELEMENT office:change-info (text:p)*> +<!ATTLIST office:change-info office:chg-author %string; #REQUIRED> +<!ATTLIST office:change-info office:chg-date-time %timeInstance; #REQUIRED> + +<!ELEMENT office:binary-data (#PCDATA)> diff --git a/xmerge/source/palmtests/qa/comparator/dtd/script.mod b/xmerge/source/palmtests/qa/comparator/dtd/script.mod new file mode 100644 index 000000000000..4d13ff74aebc --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/dtd/script.mod @@ -0,0 +1,51 @@ +<!-- + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + Copyright 2000, 2010 Oracle and/or its affiliates. + + OpenOffice.org - a multi-platform office productivity suite + + This file is part of OpenOffice.org. + + OpenOffice.org is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + OpenOffice.org 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 Lesser General Public License version 3 for more details + (a copy is included in the LICENSE file that accompanied this code). + + You should have received a copy of the GNU Lesser General Public License + version 3 along with OpenOffice.org. If not, see + <http://www.openoffice.org/license.html> + for a copy of the LGPLv3 License. + +--> + +<!ELEMENT script:library-embedded (script:module*)> +<!ATTLIST script:library-embedded script:name %string; #REQUIRED> +<!ATTLIST script:library-embedded script:password %string; #IMPLIED> + +<!ELEMENT script:library-linked EMPTY> +<!ATTLIST script:library-linked script:name %string; #REQUIRED> +<!ATTLIST script:library-linked xlink:href %string; #REQUIRED> +<!ATTLIST script:library-linked xlink:type (simple) #FIXED "simple"> + +<!ELEMENT script:module (#PCDATA)> +<!ATTLIST script:module script:name %string; #REQUIRED> +<!ATTLIST script:module script:language %string; #IMPLIED> + + +<!ENTITY % script-language "script:language %string; #REQUIRED"> +<!ENTITY % event-name "script:event-name %string; #REQUIRED"> +<!ENTITY % location "script:location (document|application) #REQUIRED"> +<!ENTITY % macro-name "script:macro-name %string; #REQUIRED"> + +<!ELEMENT script:event (#PCDATA)> +<!ATTLIST script:event %script-language; + %event-name; + %location; + %macro-name;> diff --git a/xmerge/source/palmtests/qa/comparator/dtd/settings.mod b/xmerge/source/palmtests/qa/comparator/dtd/settings.mod new file mode 100644 index 000000000000..bb9224237fa8 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/dtd/settings.mod @@ -0,0 +1,49 @@ +<!-- + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + Copyright 2000, 2010 Oracle and/or its affiliates. + + OpenOffice.org - a multi-platform office productivity suite + + This file is part of OpenOffice.org. + + OpenOffice.org is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + OpenOffice.org 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 Lesser General Public License version 3 for more details + (a copy is included in the LICENSE file that accompanied this code). + + You should have received a copy of the GNU Lesser General Public License + version 3 along with OpenOffice.org. If not, see + <http://www.openoffice.org/license.html> + for a copy of the LGPLv3 License. + +--> + +<!ELEMENT office:settings (config:config-item-set+)> + +<!ENTITY % items "(config:config-item | + config:config-item-set | + config:config-item-map-named | + config:config-item-map-indexed)+"> + +<!ELEMENT config:config-item-set %items;> +<!ATTLIST config:config-item-set config:name CDATA #REQUIRED> + +<!ELEMENT config:config-item (#PCDATA)> +<!ATTLIST config:config-item config:name CDATA #REQUIRED + config:type (boolean | short | int | long | double | string | datetime | base64Binary) #REQUIRED> + +<!ELEMENT config:config-item-map-named (config:config-item-map-entry)+> +<!ATTLIST config:config-item-map-named config:name CDATA #REQUIRED> + +<!ELEMENT config:config-item-map-indexed (config:config-item-map-entry)+> +<!ATTLIST config:config-item-map-indexed config:name CDATA #REQUIRED> + +<!ELEMENT config:config-item-map-entry %items;> +<!ATTLIST config:config-item-map-entry config:name CDATA #IMPLIED> diff --git a/xmerge/source/palmtests/qa/comparator/dtd/style.mod b/xmerge/source/palmtests/qa/comparator/dtd/style.mod new file mode 100644 index 000000000000..21a3d9d17dd1 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/dtd/style.mod @@ -0,0 +1,391 @@ +<!-- + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + Copyright 2000, 2010 Oracle and/or its affiliates. + + OpenOffice.org - a multi-platform office productivity suite + + This file is part of OpenOffice.org. + + OpenOffice.org is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + OpenOffice.org 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 Lesser General Public License version 3 for more details + (a copy is included in the LICENSE file that accompanied this code). + + You should have received a copy of the GNU Lesser General Public License + version 3 along with OpenOffice.org. If not, see + <http://www.openoffice.org/license.html> + for a copy of the LGPLv3 License. + +--> + +<!ELEMENT style:font-decl EMPTY> +<!ATTLIST style:font-decl style:name %string; #REQUIRED> +<!ATTLIST style:font-decl fo:font-family %string; #REQUIRED> +<!ATTLIST style:font-decl style:font-style-name %string; #IMPLIED> +<!ENTITY % fontFamilyGeneric "(roman|swiss|modern|decorative|script|system)"> +<!ATTLIST style:font-decl style:font-family-generic %fontFamilyGeneric; + #IMPLIED> +<!ENTITY % fontPitch "(fixed|variable)"> +<!ATTLIST style:font-decl style:font-pitch %fontPitch; #IMPLIED> +<!ATTLIST style:font-decl style:font-charset %textEncoding; #IMPLIED> + +<!ELEMENT style:style ( style:properties?,office:events?,style:map*)> + +<!ATTLIST style:style style:name %styleName; #REQUIRED> + +<!ENTITY % styleFamily "(paragraph|text|section| + table|table-column|table-row|table-cell|table-page|chart|graphics|default|drawing-page|presentation|control)"> +<!ATTLIST style:style style:family %styleFamily; #REQUIRED> + +<!ATTLIST style:style style:parent-style-name %styleName; #IMPLIED> +<!ATTLIST style:style style:master-page-name %styleName; #IMPLIED> +<!ATTLIST style:style style:next-style-name %styleName; #IMPLIED> +<!ATTLIST style:style style:list-style-name %styleName; #IMPLIED> +<!ATTLIST style:style style:data-style-name %styleName; #IMPLIED> + +<!ATTLIST style:style style:auto-update %boolean; "false"> + +<!ATTLIST style:style style:class %string; #IMPLIED> + +<!ELEMENT style:default-style (style:properties?)> +<!ATTLIST style:default-style style:family %styleFamily; #REQUIRED> + +<!ELEMENT style:map EMPTY> + +<!ATTLIST style:map style:condition %string; #REQUIRED> +<!ATTLIST style:map style:apply-style-name %styleName; #REQUIRED> +<!ATTLIST style:map style:base-cell-address %cell-address; #IMPLIED> + +<!ELEMENT style:properties ANY> + +<!-- number format properties --> +<!ATTLIST style:properties style:num-prefix %string; #IMPLIED> +<!ATTLIST style:properties style:num-suffix %string; #IMPLIED> +<!ATTLIST style:properties style:num-format %string; #IMPLIED> +<!ATTLIST style:properties style:num-letter-sync %boolean; #IMPLIED> + +<!-- frame properties --> +<!ATTLIST style:properties fo:width %positiveLength; #IMPLIED> +<!ATTLIST style:properties fo:height %positiveLength; #IMPLIED> +<!ATTLIST style:properties style:vertical-pos (top|middle|bottom|from-top) #IMPLIED> +<!ATTLIST style:properties style:vertical-rel (page|page-content| + frame|frame-content| + paragraph|paragraph-content|char| + line|baseline|text) #IMPLIED> +<!ATTLIST style:properties style:horizontal-pos (left|center|right|from-left|inside|outside|from-inside) #IMPLIED> +<!ATTLIST style:properties style:horizontal-rel (page|page-content| + frame|frame-content| + paragraph|paragraph-content| + char) #IMPLIED> +<!ATTLIST style:properties svg:width %lengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties svg:height %lengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties fo:min-height %lengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties fo:min-width %lengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties fo:max-height %lengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties fo:max-width %lengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties text:anchor-type %anchorType; #IMPLIED> +<!ATTLIST style:properties text:anchor-page-number %positiveInteger; #IMPLIED> +<!ATTLIST style:properties svg:x %coordinate; #IMPLIED> +<!ATTLIST style:properties svg:y %coordinate; #IMPLIED> +<!ATTLIST style:properties style:print-content %boolean; #IMPLIED> +<!ATTLIST style:properties style:protect %boolean; #IMPLIED> +<!ATTLIST style:properties style:wrap (none|left|right|parallel|dynamic|run-through) #IMPLIED> +<!ENTITY % noLimitOrPositiveInteger "CDATA"> +<!ATTLIST style:properties style:number-wrapped-paragraphs %noLimitOrPositiveInteger; #IMPLIED> +<!ATTLIST style:properties style:wrap-contour %boolean; #IMPLIED> +<!ATTLIST style:properties style:wrap-contour-mode (full|outside) #IMPLIED> +<!ATTLIST style:properties style:run-through (foreground|background) #IMPLIED> +<!ATTLIST style:properties style:editable %boolean; #IMPLIED> +<!ATTLIST style:properties style:mirror CDATA #IMPLIED> +<!ATTLIST style:properties fo:clip CDATA #IMPLIED> +<!ATTLIST style:properties text:animation (none|scroll|alternate|slide) #IMPLIED> +<!ATTLIST style:properties text:animation-direction (left|right|up|down) #IMPLIED> +<!ATTLIST style:properties text:animation-start-inside %boolean; #IMPLIED> +<!ATTLIST style:properties text:animation-stop-inside %boolean; #IMPLIED> +<!ATTLIST style:properties text:animation-repeat %integer; #IMPLIED> +<!ATTLIST style:properties text:animation-delay %timeDuration; #IMPLIED> +<!ATTLIST style:properties text:animation-steps %length; #IMPLIED> + +<!-- text properties --> +<!ATTLIST style:properties fo:font-variant (normal|small-caps) #IMPLIED> +<!ATTLIST style:properties fo:text-transform (none|lowercase| + uppercase|capitalize) #IMPLIED> +<!ATTLIST style:properties fo:color %color; #IMPLIED> +<!ATTLIST style:properties style:use-window-font-color %boolean; #IMPLIED> +<!ATTLIST style:properties style:text-outline %boolean; #IMPLIED> +<!ATTLIST style:properties style:text-crossing-out + (none|single-line|double-line|thick-line|slash|X) + #IMPLIED> +<!ATTLIST style:properties style:text-position CDATA #IMPLIED> +<!ATTLIST style:properties style:text-align (left|right|start|center|end|justify|justified) #IMPLIED> + +<!ATTLIST style:properties style:font-name %string; #IMPLIED> +<!ATTLIST style:properties fo:font-family %string; #IMPLIED> +<!ATTLIST style:properties style:font-family-generic %fontFamilyGeneric; + #IMPLIED> +<!ATTLIST style:properties style:font-style-name %string; #IMPLIED> +<!ATTLIST style:properties style:font-pitch %fontPitch; #IMPLIED> +<!ATTLIST style:properties style:font-charset %textEncoding; #IMPLIED> +<!ATTLIST style:properties style:font-name-asian %string; #IMPLIED> +<!ATTLIST style:properties style:font-family-asian %string; #IMPLIED> +<!ATTLIST style:properties style:font-family-generic-asian %fontFamilyGeneric; + #IMPLIED> +<!ATTLIST style:properties style:font-style-name-asian %string; #IMPLIED> +<!ATTLIST style:properties style:font-pitch-asian %fontPitch; #IMPLIED> +<!ATTLIST style:properties style:font-charset-asian %textEncoding; #IMPLIED> +<!ATTLIST style:properties style:font-name-complex %string; #IMPLIED> +<!ATTLIST style:properties style:font-family-complex %string; #IMPLIED> +<!ATTLIST style:properties style:font-family-generic-complex %fontFamilyGeneric; + #IMPLIED> +<!ATTLIST style:properties style:font-style-name-complex %string; #IMPLIED> +<!ATTLIST style:properties style:font-pitch-complex %fontPitch; #IMPLIED> +<!ATTLIST style:properties style:font-charset-complex %textEncoding; #IMPLIED> + +<!ATTLIST style:properties fo:font-size %positiveLengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties style:font-size-rel %length; #IMPLIED> +<!ATTLIST style:properties style:font-size-asian %positiveLengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties style:font-size-rel-asian %length; #IMPLIED> +<!ATTLIST style:properties style:font-size-complex %positiveLengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties style:font-size-rel-complex %length; #IMPLIED> +<!ENTITY % normalOrLength "CDATA"> +<!ATTLIST style:properties fo:letter-spacing %normalOrLength; #IMPLIED> +<!ATTLIST style:properties fo:language %languageOnly; #IMPLIED> +<!ATTLIST style:properties style:language-asian %languageOnly; #IMPLIED> +<!ATTLIST style:properties style:language-complex %languageOnly; #IMPLIED> +<!ATTLIST style:properties fo:country %country; #IMPLIED> +<!ATTLIST style:properties style:country-asian %country; #IMPLIED> +<!ATTLIST style:properties style:country-complex %country; #IMPLIED> +<!ENTITY % fontStyle "(normal|italic|oblique)"> +<!ATTLIST style:properties fo:font-style %fontStyle; #IMPLIED> +<!ATTLIST style:properties style:font-style-asian %fontStyle; #IMPLIED> +<!ATTLIST style:properties style:font-style-complex %fontStyle; #IMPLIED> +<!ENTITY % fontRelief "(none|embossed|engraved)"> +<!ATTLIST style:properties style:font-relief %fontRelief; #IMPLIED> +<!ATTLIST style:properties fo:text-shadow CDATA #IMPLIED> +<!ATTLIST style:properties style:text-underline + (none|single|double|dotted|dash|long-dash|dot-dash| + dot-dot-dash|wave|bold|bold-dotted|bold-dash| + bold-long-dash|bold-dot-dash|bold-dot-dot-dash| + bold-wave|double-wave|small-wave) #IMPLIED> +<!ATTLIST style:properties style:text-autospace (none | ideograph-alpha) #IMPLIED> +<!ATTLIST style:properties style:punctuation-wrap (simple | hanging) #IMPLIED> +<!ATTLIST style:properties style:line-break (normal | strict) #IMPLIED> +<!ENTITY % fontColorOrColor "CDATA"> +<!ATTLIST style:properties style:text-underline-color %fontColorOrColor; + #IMPLIED> +<!ATTLIST style:properties fo:font-weight CDATA #IMPLIED> +<!ATTLIST style:properties style:font-weight-asian CDATA #IMPLIED> +<!ATTLIST style:properties style:font-weight-complex CDATA #IMPLIED> +<!ATTLIST style:properties fo:score-spaces %boolean; #IMPLIED> +<!ATTLIST style:properties style:letter-kerning %boolean; #IMPLIED> +<!ATTLIST style:properties style:text-blinking %boolean; #IMPLIED> +<!ATTLIST style:properties style:text-background-color %transparentOrColor; + #IMPLIED> + +<!ATTLIST style:properties style:text-combine (none|letters|lines) #IMPLIED> +<!ATTLIST style:properties style:text-combine-start-char %character; #IMPLIED> +<!ATTLIST style:properties style:text-combine-end-char %character; #IMPLIED> +<!ATTLIST style:properties style:text-emphasize CDATA #IMPLIED> +<!ATTLIST style:properties style:text-scale %percentage; #IMPLIED> +<!ATTLIST style:properties style:text-rotation-angle %integer; #IMPLIED> +<!ATTLIST style:properties style:text-rotation-scale (fixed|line-height) #IMPLIED> + +<!-- paragraph properties --> +<!ENTITY % nonNegativeLengthOrPercentageOrNormal "CDATA"> +<!ATTLIST style:properties fo:line-height + %nonNegativeLengthOrPercentageOrNormal; #IMPLIED> +<!ATTLIST style:properties style:line-height-at-least %nonNegativeLength; + #IMPLIED> +<!ATTLIST style:properties style:line-spacing %length; #IMPLIED> +<!ATTLIST style:properties fo:text-align (start|end|center|justify) #IMPLIED> +<!ATTLIST style:properties fo:text-align-last (start|center|justify) #IMPLIED> +<!ATTLIST style:properties style:text-align-source (fix|value-type) #IMPLIED> +<!ATTLIST style:properties style:justify-single-word %boolean; #IMPLIED> +<!ATTLIST style:properties style:break-inside (auto|avoid) #IMPLIED> +<!ATTLIST style:properties fo:widows %nonNegativeInteger; #IMPLIED> +<!ATTLIST style:properties fo:orphans %nonNegativeInteger; #IMPLIED> + +<!ATTLIST style:properties fo:hyphenate %boolean; #IMPLIED> +<!ATTLIST style:properties fo:hyphenate-keep (none|page) #IMPLIED> +<!ATTLIST style:properties fo:hyphenation-remain-char-count %positiveInteger; + #IMPLIED> +<!ATTLIST style:properties fo:hyphenation-push-char-count %positiveInteger; + #IMPLIED> +<!ATTLIST style:properties fo:hyphenation-ladder-count + %noLimitOrPositiveInteger; #IMPLIED> +<!ATTLIST style:properties style:page-number %positiveInteger; #IMPLIED> + +<!ELEMENT style:tab-stops (style:tab-stop)*> +<!ELEMENT style:tab-stop EMPTY> +<!ATTLIST style:tab-stop style:position %nonNegativeLength; #REQUIRED> +<!ATTLIST style:tab-stop style:type (left|center|right|char|default) "left"> +<!ATTLIST style:tab-stop style:char %character; #IMPLIED> +<!ATTLIST style:tab-stop style:leader-char %character; " "> + +<!ELEMENT style:drop-cap EMPTY> +<!ENTITY % wordOrPositiveInteger "CDATA"> +<!ATTLIST style:drop-cap style:length %wordOrPositiveInteger; "1"> +<!ATTLIST style:drop-cap style:lines %positiveInteger; "1"> +<!ATTLIST style:drop-cap style:distance %length; "0cm"> +<!ATTLIST style:drop-cap style:style-name %styleName; #IMPLIED> + +<!ATTLIST style:properties style:register-true %boolean; #IMPLIED> +<!ATTLIST style:properties style:register-truth-ref-style-name %styleName; #IMPLIED> +<!ATTLIST style:properties fo:margin-left %positiveLengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties fo:margin-right %positiveLengthOrPercentage; + #IMPLIED> +<!ATTLIST style:properties fo:text-indent %lengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties style:auto-text-indent %boolean; #IMPLIED> +<!ATTLIST style:properties fo:margin-top %positiveLengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties fo:margin-bottom %positiveLengthOrPercentage; #IMPLIED> +<!ATTLIST style:properties fo:break-before (auto|column|page) #IMPLIED> +<!ATTLIST style:properties fo:break-after (auto|column|page) #IMPLIED> +<!ATTLIST style:properties fo:background-color %transparentOrColor; #IMPLIED> + +<!ELEMENT style:background-image (office:binary-data?)> +<!ATTLIST style:background-image xlink:type (simple) #IMPLIED> +<!ATTLIST style:background-image xlink:href %uriReference; #IMPLIED> +<!ATTLIST style:background-image xlink:show (embed) #IMPLIED> +<!ATTLIST style:background-image xlink:actuate (onLoad) #IMPLIED> +<!ATTLIST style:background-image style:repeat (no-repeat|repeat|stretch) + "repeat"> +<!ATTLIST style:background-image style:position CDATA "center"> +<!ATTLIST style:background-image style:filter-name %string; #IMPLIED> + +<!ELEMENT style:symbol-image (office:binary-data?)> +<!ATTLIST style:symbol-image xlink:type (simple) #IMPLIED> +<!ATTLIST style:symbol-image xlink:href %uriReference; #IMPLIED> +<!ATTLIST style:symbol-image xlink:show (embed) #IMPLIED> +<!ATTLIST style:symbol-image xlink:actuate (onLoad) #IMPLIED> + +<!ATTLIST style:properties fo:border CDATA #IMPLIED> +<!ATTLIST style:properties fo:border-top CDATA #IMPLIED> +<!ATTLIST style:properties fo:border-bottom CDATA #IMPLIED> +<!ATTLIST style:properties fo:border-left CDATA #IMPLIED> +<!ATTLIST style:properties fo:border-right CDATA #IMPLIED> +<!ATTLIST style:properties style:border-line-width CDATA #IMPLIED> +<!ATTLIST style:properties style:border-line-width-top CDATA #IMPLIED> +<!ATTLIST style:properties style:border-line-width-bottom CDATA #IMPLIED> +<!ATTLIST style:properties style:border-line-width-left CDATA #IMPLIED> +<!ATTLIST style:properties style:border-line-width-right CDATA #IMPLIED> +<!ATTLIST style:properties fo:padding %nonNegativeLength; #IMPLIED> +<!ATTLIST style:properties fo:padding-top %nonNegativeLength; #IMPLIED> +<!ATTLIST style:properties fo:padding-bottom %nonNegativeLength; #IMPLIED> +<!ATTLIST style:properties fo:padding-left %nonNegativeLength; #IMPLIED> +<!ATTLIST style:properties fo:padding-right %nonNegativeLength; #IMPLIED> +<!ATTLIST style:properties style:shadow CDATA #IMPLIED> +<!ATTLIST style:properties fo:keep-with-next %boolean; #IMPLIED> + +<!ATTLIST style:properties text:number-lines %boolean; "false"> +<!ATTLIST style:properties text:line-number %nonNegativeInteger; #IMPLIED> + +<!ATTLIST style:properties style:decimal-places %nonNegativeInteger; #IMPLIED> +<!ATTLIST style:properties style:tab-stop-distance %nonNegativeLength; #IMPLIED> + +<!-- table properties --> +<!ATTLIST style:properties style:width %positiveLength; #IMPLIED> +<!ATTLIST style:properties style:rel-width %percentage; #IMPLIED> +<!ATTLIST style:properties style:may-break-between-rows %boolean; #IMPLIED> +<!ATTLIST style:properties table:page-style-name %styleName; #IMPLIED> +<!ATTLIST style:properties table:display %boolean; #IMPLIED> + +<!-- table column properties --> +<!ATTLIST style:properties style:column-width %positiveLength; #IMPLIED> +<!ENTITY % relWidth "CDATA"> +<!ATTLIST style:properties style:rel-column-width %relWidth; #IMPLIED> +<!ATTLIST style:properties style:use-optimal-column-width %boolean; #IMPLIED> + +<!-- table row properties --> +<!ATTLIST style:properties style:row-height %positiveLength; #IMPLIED> +<!ATTLIST style:properties style:min-row-height %nonNegativeLength; #IMPLIED> +<!ATTLIST style:properties style:use-optimal-row-height %boolean; #IMPLIED> + +<!-- table cell properties --> +<!ATTLIST style:properties + table:align (left | center | right | margins) #IMPLIED + table:border-model (collapsing | separating) #IMPLIED + fo:vertical-align (top | middle | bottom | automatic) #IMPLIED + fo:direction (ltr | ttb) #IMPLIED + style:rotation-angle %nonNegativeInteger; #IMPLIED + style:rotation-align (none | bottom | top | center) #IMPLIED + style:cell-protect CDATA #IMPLIED + fo:wrap-option (no-wrap | wrap) #IMPLIED +> +<!ELEMENT style:columns (style:column-sep?,style:column*)> +<!ATTLIST style:columns fo:column-count %nonNegativeInteger; #IMPLIED> +<!ATTLIST style:columns fo:column-gap %positiveLength; #IMPLIED> + +<!ELEMENT style:column EMPTY> +<!ATTLIST style:column style:rel-width CDATA #IMPLIED> +<!ATTLIST style:column fo:margin-left %positiveLength; #IMPLIED> +<!ATTLIST style:column fo:margin-right %positiveLength; #IMPLIED> + +<!ELEMENT style:column-sep EMPTY> +<!ATTLIST style:column-sep style:style (none|solid|dotted|dashed|dot-dashed) + "solid"> +<!ATTLIST style:column-sep style:width %length; #REQUIRED> +<!ATTLIST style:column-sep style:height %percentage; "100%"> +<!ATTLIST style:column-sep style:vertical-align (top|middle|bottom) "top"> +<!ATTLIST style:column-sep style:color %color; "#000000"> + +<!-- page master properties --> +<!ELEMENT style:page-master (style:properties?, style:header-style?, style:footer-style?)> +<!ATTLIST style:page-master style:name %styleName; #REQUIRED> +<!ATTLIST style:page-master style:page-usage (all|left|right|mirrored) "all"> + +<!ELEMENT style:header-style (style:properties?)> +<!ELEMENT style:footer-style (style:properties?)> + +<!ATTLIST style:properties fo:page-width %length; #IMPLIED> +<!ATTLIST style:properties fo:page-height %length; #IMPLIED> +<!ATTLIST style:properties style:paper-tray-number %positiveNumberOrDefault; #IMPLIED> +<!ATTLIST style:properties style:print-orientation (portrait|landscape) #IMPLIED> +<!ATTLIST style:properties style:print CDATA #IMPLIED> +<!ATTLIST style:properties style:print-page-order (ttb|ltr) #IMPLIED> +<!ATTLIST style:properties style:first-page-number %positiveInteger; #IMPLIED> +<!ATTLIST style:properties style:scale-to %percentage; #IMPLIED> +<!ATTLIST style:properties style:scale-to-pages %positiveInteger; #IMPLIED> +<!ATTLIST style:properties style:table-centering (horizontal | vertical | both | none) #IMPLIED> + +<!ATTLIST style:properties style:footnote-max-height %lengthOrNoLimit; #IMPLIED> +<!ATTLIST style:properties style:vertical-align (top|bottom|middle|basline|auto) #IMPLIED> + +<!ELEMENT style:footnote-sep EMPTY> +<!ATTLIST style:footnote-sep style:width %length; #IMPLIED> +<!ATTLIST style:footnote-sep style:rel-width %percentage; #IMPLIED> +<!ATTLIST style:footnote-sep style:color %color; #IMPLIED> +<!ATTLIST style:footnote-sep style:adjustment (left|center|right) "left"> +<!ATTLIST style:footnote-sep style:distance-before-sep %length; #IMPLIED> +<!ATTLIST style:footnote-sep style:distance-after-sep %length; #IMPLIED> + +<!-- master page --> +<!ELEMENT style:master-page ( (style:header, style:header-left?)?, (style:footer, style:footer-left?)?, + office:forms?,style:style*, (%shapes;)*, presentation:notes? )> +<!ATTLIST style:master-page style:name %styleName; #REQUIRED> +<!ATTLIST style:master-page style:page-master-name %styleName; #REQUIRED> +<!ATTLIST style:master-page style:next-style-name %styleName; #IMPLIED> +<!ATTLIST style:master-page draw:style-name %styleName; #IMPLIED> + +<!-- handout master --> +<!ELEMENT style:handout-master (%shapes;)*> +<!ATTLIST style:handout-master presentation:presentation-page-layout-name %styleName; #IMPLIED> + +<!ENTITY % hd-ft-content "( text:p | (style:region-left?, style:region-center?, style:region-right?) )"> +<!ELEMENT style:header %hd-ft-content;> +<!ELEMENT style:footer %hd-ft-content;> +<!ELEMENT style:header-left %hd-ft-content;> +<!ATTLIST style:header-left style:display %boolean; "true"> +<!ELEMENT style:footer-left %hd-ft-content;> +<!ATTLIST style:footer-left style:display %boolean; "true"> + +<!ENTITY % region-content "(text:p*)"> +<!ELEMENT style:region-left %region-content;> +<!ELEMENT style:region-center %region-content;> +<!ELEMENT style:region-right %region-content;> diff --git a/xmerge/source/palmtests/qa/comparator/dtd/table.mod b/xmerge/source/palmtests/qa/comparator/dtd/table.mod new file mode 100644 index 000000000000..6d9f3cdb2a8f --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/dtd/table.mod @@ -0,0 +1,493 @@ +<!-- + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + Copyright 2000, 2010 Oracle and/or its affiliates. + + OpenOffice.org - a multi-platform office productivity suite + + This file is part of OpenOffice.org. + + OpenOffice.org is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + OpenOffice.org 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 Lesser General Public License version 3 for more details + (a copy is included in the LICENSE file that accompanied this code). + + You should have received a copy of the GNU Lesser General Public License + version 3 along with OpenOffice.org. If not, see + <http://www.openoffice.org/license.html> + for a copy of the LGPLv3 License. + +--> + +<!ELEMENT table:calculation-settings (table:null-date?, table:iteration?)> +<!ATTLIST table:calculation-settings + table:case-sensitive %boolean; "true" + table:precision-as-shown %boolean; "false" + table:search-criteria-must-apply-to-whole-cell %boolean; "true" + table:automatic-find-labels %boolean; "true" + table:use-regular-expressions %boolean; "true" + table:null-year %positiveInteger; "1930" +> +<!ELEMENT table:null-date EMPTY> +<!ATTLIST table:null-date + table:value-type %valueType; #FIXED "date" + table:date-value %date; "1899-12-30" +> +<!ELEMENT table:iteration EMPTY> +<!ATTLIST table:iteration + table:status (enable | disable) "disable" + table:steps %positiveInteger; "100" + table:maximum-difference %float; "0.001" +> + +<!ELEMENT table:tracked-changes (table:cell-content-change | table:insertion | table:deletion | table:movement | table:rejection)*> +<!ATTLIST table:tracked-changes table:track-changes %boolean; "true" + table:protected %boolean; "false" + table:protection-key CDATA #IMPLIED +> + +<!ELEMENT table:dependences (table:dependence)+> +<!ELEMENT table:dependence EMPTY> +<!ATTLIST table:dependence + table:id CDATA #REQUIRED +> +<!ELEMENT table:deletions (table:cell-content-deletion | table:change-deletion)+> +<!ELEMENT table:cell-content-deletion (table:cell-address?, table:change-track-table-cell?)> +<!ATTLIST table:cell-content-deletion + table:id CDATA #IMPLIED +> +<!ELEMENT table:change-deletion EMPTY> +<!ATTLIST table:change-deletion + table:id CDATA #IMPLIED +> +<!ELEMENT table:insertion (office:change-info, table:dependences?, table:deletions?)> +<!ATTLIST table:insertion + table:id CDATA #REQUIRED + table:acceptance-state (accepted | rejected | pending) "pending" + table:rejecting-change-id %positiveInteger; #IMPLIED + table:type (row | column | table) #REQUIRED + table:position %integer; #REQUIRED + table:count %positiveInteger; "1" + table:table %integer; #IMPLIED +> +<!ELEMENT table:deletion (office:change-info, table:dependences?, table:deletions?, table:cut-offs?)> +<!ATTLIST table:deletion + table:id CDATA #REQUIRED + table:acceptance-state (accepted | rejected | pending) "pending" + table:rejecting-change-id %positiveInteger; #IMPLIED + table:type (row | column | table) #REQUIRED + table:position %integer; #REQUIRED + table:count %positiveInteger; "1" + table:table %integer; #IMPLIED + table:multi-deletion-spanned %integer; #IMPLIED +> +<!ELEMENT table:cut-offs (table:movement-cut-off+ | (table:insertion-cut-off, table:movement-cut-off*))> +<!ELEMENT table:insertion-cut-off EMPTY> +<!ATTLIST table:insertion-cut-off + table:id CDATA #REQUIRED + table:position %integer; #REQUIRED +> +<!ELEMENT table:movement-cut-off EMPTY> +<!ATTLIST table:movement-cut-off + table:id CDATA #REQUIRED + table:start-position %integer; #IMPLIED + table:end-position %integer; #IMPLIED + table:position %integer; #IMPLIED +> +<!ELEMENT table:movement (table:source-range-address, table:target-range-address, office:change-info, table:dependences?, table:deletions?)> +<!ATTLIST table:movement + table:id CDATA #REQUIRED + table:acceptance-state (accepted | rejected | pending) "pending" + table:rejecting-change-id %positiveInteger; #IMPLIED +> +<!ELEMENT table:target-range-address EMPTY> +<!ATTLIST table:target-range-address + table:column %integer; #IMPLIED + table:row %integer; #IMPLIED + table:table %integer; #IMPLIED + table:start-column %integer; #IMPLIED + table:start-row %integer; #IMPLIED + table:start-table %integer; #IMPLIED + table:end-column %integer; #IMPLIED + table:end-row %integer; #IMPLIED + table:end-table %integer; #IMPLIED +> +<!ELEMENT table:source-range-address EMPTY> +<!ATTLIST table:source-range-address + table:column %integer; #IMPLIED + table:row %integer; #IMPLIED + table:table %integer; #IMPLIED + table:start-column %integer; #IMPLIED + table:start-row %integer; #IMPLIED + table:start-table %integer; #IMPLIED + table:end-column %integer; #IMPLIED + table:end-row %integer; #IMPLIED + table:end-table %integer; #IMPLIED +> +<!ELEMENT table:change-track-table-cell (text:p*)> +<!ATTLIST table:change-track-table-cell + table:cell-address %cell-address; #IMPLIED + table:matrix-covered (true | false) "false" + table:formula %string; #IMPLIED + table:number-matrix-rows-spanned %positiveInteger; #IMPLIED + table:number-matrix-columns-spanned %positiveInteger; #IMPLIED + table:value-type %valueType; "string" + table:value %float; #IMPLIED + table:date-value %date; #IMPLIED + table:time-value %timeInstance; #IMPLIED + table:string-value %string; #IMPLIED +> +<!ELEMENT table:cell-content-change (table:cell-address, office:change-info, table:dependences?, table:deletions?, table:previous)> +<!ATTLIST table:cell-content-change + table:id CDATA #REQUIRED + table:acceptance-state (accepted | rejected | pending) "pending" + table:rejecting-change-id %positiveInteger; #IMPLIED +> +<!ELEMENT table:cell-address EMPTY> +<!ATTLIST table:cell-address + table:column %integer; #IMPLIED + table:row %integer; #IMPLIED + table:table %integer; #IMPLIED +> +<!ELEMENT table:previous (table:change-track-table-cell)> +<!ATTLIST table:previous + table:id CDATA #IMPLIED +> +<!ELEMENT table:rejection (office:change-info, table:dependences?, table:deletions?)> +<!ATTLIST table:rejection + table:id CDATA #REQUIRED + table:acceptance-state (accepted | rejected | pending) "pending" + table:rejecting-change-id %positiveInteger; #IMPLIED +> + +<!ENTITY % table-columns "table:table-columns | ( table:table-column | table:table-column-group )+"> +<!ENTITY % table-header-columns "table:table-header-columns"> +<!ENTITY % table-rows "table:table-rows | ( table:table-row | table:table-row-group )+"> +<!ENTITY % table-header-rows "table:table-header-rows"> +<!ENTITY % table-column-groups "((%table-columns;),(%table-header-columns;,(%table-columns;)?)?) | (%table-header-columns;,(%table-columns;)?)"> +<!ENTITY % table-row-groups "((%table-rows;),(%table-header-rows;,(%table-rows;)?)?) | (%table-header-rows;,(%table-rows;)?)"> +<!ELEMENT table:table (table:table-source?, table:scenario?, office:forms?, table:shapes?, (%table-column-groups;), (%table-row-groups;))> +<!ATTLIST table:table + table:name %string; #IMPLIED + table:style-name %styleName; #IMPLIED + table:protected %boolean; "false" + table:protection-key CDATA #IMPLIED + table:print-ranges %cell-range-address-list; #IMPLIED +> +<!ELEMENT table:table-source EMPTY> +<!ATTLIST table:table-source + table:mode (copy-all | copy-results-only) "copy-all" + xlink:type (simple) #FIXED "simple" + xlink:actuate (onRequest) "onRequest" + xlink:href %uriReference; #REQUIRED + table:filter-name CDATA #IMPLIED + table:table-name CDATA #IMPLIED + table:filter-options CDATA #IMPLIED + table:refresh-delay %timeDuration; #IMPLIED +> +<!ELEMENT table:scenario EMPTY> +<!ATTLIST table:scenario + table:display-border %boolean; "true" + table:border-color %color; #IMPLIED + table:copy-back %boolean; "true" + table:copy-styles %boolean; "true" + table:copy-formulas %boolean; "true" + table:is-active %boolean; #REQUIRED + table:scenario-ranges %cell-range-address-list; #REQUIRED + table:comment CDATA #IMPLIED +> +<!ELEMENT table:shapes %shapes;> +<!ELEMENT table:table-column-group (table:table-header-columns | table:table-column | table:table-column-group)+> +<!ATTLIST table:table-column-group + table:display %boolean; "true" +> +<!ELEMENT table:table-header-columns (table:table-column | table:table-column-group)+> +<!ELEMENT table:table-columns (table:table-column | table:table-column-group)+> +<!ELEMENT table:table-column EMPTY> +<!ATTLIST table:table-column + table:number-columns-repeated %positiveInteger; "1" + table:style-name %styleName; #IMPLIED + table:visibility (visible | collapse | filter) "visible" + table:default-cell-style-name %styleName; #IMPLIED +> +<!ELEMENT table:table-row-group (table:table-header-rows | table:table-row | table:table-row-group)+> +<!ATTLIST table:table-row-group + table:display %boolean; "true" +> +<!ELEMENT table:table-header-rows (table:table-row | table:table-row-group)+> +<!ELEMENT table:table-rows (table:table-row | table:table-row-group)+> +<!ENTITY % table-cells "(table:table-cell|table:covered-table-cell)+"> +<!ELEMENT table:table-row %table-cells;> +<!ATTLIST table:table-row + table:number-rows-repeated %positiveInteger; "1" + table:style-name %styleName; #IMPLIED + table:visibility (visible | collapse | filter) "visible" + table:default-cell-style-name %styleName; #IMPLIED +> + +<!ENTITY % text-wo-table "(text:h|text:p|text:ordered-list|text:unordered-list|%shapes;)*"> +<!ENTITY % cell-content "(table:cell-range-source?,office:annotation?,table:detective?,(table:sub-table|%text-wo-table;))"> +<!ELEMENT table:table-cell %cell-content;> +<!ELEMENT table:covered-table-cell %cell-content;> +<!ATTLIST table:table-cell + table:number-columns-repeated %positiveInteger; "1" + table:number-rows-spanned %positiveInteger; "1" + table:number-columns-spanned %positiveInteger; "1" + table:style-name %styleName; #IMPLIED + table:validation-name CDATA #IMPLIED + table:formula %string; #IMPLIED + table:number-matrix-rows-spanned %positiveInteger; #IMPLIED + table:number-matrix-columns-spanned %positiveInteger; #IMPLIED + table:value-type %valueType; "string" + table:value %float; #IMPLIED + table:date-value %date; #IMPLIED + table:time-value %timeInstance; #IMPLIED + table:boolean-value %boolean; #IMPLIED + table:string-value %string; #IMPLIED + table:currency %string; #IMPLIED +> +<!ATTLIST table:covered-table-cell + table:number-columns-repeated %positiveInteger; "1" + table:style-name %styleName; #IMPLIED + table:validation-name CDATA #IMPLIED + table:formula %string; #IMPLIED + table:number-matrix-rows-spanned %positiveInteger; #IMPLIED + table:number-matrix-columns-spanned %positiveInteger; #IMPLIED + table:value-type %valueType; "string" + table:value %float; #IMPLIED + table:date-value %date; #IMPLIED + table:time-value %timeInstance; #IMPLIED + table:boolean-value %boolean; #IMPLIED + table:string-value %string; #IMPLIED + table:currency %string; #IMPLIED +> +<!-- cell protection in writer: cell attribute; calc uses format --> +<!ATTLIST table:table-cell table:protected %boolean; "false"> + +<!ELEMENT table:cell-range-source EMPTY> +<!ATTLIST table:cell-range-source + table:name %string; #REQUIRED + xlink:type (simple) #FIXED "simple" + xlink:actuate (onRequest) #FIXED "onRequest" + xlink:href %uriReference; #REQUIRED + table:filter-name %string; #REQUIRED + table:filter-options %string; #IMPLIED + table:last-column-spanned %positiveInteger; #REQUIRED + table:last-row-spanned %positiveInteger; #REQUIRED + table:refresh-delay %timeDuration; #IMPLIED +> + +<!ELEMENT table:detective (table:highlighted-range*, table:operation*)> +<!ELEMENT table:highlighted-range EMPTY> +<!ATTLIST table:highlighted-range + table:cell-range-address %cell-range-address; #IMPLIED + table:direction (from-another-table | to-another-table | from-same-table | to-same-table) #REQUIRED + table:contains-error %boolean; "false" +> +<!ELEMENT table:operation EMPTY> +<!ATTLIST table:operation + table:name (trace-dependents | remove-dependents | trace-precedents | remove-precedents | trace-errors) #REQUIRED + table:index %nonNegativeInteger; #REQUIRED +> + +<!ELEMENT table:content-validations (table:content-validation)+> +<!ELEMENT table:content-validation (table:help-message?, (table:error-message | (table:error-macro, office:events?))?)> +<!ATTLIST table:content-validation + table:name CDATA #REQUIRED + table:condition CDATA #IMPLIED + table:base-cell-address %cell-address; #IMPLIED + table:allow-empty-cell %boolean; #IMPLIED +> +<!ELEMENT table:help-message (text:p*)> +<!ATTLIST table:help-message + table:title CDATA #IMPLIED + table:display %boolean; #IMPLIED +> +<!ELEMENT table:error-message (text:p*)> +<!ATTLIST table:error-message + table:title CDATA #IMPLIED + table:message-type (stop | warning | information) #IMPLIED + table:display %boolean; #IMPLIED +> +<!ELEMENT table:error-macro EMPTY> +<!ATTLIST table:error-macro + table:name CDATA #IMPLIED + table:execute %boolean; #IMPLIED +> + +<!ELEMENT table:sub-table ((%table-column-groups;) , (%table-row-groups;))> + +<!ELEMENT table:label-ranges (table:label-range)*> +<!ELEMENT table:label-range EMPTY> +<!ATTLIST table:label-range + table:label-cell-range-address %cell-range-address; #REQUIRED + table:data-cell-range-address %cell-range-address; #REQUIRED + table:orientation (column | row) #REQUIRED +> + +<!ELEMENT table:named-expressions (table:named-range | table:named-expression)*> +<!ELEMENT table:named-range EMPTY> +<!ATTLIST table:named-range + table:name CDATA #REQUIRED + table:cell-range-address %cell-range-address; #REQUIRED + table:base-cell-address %cell-address; #IMPLIED + table:range-usable-as CDATA "none" +> +<!ELEMENT table:named-expression EMPTY> +<!ATTLIST table:named-expression + table:name CDATA #REQUIRED + table:expression CDATA #REQUIRED + table:base-cell-address %cell-address; #IMPLIED +> + +<!ELEMENT table:filter (table:filter-condition | table:filter-and | table:filter-or)> +<!ATTLIST table:filter + table:target-range-address %cell-range-address; #IMPLIED + table:condition-source-range-address %cell-range-address; #IMPLIED + table:condition-source (self | cell-range) "self" + table:display-duplicates %boolean; "true" +> +<!ELEMENT table:filter-and (table:filter-or | table:filter-condition)+> +<!ELEMENT table:filter-or (table:filter-and | table:filter-condition)+> +<!ELEMENT table:filter-condition EMPTY> +<!ATTLIST table:filter-condition + table:field-number %nonNegativeInteger; #REQUIRED + table:case-sensitive %boolean; "false" + table:data-type (text | number) "text" + table:value CDATA #REQUIRED + table:operator CDATA #REQUIRED +> + +<!ELEMENT table:database-ranges (table:database-range)*> +<!ELEMENT table:database-range ((table:database-source-sql | table:database-source-table | table:database-source-query)?, table:filter?, table:sort?, table:subtotal-rules?)> +<!ATTLIST table:database-range + table:name CDATA #IMPLIED + table:is-selection %boolean; "false" + table:on-update-keep-styles %boolean; "false" + table:on-update-keep-size %boolean; "true" + table:has-persistant-data %boolean; "true" + table:orientation (row | column) "row" + table:contains-header %boolean; "true" + table:display-filter-buttons %boolean; "false" + table:target-range-address %cell-range-address; #REQUIRED + table:refresh-delay %timeDuration; #IMPLIED +> +<!ELEMENT table:database-source-sql EMPTY> +<!ATTLIST table:database-source-sql + table:database-name CDATA #REQUIRED + table:sql-statement CDATA #REQUIRED + table:parse-sql-statements %boolean; "false" +> +<!ELEMENT table:database-source-table EMPTY> +<!ATTLIST table:database-source-table + table:database-name CDATA #REQUIRED + table:table-name CDATA #REQUIRED +> +<!ELEMENT table:database-source-query EMPTY> +<!ATTLIST table:database-source-query + table:database-name CDATA #REQUIRED + table:query-name CDATA #REQUIRED +> + +<!ELEMENT table:sort (table:sort-by)+> +<!ATTLIST table:sort + table:bind-styles-to-content %boolean; "true" + table:target-range-address %cell-range-address; #IMPLIED + table:case-sensitive %boolean; "false" + table:language CDATA #IMPLIED + table:country CDATA #IMPLIED + table:algorithm CDATA #IMPLIED +> +<!ELEMENT table:sort-by EMPTY> +<!ATTLIST table:sort-by + table:field-number %nonNegativeInteger; #REQUIRED + table:data-type (text | number | automatic | qname-but-not-ncname) "automatic" + table:order (ascending | descending) "ascending" +> + +<!ELEMENT table:subtotal-rules (table:sort-groups? | table:subtotal-rule*)?> +<!ATTLIST table:subtotal-rules + table:bind-styles-to-content %boolean; "true" + table:case-sensitive %boolean; "false" + table:page-breaks-on-group-change %boolean; "false" +> +<!ELEMENT table:sort-groups EMPTY> +<!ATTLIST table:sort-groups + table:data-type (text | number | automatic | qname-but-not-ncname) "automatic" + table:order (ascending | descending) "ascending" +> +<!ELEMENT table:subtotal-rule (table:subtotal-field)*> +<!ATTLIST table:subtotal-rule + table:group-by-field-number %nonNegativeInteger; #REQUIRED +> +<!ELEMENT table:subtotal-field EMPTY> +<!ATTLIST table:subtotal-field + table:field-number %nonNegativeInteger; #REQUIRED + table:function CDATA #REQUIRED +> + +<!ELEMENT table:data-pilot-tables (table:data-pilot-table)*> +<!ELEMENT table:data-pilot-table ((table:database-source-sql | table:database-source-table | table:database-source-query | table:source-service | table:source-cell-range)?, table:data-pilot-field+)> +<!ATTLIST table:data-pilot-table + table:name CDATA #REQUIRED + table:application-data CDATA #IMPLIED + table:grand-total (none | row | column | both) "both" + table:ignore-empty-rows %boolean; "false" + table:identify-categories %boolean; "false" + table:target-range-address %cell-range-address; #REQUIRED + table:buttons %cell-range-address-list; #REQUIRED +> +<!ELEMENT table:source-service EMPTY> +<!ATTLIST table:source-service + table:name CDATA #REQUIRED + table:source-name CDATA #REQUIRED + table:object-name CDATA #REQUIRED + table:username CDATA #IMPLIED + table:password CDATA #IMPLIED +> +<!ELEMENT table:source-cell-range (table:filter)?> +<!ATTLIST table:source-cell-range + table:cell-range-address %cell-range-address; #REQUIRED +> +<!ELEMENT table:data-pilot-field (table:data-pilot-level)?> +<!ATTLIST table:data-pilot-field + table:source-field-name CDATA #REQUIRED + table:is-data-layout-field %boolean; "false" + table:function CDATA #REQUIRED + table:orientation (row | column | data | page | hidden) #REQUIRED + table:used-hierarchy %positiveInteger; "1" +> +<!ELEMENT table:data-pilot-level (table:data-pilot-subtotals?, table:data-pilot-members?)> +<!ATTLIST table:data-pilot-level + table:display-empty %boolean; #IMPLIED +> +<!ELEMENT table:data-pilot-subtotals (table:data-pilot-subtotal)*> +<!ELEMENT table:data-pilot-subtotal EMPTY> +<!ATTLIST table:data-pilot-subtotal + table:function CDATA #REQUIRED +> +<!ELEMENT table:data-pilot-members (table:data-pilot-member)*> +<!ELEMENT table:data-pilot-member EMPTY> +<!ATTLIST table:data-pilot-member + table:name CDATA #REQUIRED + table:display %boolean; #IMPLIED + table:display-details %boolean; #IMPLIED +> + +<!ELEMENT table:consolidation EMPTY> +<!ATTLIST table:consolidation + table:function CDATA #REQUIRED + table:source-cell-range-addresses %cell-range-address-list; #REQUIRED + table:target-cell-address %cell-address; #REQUIRED + table:use-label (none | column | row | both) "none" + table:link-to-source-data %boolean; "false" +> + +<!ELEMENT table:dde-links (table:dde-link)+> +<!ELEMENT table:dde-link (office:dde-source, table:table)> diff --git a/xmerge/source/palmtests/qa/comparator/dtd/text.mod b/xmerge/source/palmtests/qa/comparator/dtd/text.mod new file mode 100644 index 000000000000..792b0fdde55e --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/dtd/text.mod @@ -0,0 +1,1099 @@ +<!-- + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + + Copyright 2000, 2010 Oracle and/or its affiliates. + + OpenOffice.org - a multi-platform office productivity suite + + This file is part of OpenOffice.org. + + OpenOffice.org is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + OpenOffice.org 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 Lesser General Public License version 3 for more details + (a copy is included in the LICENSE file that accompanied this code). + + You should have received a copy of the GNU Lesser General Public License + version 3 along with OpenOffice.org. If not, see + <http://www.openoffice.org/license.html> + for a copy of the LGPLv3 License. + +--> + +<!ENTITY % fields "text:date | + text:time | + text:page-number | + text:page-continuation | + text:sender-firstname | + text:sender-lastname | + text:sender-initials | + text:sender-title | + text:sender-position | + text:sender-email | + text:sender-phone-private | + text:sender-fax | + text:sender-company | + text:sender-phone-work | + text:sender-street | + text:sender-city | + text:sender-postal-code | + text:sender-country | + text:sender-state-or-province | + text:author-name | + text:author-initials | + text:placeholder | + text:variable-set | + text:variable-get | + text:variable-input | + text:user-field-get | + text:user-field-input | + text:sequence | + text:expression | + text:text-input | + text:database-display | + text:database-next | + text:database-row-select | + text:database-row-number | + text:database-name | + text:initial-creator | + text:creation-date | + text:creation-time | + text:description | + text:user-defined | + text:print-time | + text:print-date | + text:printed-by | + text:title | + text:subject | + text:keywords | + text:editing-cycles | + text:editing-duration | + text:modification-time | + text:modification-date | + text:creator | + text:conditional-text | + text:hidden-text | + text:hidden-paragraph | + text:chapter | + text:file-name | + text:template-name | + text:set-page-variable | + text:get-page-variable | + text:execute-macro | + text:dde-connection | + text:reference-ref | + text:sequence-ref | + text:bookmark-ref | + text:footnote-ref | + text:endnote-ref | + text:sheet-name | + text:bibliography-mark | + text:page-count | + text:paragraph-count | + text:word-count | + text:character-count | + text:table-count | + text:image-count | + text:object-count | + office:annotation | + text:script | + text:measure" > + +<!ENTITY % inline-text "(#PCDATA| + text:span|text:tab-stop|text:s|text:line-break| + text:footnote|text:endnote|text:a| + text:bookmark|text:bookmark-start|text:bookmark-end| + text:reference-mark|text:reference-mark-start| + text:reference-mark-end|%fields;|%shape;| + text:toc-mark-start | text:toc-mark-end | + text:toc-mark | text:user-index-mark-start | + text:user-index-mark-end | text:user-index-mark | + text:alphabetical-index-mark-start | + text:alphabetical-index-mark-end | + text:alphabetical-index-mark | + %change-marks; | draw:a | text:ruby)*"> + +<!ELEMENT text:p %inline-text;> +<!ELEMENT text:h %inline-text;> + +<!ATTLIST text:p text:style-name %styleName; #IMPLIED> +<!ATTLIST text:p text:cond-style-name %styleName; #IMPLIED> + +<!ATTLIST text:h text:style-name %styleName; #IMPLIED> +<!ATTLIST text:h text:cond-style-name %styleName; #IMPLIED> +<!ATTLIST text:h text:level %positiveInteger; "1"> + +<!ELEMENT text:span %inline-text;> +<!ATTLIST text:span text:style-name %styleName; #REQUIRED> + +<!ELEMENT text:a %inline-text;> +<!ATTLIST text:a xlink:href %uriReference; #REQUIRED> +<!ATTLIST text:a xlink:type (simple) #FIXED "simple"> +<!ATTLIST text:a xlink:actuate (onRequest) "onRequest"> +<!ATTLIST text:a xlink:show (new|replace) "replace"> +<!ATTLIST text:a office:name %string; #IMPLIED> +<!ATTLIST text:a office:target-frame-name %string; #IMPLIED> +<!ATTLIST text:a text:style-name %styleName; #IMPLIED> +<!ATTLIST text:a text:visited-style-name %styleName; #IMPLIED> + + +<!ELEMENT text:s EMPTY> +<!ATTLIST text:s text:c %positiveInteger; "1"> + +<!ELEMENT text:tab-stop EMPTY> + +<!ELEMENT text:line-break EMPTY> + + +<!ENTITY % list-items "((text:list-header,text:list-item*)|text:list-item+)"> +<!ELEMENT text:ordered-list %list-items;> +<!ELEMENT text:unordered-list %list-items;> + + +<!ATTLIST text:ordered-list text:style-name %styleName; #IMPLIED> +<!ATTLIST text:unordered-list text:style-name %styleName; #IMPLIED> + +<!ATTLIST text:ordered-list text:continue-numbering %boolean; "false"> + +<!ELEMENT text:list-header (text:p)+> +<!ELEMENT text:list-item (text:p|text:ordered-list|text:unordered-list)+> + +<!ATTLIST text:list-item text:restart-numbering %boolean; "false"> +<!ATTLIST text:list-item text:start-value %positiveInteger; #IMPLIED> + +<!ELEMENT text:list-style (text:list-level-style-number| + text:list-level-style-bullet| + text:list-level-style-image)+> + +<!ATTLIST text:list-style style:name %styleName; #IMPLIED> + +<!ATTLIST text:list-style text:consecutive-numbering %boolean; "false"> + + +<!ELEMENT text:list-level-style-number (style:properties?)> + +<!ATTLIST text:list-level-style-number text:level %positiveInteger; + #REQUIRED> +<!ATTLIST text:list-level-style-number text:style-name %styleName; #IMPLIED> + +<!ATTLIST text:list-level-style-number style:num-format %string; #REQUIRED> +<!ATTLIST text:list-level-style-number style:num-prefix %string; #IMPLIED> +<!ATTLIST text:list-level-style-number style:num-suffix %string; #IMPLIED> +<!ATTLIST text:list-level-style-number style:num-letter-sync %boolean; + "false"> +<!ATTLIST text:list-level-style-number text:display-levels %positiveInteger; + "1"> +<!ATTLIST text:list-level-style-number text:start-value %positiveInteger; + "1"> +<!ELEMENT text:list-level-style-bullet (style:properties?)> + +<!ATTLIST text:list-level-style-bullet text:level %positiveInteger; #REQUIRED> +<!ATTLIST text:list-level-style-bullet text:style-name %styleName; #IMPLIED> +<!ATTLIST text:list-level-style-bullet text:bullet-char %character; #REQUIRED> +<!ATTLIST text:list-level-style-bullet style:num-prefix %string; #IMPLIED> +<!ATTLIST text:list-level-style-bullet style:num-suffix %string; #IMPLIED> + +<!ELEMENT text:list-level-style-image (style:properties?,office:binary-data?)> + +<!ATTLIST text:list-level-style-image text:level %positiveInteger; #REQUIRED> +<!ATTLIST text:list-level-style-image xlink:type (simple) #IMPLIED> +<!ATTLIST text:list-level-style-image xlink:href %uriReference; #IMPLIED> +<!ATTLIST text:list-level-style-image xlink:actuate (onLoad) #IMPLIED> +<!ATTLIST text:list-level-style-image xlink:show (embed) #IMPLIED> + + +<!-- list properties --> +<!ATTLIST style:properties text:space-before %nonNegativeLength; #IMPLIED> +<!ATTLIST style:properties text:min-label-width %nonNegativeLength; #IMPLIED> +<!ATTLIST style:properties text:min-label-distance %nonNegativeLength; #IMPLIED> +<!ATTLIST style:properties text:enable-numbering %boolean; #IMPLIED> +<!ATTLIST style:properties style:list-style-name %styleName; #IMPLIED> + +<!ELEMENT text:outline-style (text:outline-level-style)+> + +<!ELEMENT text:outline-level-style (style:properties?)> + +<!ATTLIST text:outline-level-style text:level %positiveInteger; + #REQUIRED> +<!ATTLIST text:outline-level-style text:style-name %styleName; #IMPLIED> + +<!ATTLIST text:outline-level-style style:num-format %string; #REQUIRED> +<!ATTLIST text:outline-level-style style:num-prefix %string; #IMPLIED> +<!ATTLIST text:outline-level-style style:num-suffix %string; #IMPLIED> +<!ATTLIST text:outline-level-style style:num-letter-sync %boolean; + "false"> +<!ATTLIST text:outline-level-style text:display-levels %positiveInteger; + "1"> +<!ATTLIST text:outline-level-style text:start-value %positiveInteger; + "1"> + +<!ENTITY % field-declarations "text:variable-decls?, + text:user-field-decls?, + text:sequence-decls?"> + +<!ENTITY % variableName "CDATA"> + +<!ENTITY % formula "CDATA"> + +<!ENTITY % valueAttr "text:value-type %valueType; #REQUIRED"> + +<!ENTITY % valueAndTypeAttr "%valueAttr; + text:value %float; #IMPLIED + text:date-value %date; #IMPLIED + text:time-value %timeInstance; #IMPLIED + text:boolean-value %boolean; #IMPLIED + text:string-value %string; #IMPLIED + text:currency CDATA #IMPLIED" > + +<!ENTITY % numFormat 'style:num-format CDATA #IMPLIED + style:num-letter-sync %boolean; "false"'> + + +<!ELEMENT text:date (#PCDATA)> +<!ATTLIST text:date text:date-value %date; #IMPLIED> +<!ATTLIST text:date text:date-adjust %dateDuration; #IMPLIED> +<!ATTLIST text:date text:fixed %boolean; "false"> +<!ATTLIST text:date style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:time (#PCDATA)> +<!ATTLIST text:time text:time-value %timeInstance; #IMPLIED> +<!ATTLIST text:time text:time-adjust %timeDuration; #IMPLIED> +<!ATTLIST text:time text:fixed %boolean; "false"> +<!ATTLIST text:time style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:page-number (#PCDATA)> +<!ATTLIST text:page-number text:page-adjust %positiveInteger; #IMPLIED> +<!ATTLIST text:page-number text:select-page (previous|current|next) "current"> +<!ATTLIST text:page-number %numFormat;> + +<!ELEMENT text:page-continuation (#PCDATA)> +<!ATTLIST text:page-continuation text:select-page (previous|next) #REQUIRED> +<!ATTLIST text:page-continuation text:string-value %string; #IMPLIED> + +<!ELEMENT text:sender-firstname (#PCDATA)> +<!ATTLIST text:sender-firstname text:fixed %boolean; "true"> + +<!ELEMENT text:sender-lastname (#PCDATA)> +<!ATTLIST text:sender-lastname text:fixed %boolean; "true"> + +<!ELEMENT text:sender-initials (#PCDATA)> +<!ATTLIST text:sender-initials text:fixed %boolean; "true"> + +<!ELEMENT text:sender-title (#PCDATA)> +<!ATTLIST text:sender-title text:fixed %boolean; "true"> + +<!ELEMENT text:sender-position (#PCDATA)> +<!ATTLIST text:sender-position text:fixed %boolean; "true"> + +<!ELEMENT text:sender-email (#PCDATA)> +<!ATTLIST text:sender-email text:fixed %boolean; "true"> + +<!ELEMENT text:sender-phone-private (#PCDATA)> +<!ATTLIST text:sender-phone-private text:fixed %boolean; "true"> + +<!ELEMENT text:sender-fax (#PCDATA)> +<!ATTLIST text:sender-fax text:fixed %boolean; "true"> + +<!ELEMENT text:sender-company (#PCDATA)> +<!ATTLIST text:sender-company text:fixed %boolean; "true"> + +<!ELEMENT text:sender-phone-work (#PCDATA)> +<!ATTLIST text:sender-phone-work text:fixed %boolean; "true"> + +<!ELEMENT text:sender-street (#PCDATA)> +<!ATTLIST text:sender-street text:fixed %boolean; "true"> + +<!ELEMENT text:sender-city (#PCDATA)> +<!ATTLIST text:sender-city text:fixed %boolean; "true"> + +<!ELEMENT text:sender-postal-code (#PCDATA)> +<!ATTLIST text:sender-postal-code text:fixed %boolean; "true"> + +<!ELEMENT text:sender-country (#PCDATA)> +<!ATTLIST text:sender-country text:fixed %boolean; "true"> + +<!ELEMENT text:sender-state-or-province (#PCDATA)> +<!ATTLIST text:sender-state-or-province text:fixed %boolean; "true"> + +<!ELEMENT text:author-name (#PCDATA)> +<!ATTLIST text:author-name text:fixed %boolean; "true"> + +<!ELEMENT text:author-initials (#PCDATA)> +<!ATTLIST text:author-initials text:fixed %boolean; "true"> + +<!ELEMENT text:placeholder (#PCDATA)> +<!ATTLIST text:placeholder text:placeholder-type (text|table|text-box|image|object) #REQUIRED> +<!ATTLIST text:placeholder text:description %string; #IMPLIED> + +<!ELEMENT text:variable-decls (text:variable-decl)*> + +<!ELEMENT text:variable-decl EMPTY> +<!ATTLIST text:variable-decl text:name %variableName; #REQUIRED> +<!ATTLIST text:variable-decl %valueAndTypeAttr;> + +<!ELEMENT text:variable-set (#PCDATA)> +<!ATTLIST text:variable-set text:name %variableName; #REQUIRED> +<!ATTLIST text:variable-set text:formula %formula; #IMPLIED> +<!ATTLIST text:variable-set %valueAndTypeAttr;> +<!ATTLIST text:variable-set text:display (value|none) "value"> +<!ATTLIST text:variable-set style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:variable-get (#PCDATA)> +<!ATTLIST text:variable-get text:name %variableName; #REQUIRED> +<!ATTLIST text:variable-get text:display (value|formula) "value"> +<!ATTLIST text:variable-get style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:variable-input (#PCDATA)> +<!ATTLIST text:variable-input text:name %variableName; #REQUIRED> +<!ATTLIST text:variable-input text:description %string; #IMPLIED> +<!ATTLIST text:variable-input %valueAndTypeAttr;> +<!ATTLIST text:variable-input text:display (value|none) "value"> +<!ATTLIST text:variable-input style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:user-field-decls (text:user-field-decl)*> + +<!ELEMENT text:user-field-decl EMPTY> +<!ATTLIST text:user-field-decl text:name %variableName; #REQUIRED> +<!ATTLIST text:user-field-decl text:formula %formula; #IMPLIED> +<!ATTLIST text:user-field-decl %valueAndTypeAttr;> + +<!ELEMENT text:user-field-get (#PCDATA)> +<!ATTLIST text:user-field-get text:name %variableName; #REQUIRED> +<!ATTLIST text:user-field-get text:display (value|formula|none) "value"> +<!ATTLIST text:user-field-get style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:user-field-input (#PCDATA)> +<!ATTLIST text:user-field-input text:name %variableName; #REQUIRED> +<!ATTLIST text:user-field-input text:description %string; #IMPLIED> +<!ATTLIST text:user-field-input style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:sequence-decls (text:sequence-decl)*> + +<!ELEMENT text:sequence-decl EMPTY> +<!ATTLIST text:sequence-decl text:name %variableName; #REQUIRED> +<!ATTLIST text:sequence-decl text:display-outline-level %positiveInteger; "0"> +<!ATTLIST text:sequence-decl text:separation-character %character; "."> + +<!ELEMENT text:sequence (#PCDATA)> +<!ATTLIST text:sequence text:name %variableName; #REQUIRED> +<!ATTLIST text:sequence text:formula %formula; #IMPLIED> +<!ATTLIST text:sequence %numFormat;> +<!ATTLIST text:sequence text:ref-name ID #IMPLIED> + +<!ELEMENT text:expression (#PCDATA)> +<!ATTLIST text:expression text:formula %formula; #IMPLIED> +<!ATTLIST text:expression text:display (value|formula ) "value"> +<!ATTLIST text:expression %valueAndTypeAttr;> +<!ATTLIST text:expression style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:text-input (#PCDATA)> +<!ATTLIST text:text-input text:description %string; #IMPLIED> + +<!ENTITY % database-table "text:database-name CDATA #REQUIRED + text:table-name CDATA #REQUIRED"> + +<!ELEMENT text:database-display (#PCDATA)> +<!ATTLIST text:database-display %database-table;> +<!ATTLIST text:database-display text:column-name %string; #REQUIRED> +<!ATTLIST text:database-display style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:database-next (#PCDATA)> +<!ATTLIST text:database-next %database-table;> +<!ATTLIST text:database-next text:condition %formula; #IMPLIED> + +<!ELEMENT text:database-row-select (#PCDATA)> +<!ATTLIST text:database-row-select %database-table;> +<!ATTLIST text:database-row-select text:condition %formula; #IMPLIED> +<!ATTLIST text:database-row-select text:row-number %integer; #REQUIRED> + +<!ELEMENT text:database-row-number (#PCDATA)> +<!ATTLIST text:database-row-number %database-table;> +<!ATTLIST text:database-row-number %numFormat;> +<!ATTLIST text:database-row-number text:value %integer; #IMPLIED> + +<!ELEMENT text:database-name (#PCDATA)> +<!ATTLIST text:database-name %database-table;> + +<!ELEMENT text:initial-creator (#PCDATA)> +<!ATTLIST text:initial-creator text:fixed %boolean; "false"> + +<!ELEMENT text:creation-date (#PCDATA)> +<!ATTLIST text:creation-date text:fixed %boolean; "false"> +<!ATTLIST text:creation-date text:date-value %date; #IMPLIED> +<!ATTLIST text:creation-date style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:creation-time (#PCDATA)> +<!ATTLIST text:creation-time text:fixed %boolean; "false"> +<!ATTLIST text:creation-time text:time-value %timeInstance; #IMPLIED> +<!ATTLIST text:creation-time style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:description (#PCDATA)> +<!ATTLIST text:description text:fixed %boolean; "false"> + +<!ELEMENT text:user-defined (#PCDATA)> +<!ATTLIST text:user-defined text:fixed %boolean; "false"> +<!ATTLIST text:user-defined text:name %string; #REQUIRED> + +<!ELEMENT text:print-time (#PCDATA)> +<!ATTLIST text:print-time text:fixed %boolean; "false"> +<!ATTLIST text:print-time text:time-value %timeInstance; #IMPLIED> +<!ATTLIST text:print-time style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:print-date (#PCDATA)> +<!ATTLIST text:print-date text:fixed %boolean; "false"> +<!ATTLIST text:print-date text:date-value %date; #IMPLIED> +<!ATTLIST text:print-date style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:printed-by (#PCDATA)> +<!ATTLIST text:printed-by text:fixed %boolean; "false"> + +<!ELEMENT text:title (#PCDATA)> +<!ATTLIST text:title text:fixed %boolean; "false"> + +<!ELEMENT text:subject (#PCDATA)> +<!ATTLIST text:subject text:fixed %boolean; "false"> + +<!ELEMENT text:keywords (#PCDATA)> +<!ATTLIST text:keywords text:fixed %boolean; "false"> + +<!ELEMENT text:editing-cycles (#PCDATA)> +<!ATTLIST text:editing-cycles text:fixed %boolean; "false"> + +<!ELEMENT text:editing-duration (#PCDATA)> +<!ATTLIST text:editing-duration text:fixed %boolean; "false"> +<!ATTLIST text:editing-duration text:duration %timeDuration; #IMPLIED> +<!ATTLIST text:editing-duration style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:modification-time (#PCDATA)> +<!ATTLIST text:modification-time text:fixed %boolean; "false"> +<!ATTLIST text:modification-time text:time-value %timeInstance; #IMPLIED> +<!ATTLIST text:modification-time style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:modification-date (#PCDATA)> +<!ATTLIST text:modification-date text:fixed %boolean; "false"> +<!ATTLIST text:modification-date text:date-value %date; #IMPLIED> +<!ATTLIST text:modification-date style:data-style-name %styleName; #IMPLIED> + +<!ELEMENT text:creator (#PCDATA)> +<!ATTLIST text:creator text:fixed %boolean; "false"> + +<!ELEMENT text:conditional-text (#PCDATA)> +<!ATTLIST text:conditional-text text:condition %formula; #REQUIRED> +<!ATTLIST text:conditional-text text:string-value-if-false %string; #REQUIRED> +<!ATTLIST text:conditional-text text:string-value-if-true %string; #REQUIRED> +<!ATTLIST text:conditional-text text:current-value %boolean; "false"> + +<!ELEMENT text:hidden-text (#PCDATA)> +<!ATTLIST text:hidden-text text:condition %formula; #REQUIRED> +<!ATTLIST text:hidden-text text:string-value %string; #REQUIRED> +<!ATTLIST text:hidden-text text:is-hidden %boolean; "false"> + +<!ELEMENT text:hidden-paragraph EMPTY> +<!ATTLIST text:hidden-paragraph text:condition %formula; #REQUIRED> +<!ATTLIST text:hidden-paragraph text:is-hidden %boolean; "false"> + +<!ELEMENT text:chapter (#PCDATA)> +<!ATTLIST text:chapter text:display (name|number|number-and-name| + plain-number-and-name|plain-number) + "number-and-name"> +<!ATTLIST text:chapter text:outline-level %integer; "1"> + +<!ELEMENT text:file-name (#PCDATA)> +<!ATTLIST text:file-name text:display (full|path|name|name-and-extension) + "full"> +<!ATTLIST text:file-name text:fixed %boolean; "false"> + +<!ELEMENT text:template-name (#PCDATA)> +<!ATTLIST text:template-name text:display (full|path|name|name-and-extension| + area|title) "full"> + +<!ELEMENT text:set-page-variable EMPTY> +<!ATTLIST text:set-page-variable text:active %boolean; "true"> +<!ATTLIST text:set-page-variable text:page-adjust %integer; "0"> + +<!ELEMENT text:get-page-variable (#PCDATA)> +<!ATTLIST text:get-page-variable %numFormat;> + +<!ELEMENT text:execute-macro (#PCDATA|office:events)* > +<!ATTLIST text:execute-macro text:description %string; #IMPLIED> + + +<!ELEMENT text:dde-connection-decls (text:dde-connection-decl)*> + +<!ELEMENT text:dde-connection-decl EMPTY> +<!ATTLIST text:dde-connection-decl text:name %string; #REQUIRED> +<!ATTLIST text:dde-connection-decl text:dde-application %string; #REQUIRED> +<!ATTLIST text:dde-connection-decl text:dde-topic %string; #REQUIRED> +<!ATTLIST text:dde-connection-decl text:dde-item %string; #REQUIRED> +<!ATTLIST text:dde-connection-decl text:automatic-update %boolean; "false"> + +<!ELEMENT text:dde-connection (#PCDATA)> +<!ATTLIST text:dde-connection text:connection-name %string; #REQUIRED> + +<!ELEMENT text:reference-ref (#PCDATA)> +<!ATTLIST text:reference-ref text:ref-name %string; #REQUIRED> +<!ATTLIST text:reference-ref text:reference-format (page|chapter|text|direction) #IMPLIED> + +<!ELEMENT text:sequence-ref (#PCDATA)> +<!ATTLIST text:sequence-ref text:ref-name %string; #REQUIRED> +<!ATTLIST text:sequence-ref text:reference-format (page|chapter|text|direction|category-and-value|caption|value) #IMPLIED> + +<!ELEMENT text:bookmark-ref (#PCDATA)> +<!ATTLIST text:bookmark-ref text:ref-name %string; #REQUIRED> +<!ATTLIST text:bookmark-ref text:reference-format (page|chapter|text|direction) #IMPLIED> + +<!ELEMENT text:footnote-ref (#PCDATA)> +<!ATTLIST text:footnote-ref text:ref-name %string; #REQUIRED> +<!ATTLIST text:footnote-ref text:reference-format (page|chapter|text|direction) #IMPLIED> + +<!ELEMENT text:endnote-ref (#PCDATA)> +<!ATTLIST text:endnote-ref text:ref-name %string; #REQUIRED> +<!ATTLIST text:endnote-ref text:reference-format (page|chapter|text|direction) #IMPLIED> + +<!ELEMENT text:sheet-name (#PCDATA)> + +<!ELEMENT text:page-count (#PCDATA)> +<!ATTLIST text:page-count style:num-format %string; #IMPLIED> +<!ATTLIST text:page-count style:num-letter-sync %boolean; "false"> + +<!ELEMENT text:paragraph-count (#PCDATA)> +<!ATTLIST text:paragraph-count style:num-format %string; #IMPLIED> +<!ATTLIST text:paragraph-count style:num-letter-sync %boolean; "false"> + +<!ELEMENT text:word-count (#PCDATA)> +<!ATTLIST text:word-count style:num-format %string; #IMPLIED> +<!ATTLIST text:word-count style:num-letter-sync %boolean; "false"> + +<!ELEMENT text:character-count (#PCDATA)> +<!ATTLIST text:character-count style:num-format %string; #IMPLIED> +<!ATTLIST text:character-count style:num-letter-sync %boolean; "false"> + +<!ELEMENT text:table-count (#PCDATA)> +<!ATTLIST text:table-count style:num-format %string; #IMPLIED> +<!ATTLIST text:table-count style:num-letter-sync %boolean; "false"> + +<!ELEMENT text:image-count (#PCDATA)> +<!ATTLIST text:image-count style:num-format %string; #IMPLIED> +<!ATTLIST text:image-count style:num-letter-sync %boolean; "false"> + +<!ELEMENT text:object-count (#PCDATA)> +<!ATTLIST text:object-count style:num-format %string; #IMPLIED> +<!ATTLIST text:object-count style:num-letter-sync %boolean; "false"> + +<!ELEMENT text:bibliography-mark (#PCDATA)> +<!ATTLIST text:bibliography-mark text:bibiliographic-type + ( article | book | booklet | conference | custom1 | custom2 | custom3 | + custom4 | custom5 | email | inbook | incollection | inproceedings | + journal | manual | mastersthesis | misc | phdthesis | proceedings | + techreport | unpublished | www ) #REQUIRED > +<!ATTLIST text:bibliography-mark text:identifier CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:address CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:annote CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:author CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:booktitle CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:chapter CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:edition CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:editor CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:howpublished CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:institution CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:journal CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:month CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:note CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:number CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:organizations CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:pages CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:publisher CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:school CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:series CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:title CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:report-type CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:volume CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:year CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:url CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:custom1 CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:custom2 CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:custom3 CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:custom4 CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:custom5 CDATA #IMPLIED> +<!ATTLIST text:bibliography-mark text:isbn CDATA #IMPLIED> + + +<!ELEMENT text:bookmark EMPTY> +<!ATTLIST text:bookmark text:name CDATA #REQUIRED> + +<!ELEMENT text:bookmark-start EMPTY> +<!ATTLIST text:bookmark-start text:name CDATA #REQUIRED> + +<!ELEMENT text:bookmark-end EMPTY> +<!ATTLIST text:bookmark-end text:name CDATA #REQUIRED> + +<!ELEMENT text:reference-mark EMPTY> +<!ATTLIST text:reference-mark text:name CDATA #REQUIRED> + +<!ELEMENT text:reference-mark-start EMPTY> +<!ATTLIST text:reference-mark-start text:name CDATA #REQUIRED> + +<!ELEMENT text:reference-mark-end EMPTY> +<!ATTLIST text:reference-mark-end text:name CDATA #REQUIRED> + +<!ELEMENT text:footnotes-configuration (text:footnote-continuation-notice-forward?,text:footnote-continuation-notice-backward?)> +<!ATTLIST text:footnotes-configuration style:num-prefix %string; #IMPLIED> +<!ATTLIST text:footnotes-configuration style:num-suffix %string; #IMPLIED> +<!ATTLIST text:footnotes-configuration style:num-format %string; #IMPLIED> +<!ATTLIST text:footnotes-configuration style:num-letter-sync %string; #IMPLIED> +<!ATTLIST text:footnotes-configuration text:citation-body-style-name %styleName; #IMPLIED> +<!ATTLIST text:footnotes-configuration text:citation-style-name %styleName; #IMPLIED> +<!ATTLIST text:footnotes-configuration text:default-style-name %styleName; #IMPLIED> +<!ATTLIST text:footnotes-configuration text:master-page-name %styleName; #IMPLIED> +<!ATTLIST text:footnotes-configuration text:start-value %integer; #IMPLIED> +<!ATTLIST text:footnotes-configuration text:footnotes-position (document|page) "page"> +<!ATTLIST text:footnotes-configuration text:start-numbering-at (document|chapter|page) "document"> + +<!ELEMENT text:footnote-continuation-notice-forward (#PCDATA)> +<!ELEMENT text:footnote-continuation-notice-backward (#PCDATA)> + +<!ELEMENT text:endnotes-configuration EMPTY> +<!ATTLIST text:endnotes-configuration style:num-prefix %string; #IMPLIED> +<!ATTLIST text:endnotes-configuration style:num-suffix %string; #IMPLIED> +<!ATTLIST text:endnotes-configuration style:num-format %string; #IMPLIED> +<!ATTLIST text:endnotes-configuration style:num-letter-sync %string; #IMPLIED> +<!ATTLIST text:endnotes-configuration text:start-value %integer; #IMPLIED> +<!ATTLIST text:endnotes-configuration text:citation-style-name %styleName; #IMPLIED> +<!ATTLIST text:endnotes-configuration text:citation-body-style-name %styleName; #IMPLIED> +<!ATTLIST text:endnotes-configuration text:default-style-name %styleName; #IMPLIED> +<!ATTLIST text:endnotes-configuration text:master-page-name %styleName; #IMPLIED> + +<!-- Validity constraint: text:footnote and text:endnote elements may not + contain other text:footnote or text:endnote elements, even though the DTD + allows this (via the %text; in the foot-/endnote-body). + Unfortunatetly, this constraint cannot be easily specified in the DTD. +--> +<!ELEMENT text:footnote (text:footnote-citation, text:footnote-body)> +<!ATTLIST text:footnote text:id ID #IMPLIED> + +<!ELEMENT text:footnote-citation (#PCDATA)> +<!ATTLIST text:footnote-citation text:label %string; #IMPLIED> + +<!ELEMENT text:footnote-body (text:h|text:p| + text:ordered-list|text:unordered-list)*> + +<!ELEMENT text:endnote (text:endnote-citation, text:endnote-body)> +<!ATTLIST text:endnote text:id ID #IMPLIED> + +<!ELEMENT text:endnote-citation (#PCDATA)> +<!ATTLIST text:endnote-citation text:label %string; #IMPLIED> + +<!ELEMENT text:endnote-body (text:h|text:p| + text:ordered-list|text:unordered-list)*> + +<!ENTITY % sectionText "(text:h|text:p|text:ordered-list| + text:unordered-list|table:table|chart:chart|draw:page| + draw:a|draw:text-box|draw:image|text:section| + text:table-of-content|text:illustration-index| + text:table-index|text:object-index|text:user-index| + text:alphabetical-index|text:bibliography| + text:index-title|%change-marks;)*"> + +<!ELEMENT text:section ((text:section-source|office:dde-source)?, + %sectionText;) > + +<!ATTLIST text:section text:name CDATA #REQUIRED> +<!ATTLIST text:section text:style-name %styleName; #IMPLIED> +<!ATTLIST text:section text:display (true|none|condition) "true"> +<!ATTLIST text:section text:condition %formula; #IMPLIED> +<!ATTLIST text:section text:protected %boolean; "false"> +<!ATTLIST text:section text:protection-key CDATA #IMPLIED> + +<!ELEMENT text:section-source EMPTY> +<!ATTLIST text:section-source xlink:href %string; #IMPLIED> +<!ATTLIST text:section-source xlink:type (simple) #FIXED "simple"> +<!ATTLIST text:section-source xlink:show (embed) #FIXED "embed"> +<!ATTLIST text:section-source text:section-name %string; #IMPLIED> +<!ATTLIST text:section-source text:filter-name %string; #IMPLIED> + +<!ELEMENT text:table-of-content (text:table-of-content-source, + text:index-body) > +<!ATTLIST text:table-of-content text:style-name %styleName; #IMPLIED> +<!ATTLIST text:table-of-content text:protected %boolean; "false"> + +<!ELEMENT text:table-of-content-source (text:index-title-template? , + text:table-of-content-entry-template*, + text:index-source-styles* ) > +<!ATTLIST text:table-of-content-source text:outline-level %integer; #IMPLIED> +<!ATTLIST text:table-of-content-source text:use-index-marks %boolean; "true"> +<!ATTLIST text:table-of-content-source text:use-index-source-styles + %boolean; "false"> +<!ATTLIST text:table-of-content-source text:index-scope (document|chapter) + "document"> +<!ATTLIST text:table-of-content-source text:relative-tab-stop-position + %boolean; "true"> +<!ATTLIST text:table-of-content-source fo:language %string; #IMPLIED> +<!ATTLIST text:table-of-content-source fo:country %string; #IMPLIED> +<!ATTLIST text:table-of-content-source text:sort-algorithm %string; #IMPLIED> + +<!ELEMENT text:table-of-content-entry-template (text:index-entry-chapter-number | + text:index-entry-page-number | + text:index-entry-text | + text:index-entry-span | + text:index-entry-tab-stop | + text:index-entry-link-start | + text:index-entry-link-end)* > +<!ATTLIST text:table-of-content-entry-template text:outline-level + %integer; #REQUIRED> +<!ATTLIST text:table-of-content-entry-template text:style-name + %styleName; #REQUIRED> + +<!ELEMENT text:illustration-index + (text:illustration-index-source, text:index-body)> +<!ATTLIST text:illustration-index text:style-name %styleName; #IMPLIED> +<!ATTLIST text:illustration-index text:protected %boolean; "false"> + +<!ELEMENT text:illustration-index-source (text:index-title-template?, + text:illustration-index-entry-template?) > +<!ATTLIST text:illustration-index-source text:index-scope + (document|chapter) "document"> +<!ATTLIST text:illustration-index-source text:relative-tab-stop-position + %boolean; "true"> +<!ATTLIST text:illustration-index-source text:use-caption %boolean; "true"> +<!ATTLIST text:illustration-index-source text:caption-sequence-name + %string; #IMPLIED> +<!ATTLIST text:illustration-index-source text:caption-sequence-format + (text|category-and-value|caption) "text"> +<!ATTLIST text:illustration-index-source fo:language %string; #IMPLIED> +<!ATTLIST text:illustration-index-source fo:country %string; #IMPLIED> +<!ATTLIST text:illustration-index-source text:sort-algorithm %string; #IMPLIED> + +<!ELEMENT text:illustration-index-entry-template + ( text:index-entry-page-number | + text:index-entry-text | + text:index-entry-span | + text:index-entry-tab-stop )* > +<!ATTLIST text:illustration-index-entry-template text:style-name + %styleName; #REQUIRED> + +<!ELEMENT text:table-index (text:table-index-source, text:index-body)> +<!ATTLIST text:table-index text:style-name %styleName; #IMPLIED> +<!ATTLIST text:table-index text:protected %boolean; "false"> + +<!ELEMENT text:table-index-source (text:index-title-template?, + text:table-index-entry-template?) > +<!ATTLIST text:table-index-source text:index-scope + (document|chapter) "document"> +<!ATTLIST text:table-index-source text:relative-tab-stop-position + %boolean; "true"> +<!ATTLIST text:table-index-source text:use-caption %boolean; "true"> +<!ATTLIST text:table-index-source text:caption-sequence-name + %string; #IMPLIED> +<!ATTLIST text:table-index-source text:caption-sequence-format + (text|category-and-value|caption) "text"> +<!ATTLIST text:table-index-source fo:language %string; #IMPLIED> +<!ATTLIST text:table-index-source fo:country %string; #IMPLIED> +<!ATTLIST text:table-index-source text:sort-algorithm %string; #IMPLIED> + +<!ELEMENT text:table-index-entry-template ( text:index-entry-page-number | + text:index-entry-text | + text:index-entry-span | + text:index-entry-tab-stop )* > +<!ATTLIST text:table-index-entry-template text:style-name + %styleName; #REQUIRED> + +<!ELEMENT text:object-index ( text:object-index-source, text:index-body ) > +<!ATTLIST text:object-index text:style-name %styleName; #IMPLIED> +<!ATTLIST text:object-index text:protected %boolean; "false"> + +<!ELEMENT text:object-index-source ( text:index-title-template?, + text:object-index-entry-template? ) > +<!ATTLIST text:object-index-source text:index-scope + (document|chapter) "document"> +<!ATTLIST text:object-index-source text:relative-tab-stop-position + %boolean; "true"> +<!ATTLIST text:object-index-source text:use-spreadsheet-objects + %boolean; "false"> +<!ATTLIST text:object-index-source text:use-draw-objects %boolean; "false"> +<!ATTLIST text:object-index-source text:use-chart-objects %boolean; "false"> +<!ATTLIST text:object-index-source text:use-other-objects %boolean; "false"> +<!ATTLIST text:object-index-source text:use-math-objects %boolean; "false"> +<!ATTLIST text:object-index-source fo:language %string; #IMPLIED> +<!ATTLIST text:object-index-source fo:country %string; #IMPLIED> +<!ATTLIST text:object-index-source text:sort-algorithm %string; #IMPLIED> + +<!ELEMENT text:object-index-entry-template ( text:index-entry-page-number | + text:index-entry-text | + text:index-entry-span | + text:index-entry-tab-stop )* > +<!ATTLIST text:object-index-entry-template text:style-name + %styleName; #REQUIRED > + +<!ELEMENT text:user-index (text:user-index-source, text:index-body) > +<!ATTLIST text:user-index text:style-name %styleName; #IMPLIED> +<!ATTLIST text:user-index text:protected %boolean; "false"> + +<!ELEMENT text:user-index-source ( text:index-title-template?, + text:user-index-entry-template*, + text:index-source-styles* ) > +<!ATTLIST text:user-index-source text:index-scope + (document|chapter) "document"> +<!ATTLIST text:user-index-source text:relative-tab-stop-position + %boolean; "true"> +<!ATTLIST text:user-index-source text:use-index-marks %boolean; "false"> +<!ATTLIST text:user-index-source text:use-graphics %boolean; "false"> +<!ATTLIST text:user-index-source text:use-tables %boolean; "false"> +<!ATTLIST text:user-index-source text:use-floating-frames %boolean; "false"> +<!ATTLIST text:user-index-source text:use-objects %boolean; "false"> +<!ATTLIST text:user-index-source text:use-index-source-styles + %boolean; "false"> +<!ATTLIST text:user-index-source text:copy-outline-level %boolean; "false"> +<!ATTLIST text:user-index-source fo:language %string; #IMPLIED> +<!ATTLIST text:user-index-source fo:country %string; #IMPLIED> +<!ATTLIST text:user-index-source text:sort-algorithm %string; #IMPLIED> + +<!ELEMENT text:user-index-entry-template ( text:index-entry-chapter | + text:index-entry-page-number | + text:index-entry-text | + text:index-entry-span | + text:index-entry-tab-stop )* > +<!ATTLIST text:user-index-entry-template text:outline-level %integer; #REQUIRED> +<!ATTLIST text:user-index-entry-template text:style-name %styleName; #REQUIRED> + +<!ELEMENT text:alphabetical-index (text:alphabetical-index-source, + text:index-body)> +<!ATTLIST text:alphabetical-index text:style-name %styleName; #IMPLIED> +<!ATTLIST text:alphabetical-index text:protected %boolean; "false"> + +<!ELEMENT text:alphabetical-index-source ( text:index-title-template?, + text:alphabetical-index-entry-template* ) > +<!ATTLIST text:alphabetical-index-source text:index-scope + (document|chapter) "document"> +<!ATTLIST text:alphabetical-index-source text:relative-tab-stop-position + %boolean; "true"> +<!ATTLIST text:alphabetical-index-source text:ignore-case %boolean; "false"> +<!ATTLIST text:alphabetical-index-source text:main-entry-style-name + %styleName; #IMPLIED> +<!ATTLIST text:alphabetical-index-source text:alphabetical-separators + %boolean; "false"> +<!ATTLIST text:alphabetical-index-source text:combine-entries + %boolean; "true"> +<!ATTLIST text:alphabetical-index-source text:combine-entries-with-dash + %boolean; "false"> +<!ATTLIST text:alphabetical-index-source text:combine-entries-with-pp + %boolean; "true"> +<!ATTLIST text:alphabetical-index-source text:use-keys-as-entries + %boolean; "false"> +<!ATTLIST text:alphabetical-index-source text:capitalize-entries + %boolean; "false"> +<!ATTLIST text:alphabetical-index-source text:comma-separated + %boolean; "false"> +<!ATTLIST text:alphabetical-index-source fo:language %string; #IMPLIED> +<!ATTLIST text:alphabetical-index-source fo:country %string; #IMPLIED> +<!ATTLIST text:alphabetical-index-source text:sort-algorithm %string; #IMPLIED> + +<!ELEMENT text:alphabetical-index-entry-template ( text:index-entry-chapter | + text:index-entry-page-number | + text:index-entry-text | + text:index-entry-span | + text:index-entry-tab-stop )* > +<!ATTLIST text:alphabetical-index-entry-template text:outline-level + (1|2|3|separator) #REQUIRED> +<!ATTLIST text:alphabetical-index-entry-template text:style-name + %styleName; #REQUIRED> + +<!ELEMENT text:alphabetical-index-auto-mark-file EMPTY> +<!ATTLIST text:alphabetical-index-auto-mark-file xlink:href CDATA #IMPLIED> +<!ATTLIST text:alphabetical-index-auto-mark-file xlink:type (simple) #FIXED "simple"> + +<!ELEMENT text:bibliography (text:bibliography-source, text:index-body) > +<!ATTLIST text:bibliography text:style-name %styleName; #IMPLIED> +<!ATTLIST text:bibliography text:protected %boolean; "false"> + +<!ELEMENT text:bibliography-source ( text:index-title-template?, + text:bibliography-entry-template* ) > + +<!ELEMENT text:bibliography-entry-template ( text:index-entry-span | + text:index-entry-tab-stop | + text:index-entry-bibliography )* > +<!ATTLIST text:bibliography-entry-template text:bibliography-type + ( article | book | booklet | conference | custom1 | custom2 | + custom3 | custom4 | custom5 | email | inbook | incollection | + inproceedings | journal | manual | mastersthesis | misc | + phdthesis | proceedings | techreport | unpublished | www ) + #REQUIRED > +<!ATTLIST text:bibliography-entry-template text:style-name + %styleName; #REQUIRED> + +<!ELEMENT text:index-body %sectionText; > + +<!-- +Validity constraint: text:index-title elements may appear only in +indices, and there may be only one text:index-title element. +--> +<!ELEMENT text:index-title %sectionText; > +<!ATTLIST text:index-title text:style-name %styleName; #IMPLIED> +<!ATTLIST text:index-title text:name %string; #IMPLIED> + +<!ELEMENT text:index-title-template (#PCDATA)> +<!ATTLIST text:index-title-template text:style-name %styleName; #IMPLIED> + +<!ELEMENT text:index-entry-chapter-number EMPTY> +<!ATTLIST text:index-entry-chapter-number text:style-name %styleName; #IMPLIED> + +<!ELEMENT text:index-entry-chapter EMPTY> +<!ATTLIST text:index-entry-chapter text:style-name %styleName; #IMPLIED> +<!ATTLIST text:index-entry-chapter text:display (name|number|number-and-name) + "number-and-name" > + +<!ELEMENT text:index-entry-text EMPTY> +<!ATTLIST text:index-entry-text text:style-name %styleName; #IMPLIED> + +<!ELEMENT text:index-entry-page-number EMPTY> +<!ATTLIST text:index-entry-page-number text:style-name %styleName; #IMPLIED> + +<!ELEMENT text:index-entry-span (#PCDATA)> +<!ATTLIST text:index-entry-span text:style-name %styleName; #IMPLIED> + +<!ELEMENT text:index-entry-bibliography EMPTY> +<!ATTLIST text:index-entry-bibliography text:style-name %styleName; #IMPLIED> +<!ATTLIST text:index-entry-bibliography text:bibliography-data-field + ( address | annote | author | bibiliographic_type | + booktitle | chapter | custom1 | custom2 | + custom3 | custom4 | custom5 | edition | editor | + howpublished | identifier | institution | isbn | + journal | month | note | number | organizations | + pages | publisher | report_type | school | + series | title | url | volume | year ) #REQUIRED> + + +<!ELEMENT text:index-entry-tab-stop EMPTY> +<!ATTLIST text:index-entry-tab-stop text:style-name %styleName; #IMPLIED> +<!ATTLIST text:index-entry-tab-stop style:leader-char %character; " "> +<!ATTLIST text:index-entry-tab-stop style:type (left|right) "left"> +<!ATTLIST text:index-entry-tab-stop style:position %length; #IMPLIED> + +<!ELEMENT text:index-entry-link-start EMPTY> +<!ATTLIST text:index-entry-link-start text:style-name %styleName; #IMPLIED> + +<!ELEMENT text:index-entry-link-end EMPTY> +<!ATTLIST text:index-entry-link-end text:style-name %styleName; #IMPLIED> + +<!ELEMENT text:index-source-styles (text:index-source-style)*> +<!ATTLIST text:index-source-styles text:outline-level %integer; #REQUIRED> + +<!ELEMENT text:index-source-style EMPTY> +<!ATTLIST text:index-source-style text:style-name %styleName; #REQUIRED> + +<!ELEMENT text:toc-mark-start EMPTY> +<!ATTLIST text:toc-mark-start text:id %string; #REQUIRED> +<!ATTLIST text:toc-mark-start text:outline-level %integer; #IMPLIED> + +<!ELEMENT text:toc-mark-end EMPTY> +<!ATTLIST text:toc-mark-end text:id %string; #REQUIRED> + +<!ELEMENT text:toc-mark EMPTY> +<!ATTLIST text:toc-mark text:string-value %string; #REQUIRED> +<!ATTLIST text:toc-mark text:outline-level %integer; #IMPLIED> + +<!ELEMENT text:user-index-mark-start EMPTY> +<!ATTLIST text:user-index-mark-start text:id %string; #REQUIRED> +<!ATTLIST text:user-index-mark-start text:outline-level %integer; #IMPLIED> +<!ATTLIST text:user-index-mark-start text:index-name %string; #IMPLIED> + +<!ELEMENT text:user-index-mark-end EMPTY> +<!ATTLIST text:user-index-mark-end text:id %string; #REQUIRED> + +<!ELEMENT text:user-index-mark EMPTY> +<!ATTLIST text:user-index-mark text:string-value %string; #REQUIRED> +<!ATTLIST text:user-index-mark text:outline-level %integer; #IMPLIED> +<!ATTLIST text:user-index-mark text:index-name %string; #IMPLIED> + +<!ELEMENT text:alphabetical-index-mark-start EMPTY> +<!ATTLIST text:alphabetical-index-mark-start text:id %string; #REQUIRED> +<!ATTLIST text:alphabetical-index-mark-start text:key1 %string; #IMPLIED> +<!ATTLIST text:alphabetical-index-mark-start text:key2 %string; #IMPLIED> +<!ATTLIST text:alphabetical-index-mark-start text:main-etry %boolean; "false"> + +<!ELEMENT text:alphabetical-index-mark-end EMPTY> +<!ATTLIST text:alphabetical-index-mark-end text:id %string; #REQUIRED> + +<!ELEMENT text:alphabetical-index-mark EMPTY> +<!ATTLIST text:alphabetical-index-mark text:string-value %string; #REQUIRED> +<!ATTLIST text:alphabetical-index-mark text:key1 %string; #IMPLIED> +<!ATTLIST text:alphabetical-index-mark text:key2 %string; #IMPLIED> +<!ATTLIST text:alphabetical-index-mark text:main-etry %boolean; "false"> + +<!ELEMENT text:bibliography-configuration (text:sort-key)*> +<!ATTLIST text:bibliography-configuration text:prefix %string; #IMPLIED> +<!ATTLIST text:bibliography-configuration text:suffix %string; #IMPLIED> +<!ATTLIST text:bibliography-configuration text:sort-by-position %boolean; "true"> +<!ATTLIST text:bibliography-configuration text:numbered-entries %boolean; "false"> +<!ATTLIST text:bibliography-configuration fo:language %string; #IMPLIED> +<!ATTLIST text:bibliography-configuration fo:country %string; #IMPLIED> +<!ATTLIST text:bibliography-configuration text:sort-algorithm %string; #IMPLIED> + +<!ELEMENT text:sort-key EMPTY> +<!ATTLIST text:sort-key text:key ( address | annote | author | + bibiliographic_type | booktitle | chapter | custom1 | custom2 | + custom3 | custom4 | custom5 | edition | editor | howpublished | + identifier | institution | isbn | journal | month | note | number | + organizations | pages | publisher | report_type | school | series | + title | url | volume | year ) #REQUIRED> +<!ATTLIST text:sort-key text:sort-ascending %boolean; "true"> + +<!ELEMENT text:linenumbering-configuration (text:linenumbering-separator?)> +<!ATTLIST text:linenumbering-configuration text:style-name %styleName; #IMPLIED> +<!ATTLIST text:linenumbering-configuration text:number-lines %boolean; "true"> +<!ATTLIST text:linenumbering-configuration text:count-empty-lines %boolean; "true"> +<!ATTLIST text:linenumbering-configuration text:count-in-floating-frames %boolean; "false"> +<!ATTLIST text:linenumbering-configuration text:restart-numbering %boolean; "false"> +<!ATTLIST text:linenumbering-configuration text:offset %nonNegativeLength; #IMPLIED> +<!ATTLIST text:linenumbering-configuration style:num-format (1|a|A|i|I) "1"> +<!ATTLIST text:linenumbering-configuration style:num-letter-sync %boolean; "false"> +<!ATTLIST text:linenumbering-configuration text:number-position (left|rigth|inner|outer) "left"> +<!ATTLIST text:linenumbering-configuration text:increment %nonNegativeInteger; #IMPLIED> + +<!ELEMENT text:linenumbering-separator (#PCDATA)> +<!ATTLIST text:linenumbering-separator text:increment %nonNegativeInteger; #IMPLIED> + +<!ELEMENT text:script (#PCDATA)> +<!ATTLIST text:script script:language CDATA #REQUIRED> +<!ATTLIST text:script xlink:href CDATA #IMPLIED> +<!ATTLIST text:script xlink:type (simple) #FIXED "simple"> + +<!ELEMENT text:measure (#PCDATA)> +<!ATTLIST text:measure text:kind (value|unit|gap) #REQUIRED> + +<!ELEMENT text:ruby (text:ruby-base, text:ruby-text)> +<!ATTLIST text:ruby text:style-name %styleName; #IMPLIED> + +<!ELEMENT text:ruby-base %inline-text;> + +<!ELEMENT text:ruby-text (#PCDATA)> +<!ATTLIST text:ruby-text text:style-name %styleName; #IMPLIED> + +<!-- elements for change tracking --> + +<!ELEMENT text:change EMPTY> +<!ATTLIST text:change text:change-id CDATA #REQUIRED> + +<!ELEMENT text:change-start EMPTY> +<!ATTLIST text:change-start text:change-id CDATA #REQUIRED> + +<!ELEMENT text:change-end EMPTY> +<!ATTLIST text:change-end text:change-id CDATA #REQUIRED> + +<!ELEMENT text:tracked-changes (text:changed-region)*> +<!ATTLIST text:tracked-changes text:track-changes %boolean; "true"> +<!ATTLIST text:tracked-changes text:protection-key CDATA #IMPLIED> + +<!ELEMENT text:changed-region (text:insertion | + (text:deletion, text:insertion?) | + text:format-change) > +<!ATTLIST text:changed-region text:id ID #REQUIRED> + +<!ELEMENT text:insertion (office:change-info, %sectionText;)> +<!ELEMENT text:deletion (office:change-info, %sectionText;)> +<!ELEMENT text:format-change (office:change-info)> + diff --git a/xmerge/source/palmtests/qa/comparator/pdbcomparison.java b/xmerge/source/palmtests/qa/comparator/pdbcomparison.java new file mode 100644 index 000000000000..785abbad0e75 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/pdbcomparison.java @@ -0,0 +1,542 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +import java.io.*; +import java.util.*; + +public class pdbcomparison +{ + + private String LOGTAG ="LOGFILE"; + private String OUTTAG ="OUTFILE"; + private String LISTTAG ="LISTFILE"; + private String PDBTAG1 ="PDBNAME1"; + private String PDBTAG2 ="PDBNAME2"; + + private String OUTFILE="pdbcomparison.out"; + private String LOGFILE="pdbcomparison.log"; + + private String pdbarr1[]; + private String pdbarr2[]; + + + /** + * Default Constructor + * + * @param + * @return + * + */ + public void pdbcomparison() + { + } + + /** + * Prints the command line arguments for this class + * + * @param + * + * @return void + * + */ + public void usage() + { + String str = new String(); + str += "********************************************************\n"; + str += " java pdbcomparison.java <propFile> \n"; + str += " where propFile is name of Property File...\n"; + str += "********************************************************\n"; + + System.out.println(str); + + } + + /** + * This method, read the Property file and validates the + * entries in that file, and accordingly sets the log file + * output file and updates the array pdbarr1 and pdbarr2 with + * list of pdb's to be compared. + * + * @param propFile Property filename which list the log/outputfile/list/pdb + * names + * @return + * + */ + public void parsePropertyFile(String propFile) + { + Properties defaultProps = new Properties(); + + try { + FileInputStream in = new FileInputStream(propFile); + defaultProps.load(in); + in.close(); + } catch (IOException e) { + System.out.println("Could not open Property File " + propFile); + return; + } + + + String logFile = defaultProps.getProperty(this.LOGTAG); + String outFile = defaultProps.getProperty(this.OUTTAG); + String listFile = defaultProps.getProperty(this.LISTTAG); + String pdbname1 = defaultProps.getProperty(this.PDBTAG1); + String pdbname2 = defaultProps.getProperty(this.PDBTAG2); + + // validate all command line arguments + if ((listFile == null) && ((pdbname1 == null) || (pdbname2 == null))) + { + System.out.println("Missing listFile or missing pdb filenames in Property file " + propFile); + return; + } + + if (logFile == null || logFile.length() == 0) + logFile = this.LOGFILE; + + if (outFile == null || outFile.length() == 0) + outFile = this.LOGFILE; + + + // validate log and output files + if (! validateAndCreateFile(logFile)) return; + if (! validateAndCreateFile(outFile)) return; + LOGFILE = logFile; + OUTFILE = outFile; + + System.out.println("Output is written to log file... " + LOGFILE); + if (listFile != null) + { + if (! checkFile(listFile)) return; + populatePDBArray(listFile); + } else { + if (! checkFile(pdbname1)) return; + if (! checkFile(pdbname2)) return; + populatePDBArray(pdbname1, pdbname2); + } + } + + /** + * This method validates if the file passed exists. + * If it does , then it is moved to <filename>.bak and then creates a newFile. + * Also validates permissions to create. + * + * @param filename name of file to be created + * @return true, if file could be created + * false, if could not. + * + */ + private boolean validateAndCreateFile (String filename) + { + if (filename == null) return false; + + File f = null; + try { + f = new File(filename); + } catch (NullPointerException e) { + System.out.println("Could not create a File object for file " + filename); + return false; + } + + if (f.exists()) + { + String newFile = filename + ".bak"; + File newF=null; + try { + newF = new File(newFile); + } catch (Exception ex) { + System.out.println("Could not get File Object instance for " + newFile); + return false; + } + + if (newF.exists()) + { + try { + newF.delete(); + } catch ( SecurityException se) { + System.out.println("Could not get delete " + newFile); + return false; + } + } + + try { + if (! f.renameTo(newF)) + { + System.out.println("Could not rename " + filename + " to " + newFile ); + return false; + } + } catch (SecurityException s) { + System.out.println("SecurityException: " + s.toString()); + return false; + } catch (NullPointerException n) { + System.out.println("NullPointerException: " + n.toString()); + return false; + } + } else { + try { + if (! f.createNewFile()) + { + System.out.println("Could not create " + filename + " Check permissions.."); + return false; + } + } catch (IOException e) { + System.out.println("IOException: " + e.toString()); + return false; + } catch (SecurityException s) { + System.out.println("SecuriityException: " + s.toString() ); + return false; + } + + } + + return true; + + } + + /** + * This method validates if the file exists and is readable + * + * @param filename name of file to be created + * @return true, if file exists and is readable + * false, if not. + * + */ + private boolean checkFile(String filename) + { + if (filename == null) return false; + + File f = null; + try { + f = new File(filename); + } catch (NullPointerException e) { + System.out.println("Could not create a File object for file " + filename); + return false; + } + + if (! f.exists()) + { + System.out.println("File " + filename + " does not exist... "); + return false; + } + + if (! f.canRead()) + { + System.out.println("Cannot read file " + filename); + return false; + } + + return true; + + } + + /** + * This method populates the pdb arrays with the names of the pdbs to + * compare. Ths listFile lists a series of entries, wherein each + * line indicates the PDB names to be compared. + * <pdbname1>=<pdbname2> + * + * @param listFile name of the listfile + * @return + * + */ + private void populatePDBArray(String listFile) + { + // open ListFile and populate the PDB list to be compared + if (listFile != null) + { + Properties listProps = new Properties(); + try { + FileInputStream in = new FileInputStream(listFile); + listProps.load(in); + in.close(); + } catch (IOException ex) { + System.out.println("Could not open List File " + listFile); + return; + } + + pdbarr1 = new String[listProps.size()]; + pdbarr2 = new String[listProps.size()]; + Enumeration e = listProps.keys(); + int j=0; + while (e.hasMoreElements()) + { + pdbarr1[j] = (String)e.nextElement(); + pdbarr2[j] = listProps.getProperty(pdbarr1[j]); + j++; + } + + } + } + + /** + * This method populates the pdb arrays with the names of the pdbs to + * compare. + * + * @param pdbname1 Name of 2nd PDB file to be compared + * @param pdbname2 Name of 2nd PDB file to be compared + * @return + * + */ + private void populatePDBArray(String pdbname1, String pdbname2) + { + if (pdbname1 == null) return; + if (pdbname2 == null) return; + + if ((pdbname1 != null) && (pdbname2 != null)) + { + pdbarr1 = new String[1]; + pdbarr2 = new String[1]; + + pdbarr1[0] = pdbname1; + pdbarr2[0] = pdbname2; + } + } + + /** + * This method populates the pdb arrays with the names of the pdbs to + * compare. + * + * @param arrayno Array number which corresponds to the pdb array + * containing list of pdbs + * If 1 then send pdbarr1, if 2 send pdbarr2 else null + * + * @return PDB string array containing list of PDB's + * + */ + private String[] getPDBArray(int arrayno) + { + if (arrayno == 1) return pdbarr1; + if (arrayno == 2) return pdbarr2; + + return null; + } + + /** + * This method comares 2 PDB's and returns true if comparison is equal. + * It uses the PDB Decoder class to decode to a PDB structure and then + * does record comparison + * + * @param pdbname1 Name of one PDB file to be compared + * @param pdbname2 Name of other PDB file to be compared + * + * @return returns true if both PDB's are equal else returns false + * + */ + private boolean comparePDB(String pdbname1, String pdbname2) + { + PalmDB pdb1=null, pdb2=null; + PDBDecoder decoder = new PDBDecoder(); + try { + pdb1 = decoder.parse(pdbname1); + } catch (Exception e) { + System.out.println("Could not parse PDB " + pdbname1); + return false; + } + + try { + pdb2 = decoder.parse(pdbname2); + } catch (Exception e) { + System.out.println("Could not parse PDB " + pdbname2); + return false; + } + + if (pdb1.equals(pdb2)) { + writeToLog("PDB " + pdbname1 + " and PDB " + pdbname2 + " are equal"); + + return true; + } else { + writeToLog("PDB " + pdbname1 + " and PDB " + pdbname2 + " are not equal"); + return false; + } + } + + + + /** + * Write message to LOGFILE + * + * @param msg Message to be written to log file + * @return + * + */ + private void writeToLog(String msg) + { + if (msg == null) return; + + // Get Output Stream from Log file + RandomAccessFile raf=null; + try { + raf = new RandomAccessFile(LOGFILE, "rw"); + } catch (Exception e) { + System.out.println ("Could not open file " + LOGFILE); + return; + } + + try { + long len = raf.length(); + raf.seek(len); + raf.write(msg.getBytes()); + raf.write("\n".getBytes()); + } catch (IOException e) { + System.out.println("ERROR: Could not write to File " + LOGFILE); + return; + } + } + + /** + * Write status of comparison to OUTFILE + * + * @param status Indicates whether comparsion of PDB's PASSED or FAILED + * @param pdbname1 file name of pdb which was compared. + * @param pdbname2 file name of pdb which was compared. + * + * @return + * + */ + private void writeToOutputFile(String status, String pdbname1, String pdbname2) + { + if (status == null) return; + if (pdbname1 == null) return; + if (pdbname2 == null) return; + + String msg = pdbname1 + "=" + pdbname2 + ":" + status; + + // Get Output Stream from Log file + RandomAccessFile raf=null; + try { + raf = new RandomAccessFile(OUTFILE, "rw"); + } catch (Exception e) { + System.out.println ("Could not open file " + OUTFILE); + return; + } + + try { + long len = raf.length(); + raf.seek(len); + + raf.write(msg.getBytes()); + raf.write("\n".getBytes()); + } catch (IOException e) { + System.out.println("ERROR: Could not write to File " + OUTFILE); + return; + } + + try { + raf.close(); + } catch (Exception e) { + System.out.println("ERROR: Could not close File " + OUTFILE); + return; + } + + } + + + + /** + * Main starting block of execution + * + * @param command line args captured in an array of Strings + * @return + * + */ + public static void main(String args[]) + { + + Date startTime = new Date(); + pdbcomparison pdbcmp = new pdbcomparison(); + int nargs = args.length; + int status=0; + + if (nargs != 1) + { + System.out.println("Incorrect no. of arguments passed..."); + pdbcmp.usage(); + System.exit(-1); + + } + + String propFile = args[0]; + + File f=null; + try { + f = new File(propFile); + } catch (Exception e) { + System.out.println("Exception: Could not open file " + propFile); + System.exit(-1); + } + + if (! f.canRead()) { + System.out.println("Exception: " + propFile + " is not a file "); + System.exit(-1); + } + + if (! f.canRead()) { + System.out.println("Exception: Cannot open file for reading. Please check permissions "); + System.exit(-1); + } + + // parse Property file + pdbcmp.parsePropertyFile(propFile); + + String pdbarr1[] = pdbcmp.getPDBArray(1); + String pdbarr2[] = pdbcmp.getPDBArray(2); + if ( (pdbarr1 == null) || + (pdbarr2 == null) || + (pdbarr1.length == 0) || + (pdbarr1.length == 0)) + { + System.out.println("pdbArray is empty. No PDBS to compare... \n"); + System.exit(-1); + } + + + pdbcmp.writeToLog("************** Start *****************"); + pdbcmp.writeToLog("PDB Comparison: start time " + startTime); + for (int i=0; i<pdbarr1.length; i++) + { + Date pdb_startTime = new Date(); + pdbcmp.writeToLog("\n"); + pdbcmp.writeToLog("start time " + pdb_startTime); + boolean val = pdbcmp.comparePDB(pdbarr1[i], pdbarr2[i]); + Date pdb_endTime = new Date(); + pdbcmp.writeToLog("end time " + pdb_endTime); + + if (val) { + pdbcmp.writeToOutputFile("PASSED", pdbarr1[i], pdbarr2[i]); + status=0; + } else { + pdbcmp.writeToOutputFile("FAILED", pdbarr1[i], pdbarr2[i]); + status=-1; + } + } + + Date endTime = new Date(); + pdbcmp.writeToLog("PDB Comparison: end time " + endTime); + pdbcmp.writeToLog("************** End *****************n"); + pdbcmp.writeToLog("\n"); + + System.exit(status); + } +} diff --git a/xmerge/source/palmtests/qa/docs/Doc_descriptions.sxc b/xmerge/source/palmtests/qa/docs/Doc_descriptions.sxc Binary files differnew file mode 100644 index 000000000000..ba6817d889ac --- /dev/null +++ b/xmerge/source/palmtests/qa/docs/Doc_descriptions.sxc diff --git a/xmerge/source/palmtests/qa/docs/Spreadsheet_descriptions.csv b/xmerge/source/palmtests/qa/docs/Spreadsheet_descriptions.csv new file mode 100644 index 000000000000..c798a553e78f --- /dev/null +++ b/xmerge/source/palmtests/qa/docs/Spreadsheet_descriptions.csv @@ -0,0 +1,39 @@ +File|Test Name|Description +c_addition.sxc|| +c_alignment.sxc|| +c_backwardrange.sxc|| +c_boolean.sxc|| +c_cellcurrencyalue.sxc|| +c_cellfloatvalue.sxc|| +c_cellpercentvalue.sxc|| +c_cellstringvalue.sxc|| +c_cellvalue.sxc|| +c_changetracking.sxc|| +c_character.sxc|| +c_chart.sxc|| +c_check.sxc|| +c_columnswidth.sxc|| +c_cyclic.sxc|| +c_dividebyzero.sxc|| +c_dividefloating.sxc|| +c_emptysheet.sxc|| +c_filter.sxc|| +c_forwardrange.sxc|| +c_hiddenrow.sxc|| +c_insertimage.sxc|| +c_invalidcellref.sxc|| +c_largerange.sxc|| +c_listrange.sxc|| +c_mathematical.sxc|| +c_null.sxc|| +c_protection.sxc|| +c_renamedsheets.sxc|| +c_rowheight.sxc|| +c_rowstyles.sxc|| +c_sheetreference.sxc|| +c_simpleformula.sxc|| +c_smallrange.sxc|| +c_styles.sxc|| +c_sumbackward.sxc|| +c_sumforward.sxc|| +c_threeemptysheet.sxc|| diff --git a/xmerge/source/palmtests/qa/docs/Spreadsheet_descriptions.sxc b/xmerge/source/palmtests/qa/docs/Spreadsheet_descriptions.sxc Binary files differnew file mode 100644 index 000000000000..7e9d37d3fa50 --- /dev/null +++ b/xmerge/source/palmtests/qa/docs/Spreadsheet_descriptions.sxc diff --git a/xmerge/source/palmtests/qa/lib/converterlib.pm b/xmerge/source/palmtests/qa/lib/converterlib.pm new file mode 100644 index 000000000000..d4e4eb6ea649 --- /dev/null +++ b/xmerge/source/palmtests/qa/lib/converterlib.pm @@ -0,0 +1,1174 @@ +#!/usr/bin/perl +######################################################################### + + #************************************************************************* + # +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org 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 Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# + #************************************************************************* + +#################################################################### +# File Name: converterlib.pm +# Version : 1.0 +# Project : XMerge +# Author : Brian Cameron +# Date : 5th Sept. 2001 +# +# This script enters text at position x,y on screen. +# +# Parameter +# x-coordinate +# y-coordinate +# Text to enter +# +########################################################################## + +use EmRPC; # EmRPC::OpenConnection, CloseConnection +use EmFunctions; +use EmUtils; + +# Set global_debug flag +# +$global_debug = $ENV{'ZENDEBUG'}; +#$em_script_home = "/export/home/test/qadir/bin"; +$em_script_home = $ENV{'EM_SCRIPT_HOME'}; +#$qa_script_home = "/export/home/test/qadir/qa-new/bin"; + $qa_script_home = $ENV{'QA_SCRIPT_HOME'}; +# +# CONVERT FUNCTIONS +# + +# convert_to_pdb +# directory - directory containing the xml-orig and pdb-orig +# subdirectories. +# file - file to convert +# extension - extension of file to convert (sxw or sxc) +# convert_to - what PDB format to convert into. +# +# Returns 0 if success, -1 otherwise. +# +# Converts file from XML to PDB +# +sub convert_to_pdb +{ + my $directory = $_[0]; + my $file = $_[1]; + my $extension = $_[2]; + my $convert_to = $_[3]; + my $pdb_directory = $_[4]; + my $rc = 0; + my $xmlfile = "$directory/$file.$extension"; + my $pdbdir = "$pdb_directory"; + + &enter_func("convert_to_pdb"); + + if (! -f "$xmlfile") + { + print "\nERROR, file $xmlfile does not exist\n"; + $rc = -1; + } + if (! -d "$pdbdir") + { + print "\nERROR, directory $directory/pdb-orig does not exist\n"; + $rc = -1; + } + + if ($rc != -1) + { + if ("$convert_to" eq "application/x-minicalc") + { + # Move all files over. + # + my $i = 1; + + while (-f "$pdbdir/$file-Sheet$i.pdb") + { + my $pdbfile = "$pdbdir/$file-Sheet$i.pdb"; + + print "\n"; + + if (-f "$pdbfile.old") + { + print "Removing $pdbfile.old\n"; + `/bin/rm -f $pdbfile.old`; + } + + print "Moving $pdbfile file to $pdbfile.old\n"; + `mv "$pdbfile" "$pdbfile.old"`; + + $i++; + } + } + else + { + if (-f "$pdbdir/$file.pdb") + { + print "\n"; + + if (-f "$pdbdir/$file.pdb.old") + { + print "Removing $pdbdir/$file.pdb.old\n"; + `/bin/rm -f $pdbdir/$file.pdb.old`; + } + + print "Moving $pdbdir/$file.pdb file to $pdbdir/$file.pdb.old\n"; + `mv "$pdbdir/$file.pdb" "$pdbdir/$file.pdb.old"` + } + } + + &start_rd($extension, $convert_to, $xmlfile, ""); + + if ("$convert_to" eq "application/x-minicalc") + { + # Must handle minicalc separately since it can + # convert to multiple files with this file name + # convention. + # + print "Moving $file-Sheet*.pdb files to $pdbdir\n"; + `mv $file-Sheet*.pdb $pdbdir`; + `chmod 666 $pdbdir/$file-*.pdb`; + } + else + { + print "Moving $file.pdb file to $pdbdir\n"; + `mv $file.pdb $pdbdir`; + `chmod 666 $pdbdir/$file.pdb`; + } + } + + &leave_func("convert_to_pdb"); + + return $rc; +} + +# convert_to_xml +# xmldir - directory to contain the xml output. +# xmlorigdir - directory to contain the xml input (used for merge) +# pdbfile - file to convert +# convert_from - what PDB format to convert from. +# extension - extension of file to convert (sxw or sxc) +# output - output filename to create +# merge_opt - 1 if convert and merge, 0 if convert only +# +# Returns 0 if success, -1 otherwise. +# +# Converts file from PDB to XML +# +sub convert_to_xml +{ + my $xmldir = $_[0]; + my $xmlorigdir = $_[1]; + my $pdbfile = $_[2]; + my $convert_from = $_[3]; + my $extension = $_[4]; + my $output = $_[5]; + my $merge_opt = $_[6]; + my $rc = 0; + + &enter_func("convert_to_xml"); + + my @args = split(/ /,$pdbfile); + + for ($i=0;$i <= $#args; $i++) + { + if (! -f "@args[$i]") + { + print "\nERROR, file $pdbfile does not exist\n"; + $rc = -1; + } + } + + if (! -f "$xmlorigdir/$output.$extension") + { + print "\nERROR, file $xmlorigdir/$output.$extension does not exist\n"; + $rc = -1; + } + if (! -d "$xmldir") + { + print "\nERROR, directory $xmlorigdir does not exist\n"; + $rc = -1; + } + if (! -d "$xmlorigdir") + { + print "\nERROR, directory $xmldir does not exist\n"; + $rc = -1; + } + + if ($rc != -1) + { + if ($merge_opt == 1) + { + print "Copying <$xmlorigdir/$output.$extension> to <$xmldir>\n"; + `cp $xmlorigdir/$output.$extension $xmldir/`; + + my $check_stamp = (stat("$xmldir/$output.$extension"))[9]; + + &start_rd($convert_from, $extension, $pdbfile, + "$xmldir/$output.$extension"); + + + # No need to move the file to the $xmldir since the merge + # argument specifies the output file. + + my $check_stamp_update = (stat("$xmldir/$output.$extension"))[9]; + if ($check_stamp eq $check_stamp_update) + { + print "\nERROR, Problem while merging <$xmldir/$output.$extension>\n"; + `mv $xmldir/$output.$extension $xmldir/$output.$extension.err`; + } + } + else + { + &start_rd($convert_from, $extension, $pdbfile, ""); + + print "Moving $output.$extension to $xmldir\n"; + `mv $output.$extension $xmldir`; + `chmod 666 $xmldir/$output.$extension`; + } + } + + &leave_func("convert_to_xml"); + + return $rc; +} + +# start_rd +# from - format to convert from +# to - format to convert to +# file - file to convert +# merge - merge filename ("" indicates convert-only with no merge) +# +# converts file from/to the specified formats. +# +sub start_rd +{ + my $from = $_[0]; + my $to = $_[1]; + my $file = $_[2]; + my $merge = $_[3]; + + print "\nConverting from $from to $to.\n"; + if ($global_debug) + { + &print_debug ("rd command is:\n"); + } + + if ($merge eq "") + { + &print_debug (" $em_script_home/rd -from $from -to $to $file\n"); + print "\nConverting from $from to $to with no merge.\n"; + `$em_script_home/rd -from $from -to $to $file`; + } + else + { + &print_debug (" $em_script_home/rd -from $from -to $to -merge $merge $file\n"); + print "\nConverting from $from to $to with merge.\n"; + `$em_script_home/rd -from $from -to $to -merge $merge $file`; + } + + print "Done converting.\n\n"; +} + +# +# POSE INTERACTION FUNCTIONS +# + +# open_connection +# display_debug - debug will be displayed if not 0 +# +# Opens the connection to pose. +# +sub open_connection +{ + my $display_debug = $_[0]; + my $rc; + + EmRPC::OpenConnection(6415, "localhost"); + + if ($display_debug && $global_debug) + { + print "\nPose Connection Opened\n"; + } +} + +# close_connection +# display_debug - debug will be displayed if not 0 +# +# Closes the connection to pose. +# +sub close_connection +{ + my $display_debug = $_[0]; + + EmRPC::CloseConnection(); + + if ($display_debug && $global_debug) + { + print "\nPose Connection Closed\n"; + } +} + +# start_pose +# pose_exe - name of pose executable. +# apps_load - The PRC files to load into pose, can be a comma +# separated list. +# run_prog - Program to run at startup. +# timeout - Timeout value to use when starting pose. +# +# Starts the Palm OS Emulator, loads PRC files, and starts +# a program. +# +sub start_pose +{ + my $pose_exe = $_[0]; + my $sessionfile = $ENV{'EM_SESSION_FILE'}; + my $romfile = $ENV{'EM_ROM_FILE'}; + my $apps_load = $_[1]; + my $run_prog = $_[2]; + my $timeout = $_[3]; + my $stay_in_loop = 1; + my $address; + my $title; + my $form; + my $label_id; + my $num_objects; + my $i; + my $ii; + my $rc = 1; + + my $pose_cmd = "$pose_exe "; + $pose_cmd .= " -psf $sessionfile "; + $pose_cmd .= "-load_apps $apps_load "; + $pose_cmd .= "-run_app $run_prog"; + +# It is more effective to use the -psf argument to +# set these values. +# +# $pose_cmd .= -rom $romfile "; +# $pose_cmd .= "-ram_size 8192 "; +# $pose_cmd .= "-device PalmVx "; + + &enter_func("start_pose"); + + if ($global_debug) + { + &print_debug("\n"); + &print_debug("pose command is:\n"); + &print_debug(" $pose_cmd\n"); + } + + print "\nLaunching pose...\n"; + system ("$pose_cmd &"); + + # Give time for pose to get started... + # + for ($i=0; $i < $timeout; $i++) + { + $tmp = $i + 1; + print "$tmp\n"; + + # Do not use pose_sleep here + # + sleep(1); + } + + # Verify pose started successfully, and fail otherwise... + # + $rc = &verify_pose(5); + if ($rc != 0) + { + $stay_in_loop = 0; + } + else + { + # Sleep before opening the connection again, after testing in + # the verify_pose function. + # + pose_sleep(2); + &open_connection(1); + print "\nChecking if the appropriate window is on screen...\n"; + } + + # Stop looping when the specified window has started. + # + for ($i=0; $i < $timeout && $stay_in_loop == 1; $i++) + { + $form = FrmGetActiveForm(); + $num_objects = FrmGetNumberOfObjects($form); + + for $ii (0..$num_objects - 1) + { + my ($object_type) = FrmGetObjectType($form, $ii); + + if ("$run_prog" eq "Quickword") + { + if ($object_type == frmTitleObj) + { + ($address, $title) = FrmGetTitle($form,); + + # Display count and title. + # + $tmp = $i + 1; + print "$tmp - title is $title\n"; + + if ("$title" eq "Quickword") + { + $stay_in_loop = 0; + $rc = 0; + last; + } + } + } + elsif ("$run_prog" eq "MiniCalc") + { + if ($object_type == frmLabelObj) + { + $label_id = FrmGetObjectId ($form, $ii); + ($address, $label) = FrmGetLabel($form, $label_id); + + # Display count and label. + # + $tmp = $i + 1; + print "$tmp - label is $label\n"; + if ("$label" =~ "Solutions In Hand") + { + $stay_in_loop = 0; + $rc = 0; + last; + } + } + } + } + + # Do not use pose_sleep here + # + sleep(1); + } + + # Do not use pose_sleep here + # + sleep(1); + + &leave_func("start_pose"); + return($rc); +} + +# kill_pose +# +# Kills all pose processes +# +sub kill_pose +{ + if ($global_debug) + { + print "Stopping pose process...\n"; + } + + `pkill pose`; +} + +# verify_pose +# timeout - timeout to wait for pose +# +# Tries to do a connect/close to Pose to see if +# it is working okay. +# +sub verify_pose +{ + my $timeout = $_[0]; + my $rc = 0; + + $rc = system("$em_script_home/verify_sane.pl $timeout"); + return $rc; +} + +# db_export +# dbname - Name of database to export +# +# Exports a palmdb file to /tmp +# +sub db_export +{ + my $dbname = $_[0]; + + &enter_func("db_export"); + print "\nExporting PDB file <$dbname> from pose\n"; + &pose_tap_pen(22, 20, 2); + &pose_tap_pen (15, 85, 2); + &enter_string($dbname, 1); + &pose_tap_pen (15, 126, 1); + &enter_string("/tmp/", 1); + &pose_tap_button("OK", 4); + &tap_applications(3); + print "Export of PDB file <$dbname> completed.\n"; + &leave_func("db_export"); +} + +# +# QUICKWORD SPECIFIC +# + +# start_quickword +# +# Assuming pose was launched with the -run_app flag to launch +# QuickWord on startup, this starts up QuickWord with the first +# file in the list and turns off write-protect. +# +sub start_quickword +{ + &enter_func("start_quickword"); + + # This will open the first file in the list. + # Assuming this will always be the case. + # + &pose_tap_pen(20, 18, 1); + &quickword_press_write_protect(); + + &leave_func("start_quickword"); +} + +# quickword_press_write_protect +# +# Useful function for pressing the write protect button +# to allow changes to be made. +# +sub quickword_press_write_protect +{ + &enter_func("quickword_press_write_protect"); + + my ($form) = FrmGetActiveForm(); + my ($num_objects) = FrmGetNumberOfObjects($form); + + for $ii (0..$num_objects - 1) + { + my ($object_type) = FrmGetObjectType($form, $ii); + + # The write protect button is the only frmGadgetObj + # on the QuickWord screen. + # + if ($object_type == frmGadgetObj) + { + my (%bounds) = FrmGetObjectBounds($form, $ii); + + if ($global_debug) + { + &print_debug(" Found QuickWord WriteProtect button\n"); + &print_debug(" left = $bounds{left}\n"); + &print_debug(" right = $bounds{right}\n"); + &print_debug(" top = $bounds{top}\n"); + &print_debug(" bottom = $bounds{bottom}\n"); + } + + # For some reason, the tapping of the write-protect button + # doesn't work unless you tap somewhere else first. + # + &pose_sleep(1); + &pose_tap_pen($bounds{left} + 2, $bounds{top} + 2, 1); + last; + } + } + + &leave_func("quickword_press_write_protect"); +} + +# quickword_find_replace +# from_string - string to replace +# to_string - string to replace with +# +# Uses QuickWord's find/replace utility to replace +# one string with another. +# +sub quickword_find_replace +{ + my $from_string = $_[0]; + my $to_string = $_[1]; + + &enter_func("quickword_find_replace"); + + # Move cursor to beginning... + # + &quickword_tap_at_top(1); + + # Move to "Find" field: + # Triple-click to highlight all the text in the field, + # so it is removed when the string is entered... + # + &pose_tap_button("Find", 2); + &pose_tap_pen(50, 100, 0); + &pose_tap_pen(50, 100, 0); + &pose_tap_pen(50, 100, 1); + + # sleep for 2 seconds to avoid double click after moving + # to replace field + # + &enter_string("$from_string", 2); + + # Move to "Replace" field: + # Triple-click to highlight all the text in the field, + # so it is removed when the string is entered... + # + &pose_tap_pen(50, 120, 0); + &pose_tap_pen(50, 120, 0); + &pose_tap_pen(50, 120, 1); + &enter_string("$to_string", 1); + + # Do find, then replace... + # + &pose_tap_button("Find", 1); + &pose_tap_button("Replace", 1); + &pose_tap_button("Cancel", 1); + + &leave_func("quickword_find_replace"); +} + +# quickword_tap_at_top +# secs - seconds to sleep after the tap +# +# Tap's at the top of the QuickWord document. +# +sub quickword_tap_at_top +{ + my $secs = $_[0]; + + &enter_func("quickword_tap_at_top"); + + # Sleep for a second to avoid any double-clicks + # from happening. + # + &pose_sleep(1); + + &pose_tap_pen(0, 15, $secs); + &leave_func("quickword_tap_at_top"); +} + +# Saves file and returns to the Application list. +# +sub close_quickword +{ + &enter_func("close_quickword"); + + &pose_tap_button("Done", 2); + &tap_applications(2); + + &leave_func("close_quickword"); +} + +# +# MINICALC SPECIFIC +# + +# start_minicalc +# +# Assuming pose was launched with the -run_app flag to launch +# Minicalc on startup, this starts up Minicalc with the first +# file in the list. +# +sub start_minicalc +{ + &enter_func("start_minicalc"); + &pose_tap_button("OK", 1); + + # For now just tap on the first spreadsheet. Add support + # for multiple sheets later. + # + &pose_tap_pen(10, 40, 5); + + &leave_func("start_minicalc"); +} + +# close_minicalc +# +# Returns to the Application list (no need to save). +# +sub close_minicalc +{ + &enter_func("close_minicalc"); + &tap_applications(3); + &leave_func("close_minicalc"); +} + +# minicalc_enter_cell +# row - row to enter value, starting with 1 +# col - column to enter value, starting with 1 +# val - value to enter +# +# Only valid for minicalc. +# +# This only works if the val passed in has a '\n' at the +# end. +# +sub minicalc_enter_cell +{ + my $row = $_[0]; + my $col = $_[1]; + my $val = $_[2]; + my $i; + my $j; + + &enter_func("minicalc_enter_cell"); + + if ($global_debug) + { + &print_debug (" tapping to cell row=<$row> col=<$col>\n"); + } + + # Tap pen on home button to start with row=1, col=A + # at top left. + # + pose_tap_pen(1, 1, 3); + + # Now the cell should be in the top-left corner, + # so click there. However we must first click + # in another cell or pose doesn't acknowledge the + # click. + # + # pose_tap_pen(120, 95, 1); + # pose_tap_pen(21, 9, 1); + + # Click the down button once for each row. + # Must pause 3 seconds each time, otherwise MiniCalc + # will not keep up. + # + for ($i=0; $i < $row; $i++) + { + if ($global_debug) + { + &print_debug (" Typing carrage return to go down\n"); + } + enter_string("\n", 1); + } + + # Click the right button once for each col. + # Must pause 3 seconds each time, otherwise MiniCalc + # will not keep up. + # + for ($i=0; $i < $col; $i++) + { + if ($global_debug) + { + &print_debug (" Typing tab to go right\n"); + } + + enter_string("\t", 1); + } + + # enter string + # + &enter_string($val, 1); + + &leave_func("minicalc_enter_cell"); +} + +# +# GENERIC UTILIIES (pose) +# + +# tap_applications +# secs - seconds to sleep after the tap +# +# taps pen on the Applications button. +# +sub tap_applications +{ + my $secs = $_[0]; + + &enter_func("tap_applications"); + + &pose_tap_pen(15, 170, 1); + &pose_tap_pen(155, 10, 1); + &pose_tap_pen(155, 10, $secs); + + &leave_func("tap_applications"); +} + +# enter_string_at_location +# x - x-location to enter string +# y - y-location to enter string +# in_string - string to enter +# application - appliation (QUICKWORD or MINICALC) +# +# Enters a string at the specified x,y position. +# +sub enter_string_at_location +{ + my $x_val = $_[0]; + my $y_val = $_[1]; + my $in_string = $_[2]; + my $application = $_[3]; + my $x; + my $y; + + &enter_func("enter_string_at_location"); + + $x = $x_val; + $y = $y_val; + + if ($application eq "QUICKWORD") + { + # Allow users to specify TOP/BOTTOM/LEFT/RIGHT + # for QuickWord. + # + if ($y_val eq "TOP") + { + if ($global_debug) + { + &print_debug(" Converting TOP to 15\n"); + } + + $y = 15; + } + if ($y_val eq "BOTTOM") + { + if ($global_debug) + { + &print_debug(" Converting BOTTOM to 144\n"); + } + + $y = 144; + } + if ($x_val eq "LEFT") + { + if ($global_debug) + { + &print_debug(" Converting LEFT to 0\n"); + } + + $x = 0; + } + if ($x_val eq "RIGHT") + { + if ($global_debug) + { + &print_debug(" Converting RIGHT to 152\n"); + } + + $x = 152; + } + } + + # Just to make sure the offset isn't outside the + # proper area. + # + if ($x >= 100) + { + $offset = -2; + } + else + { + $offset = 2; + } + + &off_tap_pen($x, $y, $offset); + &enter_string($in_string, 1); + + &leave_func("enter_string_at_location"); +} + +# off_tap_pen +# x - x-location to tap +# y - y-location to tap +# offset - x-offset to use for first tap. +# +# For some reason, pose does not register a single +# pen tap if the last single pen tap was also +# at the same x,y coordinate (even if the last tap +# was a while ago). So this function does two +# slightly different pen taps to ensure then pen +# tap happens. +# +sub off_tap_pen +{ + my $x = $_[0]; + my $y = $_[1]; + my $offset = $_[2]; + + &enter_func("off_tap_pen"); + + # sleep for 2 seconds to avoid double-click. + # + &pose_tap_pen_hard($x + $offset, $y, 2); + &pose_tap_pen_hard($x, $y, 1); + + &leave_func("off_tap_pen"); +} + +# enter_string +# in_string - string to enter +# secs - seconds to sleep after entering the string +# +# Enters a string +# +sub enter_string +{ + my $in_string = $_[0]; + my $secs = $_[1]; + my $j; + + &enter_func("enter_string"); + + if ($global_debug) + { + # Display in_string so \n and \t values + # show up as normal ASCII. + # + if ($in_string eq "\n") + { + &print_debug(" Entering string : <\\n>\n"); + } + elsif ($in_string eq "\t") + { + &print_debug(" Entering string : <\\t>\n"); + } + else + { + &print_debug(" Entering string : <$in_string>\n"); + } + } + + # Replace "\n" with real carrage returns. + # + my $string_val = $in_string; + $string_val =~ s#\\n#\n#g; + + # Replace "\t" with a real tab. + # + $string_val =~ s#\\t#\t#g; + + # Convert string to ASCII numeric values + # + my @array = unpack("C*", $string_val); + + # Enter string one key at a time. + # + for ($j=0; $j <= $#array; $j++) + { + $queue_size = EnterKey($array[$j], 0, 0); + } + + if ($secs > 0) + { + pose_sleep($secs); + } + + &leave_func("enter_string"); +} + +# +# GENERIC UTILIIES (non pose) +# + +# get_date_string +# +# Returns a timestampe string in yyyymmddHHMM format, where: +# yyyy = year +# mm = month +# dd = day +# HH = hour +# MM = minute +# +# This sort of datestamp is used to create the output directory +# names, so it used in various places. +# +sub get_date_string +{ + my $cur_secs = time; + my @lu = localtime $cur_secs; + my $lu_secs = $lu[1]; + my $lu_hours = $lu[2]; + my $lu_day = $lu[3]; + my $lu_mon = $lu[4] + 1; + my $lu_year = $lu[5] + 1900; + my $lu_str = $lu_year; + + if ($lu_mon < 10) + { + $lu_str .= "0"; + } + $lu_str .= $lu_mon; + + if ($lu_day < 10) + { + $lu_str .= "0"; + } + $lu_str .= $lu_day; + + if ($lu_hours < 10) + { + $lu_str .= "0"; + } + $lu_str .= $lu_hours; + + if ($lu_secs < 10) + { + $lu_str .= "0"; + } + $lu_str .= $lu_secs; + + return $lu_str; +} + +# +# DEBUG FUNCTIONS - Wrapper functions +# + +# pose_tap_pen +# x - x-position of pen tap +# y - y-position of pen tap +# secs - seconds to sleep after the tap +# +# Taps pen at specified position and displays debug info +# +sub pose_tap_pen +{ + my $x = $_[0]; + my $y = $_[1]; + my $secs = $_[2]; + + if ($global_debug) + { + &print_debug(" Tapping pen at : $x,$y\n"); + } + + TapPen($x, $y); + + if ($secs > 0) + { + pose_sleep($secs); + } +} + +# pose_tap_pen_hard +# x - x-position of pen tap +# y - y-position of pen tap +# secs - seconds to sleep after the tap +# +# Taps pen at specified position and displays debug info +# This function works more effectively in situations where +# pose_tap_pen is flakey. This function is not good for +# double/triple click situations since it is slow. +# +sub pose_tap_pen_hard +{ + my $x = $_[0]; + my $y = $_[1]; + my $secs = $_[2]; + + if ($global_debug) + { + &print_debug(" Tapping pen hard at : $x,$y\n"); + } + + `$qa_script_home/tappen.pl $x $y`; + + if ($secs > 0) + { + pose_sleep($secs); + } +} + +# pose_tap_button +# button - button to press +# secs - seconds to sleep after the button press +# +# Presses specified button and displays debug info +# +sub pose_tap_button +{ + my $button = $_[0]; + my $secs = $_[1]; + + if ($global_debug) + { + &print_debug(" Tapping button : $button\n"); + } + + TapButton($button); + + if ($secs > 0) + { + pose_sleep($secs); + } +} + +# pose_sleep +# secs - seconds to sleep +# +# Sleeps the specified amount of time and displays debug info +# +sub pose_sleep +{ + my $secs = $_[0]; + + if ($global_debug) + { + &print_debug(" Sleeping : $secs seconds\n"); + } + + sleep($secs); +} + +# enter_func +# func - function name +# +# Displays debug info about entering specified function. +# +sub enter_func +{ + my $func = $_[0]; + + if ($global_debug) + { + &print_debug("Function enter : $func\n"); + } +} + +# leave_func +# func - function name +# +# Displays debug info about leaving specified function. +# +sub leave_func +{ + my $func = $_[0]; + + if ($global_debug) + { + &print_debug("Function exit : $func\n"); + } +} + +# print_debug +# string - string to print +# +# Displays debug message with a # at the beginning of the line. +# +sub print_debug +{ + my $string = $_[0]; + + print "# $string"; +} + +1; + diff --git a/xmerge/source/palmtests/qa/palm-session/session b/xmerge/source/palmtests/qa/palm-session/session new file mode 100644 index 000000000000..900c4981cc0c --- /dev/null +++ b/xmerge/source/palmtests/qa/palm-session/session @@ -0,0 +1,8 @@ +DStrÇ£¾š{07¯lÙ;¢;¯l=8¯¬È+ÛfDœñݼr‹#.É+G’WŽz8¯Œc`å6E<’Wn»8¯|ÁOå•ÛŸžWn·>¯Üᣑ¬ã'ç•/šWîëüƒs÷ïß—»ß17w¿óÎÜ=ç¹û´ûs÷ûî‰x:wŸº{îüô;"îÌ=ÎŽønîým[îùð¹¹çïψ¸?÷|äšÜýòs÷¤›"çžíÑ‘Wï0;âò¼zä§óêQ£óêí‰ñ yõèk#äÕ[‘W¿ð®jX½cÊ«_tMÄ=yõ„ÏD,Ϋ_|XDÔ³ó¤ˆCòê]åÕ/‰:_uLønÄS¹{—Žˆër÷®÷åîÝÆä•SžÌ+_ú‹¼r÷Ïä•{>‘W¾,Ö{RkD¸LZšW¾<ÖïÈ7ùŒÈ®ûœ±.¯Üw—ˆEy嫯Ê+_»{Ä11Ž¯kÏ«—IJ,‰åZó_ãÝyõé÷åÕŒå;-Öåc±|Kß“W¿Û¼úoÇäÕgÄ:0–ïƒD¾é_Ï«—õçÕg]±2¯>'ò}W^}þ~yõߎ|WæÕç.Ï«Ï›•W(æó÷³#ΈºÏ¿9¯þÀyõ‘öá7Gz¤ïiOE¹ù‘viÄ7c™.É«Oåß»(ÒbÚ…£"®ÍÝ;Ä6Ýa}î~ᕹ{üG#b{m5þ‰Ü½ãŒˆ˜¾ãN¹;ì»_ü¾¼º3êï¼!¯îíÏ«¿ÛìGQï:"fåÕß?&â܈/çÕ7wä5m±>7¯‹ü±N·Äòݲ ¯¾5åÕ?h‹þž±ì?8/¯þak^}{äûÅ”¼ú—»æÕwñÕ¼úÇs#îΫû–×÷ƒŸ‡Å¯¢®ûc>ä¼úÁ½òêßÆúývD^ýh¬ÓãQþ–X¶'bú®‹<çÕOžózr}^ýŸÓbÚ²ˆå1|W^½îM1Ÿ°úɉUýk>~n^sI{^óŠœ×ìÇöÞWE¼&bAÄíŽi±œ_Šy}þ¾¼úò¾¼úŠö¼úª¥yõŠ‹"=œ¯80Ưϫ¿õ_ù¾²&¦×lmÄMyÍøè¿ðyMû˜¼f‡ûb¸-w¿ ŽíFGL‰8!â“ýyÍ7#ß7¯‰ˆ|ß¾$¯ùÎWóšÎˆ®)yÍÊX¦ïŒÈkºwÏk¾wD^ssL_}XDôo¾3¯¹e‡H_–×Ü´oÄü¼fM¤¯y2¯é]±"¦ÅôÞ‡òšµëóšžî˜Çyyͪû£Ü1Qî–Oç5ß¿!òõFù»büÖ˜ç®QwG™ïoõEÝ=“">ãq¬õƾ²öŒÜý½cs÷MGDÜi=1Üóù˜ûQϺèG»ÒmBïù‘ç–Er÷÷cßûþ#¹ûæ›s÷í³s÷Wäî[ŠØ!wÿ Æ°gDoî¾mLDÌç¶þÜýÓ¥¹ûÞ£¿2úí¹ûgQÏ}³".ËÝ¿úzî~à®Üýà“QöÁ˜ß-1»b?¿;œïþfîþX–ÿˆ´ŸLÊÝÏÌÝ¿¹$æwTî¾?êúñ^yåÉц¾÷ƒÑ¾M^¹lq^uÝWóª¯E|}nÄSyÕõÇF[ðá¼ò
Ñ^mÊ~—敯ÿz^¹ÿ yå´sÏÛžÎ=_œ{þbÛÜsÌÔÜóöèÿÕò¾<¦}=÷Ì{NŒ6ôƒŸÎ=³¿š{>Й{Î</ò7b]î9áìÜsòÌH‹rgÎÊ=ïz*÷|â£÷æžONŠx_Äc¹çŒ:ŽˆØ5ÚäØ7NýáüÛòš×î•×Lýe¹{¯X×W,ˆØ;w¿2¶Í+[s÷ÞWFÿôÜ=ùúÜýª]cÚõyÍ¡Kóš×ÇþwÀéyÍþ;÷œó?û„ÜsnÜ×~è°ÜsÁ‚hëGÅpIõ9ûž¼æ½Ûå5Kâzãq]òÎ箿ž™»f‡å9SóÊúòÊŒóÎ?öç•—^㟚qQD´ÍŸž™W^íïeqûç8ýsGÄyågâ¼ô™Ë"¢Ýþl”½l×¼òÃ7å•Ÿ¼?wÍk‘“—æ®S¾œWž¹<¯<+ç•'Fÿëyõ·ÞÑq^ÄŠˆ‡rÏ_ÆùiÖ‡sÏ[¦çž£bø¨"V䞣WäUÛÞœW;$¯Úæ31×açĵÈýïÉ«VMÏ«þí¦¼æÞÉyÕÜòª.Ï]÷žŸWóî>=¯¾òâ¼æGoÎkîzW^óã;óÚm®ÏkÇœ×nû®¼6›×n× ÿqiÄʈ÷åÞßǵȺ«òê¶ýâØç¿Î¼zÛ‡âZêþÜûë¸~‰k²Þ_¿+÷ÞûùÇÅù*Öï-oŽež×¼»¼rqì—KÃhÙµyåiÑN®‹ëYq=ø¢8¦o~sîÞ9Ú¤í;ùrî|ô˜¼jû¸n{ǹëmoŽ}:Žé¾uyÍ_GÝí»äî—ìÇôµyÍkb¢]ýÈQ¹sÕ®±ß…íÕýÑ,Ï]omx"¯¹?Úü§¦åU<‘»n‰}ýM±MœWûÓKçÇuJlû#ã:äôÎhÛöΫ—GÛ»Ý]yÕŸÌ«>þ_<6Ž¯óãœyœçŽÍ«ï‹cû¡¯æî×ıþšûóÊ£â8{ÛNqL½-ö·Å6>vTÄaŸÌ+ŽcêkªXóÛh{×<ðp^ó`XÌyW^ù®ØŸæ½#¯<aLDìïÞ+¯|ψˆåÑ~ź¬ŠvíÑ{ã|ç¦1q÷h\ߊk¾Çb9~眧>\º¿çÒ?Ä9í¿NŒëŠ{Â$Îÿvk^“å5-">˜W]ûÄò7åUŸ‹}âsçU_øf^uåùyÕÏ‹èÏ«®ú`^ÓûÏÝ—DÜ»×ߦq|wÄõãnÊ«î¸0¯º§;üÊ«Ÿ~ºšoußQî="zf÷Å5åcyÍ“qõpÛ)Öá‚ѹûG·EÛûêOc¿¼÷Œ¼êgÍ«úÆçU¿qc^õ˱qýº8wwOîú›¸æþ›xRZêûl´Ÿ½5÷|æ‘è·Eìñš¼rúÞ¹kÞü¼æ·GåUÿqsîyßî¹ëËÑŒ;&â©Ü½ÍuqŽŠmÞé[Źm|\‡—úÞ=6÷,üfî9å¹;Ú±îïD;ÿŽhCþzJî~W´#§ï•;/‹ëä8Ž;Wïín¤ßÕíl´?LÎÝqvÄws÷ãÑÞ>~^Ä͹û‰Ò†G{ýÀŠj>ÃMži¸û‰C¢Ü
¹ûwã#fDÄ9áwwEÛ~nĹûÉXžu÷åîßOÏÝÝoÊÝ«ŸŒsÉ¥yÍ'¦G¬Œˆsã'÷Ž8#â±¼ú¥ÑþuÅðFÛV‹}ðµ—æî}?˜»¾*w]÷*ÿžóš¥ïÊ=F[}ðìˆhƒßñ©h?ÕŸ{>mÊeÓrÏ?ÇqtÙ×sÏ_±(÷wql×ãrÏ'&äžÎ=—¬§Ðwæ5ã.ÉkÎ:,¯Ù-å5»_”×ìíë±qyYÌ{b,û«>™×|,öó|&Žï¶8^ßçï8¾Žc²µ5¯Ù)öË¢
Ú)Ú¼ŸÄuÒħóêö‡#fǺÄþ~ÃòÜýí/G¬‹ítYDì±M:ß“»¿mëëÎ+ÿ&î_¾}ã3ß¹ÿoNi¯?L[¤Þ2ߎ”â)狦FÌŠ8#"ž1Lˆ§™&§41žÿ¿ä¨èÏŒXñΔv»7ž›ÃçÇðÓ1<&â¢xDO&w»®ñL}^ã¹óÑ1‹“"æD¼7â¯#N8-âgEü]ĉø‡ˆOD|*âŸ#>qEÄ—"þ%â_#¾ñˆoGtE¬ŽXñýˆDÜñ㈟Fü<âWFü&âшßEü>âñô·%b‹ˆ-#¶ŽØ&bûˆ#^ñ’ˆÝ"^ñŠˆWE¼:âuoˆ8 â‡FñÖˆ£#Þñ×s"æEœqJÄ{#N8-âgEü]ĉø‡ˆOD|*âŸ#>qEÄ—"þ%â_#¾ñˆoGtE¬ŽXñýˆDÜñ㈟Fü<âWFü&âшßEü>âñÀº%b‹ˆ-#¶ŽØ&bûˆ#^ñ’ˆÝ"^ñŠˆWE¼:âuoˆ8 â‡FñÖˆ£#Þñ×s"æEœqJÄ{#N8-âgEü]ĉø‡ˆOD|*âŸ#>qEÄ—"þ%â_#¾ñˆoGtE¬ŽXñýˆDÜñ㈟Fü<âWFü&âшßEü>âq(´Dl±eÄÖÛDl±cÄ‹c‰éi|N-ñ7šè"g9JêÉi¯H¿´ŒÕŸó·§ÜyNü]äEñÄ¢ôÓNñ8¦âì–Z®ÉçF«}Qœ}nX—»¿!w
<”Wþm\EŒ½2¯ú§¹{븒~ÛvyuËÍyõ?ÅÃ+§å5—>‘{F̈8&"®^G¬Ì=#£g”Ñï,ùÉ=ÛŸŸ{^g½×çž7\ó+Ëü‹X–©e™ËÑë[>Ê2ÇñkQÖ,Å2÷|îÀÈÑ^ï§Uñ8ökÛå(“{¾WÖ_ëÈ=_þ×ãªû†ÈÛuOîY9!÷ô^›{n_–{îˆþërÏ]3rÏcüîY¹ç§{åžû.Í=¿Ú.br7÷üæÉÜ[;&÷¶íœ{·xOÄ#¹wdkÄ؈x²4rJÄ'F|>÷ŽŠi£fFqFÄùWF\Ñq[îOžF?–{·Š:·zSD\ne·Šic¢ü˜IQ~ÌÅk"žÊ½[ïñ®ˆOF|7➈X¶±3rï¶QǶ7åÞ¼9âÖܻݷG<‘{·ß.÷î0¿ü•(â’ˆ/GÜ™{Çï1=âôˆ¨kÇx:¶Óå¹÷EQÇ‹nνŽˆ´ËöâGrïÎ7FÄ<'N‰¸,÷¶Çz¾ä¨ˆoF¬Ï½»¼'"–y—¯G<–{_ºoÄÒÜ»kÌc×HÛu]îÝmjÄ¢ˆXŽÝʽ»Žˆ§s»ÇñîO”¿iEÜ–{÷üLî}Y¬×Ëbž“&D\’{÷™ë²ï/"â‰Ù«£Î×|7âΈH{mÔ¿ßÊÜûúŹ÷
±|ÓcY¦_iÓoˆ23âªú€0: òÛïÀY¹÷ 0žùÎÜûÆÎÜ{H,áïȽoº7÷þe¬Ãá#rï¬X–£ŽË½o‹ùüÕu¹wvļÏGÄ:Ì‹uŸåOˆe<áéÜûî¨ç¤¨óü˜~Á“¹÷Ãνÿù?~Qî]Ëô/;äÞ½/÷^ãÿ¶kD,ßW÷Šˆyíˆ{roì³½_ïϽÿëúïŸÎ½×/ν߈º¾¹_DäÿÖv1ŸoÅôo…Û·®Ì½7ܘ{o<8"Öë;×äÞ®‡sïÊû〉ãªvn?§‘õ³azA9ŽÊqU»°:ÒZâo£fÇß[þ©£åÓ©m›bzu´•ŒÑ•:.‹Ò3Kj9cÆäOÇǤ8æ®ýãÿ,y#÷‡#ç÷êÃ>ÿWZÒèø“ì`×’bÛ~26òqMsÓ!ñ_J[Æ)ÆRËk¢½][©lÓÆeÆÿÛ]Ê«Rg^Õ÷fqÏZ»/¯jëÿ_ÙnfBàÿ^8«Œøbuž‰³Ê3ãjúæÍn77¾3¢1wd©=ò~/ÆoÍk_ÏÅ®¿/¯ýF[ÄÁGÄô±ñ•¦;â„ÓÖò…›¹Ë·œê]ù&Óóëâ'ÀrUÖ¿EÕÚ e‰ãž0ÎjƒKühwˆ~zm½_îÓ}QÇNyí·~‘×~'¾#öÈóXêÎÛóÚ•æµÝ3óÚÕq¿ö3yíwcnzG^ûý‘ïûñðæí"âI`<¡_{óÝym<]_{ËwóÚøÈÚ[¯Ék°_ÄUyímñ´ÛN8?ââˆÏG\qCÄšˆ'òÚ†Ô·Ø5"ÊýðˆwDÌx8¯½ý›‘÷öxy{,ï;E‘×ÞÒwÆ2ÜõT^ûã]"ÌkîîÌkò¦XÇþXÇ8[ï:ÚZŽñúA|Öâû>›~jx±jø€ùó7IÛ4aBHO˜]¿ +ÿñ²æv¿*¶ÃòˆËÓÕ<wŠ}b§´åÈ4¾¡UU4·%¾·TûܨMkÝLÊo;.‰ÔŽ¸ò©wµÏo›F>•–ǵ¯<±S=±Œ•î³ñ_ý›qõï¶}´öÀç« )åµ—Uÿ^b|•*v¬=¯*'Ò=oS>(K»çúrÿò²íÊ—É^¶oùœtgÜ°¥——«²F·ç½Sö›òšöE§Äxí?:SÚ7Ö}—ræ®wµ‡Óy1´SŠ‚{ÜØWvý&9Ë<º—í[ï}Ö‰ámËxg¹ÜN/û`äŽU˜´{™öœºÃ"Wcƒ7òoš’s¨ç«Ïíø9ΟK¦ÚocI¶§FíŒM_}¯Z´—·ÇrLDÙîÏÛ§ì[yí•Õö®Š<—””^Zò–çIÑ=ëpsˆ~ÙË.ÑÖèhôËPÒ«íýr(”ñÜèÇ“Šj|»F?žZ”ñúQq ¦ký%¹tUýµ9ŸŽ‡AñÝÂx‚WV´tJK#ýìH<ÒK+çšåL±G\åîžÚÆ^i;DT]ä£åÁŸÎ;~éITIåËŽ¥[ßÈ’NY8÷”EsÌO[ä[OŽ3Oéfžôî“–žtú¼Åéø»£üê©CŸsczU¦%ßšÛëé/\|Êœ¥K†2•¡ý;ÇOX|ÊÒf™ÞÛêÉ1oÁ¼ÅsæG»´™KÌH{÷‚Åó›evê®—yó¼¥ï_¸øär…?¸Õ”FbzUfD¾ýér?Ý[Þó©¦tf_sh°¿ðý7çsÏåõä#O\¸xéA§n¼Fƒe–œxüàúüf¯zrGíoî¯Ýâ¬zïà6‹é7Gz<©ÚýüÈÛlvÙfŠmv^j;¦ìñÕ¾Uj‰¼Ÿ¼µÜû½{sïMq×üòæq}KUoìXõ®õÞؾ—¥–~3To\wôþðÖø6pÜ—~jmô£Þ9‹"ïrïíÓ"Ê~4;ÆoÉw|dVÄì|ÇE÷Fôç;þaDĤˆioŠ8.bQDGÄ%+"nˆ¸3âá|ÇÅm{EÌŒxgIJˆ‹#®‰¸=ßñ‰{òÿøšˆ§óŸšqs¾ãÓí'FÜ”ï¸ìîˆ'óŸ‰:¾óýÂ…ùŽ+®Íw\y¿eW\˺s,ëiÍ5ÿïö;j³ïŒzŽ.åÏì(ŸvÃv×Á “û&/˜<yöÎiƆ'ãH³Ù´Î ƒåÊÀäöþ1©o£´Ù›Ië¼vLꟶAÙמui¤5vÀÆ”É-ãǤuq\
ë&×&ŒIw6,%æ[[?¦åž›7Lk;¦å¦n˜6bĘ–”Ýt¨›Ü6rLˇF%ÄÐä1µ±Ûl”¶lç‘Ÿ}|å¸
ò
ô
6‡Zrsh¨ßúÀÐps¨µ·>4r]3%öö«êÃ;JkÖ7uÔÛÚößù
O/;kU_}úäQ«ÚÚv¼pÇ)“;Ïk™ÝrÖycÆß4~òä¾››sv-Ý<¶J뿬Ys¤Ý²s•vý¥ÃÓvØñÂ({Ù`Ú¢Zúþ×'Ž‰´^ÚÜt“kéÇ__Ò>tYs¾ã·<ëÒ_Viç\ØL;~Uü7vêäÉg}¨™6rݧtÃÈþe§užÓßœñÿx¿|§}ãîøŽSâ¯E›K»¡uâ¯û×ïß8ÅV…æ\Úú‚—nsÞŽg
6_QöÒ‘µèÆw3Tïñã·¨ÕF´\ºêœ¡ŠŒßúœÚý‘Ö3”6»¤íÞò©sVOuN”ýlí”áiWEÚ§Î;±35»Ùãǯ*ó]3uxÚµÇ×ZÎÂä¡´þý×ýç‡:ÖOû`îkÕ'@€aôF_ù¾É¿,šÐOÅöhsÒÑ?ˆ´/zÈ}—§´d׋¢ìÅÌýp¤}åÐC䧻`f¤m¹g#ýÜH›uÁÌèm¹Ç¡“ωúœpiP}ôÝ3gƤ»Q'ÄxÞLÚ3'•,4‡g¨ße7LÆWj}ñÒÛ¹4TѪUÛ¨F7µÖŸã¦¯+#î]Uó6qçõÍ„°8»j‹'ŽžÖÚÕ9öQßÚUæ–Vµo˜vvuUºaZçäE›”íŠm¶q}¿8orIÛaø<~^n7šoÿŒiG[¾Ô¿¼ä›Ø1<mÝŒ¾H×3|}—Uë;ò×ý1¥ÙM׃µÿìk&DBÕ’nè<¶¾`ná•+ÿìƒ#;§–[Ý]Ï–µ%íÚûȆicv™³åõiÒ§öyýøfÖ–mwù‡Ñ9Mºbæå±·Ö»’¶e|ãü
3/¿a(m×uQÚæ%3/_>˜6fêœÿ•¶yñ>»^ÖLÓ'@€næãÙòl®})íçGÌŠË9±qgó‹¶êÙfWÚ³?šççw~™ß’÷/^Ô¸SŠïTÕ¿ý+¸™õj&=[žgœß¥½~×Ò¥òûuGmq>?ðÔ¥K.l>›³Ø ÿlyžq~O”ùÍ=éÝ'å[s{}~3cléI§Ï«_>l0›Á‘gËóLó1©Ìï„ŧ,Í·öÞVŸßÁŸ2§\ý‘îÙò<ãüf—ù•+™Æ¿øž1oÁ¼ÅÏrúy¶<››_Ëì–4â†rÍqØœSãŠ'Ž½ú%ÞŸéÄÔrîÅçuÄõDóûŠë‰ï¤¶Ö¿(WCÕ5ËÔ´C…±CLyùÌr½×ÖòÊè—+}¢_‹þk£_þ¯×G?þ}Æ–ý£?"ú05.ÐÚZþ"ú£¢ÿ—Ñß2úo‰~Üùµù¶ŠþÛâ:rLôÿ*ú[Gÿo¢wW-ÇG\ôßýý“£¿MôFÛè/‰þ¢ÿþèoý¿þöÑ?3ú;l°ªÿ£#áÇÿÈËö\øþ‹ó÷\i±=ßòþØždß)“ž-Ïæ¶g5¿ee~KN<>ö×ß”'f1¿#‡.äŸq®Ï–g³ó‹wÇüòà·ÏŸ±î2!noZfÍ™Jû[Žlã)îöãÚsä×˵gu<ícß +¸ÅÇo¹h\ôÞ9¥ðe>³_|üVéÀhºÓáG87’GD´´\tøQÕµáŽé¢ùgŽ›ŸÎÙux/
¼2uÔÿ¶ÏÄwnÆΪ_L—ýó—3Ê؉1µ\×~¬ºÌ.SßµMµõ_ÄUÊ Ñª´ƒ¾{tÄ}ÚuÇ÷±awA/ˆ²UwÊœã¿;ʧï,¯'´””=ʾùÙêéÕ±iÔNe}ƤæÏY|ÊæWhïtÑ»Î|S4ÚsæÙ{þM:k»g+k‹~LÔ;³Yï¼ÅK7_ïËÓE³Ïœ6;M«>Ï™ýL#¥ÒžŽºÎýƒgêjiÔgÊ_ªóšüä’ãckD×¹¹†c8ןÁpì+ñÐaËtô‚%sÞ7onu»Ùû§€,[5âñúæ«_<”áò/œUíÝ^³ê“FUc¥uûx5TÚ·sÊÖÀbèßÊýe5ô便¬†¾Uî3«¡V%¢åkYýËi±O¶îŸo½nB¾ãüËòîšoÿ·CòÚ¾±¹wÕ/Ê·ÄòÚ߯þUôœoïïÏ?8½³ü;º¹÷‡·–³o9#–³T9s”»µrUZª%ˆ9±#¥öPxC¾ãš åÛ˹gù¥±”ºk™Þš¶¼ v¥Þ½_9'¿jò”ÉõnêÑ{O‰¼‘²ïPÊ>©Öº÷¾ñY‹Û¹¶ZÛÞñT«¶ÅÞ¯Ï{Gk_¹w<ûŠR¯zu”šRʶî}R=åµC)Kª”ƒß8˜ò®ò´oñ¼9'Ÿ0gÉÒæF‰™'Å=ç⹑sÆÌ#GͳG9ÿÔxâVN];œ2/ž»Í›·ô¤ïÞ:&¶Í8êÈQ¥õ3Ũ87mvŠZ¶5þƽãsJÚ7>§Æ“òÖøgÄçÌtp|¾)9g¥ãâó]ñšìÓÒtvlýóÒEÑØ\’âûXé3éóQë•iEœÃ¾œ¾g®ëc÷¯¥îðšÐšFO7¾Ÿ<ò´%KçRßaÊç_Ì9%îÙ‡º£—ž4?ššÁ´xâóGÊýÙmrÝßQ=•Ùé¼rß²ßÒè}lÇ´s¹+ô–É©<a(MXj)×Ê‘ÖGÛÂ%óêëX)-µY“ëOHâ¶=¦–ïP–oMÖÓÚ‡â©Zza5µœ êùFN{ˆomUM[‚–íª¡ò¬^ËV1T«ÒÆÄP½l<K#«´r×Rϧ³ÆPiõëiÛ-Šó[•/žã5Êî°äÔS.9åÝ‹ëë¶tÉ)eÝfMþo´—Qe_KÚjj}oj?üЙ‡¶¹ðÔqL4çV-iìï-Ñv=V¢L‰®~mKN9aqµ„cg‘òËæy°å×q>,×kÿýÒ¢ý6ú¥={<úåzí?£_®×þ+ú#óÍÆ¿=ù£uùÖ}‹;›ø7ž¿17ßòãóò÷žúßkÃbÞÔš¶úð¢E‹þ¦Z¶ÆGã[Qï5ò€“N‰cø´ôº½Ò«^õÚÉ{¥½¢Kƒ÷“çEM¿Jã6>ŸíÉÎ[O=éø“7sã¹Á<ÿoÙäHŒ…ß`à°hVÛD3ÔX—ƒOZ¼AÂAO‰ËÈ¡›á·môøíxZ:œáà9ßÅÕëÒ7¸Â}ã+ª§ÐƒEÏ0Ç:iéÐÌ"õÈ¥q✚Ò;NZÔ~йƒIÅ~¿tØÍúQ'-?81Êtê’¥OisX½kŒOÙh|ŸÆ÷mŽ¿yá³O·È³æ¼{ƒõ;|á»â)W³tós[D3µõ{Ê¿ŒZ®žñùýP±æЉmûn,ÔœÔìo|=ÍßÄrWQiYKwf_JŸ]·ëSËȧSË⟸ßj £6r cäg:G~(bUÄÏ#úÝ9rÝ‘#×ÐY{º£6ÐÚÑ2ЕâßÙ3ù‡=ãßj¹3‹úÊ<¢©½Ë,âß@YqUÕ_µbEGÔÚZ±¼ôGíWM¨¥±+VÄøVé£U†:ö«ú“V=´¢dœÔã¥}ä+ý/×®~¨ô¯îxx¿Ò_Ñ7elÕ¿~r-ú£W|9µw–þÕËGE¿uÅŠ§¾¢[±â+ëK“=iÅŠ/”þè˜ÍãÓÊ„jùÊr··§QqÞ(7ñ·5»Û¦×»fJéN1b 1}úô¡Íé#®Øl†¡éñoel¦†aÓ7[Ccúô˜ýˆÈ0´eœµ¯¿¹Œõé±àQÁ”a¥#¥Z‰¡é¥‚
2l8}úÀÆ6š>”a ^ÍÆÓ›bIª›Lodh:l:½Ê0eĈX’¨aØôæ–«×P FT“›ÛopËUk&n8}°‚飛ҘÜ,ÛP†È]Ô>ÿ
M–¡ØƤ¦ÏPJ—Éñ°¸¾˜õÏÆRO*+·,×8q,W.gÇ0ûS_\’þmzCÇÄŽêä]òÄñÇb9鱗³ß1Qþp²Ä+#a«Ç;Së@gŒDB)3zè8ˆ{Ö祃Ño]185–¹ž1ݶcŒÿcÊ`d/kS›ëÅbNѵſ½6îÒþ•¿«=ãßûꙇžX;¶üMpxÒÆÛiÿvˆëœzû·S•;ZÖu¤‘}iÜù3ÒøÍH³/mONNšÑŸ.}éøÔ¹WDoúåF¥‡óÜÔè¹é±óÛÒ{»§¦e—÷§×싦3‰’id¬UËú¨¹Ì'®,Ã}·j>uêÖ«;;£ù¹!Åçw:;ãDûOŽrNç˜Hk36uîß·«:G®u\›F-/Ÿ+Rç5£[Ç¥Îk–·¦i“¯N“Ïéœ|õ˜ÎŽÔÿòZû¸4©ó¦ö§ÒèUiÿ«RëµãJëxíS¥±}eÕ²¶®ˆ„j™vÚ®Ãw¦Ám×L,;ÜÀÀŽ;îØØö%½™U
¥V;ýŽ;V{Ô`r½dä+;J#µ¤•„’V¦TÉõ´zr5-
ÄÑ[M¯JVK%õÔfÉR Z¸é·M¯WVUÑœÅPj”¬fQ +–V¼d®—,ýR{=µY²¤TJ;4´Àƒ™KjŒTk[O;î8e¨âªú”"© +õÌõÜ%Þ25ª¨JV
bݼJ®JçzVÐ%7H,ÉUK9<gUM•m¨tu,k#ÎLåWØ]è8³¬ïFmĤ8—óo‰åöZÑ—†2ÃÚˆÛbO)Ým±Vnƒ¡² +gsbÚ4mJcò”tÛ”zWÎÃÑFìÕš¶YWÚˆò¬$ïE7Eb<³œcÍ/8T7þ8±6íÙòl¦Ø~Ãk¤–Xß‘ˆö¡¿#MŒãwÿÚìtƘEiÑ«&§¾h~?ÈybÛñiÝù‡¤þ¿ŸúÏ]–ÿ»uiÑÈþ*¦Æ5Ñ„‰iÜðö¡ÌcDÕ>ìZ-t늯DÒŠÇã3£5^Ñ?º/þų´|jšÔ?ºu¿hš—·MѤv\ý•õ£jWO®¥—v¬èì\™:¯N“kÕçôŽ«ÇuîóPÇËã•[‘âs¿itgz¨´µÒ|åéÒ2ÄEPÌ«Þ2ÄÂã¿MÛ†ÆÞ4Ø®—]l0í=ÍÖ~0q`à=ÑUÉ¥½¯r6Òª#¸œJb3-æ_ìT)õ²eߊÃ+öàHž/ÒKæ¥Ë<êùš™#µj‡Ê.U¥U™©1EKzUsI·UBu(ÇG#±9ZåÞLj9ìyëó*uV‡bY‹j&¥h#Z‹á©eÞÕº
ËÜ8ëWÍ:‹YQ«Ž–FñH¨R‹[³+¹©ƒÛ¨J‹Ô趎£|X;0q]µÿº™£V\uñ¨³¯šÃ<qnl^+Äesg‰qqÐOžœ:oºéüÎUqšês~5ÿ¶pgUïØ
Î)óš]uÎoŽÌ+c±ñÜPÕf)Œñß”ø¯ôÿÈ2XõëÓ6,WÕYÑ4¶F|-·5m7¦´ó–-Z’oþ« Q8ÚŠ7.[4oAóQQUãFÑV<[žçÐVĹ¿\Œ{<ÚŠ®h+vìKgÄ;M‹+³.K}ï[–˜:5=pÏÔôÄúñé‰eãÓS“ïJ§ï39} þm¾7ìÓ—v¾¥3ÝصĦmÅòXöI+ʯAW|elGi+jË£¨º*ÚŠZçCqÔë(]“ö_¿_G|N‹ÏŽqcãóñþ±W·ôGëѾgcEï¸ô…ŽI½ãFM“®KËã*âºÑ㢸fùS1›kÆ•¶âåO=綢¹ÏUýÆÎYj¼±/—är@6’Kj•³~6’#µ™/ÝpC•y¨ˆ5ØH-™78Ênˆ®™Ú<˜"çPr½õ=ª¤Ö\¥^Ѩ¶Ô[Õ1˜Z嬒c~õã?27«2¦VÉU
±p%5æWj®7]qEI-«6”i‘XZ¼Áä’¯jDÊ1ÝLm¦UÍäF¾J¸á[Ö¯Þ(UìUjT‡H™ÁðmÑ”o¤ÕÛŠ‘q'^o+F—ÕÿMOŒûŠ©ñЮOëÒäø/ºF¾h/ª|µÎZç¸õû¯ß?ë¬Å?N=Ð9.þäÚÈ7jƒ6â†êmU£_ß:·58K?–+–º(K_Ú~cz3_éׯvUŽýò$)ß²ÝüHŒc?žÌ”¡gîâض<ÏáØö‘ñÍê:aeû#ã:ad\'´Fãvãã>böøÔuá¨Ô7y|êë\–úã_n-× Ë&ö§©ñ,æÅѤ>ïë„1ÕuÂôr^Y®RÜGôÇÚŽíèL±UâbZŠÏZgÜAÄ6©ÅgŠë„xÓ¸Nè˜ÔY{¨\'Lg!ÿöP¹N¸±\þŸ_'4®ÿûfÙÿâR0–nãë„H‹»±rAÐØçùÒ?ýSœ†ŽýR6º)ÿôO‘Z5õúêÉŸ¨×‘⺹ž0øY¹C©'ï_ŸRŽÑfêÉÓ›¹«#·j'ª| ;–+‚2—Ùú±e›ù"ÑN.EÉWV¾qìW3j¦5ŽýªæÁ´jÝêÇþ°´Ác Q_©³aVš„jUZI,’ÑÕÇ«Ïj¼ž:˜^¥UGÐÆ× ë:FuœØqâÇFuŒ*1°™ë„qБRÄžõ(Ã~4;›\'ޔƣÈJ$ZÊA±ØÀÃÇF6ÆNŽ®ä6mpì§]1¬«fÔ¶gk?¡j+âoù¦õgGri+b¬}Öœ¹U¦Í}”¶âYò<‡¶b}ìì}iÜo—§‰ÿØž¦ÿÅìtZë¢4·µ?ݺïºÔ·z]úåŽëRÿ{Ö¥G/^–Öíqû²êZâŒÄ±÷;ïÿ¬mÅòXIW?{úŠïì÷o©õêþ›W¥Ñß3ö¦ôòþÎÚØôÊ1ñÓ§k:k7íÁ´1u\]ë¼ö©Ž¸êÛg¿øì_5¶cŵ7•Ïiñ9)ŽýR|®z(¾:M¶âêÚC1›Ï÷ž¢¹ÏUýjϬŸžâ³±×–Ä+ùô]©´rY8}à´Ò†Ä¾\ÏW](–ÔF[QÊViP²VÇÓ°´’ZêŽ{ŠæEæŽWLIWTY«£·:þKZ3ë`jIÛqJÉZoƒÇɵVËܼOH7Fæ’5j‰Ù5®¢Î¸Ùo,ó°ÔRÁPjuäV‹s*‹Q-ïðÔH«a°ÍŒ\Í´Á¶¢ºâ©çÞV]ü·ÚŠâ¼?ìžâ¨40û¬åg͸±ãïÒ·ÒGâµ\,ÏôãÛYÕ=Åز\q™›¾õÍ=SGëùíécë:RÇ.ñÅš§Ôñùˆ¨oRy_ÊvÍP=·]±]«î¶]*¨ju—47aXÏÒÛ¢+ƒe¸ä(ƒõôl§ê44XOÉSnS¢+3‹‚ms[ÓN{—v¢|ÿ"¯ýÉõ‘íDùõCó›!e›t'Öæ–<Õ^7™XOØL;ñÂ
Ÿ=ÄãšxÌŒ4ò÷q¬ßßž&^:9Mkˆ×ui:aĘ´lü˜ôÞÎx9cn:ëì´lDk:cј4mÑÔ4}Ѻ´s?‹¶bd´µ¨+=s.óQm“]ë˱âêÎòǯ-ÅCñ¹âÆ«ÆÄ‘ýPÇØ4úÆ«âè[=ÔQ[Õ±÷Uq!Ñ·wG3õ½¼µ/¥É/¯ÅÓËÉ“VöÕ:ÇLꌩc&]»wJý£¯}}×1úš½ÓSqɱ"¥«ÓS±a_>®\YŒ®žM6þìR-ÏøaÛºÈG»zég²¡Ô“ß^m¢Fz3ïÛO~ûÉÃÒ5Db9eÔ·i£êH}{¤FzãüYÍm0µ1¡´/¥Þ*ou6[˜F½%gã _Ï[•ŠÍçSJ{ÒìÊ3òXÇÜës¨ÒË„fþæ†_?ηlµL.>e½bÍÕÔzËPtbB#Õ>”ý°@YÈFëROoÖÔHÝ ÕˆŠ†µ0ü¥ªfj•{0½šIY€²©KWÞô´Á}Gì^éô—}ÑdÄвô·ÕPŒ”|õ6e\YÂÒ•öŽˆ¯†›i¯Œ´WK«ÊoWêón|^qÅàhÜU
ŽTÃÕõCL–g0shî¦eðoï‚ÍáfÙayJ‘Fm̉iÂq¥Y2ïøÅyí¯¢E,mÌ‘óŽ?uñFõ.k6ØX»þÙòl¦Ùq£6æÌø›Å@i¢x2î?~Ÿ&ü<⬴ÿÓmû¯»·cÚKoéxÝÇI¯ÿÙÓU¼î³OÇß<ÖGžõ‘]”ë¯Ê—zRÔqý
¸<UŽ.(-/ýøÓkiæËÝÅŠiÑÞÕ«ªÉ+â˃%ÛÕÑl7¤k;ãÙÆ|üáè_;æ•×þ6ÒWu>uÍÑ¿ùßV|¥Ñ/Ž^õ½ªâÖk÷®fÔú•§ê3ŒúËÍL5¿è
ο¹<1¡$W˽ӦmQul
ÛY«£¤l¿²7ºææ¬÷›©U¿žTŽ¬
J”iÕŽSMÙ D9læ—3Ù&%Jú’Ó7R¥/YR/3¬®FúéQ(j+SÊéªÿô8Þ8=>êSæGÝQ¤Gâé%S}JY–RyuùËq[•©†«FÍÏ0¥Z¢f™ÓKmQýPWobÑN/+7”^š‡†AµÔ›N¾ êS‹r)³©uI«OÙ°TIœ2|R}B³LŒ5æßH2ÑmgÓ¸n‰¿Ãƽg|§+žülÝÏÖ‹/)UÓêmUi¢ªŸÍ¹#¾{ãußy¨sEç¤ølœ1Kc‡íwa=4%K.MK.¸-¦6ºúØÑE©¤^P +F?–:’«Z¢|u-÷<;_Tog–.Êwô¿&©jg–žº¨,Þ3uqÏó¶yóßè=äÞL;³ñßQª{žT=ߘ—Óþ+žþm:ãõýiý‹ÖmUO;ãEýéƒq³ÿľ4ñ³qô³Žhog}¦g£åh®ùÖ«žZ‡{Ú/ž®ˆo–ÄçòøŒfb¿ÏüyþàÔI%g”º:‚F{ÍL4¥«ê e^Ïéï(-ºÉ¾Y¥W©Ãvïú™±¤FâwËÎ]™)‘Z†¾ûÝê¯dõÃ¥¤–ÄH’Ñ°Ô’<˜Ze-yKîFjýÞ¤ªáO•šž}nƒk1lškQ-pÃ!$Õ×W¨ÑúÔëˆÜÔºYóðm¤öJ½‘»Ê[©ÍìÍK”²¿o¹á5Ê@GGǃÿut¬ˆñr™]åvR”ÿnY¿i”ô›nªO/ùª²£‡Ú‚j×æ]Ju©X¥>¯¡XªèJ-Cÿ
¦5gR%´ÅW<Û?_µñûæüƒ-/Žäøí!— õB›û<±vî³åÙL;1~£ïdD;QëëKãÎêû—uiÚÈõiê+oH‹öß9-š>6õM‹˜>2ÅÕJ=Î_‰8clZ¶~lzÃÒþ}ÓÒÄx¾Zê9²3U_t)ó©ß÷ìV_øêRdôUñL;ˆ¯³¥Ö«¢qê½<þÄÝ?ºcÌÀ-ý“"¡¶>>קõ11ªø\_¾eÝàç¤(1)•r“R¯ŸÔ±">G~E{t´ãúKó°g}.qØ¿?Š‹6,ïÆmëjï‹ÏU]s¬Ù¯ËœS<çj&ÖóV©%ypBÉ\O'7&lš\ŸÐÌ}r=wõY_aU—[ ú,šÙ¹Kž2ëÁä*}°äFé;©(0”¿ž·ú|.éQpøê
ÍàÒ‡å/ËY¡Å̪äS•^ŸPÏ]O¯'WéÃ*i0Ô…Jzcù#wsËË]R›ÉÕ¼›ë9,µ±=«¬ƒyãffƒ¿Û¾4½¥ã¦ÎÎè˜qÙŒ›:Ï訾¼ZòÔÛšK½£ÆÅ}P´#ËûûSG¼¤¨#îžÎ^>9-_Þ{gg×ÕU½ÃÚ˜Ûn;;«¥‰5©/nY§rÛ[©šV›«Y
Õ×:¶aq,ùêH1T±D¡yÑ”FW¾ãµKoiOʯoó÷Oút$ÆuÇ3þ†·*]|ÇëÙòl¦=‰o2¸«ÇkL?‘ÒÈUqÌÕ:Ò„–Îôª–¾Ô—=kvê‰{Ë®ñ·Ùx‰~_ÇÔôèAñŽãûí£Ò²YãÓí‹Ò´È¿óÈø»ìĸöˆû›ê;^e>´'ñG•¸øJ¹aÔ_žw}%íHñH·¶<æœjW¥þZùëlgmZz(]»|5£ãÚÒžåo´ñ×ÙÖ¾(pumrë9W·öííŒkÃÎIûÄßlÊ“•éqTÞöÏT¦/¿ÎÆŸoâ™J|Í#šÌ‡"!îºâ›g›¶'eç¼û¬Ÿóª³ÛÀ@óëCgÂ8ÑŒHñ5Êj‡¬ò–;†HŠÿâB¡$—ÔH«’†’#µÊ÷¹zÞ껜‘·‘ïsiDüÅ"&•‹ò$®Êõ¹ñÇ›F‘#FÄÎôoÃk.Ÿ)9Ú«z£Žzå/1U1©ü(†£æ’Zã©ÉàÄúÓÕ’\N|#RUE¬JõÔ¶™w°ŠúóÙH®êhTRºRÕu4ë©ÕËSš’—hE'V±™+«R«Ì“«K¹†dä®×\d}K%±uª´aÛ"ÊO+ØFmÄ@êè<§ãßÓ—uœß¼Ù¨(׬ñåÁÔ1®3},öÃïHçÄ÷›::#â¿êf¹”ÖFÔ/®¸bJýûy±³}v9…•þÙ‘vöÙñÿÇËÔ?ûãñü$¦–úPŠxW/Q
5¯9ª6"ßšv=»úõç1í‡Ç×øO©ªn|tDÿçõ#º%®74eJ¤pÔî»o#ËÿD/ê®–£sæI‹ãå%í›ü“ ‘!–£\Fý)»–˜Ï¤he.8gZ¾ãú›¿Å‹ßÕülãßãŲ,mM»½¬ü¢s\Š7ª¿é\¸ùuœ.:ø̳98My{ôÞž¦üÕ™Sþ*žÖGÞvæÜ·•‘¹o&’þªd+#Í ç#ñ{Ï£ã=3bžsê¿"uâÂó6;ÖíÓE‡Ÿ9þðxóÊ™ãß?==3Þ†•þ‡RÎûŸªhÓzþ„UW~±ë,¿â·u:òø“^qÂI›L‡§‹N8sçR:åÌã€Øtxþ™Óæ§çœ¹óœ8[ž¹ó‰)=Ópý׿ïiM»¿®ÌwlzÛœ“çµÇ}ÿf(ý†tÑñg.‹KýãÎ\v\JÕð9³ŸKRcIGÄœŽ}æßi½qÎâ¥'Î?iÁÉ釽ù•§.™·xØOʱµá¯¶¢Mª~ý‘qX´.Ž½~nÔa³þ›Î<«å¦3—·”&%Ê–ßµûQíñ“¤ùsã-©YÿŒxGÐü¹ñ±½ç,]º÷F?ÛpŽ½1«b74çõVÝÐ<Ê/ JÍï›×œ¶¤ý¸ÃSõñþöøåÔ~1|СG6SYv=úÈ7qèÌzå»îµ_UR3W,âÜ*߬Ž<òmo9¢äŒZßß>kÖ¬j>.g[GÕVÔ>ûìmE”Ž¶b}ÊÓªªk´¤mñ›¾x]íŠF“ºÇ;ƒù5ƒéQ0÷Þ·I©£JK1½vÅ%e<¥=âßf(Óöˆk+â7Å_Þ=†ßYÒRѲïqrùuXüY½ýø}6lÝ£‚ÿ–½/ÞÐõµh!讀¹ù7YŒª~Ù=ü—‘ÕUu,fýÍbå7¨yk[OñËÇÖÚŒ¿¼µü*{«è‡bë¸èÇ/#[_ý¶ÿ½Ÿ´ÇÒ„óž/:ôˆö¥Ûç´Ï:蕇ÌY0÷ÄyóçƤêß‘Š?*öé?ñ™+ö›[Òž?*<Ñ|µµ\±*â{áòÂèÿ¨üÎüÖ£|—»|G3¯ÝgZù¾VùFùkùHy>Yž=”û…Üó†sïâé·Ÿ[ÞÉ“ð›ùŽÞØ+ïžYÞ™S½Ç¦e¨ûŸòíÿ¹"ß~À%ùöo¶æï>ïœyëò|óvûæ›þí°|ëgýÏÿ*õ¹ý²>–í¹ó9¥±§îùt´[Ñœ»é3ï©_Ýk {Øox㸮wåMGѺ½?=Zo2Êbë‹fÄƉþÄè—=õ¥Ñ/{êÑ/{òË£¿ám}eôã7¼ûD¿¼yàµÑw®´¾>ú[þŸïѱ֚^6÷™ÛÕXóxÖœ^ÚlµÓP·aÛW"ifÔuþ3×5ëÈC£º¡ +bhÓ:GW=sG/8iY³†÷·/|÷I6lÇ«ÖùšíªÜ¦sŒ·•¼ìgdŽGo´Ð›ÖpHÔðô3×ð¶“Ì]øþ%íGpdsÑK£zÊÉ´%M:ãÈ?ú¶‹xŸã–)5Þïó»Fu[5«Ýä
…Õ¯ÇcŸjùûúo÷cß9èÿ|¿ùÓÔÐñ·W‘Þpûô?Míj%@€ @€ @€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€0`À€¿™L»×çØ´YÅ B —òámÅ˼û¼'·¶¾7ÖÚ¯¯ÕïÉ#p4Ö3ÑŠ×úoåFÜ‘žF`ÜßÁ¸Nóâi”d|®eÔX½Q O‘Þ#÷z6øE'-ŸV¼lm™·œ•¹¯ùZÞÚõW¥iêɯË8ÏÚ;«NFOŸ¬ÑëЛÿNo±×å#òßÙók[óøë<Î~ @€ @€ @€@€€UIAppShellÀ‚" ðr
\ No newline at end of file diff --git a/xmerge/source/palmtests/qa/test_spec/convertor_test_spec.html b/xmerge/source/palmtests/qa/test_spec/convertor_test_spec.html new file mode 100644 index 000000000000..5b77f3263654 --- /dev/null +++ b/xmerge/source/palmtests/qa/test_spec/convertor_test_spec.html @@ -0,0 +1,2274 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> + <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1"> + <TITLE></TITLE> + <META NAME="GENERATOR" CONTENT="StarOffice 6.0 (Solaris Sparc)"> + <META NAME="AUTHOR" CONTENT="dermot mccluskey"> + <META NAME="CREATED" CONTENT="20011001;14124200"> + <META NAME="CHANGED" CONTENT="20020103;15592900"> + <STYLE> + <!-- + P.text-body-indent { margin-left: 0.5cm } + --> + </STYLE> +</HEAD> +<BODY> +<H1 ALIGN=CENTER>Xmerge Test Spec</H1> +<H2>1.0 Intorduction</H2> +<BLOCKQUOTE>This document outlines the tests to be performed on +Xmerge, the XML-to-PDB converter for the SunONE Webtop.</BLOCKQUOTE> +<H2>1.1 Authors</H2> +<UL> + <LI><P STYLE="margin-bottom: 0cm">Dermot McCluskey + (dermot.mccluskey@sun.com) + </P> + <LI><P>Keelin Boyle (keelin.boyle@sun.com) + </P> +</UL> +<H2>1.2 Project/Product Identifier</H2> +<BLOCKQUOTE>XMerge</BLOCKQUOTE> +<H2>1.3 Reision History</H2> +<P STYLE="margin-bottom: 0cm"> +</P> +<TABLE COLS=4 WIDTH=100% BORDER=1 CELLPADDING=2 CELLSPACING=0> + <TR> + <TD> + <P><B>Date</B></P> + </TD> + <TD> + <P><B>Revision</B></P> + </TD> + <TD> + <P><B>Comments</B></P> + </TD> + <TD> + <P><B>Approval</B></P> + </TD> + </TR> + <TR> + <TD> + <P>28-Sep-2001</P> + </TD> + <TD> + <P>0.3</P> + </TD> + <TD> + <P>Draft 3.</P> + </TD> + <TD></TD> + </TR> + <TR> + <TD></TD> + <TD></TD> + <TD></TD> + <TD></TD> + </TR> +</TABLE> +<H2>1.4 Document Customers</H2> +<UL> + <LI><P STYLE="margin-bottom: 0cm">XMerge Development team + </P> + <LI><P STYLE="margin-bottom: 0cm">Ireland Desktop Test team + </P> + <LI><P>SunONE Webtop C-team + </P> +</UL> +<H2>1.5 References</H2> +<H2>2.0 Requirements & Dependencies</H2> +<BLOCKQUOTE>Successful automation of the tests outlined in this +specification is dependent on the stability and reliability of the +POSE emulator and the EmRPC Perl module that allows test +automation. There is a risk associated with this in that +the emulator software may not accurately emulate every aspect of the +PalmOS and so the automated tests may not discover bugs which occur +in "real world" scenarios. Also, if the automation +software we use proves not to be reliable enough to consistently +return the same test results, then the effort spent creating the test +automation scripts will not be worthwhile. +</BLOCKQUOTE> +<BLOCKQUOTE>Verification of test results will depend on the usability +of the Java-based Comparator applications, developed by the US Webtop +QA team, which will be used to compare the output XML and +PDB files with the expected results. +</BLOCKQUOTE> +<BLOCKQUOTE>Many of the tests described in this specification are +very time consuming and it would not be practical to execute them +manually on a regular basis.</BLOCKQUOTE> +<H2>2.1Required Tools & Technologies</H2> +<UL> + <LI><P STYLE="margin-bottom: 0cm">PalmOS Emulator (POSE) + </P> + <LI><P STYLE="margin-bottom: 0cm">EmRPC Perl module and Test Driver + harness + </P> + <LI><P STYLE="margin-bottom: 0cm">Comparator applications (XML and + PDB comparison utilities) + </P> + <LI><P STYLE="margin-bottom: 0cm">Palm V device ??? + </P> + <LI><P>StarOffice 6.X. + </P> +</UL> +<H2>2.2 Test Framework Used</H2> +<BLOCKQUOTE>These tests are to be automated using the POSE emulator +and the Test Driver developed by the XMerge team, which interacts +with the EmRPC module and allows test engineers to write test scripts +to control the conversion of documents and the interaction with the +POSE emulator. Using this software, it is possible to automate +the process of loading documents into the appropriate Palm +application, apply edits to the document within the Palm emulator and +export the document.</BLOCKQUOTE> +<H2>3.0 Scope of Work</H2> +<H2>4.0 Test Strategy</H2> +<H2>4.1Test Suite Location</H2> +<H2>4.2 Strategy overview</H2> +<H2>4.3 Test Cases and Assertions</H2> +<H2>4.4 Testing Not Performed</H2> +<UL> + <LI><P STYLE="margin-bottom: 0cm">Performance Testing + </P> + <LI><P>Internationalization (I18N) related testing. + </P> +</UL> +<H2>5.0 Test Cases</H2> +<BLOCKQUOTE>The test cases are divided into seperate sections for +each PDB format supported by XMerge, and further divided into +Convert and Merge tests within each format. The Convert tests +validate that XMerge can perform the round trip conversion from +StarOffice XML-based file format to PalmOS PDB format and back to +StarOffice XML format again, without any loss of content. The +Merge tests validate that XMerge can merge edits made on the Palm +device with the original StarOffice XML file, while retaining any +information in the original document which could not to translated +into PDB format, eg embedded tables. +</BLOCKQUOTE> +<BLOCKQUOTE>Each section is further divided into Content and Style +tests. The Content tests deal with the ability of XMerge to +retain all the meaningful content, eg text, after the conversion and +merging process. The Style tests deal with the ability of +XMerge to retain the stylistic details, eg bold face; justification; +line breaks, from the same round-trip conversion. The +Content-retaining functionality is considered of much higher priority +than the Style-retaining functionality in version 1.1. <BR> </BLOCKQUOTE> +<H2>5.1 AportisDoc Tests</H2> +<H2>5.1.1 AportisDoc Convert Tests</H2> +<H2>5.1.1.1 AportisDoc Convert Content Tests</H2> +<TABLE WIDTH=100% BORDER=1 CELLPADDING=2 CELLSPACING=0> + <TR VALIGN=TOP> + <TD WIDTH=30%> + <P><BR> + </P> + </TD> + <TD> + <P><BR> + </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD> + <P><BR> + </P> + </TD> + <TD> + <P><BR> + </P> + </TD> + </TR> +</TABLE> +<H2>5.1.1.2 AportisDoc Convert Style Tests</H2> +<P><BR> +</P> +<H2>5.1.2 Aportis Merge Tests</H2> +<H2>5.1.2.1 AportisDoc Merge Content Tests</H2> +<TABLE WIDTH=100% BORDER=1 CELLPADDING=2 CELLSPACING=0> + <COL WIDTH=77*> + <COL WIDTH=179*> + <TR VALIGN=TOP> + <TD WIDTH=30%> + <P><BR> + </P> + </TD> + <TD WIDTH=70%> + <P><BR> + </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=30%> + <P><BR> + </P> + </TD> + <TD WIDTH=70%> + <P><BR> + </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=30%> + <P><BR> + </P> + </TD> + <TD WIDTH=70%> + <P><BR> + </P> + </TD> + </TR> +</TABLE> +<H2>5.1.2.2 AportisDoc Merge Style Tests</H2> +<TABLE WIDTH=100% BORDER=1 CELLPADDING=2 CELLSPACING=0> + <COL WIDTH=72*> + <COL WIDTH=184*> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/merge/style/animatedgif</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with an embedded image – + straight forward convert and merge</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_animatedgif.sxw</B>. + </P> + <P>Convert a_animatedgif.sxw to a_animatedgif.pdb, in AportisDoc + PDB format. <BR>Start POSE with AportisDoc application and import + a_animatedgif.pdb. <BR>Export the doc back to a_animatedgif.pdb. + <BR>Merge a_animatedgif.pdb and the original document to + a_animatedgif.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <BLOCKQUOTE>This document has a animated gif embedded in it.</BLOCKQUOTE> + <BLOCKQUOTE>Start of animated gif.</BLOCKQUOTE> + <BLOCKQUOTE><Image of spinning globe></BLOCKQUOTE> + <BLOCKQUOTE>End of animated gif. + </BLOCKQUOTE> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/bolddoc</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with bold type and varying font – + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_bolddoc.sxw</B>. + </P> + <P>Convert a_bolddoc.sxw to a_bolddoc.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_bolddoc.pdb. <BR>Export the doc back to a_bolddoc.pdb. <BR>Merge + a_bolddoc.pdb and the original document to a_bolddoc.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <BLOCKQUOTE><STRONG>This complete line is in <FONT SIZE=6 STYLE="font-size: 22pt">bold</FONT> + with font set to Times New Roman. The word bold is of size 22, + while rest of the words are of size 12. </STRONG> + </BLOCKQUOTE> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/merge/style/bookmarks</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with inserted bookmarks – + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_bookmarks.sxw</B>. + </P> + <P>Convert a_bookmarks.sxw to a_bookmarks.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_bookmarks.pdb. <BR>Export the doc back to a_bookmarks.pdb. + <BR>Merge a_bookmarks.pdb and the original document to + a_bookmarks.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <BLOCKQUOTE>Two paragraphes of text with 2 bookmarks set. To + identify bookmarks, select Edit -> Navigator and bookmarks, + user should see BK1 and BK2 and clicking on these labels in the + navigator popup places the cursor in the position of the original + bookmark, .i.e. + </BLOCKQUOTE> + <BLOCKQUOTE>BK1 = Bookmark|</BLOCKQUOTE> + <BLOCKQUOTE>BK2 = Silicon + </BLOCKQUOTE> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/merge/style/bulletorderedlist</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with bulletorderedlist – + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_bulletorderedlist.sxw</B>. + </P> + <P>Convert a_bulletorderedlist.sxw to a_bulletorderedlist.pdb, in + AportisDoc PDB format. <BR>Start POSE with AportisDoc application + and import a_bulletorderedlist.pdb. <BR>Export the doc back to + a_bulletorderedlist.pdb. <BR>Merge a_bulletorderedlist.pdb and the + original document to a_bulletorderedlist.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <P STYLE="margin-bottom: 0cm; font-style: normal">This document is + an example of a simple bullet ordered list.</P> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <UL> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Bullet 1</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Bullet 2</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Bullet 3</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Bullet 4</P> + </UL> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <BLOCKQUOTE STYLE="font-style: normal">End of bullet Ordered list.</BLOCKQUOTE> + <BLOCKQUOTE><BR> + </BLOCKQUOTE> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/emptydoc</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: empty document – straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_emptydoc.sxw</B>. + </P> + <P>Convert a_emptydoc.sxw to a_emptydoc.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_emptydoc.pdb. <BR>Export the doc back to a_emptydoc.pdb. <BR>Merge + a_emptydoc.pdb and the original document to a_emptydoc.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <BLOCKQUOTE><STRONG><empty document>. </STRONG> + </BLOCKQUOTE> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/merge/style/firstlineindent</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with line indent – straight + forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_firstlineindent.sxw</B>. + </P> + <P>Convert a_firstlineindent.sxw to a_firstlineindent.pdb, in + AportisDoc PDB format. <BR>Start POSE with AportisDoc application + and import a_firstlineindent.pdb. <BR>Export the doc back to + a_firstlineindent.pdb. <BR>Merge a_firstlineindent.pdb and the + original document to a_firstlineindent.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <BLOCKQUOTE>This line is using First Line indent style. Now isnt + that Kool... Also Im running short of words to say here, to wrap + this particular sentence.</BLOCKQUOTE> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/fontsize</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with varying font size – + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_fontsize.sxw</B>. + </P> + <P>Convert a_fontsize.sxw to a_fontsize.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_fontsize.pdb. <BR>Export the doc back to a_fontsize.pdb. <BR>Merge + a_fontsize.pdb and the original document to a_fontsize.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <BLOCKQUOTE>Text with font size 10, 16, 20, 40, 96.</BLOCKQUOTE> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/heading</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with heading type style – + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_heading.sxw</B>. + </P> + <P>Convert a_heading.sxw to a_heading.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_heading.pdb. <BR>Export the doc back to a_heading.pdb. <BR>Merge + a_heading.pdb and the original document to a_heading.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <P STYLE="margin-top: 0.42cm; page-break-after: avoid"><FONT FACE="Times New Roman, serif"><FONT SIZE=4>This + piece of text is in Heading paragraph style.</FONT></FONT></P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/heading1</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with heading1 type style – + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_heading1.sxw</B>. + </P> + <P>Convert a_heading1.sxw to a_heading1.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_heading1.pdb. <BR>Export the doc back to a_heading1.pdb. <BR>Merge + a_heading1.pdb and the original document to a_heading1.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <H1 STYLE="font-weight: medium">This piece of text is in Heading1 + paragraph style</H1> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/heading2</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with heading2 type style – + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_heading2.sxw</B>. + </P> + <P>Convert a_heading2.sxw to a_heading2.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_heading2.pdb. <BR>Export the doc back to a_heading2.pdb. <BR>Merge + a_heading2.pdb and the original document to a_heading2.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <H2>This document is set in Heading2 style.</H2> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/hyperlink</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with embedded hyperlink – + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_hyperlink.sxw</B>. + </P> + <P>Convert a_hyperlink.sxw to a_hyperlink.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_hyperlink.pdb. <BR>Export the doc back to a_hyperlink.pdb. + <BR>Merge a_hyperlink.pdb and the original document to + a_hyperlink.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <P STYLE="margin-bottom: 0cm">This line is bookmarked to BK1 + (Insert-Bookmark)</P> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <P STYLE="margin-bottom: 0cm">The line <A HREF="http://sunweb.central/allhome.html">SunWeb + Home Page</A> has a hyperlink to sunweb.central.</P> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <P STYLE="margin-bottom: 0cm">This line is a hyperlink to <A HREF="#BK1">BK1</A>. + Click here will take cursor to top of page.</P> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <P><Check hyperlink has the correct address.></P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/justified</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with justified styling – + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_justified.sxw</B>. + </P> + <P>Convert a_justified.sxw to a_justified.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_justified.pdb. <BR>Export the doc back to a_justified.pdb. + <BR>Merge a_justified.pdb and the original document to + a_justified.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <P STYLE="margin-bottom: 0cm; font-style: normal"><SUP><FONT SIZE=5 STYLE="font-size: 20pt">Left + aligned text</FONT></SUP></P> + <P ALIGN=CENTER STYLE="margin-bottom: 0cm; font-style: normal"><SUP><FONT SIZE=5 STYLE="font-size: 20pt">Centre + aligned</FONT></SUP></P> + <P ALIGN=RIGHT STYLE="margin-bottom: 0cm; font-style: normal"><SUP><FONT SIZE=5 STYLE="font-size: 20pt">Right + aligned </FONT></SUP> + </P> + <P ALIGN=JUSTIFY STYLE="font-style: normal"><SUP><FONT SIZE=5 STYLE="font-size: 20pt">Justified</FONT></SUP></P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/merge/style/linebreaks</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with linebreaks – straight + forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_linebreaks.sxw</B>. + </P> + <P>Convert a_linebreaks.sxw to a_linebreaks.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_linebreaks.pdb. <BR>Export the doc back to a_linebreaks.pdb. + <BR>Merge a_linebreaks.pdb and the original document to + a_linebreaks.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <P STYLE="margin-bottom: 0cm">This page has a line breaks inserted + at end of this line.<BR>When coverted to doc format it should + accordingly be broken up at the same point.</P> + <P ALIGN=LEFT STYLE="text-indent: 0.2cm; margin-top: 0.4cm; margin-bottom: 0.41cm"> + A simple list</P> + <OL> + <LI><P ALIGN=LEFT>second entry. A line break follows<BR>the above + line has been broken with a line break</P> + </OL> + <P STYLE="font-style: normal"><SUP><FONT SIZE=5 STYLE="font-size: 20pt">Third + entry</FONT></SUP></P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/merge/style/linespacing</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with varied linespacing – + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_linespacing.sxw</B>. + </P> + <P>Convert a_linespacing.sxw to a_linespacing.pdb, in AportisDoc + PDB format. <BR>Start POSE with AportisDoc application and import + a_linespacing.pdb. <BR>Export the doc back to a_linespacing.pdb. + <BR>Merge a_linespacing.pdb and the original document to + a_linespacing.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <P STYLE="margin-bottom: 0cm"><I>First: This line and thenext line + is spaced by double-line spacing</I></P> + <P STYLE="margin-bottom: 0cm"><I>Second: Note the line-distance + spacing</I></P> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <P STYLE="margin-bottom: 0cm"><B>First: This line and the next + line is spaced by single-line spacing</B></P> + <P STYLE="margin-bottom: 0cm"><B>Second: Note the line-distance + spacing</B></P> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <P STYLE="margin-bottom: 0cm; font-weight: medium">First: This + line and the next line is spaced by 1.5 line spacing</P> + <P STYLE="font-weight: medium">Second: Not the line-distance + spacing.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/merge/style/numberorderedlist</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with numberorderedlist – + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_numberorderedlist.sxw</B>. + </P> + <P>Convert a_numberorderedlist.sxw to a_numberorderedlist.pdb, in + AportisDoc PDB format. <BR>Start POSE with AportisDoc application + and import a_numberorderedlist.pdb. <BR>Export the doc back to + a_numberorderedlist.pdb. <BR>Merge a_numberorderedlist.pdb and the + original document to a_numberorderedlist.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <P STYLE="margin-bottom: 0cm; font-style: normal">This document is + an example of a simple numbered ordered list.</P> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <OL> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">First</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Second</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Third</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Fourth</P> + </OL> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <P STYLE="margin-bottom: 0cm; font-style: normal">End of numbered + Ordered list</P> + <BLOCKQUOTE><BR> + </BLOCKQUOTE> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/pagebreak</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with pagebreaks – straight + forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_pagebreak.sxw</B>. + </P> + <P>Convert a_pagebreak.sxw to a_pagebreak.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_pagebreak.pdb. <BR>Export the doc back to a_pagebreak.pdb. + <BR>Merge a_pagebreak.pdb and the original document to + a_pagebreak.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <P STYLE="margin-bottom: 0cm">The document has page breaks</P> + <P STYLE="margin-bottom: 0cm">Page 1 + </P> + <P>-now a page break-</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/merge/style/paragraph</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with set paragraph styling– + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_paragraph.sxw</B>. + </P> + <P>Convert a_paragraph.sxw to a_paragraph.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_paragraph.pdb. <BR>Export the doc back to a_paragraph.pdb. + <BR>Merge a_paragraph.pdb and the original document to + a_paragraph.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <P STYLE="margin-bottom: 0cm">This line is a paragraph. It is + indented from left hand side by 1.0 inch and from right and side + by 1.0 inch (paragraph + </P> + <P>settings).</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/standard</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with standard text and default + settings – straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_standard.sxw</B>. + </P> + <P>Convert a_standard.sxw to a_standard.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_standard.pdb. <BR>Export the doc back to a_standard.pdb. <BR>Merge + a_standard.pdb and the original document to a_standard.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <P><FONT FACE="Times New Roman">This line of text is listed in + standard style.</FONT></P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/subscript</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with subscript text setting – + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_subscript.sxw</B>. + </P> + <P>Convert a_subscript.sxw to a_subscript.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_subscript.pdb. <BR>Export the doc back to a_subscript.pdb. + <BR>Merge a_subscript.pdb and the original document to + a_subscript.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman"><FONT SIZE=4>The + last word on this line is in subscript. <SPAN STYLE="font-style: normal"><SUB>Dude</SUB></SPAN></FONT></FONT></P> + <P><BR> + </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/superscript</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with superscript text setting – + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_subscript.sxw</B>. + </P> + <P>Convert a_superscript.sxw to a_superscript.pdb, in AportisDoc + PDB format. <BR>Start POSE with AportisDoc application and import + a_superscript.pdb. <BR>Export the doc back to a_superscript.pdb. + <BR>Merge a_superscript.pdb and the original document to + a_superscript.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman"><FONT SIZE=4>The + last word on this line is in superscript. <SPAN STYLE="font-style: normal"><SUP>Dude + </SUP></SPAN></FONT></FONT> + </P> + <P><BR> + </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/symbols</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with various symbol types – + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_symbols.sxw</B>. + </P> + <P>Convert a_symbols.sxw to a_symbols.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_symbols.pdb. <BR>Export the doc back to a_symbols.pdb. <BR>Merge + a_symbols.pdb and the original document to a_symbols.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <P STYLE="margin-bottom: 0cm">'-'-'-'->->->->. + '''''''. -------. >>>>>>></P> + <P STYLE="margin-bottom: 0cm; font-style: normal"><SUP><FONT FACE="Times New Roman"><FONT SIZE=4>!”£$%^&*()_+}{~@:?><,./;'#][=-??? + </FONT></FONT></SUP> + </P> + <P><BR> + </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/tab</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with tab styling – straight + forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_tab.sxw</B>. + </P> + <P>Convert a_tab.sxw to a_tab.pdb, in AportisDoc PDB format. + <BR>Start POSE with AportisDoc application and import a_tab.pdb. + <BR>Export the doc back to a_tab.pdb. <BR>Merge a_tab.pdb and the + original document to a_tab.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant document should + contain: + </P> + <P STYLE="margin-bottom: 0cm">This is a tabbed document</P> + <P STYLE="margin-bottom: 0cm">1 Tab line</P> + <P STYLE="margin-bottom: 0cm">2 tabbed line</P> + <P STYLE="margin-bottom: 0cm">3 tabbed line</P> + <P STYLE="margin-bottom: 0cm">2 tabbed line</P> + <P STYLE="margin-bottom: 0cm">1 Tab line</P> + <P STYLE="margin-bottom: 0cm">4 tab line</P> + <P STYLE="margin-bottom: 0cm">2 tab line</P> + <P><BR> + </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/merge/style/table</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with table – straight forward + convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_table.sxw</B>. + </P> + <P>Convert a_table.sxw to a_table.pdb, in AportisDoc PDB format. + <BR>Start POSE with AportisDoc application and import a_table.pdb. + <BR>Export the doc back to a_table.pdb. <BR>Merge a_table.pdb and + the original document to a_table.sxw. + </P> + <P><B>Expected result:</B> + </P> + <P>The resultant document should contain: + </P> + <P STYLE="margin-bottom: 0cm"><Check table & contents are + identical to original.> + </P> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <P STYLE="margin-bottom: 0cm">This document has a table with 3 + rows and 3 columns:</P> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <P><BR><BR> + </P> + <P STYLE="margin-bottom: 0cm"><TABLE & CONTENTS></P> + <P><BR> + </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/textspan</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document testing textspan + italics,bolds,underline together– straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_textspan.sxw</B>. + </P> + <P>Convert a_textspan.sxw to a_textspan.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_textspan.pdb. <BR>Export the doc back to a_textspan.pdb. <BR>Merge + a_textspan.pdb and the original document to a_textspan.sxw. + </P> + <P><B>Expected result:</B> + </P> + <P>The resultant document should contain: + </P> + <P STYLE="margin-bottom: 0cm">Document indicating Text Span</P> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <P STYLE="margin-bottom: 0cm; font-weight: medium"><I>This is a + simple line with some amount of text. The whole line is in italic + except the next 3 words which is also <B>SET TO BOLD</B>. Also the + next word is <U>UNDERLINED</U>. The essence is differnet styles + within the same text span.</I></P> + <P><BR> + </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/merge/style/unorderedlist</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document with unorderedlist – straight + forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_unorderedlist.sxw</B>. + </P> + <P>Convert a_unorderedlist.sxw to a_unorderedlist.pdb, in + AportisDoc PDB format. <BR>Start POSE with AportisDoc application + and import a_unorderedlist.pdb. <BR>Export the doc back to + a_unorderedlist.pdb. <BR>Merge a_unorderedlist.pdb and the + original document to a_unorderedlist.sxw. + </P> + <P><B>Expected result:</B> + </P> + <P>The resultant document should contain: + </P> + <P STYLE="margin-bottom: 0cm; font-style: normal">This document is + an example of a simple un- ordered list</P> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <OL> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Wag the Dog</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Gladiator</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Insider</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Usual + Suspects</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Glengarry + Glen Ross</P> + </OL> + <OL> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Host Shots</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Airplane</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Monty + Python</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">History of + the World</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Sacry Movie</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Austin + Powers</P> + </OL> + <UL> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Scarlet and + the Black</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Operation + Day Break</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Life is + Beautiful</P> + <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Nephew + (beutfiul soundtrack)</P> + </UL> + <P STYLE="margin-bottom: 0cm"><BR> + </P> + <P STYLE="margin-bottom: 0cm; font-style: normal; font-weight: medium"> + End of un-ordered list.</P> + <P><BR> + </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/content/style/wordwrap</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: document which tests wordwrapping – + straight forward convert</P> + <P><B>Procedure:</B> <BR>Use test file <B>a_wordwrap.sxw</B>. + </P> + <P>Convert a_wordwrap.sxw to a_wordwrap.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_wordwrap.pdb. <BR>Export the doc back to a_wordwrap.pdb. <BR>Merge + a_wordwrap.pdb and the original document to a_wordwrap.sxw. + </P> + <P><B>Expected result:</B> + </P> + <P>The resultant document should contain:</P> + <P STYLE="margin-bottom: 0cm; font-weight: medium"><I>This line is + a long line just to check if the word wrap feature works fine, + when it is synched onto the PDA..</I></P> + <P><BR> + </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/merge/content/simple01</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: simple document - insert text at beginning + </P> + <P><B>Procedure:</B> <BR>Use test file <B>a_standard.sxw</B>. + </P> + <P>Convert a_standard.sxw to a_standard.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_standard.pdb. <BR>Insert the following text, including the + terminating line-feed, at the beginning of the first line: + </P> + <BLOCKQUOTE>New text added to simple file.</BLOCKQUOTE> + <P>Export the doc back to a_standard.pdb. <BR>Merge a_standard.pdb + and the original document to a_standard.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant file should contain: + </P> + <BLOCKQUOTE>New text added to simple file. <BR>This line of + text is listed in standard style </BLOCKQUOTE> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/merge/content/simple02</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: simple document - insert text in middle + </P> + <P><B>Procedure:</B> <BR>Use test file <B>a_standard.sxw</B>. + </P> + <P>Convert a_standard.sxw to a_standard.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_standard.pdb. <BR>Insert the following text immediately after + the word "text": + </P> + <BLOCKQUOTE>, including this inserted phrase, </BLOCKQUOTE> + <P>Export the doc back to a_standard.pdb. <BR>Merge a_standard.pdb + and the original document to a_standard.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant file should contain: + </P> + <BLOCKQUOTE>This line of text, including this inserted + phrase, is listed in standard style </BLOCKQUOTE> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=28%> + <P><B>aportis/merge/content/simple03</B></P> + </TD> + <TD WIDTH=72%> + <P><B>Summary</B>: simple document - append text + </P> + <P><B>Procedure:</B> <BR>Use test file <B>a_standard.sxw</B>. + </P> + <P>Convert a_standard.sxw to a_standard.pdb, in AportisDoc PDB + format. <BR>Start POSE with AportisDoc application and import + a_standard.pdb. <BR>Append a new-line at the end of the line and + add the following line: + </P> + <BLOCKQUOTE>This is also in standard style</BLOCKQUOTE> + <P>Export the doc back to a_standard.pdb. <BR>Merge a_standard.pdb + and the original document to a_standard.sxw. + </P> + <P><B>Expected result:</B> <BR>The resultant file should contain: + </P> + <BLOCKQUOTE>This line of text is listed in standard + style <BR>This is also in standard style</BLOCKQUOTE> + </TD> + </TR> +</TABLE> +<H2>5.2 MiniCalc Tests</H2> +<H2>5.2.1 MiniCalc Convert Tests</H2> +<H2>5.2.1.1 MiniCalc Merge Style Tests</H2> +<TABLE WIDTH=100% BORDER=1 CELLPADDING=2 CELLSPACING=0> + <COL WIDTH=77*> + <COL WIDTH=179*> + <TR VALIGN=TOP> + <TD WIDTH=30%> + <P><B>minicalc/merge/style/columnswidth</B> <BR> </P> + </TD> + <TD WIDTH=70%> + <P><B>Summary</B>: Spreadsheet with 5 columns 10 entries - + Spreadsheet columnwidth variation. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_columnswidth.sxc</B>. + </P> + <P>Convert c_columnswidth.sxc to c_columnswidth.pdb, in MiniCalc + PDB format. <BR>Start POSE with MiniCalc application and + import c_columnswidth.pdb. </P> + <P>Choose Cell Reference "B1" & alter column width + to 1.55 by selecting, Format -> Column -> Width... < make + width change via spin button> -> OK, also decrease "E1" + similarly to have a column width of 1.68.<BR><BR><BR> + </P> + <P>Export the doc back to c_columnswidth.pdb. <BR>Merge + c_columnswidth.pdb to c_columnswidth.sxw. + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + column B with a width increase of 1.0 , and column E with a width + decrease of 1.0, as compared with the original file, reflecting + the changes stated above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=30%> + <P><B>minicalc/merge/style/rowheight</B></P> + </TD> + <TD WIDTH=70%> + <P><B>Summary</B>: Spreadsheet with 4 columns 3 rows 12 entries - + Spreadsheet rowheight variation. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_rowheight.sxc</B>. + </P> + <P>Convert c_rowheight.sxc to c_rowheight.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_rowheight.pdb. </P> + <P><BR>Choose Cell Reference "A1" & alter row height + to 1.17 by selecting Format -> Row -> Height... <make + height change via spin button> -> OK., also decrease "A3” + similarly to have a row height of 0.30. + </P> + <P>Export the doc back to c_rowheight.pdb. <BR>Merge + c_rowheight.pdb to c_rowheight.sxw. + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + row “Row 1” with a height increase of 1.0 and "Row + 3" with a height decrease of 0.41, as compared with the + original file, reflecting the changes stated above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=30%> + <P><B>minicalc/merge/style/rowstyles</B></P> + </TD> + <TD WIDTH=70%> + <P><B>Summary</B>: Spreadsheet with 5 columns 6 rows 18 entries - + Spreadsheet rowstyle variation. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_rowstyle.sxc</B>. + </P> + <P>Convert c_rowstyles.sxc to c_rowstyles.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_rowstyles.pdb. </P> + <P>Choose Cell Reference "B3" and change Heading style + to default, by selecting, Format -> Style Catelog -> <choose + heading type from listbox>, also choose cellreference "D5" + and change Heading style to Heading1, also change "C5" + to remove bold, underline & italic. + </P> + <P><BR>Export the doc back to c_rowstyles.pdb. <BR>Merge + c_rowstyles.pdb to c_rowstyles.sxw. + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + value's and style types as in original file, except cells "B3, + & D5" which should display heading types default & + Heading 1 resp. and "C5" which should be plain text, + reflecting the changes stated above.</P> + </TD> + </TR> +</TABLE> +<H2>5.2.1.2 MiniCalc Convert Style Tests</H2> +<TABLE WIDTH=100% BORDER=1 CELLPADDING=2 CELLSPACING=0> + <COL WIDTH=77*> + <COL WIDTH=179*> + <TR VALIGN=TOP> + <TD WIDTH=30%> + <P><B>minicalc/convert/style/styles</B> <BR> </P> + </TD> + <TD WIDTH=70%> + <P><B>Summary</B>: Spreadsheet with 3 columns 10 rows 13 entries - + Spreadsheet styles test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_styles.sxc</B>. + </P> + <P>Convert c_styles.sxc to c_styles.pdb, in MiniCalc PDB format. + <BR>Start POSE with MiniCalc application and import c_styles.pdb. + <BR>Export the doc back to c_styles.pdb. <BR>Merge + c_styles.pdb to c_styles.sxw. </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values with style features, .i.e Bold, Italics, + .</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=30%> + <P><B>minicalc/convert/style/alignment</B><BR> </P> + </TD> + <TD WIDTH=70%> + <P><B>Summary</B>: Spreadsheet with 4 columns 8 rows 24 entries - + Spreadsheet alignment test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_alignment.sxc</B>. + </P> + <P>Convert c_alignment.sxc to c_alignment.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_alignment.pdb. <BR>Export the doc back to + c_alignment.pdb. <BR>Merge c_alignment.pdb to + c_alignment.sxw. </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values with identical alignment to original + file.</P> + </TD> + </TR> +</TABLE> +<H2><BR><BR> +</H2> +<H2>5.2.2.1 MiniCalc Merge Content Tests</H2> +<TABLE WIDTH=100% BORDER=1 CELLPADDING=2 CELLSPACING=0> + <COL WIDTH=77*> + <COL WIDTH=179*> + <TR> + <TD WIDTH=30% VALIGN=TOP> + <P><B>minicalc/merge/content/insertimage</B><BR> </P> + </TD> + <TD WIDTH=70% VALIGN=BOTTOM> + <P><B>Summary</B>: Spreadsheet with 6 columns 2 image inserts - + Spreadsheet image insert. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_insertimage.sxc</B>. + </P> + <P>Convert c_insertimage.sxc to c_insertimage.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_insertimage.pdb. <BR>Export the doc back to + c_insertimage.pdb. <BR>Merge c_insertimage.pdb to + c_insertimage.sxw. + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + original file with both original images.</P> + </TD> + </TR> + <TR> + <TD WIDTH=30% VALIGN=TOP> + <P><B>minicalc/merge/content/textimage</B><BR> </P> + </TD> + <TD WIDTH=70% VALIGN=BOTTOM> + <P><B>Summary</B>: Spreadsheet with 6 columns 2 image inserts - + Spreadsheet image text insert. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_textimage.sxc</B>. + </P> + <P>Convert c_textimage.sxc to c_textimage.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_textimage.pdb. </P> + <P>Insert text immediately before and directly after the inserted + image.</P> + <P>Export the doc back to c_textimage.pdb. <BR>Merge + c_textimage.pdb to c_textimage.sxw. + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + original image surrounded by text .i.e text before & after the + insert.</P> + </TD> + </TR> +</TABLE> +<H2>5.2.2.2 MiniCalc Convert Contents Tests</H2> +<TABLE WIDTH=1025 BORDER=1 CELLPADDING=2 CELLSPACING=0> + <COL WIDTH=431> + <COL WIDTH=584> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><BR> + </P> + </TD> + <TD WIDTH=584> + <P><BR> + </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/basic</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary: </B>simple spreadsheet - round-trip conversion + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_standard.sxc</B>. + </P> + <P>Convert c_standard.sxc to c_standard.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_standard.pdb. Export the doc back to c_standard.pdb, without + making and changes to the spreadsheet. <BR>Merge + c_standard.pdb to c_standard.sxc. + </P> + <P><B>Expected result:</B> <BR>The resultant file should be + equivalent to the original spreadsheet. <BR> </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/simple01</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: simple spreadsheet - insert text & column + of numeric values at beginning of empty sheet. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_standard.sxc</B>. + </P> + <P>Convert c_standard.sxc to c_standard.pdb, in Minicalc PDB + format. <BR>Start POSE with Minicalc application and import + c_standard.pdb. <BR>Insert the following text & values + at the beginning of the the spreadsheet, .i.e in Column 1: + </P> + <BLOCKQUOTE>Col 1</BLOCKQUOTE> + <BLOCKQUOTE>1</BLOCKQUOTE> + <BLOCKQUOTE>1</BLOCKQUOTE> + <BLOCKQUOTE>1</BLOCKQUOTE> + <P>Export the doc back to c_standard.pdb. <BR>Merge + c_standard.pdb to c_standard.sxc. + </P> + <P><B>Expected result:</B> <BR>The resultant file should contain: + </P> + <BLOCKQUOTE STYLE="margin-left: 6.05cm">New column of values as + shown above. </BLOCKQUOTE> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/simple02</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: simple spreadsheet - append a new column to + end + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_standard.sxc</B>. + </P> + <P>Convert c_standard.sxc to c_standard.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_standard.pdb. <BR>Insert the following column immediately + after the first: + </P> + <BLOCKQUOTE>Col 3</BLOCKQUOTE> + <BLOCKQUOTE>3</BLOCKQUOTE> + <BLOCKQUOTE>3</BLOCKQUOTE> + <BLOCKQUOTE>3</BLOCKQUOTE> + <P>Export the doc back to c_standard.pdb. <BR>Merge + c_standard.pdb to c_standard.sxc. + </P> + <P><B>Expected result:</B> <BR>The resultant file should contain: + </P> + <P CLASS="text-body-indent">Col 1 Col 3</P> + <BLOCKQUOTE>1 3 + </BLOCKQUOTE> + <BLOCKQUOTE>1 3</BLOCKQUOTE> + <BLOCKQUOTE>1 3</BLOCKQUOTE> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/simple03</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: simple spreadsheet - insert a new column in + middle + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_standard.sxc</B>. + </P> + <P>Convert c_standard.sxc to c_standard.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_standard.pdb. <BR>Insert the following column immediately + after the first and before the second: + </P> + <BLOCKQUOTE>Col 2</BLOCKQUOTE> + <BLOCKQUOTE>2</BLOCKQUOTE> + <BLOCKQUOTE>2</BLOCKQUOTE> + <BLOCKQUOTE>2</BLOCKQUOTE> + <P>Export the doc back to c_standard.pdb. <BR>Merge + c_standard.pdb to c_standard.sxc. + </P> + <P><B>Expected result:</B> <BR>The resultant file should contain: + </P> + <BLOCKQUOTE>Col 1 Col 2 Col 3</BLOCKQUOTE> + <BLOCKQUOTE>1 2 3</BLOCKQUOTE> + <BLOCKQUOTE>1 2 3</BLOCKQUOTE> + <BLOCKQUOTE>1 2 3</BLOCKQUOTE> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/simple04</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: simple spreadsheet - delete text + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_standard.sxc</B>. + </P> + <P>Convert c_standard.sxc to c_standard.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_standard.pdb. <BR>Delete “Column 3”, so that + it reads: + </P> + <BLOCKQUOTE>Col 1 Col 2</BLOCKQUOTE> + <BLOCKQUOTE>1 2</BLOCKQUOTE> + <BLOCKQUOTE>1 2</BLOCKQUOTE> + <P>Export the doc back to c_standard.pdb. <BR>Merge + c_standard.pdb to c_standard.sxc. + </P> + <P><B>Expected result:</B> <BR>The resultant file should contain: + </P> + <BLOCKQUOTE>Col 1 Col 2</BLOCKQUOTE> + <BLOCKQUOTE>1 2</BLOCKQUOTE> + <BLOCKQUOTE>1 2</BLOCKQUOTE> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/addition</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 4 columns 10 entries - + Spreadsheet Simple Addition using various formulae. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_addition.sxc</B>. + </P> + <P>Convert c_addition.sxc to c_addition.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_addition.pdb. <BR>Change Cell Reference "A1" = 3 + in formula bar. <BR>Export the doc back to c_addition.pdb. + <BR>Merge c_addition.pdb to c_addition.sxc. + </P> + <P>A1 =3 ; B1 = 3 ; C1 =4 ;D1 =5; + </P> + <P>Addition types: + </P> + <P>Cell reference + Integer = A1+2 =5 + </P> + <P>Integer + Decimal = 3+0.1 =3.1 + </P> + <P>Cell Reference + Cell Reference = A1+B1 = 6 + </P> + <P>(Bracketed Cell Reference) + (Integer + Integer) = + (A1+B1)+(2+45) = 53 + </P> + <P>Integer + (Integer) + (Integer+Integer) = 2+(0)+(3+0) = 5 + </P> + <P>(SUM(Cell Ref;Cell Ref) +SUM(Cell Ref;Cell Ref) = + (SUM(A1;B1)+SUM(B1;C1) = 13 + </P> + <P><B>Expected result:</B> <BR> All spreadsheet entered + values & the standard formula SUM of each cell should be + displayed as above, formulae as stated above should be visible in + the Formula Bar. </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/backwardrange</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 2 columns 7 entries - + Spreadsheet backwardranging using various formulae. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_backwardrange.sxc</B>. + </P> + <P>Convert c_alignment.sxc to c_alignment.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_alignment.pdb. <BR>Change Cell Reference "B2" = + AVERAGE(2;5;5) in formula bar. <BR>Export the doc back to + c_alignment.pdb. <BR>Merge c_alignment.pdb to + c_alignment.sxc. + </P> + <P>Logical Funtion test B4: + </P> + <P>IF(Logical Test; Then Value;Else Value) + </P> + <P>.e.g. IF(23;45.45;54.54) = 45.45 + </P> + <P>read as if logical test TRUE then place THEN VALUE in cell else + place ELSE VALUE. <BR> <BR> <BR> + </P> + <P>Statistical Functional tests B2 , B3 resp.: + </P> + <P>AVERAGE(2;5;5) - Returns sum of arguments divided by number of + arguments =4 . + </P> + <P>MAX(10;3;3) - Returns the maximum value in a list of arguments + =10. <BR> <BR> <BR> + </P> + <P>Negative addition test B1: + </P> + <P>=B2-B3 = 4 - 10 = -6 <BR> <BR> <BR> + </P> + <P>Range Addition tests A1, A5, B5: + </P> + <P>SUM(B2;B4) = B2 + B3 + B4 = 4 + 10 + 45.45 = 59.45. + </P> + <P>SUM(A1:B2) -B4 = (59.45 + (-6) +4) - 45.45 = 12</P> + <P>SUM(A1;B1)-A2 = (59.45 + (-6)) - 0 = 53.45 + </P> + <P><B>Expected result:</B> <BR> All spreadsheet entered + values & the standard formula SUM of each cell should be + displayed on sheet as detailed above, formulae as stated above + should be visible in the Formula Bar.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/boolean</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 1 column 2 entries - + Spreadsheet boolean entry. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_boolean.sxc</B>. + </P> + <P>Convert c_boolean.sxc to c_boolean.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_boolean.pdb. <BR>Change Cell Reference "A2" = + TRUE in formula bar. <BR>Export the doc back to + c_boolean.pdb. <BR>Merge c_boolean.pdb to c_boolean.sxc. + </P> + <P>Logical Funtion test : cells A1, A2: + </P> + <P>A1=TRUE + </P> + <P>A2=TRUE + </P> + <P>Returns the logical values TRUE to the cells resp. + </P> + <P><B>Expected result:</B> <BR> The logical entry of each + cell should be displayed on the sheet as stated above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/cellcurrencyvalue</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 2 columns 10 entries - + Spreadsheet Currency number Format conversion test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_cellcurrencyvalue.sxc</B>. + </P> + <P>Convert c_cellcurrencyvalue.sxc to c_cellcurrencyvalue.pdb, in + MiniCalc PDB format. <BR>Start POSE with MiniCalc + application and import c_cellcurrencyvalue.pdb. <BR>Export + the doc back to c_cellcurrencyvalue.pdb. <BR>Merge + c_cellcurrencyvalue.pdb to c_cellcurrencyvalue.sxc. + </P> + <P>Display Sheet : 12 DM. + </P> + <P><B>Expected result:</B> <BR> Spreadsheet entered values or + the sum of each cell should be displayed with specified Currency + symbol, formulae should be visible in the Formula Bar but not the + currency symbol.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/cellcurrencychange</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 2 columns 10 entries - + Spreadsheet Currency number Format modification test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_cellcurrencychange.sxc</B>. + </P> + <P>Convert c_cellcurrencychange.sxc to c_cellcurrencychange.pdb, + in MiniCalc PDB format. <BR>Start POSE with MiniCalc + application and import c_cellcurrencychange.pdb. <BR>Change + Cell Reference "A1" to have currency format in Danish + Marks (DM). <BR>Export the doc back to + c_cellcurrencychange.pdb. <BR>Merge c_cellcurrencychange.pdb + to c_cellcurrencychange.sxc. + </P> + <P>Select cell A1 = 12 ; then tap pen icon option on palm, choose + Currency from palm listbox, tap on the down arrow to the right of + the flashing cursor, tap on the intended currency type .e.g DM + (Danish Mark) and tap apply & OK. + </P> + <P>Display Sheet : 12 DM. + </P> + <P><B>Expected result:</B> <BR> Spreadsheet entered values or + the sum of each cell should be displayed with specified Currency + symbol, formulae should be visible in the Formula Bar but not the + currency symbol.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/cellfloatvalue</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 2 columns 6 entries - + Spreadsheet float values. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_cellfloatvalue.sxc</B>. + </P> + <P>Convert c_cellfloatvalue.sxc to c_cellfloatvalue.pdb, in + MiniCalc PDB format. <BR>Start POSE with MiniCalc + application and import c_cellfloatvalue.pdb. <BR>Change Cell + Reference "A1" = 11 & "A2" = 2.38 & B3 + 100.02450 in formula bar. <BR>Export the doc back to + c_cellfloatvalue.pdb. <BR>Merge c_cellfloatvalue.pdb to + c_cellfloatvalue.sxc. + </P> + <P>The original sheet has selected Format -> Cells... -> + Numbers Tab -> & Numbers from the list box, choosen + -1234.12, tho set the Format Code to 0.00 preventing the sheet + display rounding values to two decimal places. It also has + fraction display enabled in certain cells.</P> + <P>Formula Bar : Display Sheet: + </P> + <P>A1 = 11 -> 11.00 + </P> + <P>A2 = 2.38 -> 2 19/50 + </P> + <P>A3 = 0.45 -> 0.45 + </P> + <P>B2 = 0.23 -> 2/9 + </P> + <P>B3 = 100.02450 -> 100.02 + </P> + <P><B>Expected result:</B> <BR> Spreadsheet fractional & + decimal values should be displayed with specified precision as + stated above, formulae should be visible in the Formula Bar.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/cellpercentvalue</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 2 columns 3 entries - + Spreadsheet percentage value precision. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_cellpercentvalue.sxc</B>. + </P> + <P>Convert c_cellpercentvalue.sxc to c_cellpercentvalue.pdb, in + MiniCalc PDB format. <BR>Start POSE with MiniCalc + application and import c_cellpercentvalue.pdb. <BR>Change + Cell Reference "A1" = 120% & "B1" = 10% in + formula bar. <BR>Export the doc back to + c_cellpercentvalue.pdb. <BR>Merge c_cellpercentvalue.pdb to + c_cellpercentvalue.sxc. + </P> + <P>For cell A1 enter 120% in the Formula Bar. Sheet Display = + 120.00% + </P> + <P>For cell B1 enter 10% in the Formula Bar. Sheet Display = 10% + </P> + <P><B>Expected result:</B> <BR> Spreadsheet percentage values + should be displayed with specified precision as stated above, + formulae should be visible in the Formula Bar.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/cellstringvalue</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 4 columns 11 entries - + Spreadsheet String values. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_cellstringvalue.sxc</B>. + </P> + <P>Convert c_cellstringvalue.sxc to c_cellstringvalue.pdb, in + MiniCalc PDB format. <BR>Start POSE with MiniCalc + application and import c_cellstringvalue.pdb. <BR>Change + Cell Reference "C2" = Testing & DELETE contents of + "D2" & insert a ';' in "B3" in formula + bar. <BR>Export the doc back to c_cellstringvalue.pdb. + <BR>Merge c_cellstringvalue.pdb to c_cellstringvalue.sxc. + </P> + <P>A1 = This A2 = With A3 = For + </P> + <P>B1 = Cell B2 = Strings B3 = ; + </P> + <P>C1 = Is C2 = Testing C3 = string values + </P> + <P>D1 = Filled D2 = "blank" + </P> + <P><B>Expected result:</B> <BR> Spreadsheet strings values + should be displayed as stated above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/character</B> <BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 4 columns 23 entries - + Spreadsheet character values. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_character.sxc</B>. + </P> + <P>Convert c_character.sxc to c_character.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_character.pdb. <BR>Change Cell Reference "C7" = + -??%, .i.e appending a % sign. <BR>Export the doc back to + c_character.pdb. <BR>Merge c_character.pdb to + c_character.sxc. + </P> + <P>C7 = -??% + </P> + <P><B>Expected result:</B> <BR> Spreadsheet character values + should be displayed as in original file including minor change + stated above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/cyclic</B> <BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 2 columns 8 entries - + Spreadsheet error messages. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_cyclic.sxc</B>. + </P> + <P>Convert c_cyclic.sxc to c_cyclic.pdb, in MiniCalc PDB format. + <BR>Start POSE with MiniCalc application and import c_cyclic.pdb. + <BR>Change Cell Reference "A4" & "A5" = 0 + & "B4" = A1/A4, "B5"= A4/A5 in formula + bar. <BR>Export the doc back to c_cyclic.pdb. <BR>Merge + c_cyclic.pdb to c_cyclic.sxc. + </P> + <P>Changes should generate 2 extra errors shown below. + </P> + <P>B4 = Err.503</P> + <P>B5 = #VALUE! + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values including 2 extra errors generated by + the changes detailed above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/dividefloating</B> <BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 2 columns 7 entries - + Spreadsheet dividing floating points. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_dividefloating.sxc</B>. + </P> + <P>Convert c_dividefloating.sxc to c_dividefloating.pdb, in + MiniCalc PDB format. <BR>Start POSE with MiniCalc + application and import c_dividefloating.pdb. <BR>Change Cell + Reference "A4" = -(12.2)/(5-1) & "B2" = to + be positive, in formula bar. <BR>Export the doc back to + c_dividefloating.pdb. <BR>Merge c_dividefloating.pdb to + c_dividefloating.sxc. + </P> + <P>B2 = 03.050000 + </P> + <P>A4 = -03.05</P> + <P>Spreadsheet setting : Format -> Cells... -> Decimal + Places=6, Negative numbers red= TRUE, Leading zero's =2 -> OK. + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values and newly entered floating point + division with specified precision & colour, as stated above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/forwardrange</B> <BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 2 columns 4 rows 5 entries - + Spreadsheet tests forwardranging. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_forwardrange.sxc</B>. + </P> + <P>Convert c_forwardrange.sxc to c_forwardrange.pdb, in MiniCalc + PDB format. <BR>Start POSE with MiniCalc application and + import c_forwardrange.pdb. <BR>Change Cell Reference "B4" + = IF(0;45.45;54.54), in formula bar. <BR>Export the doc back + to c_forwardrange.pdb. <BR>Merge c_forwardrange.pdb to + c_forwardrange.sxc. + </P> + <P>Changes IF statement to False so ELSE VALUE now valid. + </P> + <P>B4 = 54.54 + </P> + <P>A1 = SUM(B2;B4) = B2+B3+B4 =56.23 + 560 + 54.54 = 670.77 + </P> + <P><B>Expected result:</B> <BR>Spreadsheet values & the + modified standard formula SUM'sl should be displayed in each cell + on sheet to reflect the changes as stated above, formulae should + be visible in the Formula Bar. </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/hiddenrow</B> <BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 5 columns 2 rows 9 entries - + Spreadsheet tests hidden row. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_hiddenrow.sxc</B>. + </P> + <P>Convert c_hiddenrow.sxc to c_hiddenrow.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_hiddenrow.pdb. <BR>Select Format -> Row -> Show. + <BR>Export the doc back to c_hiddenrow.pdb. <BR>Merge + c_hiddenrow.pdb to c_hiddenrow.sxc. + </P> + <P>A previously hidden row 2 appears. + </P> + <P><B>Expected result:</B> <BR>Spreadsheet values & standard + formula SUM's should be displayed in each cell on sheet as before + including a new row #2 which reflects the change stated above. </P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/invalidcellref</B> <BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 3 columns 3 rows 8 entries - + Spreadsheet invalid cell references. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_invalidcellref.sxc</B>. + </P> + <P>Convert c_invalidcellref.sxc to c_invalidcellref.pdb, in + MiniCalc PDB format. <BR>Start POSE with MiniCalc + application and import c_invalidcellref.pdb. <BR>Change Cell + Reference "A3" = MAX(1;2;3) , "C2" = "blank", + "C3" = a0, in formula bar. <BR>Export the doc back + to c_invalidcellref.pdb. <BR>Merge c_invalidcellref.pdb to + c_invalidcellref.sxc. + </P> + <P>Changes should generate 2 extra errors shown below. + </P> + <P>A3 = 3 + </P> + <P>C2 = "blank" + </P> + <P>C3 = #NAME? + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values, excpet "C3" which holds new + invalid input warning generated by the change detailed above, + sheet should also show removal of 2 types of invalid input with + valid input replacements "A3" & "C2".</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/largerange</B> <BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 3 columns 3 rows 8 entries - + Spreadsheet large range test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_largerange.sxc</B>. + </P> + <P>Convert c_largerange.sxc to c_largerange.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_largerange.pdb. <BR>Change Cell Reference "B3" = + SUM(E7:G10), in formula bar. <BR>Export the doc back to + c_largerange.pdb. <BR>Merge c_largerange.pdb to + c_largerange.sxc. + </P> + <P>Increases the range by an extra row. + </P> + <P>B3 = SUM(E7:G10) = E7+F7+G7+E8+F8+G8+E9+F9+G9+E10+F10+G10 = + </P> + <P>= 4+4+4+2+2+4+1+4+4+1+1+12 = 31 +12 = 43 + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values, except "B3" which holds new + larger range standard formula SUM generated by the change detailed + above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/listrange</B> <BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 5 columns 4 rows 20 entries - + Spreadsheet listrange test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_listrange.sxc</B>. + + </P> + <P>Convert c_listrange.sxc to c_listrange.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_listrange.pdb. <BR>Change Cell Reference "D3" = + 24, in formula bar. <BR>Export the doc back to + c_listrange.pdb. <BR>Merge c_listrange.pdb to + c_listrange.sxc. + </P> + <P>D3 = 24 + </P> + <P>A4 = SUM(A1:A3) = 256.1 + </P> + <P>B4 = AVERAGE(A1:A3) = 17.07 + </P> + <P>C4 = AVERAGE(A4:B4) = AVERAGE( 256.1+17.07) = 136.59 + </P> + <P>D4 = AVERAGE(D1;D2;D3) = AVERAGE( 13.1+18+24) = 18.37 + </P> + <P>E5 = SUM(A4:B4:C4:D4) = (256.1+17.07+136.59+18.37) = 428.13<BR> + <BR> <BR> + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values, except cells "A4-E4" which + hold the modified standard formula SUM & AVERAGE value's + generated by the change in D3 detailed above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/mathematical</B> <BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 5 columns 3 rows 15 entries - + Spreadsheet stanadard math functs test in (Rad). + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_mathematical.sxc</B>. + + </P> + <P>Convert c_mathematical.sxc to c_mathematical.pdb, in MiniCalc + PDB format. <BR>Start POSE with MiniCalc application and + import c_mathematical.pdb. <BR>Change Cell Reference "B1" + = SIN(3.14/2), "B2" =COS(0), "C3"= TAN(1.57/2) + in formula bar. <BR>Export the doc back to + c_mathematical.pdb. <BR>Merge c_mathematical.pdb to + c_mathematical.sxc. + </P> + <P>B1 = 1</P> + <P>B2 = 1 + </P> + <P>C3 =1 + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values except cells "B1,B2,C3" which + hold modified sin,cos & tan value's generated by the changes + stated above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/protection</B> <BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 1 column 3 rows 3 entries - + Spreadsheet protection test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_protection.sxc</B>. + + </P> + <P>Convert c_protection.sxc to c_protection.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_protection.pdb. <BR>Attempt to Change Cell Reference "A1" + either directly or in formula bar from the value 12 to 1. + <BR>Export the doc back to c_protection.pdb. <BR>Merge + c_protection.pdb to c_protection.sxc. + </P> + <P>User should be unable to change cell contents, popup error + message "Protected cells can not be modified" should + appear. + </P> + <P>This is because the Tools -> Protect Document -> Sheet + option has been enabled with a password and therefore all cells on + sheet are write protected. + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/renamedsheet</B> <BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 3 sheets 0 entries - + Spreadsheet rename test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_renamedsheet.sxc</B>. + + </P> + <P>Convert c_renamedsheet.sxc to c_renamedsheet.pdb, in MiniCalc + PDB format. <BR>Start POSE with MiniCalc application and + import c_renamedsheet.pdb. <BR>Change sheet named "testplan" + to "renamed". <BR>Export the doc back to + c_renamedsheet.pdb. <BR>Merge c_renamedsheet.pdb to + c_renamedsheet.sxc. + </P> + <P>Click on "testplan" sheet tab, and using 3<SUP>rd</SUP> + mouse button, choose Rename..., from popup menu, enter new sheet + name & OK. + </P> + <P>OR choose Format -> Sheet -> Rename... enter new sheet + name & OK. + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheets & names, with the exception of the + "testplan" sheet which should now be labelled "renamed" + .</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/sheetreference</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 3 sheets 4 columns 4 rows 11 + entries - Spreadsheet sheetreference test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_sheetreference.sxc</B>. + + </P> + <P>Convert c_sheetreference.sxc to c_sheetreference.pdb, in + MiniCalc PDB format. <BR>Start POSE with MiniCalc + application and import c_sheetreference.pdb. <BR>Change Cell + Reference "A3" = Sheet3.B1. <BR>Export the doc + back to c_sheetrefernce.pdb. <BR>Merge c_sheetreference.pdb + to c_sheetreference.sxc. + </P> + <P>A3 = 3. + </P> + <P>B4 =26.</P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original value's & formulae as in original file, except + cells "A3"& "A4" which should display a + different sheet reference value and the modified sheet reference + formula, reflecting the changes stated above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/smallrange</B> <BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 4 columns 3 rows 10 entries - + Spreadsheet small range test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_smallrange.sxc</B>. + + </P> + <P>Convert c_smallrange.sxc to c_smallrange.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_smallrange.pdb. <BR>Change Cell Reference "B3" = + AVERAGE(A1:B2), in formula bar. <BR>Export the doc back to + c_smallrange.pdb. <BR>Merge c_smallrange.pdb to + c_smallrange.sxc. + </P> + <P>Decrease the range by 1 row. + </P> + <P>B3 = AVERAGE(A1:B2) = (1+2+3+3)/4 = 2.25 + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values, except "A3" which now holds + average value of new smaller range generated by the change + detailed above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/cancel</B><BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries - + Spreadsheet palm confirm &cancel test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_cancel.sxc</B>. + </P> + <P>Convert c_cancel.sxc to c_cancel.pdb, in MiniCalc PDB format. + <BR>Start POSE with MiniCalc application and import c_cancel.pdb. + <BR>Select with mouse Cell Reference "A2" on dotted line + on palm type 14, tap “TICK” option (leftmost option on + palm) to confirm, repeat this step this time Changing Cell + Reference “A2” = 1, except this time tap the “X” + option to cancel. <BR>Export the doc back to c_cancel.pdb. + <BR>Merge c_cancel.pdb to c_cancel.sxc. + </P> + <P>A2 = 14. + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values, except "A2" which now holds + the value 14 generated by the change detailed above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/cut&paste</B><BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries - + Spreadsheet palm cut&paste test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_cut&paste.sxc</B>. + + </P> + <P>Convert c_cut&paste.sxc to c_cut&paste.pdb, in MiniCalc + PDB format. <BR>Start POSE with MiniCalc application and + import c_cut&paste.pdb. <BR>Choose Cell Reference "A2" + with mouse, tap cut option on palm, choose Cell Reference “A5” + and tap paste option. <BR>Export the doc back to + c_cut&paste.pdb. <BR>Merge c_cut&paste.pdb to + c_cut&paste.sxc. + </P> + <P>A2 = “blank”.</P> + <P>A5 = 14. + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values, except "A2" & “A5” + which now holds the values blank & 14 resp. generated by the + changes detailed above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/copy&paste</B><BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries - + Spreadsheet palm copy&paste test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_copy&paste.sxc</B>. + + </P> + <P>Convert c_copy&paste.sxc to c_copy&paste.pdb, in + MiniCalc PDB format. <BR>Start POSE with MiniCalc + application and import c_copy&paste.pdb. <BR>Choose Cell + Reference "A5" with mouse, tap copy option on palm, + choose Cell Reference “A2” and tap paste option. + <BR>Export the doc back to c_copy&paste.pdb. <BR>Merge + c_copy&paste.pdb to c_copy&paste.sxc. + </P> + <P>A2 = 14.</P> + <P>A5 = 14. + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values, except "A2" which now holds + the value 14 generated by the change detailed above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/textentry</B><BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries - + Spreadsheet palm text entry test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_textentry.sxc</B>. + + </P> + <P>Convert c_textentry.sxc to c_textentry.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_textentry.pdb. <BR>Choose Cell Reference "A1" + with mouse, tap textentry option on palm, type the following text + string into the popup text box “This is a MiniCalc text + entry test.”.<BR>Export the doc back to c_textentry.pdb. + <BR>Merge c_textentry.pdb to c_textentry.sxc. + </P> + <P>A1 = “This is a MiniCalc text entry test.”</P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values, except "A1" which now holds + the string “This is a MiniCalc text entry test”, + generated by the change detailed above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/function</B><BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries - + Spreadsheet palm function test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_function.sxc</B>. + + </P> + <P>Convert c_function.sxc to c_function.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_function.pdb. <BR>Choose Cell Reference "A1" + with mouse, tap standard function option on palm, choose the + function AVERAGE from the popup list by tapping, type the values + “1;2;3” between the function brackets on the dotted + line were the cursor is placed and press return.<BR>Export the doc + back to c_function.pdb. <BR>Merge c_function.pdb to + c_function.sxc. + </P> + <P>A1 = AVERAGE(1;2;3) = 2.</P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values, except "A1" which now holds + the result of the average function given args (1;2;3) = 2 + generated by the change detailed above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/numberpad</B><BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries - + Spreadsheet palm numberpad test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_numberpad.sxc</B>. + + </P> + <P>Convert c_numberpad.sxc to c_numberpad.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_numberpad.pdb. <BR>Choose Cell Reference "A1" + with mouse, tap the “123” option on the palm, tap + “->”, “=”, “5-0+2” from + popup numberpad, and press return.<BR>Export the doc back to + c_numberpad.pdb. <BR>Merge c_numberpad.pdb to + c_numberpad.sxc. + </P> + <P>A1 = 5-0+2 = 7.</P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values, except "A1" which now holds + the result of the formula 5-0+2, generated by the change detailed + above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/math_funcs</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries - + Spreadsheet palm numberpad test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_math_funcs.sxc</B>. + + </P> + <P>Convert c_math_funcs.sxc to c_math_funcs.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_math_funcs.pdb. <BR>Choose the Cell References below with + mouse,and for each type on the palm the corresponding entry before + pressing return.</P> + <P>A1 = <BR>Export the doc back to c_math_funcs.pdb. <BR>Merge + c_math_funcs.pdb to c_math_funcs.sxc. + </P> + <P>A1 = .</P> + <P>A2 =</P> + <P>A3 = + </P> + <P>A4 =</P> + <P><BR><BR> + </P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values, except "A1" which now holds + the result of the formula 5-0+2, generated by the change detailed + above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/insertrow</B><BR> </P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries - + Spreadsheet palm insert row test. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_insertrow.sxc</B>. + + </P> + <P>Convert c_insertrow.sxc to c_insertrow.pdb, in MiniCalc PDB + format. <BR>Start POSE with MiniCalc application and import + c_insertrow.pdb. </P> + <P><BR>Select Cell Reference "A3" with mouse, tap the + side bar of the spreadsheet at position 3 on the palm, tap + “Insert” from popup menu, and press return. Select the + newly inserted Cell Reference with mouse and enter the number “2”, + press return.<BR><BR><BR> + </P> + <P>Export the doc back to c_insertrow.pdb. <BR>Merge + c_insertrow.pdb to c_insertrow.sxc. + </P> + <P>A1 = .</P> + <P><B>Expected result:</B> <BR> Spreadsheet should display + all original sheet values, except "A1" which now holds + the result of the formula 5-0+2, generated by the change detailed + above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><B>minicalc/convert/content/multi_boolean</B></P> + </TD> + <TD WIDTH=584> + <P><B>Summary</B>: Spreadsheet with 1 column 8 entries - + Spreadsheet multi boolean entry. + </P> + <P><B>Procedure:</B> <BR>Use test file <B>c_multi_boolean.sxc</B>. + + </P> + <P>Convert c_multi_boolean.sxc to c_multi_boolean.pdb, in MiniCalc + PDB format. <BR>Start POSE with MiniCalc application and + import c_multi_boolean.pdb. <BR>Export the doc back to + c_multi_boolean.pdb. <BR>Merge c_multi_boolean.pdb to + c_multi_boolean.sxc. + </P> + <P>Logical Funtion test : cells A1-A4: + </P> + <P>A1-A4 = FALSE + </P> + <P>A5-A8 = TRUE + </P> + <P>Returns 4 logical FALSE & TRUE values resp.. + </P> + <P><B>Expected result:</B> <BR> The logical entry of each + cell should be displayed on the sheet as stated above.</P> + </TD> + </TR> + <TR VALIGN=TOP> + <TD WIDTH=431> + <P><BR> + </P> + </TD> + <TD WIDTH=584> + <P><BR> + </P> + </TD> + </TR> +</TABLE> +<P><BR> <BR> <BR> +</P> +</BODY> +</HTML>
\ No newline at end of file |