diff options
author | Mathias Bauer <mba@openoffice.org> | 2010-07-13 14:38:37 +0200 |
---|---|---|
committer | Mathias Bauer <mba@openoffice.org> | 2010-07-13 14:38:37 +0200 |
commit | 1b341c875354ff255fd22de7983e1fb66fd0652e (patch) | |
tree | 464f0b2b599c5f0125b7c900440f998c1408f163 /testgraphical | |
parent | 9018d3dbb6c5d45093b15eebccb163ef15b7f954 (diff) | |
parent | d57ac99460bae6dd3b85e803367fa82073819770 (diff) |
CWS changehid: resync to m84
Diffstat (limited to 'testgraphical')
50 files changed, 11240 insertions, 0 deletions
diff --git a/testgraphical/document-pool/demo/CurrentTime.ods b/testgraphical/document-pool/demo/CurrentTime.ods Binary files differnew file mode 100644 index 000000000000..e027215ddb74 --- /dev/null +++ b/testgraphical/document-pool/demo/CurrentTime.ods diff --git a/testgraphical/document-pool/demo/knownissues.xcl b/testgraphical/document-pool/demo/knownissues.xcl new file mode 100644 index 000000000000..5cdad159bc35 --- /dev/null +++ b/testgraphical/document-pool/demo/knownissues.xcl @@ -0,0 +1,8 @@ +[ps] +### contains date in it, will fail every time ### +CurrentTime.ods + +[pdf] +### contains date in it, will fail every time ### +CurrentTime.ods + diff --git a/testgraphical/document-pool/singletest/eis-test.odt b/testgraphical/document-pool/singletest/eis-test.odt Binary files differnew file mode 100644 index 000000000000..bb9c6a43f623 --- /dev/null +++ b/testgraphical/document-pool/singletest/eis-test.odt diff --git a/testgraphical/prechecks/makefile.mk b/testgraphical/prechecks/makefile.mk new file mode 100644 index 000000000000..13796c949ab5 --- /dev/null +++ b/testgraphical/prechecks/makefile.mk @@ -0,0 +1,56 @@ +#************************************************************************* +# +# 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. +# +#************************************************************************* + +PRJ=.. + +PRJNAME=gfxcmp_prechecks +TARGET=notargetyet + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk + +.IF "$(VERBOSE)"!="" + P_VERBOSE=-verbose +.ENDIF +.IF "$(SHOW)"!="" + P_JAVA6=-java6 +.ENDIF + +# PERLDEBUG=-d:ptkdb +ALLTAR: +.IF "$(GUI)"=="WNT" || "$(GUI)"=="OS2" + $(PERL) $(PERLDEBUG) softwaretests.pl -printerdriver -imagemagick -ghostscript $(P_VERBOSE) $(P_JAVA6) +.ELSE + $(PERL) $(PERLDEBUG) softwaretests.pl -imagemagick -ghostscript $(P_VERBOSE) $(P_JAVA6) +.ENDIF + +.INCLUDE : $(PRJ)$/util$/makefile.pmk diff --git a/testgraphical/prechecks/softwaretests.pl b/testgraphical/prechecks/softwaretests.pl new file mode 100644 index 000000000000..f591fa139879 --- /dev/null +++ b/testgraphical/prechecks/softwaretests.pl @@ -0,0 +1,564 @@ +eval 'exec perl -wS $0 ${1+\"$@\"}' + if 0; + +#************************************************************************* +# +# 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. +# +#************************************************************************* + +# This is a pre check, which checks if some extra software exists + +BEGIN +{ + # Adding the path of this script file to the include path in the hope + # that all used modules can be found in it. + $0 =~ /^(.*)[\/\\]/; + push @INC, $1; +} + +use strict; +use English; # $OSNAME, ... +use Getopt::Long; +use Cwd; +use Cwd 'chdir'; +my $cwd = getcwd(); + +our $help; # Help option flag +our $version; # Version option flag + +# flush STDOUT +# my $old_handle = select (STDOUT); # "select" STDOUT and save # previously selected handle +# $| = 1; # perform flush after each write to STDOUT +# select ($old_handle); # restore previously selected handle + +$OUTPUT_AUTOFLUSH=1; # works only if use English is used. + +our $sGlobalIniFile; +our $verbose = 0; +our $ghostscript; +our $imagemagick; +our $java6; +our $printerdriver; + +our $version_info = 'compare.pl'; + +GetOptions( + "ghostscript" => \$ghostscript, + "imagemagick" => \$imagemagick, + "java6" => \$java6, + "printerdriver" => \$printerdriver, + "verbose" => \$verbose, + + "help" => \$help, + "version" => \$version + ); + +if ($help) +{ + print_usage(*STDOUT); + exit(0); +} +# Check for version option +if ($version) +{ + print STDERR "$version_info\n"; + exit(0); +} + +# prepare the GlobalIniFile + +sub prepare() +{ + my $sEnv = "$ENV{PRJ}"; + if (! $sEnv) + { + print "Warning: Seems you are not in a makefile.mk environment.\n"; + $sEnv = ".."; + } + my $sPath = getcwd(); + $sPath .= "/" . $sEnv; + chdir ($sPath); + cwd(); + $sPath = getcwd(); + my $sInpath = $ENV{INPATH}; + $sPath .= "/" . $sInpath . "/misc"; + $sGlobalIniFile = "$sPath/pathes.ini"; + print "Global Path ini file is: $sGlobalIniFile\n" if ($verbose); +} + +sub unixpath($) +{ + my $path = shift; + $path =~ s/\\/\//g; # make out of '\' a '/' + return $path; +} + +# search for file in a given path list. +# the path list should be separated as the path variable in the corresponding OS +sub searchForFileInPath($$) +{ + my $sFile = shift; + my $sPathList = shift; + + my $sep = ':'; + if ($OSNAME eq "MSWin32") + { + $sep = ';'; + } + my @path = split($sep, $sPathList); + + my $sPath; + my $startdir; + my $bFound = 0; + my $olddir = getcwd(); + + my $sWindowsHomeDir = unixpath(lc($ENV{WINDIR})); + + foreach $startdir (@path) + { + my $nCount = 0; + # + # IMPORTANT: leave out windir path. + # + if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + my $sPath = unixpath(lc(convertCygwinPath($startdir))); + if ($sPath =~ /^$sWindowsHomeDir/ ) + { + print "path: $startdir is windows path leave out.\n" if ($verbose); + next; + } + } + + local *DIR; + if (opendir (DIR, $startdir)) # open directory + { + print "path: $startdir" if ($verbose); + chdir ($startdir); + cwd(); + my $myfile; + while ($myfile = readdir(DIR)) # get filename + { + if (-f $myfile ) # is it a file? + { + $nCount ++; + if ($myfile eq $sFile) # is it the real file? + { + $sPath = $startdir; + $bFound = 1; + last; + } + } + } + closedir(DIR); + print " ($nCount)\n" if ($verbose); + } + if ($bFound == 1) + { + last; + } + } + chdir ($olddir); + cwd(); + + return $sPath; +} + + +prepare(); +# don't remove the inifile, only build clean should do this. +# if ( -e "$sGlobalIniFile") +# { +# unlink($sGlobalIniFile); +# } + + +# small helper, which replaces the return code +sub errorAdaption($) +{ + my $error = shift; + if ($error != 0) + { + $error = $error / 256; + } + if ($error > 127) + { + $error = $error - 256; + } + return $error; +} + +# for every error we increment this variable by 1 +our $nGlobalErrors = 0; + +sub handleError($$) +{ + my $error = shift; + my $sText = shift; + if ($error != 0) + { + print "ERROR: search for $sText has failed with Errornumber: $error\n"; + $nGlobalErrors ++; + } +} + +sub convertCygwinPath($) +{ + my $sPath = shift; + + if ($OSNAME eq "cygwin") + { + # print "Cygwin Path Patch.\n" if ($verbose); + if ($sPath =~ /\/cygdrive\/(.)/) + { + my $Letter = $1; + $sPath =~ s/\/cygdrive\/${Letter}/${Letter}\:/; + # print "Cygwin Path Patch: '$sPath'\n" if ($verbose); + } + } + return $sPath; +} + +# append key=value to GlobalIniFile +sub insertPath($$) +{ + my $sKey = shift; + my $sValue = shift; + + $sValue = convertCygwinPath($sValue); + my $sIniFile = convertCygwinPath($sGlobalIniFile); + local *INIFILE; + if (open(INIFILE, ">>" . $sIniFile )) + { + print INIFILE "$sKey=$sValue\n"; + } + close(INIFILE); +} + +sub getFastPath($) +{ + my $sKey = shift; + my $sValue; + local *INIFILE; + my $sIniFile = convertCygwinPath($sGlobalIniFile); + if (open(INIFILE, $sIniFile)) + { + my $line; + while ($line = <INIFILE>) + { + chomp($line); + if ( $line =~ /^$sKey=(.*)$/ ) + { + $sValue = $1; + # print INIFILE "$sKey=$sValue\n"; + } + } + close(INIFILE); + } + return $sValue; +} + +sub checkForGhostscript() +{ + print "Search for Ghostscript\n" if ($verbose); + if ($OSNAME eq "linux" || + $OSNAME eq "solaris") + { + # search for ghostscript + local *GHOSTSCRIPT; + if (open(GHOSTSCRIPT, "which gs 2>&1 |")) + { + my $line; + while ($line = <GHOSTSCRIPT>) + { + chomp($line); + print "- $line\n" if ($verbose); + } + close(GHOSTSCRIPT); + } + my $error = errorAdaption($?); + handleError($error, "Ghostscript"); + } + elsif ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + my $sGSExe = "gswin32c.exe"; + # my $sGSPath = "C:/gs/gs8.64/bin"; + my $sGSPath = getFastPath("gs.path"); + if (! $sGSPath) + { + $sGSPath = searchForFileInPath($sGSExe, $ENV{PATH}); + + if ( ! -e "$sGSPath/$sGSExe") + { + $nGlobalErrors ++; + print "ERROR: search for $sGSPath/$sGSExe failed.\n"; + print "Please install ghostscript from www.adobe.com to and make it available in \$PATH variable \n"; + } + else + { + insertPath("gs.path", $sGSPath); + insertPath("gs.exe", $sGSExe); + } + } + if ( -e "$sGSPath/$sGSExe" ) + { + print "Found Ghostscript: '$sGSPath'\n" if ($verbose); + } + } + else + { + print "ERROR: Check for Ghostscript failed, due to unsupported '$OSNAME' environment.\n"; + $nGlobalErrors ++; + } +} + + +sub checkForPSDriver() +{ + # we don't need to check for unix here, due to the fact, unix is per default be able to print in postscript + if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + print "Check for postscript driver.\n" if ($verbose); + my $sWindowsRoot = $ENV{windir}; + if (! $sWindowsRoot) + { + $sWindowsRoot = $ENV{WINDIR}; + } + my $sCrossOfficeDriver = "${sWindowsRoot}/system32/crossoffice.ppd"; + if ( ! -e "$sCrossOfficeDriver") + { + print "ERROR: Don't found Postscript driver $sCrossOfficeDriver file\n"; + $nGlobalErrors ++; + print "Take a look on: http://so-gfxcmp.germany.sun.com/docs/further/convwatch/convwatch.html.\n"; + } + } +} + +sub checkForImageMagick() +{ + print "Search for Imagemagick\n" if ($verbose); + if ($OSNAME eq "linux" || + $OSNAME eq "solaris") + { + # search for imagemagick + local *IMAGEMAGICK; + if (open(IMAGEMAGICK, "which convert 2>&1 |")) + { + my $line; + while ($line = <IMAGEMAGICK>) + { + chomp($line); + print "- $line\n" if ($verbose); + } + close(IMAGEMAGICK); + } + my $error = errorAdaption($?); + handleError($error, "Imagemagick"); + } + elsif ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + my $sImageMagickExe = "convert.exe"; + # my $sImageMagickPath = "C:/gs/gs8.64/bin"; + my $sImageMagickPath = getFastPath("imagemagick.path"); + if (! $sImageMagickPath) + { + $sImageMagickPath = searchForFileInPath($sImageMagickExe, $ENV{PATH}); + if ($sImageMagickPath) + { + if ( ! -e "$sImageMagickPath/$sImageMagickExe") + { + $nGlobalErrors ++; + print "ERROR: search for $sImageMagickPath/$sImageMagickExe failed.\n"; + print "Please install ImageMagick from www.imagemagick.org to and make it available in \$PATH variable \n"; + } + else + { + insertPath("imagemagick.path", $sImageMagickPath); + # insertPath("gs.exe", $sImageMagickExe); + } + } + else + { + # next try, search image magick in $PROGRAMFILES + my $sPrograms = unixpath($ENV{PROGRAMFILES}); + + if (! $sPrograms) + { + print "There exist no \$PROGRAMFILES path, wrong Windows version?\n"; + $nGlobalErrors++; + } + else + { + local *DIR; + if (opendir (DIR, $sPrograms)) # open program directory + { + my $myfile; + while ($myfile = readdir(DIR)) # get a filename + { + if ($myfile =~ /ImageMagick/) + { + $sImageMagickPath = $sPrograms . "/" . $myfile; + last; + } + } + closedir(DIR); + } + if (! -e $sImageMagickPath) + { + print "ImageMagick not found.\n"; + $nGlobalErrors ++; + } + else + { + insertPath("imagemagick.path", $sImageMagickPath); + } + } + } + + } + if ( -e "$sImageMagickPath/$sImageMagickExe" ) + { + print "Found ImageMagick: '$sImageMagickPath'\n" if ($verbose); + } + } + else + { + print "ERROR: not supported environment\n"; + } +} + +sub checkForJava6() +{ + print "Search for Java6\n" if ($verbose); + my $javaexe = "java"; + if ( $ENV{JAVA6} ) + { + $javaexe = $ENV{JAVA6}; + } + + if ($OSNAME eq "linux" || $OSNAME eq "cygwin") + { + # search for imagemagick + local *JAVA; + if (open(JAVA, "$javaexe -version 2>&1 |")) + { + my $line; + while ($line = <JAVA>) + { + chomp($line); + print "- $line\n" if ($verbose); + if ( $line =~ /java version "(.*)"/ ) + { + my $javaversion = $1; + my @version = split('\.', $javaversion); + print "Found Java version: $version[1] the complete version: $javaversion\n" if ($verbose); + if ( $version[1] < 6) + { + print "Wrong Java version, at least Java version 6 is need but found $javaversion.\n"; + $nGlobalErrors++; + print "It is possible to overwrite the java exe with environment variable JAVA6='path'.\n"; + } + else + { + insertPath("java.exe", $javaexe); + } + last; + } + } + close(JAVA); + } + my $error = errorAdaption($?); + handleError($error, "Java"); + } + elsif ($OSNAME eq "MSWin32") + { + my $javaexe = "java"; + if ( $ENV{JAVA6} ) + { + $javaexe = $ENV{JAVA6}; + } + + if (! -e $javaexe) + { + print "Java not found.\n"; + $nGlobalErrors ++; + } + else + { + print "Found Java: '$javaexe'\n" if ($verbose); + insertPath("java.exe", $javaexe); + } + } + else + { + print "ERROR: Java not found.\n"; + } +} + +# different checks +print "Environment '$OSNAME'\n" if ($verbose); + +if ($printerdriver) +{ + checkForPSDriver(); +} +if ($ghostscript) +{ + checkForGhostscript(); +} +if ($imagemagick) +{ + checkForImageMagick(); +} +if ($java6) +{ + checkForJava6(); +} + +# return with found errors +exit($nGlobalErrors); + +# ------------------------------------------------------------------------------ +sub print_usage(*) +{ + local *HANDLE = $_[0]; + my $tool_name = basename($0); + + print(HANDLE <<END_OF_USAGE); + +Usage: $tool_name [OPTIONS] + + -ghostscript Try to find ghostscript in your environment + -imagemagick Try to find imagemagick + -java6 Checks for java 1.6.x + -printerdriver Try to find printer driver, windows only + -verbose be verbose + + -h, --help Print this help, then exit + -v, --version Print version number, then exit + +END_OF_USAGE +; +} diff --git a/testgraphical/prj/build.lst b/testgraphical/prj/build.lst new file mode 100644 index 000000000000..45fb77fd81ec --- /dev/null +++ b/testgraphical/prj/build.lst @@ -0,0 +1,7 @@ +gfxcmp testgraphical : instsetoo_native NULL +gfxcmp testgraphical usr1 - all gfxcmp_mkout NULL +#gfxcmp testgraphical\prechecks nmake - all gfxcmp_pre NULL +gfxcmp testgraphical\ui\java\ConvwatchGUIProject nmake - all gfxcmp_java_ui NULL +gfxcmp testgraphical\ui\java nmake - all gfxcmp_java gfxcmp_java_ui NULL +# gfxcmp testgraphical\source nmake - all gfxcmp_src gfxcmp_java NULL +gfxcmp testgraphical\qa\graphical nmake - all gfxcmp_qa gfxcmp_java NULL diff --git a/testgraphical/prj/d.lst b/testgraphical/prj/d.lst new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/testgraphical/prj/d.lst diff --git a/testgraphical/qa/graphical/Test.java b/testgraphical/qa/graphical/Test.java new file mode 100644 index 000000000000..8c633dede44c --- /dev/null +++ b/testgraphical/qa/graphical/Test.java @@ -0,0 +1,113 @@ +/************************************************************************* +* 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. +************************************************************************/ + +package org.openoffice.testgraphical.qa.graphical; + +import org.openoffice.Runner; +import org.openoffice.test.OfficeConnection; +import static org.junit.Assert.*; + +import helper.ProcessHandler; +import graphical.FileHelper; +import java.io.File; + +public final class Test { + @org.junit.Before + public void setUp() throws Exception + { + connection.setUp(); + } + + @org.junit.After + public void tearDown() throws Exception + { + connection.tearDown(); + } + + @org.junit.Test + public void test() + { + boolean good = true; + + final String sPerlEXE = System.getenv("PERL"); + // System.out.println("PERL:=" + sPerlEXE); + + final String sPRJ = System.getenv("PRJ"); + // System.out.println("PRJ:=" + sPRJ); + + String sShow = ""; + if (System.getProperty("SHOW") != null) + { + sShow = "-show"; + } + + final String sComparePath = FileHelper.appendPath(sPRJ, "source"); + final String sCompareName = FileHelper.appendPath(sComparePath, "compare.pl"); + + File aCompareFile = new File(sCompareName); + if (!aCompareFile.exists()) + { + System.out.println("Path to compare.pl is wrong: '" + aCompareFile.getAbsolutePath() + "'"); + assertTrue(false); + } + + final String sConnectionString = connection.getDescription(); + + String[] sCommandArray = + { + sPerlEXE, + aCompareFile.getAbsolutePath(), + "-creatortype", "pdf", + +// If you make changes here, do it also in ../../source/makefile.mk in selftest: target! + + "-pool", "singletest", + "-document", "eis-test.odt", + // "-pool", "demo", + // "-document", "CurrentTime.ods", + "-connectionstring", sConnectionString, + // "-verbose", + sShow + }; + + ProcessHandler aHandler = new ProcessHandler(sCommandArray); + boolean bBackValue = aHandler.executeSynchronously(); + int nExitCode = aHandler.getExitCode(); + + // String sBack = aHandler.getOutputText(); + if (nExitCode != 0) + { + good = false; + } + + assertTrue(good); + + // Runner.run( + // "-sce", "sw.sce", "-xcl", "knownissues.xcl", "-tdoc", + // "testdocuments", "-cs", connection.getDescription())); + } + + private final OfficeConnection connection = new OfficeConnection(); +} diff --git a/testgraphical/qa/graphical/makefile.mk b/testgraphical/qa/graphical/makefile.mk new file mode 100644 index 000000000000..7cb43a6585db --- /dev/null +++ b/testgraphical/qa/graphical/makefile.mk @@ -0,0 +1,57 @@ +#************************************************************************* +# 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. +#***********************************************************************/ + +.IF "$(OOO_SUBSEQUENT_TESTS)" == "" +nothing .PHONY: + @echo "OOO_SUBSEQUENT_TESTS not given, do nothing." +.ELSE + +PRJ = ../.. +PRJNAME = testgraphical +TARGET = qa_graphical + +.IF "$(OOO_JUNIT_JAR)" != "" + +.IF "$(SHOW)" != "" +# You will need java6 for this! +JAVAIFLAGS:=$(JAVAIFLAGS) -DSHOW=1 +.ENDIF + +PACKAGE = org/openoffice/testgraphical/qa/graphical +JAVATESTFILES = Test.java +JAVAFILES = $(JAVATESTFILES) +JARFILES = OOoRunner.jar test.jar +EXTRAJARFILES = $(OOO_JUNIT_JAR) +.END + +.INCLUDE: settings.mk +.INCLUDE: target.mk +.INCLUDE: installationtest.mk + +ALLTAR : javatest + +.END + +clean: diff --git a/testgraphical/references/unxlngi/demo/CurrentTime.ods.pdf b/testgraphical/references/unxlngi/demo/CurrentTime.ods.pdf Binary files differnew file mode 100644 index 000000000000..a753c03708c7 --- /dev/null +++ b/testgraphical/references/unxlngi/demo/CurrentTime.ods.pdf diff --git a/testgraphical/references/unxlngi/demo/CurrentTime.ods.ps b/testgraphical/references/unxlngi/demo/CurrentTime.ods.ps new file mode 100644 index 000000000000..aa7455255e2c --- /dev/null +++ b/testgraphical/references/unxlngi/demo/CurrentTime.ods.ps @@ -0,0 +1,576 @@ +%!PS-Adobe-3.0 +%%BoundingBox: (atend) +%%Creator: (Oracle Open Office 3.2) +%%For: (ll93751) +%%CreationDate: (Fri May 12 00:00:14 2000) +%%Title: (CurrentTime) +%%LanguageLevel: 2 +%%DocumentData: Clean7Bit +%%Pages: (atend) +%%Orientation: (atend) +%%PageOrder: Ascend +%%EndComments +%%BeginProlog +%%BeginResource: procset PSPrint-Prolog 1.0 0 +/ISO1252Encoding [ +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle +/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash +/zero /one /two /three /four /five /six /seven +/eight /nine /colon /semicolon /less /equal /greater /question +/at /A /B /C /D /E /F /G +/H /I /J /K /L /M /N /O +/P /Q /R /S /T /U /V /W +/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore +/grave /a /b /c /d /e /f /g +/h /i /j /k /l /m /n /o +/p /q /r /s /t /u /v /w +/x /y /z /braceleft /bar /braceright /asciitilde /unused +/Euro /unused /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl +/circumflex /perthousand /Scaron /guilsinglleft /OE /unused /Zcaron /unused +/unused /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash +/tilde /trademark /scaron /guilsinglright /oe /unused /zcaron /Ydieresis +/space /exclamdown /cent /sterling /currency /yen /brokenbar /section +/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron +/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered +/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown +/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis +/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply +/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls +/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla +/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis +/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide +/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] def + +/psp_definefont { exch dup findfont dup length dict begin { 1 index /FID ne +{ def } { pop pop } ifelse } forall /Encoding 3 -1 roll def +currentdict end exch pop definefont pop } def + +/pathdict dup 8 dict def load begin +/rcmd { { currentfile 1 string readstring pop 0 get dup 32 gt { exit } +{ pop } ifelse } loop dup 126 eq { pop exit } if 65 sub dup 16#3 and 1 +add exch dup 16#C and -2 bitshift 16#3 and 1 add exch 16#10 and 16#10 +eq 3 1 roll exch } def +/rhex { dup 1 sub exch currentfile exch string readhexstring pop dup 0 +get dup 16#80 and 16#80 eq dup 3 1 roll { 16#7f and } if 2 index 0 3 +-1 roll put 3 1 roll 0 0 1 5 -1 roll { 2 index exch get add 256 mul } +for 256 div exch pop exch { neg } if } def +/xcmd { rcmd exch rhex exch rhex exch 5 -1 roll add exch 4 -1 roll add +1 index 1 index 5 -1 roll { moveto } { lineto } ifelse } def end +/readpath { 0 0 pathdict begin { xcmd } loop end pop pop } def + +systemdict /languagelevel known not { +/xshow { exch dup length 0 1 3 -1 roll 1 sub { dup 3 index exch get +exch 2 index exch get 1 string dup 0 4 -1 roll put currentpoint 3 -1 +roll show moveto 0 rmoveto } for pop pop } def +/rectangle { 4 -2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 +rlineto closepath } def +/rectfill { rectangle fill } def +/rectstroke { rectangle stroke } def } if +/bshow { currentlinewidth 3 1 roll currentpoint 3 index show moveto +setlinewidth false charpath stroke setlinewidth } def +/bxshow { currentlinewidth 4 1 roll setlinewidth exch dup length 1 sub +0 1 3 -1 roll { 1 string 2 index 2 index get 1 index exch 0 exch put dup +currentpoint 3 -1 roll show moveto currentpoint 3 -1 roll false charpath +stroke moveto 2 index exch get 0 rmoveto } for pop pop setlinewidth } def + +/psp_lzwfilter { currentfile /ASCII85Decode filter /LZWDecode filter } def +/psp_ascii85filter { currentfile /ASCII85Decode filter } def +/psp_lzwstring { psp_lzwfilter 1024 string readstring } def +/psp_ascii85string { psp_ascii85filter 1024 string readstring } def +/psp_imagedict { +/psp_bitspercomponent { 3 eq { 1 }{ 8 } ifelse } def +/psp_decodearray { [ [0 1 0 1 0 1] [0 255] [0 1] [0 255] ] exch get } +def 7 dict dup +/ImageType 1 put dup +/Width 7 -1 roll put dup +/Height 5 index put dup +/BitsPerComponent 4 index psp_bitspercomponent put dup +/Decode 5 -1 roll psp_decodearray put dup +/ImageMatrix [1 0 0 1 0 0] dup 5 8 -1 roll put put dup +/DataSource 4 -1 roll 1 eq { psp_lzwfilter } { psp_ascii85filter } ifelse put +} def +%%EndResource +%%EndProlog +%%BeginSetup +% +%%BeginResource: font ArialMTFID10HGSet1 +%!PS-AdobeFont-1.0-2.53740 +% Creator: SunTypeTools-TT 1.0 gelf +% Original font name: ArialMT +30 dict begin +/PaintType 0 def +/FontType 3 def +/StrokeWidth 0 def +/FontName (ArialMTFID10HGSet1) cvn def +/XUID [103 0 0 16#44E1DF76 13 16#50429D91 16#0D1ECFCF] def +/FontMatrix [.001 0 0 .001 0 0] def +/FontBBox [-664 -324 2028 1037] def +/Encoding 256 array def + 0 1 255 {Encoding exch /.notdef put} for + Encoding 0 /glyph0 put + Encoding 32 /glyph1 put + Encoding 48 /glyph2 put + Encoding 49 /glyph3 put + Encoding 51 /glyph4 put + Encoding 58 /glyph5 put + Encoding 80 /glyph6 put + Encoding 83 /glyph7 put + Encoding 97 /glyph8 put + Encoding 101 /glyph9 put + Encoding 103 /glyph10 put + Encoding 104 /glyph11 put + Encoding 116 /glyph12 put +/CharProcs 14 dict def + CharProcs begin + /.notdef {} def + /glyph0 { + 750 0 125 0 625 625 setcachedevice + 125 0 moveto + 125 625 lineto + 625 625 lineto + 625 0 lineto + 125 0 lineto + closepath + 140 15 moveto + 609 15 lineto + 609 609 lineto + 140 609 lineto + 140 15 lineto + closepath + fill + } bind def + /glyph1 { + 277 0 0 0 0 0 setcachedevice + } bind def + /glyph2 { + 556 0 41 -12 508 718 setcachedevice + 41 353 moveto + 41 437 50 505 67 557 curveto + 84 608 110 648 145 676 curveto + 179 704 222 718 274 718 curveto + 313 718 347 711 375 695 curveto + 404 680 428 658 447 628 curveto + 466 600 481 564 492 522 curveto + 502 480 508 424 508 353 curveto + 508 269 500 201 482 149 curveto + 465 98 439 58 405 30 curveto + 371 2 327 -12 274 -12 curveto + 206 -12 151 12 112 62 curveto + 65 121 41 218 41 353 curveto + closepath + 131 353 moveto + 131 235 145 157 173 118 curveto + 200 80 234 60 274 60 curveto + 315 60 349 79 376 118 curveto + 404 157 417 235 417 353 curveto + 417 470 404 549 376 587 curveto + 349 626 315 645 273 645 curveto + 233 645 201 629 177 594 curveto + 147 551 131 470 131 353 curveto + closepath + fill + } bind def + /glyph3 { + 556 0 108 0 372 718 setcachedevice + 372 0 moveto + 284 0 lineto + 284 560 lineto + 263 540 236 520 201 499 curveto + 167 479 136 464 108 454 curveto + 108 539 lineto + 158 562 201 590 237 623 curveto + 274 655 300 687 315 718 curveto + 372 718 lineto + 372 0 lineto + closepath + fill + } bind def + /glyph4 { + 556 0 41 -12 510 718 setcachedevice + 41 188 moveto + 129 200 lineto + 140 151 157 115 181 93 curveto + 205 71 235 60 270 60 curveto + 311 60 346 74 375 103 curveto + 403 131 417 166 417 209 curveto + 417 250 404 283 377 309 curveto + 352 335 318 348 277 348 curveto + 261 348 240 345 215 338 curveto + 225 416 lineto + 230 415 235 415 239 415 curveto + 276 415 310 424 340 444 curveto + 370 463 385 494 385 534 curveto + 385 566 374 593 352 614 curveto + 331 635 302 646 268 646 curveto + 234 646 205 636 182 614 curveto + 160 593 145 561 138 517 curveto + 50 533 lineto + 61 592 85 637 124 670 curveto + 162 702 209 718 266 718 curveto + 305 718 341 710 374 693 curveto + 406 677 432 654 449 625 curveto + 466 596 475 565 475 532 curveto + 475 501 467 474 450 448 curveto + 434 423 409 402 376 387 curveto + 419 378 452 357 475 327 curveto + 499 296 510 257 510 211 curveto + 510 149 488 96 442 52 curveto + 396 9 339 -12 269 -12 curveto + 207 -12 154 5 113 43 curveto + 71 81 48 129 41 188 curveto + closepath + fill + } bind def + /glyph5 { + 277 0 90 0 190 518 setcachedevice + 90 418 moveto + 90 518 lineto + 190 518 lineto + 190 418 lineto + 90 418 lineto + closepath + 90 0 moveto + 90 100 lineto + 190 100 lineto + 190 0 lineto + 90 0 lineto + closepath + fill + } bind def + /glyph6 { + 666 0 77 0 623 715 setcachedevice + 77 0 moveto + 77 715 lineto + 347 715 lineto + 394 715 431 713 456 708 curveto + 491 703 520 692 544 675 curveto + 568 659 587 636 602 606 curveto + 616 577 623 544 623 508 curveto + 623 448 604 396 565 354 curveto + 526 312 457 291 355 291 curveto + 171 291 lineto + 171 0 lineto + 77 0 lineto + closepath + 171 375 moveto + 356 375 lineto + 417 375 461 386 487 409 curveto + 513 432 525 464 525 505 curveto + 525 535 518 561 503 583 curveto + 488 604 468 618 443 625 curveto + 427 629 398 631 354 631 curveto + 171 631 lineto + 171 375 lineto + closepath + fill + } bind def + /glyph7 { + 666 0 44 -12 614 728 setcachedevice + 44 229 moveto + 134 237 lineto + 138 202 148 172 164 149 curveto + 179 126 203 108 235 94 curveto + 268 80 305 72 345 72 curveto + 381 72 413 78 441 88 curveto + 469 99 489 114 503 133 curveto + 516 151 523 172 523 194 curveto + 523 216 517 236 503 253 curveto + 491 270 469 284 439 295 curveto + 420 302 377 314 312 330 curveto + 246 346 200 360 173 375 curveto + 140 393 114 415 97 441 curveto + 81 468 72 498 72 530 curveto + 72 566 82 600 103 632 curveto + 123 663 153 687 192 703 curveto + 232 719 275 728 324 728 curveto + 377 728 424 719 464 702 curveto + 505 685 536 660 558 626 curveto + 580 594 591 556 593 514 curveto + 502 507 lineto + 498 552 481 586 453 609 curveto + 425 632 383 644 328 644 curveto + 270 644 229 634 203 613 curveto + 177 592 163 566 163 537 curveto + 163 511 172 490 191 473 curveto + 209 457 257 440 334 422 curveto + 411 405 463 390 492 376 curveto + 534 357 564 333 584 304 curveto + 604 274 614 240 614 202 curveto + 614 164 604 128 582 94 curveto + 560 61 529 35 488 16 curveto + 447 -2 401 -12 350 -12 curveto + 285 -12 231 -2 187 16 curveto + 144 35 109 63 84 101 curveto + 59 139 46 182 44 229 curveto + closepath + fill + } bind def + /glyph8 { + 556 0 36 -11 513 530 setcachedevice + 404 63 moveto + 372 36 340 17 310 5 curveto + 280 -5 248 -11 213 -11 curveto + 156 -11 112 2 82 30 curveto + 51 58 36 93 36 136 curveto + 36 162 41 185 53 206 curveto + 64 227 80 244 99 256 curveto + 117 269 138 279 162 285 curveto + 179 290 205 294 240 298 curveto + 311 307 363 317 396 329 curveto + 397 341 397 348 397 352 curveto + 397 387 389 413 372 427 curveto + 350 447 316 457 272 457 curveto + 231 457 201 450 181 436 curveto + 161 421 146 395 137 358 curveto + 51 370 lineto + 59 407 71 437 89 459 curveto + 107 482 133 500 167 512 curveto + 201 524 240 530 285 530 curveto + 329 530 365 525 393 514 curveto + 420 504 440 491 454 475 curveto + 467 459 476 439 481 415 curveto + 484 400 485 374 485 334 curveto + 485 217 lineto + 485 135 487 84 491 62 curveto + 495 41 502 20 513 0 curveto + 421 0 lineto + 413 18 407 39 404 63 curveto + closepath + 396 260 moveto + 365 247 317 236 253 227 curveto + 217 222 191 216 176 209 curveto + 162 203 150 193 142 181 curveto + 134 168 129 154 129 139 curveto + 129 116 138 96 156 80 curveto + 174 65 200 57 234 57 curveto + 268 57 298 64 324 79 curveto + 351 94 370 114 382 140 curveto + 392 160 396 189 396 228 curveto + 396 260 lineto + closepath + fill + } bind def + /glyph9 { + 556 0 36 -11 514 530 setcachedevice + 420 166 moveto + 511 155 lineto + 497 103 471 62 432 32 curveto + 393 3 344 -11 283 -11 curveto + 208 -11 147 11 103 58 curveto + 59 104 36 170 36 254 curveto + 36 342 59 409 104 458 curveto + 148 506 207 530 278 530 curveto + 348 530 404 506 448 459 curveto + 492 412 514 346 514 260 curveto + 514 255 514 247 514 236 curveto + 127 236 lineto + 130 180 146 136 175 105 curveto + 204 76 240 60 284 60 curveto + 316 60 343 68 366 85 curveto + 389 103 407 129 420 166 curveto + closepath + 132 309 moveto + 421 309 lineto + 418 352 407 385 388 407 curveto + 360 440 324 458 279 458 curveto + 239 458 206 444 178 417 curveto + 150 390 135 354 132 309 curveto + closepath + fill + } bind def + /glyph10 { + 556 0 32 -210 489 530 setcachedevice + 49 -42 moveto + 135 -55 lineto + 138 -81 148 -101 165 -113 curveto + 187 -129 216 -137 254 -137 curveto + 294 -137 326 -129 348 -112 curveto + 370 -96 385 -74 393 -44 curveto + 397 -26 400 10 399 67 curveto + 361 22 313 0 256 0 curveto + 185 0 130 25 90 77 curveto + 52 128 32 190 32 262 curveto + 32 311 41 357 59 399 curveto + 77 440 103 473 137 496 curveto + 170 519 210 530 256 530 curveto + 317 530 368 505 408 456 curveto + 408 518 lineto + 489 518 lineto + 489 70 lineto + 489 -10 481 -67 464 -101 curveto + 448 -134 422 -161 386 -180 curveto + 351 -200 307 -210 254 -210 curveto + 193 -210 143 -196 104 -168 curveto + 67 -140 48 -99 49 -42 curveto + closepath + 122 268 moveto + 122 200 136 151 163 119 curveto + 189 88 224 72 264 72 curveto + 305 72 338 88 366 119 curveto + 393 150 407 199 407 265 curveto + 407 329 393 376 365 409 curveto + 337 441 303 457 263 457 curveto + 224 457 191 441 163 410 curveto + 136 378 122 331 122 268 curveto + closepath + fill + } bind def + /glyph11 { + 556 0 65 0 488 715 setcachedevice + 65 0 moveto + 65 715 lineto + 153 715 lineto + 153 458 lineto + 194 506 246 530 309 530 curveto + 347 530 380 522 409 507 curveto + 437 492 458 471 470 444 curveto + 482 418 488 379 488 328 curveto + 488 0 lineto + 400 0 lineto + 400 328 lineto + 400 372 391 404 372 424 curveto + 353 444 326 454 291 454 curveto + 265 454 240 448 217 434 curveto + 194 421 178 402 168 379 curveto + 159 356 153 324 153 283 curveto + 153 0 lineto + 65 0 lineto + closepath + fill + } bind def + /glyph12 { + 277 0 17 -6 270 699 setcachedevice + 257 78 moveto + 270 0 lineto + 246 -3 224 -6 204 -6 curveto + 172 -6 147 -1 129 8 curveto + 112 18 100 31 92 48 curveto + 85 64 82 99 82 151 curveto + 82 450 lineto + 17 450 lineto + 17 518 lineto + 82 518 lineto + 82 646 lineto + 169 699 lineto + 169 518 lineto + 257 518 lineto + 257 450 lineto + 169 450 lineto + 169 146 lineto + 169 122 170 105 174 98 curveto + 177 91 182 85 189 81 curveto + 196 77 206 75 219 75 curveto + 229 75 241 76 257 78 curveto + closepath + fill + } bind def + end +/BuildGlyph { + exch /CharProcs get exch + 2 copy known not + {pop /.notdef} if + get exec +} bind def +/BuildChar { + 1 index /Encoding get exch get + 1 index /BuildGlyph get exec +} bind def +currentdict end +(ArialMTFID10HGSet1) cvn exch definefont pop +%%EndResource +%%DocumentSuppliedResources: font ArialMTFID10HGSet1 +[{ +%%BeginFeature: *PageSize A4 +<</PageSize [595 842] /ImagingBBox null>> setpagedevice +%%EndFeature +} stopped cleartomark +%%EndSetup +%%Page: 1 1 +%%PageOrientation: Portrait +%%PageBoundingBox: 18 18 577 824 +%%BeginPageSetup +% +%%EndPageSetup +gsave +[0.24 0 0 -0.24 18 824] concat +gsave +grestore +gsave +readpath +V00EC00ECA003CE07D900A00BC~ +closepath clip newpath +grestore +gsave +readpath +V00EC00ECA003CE07D900A00BC~ +closepath clip newpath +1174 280 moveto +0 0 0 setrgbcolor +(ArialMTFID10HGSet1) cvn findfont 42 -42 matrix scale makefont setfont +<536865657431> +[28 23 23 23 12 0] +xshow +grestore +gsave +readpath +V00EC00ECA003CE07D900A00BC~ +closepath clip newpath +grestore +gsave +readpath +V00EC0C8CA003CE07D900A00BC~ +closepath clip newpath +grestore +gsave +readpath +V00EC0C8CA003CE07D900A00BC~ +closepath clip newpath +1174 3256 moveto +0 0 0 setrgbcolor +(ArialMTFID10HGSet1) cvn findfont 42 -42 matrix scale makefont setfont +<5061676520> +[28 23 23 23 0] +xshow +1283 3256 moveto +<31> +show +grestore +gsave +readpath +V00EC0C8CA003CE07D900A00BC~ +closepath clip newpath +grestore +gsave +568 782 moveto +0 0 0 setrgbcolor +(ArialMTFID10HGSet1) cvn findfont 367 -367 matrix scale makefont setfont +<30> +show +781 782 moveto +<3A> +show +1050 782 moveto +<3030> +[204 0] +xshow +1466 782 moveto +<3A> +show +1735 782 moveto +<3133> +[204 0] +xshow +grestore grestore +showpage +%%PageTrailer + +%%Trailer +%%BoundingBox: 0 0 595 842 +%%Orientation: Portrait +%%Pages: 1 +%%EOF diff --git a/testgraphical/references/unxlngi/singletest/eis-test.odt.pdf b/testgraphical/references/unxlngi/singletest/eis-test.odt.pdf Binary files differnew file mode 100644 index 000000000000..cf48e3d3df14 --- /dev/null +++ b/testgraphical/references/unxlngi/singletest/eis-test.odt.pdf diff --git a/testgraphical/references/unxlngi/singletest/eis-test.odt.ps b/testgraphical/references/unxlngi/singletest/eis-test.odt.ps new file mode 100644 index 000000000000..456905de90b2 --- /dev/null +++ b/testgraphical/references/unxlngi/singletest/eis-test.odt.ps @@ -0,0 +1,565 @@ +%!PS-Adobe-3.0 +%%BoundingBox: (atend) +%%Creator: (StarOffice 9) +%%For: (ll93751) +%%CreationDate: (Fri Mar 5 11:50:06 2010) +%%Title: (eis-test) +%%LanguageLevel: 2 +%%DocumentData: Clean7Bit +%%Pages: (atend) +%%Orientation: (atend) +%%PageOrder: Ascend +%%EndComments +%%BeginProlog +%%BeginResource: procset PSPrint-Prolog 1.0 0 +/ISO1252Encoding [ +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle +/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash +/zero /one /two /three /four /five /six /seven +/eight /nine /colon /semicolon /less /equal /greater /question +/at /A /B /C /D /E /F /G +/H /I /J /K /L /M /N /O +/P /Q /R /S /T /U /V /W +/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore +/grave /a /b /c /d /e /f /g +/h /i /j /k /l /m /n /o +/p /q /r /s /t /u /v /w +/x /y /z /braceleft /bar /braceright /asciitilde /unused +/Euro /unused /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl +/circumflex /perthousand /Scaron /guilsinglleft /OE /unused /Zcaron /unused +/unused /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash +/tilde /trademark /scaron /guilsinglright /oe /unused /zcaron /Ydieresis +/space /exclamdown /cent /sterling /currency /yen /brokenbar /section +/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron +/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered +/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown +/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis +/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply +/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls +/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla +/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis +/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide +/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] def + +/psp_definefont { exch dup findfont dup length dict begin { 1 index /FID ne +{ def } { pop pop } ifelse } forall /Encoding 3 -1 roll def +currentdict end exch pop definefont pop } def + +/pathdict dup 8 dict def load begin +/rcmd { { currentfile 1 string readstring pop 0 get dup 32 gt { exit } +{ pop } ifelse } loop dup 126 eq { pop exit } if 65 sub dup 16#3 and 1 +add exch dup 16#C and -2 bitshift 16#3 and 1 add exch 16#10 and 16#10 +eq 3 1 roll exch } def +/rhex { dup 1 sub exch currentfile exch string readhexstring pop dup 0 +get dup 16#80 and 16#80 eq dup 3 1 roll { 16#7f and } if 2 index 0 3 +-1 roll put 3 1 roll 0 0 1 5 -1 roll { 2 index exch get add 256 mul } +for 256 div exch pop exch { neg } if } def +/xcmd { rcmd exch rhex exch rhex exch 5 -1 roll add exch 4 -1 roll add +1 index 1 index 5 -1 roll { moveto } { lineto } ifelse } def end +/readpath { 0 0 pathdict begin { xcmd } loop end pop pop } def + +systemdict /languagelevel known not { +/xshow { exch dup length 0 1 3 -1 roll 1 sub { dup 3 index exch get +exch 2 index exch get 1 string dup 0 4 -1 roll put currentpoint 3 -1 +roll show moveto 0 rmoveto } for pop pop } def +/rectangle { 4 -2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 +rlineto closepath } def +/rectfill { rectangle fill } def +/rectstroke { rectangle stroke } def } if +/bshow { currentlinewidth 3 1 roll currentpoint 3 index show moveto +setlinewidth false charpath stroke setlinewidth } def +/bxshow { currentlinewidth 4 1 roll setlinewidth exch dup length 1 sub +0 1 3 -1 roll { 1 string 2 index 2 index get 1 index exch 0 exch put dup +currentpoint 3 -1 roll show moveto currentpoint 3 -1 roll false charpath +stroke moveto 2 index exch get 0 rmoveto } for pop pop setlinewidth } def + +/psp_lzwfilter { currentfile /ASCII85Decode filter /LZWDecode filter } def +/psp_ascii85filter { currentfile /ASCII85Decode filter } def +/psp_lzwstring { psp_lzwfilter 1024 string readstring } def +/psp_ascii85string { psp_ascii85filter 1024 string readstring } def +/psp_imagedict { +/psp_bitspercomponent { 3 eq { 1 }{ 8 } ifelse } def +/psp_decodearray { [ [0 1 0 1 0 1] [0 255] [0 1] [0 255] ] exch get } +def 7 dict dup +/ImageType 1 put dup +/Width 7 -1 roll put dup +/Height 5 index put dup +/BitsPerComponent 4 index psp_bitspercomponent put dup +/Decode 5 -1 roll psp_decodearray put dup +/ImageMatrix [1 0 0 1 0 0] dup 5 8 -1 roll put put dup +/DataSource 4 -1 roll 1 eq { psp_lzwfilter } { psp_ascii85filter } ifelse put +} def +%%EndResource +%%EndProlog +%%BeginSetup +% +%%BeginResource: font TimesNewRomanPSMTFID26HGSet1 +%!PS-AdobeFont-1.0-2.53740 +% Creator: SunTypeTools-TT 1.0 gelf +% Original font name: TimesNewRomanPSMT +30 dict begin +/PaintType 0 def +/FontType 3 def +/StrokeWidth 0 def +/FontName (TimesNewRomanPSMTFID26HGSet1) cvn def +/XUID [103 0 0 16#2F10B8E9 9 16#7048BAB3 16#9CA4D966] def +/FontMatrix [.001 0 0 .001 0 0] def +/FontBBox [-568 -306 2028 1006] def +/Encoding 256 array def + 0 1 255 {Encoding exch /.notdef put} for + Encoding 0 /glyph0 put + Encoding 45 /glyph1 put + Encoding 69 /glyph2 put + Encoding 73 /glyph3 put + Encoding 83 /glyph4 put + Encoding 84 /glyph5 put + Encoding 101 /glyph6 put + Encoding 115 /glyph7 put + Encoding 116 /glyph8 put +/CharProcs 10 dict def + CharProcs begin + /.notdef {} def + /glyph0 { + 777 0 125 0 625 625 setcachedevice + 125 0 moveto + 125 625 lineto + 625 625 lineto + 625 0 lineto + 125 0 lineto + closepath + 140 15 moveto + 609 15 lineto + 609 609 lineto + 140 609 lineto + 140 15 lineto + closepath + fill + } bind def + /glyph1 { + 333 0 40 187 292 261 setcachedevice + 40 261 moveto + 292 261 lineto + 292 187 lineto + 40 187 lineto + 40 261 lineto + closepath + fill + } bind def + /glyph2 { + 610 0 20 0 587 662 setcachedevice + 208 625 moveto + 208 364 lineto + 354 364 lineto + 392 364 417 370 430 381 curveto + 447 396 456 422 458 460 curveto + 476 460 lineto + 476 229 lineto + 458 229 lineto + 454 262 449 282 444 291 curveto + 439 303 429 312 416 318 curveto + 402 325 382 328 354 328 curveto + 208 328 lineto + 208 110 lineto + 208 81 210 63 212 57 curveto + 215 50 220 45 226 41 curveto + 232 38 245 36 263 36 curveto + 375 36 lineto + 413 36 440 38 457 43 curveto + 474 49 490 59 506 74 curveto + 526 94 547 125 568 166 curveto + 587 166 lineto + 530 0 lineto + 20 0 lineto + 20 18 lineto + 43 18 lineto + 59 18 74 21 88 29 curveto + 98 34 105 42 109 52 curveto + 113 62 115 84 115 116 curveto + 115 546 lineto + 115 588 111 614 102 624 curveto + 91 637 71 644 43 644 curveto + 20 644 lineto + 20 662 lineto + 530 662 lineto + 538 517 lineto + 519 517 lineto + 512 551 504 575 496 588 curveto + 488 602 476 611 459 618 curveto + 446 623 423 625 390 625 curveto + 208 625 lineto + closepath + fill + } bind def + /glyph3 { + 333 0 24 0 308 662 setcachedevice + 308 18 moveto + 308 0 lineto + 24 0 lineto + 24 18 lineto + 48 18 lineto + 75 18 95 25 107 41 curveto + 115 52 119 77 119 117 curveto + 119 544 lineto + 119 578 117 600 113 611 curveto + 110 619 103 626 93 632 curveto + 79 640 64 644 48 644 curveto + 24 644 lineto + 24 662 lineto + 308 662 lineto + 308 644 lineto + 284 644 lineto + 257 644 238 636 225 620 curveto + 217 609 213 584 213 544 curveto + 213 117 lineto + 213 83 215 62 219 50 curveto + 223 42 229 36 240 29 curveto + 254 22 269 18 284 18 curveto + 308 18 lineto + closepath + fill + } bind def + /glyph4 { + 556 0 62 -15 502 677 setcachedevice + 458 677 moveto + 458 448 lineto + 440 448 lineto + 435 492 424 527 409 553 curveto + 394 579 372 600 344 615 curveto + 316 630 287 638 257 638 curveto + 223 638 195 628 173 607 curveto + 151 586 140 563 140 536 curveto + 140 516 146 498 161 481 curveto + 181 457 229 424 305 383 curveto + 367 351 409 325 432 307 curveto + 454 290 472 269 484 244 curveto + 496 220 502 195 502 168 curveto + 502 119 483 76 444 39 curveto + 405 3 355 -15 293 -15 curveto + 274 -15 256 -13 239 -10 curveto + 229 -9 208 -2 177 7 curveto + 145 17 125 22 116 22 curveto + 108 22 102 20 97 15 curveto + 93 10 89 0 86 -15 curveto + 68 -15 lineto + 68 211 lineto + 86 211 lineto + 95 164 106 129 121 105 curveto + 135 82 157 62 187 46 curveto + 216 31 248 22 283 22 curveto + 324 22 356 33 380 55 curveto + 403 76 415 102 415 131 curveto + 415 147 411 164 402 180 curveto + 393 197 379 212 360 227 curveto + 348 236 313 257 256 289 curveto + 200 321 159 346 135 365 curveto + 111 384 93 404 81 427 curveto + 68 450 62 475 62 502 curveto + 62 550 80 591 117 625 curveto + 153 660 200 677 256 677 curveto + 291 677 328 668 368 651 curveto + 386 643 399 639 406 639 curveto + 415 639 422 641 427 646 curveto + 433 651 437 662 440 677 curveto + 458 677 lineto + closepath + fill + } bind def + /glyph5 { + 610 0 30 0 585 662 setcachedevice + 578 662 moveto + 585 506 lineto + 567 506 lineto + 563 534 559 553 552 565 curveto + 542 584 529 598 512 607 curveto + 496 616 474 620 446 620 curveto + 353 620 lineto + 353 114 lineto + 353 74 357 48 366 38 curveto + 378 25 397 18 423 18 curveto + 446 18 lineto + 446 0 lineto + 165 0 lineto + 165 18 lineto + 188 18 lineto + 216 18 236 26 248 43 curveto + 255 53 259 77 259 114 curveto + 259 620 lineto + 179 620 lineto + 148 620 126 618 113 613 curveto + 97 607 82 596 70 578 curveto + 58 561 51 537 48 506 curveto + 30 506 lineto + 38 662 lineto + 578 662 lineto + closepath + fill + } bind def + /glyph6 { + 443 0 37 -13 415 460 setcachedevice + 106 278 moveto + 106 212 122 160 154 122 curveto + 187 84 225 65 269 65 curveto + 298 65 324 74 346 90 curveto + 367 106 385 133 400 172 curveto + 415 163 lineto + 409 118 389 78 355 41 curveto + 323 4 282 -13 232 -13 curveto + 179 -13 133 7 94 49 curveto + 56 90 37 146 37 217 curveto + 37 294 56 354 96 396 curveto + 135 439 184 460 243 460 curveto + 293 460 334 444 367 411 curveto + 399 378 415 334 415 278 curveto + 106 278 lineto + closepath + 106 307 moveto + 313 307 lineto + 312 335 308 355 303 367 curveto + 295 385 283 400 267 410 curveto + 250 420 234 426 216 426 curveto + 189 426 165 416 144 395 curveto + 123 374 110 344 106 307 curveto + closepath + fill + } bind def + /glyph7 { + 389 0 48 -13 354 460 setcachedevice + 320 460 moveto + 320 308 lineto + 304 308 lineto + 291 355 276 388 256 405 curveto + 237 422 212 431 182 431 curveto + 160 431 141 425 127 413 curveto + 113 401 106 388 106 373 curveto + 106 355 111 339 122 326 curveto + 132 313 152 299 183 284 curveto + 254 249 lineto + 320 217 354 175 354 122 curveto + 354 81 338 48 308 23 curveto + 277 0 243 -13 204 -13 curveto + 177 -13 146 -8 110 0 curveto + 100 4 91 5 84 5 curveto + 77 5 71 1 66 -6 curveto + 50 -6 lineto + 50 152 lineto + 66 152 lineto + 76 107 93 73 119 49 curveto + 145 26 173 15 205 15 curveto + 228 15 246 21 260 35 curveto + 274 48 281 63 281 82 curveto + 281 104 274 124 258 139 curveto + 242 154 210 173 163 197 curveto + 116 220 85 241 70 260 curveto + 56 279 48 302 48 331 curveto + 48 367 61 398 86 423 curveto + 111 448 144 460 184 460 curveto + 202 460 223 457 248 449 curveto + 265 444 276 441 281 441 curveto + 287 441 291 442 293 445 curveto + 296 447 300 452 304 460 curveto + 320 460 lineto + closepath + fill + } bind def + /glyph8 { + 277 0 9 -7 279 594 setcachedevice + 161 594 moveto + 161 447 lineto + 265 447 lineto + 265 413 lineto + 161 413 lineto + 161 123 lineto + 161 94 165 74 173 64 curveto + 182 54 192 49 205 49 curveto + 216 49 226 52 236 59 curveto + 247 65 254 75 260 88 curveto + 279 88 lineto + 268 57 251 33 230 17 curveto + 210 0 188 -7 166 -7 curveto + 151 -7 137 -2 122 5 curveto + 108 13 98 25 90 41 curveto + 84 56 80 80 80 112 curveto + 80 413 lineto + 9 413 lineto + 9 429 lineto + 27 436 45 448 64 465 curveto + 83 482 100 502 114 526 curveto + 122 538 132 561 145 594 curveto + 161 594 lineto + closepath + fill + } bind def + end +/BuildGlyph { + exch /CharProcs get exch + 2 copy known not + {pop /.notdef} if + get exec +} bind def +/BuildChar { + 1 index /Encoding get exch get + 1 index /BuildGlyph get exec +} bind def +currentdict end +(TimesNewRomanPSMTFID26HGSet1) cvn exch definefont pop +%%EndResource +%%DocumentSuppliedResources: font TimesNewRomanPSMTFID26HGSet1 +%%EndSetup +%%Page: 1 1 +%%PageOrientation: Portrait +%%PageBoundingBox: 18 18 577 824 +%%BeginPageSetup +% +[{ +%%BeginFeature: *PageSize A4 +<</PageSize [595 842] /ImagingBBox null>> setpagedevice +%%EndFeature +} stopped cleartomark +%%EndPageSetup +gsave +[0.24 0 0 -0.24 18 824] concat +gsave +1122 184 moveto +0 0 0 setrgbcolor +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 25 -25 matrix scale makefont setfont +<4549532D54657374> +[15 8 14 9 15 11 10 0] +xshow +1114 215 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 29 -29 matrix scale makefont setfont +<4549532D54657374> +[17 10 16 10 18 13 11 0] +xshow +1107 251 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 33 -33 matrix scale makefont setfont +<4549532D54657374> +[20 11 19 11 20 15 13 0] +xshow +1100 291 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 38 -38 matrix scale makefont setfont +<4549532D54657374> +[23 13 20 13 22 17 15 0] +xshow +1092 337 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 42 -42 matrix scale makefont setfont +<4549532D54657374> +[26 14 23 14 25 19 16 0] +xshow +1088 385 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 44 -44 matrix scale makefont setfont +<4549532D54657374> +[27 14 24 15 27 19 17 0] +xshow +1085 435 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 46 -46 matrix scale makefont setfont +<4549532D54657374> +[28 15 26 15 28 20 18 0] +xshow +1077 490 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 50 -50 matrix scale makefont setfont +<4549532D54657374> +[30 17 28 16 31 22 19 0] +xshow +1070 549 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 54 -54 matrix scale makefont setfont +<4549532D54657374> +[33 18 30 19 33 24 21 0] +xshow +1063 613 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 58 -58 matrix scale makefont setfont +<4549532D54657374> +[35 19 33 20 35 26 23 0] +xshow +1055 681 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 63 -63 matrix scale makefont setfont +<4549532D54657374> +[37 21 35 21 38 28 24 0] +xshow +1048 754 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 67 -67 matrix scale makefont setfont +<4549532D54657374> +[41 22 37 22 41 30 26 0] +xshow +1033 835 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 75 -75 matrix scale makefont setfont +<4549532D54657374> +[46 25 42 25 46 33 29 0] +xshow +1018 926 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 83 -83 matrix scale makefont setfont +<4549532D54657374> +[51 28 46 28 51 37 32 0] +xshow +1003 1025 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 92 -92 matrix scale makefont setfont +<4549532D54657374> +[56 30 51 31 56 40 36 0] +xshow +1003 1127 moveto +<4549532D54657374> +[56 30 51 31 56 40 36 0] +xshow +989 1236 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 100 -100 matrix scale makefont setfont +<4549532D54657374> +[61 33 56 33 61 44 39 0] +xshow +974 1354 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 108 -108 matrix scale makefont setfont +<4549532D54657374> +[66 36 60 36 66 49 41 0] +xshow +959 1481 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 117 -117 matrix scale makefont setfont +<4549532D54657374> +[71 39 65 39 71 52 45 0] +xshow +929 1625 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 133 -133 matrix scale makefont setfont +<4549532D54657374> +[81 44 74 45 81 59 52 0] +xshow +900 1788 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 150 -150 matrix scale makefont setfont +<4549532D54657374> +[92 50 83 50 92 66 58 0] +xshow +870 1969 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 167 -167 matrix scale makefont setfont +<4549532D54657374> +[102 56 93 55 102 73 65 0] +xshow +840 2168 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 183 -183 matrix scale makefont setfont +<4549532D54657374> +[112 61 102 61 112 81 71 0] +xshow +811 2386 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 200 -200 matrix scale makefont setfont +<4549532D54657374> +[122 67 111 67 122 88 78 0] +xshow +766 2630 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 225 -225 matrix scale makefont setfont +<4549532D54657374> +[137 75 125 75 137 100 88 0] +xshow +722 2901 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 250 -250 matrix scale makefont setfont +<4549532D54657374> +[153 83 139 84 152 112 96 0] +xshow +grestore grestore +showpage +%%PageTrailer + +%%Trailer +%%BoundingBox: 0 0 595 842 +%%Orientation: Portrait +%%Pages: 1 +%%EOF diff --git a/testgraphical/references/unxlngi/singletest/tolerance.ini_ b/testgraphical/references/unxlngi/singletest/tolerance.ini_ new file mode 100644 index 000000000000..ba027e21452a --- /dev/null +++ b/testgraphical/references/unxlngi/singletest/tolerance.ini_ @@ -0,0 +1,4 @@ +# This is the tolerance we will accept if there are problems +# [eis-test.odt.ps] +# accept=111 +# page1=111 diff --git a/testgraphical/references/unxsoli/singletest/eis-test.odt.pdf b/testgraphical/references/unxsoli/singletest/eis-test.odt.pdf Binary files differnew file mode 100644 index 000000000000..96c922f4aa63 --- /dev/null +++ b/testgraphical/references/unxsoli/singletest/eis-test.odt.pdf diff --git a/testgraphical/references/wntmsci/demo/CurrentTime.ods.pdf b/testgraphical/references/wntmsci/demo/CurrentTime.ods.pdf Binary files differnew file mode 100644 index 000000000000..a753c03708c7 --- /dev/null +++ b/testgraphical/references/wntmsci/demo/CurrentTime.ods.pdf diff --git a/testgraphical/references/wntmsci/demo/CurrentTime.ods.ps b/testgraphical/references/wntmsci/demo/CurrentTime.ods.ps new file mode 100644 index 000000000000..36b469ce81a3 --- /dev/null +++ b/testgraphical/references/wntmsci/demo/CurrentTime.ods.ps @@ -0,0 +1,499 @@ +%!PS-Adobe-3.0 +%%Title: CurrentTime +%%Creator: PScript5.dll Version 5.2.2 +%%CreationDate: 5/17/2010 15:0:3 +%%For: ll93751 +%%BoundingBox: (atend) +%%Pages: (atend) +%%Orientation: Portrait +%%PageOrder: Special +%%DocumentNeededResources: (atend) +%%DocumentSuppliedResources: (atend) +%%DocumentData: Clean7Bit +%%TargetDevice: (Generic Printer For MSWord Testing) (1) 1 +%%LanguageLevel: 2 +%%EndComments + +%%BeginDefaults +%%PageBoundingBox: 18 18 577 824 +%%ViewingOrientation: 1 0 0 1 +%%EndDefaults + + +%%BeginProlog +%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0 +/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false +setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype +ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch +def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0 +rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def +/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def +typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72 +def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp +exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def +/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype +{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint} +readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop +(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def +/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- ) +tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup +xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint +tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck +{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(]) +tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup +rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint} +forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier +/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin +$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0 +ne{grestoreall}if errorname(VMerror)ne{showpage}if initgraphics courier setfont +lmargin 720 moveto errorname(VMerror)eq{userdict/ehsave known{clear userdict +/ehsave get restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}{ +(ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt +$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==} +repeat}if}ifelse systemdict/showpage get exec(%%[ Error: )print errorname +=print(; OffendingCommand: )print/command load =print( ]%%)= flush}if end end +end}dup 0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking +where{pop/setpacking where{pop oldpack setpacking}if}if +%%EndResource +userdict /Pscript_WinNT_Incr 230 dict dup begin put +%%BeginResource: file Pscript_FatalError 5.0 0 +userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup +length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding +{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end +/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div +cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end +%%EndResource +userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[ +(Dieser Druckauftrag erfordert mehr Speicher, als auf diesem Drucker vorhanden ist. ) +100 500 +(Versuchen Sie es mit einer oder mehreren der folgenden Methoden und drucken Sie dann erneut:) +100 485(Whlen Sie fr das Ausgabeformat die Option "Optimale Portierung".)115 +470 +(Stellen Sie sicher, da auf der Registerkarte "Gerteeinstellungen" die Angabe fr "Verfgbarer Postscript-Speicher" korrekt ist.) +115 455(Reduzieren Sie die Anzahl der im Dokument verwendeten Schriftarten. ) +115 440(Drucken Sie das Dokument in verschiedenen Teilstcken. )115 425 12 +/Times-Roman showpage(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf} +if}bind def end version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg +get def}ifelse +105000 VM? +%%BeginResource: file Pscript_Win_Basic 5.0 0 +/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^ +/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/- +/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true , +d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C +/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M +/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d +/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage +, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop +languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow , +d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld +/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix +currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit +counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b +/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~ +d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put +/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq +{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U ` +/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped +{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat} +{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~ +itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5 +ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform +nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ - +neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0 +- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool +2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e +{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b +/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont +{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1 +dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d +E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1 +^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2 +16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !} +bind d +%%EndResource +%%BeginResource: file Pscript_Win_Utils_L2 5.0 0 +/rf/rectfill , d/fx{1 1 dtransform @ 0 ge{1 sub 0.5}{1 add -0.5}? 3 -1 $ @ 0 ge +{1 sub 0.5}{1 add -0.5}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $ +snap + +S fx rf}b/rs/rectstroke , d/rc/rectclip , d/UtilsInit{currentglobal{F +setglobal}if}b/scol{! setcolor}b/colspA/DeviceGray d/colspABC/DeviceRGB d +/colspRefresh{colspABC setcolorspace}b/SetColSpace{colspABC setcolorspace}b +/resourcestatus where{!/ColorRendering/ProcSet resourcestatus{! ! T}{F}?}{F}? +not{/ColorRendering<</GetHalftoneName{currenthalftone @/HalftoneName known{ +/HalftoneName get}{!/none}?}bn/GetPageDeviceName{currentpagedevice @ +/PageDeviceName known{/PageDeviceName get @ null eq{!/none}if}{!/none}?}bn +/GetSubstituteCRD{!/DefaultColorRendering/ColorRendering resourcestatus{! ! +/DefaultColorRendering}{(DefaultColorRendering*){cvn exit}127 string +/ColorRendering resourceforall}?}bn>>/defineresource where{!/ProcSet +defineresource !}{! !}?}if/buildcrdname{/ColorRendering/ProcSet findresource ` +mark GetHalftoneName @ type @/nametype ne ~/stringtype ne and{!/none}if(.) +GetPageDeviceName @ type @/nametype ne ~/stringtype ne and{!/none}if(.)5 ^ 0 5 +-1 1{^ length add}for string 6 1 $ 5 ^ 5{~ 1 ^ cvs length 1 ^ length 1 ^ sub +getinterval}repeat ! cvn 3 1 $ ! ! E}b/definecolorrendering{~ buildcrdname ~ +/ColorRendering defineresource !}b/findcolorrendering where{!}{ +/findcolorrendering{buildcrdname @/ColorRendering resourcestatus{! ! T}{ +/ColorRendering/ProcSet findresource ` GetSubstituteCRD E F}?}b}? +/selectcolorrendering{findcolorrendering !/ColorRendering findresource +setcolorrendering}b/G2UBegin{findresource/FontInfo get/GlyphNames2Unicode get +`}bind d/G2CCBegin{findresource/FontInfo get/GlyphNames2HostCode get `}bind d +/G2UEnd{E}bind d/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo{ +/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d +/AddFontInfoEnd{E d}bind d/T0AddCFFMtx2{/CIDFont findresource/Metrics2 get ` d +E}bind d +%%EndResource +end +%%EndProlog + +%%BeginSetup +statusdict begin (%%[ ProductName: ) print product print ( ]%%)= flush end +[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec +featurebegin{ +%%BeginNonPPDFeature: JobTimeout 0 +0 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/JobTimeout 4 -1 roll put setuserparams}{statusdict/setjobtimeout get exec}ifelse +%%EndNonPPDFeature +}featurecleanup + +featurebegin{ +%%BeginNonPPDFeature: WaitTimeout 300 +300 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse +%%EndNonPPDFeature +}featurecleanup + +featurebegin{ +%%BeginFeature: *InputSlot ManualFeed + +<< /ManualFeed true /Policies << /ManualFeed 1 >> >> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Duplex None + +<</Duplex false /Tumble false + /Policies << /Duplex 1 /Tumble 1 >> +>> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *PageRegion A4 +<</PageSize [595 842] /ImagingBBox null>> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Resolution 1200x1200dpi + + 1 dict dup /HWResolution [1200 1200] put setpagedevice +%%EndFeature +}featurecleanup +1 setlinecap 1 setlinejoin +/mysetup [ 72 1200 V 0 0 -72 1200 V 18 824.0003 ] def +%%EndSetup + +userdict begin /ehsave save def end +%%Page: 1 1 +%%PageBoundingBox: 18 18 577 824 +%%EndPageComments +%%BeginPageSetup +/DeviceRGB dup setcolorspace /colspABC exch def +mysetup concat colspRefresh +%%EndPageSetup + +0 0 0 1 scol 22500 VM? +11 dict begin +/FontName /TTEC2o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1ae15c03974a1a9b3c172d5d01da698bb3e9bd8fb187 +15ad84bc85cd145093e29e1b226d167407e1f00a6529c34100fe35097c0d +b5af1eda9d93c4fbe9bd86433be0237415462af5d09911e8c9f42535e5d2 +2dd429d16a06629077406afc7b7c534dc9e9e045cc02be968fa94e480676 +cb53f625f5f575a27ab6d08d5c839bcfee5628e5ccd4d4605b7fec3a76bb +28738163f3b82fd887dfecdc22fecb045a567be6d3b5a147b633e25bed18 +40c3e8e2f2258801243cf18236f06a8992b5a43fdca766d185ec61f2b174 +d769605817b24a47643e089d8814e415ab639130ea66e36890bd761d0a8f +5d374c4904ff82dfe0f21c18dee922bc8376caeba56e25b6c9ddbd670491 +72036f023f43bf7830df38d0c36ef5d7184a77d3822cb988db6213ddd19d +879129e1b8f3a8dafd1d138bec6d1ded9fbbb5b4294072df1f12a135929c +9a45aea5ebc051f8d6514ccf32b2acbd84dfcbcce5469c945c93be1929e7 +f9fca6965e31a4328311b483ac44acb3daed602b089ab4fe0f74705bb07b +21067988ba7246b0dd96c23046cbbc2414fdb62ca2e102c041d24e977418 +1bd25e1bd6f500cad2b24572a49f549bf2e59a693759d0acb7c42c2caaa6 +f940204c5d06b53cc4847dac692da2e938bf86283692a51a631279087ecd +19b56062b53f44ca8d3025a1c25c7aed9b406e9d9fed5a13ff540359abc6 +0a0a444273d3bf793cb00c3158c1050a0a026d200bf4d34f0237233c5b80 +ee79e7cad72f335228314e3461cd05ef2f3826bc1c5c43a92b0551e00b19 +ebeea73ef66820f36ee61ad9be6012c65138a13ef4cd7745cb966af72d76 +d42781dc5aaf5f69753ae6bd324bf42ec9cee010ff5f487dfaf1eea51f2f +43488c9a9115ceda9b959465b3ae6f1e94ede9ce7867344484db692e5423 +962fa13ffb0073691e3a193f217e588ec12fcad5e3c7a2da41073813b4e4 +99a784d26534294d71d117a87c98a814df39bf6fc01fac1bf8f73960775b +0a4ed51d90d942c14585b424223f30c4f93ee07bd3c05dd7f36271b10cc0 +914af6e94e4451befc31d1557802dad903b71eb5189c18fadd8ba9ce4ff0 +c2d750518bfca7c652b5c5d314a35fefb8e62e62632d0168c97718779689 +97abcc8e922914102cc46e07874511d23c143f7c2440a81b012532995272 +f01ae7b4d8f66ffac047ba7ddcf4b156ce29e19491ceb0af30494c5755e6 +16eb123ec1f237fa5d36c4a03de9e90000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTEC2o00 findfont /Encoding get +dup 1 /S put +dup 2 /h put +dup 3 /e put +dup 4 /t put +dup 5 /one put +pop +Pscript_WinNT_Incr begin +%%BeginResource: file Pscript_Text 5.0 0 +/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d +/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^ +length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets +{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{& +/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get} +if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{ +{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get +StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $ +! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy +put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM +makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0 +Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N +/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT +{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d +/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict ` +/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d +/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont +Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1 +add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E +/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $ +FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255 +idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector +Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding +length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2 +add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs +putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^ +256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E +/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~ +definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix +makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ ! +findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2? +{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName +get undefinefont}forall undefinefont}b +%%EndResource +end reinitialize +F /F0 0 /0 F /TTEC2o00 mF +/F0SA7 F0 [167 0 0 -167 0 0 ] mFS +F0SA7 Ji +4696 1120 M <010203030405>[111 93 93 93 46 0]xS +3600 VM? + +currentfile eexec +9e67edc6b841305d5d10e5a53359c38b0291a4f57acae0c56237cee47bc1 +d85570b1414b43fc17ea6b4843d55ac9afa7067f1a7091b4594d913de276 +a8772313a65fcd26ba87b9a05d166b03e17f03277dd8efccb02a7d4c1be6 +177e723f7aa9e190ce43dd1df2bf2988559fa94bfa641911cece0e747ceb +9b660904152a628a244fd923b311f5c4a5fe7c546e8d37afebee19511e85 +7ff39e7ff6c4792d53badbc7a555b283f38f31e279752d4342dd5f00e99d +ba2152623e1e346ef7276b3265bc6cc3a37e315df96fd5d085e519b5cf03 +fb27cf9385ba7058ff6c83c880bff9c4fbd2947bdc5c671ae82a44177042 +f439578104f7c75f2ba09f3a578b522774bde2cbc6643d623a5e689df5bd +359ed5f335c5b979036b99e788351b92cb83205fff7dfc1b4880b7c6f468 +edd5346a15139d558c3bc6afd4767b4d9529a0b1aa4767bc65f3a158d720 +6b2b276cc6eb3b50ea5319f6a5b9f96114b77ee5ff8b0d84786036821196 +10d2ea5e2af2f62d8e94dfa5e9d87f303e6969e9121676a20da78c247202 +97cf246bcdca069951c2ca4294017dbf317ba60a54367a75dcb0c005394f +2e21d22fc8f1ca437c52566a26569f6f218d87831bbb59f9d7ce80d28c89 +c77c8ae2b608c786ebca7c5c5a7b7ded13c1007bc6484e8151dc558cb6f0 +6056b74666e6cdb8c0ccdc65044d55b68497ebec08ea9f2c661760595438 +8dfea6f0743c11811fd26f2837f954ef0a99db60eb9c3e1b523e0762deec +c717a44bfc75d4b55b7b8719218283ecd5e23ccbcc9bc1893cd9dda88922 +be1f24e77c46fbafd369868830f7ac384a338b2dde52ac79f83047febbb7 +a1adfd3f3ea13de8dbb63607beec48b0b5957be43431e98c34591c3ce646 +5c30ed78f1a8d521a4349671263c640e277d310adf33cae19cfdc350adff +14c02e0b73c1a80c0b97e5974cd751a144d34ca579b5cb81d8e0f230dbb8 +2d306f969dbd71108cc52e7338359ca95bc1873c1c91be7b51240fc14001 +98c8f64796e991eea99e27eba7bdac1f2296da2c6db2cdbcc4d7538af40d +5cd881a349dbc71725ab9bf815736c339b0f5aec8f6c4ca0438ecca51f39 +130895a4e7fd438813034129b8a838589b370000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTEC2o00 findfont /Encoding get +dup 6 /P put +dup 7 /a put +dup 8 /g put +dup 9 /space put +pop +4696 13024 M <0607080309>[111 93 93 93 0]xS +5132 13024 M <05>S +19800 VM? +11 dict begin +/FontName /TTBC013398o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1add2c77631f898ffcae76502bbe5e22d7ef71c602e1 +9e22c890817f47e70d08803467d31dd4454c7e898bf1e600f73ba7788118 +7a31575a7bde4b80b1052323a8cd8606039f631424bead9a04865f2b6ccd +563650769cf3b9f4ec66fa0b354b1389beaff83c6934509010d5c85f025f +31060982b13953fa166bd5a265f4594dd80728aad8dbc710567ddbed093f +27b08481959f39d5ea87844272e351c3b107807046866c6efdb34ab1a02a +4560b58fd36e23b92ffe3af9cc87a0bcbebea7877536640c59261a3a850a +0941a1da1349cafaf520ac0b488e6dd848ded092875c1ddfbb53986369d2 +ea38f05fc71a0f819904a116f9de8d4281e77df87763452fd42258656862 +4ee87f6acc7b7e1de1128cffce1168ba4f0f231290002f98b6bd2bc60a37 +f305d9515113ceba5d077871c967bffa3d810d8b4355895fdb320c155536 +880c517ea5384f01027eae42fb1a1cf3b4105a4bd7287b950000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTBC013398o00 findfont /Encoding get +dup 1 /one put +dup 2 /five put +pop +F /F1 0 /0 F /TTBC013398o00 mF +/F1S5BA F1 [1466 0 0 -1466 0 0 ] mFS +F1S5BA Ji +1459 3161 M <0102>[815 0]xS +900 VM? + +currentfile eexec +9e67edc6b841305af19a6e4bb2a230e3e9efc9b96f464cd2cec0584bfa5d +e6b6c8bf4fb2bca3ff5c4ffdcb930b9549cfaa6d954b63169b356002d4a2 +065b3dad6c77543f2f4c58aba309a5f2e2cec5372d5eb49ba5adffe6ec0d +ed20ee879de2476ee6f4099e560589a666b9194b6bf7f0128e1a3afd80ec +9f40a396884744c1962e90eba74a9cd4a32f9fdd0782f0c6b6d12f732bee +20b6ac0c3bfba90b08742c53ddc1970000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTBC013398o00 findfont /Encoding get +dup 3 /colon put +pop +3123 3161 M <03>S +900 VM? + +currentfile eexec +9e67edc6b841305af19a6e4bb2a230e3e9efc9b96f464cd2cec0584bfa5d +e6b6c8bf4fb2bca3ff5c4ffdcb930b9549cfaa6d954b63169b356002d4a2 +065b3dad6c77543f2f4c58abba975b6391782ae96f027086c2b7fc4d3f90 +351b67f8a2fc2116477655cf0dff5a6bf15f1a3d629270d6af26f69b32a3 +312831823f86f43a0ab84649de6044d445b8ed1fbd9a8f026fbac386a0e1 +c5428153a9d4e786021ed524ba1216a3b8ab60edfbf05959d5558b762ca6 +ffa65d882d930f795bc1903885698b5558100097185b7cacdbe4413bc735 +faa8d6a05f03b5bcb23f73372cbb5f7cd01ce3e3bb2e524201be263c6e0c +f04205a026405c90467d80e06d42e97c1af53a494a1c86c7a93c034ec9a1 +58c34d868fc499aa20961ab79c8fd94237c294a6d7569b8cddbab704dca3 +ab7466244b990000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTBC013398o00 findfont /Encoding get +dup 4 /zero put +pop +4201 3161 M <0404>[815 0]xS +5865 3161 M <03>S +900 VM? + +currentfile eexec +9e67edc6b841305af19a6e4bb2a230e3e9efc9b96f464cd2cec0584bfa5d +e6b6c8bf4fb2bca3ff5c4ffdcb930b9549cfaa6d954b63169b356002d4a2 +065b3dad6c77543f2f4c58abb474233ea80ce809e35265271e29a645609a +f19523b459da829c3beb337f4e916de7baa7dd40e381e60e1d68dd6dc672 +318ee6d51a4977d970db3ae073fa94a7f5afcd21e06e8476d782a2865dd3 +2a9c235bd5f3c5f1f327252a54d27bae21d8962686e2aa6912c72c946bed +83223cfc201da7c3f18870a82efce4ad7f1c996c4d99903969225ed21444 +37bc8415a6f4b6d44e30c3d0e47b6d6945d1536311137281dee93fc9a238 +a6036c912e79e0ebe6ecb3d20cd3093cccd00d504fa49f3c0efe04da2103 +3e167528183bdb7896175c77778fde8f0d0b65cb28281e8869747cde7f28 +94c91c302ba109d3ae45ff70f1999a40d8e9a33bd9ce6b8b22961db9c435 +a39d612dba6c4fcc51231f651c91bd0b0724b13d8d8e0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTBC013398o00 findfont /Encoding get +dup 5 /three put +pop +6943 3161 M <0405>[815 0]xS +LH +(%%[Page: 1]%%) = +%%PageTrailer + +%%Trailer +%%BoundingBox: 18 18 577 824 +%%DocumentNeededResources: +%%DocumentSuppliedResources: +%%+ procset Pscript_WinNT_ErrorHandler 5.0 0 +%%+ procset Pscript_FatalError 5.0 0 +%%+ procset Pscript_Win_Basic 5.0 0 +%%+ procset Pscript_Win_Utils_L2 5.0 0 +%%+ procset Pscript_Text 5.0 0 +Pscript_WinNT_Incr dup /terminate get exec +ehsave restore +%%Pages: 1 +(%%[LastPage]%%) = +%%EOF +
\ No newline at end of file diff --git a/testgraphical/references/wntmsci/singletest/eis-test.odt.pdf b/testgraphical/references/wntmsci/singletest/eis-test.odt.pdf Binary files differnew file mode 100644 index 000000000000..0654d52c11a8 --- /dev/null +++ b/testgraphical/references/wntmsci/singletest/eis-test.odt.pdf diff --git a/testgraphical/references/wntmsci/singletest/eis-test.odt.ps b/testgraphical/references/wntmsci/singletest/eis-test.odt.ps new file mode 100644 index 000000000000..968c7b3cbd44 --- /dev/null +++ b/testgraphical/references/wntmsci/singletest/eis-test.odt.ps @@ -0,0 +1,1984 @@ +%!PS-Adobe-3.0 +%%Title: eis-test +%%Creator: PScript5.dll Version 5.2.2 +%%CreationDate: 5/17/2010 13:9:19 +%%For: ll93751 +%%BoundingBox: (atend) +%%Pages: (atend) +%%Orientation: Portrait +%%PageOrder: Special +%%DocumentNeededResources: (atend) +%%DocumentSuppliedResources: (atend) +%%DocumentData: Clean7Bit +%%TargetDevice: (Generic Printer For MSWord Testing) (1) 1 +%%LanguageLevel: 2 +%%EndComments + +%%BeginDefaults +%%PageBoundingBox: 18 18 577 824 +%%ViewingOrientation: 1 0 0 1 +%%EndDefaults + + +%%BeginProlog +%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0 +/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false +setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype +ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch +def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0 +rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def +/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def +typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72 +def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp +exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def +/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype +{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint} +readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop +(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def +/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- ) +tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup +xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint +tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck +{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(]) +tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup +rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint} +forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier +/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin +$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0 +ne{grestoreall}if errorname(VMerror)ne{showpage}if initgraphics courier setfont +lmargin 720 moveto errorname(VMerror)eq{userdict/ehsave known{clear userdict +/ehsave get restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}{ +(ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt +$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==} +repeat}if}ifelse systemdict/showpage get exec(%%[ Error: )print errorname +=print(; OffendingCommand: )print/command load =print( ]%%)= flush}if end end +end}dup 0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking +where{pop/setpacking where{pop oldpack setpacking}if}if +%%EndResource +userdict /Pscript_WinNT_Incr 230 dict dup begin put +%%BeginResource: file Pscript_FatalError 5.0 0 +userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup +length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding +{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end +/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div +cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end +%%EndResource +userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[ +(Dieser Druckauftrag erfordert mehr Speicher, als auf diesem Drucker vorhanden ist. ) +100 500 +(Versuchen Sie es mit einer oder mehreren der folgenden Methoden und drucken Sie dann erneut:) +100 485(Whlen Sie fr das Ausgabeformat die Option "Optimale Portierung".)115 +470 +(Stellen Sie sicher, da auf der Registerkarte "Gerteeinstellungen" die Angabe fr "Verfgbarer Postscript-Speicher" korrekt ist.) +115 455(Reduzieren Sie die Anzahl der im Dokument verwendeten Schriftarten. ) +115 440(Drucken Sie das Dokument in verschiedenen Teilstcken. )115 425 12 +/Times-Roman showpage(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf} +if}bind def end version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg +get def}ifelse +105000 VM? +%%BeginResource: file Pscript_Win_Basic 5.0 0 +/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^ +/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/- +/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true , +d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C +/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M +/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d +/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage +, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop +languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow , +d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld +/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix +currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit +counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b +/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~ +d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put +/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq +{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U ` +/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped +{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat} +{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~ +itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5 +ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform +nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ - +neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0 +- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool +2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e +{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b +/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont +{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1 +dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d +E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1 +^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2 +16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !} +bind d +%%EndResource +%%BeginResource: file Pscript_Win_Utils_L2 5.0 0 +/rf/rectfill , d/fx{1 1 dtransform @ 0 ge{1 sub 0.5}{1 add -0.5}? 3 -1 $ @ 0 ge +{1 sub 0.5}{1 add -0.5}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $ +snap + +S fx rf}b/rs/rectstroke , d/rc/rectclip , d/UtilsInit{currentglobal{F +setglobal}if}b/scol{! setcolor}b/colspA/DeviceGray d/colspABC/DeviceRGB d +/colspRefresh{colspABC setcolorspace}b/SetColSpace{colspABC setcolorspace}b +/resourcestatus where{!/ColorRendering/ProcSet resourcestatus{! ! T}{F}?}{F}? +not{/ColorRendering<</GetHalftoneName{currenthalftone @/HalftoneName known{ +/HalftoneName get}{!/none}?}bn/GetPageDeviceName{currentpagedevice @ +/PageDeviceName known{/PageDeviceName get @ null eq{!/none}if}{!/none}?}bn +/GetSubstituteCRD{!/DefaultColorRendering/ColorRendering resourcestatus{! ! +/DefaultColorRendering}{(DefaultColorRendering*){cvn exit}127 string +/ColorRendering resourceforall}?}bn>>/defineresource where{!/ProcSet +defineresource !}{! !}?}if/buildcrdname{/ColorRendering/ProcSet findresource ` +mark GetHalftoneName @ type @/nametype ne ~/stringtype ne and{!/none}if(.) +GetPageDeviceName @ type @/nametype ne ~/stringtype ne and{!/none}if(.)5 ^ 0 5 +-1 1{^ length add}for string 6 1 $ 5 ^ 5{~ 1 ^ cvs length 1 ^ length 1 ^ sub +getinterval}repeat ! cvn 3 1 $ ! ! E}b/definecolorrendering{~ buildcrdname ~ +/ColorRendering defineresource !}b/findcolorrendering where{!}{ +/findcolorrendering{buildcrdname @/ColorRendering resourcestatus{! ! T}{ +/ColorRendering/ProcSet findresource ` GetSubstituteCRD E F}?}b}? +/selectcolorrendering{findcolorrendering !/ColorRendering findresource +setcolorrendering}b/G2UBegin{findresource/FontInfo get/GlyphNames2Unicode get +`}bind d/G2CCBegin{findresource/FontInfo get/GlyphNames2HostCode get `}bind d +/G2UEnd{E}bind d/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo{ +/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d +/AddFontInfoEnd{E d}bind d/T0AddCFFMtx2{/CIDFont findresource/Metrics2 get ` d +E}bind d +%%EndResource +end +%%EndProlog + +%%BeginSetup +statusdict begin (%%[ ProductName: ) print product print ( ]%%)= flush end +[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec +featurebegin{ +%%BeginNonPPDFeature: JobTimeout 0 +0 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/JobTimeout 4 -1 roll put setuserparams}{statusdict/setjobtimeout get exec}ifelse +%%EndNonPPDFeature +}featurecleanup + +featurebegin{ +%%BeginNonPPDFeature: WaitTimeout 300 +300 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse +%%EndNonPPDFeature +}featurecleanup + +featurebegin{ +%%BeginFeature: *InputSlot ManualFeed + +<< /ManualFeed true /Policies << /ManualFeed 1 >> >> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Duplex None + +<</Duplex false /Tumble false + /Policies << /Duplex 1 /Tumble 1 >> +>> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *PageRegion A4 +<</PageSize [595 842] /ImagingBBox null>> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Resolution 1200x1200dpi + + 1 dict dup /HWResolution [1200 1200] put setpagedevice +%%EndFeature +}featurecleanup +1 setlinecap 1 setlinejoin +/mysetup [ 72 1200 V 0 0 -72 1200 V 18 824.0003 ] def +%%EndSetup + +userdict begin /ehsave save def end +%%Page: 1 1 +%%PageBoundingBox: 18 18 577 824 +%%EndPageComments +%%BeginPageSetup +/DeviceRGB dup setcolorspace /colspABC exch def +mysetup concat colspRefresh +%%EndPageSetup + +0 0 0 1 scol 25200 VM? +11 dict begin +/FontName /TTA55o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22066084a75e287a6b21 +7d5ead11cee92565651ea4f1d618325c70b09fa582d2eca5e5c5deea3be0 +b1103a2db20dd69d0ed4b12a762ee64108282b8d83f8d25f9b0608098b16 +460b06a011c4da3f1e637f7ceebc2c8c5e93750ddf750a5c367617f3ede0 +a6cce86a134ca76a529adbcaeb6269451c7420c09daca772307efbb571ee +ca3a4465c4c2c3d07e2e4a4d48c613544563cea572138daa08d3f5cf8000 +48b9a9565dad61504d768972a63af0d028d75c4659f9cca991fb4b69a2bd +6e431e8b0e6a12e9dcc103601275d759cab9eeadc4460c47826081779cba +93705992909858e7649b160152d7bf68815571de7b523535e3f769594f22 +6903dcade6a25b8812844738e33c7cb6fcaee97f7e0d8603cd3dc3ff06a8 +773abda4287715d753d213526621e7b9bd20a1d7c760b92a1abcd504356e +4d33dafc982a531bd06a84380c708eb3650d88f88d440ded48d8d3ce7678 +a965d8469f5931134fe32d1a371bfd25667b18e588de27003a6758c36c0e +a3d1550756abfd014ccbd822aebd05c03521ded77a70cbc5a58c47def657 +79dab92fed044a48697ae300bc4ea5a33620bfcde234c944b214a9c2d562 +d369051015084e6cbf286344a22b3f1003133679dc6962df21405aa70d6b +725b8f8a37436c2f12a9cf0eb097dbda2dd417b2c2e6eb0ac571bc00b5e5 +93817cce74217395cc079c8222746172fd669a96cb65e23828a2a4b1ff2c +93428a8c2738b0c42e14b93725d2907b0352a41c50fef53b7a13daeb06b6 +d1f339ee6f2cd8c8fa1154c733b17a2f3ac716ad02da5459abfc16b83ab3 +9fc018038386e7065f68be925cebb5f86a1112a2657cd4c5a741c5e7b520 +be2a0dfcf072d331964cb6065f51531606db141ad04b59b2aea886c83024 +feccd6a378c41dc2bacf17907885e03384773ce94735dc19022f0d171df4 +4322ad309a02ddf3455ba4c822cddaa3b0b0552dbdd354bbd279223a6b54 +a55fd4b0d5570543709083a26e944bce2feb3c09d9ea02a4851b70bf4a24 +7892c3d0bb0483daae9b9a9dc5acd3955a9e213c7ca9b51bc1a3a97eae3e +67abaf6e26d68e27bbfd9a05b30474a1ef758ed08ae5423f0e430efdf23a +6149cf11ecd234c9d48aca961f1cdaafa375f9e488605876fc32ad44b2da +abb0e23a05b2e35412aef4dc77dbae93b2bc47f7b284d5f3e12dbc56a1fa +971a5c5be62ef903e4f54edd9dddea7c3908546ff5dd4bda3079624a9a22 +9cbb4c84ac0b4f68a19b24a88d2068b8074c21eb35ef43789a3588b32710 +4558187555465bfed7858029c1f7f30f942ae86dff06d1f8f2da8cf8b330 +a1260fb9bb4648d8fccfc12f295164eac890dea6d03091bd25c91db21856 +e1023ae08ea96af37790bcab40398f35122b6287f3e0ba266b563cd5e09b +117b848b20d986fc6f08d53a5115263e91e84448ce2052e731ba5ac2274a +3cfe116473da78d88a3980ab570e9d8afe870905da9620ef3c55b859f825 +a7239fd31d4a6a5ea67381a26e68dd48a07d7b2e9396ebd861b3f55e04a2 +b0cb2a2dc1c20e2919cd3981883acea06c47700adc875197fd05cf4dee96 +e3847d7e7cad37e3d62536f36bf7e9b39fed99c8e18564b030417d7c46d7 +73edfc7c97506df2ee5dadc76b03c19d17444c5d529641aa20fd07d50f62 +85d1ea902c58baa75ed6f2236c1904605a89c333160a190d92068c03982a +8bfc3b3968487f940314478274337863c0e7c797435dab9758bb85240e4a +59345b67492edfe7a3c00d6626c663bf7577f4012bcdc438fd37e32f5785 +cd124fab0681605098048f77aec3819aab4de3ba73bfea197c50c4284225 +3008b38a77151400eeeaf84ea6d1e8a26f9463baef55137b53a4460000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA55o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +Pscript_WinNT_Incr begin +%%BeginResource: file Pscript_Text 5.0 0 +/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d +/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^ +length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets +{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{& +/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get} +if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{ +{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get +StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $ +! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy +put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM +makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0 +Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N +/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT +{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d +/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict ` +/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d +/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont +Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1 +add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E +/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $ +FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255 +idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector +Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding +length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2 +add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs +putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^ +256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E +/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~ +definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix +makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ ! +findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2? +{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName +get undefinefont}forall undefinefont}b +%%EndResource +end reinitialize +F /F0 0 /0 F /TTA55o00 mF +/F0S64 F0 [100 0 0 -100 0 0 ] mFS +F0S64 Ji +4483 738 M <0102030405060708>[61 30 57 35 61 44 39 0]xS +25200 VM? +11 dict begin +/FontName /TTA56o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb2206689a2c7f31c3571c +8737a397efefad52089b0a63555d3209d1f3499e5f079b0179d26bd1a32a +7bf160e83323b466debc925db378cff20fe2ba66a466a4d8e1d2a6615e05 +93a54552fe19a6e69b359af73bdf13ed8417dc9fc8dc3f18af93902e4197 +b017bff7f07009d52cf468581f6a23267d555fa25bef058e1ac4f1bf710a +4067b25bf8ed2fd76a56a21222c35beb89a1e778c0ca1c10db6fad771b1b +85771340b80523ff61971323b189e5cd4f8666eabccd1bd2aa658224cc84 +a8652949369fd109f7da580efd0ef48637981305ef31dd2654b818529b95 +81188e00d73117aaf12858765156a2ee8b290fc3b1ad7f8500e5fdf3a784 +bcd5a3d1d8613b692b3fc5d88ba80b961c093aca30c05de21307a42665dd +567218faaf8e7531b8658b777053fa437955fab3db6bcc47bf877b55850b +26ca2a1d2ae2f655f6939da944107009b124d97feab6b504be5d1d142fd6 +e7a2e0b1e5c51daf94eb93a43ce9ae7ebc4afba0c6dde00967e5ff15f6e7 +87af9d25ee37e13ab42bd3c6163335570877ec27d2e0b8a87083b7bd4e51 +f5a164659aec160554f0cf11eb2f253844b0a6adc1748c633f16f0ab1885 +3f25a36b4e80c4f742f83568920975e061327bf0a3a77e99b0bf948a068d +18a4723ea71d7048424ac7b39260fd0717446fc6916cd997742d088d4258 +d4301cef2f3cc8c632d9c0aea984131a59c77315ff1e282c26d745f499cb +4ad480715a91553e4dd0345774bdac173e3db6dab78f559da4b3ec76c473 +5d24af2afecb96535a5a6c956453f5ed7f00fdfff68025fd6667ffa85b3e +fc5bafa39cfbdba93d1e9054b5581daa9d37bbfba4f602f3766d61f275aa +7aa663a22d807494bff21a562eae0507e64bc74dc8d1a2f052b626539a73 +5d1a5832e7a89e886eb4db30ccac44725ef80f8215d2115764ff1dec4cf2 +4bfa1f30c36e3da7b69915d30cde7e205e8a9e780bdacc60f3bb715b00e8 +221669692a26d568e581e1b318334ac68fc818b4aae56f9bcb7c4dc7b749 +a083c67c5df50e02ddf9fbe5ab022acd31204913f32d7a8b47242c2de557 +cb452815625cb986e010e03c757188e99acdcff88b435c229c9fa7e762f4 +2823b4b32bbad7aefa65cca11515b4bd335afea1638e7ef8da3fa7f84626 +25c39e1a2ed855c06cc5f62152d2eafe46b9d11dca17173ec0955b1452af +531f67fabb234bd217a9aba25d1dcd411f90829c70932706ad453c184066 +f3981f10ec9d212029aec5fdbdbc0ee51d1808c0a7d911c3f039d4f5368d +0b8f0fbe6b67b888119a7f7bc24558be741e57ea649bf1d03f8a555aa600 +a90a69e471b6d8014264f1e3efa6c74e2a2f694c36bcaa713d16a2279073 +748d853fa087e61ef3db613d9112c861655a99de6a3e4a707c8d450eb68a +0a6959ce43b5437f338ef9f90a4a2f1611ac157c105a68770e2d00af10df +882fd6b4f100ecc610515e037112a012e306c2e6b684cc837e815971ed26 +6fcc6fa7f2fb5f83cb06d835731a5034e683ceb10e5402f41eddbd8302e1 +df211165be9eff0f2c296eb85d7ea8c667d86fc1a620504f5158dfb898e4 +72f7c46964e2ceaf85c9a892eff29d25bcc1e5297aa679976919f6c839f3 +d0f54de71a531116f4ed682f527c7f53d5c164517db6f807c1d20d37c022 +c5bd5e6a8da424c3e3d47689fb71fa07290f52db51c37d64b83207fca5a6 +9833ba0c2c3ab8c4d8d171c040863605ee1122166d712ad8c04475341da5 +86b1a501e0dae2d6726daac4b640945778ffc53c567618e47993dbba3ffa +82fbed8bd9f9eb3f0145870cb80b4429e582595ab561bcbb6dc15c889e3e +ac002d4fef28fd1b9422c142dfe50ababb2be2f385bd343ae40000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA56o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F1 0 /0 F /TTA56o00 mF +/F1S75 F1 [117 0 0 -117 0 0 ] mFS +F1S75 Ji +4454 869 M <0102030405060708>[70 40 65 39 71 50 47 0]xS +25200 VM? +11 dict begin +/FontName /TTA57o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb2206118c660a9cbf6d8e +4b94826b96ececa9599a7609dcee16efe1179b77c1b7f46a95a0ab7c17a5 +697836677e08c4eee7e9abfc4070a184ceafafef2726ec95228791901739 +e45003466c73dbc8c43a9c04969dbcfd8dd8cf15a19004cee3a14a49be6e +b91213a5ee7b0d2d584078f374b74774ed505dcdc8983311c8f8e03e9edb +9df6842ada6e161ed6a5b011b3f1c7320ded247da6deb3cd17a7ec0f397b +2415ea072df14348131a70acc1f7c7fbbfd3870b5f41e98d030d413cb08a +2845f8f1c697e10d8ac363d896f70864686afbee40d592ff2a9e75e3e361 +06444d8ee582de9d325fb883a53b6c68d362eaceeafa7048afa7430ccc45 +572995e53aad2bd2386c32d72665fe9d6964f038c062b01a43757a9ab52e +2cd852d6146f2232dfa51ead4a2b44b01c5832d54b88ed54c258aed0171b +b62cc9a580de1309215b9be7403d782f2bf09d2a9edd0f657647fdc4900a +22c529490ca9a42be2400c61acc09f4db4f7d500159c7a4e4e3ad5d4f112 +0507ba0052d9818e041afe07325886343f03c99f60cc1601307e85a68685 +691790d16bdb7d487a68e6e15d211ebeac2443efbed31a5512d98cacfdff +e34d638fdb613469cffd654f12c888fb2923930f739325fb86060b4acae3 +c1e5a887d8703feda1156c4d73c0e21813d748154bb54f8c24c1daf24601 +8792c263771d62affb085a58adbf11ab9599cb9dcda256cfe6909ffa616e +53434e3627483cb07b06d46eef74e18d985429a9e1ab75b933114b58082c +22cf52f6c86824e52d1ec597c6250f14a100499af35f259be3e328da8e47 +483a34be21f28bc8a3262a528199b63a9791d53121a622873f5e6987e883 +930912abd47d820cb61501acb111bb4b004abc7bd88ab6b8245fb7ed6917 +8a29a82d445ee37eefda5c108e2e5729338da717589f1aaf4bb384d05de0 +f8094fc57f0b38379014638d4e690feb342a7767052f75d630b35a14c266 +846a0a255e7012750b989aec755b5f382e79a9417c6fc1e67dd51ff6db64 +6105edd0f9db04526a56c1dafc9a5c3b2eec3e8b9cc15e6eaf81df891db3 +1e4a1578f50ae8b34485e77abb15bc441dfe8dbe345c23f8378de08d802e +6b1fd78d7f06217fcaf8737778d271c391cc56f2111f7600b59d683316dd +dc1c3721f4e1bf984f1c1922b989a852ea83eb7cc9e907fefaffab3777b5 +5b0f4b31ef5995c2e4d1f076a36c6dac984dab1fe574f6c30f9883f3adb3 +8104eba28e817d1c8845c2e339509afb6916f2e74a26335df0f2389652cb +b97a144bd0b34d282501f1ac84ec15b8ab7208be238220a6d45443928c3e +678a651ed615ab2419886ecb8170bca1de483c4bf773a2ace74003476dd4 +9cfa70f78ddb9b2d832b6da5cde76b8286c581c6e0855333f24c4a849b3b +0591099e36178aecee54d3a7d3aee7c2af5c84555f6a2b6d0090938f6a48 +177c4e5d34c0287c6b8c4a0dd59ad7ed951e296d122a8f174da1497fb317 +2426125f25cb184a7e89665539ecbc53e89416e28a146b933ab891ce7291 +db110571cc559ac79a8f06534d3aeb78af1fd90c1a62ee315df8e9ea58e1 +3003e4784c9354d1de15ee86207c70f572629fa6b62cad886aa18a39c2e9 +f2dd802c49542b085b88afcaae2ea3b3aca61ba5ffd9f4e3d2c1e9bdd3cf +d5669196623887a7a2016ef55d22f6b5d791e1b787bd8c234d2c715ce9b4 +0bcd0dee3a9ddcbb71bb1ddbf2a76cd4fb4f0d7d2b786a28905989ae899a +669a081cb20699ac39b91b6fc7a98870cabd07f2d54d666e66bf182334a9 +236157ad4379069afadc84bc9438bf76ca41bd153d38f64b5af32421d933 +0f54c7855f00031060c388dc4ef54a67ef866969cf47a6e684367c794f0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA57o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F2 0 /0 F /TTA57o00 mF +/F2S85 F2 [133 0 0 -133 0 0 ] mFS +F2S85 Ji +4424 1019 M <0102030405060708>[80 45 74 45 81 59 51 0]xS +25200 VM? +11 dict begin +/FontName /TTA58o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22066a6b46d2cf1728ab +cda123ebf188b9a6b8b24cbe57d2fdc0fb1465e42a4a57f1b5de50d12264 +c2c52885376894a97a3c08ba53166de08d794b16c034e3260814dc36d7d5 +bd49c3cd5a16d882e9a1adc9ffc8fa13e3d736dd14a0f59c0e23b738cd57 +789aa9c1769a2a0780fc2c19fc708dfc6073d95f7be838edfc03cbae144a +378d7cf48890570309de33ee5d7cb65a04e574605763d16439afa2291a11 +03067d6228112b327dcf9ec9ffb4b4c5842fb3d130ce409f5838ceea1dfe +56bf53695ba7e626b7e902e190dea669301951796a841a0bedb5e51d3c09 +3e882413436423ef296308bdbd1ac60b84bc70376ea86c1b07062f7a204c +573da34342995ae05ec7dbf7853f2e5f9b9842c8ec74fa1d38c508ef3e13 +c69f19b5dfaa844e9cc5e3d791f36fae0adfc6a6e90069792294e2170e4d +ac265f7c0fdb3301ac4b0ff5ec185b21826fc4ac759a856acb923365268c +2939a33c5bb257385b099f89737dc9f92a81ffee9fd40483dc6e9e1918ce +cb7dc0141b3fb52a6f9326e075efd4c5296c39718ff35463da3ad067d02a +96d8b41a02f84adff5bb4f6950fbca87a3db27261f99d049c78ce3d75510 +788b537af73800fc21501b72ac3cfea52b9d86946fa2d807b50640efc784 +9492f277cbb4a451bccf504badbb0f5e0a8f6bb116d8c16ec3522fcaa2e1 +466cdd96ab803f47d4c8c206b5676909ece2e6db8dd88afacd31b9f5a670 +5daa6dbf84d3f053ba4261a8d3707311fa9d46bda5ae891aea4ad6b70360 +08628f733151a4f2262aadabac443b4dce72ce55c62968cc0205bca2e296 +41c53ad39c339efcc6ff63a56440b6109c071289a18024596d0840bc634b +fd0076c39db41e96443f89d1d79f6c796b3df419f8d19b9abebd474cba56 +f1b0be6e75199399666b1e5c297418a5e05575a85f4f596615ffdb47ea6f +79933ed05fba1911a87ec7985fe0acc52c074888943175fa52470b364398 +3a99eead59369a00556ee687c9ceed2e8a95d9dc1790034d2fa6a19919d1 +a43f10bcae5e14ef4ad036c7f44cb63f99f9a2cf4970b5760fa073a6c970 +eefd0ce5d2fa46af1b542149afe26804a834ac0a7f727ef8649d6af07667 +2724e5f7b6b25744e674bf9a5086196b7834df64bc3bcab2cd70a1fcc492 +b3e7afc80f72e3a84aa5d3e5c3c902d6032f41da6ae5e7340944e1f4bfb6 +85fc826248d897cff0897e4c590258f8df6c84c891f3b46abeabe0411cac +70b9abd20ef4324819bc49b28fb3df7e25381d9d21c276fc908aaabdc532 +6621c5cdcb3dc3dfa758584a9b8f86e7070ade12bfdd54b1f56947eb98a5 +a46745809b0edafabd19192517147c68d4dcd55b2bcd924955d09d8a363c +596a4e5f0b18e23813e70d5231def676dff793ad0f4af3ca4b279d5276c2 +adcdb87b00531a4ebeed39d836f09861386999c622bffdd5df501c7e7844 +6b559037fce2e95221391d4223368d705bb40bbe7d1a7a7f15c49686a9fe +418d72a2b9fff5bcd68b058633580ea72709a3d95779a06821f56d70febb +a767246ff6c567e7d4f3cf63c69551a37652aced5441e9e5df350d931420 +916a69ef9a880108df611eec29d502d08b073b78271c1b151774392639b7 +5cdbdc2045bd3a6f81086d8500e50d195207f3b4c289539cebaa82ee9d83 +05552788b36623ab12f103176a73856bfa4e6be9cc9897fc305b86829b30 +2c0b7287e514ef5e9b10733ed95ecf1b51121b9ad99f9becada0c85c7c1d +c8fe8e896c083bf9daebb69e529af516c09562c6bc8b50eef72f33b81e7f +08a88ff5be58bfccbd42f96a582ff3d3ba11218f82d121040d0fc501dd3c +fef1e5d184c959108f096bbd543980458a682ea0ad0b62ba31ceb3560000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA58o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F3 0 /0 F /TTA58o00 mF +/F3S96 F3 [150 0 0 -150 0 0 ] mFS +F3S96 Ji +4395 1188 M <0102030405060708>[92 50 83 50 91 68 57 0]xS +25200 VM? +11 dict begin +/FontName /TTA59o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22061485d7d0c2a0dbf2 +930a8f5918a6862051241b27b50bcdabfaf3447ec6b9abe16f841c5bb191 +f22797fcdf6a8c8ff86f049be5c0235027cd0afec26ca4ec8f456e5fdca3 +48ec1263f3379ff320dac2de3bf289d44a586dbc7321cc21f6970a30ec04 +4c81bfe4cc4aad0c34c941050be71d47d6b71b17cdc52f5f4929234df4ce +8e8dda53ba1756d68ff2998920764c753c787ce2aad2b7318beedaf154cd +ed062e47828b15606957a37f2ed31c497b84f23af55a4be8ec19ec290bc0 +8b8a36d4f76ed450f2b6bd24d1ab0cb9733ded98d13d121ed6e61bea7f25 +535d7bb636e41d1e6c85066ad25a4129078090ff449da4901c333fff5a65 +3b109d418559dfcad8a3b95343e32949626ae79e1b9b76f34e85f8ad1d02 +45224ae5469e6de5f8ebe918e4243c58795f146dcd8fdb345ced4febbb37 +49447b9005b7e9da42f5d30c4760fc2fc25f01bd6cabee8635bc3b354b51 +4640db9cc5a1ffc3b043e11b946b86dba33ae4d62a6868a0563918626a9c +ab48b3a26ac63b32314dd3e73ffdb937da9fd8641213b6e421733bc26d75 +4436a44bb0374923869ba9d9e3ad5d720963b321d55c8a69622f6e513484 +cb56406691e8ebff011186c94bda3ae6d73b1ee31e0ab7a00d1ddc0a0add +9162daa7d98b701e411ef69cba5bab29143d51a6621fdbbc6c2786715312 +6abed7ad07ee21ea4aa2604ae9801151304692738429383a6be9e2420d35 +36706494a215bbc41a8b0720608803753eb09b8da2232ed01b25984e1ad2 +2ced31325125ae4f61f6c40c003e081c25e1648f36c734b9206e82780ff2 +d6890dfdba56a76379cb87ccd6a207a3e96ea78cf156ef86936224d070be +a4af0e4c33a1e9016db6a04374dfefe1190ff69f20c89991541c22cbeae9 +d716460f215a5e3cf1b3da78cd2fa5c732024001c91382dfb9cc28268f71 +6097460b697b27d156c66591da3701476c10f4a699da79d411353d984a44 +335227370be063f904c2ed3046c105d07d009f5586a254627bc02cc60086 +5ce2c25952b4ed43a867b1e4de7312dade167ead9739792765d1987c094b +611be118f5392f62b207aebe1855cf31d6cd93e85627a1314bfe1c99231b +3f5fcc8cdc99e8c843f553f264d4a676e700104c4f98640d95f912bb5c2f +21d3fd8ef0fa3759139bf3e24238c7571aae8f3db149822f24233c25d03b +e95c19deb5e0fb30f5ce473f81cfbcf25a3998b511c61e1c788aa5653bca +a78621a572a576df9bd271e38ad6de59995df949aa857ec90ddaaa3972bc +abecf967125d88bf8cd80f5864010b927ee8a77909505e8a0d84ac430ac7 +7c3568384caf36adccc0b4c083fa19dc61f5a35f9f51adef83a1e4410507 +9f1238fe26633516e27aa116a1ed20889fc23c2e803a34d17ca4a328b654 +df8bf4312ed207b24abe6b205f401b2239a29154f251a6ef7a5a8481640c +c92819cd1aec2d6cec4964d9230d8011a9908efe0a14f825cf3bfbe84d7f +bbfb539c127c84611cb20e0a59301a13b4a5d279c763a2f7a718f99073ae +5f18d7c7e8c9d8f4baa8ef33941cf41620bab2ebf6b55d781ec3b2bf7157 +74e3ec25418d93decaf162f96cdf0d6f96e81997358c0e1cab62af3bcb24 +86904a0858a07eabd803e5379b03c650af98500509eadef2b1afcc03dc34 +e669c1b996554c6ef76b1a40f130d9d342411fb9b5ce422e71166545e4c6 +70a2abdaf7a4fd819d3ea3c501917eca68803f09af97fc95618a36048ad9 +93647725ffd4bbc4fbbda3258b92047db2c9309e51efc433257e23c84274 +90d257dfb2ce98ad682743094f1ea6342930f3b9dcda8ce2d665e08f7aa3 +fa4df153a7da21f64c2eeb74351ae8cea832987cf187ad483d67900000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA59o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F4 0 /0 F /TTA59o00 mF +/F4SA7 F4 [167 0 0 -167 0 0 ] mFS +F4SA7 Ji +4365 1376 M <0102030405060708>[101 57 92 56 102 74 65 0]xS +25200 VM? +11 dict begin +/FontName /TTA5Ao00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22066ef7ec7adad4e5d3 +8b2e433d08a0dc640353a02ece412a4b09d5e6d3465f6bc5e74216dd072f +3e9e3f8ddd853f280cb37ec60c99e5ebfc757e7be973819b39ff8196497e +472a63fdfc05e286e46365bf4d55ef237a062467084640c98e5d0dbea864 +ebd8683f644b0d7c6923a28af309cb98a3be6e046ced7cb900f4631b119b +65be6103be27edf87e4f495d1753cd8bd59e99bbebd2e1d600fe9e2d5ae7 +db029e32176da132e72f490d02728cdfd28b8be9472520c524363b527f9d +91b3224e223789c3aa5422aaade5dd21796ca05e253143fddcea8d000ef4 +bbfa338c920b5c025a3475b44b9ebf0dec8b8bc9fd1a4f4328f1dcfc041b +902792f9477fda833b0962748e3261db32d775f63eca2c99bd863edb9c3a +e5e06bc0886cb9de7e91161055143943d5b9ffe3d69894eff59942c6e6bd +14f1764dff5ac5f1b0bb60812e6ef1f4935a5443092a15cf32a4b18e21e9 +aa333e356f31f450f888aa11c25480a796202faf03196243a7fa68bac329 +1dbb3b0d7ad4c7f80f66f8462e44d066c558c16e377fe342997ea31c3c00 +c0903389a580aa761d9ae539521a4cc09f2cb49232385ffcc7126415f498 +5289dd79d836c4d11ac344119b7755cb406f12c2bc0c6abd598754be166c +9e62e0c1f0c55e8e205273db43574b4ce35677439575aa7cce8b1860f212 +3803d6a99b5f928e00536bdb35d7f77b9caac62936e902762921648e9189 +4586de6c61e572732b0d097683bdf4e2f7a0b9332efd48b15de3d934c324 +6d96fd969ba4abcef9b28563b45c266aeac1782cfe4ef1d3baac42796450 +3e0ecef9b80d20a51c757eb8eb8b4cb3832f1bdaf75d336748a3bf5746b5 +48d93f3a13fbd0e29d974ad5991ef5e14ee409d385d59d83fb9413950468 +ea2b09a608b72a0b7bd60ecb9814cce7d920b22d387e867a23cebcf54958 +ac985c6433b3a65b5778543daea52a9beae38bc838995895bb2262772b07 +7a4e0cdb87633287eb320b56d652895b12f39927dd54104579c497fd1c47 +25bc223e54ce3fcaa22faca351346c4979209419ec33264b1578034461b9 +d2b2359f310d3bb0578f30e5b729009d6372fcb1d6430e282de232363d67 +5eac59c4a6704836aa6e274473d2f6220a627c9ab5747fc3115ac948180f +549b305bcc2895ca1de60aea55332b2b180b36831ab380b7c2f421ca5689 +7b173ac0ceb1e4198cb47b8c626057eb4319bb9b2505f3a6c9f4638f14e3 +f07c1d915d490174d7b6deccda599a3aa67af1adb52192c2b0591f52ae78 +78527f69baf10ad6bea8d1d50898e4f5795717bcc90cd5f9078caeea6760 +ff12a1ca76439be0385cdc3c7af7905a904828638c51121648265d99c5b0 +16781fd791060dcfe4a611b15e5c42e92c1a31fd40f8873c79b438041899 +50070799a04d114ac98dbadf46a8023a4413aad03c2546cda40fdff6afd3 +70572d90a7709336daa37491ef98c376a836250a37818621b0ab50401e5c +137004bda09e99ab2726dea1b4b17afc11a04c20cbb9e12f70bc3cfe4304 +83bba0e3079cdc0a27ebffd6701cb4908f0e2afc384d7a9ef77170216a6c +acfb8842c9c700734705a3828d0f43b2bc2d378b16678b9daa7e20a62217 +5e41ce1d9a669d4a4accf73231cb66c4671642c6bc2a5cfeb84e58d51344 +3e4ee31aa83dad85b034293d42f390cb9f6949729a019ef973fd4d2a5bde +aa3b3d2d41de3daf5b11c02eca9ae7441215e0c44319c090873208fa32f3 +caf24b4b92d67e744e8234207efaf0cd03066ec4d84ac8e0f71138fa5ecf +d4a87a60a2b5be428d95e0fe40147782a1cb875c53e84ba042387a35a687 +e9e02f0a7a934069d2dc97971f43b809d0a358a5a92991cc279b4d0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA5Ao00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F5 0 /0 F /TTA5Ao00 mF +/F5SAF F5 [175 0 0 -175 0 0 ] mFS +F5SAF Ji +4350 1576 M <0102030405060708>[107 58 97 59 107 77 69 0]xS +25200 VM? +11 dict begin +/FontName /TTA5Bo00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22066baeb5dbea4fa9a3 +71fbf5607f4335673d842c1fb7de714eadcb044948b7458d4cd4d22f303c +51e1270d84994826f6a1a17ea11bc730d40426ace8a29926f3e4fc00e701 +a90ee9f5cc95cf95beb409d15d258fa32a3a904d0f959273e6eda6f0df7d +08ac5dc01d384b162e5ca1aa8a3b1f45c0ed44717a8b1d92a54ad496aa6d +86c578d27a9aa506dcbe25e7181a98e99c355dd06cac8f9f8c2edc1a6278 +1b861b29d71b1ead02638aa086f77942c6cae5fa9678321e48be7a95b860 +56566e58dacbfcaa51dcc09cb1f7c4cc3f34dcbd2f5e33dfe4222fd8b18c +36bf74b5d48df7344cd4cf4972bc08ffa6f62ca6bc4b0eee26ece563b33f +5ca6f0c377d134cd7f31c4802763cdd756c01b5ec85fb2a1a641d7aee478 +26402f527ffe707d36f6f6f90c180dd922dcef1c5cc10cd1d26c916f8362 +190f7100cd97d6feca5604bc997f8cd99b7c0b44a5c4660d832949eaa19b +bf9aa919275db8306def142a4cbdf5689c190b4b9e9d510a319270245dc2 +16e5f52217d490e714fed8e83d29d12c55f7f01e2ad235fd852f2ea19ddf +ebc7ac1d32552815089539f04b30e775082de5a863ff0365f5607b7bfac8 +2887ef522be1490075f821f4d5ef5ece2687458ac2e87c1d503fbf3795b9 +47ae1ba5d480635a873473d7551abebec664e312e7b242f60c471eeb4e88 +b86d6d27d6d71a55196e112a1bad2d00f428d7258ecf7541a70894b2c812 +db5b402a617cb11d25510f8ed3109a74271835139e732abe651d81c5cfa3 +52703ee63da6b2dcf5929a3724c661f23e316c04cd73a3a2072f56390b79 +a7500ce8575d6fdd9221b5347ec45bb7759729a220a37b6144b41fdd5b3f +12d49a9caf57421edada1a5752f216108d2c32e40f5cab75fae02f7f3b27 +2834e35707f4788f3c70190d486b5b5baa19ad85e3f694abed01aeab1f05 +2a7b0b54b2531eb9cb1ef43e53eeb0f5969812ca7fec824a63bd8fbfc78f +46adcf490959cdaa80dafecbc397b558f027a97de9c3fb9b55ed5fde50ae +324323479715e14a95a4c955116c967c7bda2119923fb71f1f1021a74f1d +69d17e1ab09ec97586d63f267583c43b22d528f2b57c25c53e4e0b07bf8e +25bbbf3477821da145bd30c01373afff39e2baef768e0425857900d83ee1 +dd635c2f317258a2fab349a733300a24ada26a77464995e7e0bf2c24de2f +cd756fba3610d79b0f69be5682362fdb0dd6d159b27578deeea4b892db05 +55f50cfc5390f24fc67ddd9035f72675329677af64cff7b051a1a34288a4 +9ce551925ab6ec27b552fc677d566a2f18c75ad8002b2ffa6b0ec56d20fb +8f27087eb5ba673deedbb7f3e588c740f85682d3ea2ab618978f7037f659 +7da162957e953a97236acbbd757ac4b73bd8e60d34d178102477c0574175 +28662b96fbecd33dd786db3773f3771459fd92b1e25a149601d8fdbd7a6c +f1de6aa1a61da61494f8c7a8f8df88b09c72a9d70a51ef10704a324e8756 +5fecf5c04e72193933506c7a0b3d55a6d59e2c6a4ec96ec0070deeaf6abb +50f0d29fa90b9523fe30374b73444bf11dfa093827100f92fa75909a7fa1 +107d966ea3f4ce988cd246845975e87332e5e277e693f0588f2ca55c1e06 +8b1a6b5e2914a40743a964c92356393c742272e9eec81ea0fd77d8ddf90d +2a48f011233c6b0d65a1398bc12459cfc161bc15c22ff325a0aa41b29d3a +0c652a52b449502683b5a11c5a5072af5aab99ca2e7b5be106b03f066826 +5b2bd317ea19358bb92fdad766daad1cf9cbc8c81d33da27c41b0be7c252 +378efa2dd77d639f6eeab6e738ed470c5a9c2ff96956aab708cf0129f182 +19a5599cef850ffd465071e2d44b2347d401f82fade624e4dee38b0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA5Bo00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F6 0 /0 F /TTA5Bo00 mF +/F6SB7 F6 [183 0 0 -183 0 0 ] mFS +F6SB7 Ji +4336 1785 M <0102030405060708>[112 62 101 61 113 80 71 0]xS +25200 VM? +11 dict begin +/FontName /TTA5Co00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb220616fc35b8e91f4411 +2ea3e18d75348a1b570035ada3ca7681f0d5845dd9dfec3cd6f29f9d0c50 +ad262fb16bc30f7723e63f783c20889eb90751dc023bfb4ede4165eb655b +6163541eb0a9d146f382dfcad00d5398d12bb905725708a55921dbcfafc8 +fffddc36649a4d606ea08acc886b1ec07e6d5790eb9723c3b8c8bd327929 +5acebb70c048f1bb55874dd9bbc0815f7617c4031ef813c968dfb3b69a59 +12039471551dfc475d116d9f62ab9713c351ff48ffa5a9b6c0602990b34a +985e118ccf9b853ec6313649c6ddf17b10ef6ca51360a0c19710daa58695 +4c14858082820bb3985a8117932627679a0ff497e1724d5b0f0994bca28c +3d9b57615a601a25cfb1496187e3697596c87670600397a0b03d87cfe888 +e5ae783f0ac78a0198392285b47056cd96dad15fa8a95954b0d04fb1cc64 +c39402320e2f365dd118708e1c8f9c0019f4ca95d3a33bbc5fc700cb2806 +02b2b4de764f0a55eebed1277f9b5c71caf3f119ca24285d2f736386aa92 +a2ca367d9a6b3201f578278a52ad274c4478fea87dc93b97df73cdcc7a2b +b55205f2c859608e06cb37bdf8f2be8e75cf505eb0e77781e321de98f410 +bfb42b5fa970a743ecf7ac2a3d8e49c32db746f11b0c52f823e249843257 +48412382bef94b64cddc4841d3c8214a8e56aec81c12e9d5f456d1641c36 +c477ffc722b09b1b8fa301f977ba6abc218f2fbd39419917d82bdcc1a5bc +4f781865006f56faab8321f0e3c9b4e358a871dde55e36c46a402005856f +4f83816a420730bd83e5d894fad1879bf93f10325a8830777decaa17d3aa +1493a38cc7684235778bdbdb719f1297b854156d101885b96e98b7222c1b +fc11cfc18c25b03a173b05d53c5f4385aab31a2864f702402ad84ca18eed +c09937a2b31097d8b07ae55b8d1038a7ce9b3c70b6fc88db42d0bda799fa +fd17d6868c14ac40abd445c91f03b5b3a13367024e0edd28408aeb40e05e +732a268432a78cc7095b6807fb6d97562db7fb82b53277cc12062b50b480 +33ed74b2b39e9f35727a6cb20a7b35c92be650a1bc35252c7761aa55c6c8 +8442073108bcdb015fa7d8fabc5ea6ff2bd0c372403feb12da4ef9adf970 +6efc84b2a0b531345ae34d9d3699feb3675889d6ed757255a911d766f0a4 +dd34c57301bbe1265e3883c7697ff7116c5a9cff89e8bf96cb16513a1e86 +f6b1239f76daddfa3ed680db35a2881d3fa08b9ba64f09d1971958ce62ee +de4a1c4f9e69ee0674dbe1ec200a7d1d76c52ad7f5025d5f812273f18ff8 +6af9f5fa5bff055c25c590e50fe8eddb3feb6ccd8e0d9fd0ac0916658f5c +0a618bf4cfdaf2d1451f29869de7771b66a4909f7139825334d97db11f15 +a9359cc2d5012c57fc9122b248da66fcd042370313d1729e9ae288203470 +1b92f8e155c72aa48e38f01dd3651f516effdfc5bb75d612072f7d02aafc +86b606522e2a5f952f9c62762b208b30be4b59130b141db083f35a9d315a +0578a98ed4d0ecb7c5bbb7ea94d5f66568e12c754a1d91c199c8ccb95299 +c4bc3e6e2e3ffd9384e9bc392900389dda064e849fedb5d38bdddfafd0fc +7ebaead7941293d3f85ab533a79fcc2286dce859b663142ce0b16a99750b +e0a02cca5a6e4cd7e0d46fd1fac9c833bbbf33d307c3741f54ab210bb4e2 +ba0077d05abcdc9334e07f77dff7cf6515f2418dc5a93043d4777ac91af8 +f4cf77a24e14042d3046797038b4fbfd7d430563657ac56608c6f98b3769 +2b75a71bdc4781c16bf3f738a1d3ffbd5ae9e99f3c691ea52f311236b669 +d7d0689268d10d2d90ca9d06b88097b2d72ea20c75109f87768b2d489e67 +2330db7f78701b56cfa5e5b02eb6375b2df4e612630504bff664125a0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA5Co00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F7 0 /0 F /TTA5Co00 mF +/F7SC8 F7 [200 0 0 -200 0 0 ] mFS +F7SC8 Ji +4306 2012 M <0102030405060708>[122 67 111 67 122 89 77 0]xS +25200 VM? +11 dict begin +/FontName /TTA5Do00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22066cadc506161c23a7 +07cdaf743386c9822f1c3d4f1494deef8094aecfa106d5bdcefc2934aeea +6c4639fba0af1e13157a96336c8af33c57c65e0fcefc246506268822e518 +cddff1357a1dac1553af2b7cc7c807b2848594a4ec5eb543f2401ec4a3aa +5c3198e4b670c8cdbca93390ddfde52b91b320ee408da449cdbbe4b8a5a6 +9160a65140185ee849eac0bbedbac799f4d0a8bcbb61f53c0a60fa06e396 +e2db21c286f13dee961e86c199cb40f7b489412d0e75822c3ebe0db17eed +df59427be23998af0d97ec9f6e15cf937e9aeeeebc5ac671d2ae3d35819b +1d21b24d78783e94bd21c2e3f61c52b62d334162bb9a14504c229f656c89 +872fe3863d2e9b6ab97a470713023e22e8f9517cc057c317547c546577c2 +9a4a39657b10568ba08dd8579b011d4bf5ab42a847852edc43d265df501f +05326c3804b1fad0ffa31e7629b54edce59163ad88f88804675e68747d16 +6286211a0f76666185aec30ca45784112a93bcf0ed930a554114ea2958dc +be58bb93a657e161193a0114f2d16b2ac7418cbecdddd7b9afc10673c246 +c814cfbbc49e88044ac141baad415809ee06676d000c2c7ac663be935b1f +04bdf1e27fe903d292f49ed28429a6a8750e734895bd4e681f33f7e0e615 +78282e452fdefdcbd93b89248f3172b927b1563a4b580f303f294847beba +b5b8ab0693692817badaa8d4ba9bd3a17c5b0db7f8c36f52f388261cd797 +54b5bb730849e083e1cbc9a0c7c4597bc0dad77a79d35fc6f4e0ea162d68 +4fe21b3223dfa8df1137cb37a8bad1f221f869428f779bafa584bce859a3 +646ab50caa39997b3fc3ebedef9109e7b32efd180b3633b5cc562cdd7ee9 +68789ac1dc8a27261c09aaf09f69c61ee63c380913bf4baf6944d8166a5b +54b8ffdf78fe6875854d17898d53f0fddfe5f913e41f9657452f7c93805a +ecc771b74975813179e3a181d2f7268c6adfb1c923067e737fca7bd5c060 +c67755410ec3faf0265d0483f5c66a31bdb89ae87239d3bd8bd49b4be079 +2565bd4da3eeacab81135a4fe96733e47faec3fc5c1165e25a5f5c19e24e +589a1ba2cb960ab30bf2cbf442b12c3a75d752b8cc667aeb891f34329e41 +e6a35cd058c9a5d8d78a6bd7e9687606108239def2530636fa2a02d3091d +8abd4583482272bf522b3ed2eb217f1c209621fd8eab075683819b077977 +ddc380731182d2d34bffc8f253ba4cdec4c054bc489682c39287cb8e3ebb +1c49c50617994d8169ce00e67f617d5ebf7a7c5390a3096424bb3854294d +a66805215beb03aa892ba9019872ac2c3cdd408b7a3f4d9ad3af3cdaa284 +bba725d0d16636c723507f53258a97d77cc8f9dae0eaf1dcb7a6f58c0bce +5339f3cf6c1e85164624363e4b267f471170d417d307080d11dded682cce +378cbcf8fb1f98a78960b4a37c917346fe6da893d512ad58b1f33ec6ee88 +201aadcf068877609c68922e6eaf21524367ed9cb711f1b4d225ba8c6302 +dcd23f934979a2cdf99e5f99fa661adc0117169415a20660498de8046bde +1bf97171d5a06cf380771f4b0356847bf466fbc7ae3998fc87ccfb05e624 +1179a30746391da63a4e2a19a38680c7a5e276ca15712c7eb2afe8430882 +eabd46f019c882f82fbbd86195810899a0c676b9f322309d945cf5010cb5 +bbce1a15392d78c20880a4edf30404c1005656b0bd33dc31b1624ade0b5e +ebc291cbed766f163e47554522396d59734bc0bdc46f207b9e9b62b94a14 +8039b5a3ed8720863aa1d0774c2738767018cc6469e35aa9f2ae6409842a +8d18ecc86eb37249e60b6056542f605e123c1276e606b6ca246111b2b5ab +1ee684f1c915e1b2a8b783e7138f7bbc48542315461ddf686d17970000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA5Do00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F8 0 /0 F /TTA5Do00 mF +/F8SD9 F8 [217 0 0 -217 0 0 ] mFS +F8SD9 Ji +4277 2258 M <0102030405060708>[133 71 121 73 132 96 84 0]xS +25200 VM? +11 dict begin +/FontName /TTA5Eo00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb2206689a2c7f31f86d83 +ec215dc15546bab381b4f0b8cf598b3de4c3de3f6a106e539cdb0f64c685 +e8ce98b2286105e954732793d04f8c77bb313fbaa17485daeba6e5c4f6f5 +d01696085413cf6d9ad5a061c2eeb124bbb8b99bc879c0521034f10efed3 +37a6d5850e031ec2caee80822c71fef24a88e5787fe50f5de916d2d6a3a2 +e380f8898b9210c3a198ca0f76bbedf8fded493125b69a924475869668fc +861cfc389477f13d02bb3d0d067c2e164b56613d248570c4482ef87c54ef +4d4d50dee5f62984f8581aa288b09bf7e231e844c7f50e25f78f7e6ed700 +18dc53b8a138090dc053e18ddfbff6cd6d885a3703a59e298001310379f9 +be660008ea82c80f1447f0a7945d0745faad0b0830ff465a65c587c5e996 +95495f5911387ba8aca425ea35b80e043de79bce76252042b0cde47cf891 +4efa923553835ff41a7b627bf6123dc1f6206fb88246c428e4983733f82c +fcb24f89ed1b6607ec6726f43950e1a20ae46bc4181f0abe0ea39caf020a +6119f6355ecb87c1b45b72b4af80d27a3801a6e1fb792c77fe9db23d751a +0c0c62f748e06896b179fdcbbfb2a8ee05fb52f687f43a5c018505f0649b +5f257546b1037a8de164aef8fa06294cd4f6e058aa2f040c3cc1e6440341 +4fd43acafd408d15070730b8d5a49a1f524d57a23730fd79727c21e905f5 +a653c7bedeeeaeba7382fb9cc6b703f29f89ac4da5f8721c0752c884473e +c3f30e16b7eda908f68fc34f96f25faa76585ac41846682c52e2ff9f40d3 +3a61fddd2ec477641be661f5bc7e51018abde3e7f3dca6c64425c9025bbf +7577dc758aaeb5e3aeddc592c365d50985ed3d387f80c73b28185997ae1b +2e1a77b025b36f91df6ad12be854fe79727317fcc10fcff99549233530bc +22beaca0960ba7e2c092be4e9af0f630b6e7f22fd0d30c1f21cec9418066 +eb5e81abbdcfe85696bfec4cc7746886880c04eb0b333a42fc1f077dd7cf +7d4d808e690a15cfea75a4998c592c52967a33da837ae0569142330069fe +babc011d29826fcdd1d64a2cf3112b20d98aa16e1b4d1574bd8e124bd7f0 +169c402f37a7cfc53921608cdecfd58447b3b98447edcbf69e5c5ddd2c8d +cd73f297c5901858a9552c530528872bbaf2dd6215fe304cb767529af72c +67b145b0ac5b1308c855a307bd78548fcfcaa6eef3057280ae00a90e0dd6 +fe6c0b5d68783be52dac797c2cb6e7243331d7e9ebab2beb54d02a87571a +43fda71b3e15f97b5c965bbce78ec8e6efff04ca44fe2c4aaee2d981f02d +af6c1a696b6c86fd2b8ebfbe5b3dc92813be6ce95a41134640e27643a851 +55ca711bad0cb9a26482e5a8f6ca3b067e43ad332c21c148b0ed92d55bae +9ef93397577adc025f36f6ae10d59caf488ee9b6d6bbe3c55b6447c7cb7a +d26e7ebdb2992907b685a7e703d3024baa3b0787e89de76fea8b46d2b473 +d6733b40d4e41923d6b923b190103fdabcedd8e701ccb843a760aeea1096 +212590c5a281a108951ea4cdbc2e6c7114724b5c1021d593605618a4d7fa +df5bf17a2e5f267bb62ae421b46d3edb9f8856438664637da5bfc861128f +c5639ea03dc7290c690436bce7820156c0be99100274f97054877a573ddc +9c0be5dfd7cef8f7c8aba68ac05b9ce1b81180c001bd7841349c9587ba21 +d9b158599b672a7c42238e7eef628da1a88b539886a6b9f6c241a53ff44c +adadc01d0ef7469509c740afb7fee4eb2a75ef8e78072229b90cd292fa96 +6f94bf659328d23cc7f22253a06cd3b0d2db36646f58084a622904a66fe7 +9b6260f400bac49be0e74934869dca984af60e898905b07ce5e37e729c0e +5806c2b93ef7a09edbaaec50e5e49e7f9673a9f463df5eb51feb0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA5Eo00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F9 0 /0 F /TTA5Eo00 mF +/F9SE9 F9 [233 0 0 -233 0 0 ] mFS +F9SE9 Ji +4247 2523 M <0102030405060708>[142 78 129 79 141 104 90 0]xS +25200 VM? +11 dict begin +/FontName /TTA5Fo00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22061485d7d0c2a6275d +8da901d4c90b764c07b7b55a308444fa1e7a528df157b5f3a3c98718c51b +b8405ef3fea9ef7db06034e263d395c70f718a4b588bc1590b987df93e7a +72c230091e534b07a2ee7b4cf1641847bfc6d3721c80ad7d67f7b7e7952f +5297e4c939a240bef9367734ebdb25f95d2e914d53ed710482d6c0ef0e7e +a5d569ebc4ead0daec244491f71d5c6c5279d1c62599dfcd2e5b8f1a98c0 +883cd198bd7c7cb5d8583f6eb5bdadc1509f1e07e8a60fdd5ac1f91fa8bc +bd3db3de11f798d327c54f9bab256e9b64ee974c431c601574ba9f16f705 +f849859f9b81fe926d3ad64dc715c4fcdd03547669c72c29ff6d9db7ba0c +9c8eb6ad87836223789881c8c054a785683e679ff620f747733cf8a65f41 +f41804649ac29633168ee70c441958e03b3d857aef37fe2f4b61a4356640 +8d39bf06df627a1cafbec8c90cd5d4b9e17ddbc0ef8b838887991521beec +7745da33772b5f1dfee80a89ef3058868878ef1abe7131a1a337abf0c241 +12546185d043c9a89bc0790368cab51d11bde95d9f893797a1bf7da358eb +b681c63b922a074a5be052b91f0bfc31090ca4d6f266f70f4f4c27ff2774 +475b69301570f64e2a775e961246ba51d1ef37716621dce50b155078fb60 +cd81d9c133641423778e3f899bb102dfc5f28f20894bf5850e57425324a5 +7adf1ee9ed235f80dd53251e24d53992b184dea9bd5644be6d3c7128f61b +469e5b03866cf5d090fb847d437ca106ceeffd41a20c2feb6f018fe69b81 +d2e1bf7a084a6c95ea8f102ad81b5e02812d7c36395f11ceb3fac49adfe3 +f918e5bcefe4b1425c469dd7e3c57de7a680d6999078510cdf1a2741efaa +af2995071314fb018448d7dcb5109391cbc69507d206d6eaf1cf74b28403 +00aaf32adeddf5070b80f9831083be56864cb84d7c80f60df6d1f534dd88 +90245a330c13b34b0b487f7c126489e4faebade7b1d12ffc058bbf48baff +67fb0722a453db48756058436e565969dec48ad212ff410e07d51fa23d54 +f180e530efae113004f42d300251c04eda6317f01db9cc54808622ddb708 +2e4238aed2e5aabad836d08a599bb57a43faef2e1f3e4cabedd2dec9843c +2eec92fafe755341b5c2b0aa3fa058da19b178a041ac3cdf161f1df3c506 +110fdd73c18af469090aefad97f6732e4478506a901883d1809359513d7c +bb2aff861ff164e85a79fa1fae05fbcd6c4b3248c4d7d9dcf3ff4ea043b0 +9e9a8b73f108ec6873d7de2af19598798a1e2948797270ca9d680070b2c4 +cff9e32bf2417a6813098943ff603482c834a38ba8d10b16a26e195b41f1 +66dc801fe2ff73ad06165e3c48281bba7c5ac6c6c09774362af43726f85c +ac8fad3dccff8c7008a3bf70265abe55a724af89b740b3b8f464ad66db80 +06ff96f44b70a5630729600bf74ff96218dd3865fd472776f0cc56bc02f2 +62f60450c4041afbe70d278e7fe87b4956c3a414c9efc1ef733bf317f984 +644729023b633fee715f438df1b36d5f021bb0c018b838570c1ab4a47378 +6cf297596d0831c0ecef9dadb1ce6f90210c8498ddce915d60d9d0ddf317 +0415d5788b83c3883ff9968c9875b2f8f9be67d847b07a4143605e9cdd26 +f84486d0d8014ce92ecfb99bb11ccfc40efe0019383cf75e02f132b9c552 +6da2286619ef4904b9537885b4fc108a295fc33213cfbead8cf919c20b7a +42e5d1e389899e132428f143d5ad323c4890fd80deea0e1133dd64149eda +5ac5c123e24807ecc7ec529e5b5fe77fcf4d199f4ac1f2c37fa1f70e36f5 +a52faf5e28918a4dec9abceb374a2167601194c2b5b44beeb01e3203a82a +0378af4be9359d36b99521b6b93da7a297b1dc05c54edaa035b5b10000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA5Fo00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F10 0 /0 F /TTA5Fo00 mF +/F10SFA F10 [250 0 0 -250 0 0 ] mFS +F10SFA Ji +4218 2806 M <0102030405060708>[153 83 139 83 153 111 97 0]xS +25200 VM? +11 dict begin +/FontName /TTA60o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb220669f64824a95af9e1 +b7462e8101f23040cd414ad1ad5fc3ea20cd2b3e75f6ba5e360e7705bc89 +b2e3bf9d3e15ae90366dd842e27734d8f0e0c27a6a076b2c59fadff0ec12 +8400f2a8d05c969a3b3817ad9f981ccf8ee6cca8c5236ec32d047c5cb595 +b4e3e2bcdb983d7b14810f4c5567975b7decfa08dcb923d4ef76014e6ece +7119e297986961f7aba4ad98225ea6c1ed25b02f4a2f325595b8cddd4d10 +085bce5d2dbf77aa0a40181d2bcafae4abe0b0128ec44e173da86ed26fd2 +b266135f3566bab3a73a2358120237add2d0efb4b62380f68a275d6ea766 +2305076aabafd83c161527b9200a8c64465680e8d626f3c9662f5aa9927d +69882070a476dd23399cbdf49c8f6da83cb53ffbc2ab9189fb529a614652 +75d93d4a2af2a4bd529a88a496b70b6abc1a72d91cf0087faf95bb6a9b12 +a1d3f5c69427ec3b5117326196458bebc4a07bf2ac9228381defb84d565a +104d1a6587062d03ac3c58f6ddbe8979cfa3de980a675af65c303b63e181 +a015445a27b3cb04b1635773e8f0c3b6c95b8a844b69db30b74ee4b6f1d3 +8c9439aa9754161e65b5d4ce67f0809e34167542666410a3f9c56253809a +8dec6dbcabf721c0d5ca6261144924a302842e973846e6f6f50494bbf814 +4049c7cfac9be4774d06653114914308033c25e328af5a4ab42541699492 +fdc3cb7a1c287c3b623230b9f083ec48e34f2857a7bffd03e90700183d0b +0f8310b4ada2d2064bae1b46c72cfe83ad9e0e818d1d0f3baf70c228817b +9ec38a785de8d17ba5093765b4bf6c22d6ba40a9f9d80eadad352b33befa +92a99829ff3f7d917dff22e221617c80860b8057a91ca0397ec4147f73d7 +7713b73da270437a982c2db0a0a45ea60d7108c3ee6c998c56999226149e +dc27ff93a4562b508c2b2d36b7504f4ccfa9f27c57aba776456575e451d9 +510ba43a472fe0cf34cbca5b5d83b4976d9390b7fc6dabf21c227f4963c2 +24f01d8f5ce06ed8e31b293a57a762c62db3ae155710d0c792a78014ab1f +b0d4ba14f48fc5c0150aab1cd18e90e4a1b826a36d25a13d61a73e353db2 +ab6c52f562b648f98112997686d7f9cc9b091e8780e3bfe7695bb967d0c5 +9924aea5d79734572c3568f27a4b53722882803cccb3eb6bf8e71374963a +3a89239361796eb6432d4dc63601f05b78a250ce6ec031c412c56d5e243a +7ed5cfb66b44c571d5ecc8b5be209ae1a00acfcb08d949bbc5c382e3de92 +eef300faa0b505282e9b58e82301f42dc79752c3673cdeac3996534c25a9 +56ac8bcaabcd5982f6cad6b059332ab3b7dfeb8e74c4a6fcf11f9f7595e8 +6be17bbfeb1d1f4e1552f684259ef3bf25443dc82c98a4e5670a9da1bc38 +1daa61f7e58e768fb26ac57cf76c1854ab05917d6e3f366d241a3118c31a +b39e31597d4f8b4591a5725ec081d83ad3c9229db25a508a9fbc5030fecf +4b86a246d210caf9969a2cf191db0d4ba5944d0dec317f71a58bc7654817 +e703e9af9eb4e6941db44b1344e631067ac9301a3b5639ca77329a8a733d +e53350ebbaa58635ccb16892e56162a564e59ba132f921477e1bb7f5b84f +6d9a131024895857a972d3dd125fa7ab1492486dbb3c219b989cdf51f557 +c15999460b08993c599587689f6af0650574123a6d97e293acf6f48b3f84 +2a159a71bebc068ff5a5c890ab433080e70a734d75f2b1a3c4c110f871cf +8a1a31b8491a83841e02734057361ef04c844da7cb24ab011ccfdfc7e8c0 +5afc3cc8e268965810b6d6a441e2076da2f739651cae11715fc8409f735b +c4c553c2d12cb4744a448d135031effd4b5b0611810744e162e8b81d512c +63faf3d2c4c02803cfc42511419ed72b575a70ff89e1e8cdc387ff0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA60o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F11 0 /0 F /TTA60o00 mF +/F11S10B F11 [267 0 0 -267 0 0 ] mFS +F11S10B Ji +4188 3109 M <0102030405060708>[163 89 148 89 162 119 103 0]xS +25200 VM? +11 dict begin +/FontName /TTA61o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22066a6b46d2cf1e31c8 +8c173203a6107d2397cabd68bbc408288f57dcdcf1ba25462a21c2a280fd +4872197251257cb1b5a68147f0eab49c590d0fc4f101316f75d4d0196e5a +ac34d7d2e9511628ac0fd24e6ff645e5c987e3cd80b41ff91b50316539f1 +945b229cc2b0fd7a67a73172bf84134051c7dbf945bf36c21b55175b1c6b +b36f0672f5737fffba364f88ea1255b73fa8ee6092bff85991d33cdca1a4 +a4cc23e5faf71e692c5041decff1e6b04eae13e98ece29596770a98c895b +225dec5dd89035c2f378a13bab71727eefbdc0cbca7c5ef8cb35ce7c1e21 +a20987e02b1872227ac2149890a99f33e4c14ffa2a0f7f6af0b4d8d559b7 +7d52407f6fb4707a7902fb4d0930e09b142a87df214434e7c49a95b20a64 +91cdd7994b2d38bd136500f36657f6ecc27d53eaec93089e292291d9296b +891d30464a04dee7e4c852933e00e3309305809538c0c3b9a9edd7626aaf +6ca17228f379260e938512ceda67808ce4982b30312c8c2473d4a1727cc2 +742d35ab6730e4a615192f13708fd9c9e9fb65aa18e78a1698d1390dd1b4 +8d828d743ccaaaba22181d326cae273cfea381ae1305943dcd8fccac4d04 +f7a53d9dc5f61d9c6b34f33c79abceb357e6540cbe4b49b0cfce43f93f59 +8f0efa3ab63f515cefec093c13ec8df9b98f4502475bd4859ae19d8a2a2e +1ff887cfd300ad50dc620ba7996ab2d06a330c6004fedb3d71958efa0451 +176c4b1e3afcb48c6560f0e4fe8a302c7bbbd2fe83a4bb54a114a1883058 +48dc2965f310a9d6f4ee9ac19a486b987fdd9ff596013b708e29af08ebc0 +44dc8fa57633da7ec675fa00a692161401fa16244c96460f74549e8daebb +940f454dfc96316f14ebd9fb9c1d86e487175c282f8c5b3008e378695789 +fee70e0ba828400cc3fd62f10bba3e50ae17105c7189ce026e907621fd87 +07a4cd89b4516b5af98a1addbef0ee4bfccd1f306835b2fbe716187f3570 +5ebfb0e16f98cd24a78c82434903f09e5b0e78c02a43d38bbe6f221dc88b +adf8efdb08e0ebe4608d4f4392d4d9ecfda871039e0049f0881bbd5722d9 +3d3f784c628ee9910cf824854095a75255953ac6376e83dd085b6741d35f +604b09473df889906ecfd22a9bc759cdc9d1ee7abfc75213b1d495e4663d +4e722b58de4d50671c19cbc3a4dbd20ed5e0c6567ad69a0c5203a619ff58 +ee3ed1a9d77f10d64a36ba6f89a629f9ffa2a4f1fd2bf2affb4204d5437b +540625d7daa43bb790183fbf524d914ac18817aeb295da7b40b97d3d4b89 +54977054e0ddb9e00c4679651b905db04b1bbcb4017e4a666154f3c2ac92 +5db40a171cec499af9da1858234e5e15c4c6590c5b2eb366c9d11b3ff86a +937e896a0b8d42e1aef576893360709ff76bbb3baa4bee49dbf2f56b84e9 +d2ff6ab36add7128d2864d0958598d86c99eaa799662120463dcfe373e94 +c803657a95a5aa31d66e4631f1a09f9a47bd8b287975a71b42900bd8699b +9730e1bf655c0f68dea05dad22d99852e444d801a2ff17de73e9ad49a996 +c6b23cce82b661b50776d1be87cf5e16c7c88302824f56dd9eb5ece935f4 +f9a43384878fa1d5634f727ac6a6dbadb51afedcede5e3832e91dda9b171 +399d4f7542589aa47f800feb7172c33a426b58499488facaa1a51ed5a8de +3acf21da23664db141de8dc183042b73a96ed18089c0bb4a890614cd3a2f +3c4911c131221865dec83302116d31ad9527433038ffc8d0f96f234ef5e8 +ac69c6d1f5b9aeb3f4a0bc248700ba99bf64aeb07bc7f3f368512c77aacb +5ac234f9386079b6a20d9998967044c40a948a9eb53c6ba443c39797f1b4 +c0f6d1903d61beff8fbb0ff303f0217db50d3bf6b4b8fad466d1ed0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA61o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F12 0 /0 F /TTA61o00 mF +/F12S12C F12 [300 0 0 -300 0 0 ] mFS +F12S12C Ji +4128 3447 M <0102030405060708>[183 100 167 100 183 132 117 0]xS +25200 VM? +11 dict begin +/FontName /TTA62o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22066a6b46d2cf1e31c8 +8d680a80f464f13349e5689a189f13dd0689e85869e2bbd27eb19374eb38 +071897af922bc3f8ff6b7c3fca4ab2bbe308e84badd13a5b927c626da36b +1037fa38a19ada6ac72cbaa7ce1cb85eb111d32a1ef92b11aa069b0a273b +48c617c3358281f67bd01a76b549470528570b0c4d05b950a91475fe2981 +7a0c2bb0b286c50881f2f950fa93bf9806ec786b46525ecce59f4443e75d +5d7985890e7128177ef8e802f1813332aa8684a83067f590407c2dde2d71 +73e14b887b636aadc7fab122b657dabd4046c48129a3af1103f40a16259a +eddaf0f051e1753a1f3e3689e35deb19a06b2f3b85dbcc93ba0d60c5ff6d +68160e7e1c576a9ffa0ab3bfa64730821ccf4ea1fc95e15fc102c355d570 +338a9b5072b4ccbf1cf9392f81cc77cb641160315c4e0633ba976fd4745b +687108d2dcbc28a4223c53f842f8f3732d98ccfe0db81dc11ae752887cbf +9b3a755f12ce22a69d74d5627e1cdfe96f7b6170185a428fbecea6dde1d4 +319929e215abd940ad9817fbd2dafbfcf71a02213753bc2f771deb3397a4 +52bc2eccf72e56e569d6c9d14d3ddb28217c69a621fd8f214394d87cf834 +3f530aa72a28658956515e3a70acdda0f82ac1648b1522aa1c30473fb36f +b54a6abc080c88bef7463200bc3b84fca38f4d5e1e3fb1f8a7793a202cc4 +44b5ac108f2f5d1fc9330975186f2c35636f0eb5e5c4e8d7e20ec2407ba2 +0ab60aac449ae735447a0bd83c9f649a025f215ca3d2c0a063233d231c80 +f2d81d46c475c8eac6103d9711ce1dd986645286fe0a7d6bdd0b854799c6 +2078e169bc4bdeaf54fe41e9feab27467ea91ce80a9ea2526c0305727a5c +1f010c7bc04e3e1e2719c2c67f2beec0d90c6248f7062d3a86223dbf2f4e +6dd858ad111e2fac402858eced9ea7c78d239b791f448448cbff2b9b8fd0 +d7d373837195d94f69ef6acb0b58825d45f9494231f949f9338ea5ac1fe5 +e78a485fe2d456bcfbfc77d6875ad95413cc0b05f2fd0b1d5d87bb45adff +aa97135b0699ae511381c1092d5c9f658f33bff078fdea96425ffd5320c2 +675fc8b58b96f02b8a63c8b0031843430324f55d36c42d9e4a242afffbf3 +f5f5ef2d79584cd9961d62978d8f5b5ab9394b9ba4e9cef9befe2c720a3a +15e7a4213221320284bfa64ef6eac7907d86a6c4b4a25747ef60d73f889a +5fbeb0cfcefd06df792a9221ea8d7a63d331c8c120d95b148eff4395527a +cd9279d0cfe32ecada854c38c85dae0bd54edc6631aee3a5c563a5553fe1 +487e1b6474dc60916f5c26baf2f306695972475809fadd8178ebe0b3e6b4 +98995f5e2f34779a6bcf317ff8e18af39b8ea02426259c38610fa7d4b994 +247e4d1a70374fbfeaed6fddee1b0814535125d0501ee6d5852181262ae9 +c50e8e99460ce2a96929e426dccf8cedfbebcb7845fdac62512145a65636 +4f48c63755a860ed7f0619f80ba6d057960d0ef012c5c2e8389a89e5d32e +b8a80d3bf67ef8d84d2c2ceafaaae987ec4030146eb511ad6b2a729bc2ca +f48cc2d0534b88bca04cd2d60814a46528d0e5e02e933552f1cecb6c5b58 +8fd53c5a53f3092ade44eeb11b399f6a3b90c52fae04861e23ef6d113547 +56f5ead2292e1b05a3fb7c85d6911a556f26a22c15a58c3fa5e46886bae4 +8d0a6baf057d60f763b1901866542e20425cc12e0203575c7f133ab80ffe +5b222bb798ea64c93abdf1b85010d562e35b3f24064614df3942d90e6c83 +0ed5570bef45451e1d1c5fe32cb9efca3ac8e3a6abacc7c75c02db4ff81a +51e792507e2d45b4685f270e703d63e15e0c7dabacc30e7ac546fcbb588f +1043bf9214d0606f29b5e11013bde03b272216c8f7e0b98f8ae9da0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA62o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F13 0 /0 F /TTA62o00 mF +/F13S14D F13 [333 0 0 -333 0 0 ] mFS +F13S14D Ji +4069 3823 M <0102030405060708>[203 111 185 111 204 147 129 0]xS +25200 VM? +11 dict begin +/FontName /TTA63o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb2206158487fb3119fa92 +a8a86034818e39ec9fc196fd03660d0897479998880acfaf10dbf270706c +28fa707ce4dad00c8e93cc045f9a10f475da3df377bf5ded23dfbab06e55 +cc7d6cf560ab7dcb7eefb7cf36eb09d88933abf76e7e0394c20619811a51 +443bbfa69c436e08988379dbefa860397a3f0d85b5036475ef5b3ba59810 +143f3e33c935c2c9125c1df9354d17924ca77a47a34ec1c15611c5ac9f6b +56e9758d7af90235b8ed96875cb14e2323abefd86a36c74bc59eeac84fe0 +d013f3515cc05c7e5f694e9fbbd43f931d6afe14238301aaad0a3c19b198 +b1efec19f875db470cd5db8b58d1a9715b2e1082fcb22755ed511d03db7d +026c3e0b9897db3d94a72b9cccc5a6460baa0834eb22c9cd4a783353c578 +013ecb0f00144828def066ba832978414b051ff879bd7aa2b1e60ed7b068 +7564600d3b11ee13d514044212f44c470186e217cebcd796acbfb8f18a5a +b262054a3ae208111ea1daec5d7c42d978501a3a924f6acdcabc5c2483b6 +9a708086b1f1477f78736e10664014b5f7278c223ad56498da95a4be6335 +a2ec179f528e57e99e177cdc7ee01f27e41cd84d37adfac2dc7bdb9272a0 +7ad37ac91ea2c5b6801d3f62417e87cfad0f483e9bd45e55c4cb4911f711 +a55886fea6300530aef55669bf62569d023c1ddd2ba2d038296ba4b6234e +6a7fd36a75b2a372f98a1ed02aacaf6506c2b8deb73aff137aa589043226 +cb1929a8d09ad7dfff5312d1c5a3c5a13b48af57c294857ccdfbe5fd00fe +24562fa7040ce5c75ab6ec8362b0fc8de4e7d7e6faeb8b3fecd5928ee6b7 +95c15c7fde8a021278bd25aa236c5e7b91421aaa11710145547210fc9ea4 +5cad7bf0899e082aad912fc701a087a9bd85560095b9fa079316ae4ff508 +e33daca2e55f687982dc50603d7311a9cbe39ab38a73f5ec2b4fd3b46775 +951c0082b5f434756251fb779103b284771c9be4047024d30194d9c338ad +2b1958e7137e74fd3cf1753a68f030d1e48a99a92131937a7f494fd3bdd0 +e707409d2eec84e68de07225866f2401a10cdbf19d28ce0e2254161604a4 +4e74cf7c6279d55d39a548121129b619067b8d68db383f32a065bb526c24 +b02ef9a9c354d4def81020323ea06c93d647e6fa2f221b047a7ecc8198e3 +cc5e16865013bac7a20500895114c5d97de0c9a3726f288a42254e2204fa +14ba9d4fb8f1b4bb44841d3d70a6d754b193d701d66543798ab1d3e4dee4 +9e89b21b31f1c07a07ab948a70bde185c4101d3c9e361eb67c255f3bc5a9 +0c89f81def08d4180b0d5e8d0b212e545485fea50427de790af06413e931 +4233d87df73e012d343f71b3a4e0da09ad443e47b0bb230cb7cdeff909ca +ce2f15b2e2e1807fde167179540fd7e916b69f0d277cf0f91af017925581 +d9a1d66c86d7834f2af841ce657288cbdfcb6c0d07abdf6a0699fb8f73fb +f5d08ee287c3ce53312842e813ab4675b0d072e1d152f7758cec3abe9f68 +62252ceea015b7587db6c081fed9efae5da5380a3ecac1f0a5391245c28c +9f6d1f20fa547aea71f89fcba2d979a0215776dd62d4790f202b36db791e +ad6e7b6dce1612ca4ac3d02d4aaf9322d34ebd6c37e0bdeb11b9c82bdc97 +5ea90afe2d06ef815b2ed0581666f7e3bc9466a68d51e1bd00c8ae6bb94f +d0fe97fdc276f28d5b9c0200492cc41d53f21336bb0e660e1b2758da5452 +bf6f0638b9e50224c3073622767433c92a9ad7a79b1abcacfab68a0e70cb +5353fc54f6987b13d84d79b5d954f7b3603ff942fafc4460564d4582bbc1 +3ca21e59a5556335ecc99f3b78a254c52ed6a79ead46d6280e91a5641e67 +a85529b255e42dd69656fdef1ece30227b328d980fe6082bb624960000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA63o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F14 0 /0 F /TTA63o00 mF +/F14S16F F14 [367 0 0 -367 0 0 ] mFS +F14S16F Ji +4010 4238 M <0102030405060708>[225 121 204 122 223 164 142 0]xS +4010 4659 M <0102030405060708>[225 121 204 122 223 164 142 0]xS +25200 VM? +11 dict begin +/FontName /TTA64o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb220616fc35b8e91f4411 +23fc68c58b5f46a1f1275e177c6aa9c2eed0243cce590e527cd2227f8444 +14cf47b571f571784ce9573c21d7d38a8b1f3b5c5b80564c328122627f3f +ac24de4871f2b61b498c1035317868d10aec4be63ce71d6eb7894d350070 +e2d3bb54ff08c43ee722e479e9be36817aeb0f94485e836a5e505477047d +94ef6bb481178e2636db057ffe2bd6ba3de8544935b3d2c20e99196d9bb1 +847ed930b62c48bee95c908968e4c681545cc28f60f97ed41399a3615689 +6de5fdb9d0a5f0abd2fdb820eaad1a8f08dad1b1f440e099959ed4d516db +48ae31477b68fa2908927032ac27a55ac3cf78a5e7be83075d2065f47e20 +a3a47beb91299bf9bbae879b26794c0e5cb4e680ec7a6dd1498e36f1fbee +8a4d52c01ae62ed702f0c1f83b39a7129db168e37b5dae7b92d5622ce8a8 +91120de77d44f809ad1e6cf23ac58bcc4b46524801cee0f6fc7c68d33c86 +0d7ff13d43bc160567ebe1da324107967ed860c79364f8e8ad1ad7f0b0bf +36f35eb2d1ea1fada92cd8ca58106c9f57f5d9ec3562775df931dd704510 +02b9edb700fbe3f89ecc31417ec84400756e2a243bc34393908dcca3c0b5 +4dec679d743a79ce99a4c11236b9738f04e0cb5af2f57ca5fcc258a0a24d +60805661bfc9dcad4e514d5089a67ed3f9f73e39b2c1e8e0f9a48d7ae38a +cf0c1822d730ac58cc5ed4094b96b1d42bd7a4a1493f712a6d160a6d71df +28e64d9e168b21f188b034c1163c75b0e237fcd7fde9216848d62075c3c0 +3e332de3d9078a9adafb3667a456abb812ff43738c70ab9954d70541a0ad +823bef3acad4b39195cea348d88a6992440ae3a11e65bac8009eff46d52f +ab715920e8be65cc950b41190fc3ec3eb9710ef499cdcb28b288771a148c +2c68140fbe14229148989e5f0f57de39659865c5514eb54cf7960fb50c34 +5fe43eaf66c115e73c8c7c344c0bf8af82c6f3ec5bc2d4804a8c30bb135c +783b2b4d782235e4734c4cda9fccb033396448b2bb417d58a06168044397 +92b816cab67386e1bee2d4a4fe0f1581ab509613c5658f55e769a7eb49e3 +a89a6d57c389cb0882d32528e2545f8a48eb3838b63974e74181d68d27fb +91149cb2c362e7c1abaec89872358cd66895a6eda09a1fa84c234ab03c7e +8bf1e84996115a76012491925771a863d27c46408ffadc375419dd7a90b8 +943b79131747572117d6d98eab875f4a70036f7012be1a9fabd106401489 +e16c198b1fa9fa9b5ed0b0445f00fdbd577ac1534112f51510f74bd87bc2 +73929005be30c102d63b7251697512806da51bdec65b624d8391f29dea66 +9374ff3b6eb2b580e2735de61a835243095fea770d56c0643c0fa15e47ec +3a2ae9c8deecae7bde01e68ac2ec108fe23f3370c2823598a291cb7dcf13 +e8174b1c55f58b1721904f7f72fd3badd8bd0c65694608b7cc260c5c4801 +53e32fc0d340ab604ac10fa5ce26c0d03745524deb9fd8cc7f9a1bcd050c +e0cb6a842dfed52761259fae8ca2e2ffa8e52fb637f2db6aeaec66c1017b +64d6432884399931893f49fc96b719c7650db46ef7743e6ae5e062c39912 +5cc41866ba23c2ce5af2dd0896514145a2aca6d4ff8e71d169b064cacb3f +2cab77b34b2e7b6efa103a0500bf02453e327ddc59edbc07a8feec4d25e9 +dc9d86f7c65bc872188da32ed8a0edaf431cc32abb5672fb61256d55b6a8 +9da111703d609d59f8bf4a34cfaf1cff1b711314b8cd50b3eb61e99b9fcc +03e121448636749c1289a892ef822771f7637305eec6f2a799ee0f4ab30d +f3599ff553d7697408c67abad9f8131e141e2d65623d89574472c5baaacb +df67ea90065c766f01ef39449eff529461df1673cf8d8d818ac87a760000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA64o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F15 0 /0 F /TTA64o00 mF +/F15S190 F15 [400 0 0 -400 0 0 ] mFS +F15S190 Ji +3951 5112 M <0102030405060708>[244 133 222 135 243 178 156 0]xS +25200 VM? +11 dict begin +/FontName /TTA65o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb2206179c29b10360f66c +a9dee7eaab7087c8834ade2a458dcbc6003210ab90663c579b16d5f2ce6c +289056f18bbbaa7aa904d32ae457b267501aa32481206d0540c6bba57505 +8694477f31f801722d806719a2a318e17e8430363366539a22b2558b1534 +bba96abc799d72b761a18b2c5ca22c2a3c6303914df51cf07491bf3b7244 +369fcc5da2eab0caee099fbbb0e2f438e76541ae37f9f3d119c621e5a51c +a572a7c5b40ecf16281499ddc4df140e69be0f21ab05feaa553a96fb69c8 +d9b701aa432358791f0efb0ab57c37135b2c1d1012b3a87c88a1e8a1a275 +3eed718bcc969bf3d5875adb9c8b2200564fdea69b4caeb28e464106e61f +c5187d0970a0e7c36c269bce3bdbfbf22fd4f1bc331689d1530bb268af25 +c45973a5bec46df80df4f0508ec729d165203925c00b1c73901afdee68bd +1847b34a10e20895dda626c43113a6e11c32bcd477c84badbe23b0ca40a9 +4f0a0701a2edf14b4c675f538f80b98275c1f2c13cafbf673b46324465b3 +544c4a0dd3800d84bbfef594166bddfe875cbaaa9516fe53048319233ad7 +d73686dae086514c82a1d552d1b8f3a6df1b791fd32a6a283bdd970fd71c +850f34658e75c599798ab218c3156a8605bcf9d515ddc1b8d0005576767f +a29d14f78c241c98bbfcb13a5cfab805430803fa2c55076ee34a5eb931a6 +a0662c544d59541670e9590e47ff41453b3c561c78d712d270fceafa35b9 +0713c96a1ef5fabcde661f0989d01a640511c47de583b8057d975c2a1730 +9a663389f271616151f02c0eb8e072251bf1146ef961ce587d4a486c6848 +549f331b2ba7c9088f24fa105c4f2389debbb3c7d4368b838809bd4198d4 +b617b420fa507c503ae5c217e416b927495842333a8e251fc075be16e338 +51d62287e9a272f4843f62241e508b952d45ea728574320b996861f06f83 +5e8028a69dc579fc660dcc6afa67f4f47f94455cd2b29d326b7cda83b9ce +b204d080adce1134af535bfd59b989a29b9b84e3c73b5f1a87068b892236 +23efc8cb6f5677417d1d3cddd5d367fc20895ab7671d1e997b5f12668062 +c18059ecef3fe26c4b8a8103bcaf8767f1311bc2866b2fd0432208e63020 +f41007d7a9a43bf0a30eff53903299c2d88fd59163f9b7415653cbee5a60 +2c50c607edbf1bca3157aa3a013c4377c3b5088ff717e794ba8949e91a85 +e204ffd57976d7de79e70409e3a6cd0c180455719ed09ebc5888a175dc20 +735e3c69484fec32ad88014bdc0100e62455a6ce6be23b6e306948c9ec8d +98ba3e89a4858f7c4537908e733840cb3897529efe2bdda4192cae694ea7 +80edfc2c1f75d01b1a9c911e839f0776b7556e85348979159c2c1c9f1051 +141da74db4bed5098c80ff84d5187ca88570bc6f512f9a204d093cd6bbfb +438fe9d062a41575a6f8a5f7b44f9c82faac321ab9f4850c0803148cad84 +b339e314ffdb7c8dec381e0fdf3c3757d83102e26259909c380537f66182 +fbbf656daf939e7db6c69bfcf79fd281931f02ea1f33730f42d735b18496 +d6d9f08ebcfe70c55d966f671b28e9fd10e1b4151782eeeaf357f95a4319 +0d5b124f60c9a9c9af2d2a3f5c594f00628c46f13637d205428c4ce1dc88 +22e4d41e9fde4b177dd60e7be2fcf8d14d1f99a996ffdb71d712f22a91ef +8060d241b397dccad9198e5134d69c2ebb566cd530fc7c29a7a70d2bcf7a +d30c7215b65c686e676e1dd88311cb0d35d2e3c13e5a7bc1df44275fb7b0 +8a801c63f17e987643c7ed845713454afda90c825f0af5d8945429115a8f +cc65d3c2372ee22d1eb7764484ab397862e8c448479d4fdc5ca1d18abf5e +6b0b717dc116123298a80f59db58fa03af2027b2efbb59e115c30f0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA65o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F16 0 /0 F /TTA65o00 mF +/F16S1B1 F16 [433 0 0 -433 0 0 ] mFS +F16S1B1 Ji +3892 5602 M <0102030405060708>[264 144 241 145 264 192 169 0]xS +25200 VM? +11 dict begin +/FontName /TTA66o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb2206689a2c7f31fa5794 +54a6cc5be7a453c42c272f1015ef94322c3929a0ddefb938ab1522150251 +fdd9f6b70f2e773d4f8663aeccb0bfc787064307fa1dd2f8bc4dfd5c7205 +d9853547485a8d4f01ac00b1b09d2057d65671f1ecfa41c8223a5108e94e +eed8977391d4cdf5cc5898097984dcead7d3ea18561ddcbf4d05252b668a +16e0b09a7b46807271a79103ee35cd33f3f5562733fc8557b69e1eb31acf +17667bc44a27417541c228ececeab7e30fbda792ffb1d12490b7a763dd92 +7feae2dd8a29c69e1c33dc198ff3d1cfced187c07e67b604ae0d38df8d9c +f97994f52049867475193872d41dd75f54fd685f66a9ed9804118499b261 +00ec06d93e56caf1ea7fd932421a7b807451acdfe8b949268673a769babd +2fe767a6b050b34ff782968242657ff47cb62cf2a1616c809340e4fe22eb +ad2944863557a13c39e581d23eac63f64dfc9276c0341b148f86cc6d3116 +6bd106f158615eeefc789238bf3b2f9ecfdc343e3afe48ff47146aa2af53 +d3879ea5dd09f2a25db26346d5a113284a48541d9a940e9f8b9ad98596f0 +c788a3dcbf41c177bc55bba52512f887b2c5e8776efb804942e49ecfa60e +10b3e0a6a136e6da02b00b7a95bf805508eb0275a9e243b68c49a8554717 +3a1f750f860d6b50681d877660e47696b6a9f70ee9642d77678d8513fcc5 +da51a824f7a7a163b3416ae572593eb6e32392e6c4699995a1da11cc29c5 +ef52cbe73f49a3159c031ac87bbb2336e3d2618537c01288ad3c11f8f837 +aea942a32f1a9388126758aed7558987937ba918bb20896e46f8b80493b7 +827603e8e11953a56e2d406baf573f366a6c325d9585a36232356c876d22 +38917e0806d2de7624cfb33d7c2a6da2aae20ad18a8d5738d747b5cea624 +0bd371cfd8e59232a1b8f953aafa3065d393ffc28479fcf15350375753e3 +d8d4169d64023ad9200881d358cad783a45a67ae18f81263f801df120e8c +a9cd4636fd19024f4d7d50d84a4dbef10941e5b86650d89013c4aadf1206 +411b1c84e45f3baf8b5984fa9c5043dda578b736a14bcbdc7551a0fe7e62 +2e5055da5e7b6df296d868970d9589482e54edfdcd380850b2877f30d6dc +3fb72877575c1851710095b46311a4c3dd769809e100ab6dba6e80f4313e +6417460d7d99dbb9002e876ece579b6479c49d248050c5530883c07e5720 +b72e1543a51f7878463a760d7160da57b2c7cdda23684ba394f4fe456487 +8e26926386884961ff02a917786958ace479e4d34b42174558ba65e5feb2 +3708dc192d0ee9ffe2fc272aff62b3caf0276f66d18f838fdc15adea9faf +86c6e87e48c9997dd940d6a3a46063406a40f2f44758df815aa75453a10d +254f082d5abf98176fc8340a575a47b93d3bc46bbb2790d9fe6d9fd518a6 +fb3b4fe9331f2ba68762cc21c15e4a429217f86a26e802597785c3354878 +653c0c48ae31cd5eafca143ebe4a5ea475b5f10e658ed07cbc1266547d12 +d0c62598e3f3e802e53d0b99164ce825ac5165aa3e9fd4761c5451182e60 +1937322daaa63777230f33f9d45d638d32f5cf61868cbdbaf3b056cd9bf2 +b496a029387dbf63cd6cc636c2cbf3ce0c07e518c521f7b4fbd7b619f4d0 +7e9ffdeec465771a9ca8e9069f52eaa88cad66d47092ac1f5f52be036aed +d2d6f36153e22fa251aaf8b10da257dd14cb46163723013df097ffd16c33 +ddb8d3a4dd2fc6545550e4081ae70de8cc65a83f220212744bfb58cd2cd7 +29b17f2b842e4138a307cfa37adaaf9178ee510e2fd3d3f43b7efb0ba3f7 +a59e6ebeb4f2a35e908016cdf0383304b2cbfd02769cfd5ac9d8eba752f2 +ee6b8cf7287ba98fd5b2cb0e61647483659cb6b97f1ac442dac87c0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA66o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F17 0 /0 F /TTA66o00 mF +/F17S1D3 F17 [467 0 0 -467 0 0 ] mFS +F17S1D3 Ji +3832 6132 M <0102030405060708>[284 156 259 156 285 207 181 0]xS +25200 VM? +11 dict begin +/FontName /TTBC3E32E0o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb220669f64824a95d9550 +e6b732d24163e5f1f14c0d8e68bffa74a7e923785ab628ea1b858f9c8898 +aa3a6a215f95d69b979cf88a88e66315daccf6b3e567737c55e3cf437e98 +6959eca072eb5947c0a09809b4d3d5430005f3fa1b9f519f0635d2e185f7 +4e1eec5a19e358c5609375ecd636499ee362b08643e4c00019c76096365d +ae34a30b033cf6378a4a47f08172f46c61310b971071ca9fcd6dcd1b9ad6 +63809fcecd4cd2183f3a5a9de5c683838022bd1362f59a5b864d29a4d185 +4ca19a30f903bb33d1ca039f71e2039cc453297c2bae1af6d32d72092a4c +b00fc35b50397d28064e83425bcb8aa2802cb275252b0e70d9983b36eab5 +6caeb1305e4f95ac5edc55b2d2ec626088c80766ae22d5f2ed6bd822b754 +d1c1004291d98617b4ea4915642deb170ab38bcf01dbc7d461b8c4bbde17 +e6745cf0bc1d064418fbed78f744269daef38817c6f073c543dbdf219dd0 +1846e629428c6636dcc0d80038222a8ef4fe9a380b2f0e6e2c4bca8c39fe +f4a6d3b66af29ba79996bdb5389abf14ec305653c6de8e1b55effb93dcf6 +6bcb0eec3c735bf981b03907a3ffcb25b51f3f6b7632ca38e91975702745 +98993eaef2ad15901aa3ef965171e4a386b664bd21f943b3482afd2c1412 +151ad3e78b340945c8c5faadab4d79d6b3e1017cb933af412dcbfb368b7f +4790d99ab75ad1715248a31296f12d99ae05aceaa4d28ac45fb01ed9abdf +c7eb1ecb1de617a14454f6ba1578cbefdadcd3684cc47b453c763c730436 +8f32d78e11012ea6d3d16ca5bf67951a742d405591ac3ee6d5164e890891 +e10c21777eb10661f8c88e5bfa6326d51a8ca574f3321b5cc05631bf331a +ed2f169a77e8ddecba5e03eb7df19b634f20a0353685b98668fb79295051 +ce2ccd8487a1d0da7d9bb3dd3cb1e3df220fc81841cbd0b3719fbfa27809 +379e5f3e7900be85b9e2bee893085d9bd17b9cb7174367d80bc06d7cb841 +566f2ac1d0e5a1f01dc1cdf58195977393929340b5746f4bc1f3e3ee6f5f +df3941a5deb99672255cabaac0ea3657a449c28267bc9dbd448fdfe12b52 +fe91ed89405246fe3b6d63c89536f8659fe660ae005adbf01c3c2729913d +2117f8e2dec91751be554a057dd7998e15b9d02377d6a6d5c83b1091fb8b +1c7c358f13b4dc00839db3fe4cb9163f5ffc725b1561a2d3e4faab96bd11 +bcc159c4be2dda581cd695dd41635fee2c8b1e5d8dd4b35a59bdcc368ab5 +9bb2ce9799ca98dffa60212f587b7f99b3788f3b052c7a83d31ede5e21cf +ccedc821552ae0faee16444c26e489d37034f8ba4c811ea5728bc16dcf9a +217958e8f745e87c917536ff3899b13d00bf631cc449eda3934a726bce8a +154519d6192fe111443b7d039f3844f6a95bc56142d31970ed4a8e7936b0 +0ff7c795cc2bdb4b82616d7fe32c0a76ed3dc837b238905ebe9cf2d9bb7c +62bf9ef3fd62d6adbd8928e5cfcc6e01ece9fdc2496b7eaed14d0dd56d31 +123b9ff1712c0e67d00c73ae48d61688a2bb8dcbf8a5a8523aea76f8f107 +554df15d3fc6db019c97efcd6c3cc837a222851ed21e92e0c658a556f7ee +52268c8787600227471918fa7e32d787c76277b7eda00bfa4fcd5730b724 +20333168b0b79fa2ae46c639399cfae05eb45df153448d831698d38be55e +1aab21503e8011f9889d8ed64e9d29ac7e298f1136d7cabda06b452c1257 +5d655523016b8302cf0e2d66b310f6ee0cb7e725752b4f2c346b89f98453 +b2abcad50dac1dea9c9d842fd37a409b73621d99599d9d6fc10d2441de0f +808e63bed2a5d2c2f6b34098aa3facbf6d379b4d1575008ba866446ca1b6 +8aa5d4961e3c2f05b4beb6fc4695f7dea133aba05385434a26db160000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTBC3E32E0o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F18 0 /0 F /TTBC3E32E0o00 mF +/F18S215 F18 [533 0 0 -533 0 0 ] mFS +F18S215 Ji +3713 6730 M <0102030405060708>[326 177 296 178 325 238 206 0]xS +/F18S258 F18 [600 0 0 -600 0 0 ] mFS +F18S258 Ji +3595 7407 M <0102030405060708>[366 200 334 200 367 266 232 0]xS +/F18S29B F18 [667 0 0 -667 0 0 ] mFS +F18S29B Ji +3477 8158 M <0102030405060708>[407 222 371 222 407 295 260 0]xS +/F18S2DD F18 [733 0 0 -733 0 0 ] mFS +F18S2DD Ji +3358 8987 M <0102030405060708>[448 243 409 244 447 325 285 0]xS +/F18S320 F18 [800 0 0 -800 0 0 ] mFS +F18S320 Ji +3239 9893 M <0102030405060708>[489 266 445 266 489 355 310 0]xS +/F18S384 F18 [900 0 0 -900 0 0 ] mFS +F18S384 Ji +3062 10906 M <0102030405060708>[549 300 500 300 550 399 350 0]xS +/F18S3E8 F18 [1000 0 0 -1000 0 0 ] mFS +F18S3E8 Ji +2884 12034 M <0102030405060708>[610 334 555 333 611 444 388 0]xS +LH +(%%[Page: 1]%%) = +%%PageTrailer + +%%Trailer +%%BoundingBox: 18 18 577 824 +%%DocumentNeededResources: +%%DocumentSuppliedResources: +%%+ procset Pscript_WinNT_ErrorHandler 5.0 0 +%%+ procset Pscript_FatalError 5.0 0 +%%+ procset Pscript_Win_Basic 5.0 0 +%%+ procset Pscript_Win_Utils_L2 5.0 0 +%%+ procset Pscript_Text 5.0 0 +Pscript_WinNT_Incr dup /terminate get exec +ehsave restore +%%Pages: 1 +(%%[LastPage]%%) = +%%EOF +
\ No newline at end of file diff --git a/testgraphical/source/CallExternals.pm b/testgraphical/source/CallExternals.pm new file mode 100644 index 000000000000..a0a3b1ae716a --- /dev/null +++ b/testgraphical/source/CallExternals.pm @@ -0,0 +1,539 @@ +package CallExternals; + +#************************************************************************* +# +# 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. +# +#************************************************************************* + +use English; +use warnings; +use strict; +use loghelper; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.29 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&callphp &getPHPExecutable &ExecSQL &callperl &getPerlExecutable &calljava &setJavaExecutable &getJavaExecutable &setToolsPath "e "eIfNeed &set_logfile &close_logfile ); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + +# ------------------------------------------------------------------------------ +# small helper, which replaces the return code +sub errorAdaption($) +{ + my $error = shift; + if ($error != 0) + { + $error = $error / 256; + } + if ($error > 127) + { + $error = $error - 256; + } + return $error; +} +# ------------------------------------------------------------------------------ +# helper to call external php with popen +sub callphp($$$) +{ + local *IN_FILE; + my $phpexe = shift; + my $phpprogram = shift; + my $sParams = shift; + my $line; + my $error; + my @result; + + # print "Will send: $phpexe $sParams\n"; + # log_print("CALLPHP: $phpexe $phpprogram $sParams\n"); +# if (open(IN_FILE, "$phpexe $sParams 2>&1 |")) + if (open(IN_FILE, "$phpexe $phpprogram $sParams |")) + { + while ($line = <IN_FILE>) + { + chomp($line); + # $line .= " "; + push(@result, $line); + # print "callphp output: $line\n"; + } + close(IN_FILE); + $error = errorAdaption($?); + } + else + { + print "callphp(): Can't popen '$phpexe' with parameter: '$sParams'\n"; + $error = 1; + } + return $error, @result; +} + +# ------------------------------------------------------------------------------ +sub getPHPExecutable() +{ + my $phpexe; + if ($OSNAME eq "solaris") + { + $phpexe = "php5"; + } + elsif ($OSNAME eq "linux") + { + if ( -e "/usr/bin/php5") # Suse :-( + { + $phpexe = "php5"; + } + elsif ( -e "/usr/bin/php") # Gentoo + { + $phpexe = "php"; + } + else + { + print "getPHPExecutable(): no php exec found.\n"; + } + } + elsif ( $OSNAME eq "MSWin32" ) + { + $phpexe = "C:/programme/php/php.exe"; + # add second try (xampp) + if (! -e $phpexe) + { + $phpexe = "C:/xampp/php/php.exe"; + } + } + elsif ( $OSNAME eq "cygwin" ) + { + $phpexe = "/cygdrive/c/programme/php/php"; + } + else + { + print "getPHPExecutable(): unknown environment. ($OSNAME)\n"; + } + if (! $phpexe) + { + print "getPHPExecutable(): ERROR: php executable not found.\n"; + exit(1); + } + return $phpexe; +} +# ------------------------------------------------------------------------------ +# helper to call external java with popen +sub calljava($$$) +{ + local *IN_FILE; + my $javaexe = shift; + my $sParams = shift; + my $sDebug = shift; + my $line; + my $error = 1; + + if (! $javaexe) + { + log_print("ERROR: javaexe not set.\n"); + return; + } + if (! $sDebug) + { + $sDebug = ""; + } + $javaexe = quoteIfNeed($javaexe); + log_print ("CALLJAVA: $javaexe $sDebug $sParams\n"); + if (open(IN_FILE, "$javaexe $sDebug $sParams 2>&1 |")) + { + while ($line = <IN_FILE>) + { + chomp($line); + log_print ("- $line\n"); + } + close(IN_FILE); + $error = errorAdaption($?); + } + else + { + log_print ("calljava(): Can't popen '$javaexe' with parameter '$sParams'\n"); + $error = 1; + } + return $error; +} + +# ------------------------------------------------------------------------------ +sub getPerlExecutable() +{ + my $perlexe; + if ( $ENV{PERL} ) + { + $perlexe = $ENV{PERL}; + } + elsif ( $ENV{PERLEXE} ) + { + $perlexe = $ENV{PERLEXE}; + } + else + { + if ($OSNAME eq "MSWin32") + { + $perlexe="C:/xampp/perl/bin/perl.exe"; + if (! -e $perlexe) + { + $perlexe="r:/btw/perl/bin/perl"; + } + if (! -e $perlexe) + { + $perlexe="C:/Programme/Perl/bin/perl.exe"; + } + } + elsif ($OSNAME eq "cygwin") + { + $perlexe = "perl"; + } + elsif ($OSNAME eq "solaris") + { + $perlexe="/so/env/bt_solaris_intel/bin/perl"; + } + elsif ($OSNAME eq "linux") + { + $perlexe="/so/env/bt_linux_libc2.32/DEV300/bin/perl"; + } + else + { + log_print "WARNING: Use only the fallback of perl executable.\n"; + $perlexe = "perl"; # FALLBACK + } + } + if ( ! -e $perlexe) + { + log_print "getPerlExecutable(): There exist no perl executable.\n"; + exit(1); + } + return $perlexe; +} +# ------------------------------------------------------------------------------ +# helper to call external perl with popen +sub callperl($$$) +{ + local *IN_FILE; + my $perlexe = shift; + my $perlprogram = shift; + my $sParams = shift; + my $line; + my $error; + + log_print("CALLPERL: $perlexe $perlprogram $sParams\n"); +# if (open(IN_FILE, "$perlexe $sParams 2>&1 |")) + if (open(IN_FILE, "$perlexe $perlprogram $sParams |")) + { + while ($line = <IN_FILE>) + { + chomp($line); + log_print ("- $line\n"); + } + close(IN_FILE); + $error = errorAdaption($?); + } + else + { + log_print ("Can't popen '$perlexe' with parameter: '$sParams'\n"); + $error = 1; + } + return $error; +} +# ------------------------------------------------------------------------------ +our $sJavaExecutable; +sub setJavaExecutable($) +{ + $sJavaExecutable = shift; +} + +# sub getJava14() +# { +# my $sJava14; +# if ($OSNAME eq "MSWin32") +# { +# if ($sJavaExecutable) +# { +# $sJava14 = $sJavaExecutable; +# } +# else +# { +# # HARDCODE! +# $sJava14 = "C:\\Programme\\Java\\j2re1.4.2_10\\bin\\java.exe"; +# } +# } +# else +# { +# if ($sJavaExecutable) +# { +# $sJava14 = $sJavaExecutable; +# } +# else +# { +# # HARDCODE! +# $sJava14 = "/opt/java14/bin/java"; +# } +# } +# if ( ! -e $sJava14 ) +# { +# log_print ("Java14 not found. Is searched in '$sJava14'\n"); +# # exit(1); +# return ""; +# } +# return $sJava14; +# } +# ------------------------------------------------------------------------------ +sub getJava15() +{ + my $sJava15; + if ($sJavaExecutable) + { + $sJava15 = $sJavaExecutable; + } + else + { + if ($OSNAME eq "MSWin32") + { + # HARDCODE! + $sJava15 = "C:\\Programme\\Java\\jre1.5.0_22\\bin\\java.exe"; + if ( ! -e $sJava15) + { + $sJava15 = "C:\\Program Files\\Java\\jre6\\bin\\java.exe"; + } + if ( ! -e $sJava15) + { + $sJava15 = "C:\\Java\\jdk1.6\\bin\\java.exe"; + } + } + elsif ($OSNAME eq "cygwin") + { + $sJava15 = "java"; + } + else + { + # HARDCODE! + if ($OSNAME eq "solaris") + { + $sJava15 = "/usr/bin/java"; + } + else + { + $sJava15 = "/usr/bin/java"; + if ( ! -e $sJava15 ) + { + $sJava15 = "/opt/java15/bin/java"; + } + } + } + if ( ! -e $sJava15 ) + { + log_print ("Java15 not found. Is searched in '$sJava15'\n"); + # exit(1); + return ""; + } + } + return $sJava15; +} +# ------------------------------------------------------------------------------ +sub getJava16() +{ + my $sJava16; + if ($sJavaExecutable) + { + $sJava16 = $sJavaExecutable; + } + else + { + if ($OSNAME eq "MSWin32") + { + # HARDCODE! + $sJava16 = "C:\\Programme\\Java\\jre1.6.0_16\\bin\\java.exe"; + if ( ! -e $sJava16) + { + $sJava16 = "C:\\Program Files\\Java\\jre6\\bin\\java.exe"; + } + if ( ! -e $sJava16) + { + $sJava16 = "C:\\Java\\jdk1.6\\bin\\java.exe"; + } + # } + } + elsif ($OSNAME eq "cygwin") + { + # $sJava16 = "java"; + $sJava16 = "C:/Program Files/Java/jdk1.6.0_16/bin/java.exe"; + } + else + { + # HARDCODE! + if ($OSNAME eq "solaris") + { + $sJava16 = "/usr/bin/java"; + } + else + { + $sJava16 = "/usr/bin/java"; + if ( ! -e $sJava16 ) + { + $sJava16 = "/opt/java16/bin/java"; + } + } + } + if ( ! -e $sJava16 ) + { + log_print ("Java16 not found. Is searched in '$sJava16'\n"); + # exit(1); + return ""; + } + } + return $sJava16; +} + +# ------------------------------------------------------------------------------ +sub getJavaExecutable() +{ + return getJava16(); +} + +# ------------------------------------------------------------------------------ +# this function is a helper for parameters +# if quotes the whole string with 'STR' or "STR" and replace quotes in it's content for the right. +sub singleQuote($) +{ + my $sStr = shift; + if ( $OSNAME eq "MSWin32") + { + # we are MSWin32 (quote \" stronger) + # $sStr =~ s/\'/\"/g; + $sStr =~ s/\'/\\\"/g; + return "\"" . $sStr . "\""; + } + else + { + if (index($sStr, "'") >= 0) + { + # replace all single quotes ("'") by "\"" + $sStr =~ s/\'/\"/g; + } + } + return "'" . $sStr . "'"; +} + +sub quote($) +{ + my $sName = shift; + return "\"" . $sName . "\""; +} + +sub quoteIfNeed($) +{ + my $sName = shift; + if (-1 != index($sName, " ")) + { + return quote($sName); + } + return $sName; +} + + +# ------------------------------------------------------------------------------ +our $sToolsPath; +sub setToolsPath($) +{ + my $sNewPath = shift; + $sToolsPath = $sNewPath; +} + +sub ExecSQL($) +{ + my $sSQL = shift; + + my $error; + my @aResult; + my $sSQLDirect; + if ($sToolsPath) + { + $sSQLDirect = $sToolsPath; + $sSQLDirect .= "/"; + } + $sSQLDirect .= "sql_direct.php"; + + # select(undef, undef, undef, 0.060); + # log_print("ExecSQL: $sSQL\n"); + # sleep (1); + ($error, @aResult) = callphp(getPHPExecutable(), $sSQLDirect, singleQuote($sSQL)); + if ($error) + { + log_print ("ExecSQL: An Error occured.\n"); + log_print ("PHP: " . getPHPExecutable() . "\n"); + log_print ("SQL Statement: " . singleQuote($sSQL) . "\n"); + # exit(1); + } + # select(undef, undef, undef, 0.125); + # sleep (1); + return @aResult; +} + +# ------------------------------------------------------------------------------ +# helper to call external php with popen +# sub callexe($$$) +# { +# local *IN_FILE; +# my $exe = shift; +# my $program = shift; +# my $sParams = shift; +# my $line; +# my $error; +# my @result; +# +# $exe = quoteIfNeed($exe); +# $program = quoteIfNeed($program); +# +# # print "Will send: $exe $sParams\n"; +# # log_print("CALLEXE: $exe $program $sParams\n"); +# if (open(IN_FILE, "$exe $program $sParams |")) +# { +# while ($line = <IN_FILE>) +# { +# chomp($line); +# # $line .= " "; +# push(@result, $line); +# # print "callphp output: $line\n"; +# } +# close(IN_FILE); +# $error = errorAdaption($?); +# } +# else +# { +# print "Can't popen '$exe' with parameter: '$sParams'\n"; +# $error = 1; +# } +# return $error, @result; +# } + +1; diff --git a/testgraphical/source/ConvwatchHelper.pm b/testgraphical/source/ConvwatchHelper.pm new file mode 100644 index 000000000000..8f157641b1f4 --- /dev/null +++ b/testgraphical/source/ConvwatchHelper.pm @@ -0,0 +1,574 @@ +package ConvwatchHelper; + +use English; +use warnings; +use strict; +use Cwd; +use Cwd 'chdir'; + +use CallExternals; +use stringhelper; +use filehelper; +use oshelper; +use loghelper; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.39 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&getQADEVToolsPath &setProjectRoot &getProjectRoot &checkForStop &getSofficeExe &setINPATH); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + +# ------------------------------------------------------------------------------ +our $tempprefix; + +# sub getTempDir() +# { +# my $sTempDir; +# if (! $tempprefix) +# { +# if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") +# { +# # $tempdir = "C:/gfxcmp/temp"; +# $tempprefix = "//so-gfxcmp-lin/gfxcmp-data/wntmsci/temp"; +# } +# elsif ($OSNAME eq "linux") +# { +# $tempprefix = "/net/so-gfxcmp-lin/export/gfxcmp/data/unxlngi/temp"; +# } +# elsif ($OSNAME eq "solaris") +# { +# # $tempdir = "/space/gfxcmp/temp"; +# $tempprefix = "/net/so-gfxcmp-lin/export/gfxcmp/data/unxsoli/temp"; +# } +# else +# { +# print "Error: This environment isn't supported yet.\n"; +# exit(1); +# } +# } +# $sTempDir = $tempprefix; +# return $sTempDir; +# } +# ------------------------------------------------------------------------------ +# in filehelper +# our $programprefix; +# +# sub getProgramPrefix($) +# { +# my $sDBDistinct = shift; +# +# my $sProgramPrefix; +# if (! $programprefix) +# { +# if ($OSNAME eq "MSWin32") +# { +# # $programprefix = "C:/gfxcmp/programs"; +# $programprefix = "C:/gp"; +# } +# elsif ($OSNAME eq "linux") +# { +# $programprefix = "/space/gfxcmp/programs"; +# } +# elsif ($OSNAME eq "solaris") +# { +# $programprefix = "/space/gfxcmp/programs"; +# } +# else +# { +# print "Error: This environment isn't supported yet.\n"; +# exit(1); +# } +# } +# $sProgramPrefix = appendPath($programprefix, substr($sDBDistinct, 0, 19)); +# return $sProgramPrefix; +# } +# ------------------------------------------------------------------------------ +sub getQADEVToolsPath() +{ + my $sNewPath = appendPath(getToolsPrefix(), "qadev"); + $sNewPath = appendPath($sNewPath, "scripts"); + $sNewPath = appendPath($sNewPath, "gfxcmp_ui"); + return $sNewPath; +} + +# in filehelper +# our $toolsprefix; +# +# sub getToolsPrefix() +# { +# my $sToolsPrefix; +# if (! $toolsprefix) +# { +# if ($OSNAME eq "MSWin32") +# { +# $toolsprefix = "C:/gfxcmp/tools"; +# } +# elsif ($OSNAME eq "linux") +# { +# $toolsprefix = "/space/gfxcmp/tools"; +# } +# elsif ($OSNAME eq "solaris") +# { +# $toolsprefix = "/space/gfxcmp/tools"; +# } +# else +# { +# print "Error: This environment isn't supported yet.\n"; +# exit(1); +# } +# } +# $sToolsPrefix = $toolsprefix; +# return $sToolsPrefix; +# } +# ------------------------------------------------------------------------------ +our $sProjectRoot; +sub setProjectRoot($) +{ + $sProjectRoot = shift; + log_print "\$sProjectRoot := $sProjectRoot\n"; +} +sub getProjectRoot() +{ + if ($sProjectRoot) + { + return $sProjectRoot; + } + die "setProjectRoot(PATH) not set.\n"; +} + +our $sINPATH; +sub setINPATH($) +{ + $sINPATH = shift; +} +sub getINPATH() +{ + if ($sINPATH) + { + return $sINPATH; + } + die "setINPATH(PATH) not set.\n"; +} +our $dataprefix; + +# sub getDataPrefix() +# { +# my $sDataPrefix; +# if (! $dataprefix) +# { +# if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") +# { +# # $dataprefix = "C:/gfxcmp/data"; +# # $dataprefix = "//so-gfxcmp-lin/gfxcmp-data/wntmsci"; +# $dataprefix = getProjectRoot(); +# } +# elsif ($OSNAME eq "linux") +# { +# # $dataprefix = "/space/gfxcmp/data"; +# # $dataprefix = "/net/so-gfxcmp-lin/export/gfxcmp/data/unxlngi"; +# $dataprefix = getProjectRoot(); +# } +# elsif ($OSNAME eq "solaris") +# { +# # $dataprefix = "/space/gfxcmp/data"; +# # $dataprefix = "/net/so-gfxcmp-lin/export/gfxcmp/data/unxsoli"; +# $dataprefix = getProjectRoot(); +# } +# else +# { +# print "Error: This environment isn't supported yet.\n"; +# exit(1); +# } +# $dataprefix = appendPath(getProjectRoot(), getINPATH()); +# $dataprefix = appendPath($dataprefix, "data"); +# } +# $sDataPrefix = $dataprefix; +# return $sDataPrefix; +# } + +# ------------------------------------------------------------------------------ + +# sub _shortsleep($) +# { +# # sleep 1; +# select(undef, undef, undef, 0.333); +# } +# +# sub _waitInSeconds($) +# { +# my $nLength = shift; +# my $i; +# my $j; +# +# for ($j=0;$j<$nLength;$j++) +# { +# for ($i=0;$i<$j;$i++) +# { +# print "."; +# } +# for ($i=$j;$i<$nLength;$i++) +# { +# print " "; +# } +# _shortsleep( 1 ); +# print "\r"; +# } +# +# for ($j=0;$j<=$nLength;$j++) +# { +# for ($i=0;$i<$j;$i++) +# { +# print " "; +# } +# for ($i=$j;$i<$nLength;$i++) +# { +# print "."; +# } +# _shortsleep( 1 ); +# print "\r"; +# } +# } +# +# sub wait30seconds() +# { +# _waitInSeconds(20); +# _waitInSeconds(20); +# } + +sub checkForStop($) +{ + my $sStopFilename = shift; + my $sStopFilePath; + if ($OSNAME eq "MSWin32") + { + $sStopFilePath = "C:/temp/"; + } + else + { + $sStopFilePath = "/tmp/"; + } + my $sStopFile = $sStopFilePath . $sStopFilename; + if ( -e "$sStopFile" ) + { + print "Stop of Convwatch tool forced!\n"; + unlink($sStopFile); + exit(2); + } +} + +# ---------------------------------------------------------------------------------------- +sub readdirectory($$$); + +sub readdirectory($$$) +{ + my $startdir = shift; + my $sUserParameter = shift; + my $hook = shift; + + my $myfile; + + local *DIR; + chdir $startdir; + cwd(); + + my $nCountFiles = 0; + if (opendir (DIR, $startdir)) # Directory oeffnen + { + while ($myfile = readdir(DIR)) + { # ein filename holen + #if (! -l $myfile) # not a link + #{ + if (-d $myfile ) # is a directory + { + if ( -l $myfile) + { + next; + } + # if ( $myfile eq "help" || + # $myfile eq "presets" || + # $myfile eq "registry" || + # $myfile eq "uno_packages" || + # $myfile eq "lib" || + # $myfile eq "user_tree" ) + # { + # next; + # } + + if ($myfile ne "." && $myfile ne "..") + { + my $sNewStartDir = appendPath($startdir, $myfile); # neuen Directorystring erstellen + # if ($sNewStartDir =~ "^\/proc" || + # $sNewStartDir =~ "^\/dev" || + # $sNewStartDir =~ "^\/udev" || + # $sNewStartDir =~ "lost+found" ) + # { + # next; + # } + # my $sNewSUserParameter = $sUserParameter . $myfile ."/"; + # do a recursive call + # $nCountFiles++; + my $nFileCount = readdirectory($sNewStartDir, $sUserParameter, $hook); + # workOnDir($sNewDir, $nFileCount); + $nCountFiles += $nFileCount; + + chdir ($startdir); # zurueckwechseln. + cwd(); + } + } + else + { + # File must exist, be a regular file and must not be the $onlyOnFile + if (-f $myfile) + { + # print STDERR " $startdir" . "$myfile\n"; + $nCountFiles++; + # workOnFile($startdir, $myfile, $destdir); + $hook->($startdir, $myfile, $sUserParameter); + } + } + #} + #else + #{ + # print STDERR "linked file: $dir/$myfile\n"; + #} + } + closedir(DIR); + } + else + { + print STDERR "could not open $startdir\n"; + } + return $nCountFiles; +} + +our $lcl_sSofficeBinPath; +our $lcl_sSofficeBinName; + +sub searchSofficeBin($$$) +{ + my $currentDir = shift; + my $currentFile = shift; + my $sUserParameter = shift; + + if ($currentFile eq $sUserParameter) + { + my $sSourceFilename; + $sSourceFilename = appendPath($currentDir, $currentFile); + + if ( -e "$sSourceFilename" ) + { + $lcl_sSofficeBinPath = $currentDir; + $lcl_sSofficeBinName = $currentFile; + } + } +} + +# our $lcl_sUnoPkgPath; +# +# sub searchUnoPkgBin($$$) +# { +# my $currentDir = shift; +# my $currentFile = shift; +# my $sUserParameter = shift; +# +# if ($currentFile eq $sUserParameter) +# { +# my $sSourceFilename; +# $sSourceFilename = appendPath($currentDir, $currentFile); +# if ( -e "$sSourceFilename" ) +# { +# $lcl_sUnoPkgPath = $currentDir; +# } +# } +# } + +# our $lcl_sJARPath; + +# sub searchJARFile($$$) +# { +# my $currentDir = shift; +# my $currentFile = shift; +# my $sUserParameter = shift; +# +# if ($currentFile eq $sUserParameter) +# { +# my $sSourceFilename; +# $sSourceFilename = appendPath($currentDir, $currentFile); +# if ( -e "$sSourceFilename" ) +# { +# $lcl_sJARPath = $currentDir; +# } +# } +# } + +# return the PATH, where the file was found +# sub searchForJAR($$) +# { +# my $sPathToInstallOffice = shift; +# my $sJARFileName = shift; +# +# my $sCurrentPath = cwd(); +# +# $lcl_sJARPath = ""; +# readdirectory(${sPathToInstallOffice}, ${sJARFileName}, \&searchJARFile); +# +# chdir $sCurrentPath; +# cwd(); +# +# return $lcl_sJARPath; +# } + +# sub getUnoPkg($) +# { +# my $sPathToInstallOffice = shift; +# +# my $sUnoPkgName = "unopkg.bin"; +# if (isWindowsEnvironment()) +# { +# $sUnoPkgName = "unopkg.exe"; +# } +# +# my $sCurrentPath = cwd(); +# +# $lcl_sUnoPkgPath = ""; +# readdirectory(${sPathToInstallOffice}, ${sUnoPkgName}, \&searchUnoPkgBin); +# +# chdir $sCurrentPath; +# cwd(); +# +# return ($lcl_sUnoPkgPath, $sUnoPkgName); +# } + +sub getSofficeExe($) +{ + my $sPathToOffice = shift; + + my $sSofficeExeName = "soffice"; + if (isWindowsEnvironment()) + { + $sSofficeExeName = "soffice.exe"; + } + + my $sCurrentPath = cwd(); + + $lcl_sSofficeBinPath = ""; + $lcl_sSofficeBinName = ""; + readdirectory(${sPathToOffice}, ${sSofficeExeName}, \&searchSofficeBin); + + chdir $sCurrentPath; + cwd(); + + return ($lcl_sSofficeBinPath, $lcl_sSofficeBinName); +} + +# sub checkOfficeAlreadyInstalled($) +# { +# my $sOfficePath = shift; +# +# my $sCurrentPath = cwd(); +# +# $lcl_sSofficeBinPath = ""; +# my $sOldOfficePath = appendPath($sOfficePath, "program"); +# if ( -d "$sOldOfficePath" ) +# { +# $sOldOfficePath = appendPath($sOldOfficePath, "soffice.bin"); +# if ( -e $sOldOfficePath ) +# { +# return 1; +# } +# } +# else +# { +# if (isWindowsEnvironment()) +# { +# my $sThreeLayerOffice = appendPath($sOfficePath, "Sun"); +# $sThreeLayerOffice = appendPath($sThreeLayerOffice, "StarOffice 9"); +# $sThreeLayerOffice = appendPath($sThreeLayerOffice, "program"); +# $sThreeLayerOffice = appendPath($sThreeLayerOffice, "soffice.bin"); +# +# if ( -e "$sThreeLayerOffice" ) +# { +# return 1; +# } +# } +# else +# { +# my $sThreeLayerOffice = appendPath($sOfficePath, "staroffice9"); +# $sThreeLayerOffice = appendPath($sThreeLayerOffice, "program"); +# $sThreeLayerOffice = appendPath($sThreeLayerOffice, "soffice.bin"); +# if ( -e "$sThreeLayerOffice" ) +# { +# return 1; +# } +# } +# } +# +# # soffice.bin not found in fast path +# readdirectory($sOfficePath, "soffice.bin", \&searchSofficeBin); +# chdir $sCurrentPath; +# cwd(); +# +# if ( $lcl_sSofficeBinPath ne "" ) +# { +# return 1; +# } +# return 0; +# # this is the old check +# # my $sOfficePathCheck = appendPath(${sPathToInstallOffice}, "program"); +# # $sOfficePathCheck = appendPath($sOfficePathCheck, "soffice.bin"); +# # if ( -e $sOfficePathCheck ) +# # { +# # return 1; +# # } +# # +# # # check path system of tree layer office +# # if ( isWindowsEnvironment() ) +# # { +# # $sOfficePathCheck = appendPath(${sPathToInstallOffice}, "Sun"); +# # if ( ! -e $sOfficePathCheck) +# # { +# # # could be an OpenOffice.org +# # return 0; +# # } +# # else +# # { +# # +# # $sOfficePathCheck = appendPath($sOfficePathCheck, "StarOffice 9"); +# # $sOfficePathCheck = appendPath($sOfficePathCheck, "program"); +# # $sOfficePathCheck = appendPath($sOfficePathCheck, "soffice.bin"); +# # if ( -e $sOfficePathCheck ) +# # { +# # return 1; +# # } +# # print "Error: There exist no Office, maybe an unsupported version?\n"; +# # } +# # } +# # elsif ( isUnixEnvironment() ) +# # { +# # $sOfficePathCheck = appendPath(${sPathToInstallOffice}, "staroffice9"); +# # $sOfficePathCheck = appendPath($sOfficePathCheck, "staroffice9"); +# # $sOfficePathCheck = appendPath($sOfficePathCheck, "program"); +# # $sOfficePathCheck = appendPath($sOfficePathCheck, "soffice.bin"); +# # if ( -e $sOfficePathCheck ) +# # { +# # return 1; +# # } +# # print "Error: There exist no Office, maybe an unsupported version?\n"; +# # } +# # else +# # { +# # print "Error: There exist no Office, maybe an unsupported version?\n"; +# # } +# # return 0; +# } + +1; diff --git a/testgraphical/source/compare.pl b/testgraphical/source/compare.pl new file mode 100644 index 000000000000..4aef877dc2b7 --- /dev/null +++ b/testgraphical/source/compare.pl @@ -0,0 +1,408 @@ +eval 'exec perl -wS $0 ${1+\"$@\"}' + if 0; + +#************************************************************************* +# +# 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. +# +#************************************************************************* + +BEGIN +{ + # Adding the path of this script file to the include path in the hope + # that all used modules can be found in it. + $0 =~ /^(.*)[\/\\]/; + push @INC, $1; + # print "PATH: " . $1 . "\n"; +} + +# my $e; +# foreach $e (keys %ENV) +# { +# print "$e := $ENV{$e}" . "\n"; +# } + +use strict; +use graphical_compare; +use ConvwatchHelper; +use filehelper; +use timehelper; +use loghelper; + +use Cwd; +use File::Basename; +use Getopt::Long; +use English; # $OSNAME, ... +use File::Path; +use Cwd 'chdir'; + +our $help; # Help option flag +our $version; # Version option flag +# our $test; + +# our $MAJOR; +# our $MINOR; +# our $cwsname; +our $pool; +our $document; +our $creatortype; +our $prepareonly = 0; +our $force; +our $verbose = 0; +our $show = 0; +our $connectionstring; + +# Prototypes +sub print_usage(*); +sub prepare(); +sub CompareFiles($$); + +# flush STDOUT +# my $old_handle = select (STDOUT); # "select" STDOUT and save # previously selected handle +# $| = 1; # perform flush after each write to STDOUT +# select ($old_handle); # restore previously selected handle + +$OUTPUT_AUTOFLUSH=1; # works only if use English is used. + +our $version_info = 'compare.pl'; + +GetOptions( +# "MAJOR=s" => \$MAJOR, +# "MINOR=s" => \$MINOR, +# "cwsname=s" => \$cwsname, + "pool=s" => \$pool, + "document=s" => \$document, + "creatortype=s" => \$creatortype, + "prepareonly=s" => \$prepareonly, + "connectionstring=s" => \$connectionstring, + + "force" => \$force, + "verbose" => \$verbose, + "show" => \$show, + +# "test" => \$test, + "help" => \$help, + "version" => \$version + ); + +if ($help) +{ + print_usage(*STDOUT); + exit(0); +} +# Check for version option +if ($version) +{ + print STDERR "$version_info\n"; + exit(0); +} + +if ($prepareonly) +{ + $force=1; +} + +prepare(); +if ($connectionstring) +{ + setConnectionString($connectionstring); +} + +my $sDocumentPool = appendPath(getProjectRoot(), "document-pool"); +# print "ProjectRoot: " . getProjectRoot() . "\n"; +if ($ENV{DOCUMENTPOOL}) +{ + if ( -d $ENV{DOCUMENTPOOL}) + { + print "overwrite default Documentpool: '$sDocumentPool'\n"; + print " with \$ENV{DOCUMENTPOOL}: $ENV{DOCUMENTPOOL}\n"; + $sDocumentPool = $ENV{DOCUMENTPOOL}; + } + else + { + print "Given \$DOCUMENTPOOL doesn't exist.\n"; + } +} + +my $err = 0; +my $nCompareTime = getTime(); + +# if we want to check one file, give -pool and -document +# if we want to check the whole pool, give -pool +# if we want to check all, call without parameters +if ($pool) +{ + if ($document) + { + $err = SingleDocumentCompare( $sDocumentPool, + $pool, + $document, + $creatortype, + $prepareonly, + $show + ); + } + else + { + $err = CompareFiles($sDocumentPool, $pool); + } +} +else +{ + local *DIR; + if (opendir (DIR, $sDocumentPool)) # Directory oeffnen + { + my $myfile; + while ($myfile = readdir(DIR)) + { # ein filename holen + if ($myfile eq "." || + $myfile eq "..") + { + next; + } + my $sDocumentPath = appendPath($sDocumentPool, $myfile); + if ( -d $sDocumentPath ) + { + $err += CompareFiles($sDocumentPool, $myfile); + } + elsif ( -f $sDocumentPath ) + { + print "Warning: the file '$myfile' will not compared.\n"; + } + } + closedir(DIR); + } + # my $sPool = "eis-chart"; + # $err += CompareFiles($sDocumentPool, "eis-chart"); + # $err += CompareFiles($sDocumentPool, "eis-impress"); + # $err += CompareFiles($sDocumentPool, "eis-writer"); + # $err += CompareFiles($sDocumentPool, "eis-calc"); + +} + +printTime(endTime($nCompareTime)); +exit ($err); + +# ------------------------------------------------------------------------------ + +sub CompareFiles($$) +{ + my $sDocumentPath = shift; + my $sPool = shift; + my %aFailedHash; + my $startdir = appendPath($sDocumentPath, $sPool); + + local *DIR; + if (opendir (DIR, $startdir)) # Directory oeffnen + { + my $myfile; + while ($myfile = readdir(DIR)) + { # ein filename holen + if ($myfile eq "knownissues.xcl") + { + next; + } + my $sAbsoluteFile = appendPath($startdir, $myfile); + if (-f $sAbsoluteFile) + { + my $nIssue; + my $sIssueText; + ($nIssue, $sIssueText) = checkForKnownIssue($startdir, $myfile); + if ($nIssue == 0) + { + $err = SingleDocumentCompare( + # "/net/so-gfxcmp-documents.germany.sun.com/export/gfxcmp/document-pool", # $documentpoolpath, + $sDocumentPool, + $sPool, # $documentpool, + $myfile, # $documentname); + $creatortype, # $destinationcreatortype, + $prepareonly, + $show + ); + $aFailedHash{$myfile} = $err; + } + else + { + print "$myfile [KNOWN ISSUE: #$sIssueText#]\n"; + } + } + } + closedir(DIR); + } + + print "***** State for graphical compare of pool: '$sPool' ******\n"; + my $nErrorCount = 0; + my $file; + foreach $file (keys %aFailedHash) + { + if ($aFailedHash{$file} != 0) + { + print "Failed: $file\n"; + $nErrorCount++; + } + } + print "Whole unit: "; + if ($nErrorCount > 0) + { + print "PASSED.FAILED\n"; + } + else + { + print "PASSED.OK\n"; + } + print "************************************************************\n"; + return $nErrorCount; +} +# ------------------------------------------------------------------------------ +# return issue number if file exists in knownissues.xcl file +sub checkForKnownIssue($$) +{ + my $startdir = shift; + my $myfile = shift; + + if ($force) + { + return 0,""; + } + + my $sKnownIssueFile = appendPath($startdir, "knownissues.xcl"); + my $sIssueText = "unknown"; + local *ISSUES; + my $nIssue = 0; + my $sCurrentSection; + + if (open(ISSUES, $sKnownIssueFile)) + { + my $line; + while ($line = <ISSUES>) + { + chomp($line); + if ($line =~ /\[(.*)\]/ ) + { + $sCurrentSection = $1; + next; + } + if ($sCurrentSection eq $creatortype) + { + if ($line =~ /\#\#\# (.*) \#\#\#/ ) + { + $sIssueText = $1; + } + if ($line =~ /^${myfile}$/ ) + { + $nIssue = 1; + last; + } + } + } + close(ISSUES); + } + return $nIssue, $sIssueText; +} +# ------------------------------------------------------------------------------ +sub prepare() +{ + # directory structure: + # documents will be found in + # ../document-pool/eis-tests + + # references will be found in + # ../references/unxlngi/eis-tests + # ../references/wntmsci/eis-tests + + # output goes to + # ../unxlngi6.pro/misc + + if ($verbose) + { + setVerbose(); + } + + # TEST + if (!$ENV{INPATH}) + { + if ($OSNAME eq "linux") + { + # just for debug + setINPATH("unxlngi6.pro"); + } + } + else + { + setINPATH($ENV{INPATH}); + } + + if (! $creatortype) + { + $creatortype= "ps"; + } + + my $cwd = getcwd(); + print "Current Directory: $cwd\n" if ($verbose); + my $sProjectBase; + if ($ENV{PRJ}) + { + # print "cwd:=$cwd\n"; + # print "PRJ:=$ENV{PRJ}\n"; + $sProjectBase = appendPath($cwd, $ENV{PRJ}); + } + else + { + $sProjectBase = dirname($cwd); + } + if ($OSNAME eq "cygwin") + { + $sProjectBase = `cygpath -w $sProjectBase`; + chomp($sProjectBase); + $sProjectBase = unixpath($sProjectBase); + # print "cygwin patch \$sProjectBase := $sProjectBase\n"; + } + # print "Project base path: $sProjectBase\n"; + setProjectRoot($sProjectBase); + + + # TEST TEST TEST + # exit (0); +} +# ------------------------------------------------------------------------------ +sub print_usage(*) +{ + local *HANDLE = $_[0]; + my $tool_name = basename($0); + + print(HANDLE <<END_OF_USAGE); + +Usage: $tool_name [OPTIONS] + + -pool Give pool name out of document-pool directory. + But all documents list in knownissues.xcl will not check. + -document Give a single document to test, the known issue list will ignored. + -creatortype=s s:ps create postscript files via print to file. + s:pdf create PDF file via export to pdf. + -h, --help Print this help, then exit + -v, --version Print version number, then exit + +END_OF_USAGE +; +} diff --git a/testgraphical/source/cwstestresult.pl b/testgraphical/source/cwstestresult.pl new file mode 100644 index 000000000000..63c68c827dbd --- /dev/null +++ b/testgraphical/source/cwstestresult.pl @@ -0,0 +1,208 @@ +: +eval 'exec perl -wS $0 ${1+"$@"}' + if 0; + +#************************************************************************* +# +# 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. +# +#************************************************************************* + +# +# cwstestresult.pl - publish results of CWS tests to EIS +# + +use strict; +use Getopt::Long; +use Cwd; + +#### module lookup +my @lib_dirs; +BEGIN { + if ( !defined($ENV{SOLARENV}) ) { + die "No environment found (environment variable SOLARENV is undefined)"; + } + push(@lib_dirs, "$ENV{SOLARENV}/bin/modules"); + push(@lib_dirs, "$ENV{COMMON_ENV_TOOLS}/modules") if defined($ENV{COMMON_ENV_TOOLS}); +} +use lib (@lib_dirs); + +use Cws; + +#### global ##### +( my $script_name = $0 ) =~ s/^.*\b(\w+)\.pl$/$1/; + +my $is_debug = 1; # enable debug +my $opt_master; # option: master workspace +my $opt_child; # option: child workspace +my $opt_milestone; # option: milestone +my $opt_testrunName; # option: testrunName +my $opt_testrunPlatform; # option: testrunPlatfrom +my $opt_resultPage; # option: resultPage + + +#### main ##### + +my $arg_status= parse_options(); +testresult($arg_status); +exit(0); + +#### subroutines #### + +sub testresult +{ + my $status = shift; + # get master and child workspace + my $masterws = $opt_master ? uc($opt_master) : $ENV{WORK_STAMP}; + my $milestone = $opt_milestone ? $opt_milestone : $ENV{UPDMINOR}; + my $childws = $opt_milestone ? undef : ( $opt_child ? $opt_child : $ENV{CWS_WORK_STAMP} ); + + if ( !defined($masterws) ) { + print_error("Can't determine master workspace environment.\n" + . "Please initialize environment with setsolar ...", 1); + } + + if ( !defined($childws) && !defined($milestone) ) { + print_error("Can't determine child workspace environment or milestone.\n" + . "Please initialize environment with setsolar ...", 1); + } + if ( !defined($opt_resultPage) ) { + $opt_resultPage=""; + } + my $cws = Cws->new(); + if ( defined($childws) ) { + $cws->child($childws); + } + $cws->master($masterws); + my $eis = $cws->eis(); + + no strict; + my $result=''; + + if ( defined($childws) ) { + $opt_resultPage=SOAP::Data->type(string => $opt_resultPage); + my $id = $cws->eis_id(); + if ( is_valid_cws($cws) ) { + $result=$eis->submitTestResult($id,$opt_testrunName,$opt_testrunPlatform, $opt_resultPage, $status); + } else { + print STDERR "cws is not valid"; + } + } else { + $opt_resultPage=SOAP::Data->type(string => $opt_resultPage); + $result=$eis->submitTestResultMWS($masterws,$milestone,$opt_testrunName,$opt_testrunPlatform, $opt_resultPage, $status); + } + + exit(0) +} + + +sub is_valid_cws +{ + my $cws = shift; + + my $masterws = $cws->master(); + my $childws = $cws->child(); + # check if we got a valid child workspace + my $id = $cws->eis_id(); + if ( !$id ) { + print_error("Child workspace '$childws' for master workspace '$masterws' not found in EIS database.", 2); + } + return 1; +} + +sub parse_options +{ + # parse options and do some sanity checks + Getopt::Long::Configure("no_ignore_case"); + my $help = 0; + my $success = GetOptions('h' => \$help, + 'M=s' => \$opt_master, + 'm=s' => \$opt_milestone, + 'c=s' => \$opt_child, + 'n=s' => \$opt_testrunName, + 'p=s' => \$opt_testrunPlatform , + 'r=s' => \$opt_resultPage ); + if ( $help || !$success || $#ARGV < 0 || (!defined($opt_testrunName)) || ( !defined($opt_testrunPlatform)) ) { + usage(); + exit(1); + } + + print "$opt_master\n"; + print "$opt_milestone\n"; + print "$opt_child\n"; + print "$opt_testrunName\n"; + print "$opt_testrunPlatform\n"; + print "$opt_resultPage\n"; + + if ( defined($opt_milestone) && defined($opt_child) ) { + print_error("-m and -c are mutually exclusive options",1); + } + + return $ARGV[0]; +} + +# sub print_message +# { +# my $message = shift; +# +# print STDERR "$script_name: "; +# print STDERR "$message\n"; +# return; +# } + +sub print_error +{ + my $message = shift; + my $error_code = shift; + + print STDERR "$script_name: "; + print STDERR "ERROR: $message\n"; + + if ( $error_code ) { + print STDERR "\nFAILURE: $script_name aborted.\n"; + exit($error_code); + } + return; +} + +sub usage +{ + print STDERR "Usage: cwstestresult[-h] [-M masterws] [-m milestone|-c childws] <-n testrunName> <-p testrunPlatform> <-r resultPage> statusName\n"; + print STDERR "\n"; + print STDERR "Publish result of CWS- or milestone-test to EIS\n"; + print STDERR "\n"; + print STDERR "Options:\n"; + print STDERR "\t-h\t\t\thelp\n"; + print STDERR "\t-M master\t\toverride MWS specified in environment\n"; + print STDERR "\t-m milestone\t\toverride milestone specified in environment\n"; + print STDERR "\t-c child\t\toverride CWS specified in environment\n"; + print STDERR "\t-n testrunName\t\tspecifiy name of the test\n"; + print STDERR "\t-p testrunPlatform\tspecify platform where the test ran on\n"; + print STDERR "\t-r resultPage\t\tspecify name of attachment or hyperlink\n"; + print STDERR "\t\t\t\tfor resultPage\n"; + + + print STDERR "\nExample:\n"; + print STDERR "\tcwstestresult -c mycws -n Performance -p Windows -r PerfomanceTestWindows.html ok\n"; +} diff --git a/testgraphical/source/cwstestresulthelper.pm b/testgraphical/source/cwstestresulthelper.pm new file mode 100644 index 000000000000..37a5315445af --- /dev/null +++ b/testgraphical/source/cwstestresulthelper.pm @@ -0,0 +1,268 @@ +package cwstestresulthelper; + +#************************************************************************* +# +# 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. +# +#************************************************************************* + +use English; +use warnings; +use strict; +use Cwd; +use Cwd 'chdir'; + +use stringhelper; +use loghelper; +use oshelper; +use filehelper; +use CallExternals; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&cwstestresult); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + +sub cwstestresult($$$$$$) +{ + my $sStatus = shift; + my $sDBdistinct = shift; + my $sourceversion = shift; + my $destinationversion = shift; + + my $sSOLARENV; # = getSolenvPath(); + my $nSOLARENV_fake = 0; + my $sCOMMON_ENV_TOOLS; + my $nCOMMON_ENV_TOOLS_fake = 0; + + my $MAJOR; + my $MINOR; + # we need an extra state in DB + # if this state is given here, we need to add information in cws back. + if ( ! $sSOLARENV) + { + my @MAJORMINOR=split('_', $sourceversion); + if ($#MAJORMINOR < 1) + { + print "Failure with sourceversion '$sourceversion' not splitable.\n"; + return; + } + $MAJOR=$MAJORMINOR[0]; # DEV300, OOH310, ... + $MINOR=$MAJORMINOR[1]; # m45, ... + if (getEnvironment() eq "wntmsci") + { + $sSOLARENV="o:/$MAJOR/ooo.$MINOR/solenv"; + if (! -e $sSOLARENV) + { + # fallback to old before ause103 (treeconfig) + $sSOLARENV="o:/$MAJOR/src.$MINOR/solenv"; + } + } + elsif (getEnvironment() eq "unxlngi" || + getEnvironment() eq "unxsoli") + { + $sSOLARENV="/so/ws/$MAJOR/ooo.$MINOR/solenv"; + # automount + system("ls -al $sSOLARENV >/dev/null"); + sleep(1); + if (! -e $sSOLARENV) + { + # fallback to old before ause103 (treeconfig) + $sSOLARENV="/so/ws/$MAJOR/src.$MINOR/solenv"; + } + } + else + { + log_print("cwstestresult(): This environment is not supported."); + return; + } + } + if ( !defined($ENV{SOLARENV}) || length($ENV{SOLARENV}) == 0 ) + { + $ENV{SOLARENV} = $sSOLARENV; + log_print(" SOLARENV is: $ENV{SOLARENV} faked\n"); + $nSOLARENV_fake = 1; + } + if ( ! $sCOMMON_ENV_TOOLS) + { + if (isWindowsEnvironment()) + { + $sCOMMON_ENV_TOOLS="r:/etools"; + } + elsif (isUnixEnvironment() ) + { + $sCOMMON_ENV_TOOLS="/so/env/etools"; + # automount + system("ls -al $sCOMMON_ENV_TOOLS >/dev/null"); + sleep(1); + } + else + { + log_print("cwstestresult(): This environment is not supported. (variable COMMON_ENV_TOOLS not set.)"); + return; + } + } + if ( !defined($ENV{COMMON_ENV_TOOLS}) || length($ENV{COMMON_ENV_TOOLS}) == 0 ) + { + $ENV{COMMON_ENV_TOOLS} = $sCOMMON_ENV_TOOLS; + log_print( "COMMON_ENV_TOOLS is: $ENV{COMMON_ENV_TOOLS} faked\n"); + $nCOMMON_ENV_TOOLS_fake = 1; + } + + # if ( !defined($ENV{WORK_STAMP}) ) + # { + # $ENV{WORK_STAMP} = $MAJOR; + # log_print( " WORK_STAMP is: $ENV{WORK_STAMP} faked\n"); + # } + # if ( !defined($ENV{UPDMINOR}) ) + # { + # $ENV{UPDMINOR} = $MINOR; + # log_print( " UPDMINOR is: $ENV{UPDMINOR} faked\n"); + # } + + my $nWORK_STAMP_fake = 0; + my $nUPDMINOR_fake = 0; + + if ( !defined($ENV{WORK_STAMP}) || length($ENV{WORK_STAMP}) == 0 ) + { + $ENV{WORK_STAMP} = $MAJOR; + log_print(" WORK_STAMP is: $ENV{WORK_STAMP} faked\n"); + $nWORK_STAMP_fake = 1; + } + if ( !defined($ENV{UPDMINOR}) || length($ENV{WORK_STAMP}) == 0 ) + { + $ENV{UPDMINOR} = $MINOR; + log_print(" UPDMINOR is: $ENV{UPDMINOR} faked\n"); + $nUPDMINOR_fake = 1; + } + + # my $sStatus = "ok"; + # if ($nFailure == 0) + # { + # $sStatus = $sInfo; + # } + # elsif ($nFailure == 1) + # { + # $sStatus = "failed"; + # } + # elsif ($nFailure == 2) + # { + # $sStatus = "incomplete"; + # } + + # system("cwstestresult -c mycws -n Performance -p Windows ok"); + my $sPerlProgram = appendPath($sSOLARENV, "bin/cwstestresult.pl"); + # if ( -e "cwstestresult.pl" ) + # { + # # use a local version instead + # $sPerlProgram = "cwstestresult.pl"; + # } + # else + # { + # my $currentdir =cwd(); + # log_print( "We are in $currentdir\n"); + # } + + my $sPerlParam; + # $sPerlParam = " -m $MAJOR"; # master CWS + $sPerlParam .= " -c $destinationversion"; # name of CWS + $sPerlParam .= " -n ConvWatch"; # ConvWatch need to be capitalised for cwstestresult + my $sCWSEnv; + if (isWindowsEnvironment()) + { + $sCWSEnv = "Windows"; + } + elsif (getEnvironment() eq "unxlngi") + { + $sCWSEnv = "Linux"; + } + elsif (getEnvironment() eq "unxsoli") + { + $sCWSEnv = "SolarisX86"; + } + else + { + log_print("cwstestresult(): This environment is not supported. (getEnvironment() returns wrong value?)"); + return; + } + $sPerlParam .= " -p " . $sCWSEnv; + $sPerlParam .= " -r http://so-gfxcmp-lin.germany.sun.com/gfxcmp_ui/status_new.php?distinct=$sDBdistinct"; + + $sPerlParam .= " "; + $sPerlParam .= $sStatus; + + + # my $sSetcwsAndPerl = "setcws $destinationversion; " . getPerlExecutable(); + + my $err = callperl(getPerlExecutable(), $sPerlProgram, $sPerlParam); + if ($err != 0) + { + log_print( "Can't call cwstestresult.pl\n"); + } + if ($nSOLARENV_fake == 1) + { + $ENV{SOLARENV} = ""; + undef( $ENV{SOLARENV} ); + $nSOLARENV_fake = 0; + # if ( defined($ENV{SOLARENV}) ) + # { + # print "SOLARENV always defined.\n"; + # } + } + if ($nCOMMON_ENV_TOOLS_fake == 1) + { + $ENV{COMMON_ENV_TOOLS} = ""; + undef( $ENV{COMMON_ENV_TOOLS} ); + $nCOMMON_ENV_TOOLS_fake = 0; + } + + if ( $nWORK_STAMP_fake == 1 ) + { + # undef($ENV{WORK_STAMP}); + $ENV{WORK_STAMP} = ""; + undef($ENV{WORK_STAMP}); + $nWORK_STAMP_fake = 0; + } + if ( $nUPDMINOR_fake == 1 ) + { + $ENV{UPDMINOR} = ""; + undef($ENV{UPDMINOR}); + $nUPDMINOR_fake = 0; + } + + +} + + +1; diff --git a/testgraphical/source/dbhelper.pm b/testgraphical/source/dbhelper.pm new file mode 100644 index 000000000000..0f5c0d5bb5ea --- /dev/null +++ b/testgraphical/source/dbhelper.pm @@ -0,0 +1,209 @@ +# +# # ------------------------------------------------------------------------------ +# +# sub DB_INSERT_INTO_TABLE_STATUS() +# { +# # my $sDocID = shift; +# # my $sDBDistinct = shift; +# +# my $sHostname = hostname; +# +# my $sSQL = "INSERT INTO status (docid, dbdistinct2, hostname)"; +# $sSQL .= " VALUES ($docid, '$dbdistinct', '$sHostname')"; +# ExecSQL($sSQL); +# } +# sub DB_UPDATE_TABLE_STATUS_SET_INFO($) +# { +# # my $sDocID = shift; +# # my $sDBDistinct = shift; +# my $sInfo = shift; +# +# # my $sHostname = hostname; +# +# my $sInsertSQL = "UPDATE status SET info='$sInfo' WHERE docid=$docid AND dbdistinct2='$dbdistinct'"; +# ExecSQL($sInsertSQL); +# } +# +# sub DB_UPDATE_TABLE_DOCUMENTS_SET_STATE_INFO($$) +# { +# # my $sDocID = shift; +# my $sStatus = shift; +# my $sError = shift; +# +# my $sSQL = "UPDATE documents"; +# $sSQL .= " SET state='" . $sStatus . "'"; +# $sSQL .= ",info='" . $sError . "'"; +# $sSQL .= " WHERE docid=$docid"; +# ExecSQL($sSQL); +# } +# sub DB_UPDATE_TABLE_STATUS_SET_STATE($) +# { +# # my $sDocID = shift; +# my $sStatus = shift; +# +# my $sSQL = "UPDATE status"; +# $sSQL .= " SET state='" . $sStatus . "'"; +# $sSQL .= " WHERE docid=$docid"; +# ExecSQL($sSQL); +# } +# +# # sub DB_UPDATE_TABLE_STATUS_SET_STATE_FAILED() +# # { +# # DB_UPDATE_TABLE_STATUS_SET_STATE("FAILED-FAILED"); +# # } +# # ------------------------------------------------------------------------------ +# # sub getDBConnectionString() +# # { +# # # return "server:jakobus,db:jobs_convwatch,user:admin,passwd:admin"; +# # return "server:unoapi,db:jobs_convwatch,user:convwatch,passwd:convwatch"; +# # } +# # ------------------------------------------------------------------------------ +# sub getSourceInfo($) +# { +# my $sDBStr = shift; +# +# my $sSourceVersion; +# if ( $sDBStr =~ / sourceversion='(.*?)',/ ) +# { +# $sSourceVersion = $1; +# log_print( "sSourceVersion: $sSourceVersion\n"); +# } +# if (! $sSourceVersion) +# { +# log_print( "Error: no value for sourceversion found.\n"); +# return; +# } +# my $sSourceName; +# if ( $sDBStr =~ / sourcename='(.*?)',/ ) +# { +# $sSourceName = $1; +# log_print( "sSourceName: $sSourceName\n"); +# } +# my $sSourceCreatorType; +# if ( $sDBStr =~ / sourcecreatortype='(.*?)',/ ) +# { +# $sSourceCreatorType = $1; +# log_print( "sSourceCreatorType: $sSourceCreatorType\n"); +# } +# return $sSourceVersion, $sSourceName, $sSourceCreatorType; +# } +# # ------------------------------------------------------------------------------ +# sub getDestinationInfo($) +# { +# my $sDBStr = shift; +# +# my $sDestinationVersion; +# if ( $sDBStr =~ / destinationversion='(.*?)',/ ) +# { +# $sDestinationVersion = $1; +# log_print( "sDestinationVersion: $sDestinationVersion\n"); +# } +# if (! $sDestinationVersion) +# { +# log_print( "Error: no value for destinationversion found.\n"); +# return; +# } +# my $sDestinationName; +# if ( $sDBStr =~ / destinationname='(.*?)',/ ) +# { +# $sDestinationName = $1; +# log_print( "sDestinationName: $sDestinationName\n"); +# } +# my $sDestinationCreatorType; +# if ( $sDBStr =~ / destinationcreatortype='(.*?)',/ ) +# { +# $sDestinationCreatorType = $1; +# log_print( "sDestinationCreatorType: $sDestinationCreatorType\n"); +# } +# return $sDestinationVersion, $sDestinationName, $sDestinationCreatorType; +# } +# # ------------------------------------------------------------------------------ +# # sub getMailAddress($) +# # { +# # my $sDBStr = shift; +# # my $sMailAddress = ""; +# # if ( $sDBStr =~ / mailfeedback='(.*?)',/ ) +# # { +# # $sMailAddress = $1; +# # log_print( "sMailAddress: $sMailAddress\n"); +# # } +# # return $sMailAddress; +# # } +# +# # sub getDocumentInfo($) +# # { +# # my $sDBStr = shift; +# # +# # my $sDocumentPoolPath; +# # if ( $sDBStr =~ / documentpoolpath='(.*?)',/ ) +# # { +# # $sDocumentPoolPath = $1; +# # log_print( "sDocumentPoolPath: $sDocumentPoolPath\n"); +# # } +# # if (! $sDocumentPoolPath) +# # { +# # log_print( "Error: no value for documentpoolpath found.\n"); +# # return; +# # } +# # my $sDocumentPool; +# # if ( $sDBStr =~ / documentpool='(.*?)',/ ) +# # { +# # $sDocumentPool = $1; +# # log_print( "sDocumentPool: $sDocumentPool\n"); +# # } +# # if (! $sDocumentPool) +# # { +# # log_print( "Error: no value for documentpool found.\n"); +# # return; +# # } +# # my $sDocumentName; +# # if ( $sDBStr =~ / name='(.*?)',/ ) +# # { +# # $sDocumentName = $1; +# # log_print( "sDocumentName: $sDocumentName\n"); +# # } +# # return $sDocumentPoolPath, $sDocumentPool, $sDocumentName; +# # } +# +# sub getDistinct($) +# { +# my $sDBStr = shift; +# my $sDBDistinct; +# if ( $sDBStr =~ / dbdistinct2='(\S*?)',/ ) +# { +# $sDBDistinct = $1; +# log_print( "dbdistinct2: $sDBDistinct\n"); +# } +# return $sDBDistinct; +# } +# +# sub getIDInfo($) +# { +# my $sDBStr = shift; +# # my $dbdistinct; +# +# my $sDBDistinct = getDistinct($sDBStr); +# # if ( $sDBStr =~ / dbdistinct2='(\S*?)',/ ) +# # { +# # $sDBDistinct = $1; +# # log_print( "dbdistinct2: $sDBDistinct\n"); +# # } +# if (! $sDBDistinct) +# { +# log_print( "Error: no dbdistinct given.\n"); +# return; +# } +# my $sDocID; +# if ( $sDBStr =~ / docid=(\S*?),/ ) +# { +# $sDocID = $1; +# log_print( "docid: $sDocID\n"); +# } +# if (! $sDocID) +# { +# log_print( "Error: no docid given.\n"); +# return; +# } +# return $sDBDistinct, $sDocID; +# } +# diff --git a/testgraphical/source/filehelper.pm b/testgraphical/source/filehelper.pm new file mode 100644 index 000000000000..ed1be35cf124 --- /dev/null +++ b/testgraphical/source/filehelper.pm @@ -0,0 +1,358 @@ +package filehelper; + +#************************************************************************* +# +# 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. +# +#************************************************************************* + +use strict; +use warnings; +use strict; +use English; # $OSNAME, ... +use stringhelper; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&dospath &unixpath &appendPath &appendClass &setPrefix &getToolsPrefix &rmkdir &getJavaPathSeparator &getJavaFileDirSeparator &getFromPathes &convertCygwinPath); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + + +# ------------------------------------------------------------------------------ +# helper, to change all file separators +sub dospath($) +{ + my $sPath = shift; + if ($OSNAME eq "MSWin32") + { + # make out of '/' a '\' + $sPath =~ s/\//\\/g; + } + else + { + } + return $sPath; +} + +sub unixpath($) +{ + my $sPath = shift; + if ($OSNAME ne "MSWin32") + { + # make out of '\' a '/' + $sPath =~ s/\\/\//g; + } + else + { + } + return $sPath; +} + +# ------------------------------------------------------------------------------ +# sub getGlobalInstSet() +# { +# my $sJumbo; +# if ($OSNAME eq "MSWin32") +# { +# # $sJumbo = "\\\\so-gfxcmp-lin\\jumbo_ship\\install"; +# $sJumbo = "\\\\jumbo.germany.sun.com\\ship\\install"; +# } +# elsif ($OSNAME eq "cygwin") +# { +# $sJumbo = "//jumbo.germany.sun.com/ship/install"; +# } +# else +# { +# $sJumbo = "/net/jumbo.germany.sun.com/ship/install"; +# } +# return $sJumbo; +# } + +# ------------------------------------------------------------------------------ +# sub getSolarisLockFile() +# { +# my $sSolarisLockFile = "/tmp/.ai.pkg.zone.lock-afdb66cf-1dd1-11b2-a049-000d560ddc3e"; +# return $sSolarisLockFile; +# } +# +# sub checkForSolarisLock() +# { +# if ($OSNAME eq "solaris") +# { +# # wait until the internal installer lock is gone +# while ( -e getSolarisLockFile() ) +# { +# while ( -e getSolarisLockFile() ) +# { +# log_print( "Warning: Wait active until installer lock is gone. \n"); +# sleep 1; +# } +# sleep 5; +# } +# log_print( "[ok], lock is gone.\n"); +# } +# } +# +# sub deleteSolarisLock() +# { +# if ($OSNAME eq "solaris") +# { +# sleep 1; +# unlink getSolarisLockFile(); +# +# sleep 1; +# if ( -e getSolarisLockFile() ) +# { +# # try delete the file as super user? +# `sudo rm -f getSolarisLockFile()`; +# sleep 1; +# } +# } +# } + +# ------------------------------------------------------------------------------ +sub appendPath($$) +{ + my $sPath = shift; + my $sAddPath = shift; + if ($sPath && $sAddPath) + { + if (! endswith($sPath, "/") && + ! endswith($sPath, "\\")) + { + # getJavaFileDirSeparator(); + $sPath .= "/"; + } + $sPath .= $sAddPath; + } + return $sPath; +} + +sub appendClass($$) +{ + my $sPath = shift; + my $sAddPath = shift; + + my $sSeparator = getJavaPathSeparator(); + if ($sPath && $sAddPath) + { + if (! endswith($sPath, $sSeparator)) + { + # getJavaFileDirSeparator(); + $sPath .= $sSeparator; + } + $sPath .= $sAddPath; + } + return $sPath; +} + +# ------------------------------------------------------------------------------ + +our $sPrefix; +sub setPrefix($) +{ + $sPrefix = shift; +} + +sub getPrefix() +{ + return $sPrefix; +} + +# ------------------------------------------------------------------------------ +our $programprefix; + +# sub getProgramPrefix($) +# { +# my $sDBDistinct = shift; +# +# my $sProgramPrefix; +# if (! $programprefix) +# { +# if ($OSNAME eq "MSWin32") +# { +# # $programprefix = "C:/gfxcmp/programs"; +# $programprefix = "C:"; +# if (getPrefix() eq "performance") +# { +# $programprefix = "D:"; +# } +# $programprefix = appendPath($programprefix, "gp"); +# } +# elsif ($OSNAME eq "linux") +# { +# $programprefix = "/space/" . getPrefix() . "/programs"; +# } +# elsif ($OSNAME eq "solaris") +# { +# $programprefix = "/space/" . getPrefix() . "/programs"; +# } +# else +# { +# print "Error: This environment isn't supported yet.\n"; +# exit(1); +# } +# } +# $sProgramPrefix = appendPath($programprefix, substr($sDBDistinct, 0, 19)); +# return $sProgramPrefix; +# } +# ------------------------------------------------------------------------------ +our $toolsprefix; + +sub getToolsPrefix() +{ + my $sToolsPrefix; + if (! $toolsprefix) + { + if ($OSNAME eq "MSWin32") + { + $toolsprefix = "C:"; + if (getPrefix() eq "performance") + { + $toolsprefix = "D:"; + } + } + elsif ($OSNAME eq "linux") + { + $toolsprefix = "/space"; + } + elsif ($OSNAME eq "solaris") + { + $toolsprefix = "/space"; + } + else + { + print "Error: This environment isn't supported yet.\n"; + exit(1); + } + $toolsprefix = appendPath($toolsprefix, getPrefix()); + $toolsprefix = appendPath($toolsprefix, "tools"); + } + $sToolsPrefix = $toolsprefix; + return $sToolsPrefix; +} + +# also Windows safe +sub rmkdir($) +{ + my($tpath) = shift; + my $dir; + my $accum = ""; + + my @dirs = split(/\//, $tpath); + if ( $#dirs eq 0 ) + { + @dirs = split("\\\\", $tpath); + } + + foreach $dir (@dirs) + { + $accum = "$accum$dir/"; + if($dir ne "") + { + if(! -d "$accum") + { + mkdir ($accum); + chmod (0777,$accum); + } + } + } +} + +# ------------------------------------------------------------------------------ +sub getJavaPathSeparator() +{ + my $ps = ":"; + if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + $ps = ";"; + } + return $ps; +} +# ------------------------------------------------------------------------------ +sub getJavaFileDirSeparator() +{ + my $sfs = "/"; + if ($OSNAME eq "MSWin32") + { + $sfs = "\\"; + } + return $sfs; +} +# ------------------------------------------------------------------------------ +sub getFromPathes($$) +{ + my $sPathesIni = shift; + my $searchvalue = shift; + my $sResult; + if ( -e $sPathesIni) + { + local *PATHES; + if (open(PATHES, "$sPathesIni")) + { + my $line; + while ($line = <PATHES>) + { + chomp($line); + if ($line =~ /^$searchvalue=(.*)$/) + { + $sResult = $1; + } + } + close(PATHES); + } + } + return $sResult; +} + +sub convertCygwinPath($) +{ + my $sPath = shift; + + if ($OSNAME eq "cygwin") + { + # print "Cygwin Path Patch.\n" if ($verbose); + if ($sPath =~ /\/cygdrive\/(.)/) + { + my $Letter = $1; + $sPath =~ s/\/cygdrive\/${Letter}/${Letter}\:/; + # print "Cygwin Path Patch: '$sPath'\n" if ($verbose); + } + } + return $sPath; +} + + + +1; diff --git a/testgraphical/source/fill_documents_loop.pl b/testgraphical/source/fill_documents_loop.pl new file mode 100644 index 000000000000..c1b8174fefe5 --- /dev/null +++ b/testgraphical/source/fill_documents_loop.pl @@ -0,0 +1,423 @@ +eval 'exec perl -wS $0 ${1+\"$@\"}' + if 0; + +# This program has to start for the new convwatch, +# once on Windows environment and once on Linux environment +# Solaris is handled by the linux also. +# +# This program polls the database (documentcompare) every 60s for new jobs +# it runs over the given directory from documentpoolpath and pool, and create for every file +# a new database entry in documents. +# + +BEGIN +{ + # Adding the path of this script file to the include path in the hope + # that all used modules can be found in it. + $0 =~ /^(.*)[\/\\]/; + push @INC, $1; +} + +use ConvwatchHelper; +use CallExternals; +use stringhelper; +use filehelper; +use oshelper; +use timehelper; +use cwstestresulthelper; + +use strict; +use Cwd; +use File::Basename; +use English; # $OSNAME, ... +use Getopt::Long; +use File::Path; +use Cwd 'chdir'; + +my $cwd = getcwd(); + +our $help; # Help option flag +our $version; # Version option flag +our $test; + +our $version_info = 'convwatch.pl $Revision: 1.24 $ '; + +our $SOLARENV; +our $COMMON_ENV_TOOLS; + + +our $documentpoolname; +our $documentpoolpath; +our $dbdistinct; +our $sParentDistinct; +our $sCurrentDocumentPool; + +our $fs; +our @aEntries; + +# Prototypes +# sub getJavaFileDirSeparator(); +sub readdirectory($$$); +sub putDocumentInDB($$$); + +# flush STDOUT +my $old_handle = select (STDOUT); # "select" STDOUT and save # previously selected handle +$| = 1; # perform flush after each write to STDOUT +select ($old_handle); # restore previously selected handle + +setPrefix("gfxcmp"); + +if (!GetOptions( + "test" => \$test, + "help" => \$help, + "version" => \$version + )) +{ + print_usage(*STDERR); + exit(1); +} +if ($help) +{ + print_usage(*STDOUT); + exit(0); +} +# Check for version option +if ($version) +{ + print STDERR "$version_info\n"; + exit(0); +} + +# ------------------------------------------------------------------------------ +# within mysql it is better to use only '/' +$fs = "/"; # getJavaFileDirSeparator(); +# ------------------------------------------------------------------------------ +sub readdirectory($$$) +{ + my $startdir = shift; + my $sValues = shift; + my $hook = shift; + + my $myfile; + + local *DIR; + chdir $startdir; + cwd(); + if (! endswith($startdir, $fs)) + { + $startdir .= $fs; + } + + my $nCountFiles = 0; + if (opendir (DIR, $startdir)) # Directory oeffnen + { + while ($myfile = readdir(DIR)) + { # ein filename holen + #if (! -l $myfile) # not a link + #{ + if (-d $myfile ) # is a directory + { + if ( -l $myfile) + { + next; + } + if ($myfile ne "." && $myfile ne "..") + { + my $sNewStartDir = $startdir . $myfile ."/"; # neuen Directorystring erstellen + if ($sNewStartDir =~ "^\/proc" || + $sNewStartDir =~ "^\/dev" || + $sNewStartDir =~ "^\/udev" || + $sNewStartDir =~ "lost+found" ) + { + next; + } + # my $sNewDestDir = $destdir . $myfile ."/"; + # do a recursive call + # $nCountFiles++; + my $nFileCount = readdirectory($sNewStartDir, $sValues, $hook); + # workOnDir($sNewDir, $nFileCount); + $nCountFiles += $nFileCount; + + chdir ($startdir); # zurueckwechseln. + cwd(); + } + } + else + { + # File must exist, be a regular file and must not be the $onlyOnFile + if (-f $myfile) + { + # print " $startdir" . "$myfile\n"; + $nCountFiles++; + # workOnFile($startdir, $myfile, $destdir); + $hook->($startdir, $myfile, $sValues); + } + } + #} + #else + #{ + # print "linked file: $dir/$myfile\n"; + #} + } + closedir(DIR); + } + else + { + print "could not open $startdir\n"; + } + return $nCountFiles; +} +# ------------------------------------------------------------------------------ +sub putDocumentInDB($$$) +{ + my $currentDir = shift; + my $currentFile = shift; + my $sValues = shift; + + my $sSourceFilename = $currentDir . $currentFile; + # we cut down all the previous names like documentpoolpath and the documentpoolname + $sSourceFilename = substr($sSourceFilename, length($sCurrentDocumentPool . $fs)); + + my $sSQL = "INSERT INTO documents (dbdistinct2, name, pagecount, priority, parentdistinct) VALUES"; + $sSQL .= "('" . $dbdistinct . "', '" . $sSourceFilename . "', 0, 1, '". $sParentDistinct . "')"; + # print $sSQL . "\n"; + + push(@aEntries, $sSQL); + # ExecSQL($sSQL); +} + +# ------------------------------------------------------------------------------ +sub createDBEntriesForEveryDocument($) +{ + my $sStr = shift; + if ($sStr =~ /^MySQL-Error/ ) + { + # we don't do anything if an error occured + return; + } + + # interpret the follows string + # documentpoolpath='//so-gfxcmp-documents/doc-pool', documentpool='demo_lla', dbdistinct=62, + + # my $sDocumentPoolDir; + if ( $sStr =~ /documentpoolpath='(.*?)',/ ) + { + $documentpoolpath = $1; + } + if (! $documentpoolpath) + { + print "Error: no value for documentpoolpath found.\n"; + return; + } + + # my $sDocumentPool; + if ( $sStr =~ /documentpool='(.*?)',/ ) + { + $documentpoolname = $1; + } + if (! $documentpoolname) + { + print "Error: no value for documentpool found.\n"; + return; + } + # my $dbdistinct; + if ( $sStr =~ /dbdistinct2='(\S*?)',/ ) + { + $dbdistinct = $1; + } + if (! $dbdistinct) + { + print "Error: no dbdistinct given.\n"; + return; + } + + if (! -d $documentpoolpath ) + { + my $sEnv = getEnvironment(); + if ( isUnixEnvironment() ) + { + $documentpoolpath = "/net/so-gfxcmp-documents" . $documentpoolpath; + } + if ( -d $documentpoolpath ) + { + print "Warning: given documentpoolpath seems to be local, fix to '$documentpoolpath'\n"; + my $sSQL = "UPDATE documentcompare SET documentpoolpath='$documentpoolpath' WHERE dbdistinct2='$dbdistinct'"; + print "$sSQL\n"; + ExecSQL($sSQL); + } + else + { + print "Error: documentpoolpath '$documentpoolpath' not found. Don't insert anything.\n"; + my $sSQL = "UPDATE documentcompare SET state='failed',info='documentpoolpath not found.' WHERE dbdistinct2='$dbdistinct'"; + print "$sSQL\n"; + ExecSQL($sSQL); + return; + } + } + # create the documentpool directory, to run through + $sCurrentDocumentPool = $documentpoolpath; + if (! endswith($sCurrentDocumentPool, $fs)) + { + $sCurrentDocumentPool .= $fs; + } + $sCurrentDocumentPool .= $documentpoolname; + + if ( -d $sCurrentDocumentPool ) + { + if ( $sStr =~ /parentdistinct='(.*?)',/ ) + { + $sParentDistinct = $1; + } + else + { + $sParentDistinct = ""; + } + + # remove any doubles, if any + my $sSQL = "DELETE FROM documents WHERE dbdistinct2='$dbdistinct'"; + print "$sSQL\n"; + ExecSQL($sSQL); + + # run over the whole given document pool and store every found document name in the database + readdirectory($sCurrentDocumentPool, "", \&putDocumentInDB); + + chdir $cwd; + cwd(); + + foreach $sSQL (@aEntries) + { + # print "# $sSQL\n"; + print "$sSQL\n"; + ExecSQL($sSQL); + } + + my $sSQL = "UPDATE documentcompare SET state='inprogress' WHERE dbdistinct2='$dbdistinct'"; + print "$sSQL\n"; + ExecSQL($sSQL); + print "----------------------------------------------------------------------\n"; + $sParentDistinct = ""; + @aEntries = (); + } + else + { + print "Error: Given document pool '$sCurrentDocumentPool' doesn't exists.\n"; + my $sSQL = "UPDATE documentcompare SET state='cancelled' WHERE dbdistinct2='$dbdistinct'"; + ExecSQL($sSQL); + return; + } + # Send Mail, due to startconvwatch now + sendMail($sStr, $documentpoolname, $dbdistinct); +} + +# ------------------------------------------------------------------------------ +sub sendMail($$$) +{ + my $sStr = shift; + my $documentpool = shift; + my $dbdistinct = shift; + my $sourceversion; + if ( $sStr =~ /sourceversion='(.*?)',/ ) + { + $sourceversion = $1; + } + if (! $sourceversion) + { + print "Warning: no value for sourceversion found.\n"; + return; + } + my $destinationversion; + if ( $sStr =~ /destinationversion='(.*?)',/ ) + { + $destinationversion = $1; + } + if (! $destinationversion) + { + print "Warning: no value for destinationversion found.\n"; + return; + } + my $mailaddress; + if ( $sStr =~ /mailfeedback='(.*?)',/ ) + { + $mailaddress = $1; + } + if (! $mailaddress) + { + print "Warning: no value for mailfeedback found.\n"; + return; + } + + # state is 'inprogress', so send a mail + # my $sMailAddress = getMailAddress($sDoneStr); + my $sParams = "$sourceversion"; + $sParams .= " $destinationversion"; + $sParams .= " $documentpool"; + $sParams .= " $dbdistinct"; + $sParams .= " $mailaddress"; + $sParams .= " starts"; # run through state of convwatch + + my $sMailProgram = appendPath(getQADEVToolsPath(), "mailsend.php"); + + my $err; + my @lines; + my $sLine; + ($err, @lines) = callphp(getPHPExecutable(), $sMailProgram, $sParams); + foreach $sLine (@lines) + { + log_print( "Mail: $sLine\n"); + } + + if ($documentpool eq "EIS-tests") + { + cwstestresult("running", $dbdistinct, $sourceversion, $destinationversion, $SOLARENV, $COMMON_ENV_TOOLS); + } +} +# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ + +my $sEnvironmentCondition; +if (isWindowsEnvironment()) +{ + $sEnvironmentCondition = "environment='" . getEnvironment() . "'"; +} +elsif (isUnixEnvironment()) +{ + # $sEnvironmentCondition = " ( environment='unxlngi' OR environment='unxsoli' ) "; + $sEnvironmentCondition = " environment='" . getEnvironment() . "'"; +} +else +{ + print "Error: wrong environment.\n"; + exit(1); +} +my $sWhereClause = "WHERE "; +if ($sEnvironmentCondition) +{ + $sWhereClause .= $sEnvironmentCondition . " AND "; +} +$sWhereClause .= " state='new'"; + +setToolsPath(getQADEVToolsPath()); + +# ---------------------------------- main loop ---------------------------------- +while (1) +{ + my @aResult; + my $sSQL = "SELECT documentpoolpath,documentpool,dbdistinct2,sourceversion,destinationversion,mailfeedback,parentdistinct FROM documentcompare $sWhereClause"; + @aResult = ExecSQL($sSQL); + + my $aValue; + foreach $aValue (@aResult) + { + # print "# $nValue\n"; + createDBEntriesForEveryDocument($aValue); + } + if ($test) + { + last; + } + + # wait 30sec. + # wait30seconds(); + waitAMinute(); + checkForStop("stop_fill_documents_loop"); +} diff --git a/testgraphical/source/graphical_compare.pm b/testgraphical/source/graphical_compare.pm new file mode 100644 index 000000000000..5cde8d64ea01 --- /dev/null +++ b/testgraphical/source/graphical_compare.pm @@ -0,0 +1,586 @@ +package graphical_compare; + +#************************************************************************* +# +# 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. +# +#************************************************************************* + +use CallExternals; +use stringhelper; +use timehelper; +use filehelper; +use loghelper; +use oshelper; +use cwstestresulthelper; +use solarenvhelper; +use ConvwatchHelper; + +use strict; +use Cwd; +# use File::Basename; +use Getopt::Long; +use English; # $OSNAME, ... +use File::Path; +use Cwd 'chdir'; +use Sys::Hostname; +use Time::localtime; + +# my $cwd = getcwd(); + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.2 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&SingleDocumentCompare &setPrefix &setConnectionString); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + + +our $nTimeOut = 300 * 1000; +our $viewable = 1; +our $port; +our $resolution; +our $overwritereference; +our $fixreference; +our $sConncectionString; + +sub setConnectionString($) +{ + $sConncectionString=shift; +} + +sub getOOoRunnerClasspath() +{ + my $sSourceRoot; + my $sUPDExtensions = ""; + if (defined ($ENV{SOL_TMP}) && defined ($ENV{SOLARVERSION})) + { + $sSourceRoot = $ENV{SOLARVERSION}; + } + elsif (defined $ENV{SOURCE_ROOT}) + { + $sSourceRoot = $ENV{SOURCE_ROOT}; + $sSourceRoot = appendPath($sSourceRoot, $ENV{WORK_STAMP}); + } + else + { + $sSourceRoot = $ENV{SOLARVERSION}; + $sUPDExtensions = ".$ENV{UPDMINOR}"; + } + $sSourceRoot = appendPath($sSourceRoot, $ENV{INPATH}); + my $sSourceRootBin = appendPath($sSourceRoot, "bin" . $sUPDExtensions); + my $sSourceRootLib = appendPath($sSourceRoot, "lib" . $sUPDExtensions); + + if (! -d $sSourceRoot ) + { + log_print( "SourceRoot not found, search it in '$sSourceRoot'\n"); + return ""; + } + + my $sOOoRunnerPath = $sSourceRootBin; + my $sUnoilPath = $sSourceRootBin; + my $sRidlPath = $sSourceRootBin; + my $sJurtPath = $sSourceRootBin; + my $sJuhPath = $sSourceRootBin; + my $sJavaUnoPath = $sSourceRootBin; + + my $sOOoRunnerClasspath = + appendPath( $sRidlPath, "ridl.jar") . getJavaPathSeparator() . + appendPath( $sUnoilPath, "unoil.jar") . getJavaPathSeparator() . + appendPath( $sJurtPath, "jurt.jar") . getJavaPathSeparator() . + appendPath( $sJuhPath, "juh.jar") . getJavaPathSeparator() . + appendPath( $sJavaUnoPath, "java_uno.jar") . getJavaPathSeparator() . + appendPath( $sOOoRunnerPath, "OOoRunnerLight.jar"); + if (isWindowsEnvironment()) + { + $sOOoRunnerClasspath .= getJavaPathSeparator() . $sSourceRootBin; + } + else + { + $sOOoRunnerClasspath .= getJavaPathSeparator() . $sSourceRootLib; + } + return $sOOoRunnerClasspath; +} + +# ------------------------------------------------------------------------------ +sub getTempPath() +{ + my $sTempPath; + if (isWindowsEnvironment()) + { + $sTempPath = "C:/temp"; + } + elsif (isUnixEnvironment()) + { + $sTempPath = "/tmp"; + } + else + { + die "getTempPath() Failed, due to unsupported environment.\n"; + } + return $sTempPath; +} +# ------------------------------------------------------------------------------ + +sub getProjectOutput() +{ + my $sOutput = appendPath(getProjectRoot(), $ENV{INPATH}); + $sOutput = appendPath($sOutput, "misc"); + return $sOutput; +} + +# ------------------------------------------------------------------------------ +sub getProjectOutputReference() +{ + my $sOutput = appendPath(getProjectRoot(), $ENV{INPATH}); + $sOutput = appendPath($sOutput, "reference"); + return $sOutput; +} + + +sub searchForReference($) +{ + my $sFile = shift; + if ( -e $sFile ) + { + return 0; + } + if ( -e $sFile . ".ps") + { + return 0; + } + if ( -e $sFile . ".pdf") + { + return 0; + } + return 1; +} +# ------------------------------------------------------------------------------ + +# my $sOfficeName = $officeprefixname . $officename; +sub SingleDocumentCompare($$$$$$) +{ + # get all about the document to compare + my $sDocumentPoolPath = shift; + my $sDocumentPool = shift; + my $sDocumentName = shift; + my $sDebug = ""; + + # get all about the destination office + my $sCreatorType = shift; + if (! $sCreatorType) + { + # log_print( "parameter -creatortype not given. Use 'OOo'\n"); + $sCreatorType = "ps"; + } + my $prepareonly = shift; + my $show = shift; + + # my $nSimpleCompareTime = getTime(); + + my $nConvwatchFailed = 0; + set_logfile( appendPath(getProjectOutput(), $sDocumentName . ".txt" )); + + print("$sDocumentName"); + log_print("\n"); + log_print("Graphical compare on document: '$sDocumentName'\n"); + # ------------------------------------------------------------------------------ + # create postscript or pdf from first installed office + # ------------------------------------------------------------------------------ + + my $sOOoRunnerClasspath = quoteIfNeed(getOOoRunnerClasspath()); + if ($OSNAME eq "cygwin") + { + if (!startswith($sOOoRunnerClasspath, "\"")) + { + $sOOoRunnerClasspath = quote($sOOoRunnerClasspath); + } + } + if (length($sOOoRunnerClasspath) == 0) + { + $nConvwatchFailed == 1; + } + # ------------------------------------------------------------------------------ + # create postscript or pdf from second installed office + # ------------------------------------------------------------------------------ + + my $sPathesIni = appendPath(getProjectOutput(), "pathes.ini"); + my $gspath = getFromPathes($sPathesIni, "gs.path"); + my $gsexe = getFromPathes($sPathesIni, "gs.exe"); + my $impath = getFromPathes($sPathesIni, "imagemagick.path"); + my $javaexe = getFromPathes($sPathesIni, "java.exe"); + setJavaExecutable($javaexe); + + log_print("----- CREATE POSTSCRIPT OR PDF WITH RUNNING OFFICE -----\n"); + # my $nPrepareSecondPostscriptTime = getTime(); + if ($nConvwatchFailed == 0) + { + my $sInputPath = $sDocumentPoolPath; + $sInputPath = appendPath($sInputPath, $sDocumentPool); + $sInputPath = appendPath($sInputPath, $sDocumentName); + + if (! -f $sInputPath ) + { + $nConvwatchFailed = 1; + log_print("ERROR: File '$sInputPath' doesn't exists.\n"); + } + else + { + my $sOutputPath = getProjectOutput(); + my $sPropertyFile = appendPath(getProjectOutput() , $sDocumentName . ".build.props"); + + local *PROPERTYFILE; + if (open(PROPERTYFILE, ">$sPropertyFile")) + { + print PROPERTYFILE "# This file is automatically created by graphical_compare.pl\n"; + print PROPERTYFILE "DOC_COMPARATOR_PRINT_MAX_PAGE=9999\n"; + print PROPERTYFILE "DOC_COMPARATOR_GFX_OUTPUT_DPI_RESOLUTION=180\n"; + print PROPERTYFILE "DOC_COMPARATOR_REFERENCE_CREATOR_TYPE=$sCreatorType\n"; + print PROPERTYFILE "TEMPPATH=" . getTempPath() . "\n"; + if ($sConncectionString) + { + print PROPERTYFILE "ConnectionString=$sConncectionString\n"; + } + else + { + print PROPERTYFILE "ConnectionString=pipe,name=" . getUsername() . "\n"; + } + print PROPERTYFILE "OFFICE_VIEWABLE=true\n"; + print PROPERTYFILE "CREATE_DEFAULT_REFERENCE=true\n"; + print PROPERTYFILE "DOC_COMPARATOR_INPUT_PATH=$sInputPath\n"; + print PROPERTYFILE "DOC_COMPARATOR_OUTPUT_PATH=$sOutputPath\n"; + if (isWindowsEnvironment()) + { + print PROPERTYFILE "DOC_COMPARATOR_PRINTER_NAME=CrossOffice Generic Printer\n"; + } + print PROPERTYFILE "NoOffice=true\n"; + + close(PROPERTYFILE); + } + else + { + print "Can't open '$sPropertyFile' for write.\n"; + } + if ( -e "$sPropertyFile") + { + # start OOoRunner + # sleep 10; + # $sOOoRunnerClasspathFromDestinationName = quoteIfNeed(getOOoRunnerClasspath()); + my $sParams; + if ( $ENV{PERL} ) + { + $sParams = "-Dperl.exe=" . convertCygwinPath($ENV{PERL}); + } + + $sParams .= " -cp " . $sOOoRunnerClasspath . + " org.openoffice.Runner" . + " -TimeOut $nTimeOut" . + " -tb java_complex" . + " -ini $sPropertyFile" . + " -o graphical.PostscriptCreator"; + # $sParams .= " -cs pipe,name=$USER"; + + # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; + my $err = calljava(getJavaExecutable(), $sParams, $sDebug); + $sDebug = ""; + log_print( "\n\n"); + if ($err != 0) + { + my $sFailure = "Failed after try to create Postscript/pdf document for " . $sDocumentName; + log_print("ERROR: $sFailure\n"); + $nConvwatchFailed = 1; + } + } + else + { + my $sFailure = "There is no propertyfile: $sPropertyFile"; + log_print( "ERROR: $sFailure\n"); + $nConvwatchFailed=1; + } + } + + # set prepareonly and it is possible to only create ps or pdf files + if ($prepareonly) + { + print(" [only create "); + if ($sCreatorType eq "ps" || $sCreatorType eq "pdf") + { + print(" $sCreatorType"); + } + else + { + print(" (${sCreatorType}?)"); + } + if ($nConvwatchFailed == 0) + { + print(" ok"); + } + else + { + print(" failed") + } + print("]\n"); + return $nConvwatchFailed; + } + + + # ------------------------------------------------------------------------------ + # create jpeg from postscript or pdf from second installed office + # ------------------------------------------------------------------------------ + + if ($nConvwatchFailed == 0) + { + log_print("----- CREATE JPEG FROM POSTSCRIPT OR PDF FROM RUNNING OFFICE -----\n"); + # start OOoRunner + my $sInputPath = getProjectOutput(); + $sInputPath = appendPath($sInputPath, $sDocumentName); + + my $sOutputPath = getProjectOutput(); + + my $sParams = "-cp " . $sOOoRunnerClasspath . + " org.openoffice.Runner" . + " -TimeOut $nTimeOut" . + " -tb java_complex" . + " -DOC_COMPARATOR_INPUT_PATH " . quoteIfNeed($sInputPath) . + " -DOC_COMPARATOR_OUTPUT_PATH " . quoteIfNeed($sOutputPath) . + " -DOC_COMPARATOR_REFERENCE_CREATOR_TYPE $sCreatorType" . + " -NoOffice" . + " -NoSmallPictures" . + " -o graphical.JPEGCreator"; + if ($gspath) + { + $sParams .= " -gs.path " . quoteIfNeed($gspath); + } + if ($gsexe) + { + $sParams .= " -gs.exe $gsexe"; + } + + # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; + my $err = calljava(getJavaExecutable(), $sParams, $sDebug); + $sDebug = ""; + # log_print( "\n\n"); + if ($err != 0) + { + my $sFailure = "Failed after try to create JPEG from Postscript/pdf document for " . $sDocumentName; + log_print("ERROR: $sFailure\n"); + $nConvwatchFailed = 1; + } + } + } + + # ------------------------------------------------------------------------------ + # create jpeg from postscript or pdf from references + # ------------------------------------------------------------------------------ + + if ($nConvwatchFailed == 0) + { + log_print("----- CREATE JPEG FROM POSTSCRIPT OR PDF FROM REFERENCE -----\n"); + + # start OOoRunner + my $sInputPath = appendPath(getProjectRoot(), "references"); + $sInputPath = appendPath($sInputPath, getEnvironment()); + $sInputPath = appendPath($sInputPath, $sDocumentPool); + $sInputPath = appendPath($sInputPath, $sDocumentName); + + my $err = searchForReference($sInputPath); + if ($err != 0) + { + log_print("ERROR: Can't find Postscript or PDF reference for '$sInputPath'\n"); + $nConvwatchFailed = 1; + } + else + { + my $sOutputPath = getProjectOutputReference(); + rmkdir $sOutputPath; + + my $sIndexFile = appendPath($sOutputPath, "index.ini"); + # we need the index.ini for better run through + local *INDEXINI; + if ( ! -e $sIndexFile) + { + if (open(INDEXINI, ">$sIndexFile")) + { + # print INDEXINI "[$sDocumentName]\n"; + close(INDEXINI); + } + } + my $sParams = "-cp " . $sOOoRunnerClasspath . + " org.openoffice.Runner" . + " -TimeOut $nTimeOut" . + " -tb java_complex" . + " -DOC_COMPARATOR_INPUT_PATH " . quoteIfNeed($sInputPath) . + " -DOC_COMPARATOR_OUTPUT_PATH " . quoteIfNeed($sOutputPath) . + " -DOC_COMPARATOR_REFERENCE_CREATOR_TYPE $sCreatorType" . + " -NoOffice" . + " -NoSmallPictures" . + " -o graphical.JPEGCreator"; + if ($gspath) + { + $sParams .= " -gs.path " . quoteIfNeed($gspath); + } + if ($gsexe) + { + $sParams .= " -gs.exe $gsexe"; + } + + # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; + my $err = calljava(getJavaExecutable(), $sParams, $sDebug); + $sDebug = ""; + # log_print( "\n\n"); + if ($err != 0) + { + my $sFailure = "Failed after try to create JPEG from Postscript/pdf document for references."; + log_print("ERROR: $sFailure\n"); + $nConvwatchFailed = 1; + } + } + } + # ------------------------------------------------------------------------------ + # compare JPEGs + # ------------------------------------------------------------------------------ + + if ($nConvwatchFailed == 0) + { + log_print("----- COMPARE JPEGS -----\n"); + my $sInputPath = appendPath(getProjectOutputReference(), $sDocumentName); + + my $sOutputPath = getProjectOutput(); + + my $sParams = "-Xmx512m" . + " -cp " . $sOOoRunnerClasspath . + " org.openoffice.Runner" . + " -TimeOut $nTimeOut" . + " -tb java_complex" . + " -DOC_COMPARATOR_INPUT_PATH " . quoteIfNeed($sInputPath) . + " -DOC_COMPARATOR_OUTPUT_PATH " . quoteIfNeed($sOutputPath) . + " -NoOffice" . + " -NoSmallPictures" . + " -o graphical.JPEGComparator"; + if ($impath) + { + $sParams .= " -imagemagick.path " . quoteIfNeed($impath); + } + + # start OOoRunner + # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; + my $err = calljava(getJavaExecutable(), $sParams, $sDebug); + $sDebug = ""; + log_print( "\n\n"); + if ($err != 0) + { + my $sFailure = "Failed after compare JPEGs $sDocumentName\n"; + log_print("ERROR: $sFailure\n"); + $nConvwatchFailed = 1; + + if ($show) + { + # try to execute new java tool to show graphical compare + my $sJavaProgram = appendPath(getProjectRoot(), $ENV{INPATH}); + $sJavaProgram = appendPath($sJavaProgram, "class"); + $sJavaProgram = appendPath($sJavaProgram, "ConvwatchGUIProject.jar"); + if ( -e "$sJavaProgram") + { + my $sInputPath = appendPath(getProjectOutput(), $sDocumentName . ".ps.ini"); + if (! -e $sInputPath) + { + $sInputPath = appendPath(getProjectOutput(), $sDocumentName . ".pdf.ini"); + if (! -e $sInputPath) + { + $sInputPath = 0; + } + } + if ($sInputPath) + { + my $sParams = "-Xms128m -Xmx512m -jar $sJavaProgram $sInputPath"; + # $sParams .= " -cs pipe,name=$USER"; + # my $sJavaExe = "C:/Program Files/Java/jdk1.6.0_16/bin/java.exe"; # getJavaExecutable() + my $sJavaExe = getJavaExecutable(); + # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; + my $err = calljava($sJavaExe, $sParams, $sDebug); + # $sDebug = ""; + # log_print( "\n\n"); + # if ($err != 0) + # { + # my $sFailure = "Failed after try to create Postscript/pdf document for " . $sDocumentName; + # log_print("ERROR: $sFailure\n"); + # $nConvwatchFailed = 1; + # } + } + } + else + { + print "WARNING: The show program '$sJavaProgram' doesn't exists.\n"; + } + } + } + } + + log_print( "\n\n"); + close_logfile(); + + if ($nConvwatchFailed == 0) + { + print(" [ok]\n"); + } + else + { + print(" [FAILED]\n"); + print("\nPrint output of test: $sDocumentName\n"); + my $sLogFile = appendPath(getProjectOutput(), $sDocumentName . ".txt"); + showFile($sLogFile); + } + # printTime(endTime($nSimpleCompareTime)); + + return $nConvwatchFailed; +} + +# ------------------------------------------------------------------------------ +# cat $file +sub showFile($) +{ + my $logfile = shift; + local *LOGFILE; + if (open(LOGFILE, "$logfile")) + { + my $line; + while ($line = <LOGFILE>) + { + chomp($line); + print $line ."\n"; + } + close(LOGFILE); + } +} + + +1; diff --git a/testgraphical/source/loghelper.pm b/testgraphical/source/loghelper.pm new file mode 100644 index 000000000000..6dad31c7761a --- /dev/null +++ b/testgraphical/source/loghelper.pm @@ -0,0 +1,94 @@ +package loghelper; + +#************************************************************************* +# +# 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. +# +#************************************************************************* + +use strict; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&set_logfile &close_logfile &log_print &setVerbose); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + +# ------------------------------- Log into a file ------------------------------- +local *LOGFILE; +our $nGlobalLog = 0; +our $nGlobalVerbose = 0; + +sub setVerbose() +{ + $nGlobalVerbose = 1; +} + +sub set_logfile($) +{ + my $sLogFile = shift; + + if (open(LOGFILE, ">$sLogFile")) + { + $nGlobalLog = 1; + } +} +sub close_logfile() +{ + close(LOGFILE); + $nGlobalLog = 0; +} + +sub log_print($) +{ + my $sLine = shift; + if ($nGlobalLog) + { + print LOGFILE $sLine; + } + if ($nGlobalVerbose == 1) + { + print $sLine; + } + else + { + # In this special case for NetBeans, which show if a debugger can access. + # The Line should print anyway. + if ($sLine =~ /Listening for transport/) + { + print $sLine; + } + } +} + +1; diff --git a/testgraphical/source/makefile.mk b/testgraphical/source/makefile.mk new file mode 100644 index 000000000000..619fd7786f93 --- /dev/null +++ b/testgraphical/source/makefile.mk @@ -0,0 +1,112 @@ +#************************************************************************* +# +# 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. +# +#************************************************************************* + +PRJ=.. + +PRJNAME=gfxcmp +TARGET=notargetyet + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk + +# call with PDF=1 to use office pdf exporter instead of the XPrinter API +.IF "$(PDF)"!="" + CREATORTYPE="-creatortype" pdf +.ELSE + CREATORTYE="-creatortype" ps +.ENDIF + +.IF "$(SHOW)"!="" + P_SHOW=-show +.ENDIF + + +# call with PREPARE=1 to only create new reference files +# copy these files by hand into the corresponding directories +.IF "$(PREPARE)"!="" + PREPAREONLY="-prepareonly" 1 +.ELSE + PREPAREONLY= +.ENDIF + +.IF "$(DOCUMENTPOOL)"=="" + DOCUMENTPOOL=$PRJ$/document-pool +.ENDIF + +# PERLDEBUG=-d:ptkdb +ALLTAR: selftest +# pwd +# $(PERL) $(PERLDEBUG) compare.pl -MAJOR $(WORK_STAMP) -MINOR $(UPDMINOR) -cwsname "$(CWS_WORK_STAMP)" +# $(PERL) $(PERLDEBUG) compare.pl -pool singletest + +# $(PRJ)$/util$/makefile.pmk contains ALLTAR stuff + +# selftest is the default run through at the moment and use pdf export to create output. +# dmake +selftest: + $(PERL) $(PERLDEBUG) compare.pl -creatortype pdf $(PREPAREONLY) -pool singletest -document eis-test.odt $(P_SHOW) + +# selftest_ps is like the default run through but use always postscript print out +# dmake selftest_ps +selftest_ps: + $(PERL) $(PERLDEBUG) compare.pl -creatortype ps $(PREPAREONLY) -pool singletest -document eis-test.odt $(P_SHOW) + +# +# +# The follows are demonstration targets, DO NOT DELETE +# +# + +# dmake demo SHOW=1 +demo: + $(PERL) $(PERLDEBUG) compare.pl $(CREATORTYPE) $(PREPAREONLY) -pool $@ $(P_SHOW) + +# failtest is a demonstration of a failure, with SHOW=1 it should open a java windows which shows 3 pictures, +# the current document, the reference document and the difference between both. +# dmake failtest SHOW=1 +# dmake failtest PREPARE=1 +# This test will most the time fail, it is just a demonstration. +failtest: + $(PERL) $(PERLDEBUG) compare.pl $(CREATORTYPE) $(PREPAREONLY) -force -pool demo -document CurrentTime.ods $(P_SHOW) + +# manual runs through all documents found in document-pool +# dmake manual +# dmake manual PDF=1 SHOW=1 +# dmake manual PREPARE=1 PDF=1 +# should help to create a lot of references at one time. +manual: + $(PERL) $(PERLDEBUG) compare.pl $(CREATORTYPE) $(PREPAREONLY) -force $(P_SHOW) + +# msoffice: +# $(PERL) $(PERLDEBUG) compare.pl -creatortype msoffice $(PREPAREONLY) -pool msoffice -document calc_cellformat_import_biff8.xls $(P_SHOW) + +clean: diff --git a/testgraphical/source/oshelper.pm b/testgraphical/source/oshelper.pm new file mode 100644 index 000000000000..3f2ed1c44e38 --- /dev/null +++ b/testgraphical/source/oshelper.pm @@ -0,0 +1,110 @@ +package oshelper; + +#************************************************************************* +# +# 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. +# +#************************************************************************* + +use English; +use warnings; +use strict; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&getEnvironment &isWindowsEnvironment &isUnixEnvironment &getUsername); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + + +# ------------------------------------------------------------------------------ +sub getEnvironment() +{ + my $sEnvironment; + if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + $sEnvironment = "wntmsci"; + } + elsif ( $OSNAME eq "linux") + { + $sEnvironment = "unxlngi"; + } + elsif ( $OSNAME eq "solaris") + { + $sEnvironment = "unxsoli"; + } + else + { + print "Unknown Environment please check OSNAME: '$OSNAME'\n"; + $sEnvironment = "unknown"; + } + return $sEnvironment; +} + +# ------------------------------------------------------------------------------ + +sub isWindowsEnvironment() +{ + if ($OSNAME eq "MSWin32" || + $OSNAME eq "cygwin") + { + return 1; + } + return 0; +} + +sub isUnixEnvironment() +{ + if ($OSNAME eq "linux" || + $OSNAME eq "solaris") + { + return 1; + } + return 0; +} + +sub getUsername() +{ + my $sUser = $ENV{USER}; + if (!$sUser) + { + $sUser = $ENV{USERNAME}; + } + if (!$sUser) + { + die "Username not set.\n"; + } + return $sUser; +} + +1; diff --git a/testgraphical/source/solarenvhelper.pm b/testgraphical/source/solarenvhelper.pm new file mode 100644 index 000000000000..f8ec17ece12b --- /dev/null +++ b/testgraphical/source/solarenvhelper.pm @@ -0,0 +1,63 @@ +package solarenvhelper; + +#************************************************************************* +# +# 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. +# +#************************************************************************* + +use strict; +use warnings; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&setSolenvPath &getSolenvPath); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + +our $sSolenvPath; +sub setSolenvPath($) +{ + $sSolenvPath = shift; +} +sub getSolenvPath() +{ + if ($sSolenvPath) + { + return $sSolenvPath; + } + print "INTERNAL ERROR: You must set the solenv path to the performancetest, by call setSolenvPath()\n"; + exit 1; +} + +1; diff --git a/testgraphical/source/stringhelper.pm b/testgraphical/source/stringhelper.pm new file mode 100644 index 000000000000..e7d19256bf1b --- /dev/null +++ b/testgraphical/source/stringhelper.pm @@ -0,0 +1,69 @@ +package stringhelper; + +#************************************************************************* +# +# 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. +# +#************************************************************************* + +use strict; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.2 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&endswith &startswith); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + +# string helper like java endsWith +sub endswith($$) +{ + my $string = shift; + my $search = shift; + if ( $string =~ /${search}$/ ) + { + return 1; + } + return 0; +} +sub startswith($$) +{ + my $string = shift; + my $search = shift; + if ( $string =~ /^${search}/ ) + { + return 1; + } + return 0; +} + +1; diff --git a/testgraphical/source/timehelper.pm b/testgraphical/source/timehelper.pm new file mode 100644 index 000000000000..38bd56fc4b20 --- /dev/null +++ b/testgraphical/source/timehelper.pm @@ -0,0 +1,99 @@ +package timehelper; + +#************************************************************************* +# +# 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. +# +#************************************************************************* + +use POSIX qw(strftime); +use POSIX qw(time difftime); +# use POSIX qw(localtime); +use strict; +# use Time::localtime; +use loghelper; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&getTime &endTime &printTime &waitAMinute ); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + + +# ------------------------------------------------------------------------------ +# our $starttime; +sub getTime() +{ + my $nValue; + # $nValue = localtime->sec(); + # $nValue += 60 * localtime->min(); + # $nValue += 3600 * localtime->hour(); + $nValue = time(); + return $nValue; +} +# sub startTime() +# { +# $starttime = getTime(); +# } +sub endTime($) +{ + my $starttime = shift; + + my $endtime = getTime(); + my $nTime = difftime($endtime, $starttime); + # my $nTime = $endtime - $starttime; + # if ($nTime < 0) + # { + # $nTime += 24 * 3600; # add 24 hours + # } + return $nTime; +} +sub printTime($) +{ + my $nTime = shift; + print( "Time: " . $nTime . " seconds.\n\n"); +} + + +# sub waitAMinute() +# { +# # _waitInSeconds(20); +# # _waitInSeconds(20); +# my $now_string = strftime "%a %b %e %H:%M:%S %Y", localtime; +# print $now_string . "\n"; +# # print getCurrentDateString() . "\n"; +# sleep(60); +# } +# + +1; diff --git a/testgraphical/ui/java/ConvwatchGUIProject/build.xml b/testgraphical/ui/java/ConvwatchGUIProject/build.xml new file mode 100644 index 000000000000..e4d82212f35d --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/build.xml @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- You may freely edit this file. See commented blocks below for --> +<!-- some examples of how to customize the build. --> +<!-- (If you delete it and reopen the project it will be recreated.) --> +<!-- By default, only the Clean and Build commands use this build script. --> +<!-- Commands such as Run, Debug, and Test only use this build script if --> +<!-- the Compile on Save feature is turned off for the project. --> +<!-- You can turn off the Compile on Save (or Deploy on Save) setting --> +<!-- in the project's Project Properties dialog box.--> +<project name="ConvwatchGUIProject" default="default" basedir="."> + <description>Builds, tests, and runs the project ConvwatchGUIProject.</description> + <import file="nbproject/build-impl.xml"/> + <!-- + + There exist several targets which are by default empty and which can be + used for execution of your tasks. These targets are usually executed + before and after some main targets. They are: + + -pre-init: called before initialization of project properties + -post-init: called after initialization of project properties + -pre-compile: called before javac compilation + -post-compile: called after javac compilation + -pre-compile-single: called before javac compilation of single file + -post-compile-single: called after javac compilation of single file + -pre-compile-test: called before javac compilation of JUnit tests + -post-compile-test: called after javac compilation of JUnit tests + -pre-compile-test-single: called before javac compilation of single JUnit test + -post-compile-test-single: called after javac compilation of single JUunit test + -pre-jar: called before JAR building + -post-jar: called after JAR building + -post-clean: called after cleaning build products + + (Targets beginning with '-' are not intended to be called on their own.) + + Example of inserting an obfuscator after compilation could look like this: + + <target name="-post-compile"> + <obfuscate> + <fileset dir="${build.classes.dir}"/> + </obfuscate> + </target> + + For list of available properties check the imported + nbproject/build-impl.xml file. + + + Another way to customize the build is by overriding existing main targets. + The targets of interest are: + + -init-macrodef-javac: defines macro for javac compilation + -init-macrodef-junit: defines macro for junit execution + -init-macrodef-debug: defines macro for class debugging + -init-macrodef-java: defines macro for class execution + -do-jar-with-manifest: JAR building (if you are using a manifest) + -do-jar-without-manifest: JAR building (if you are not using a manifest) + run: execution of project + -javadoc-build: Javadoc generation + test-report: JUnit report generation + + An example of overriding the target for project execution could look like this: + + <target name="run" depends="ConvwatchGUIProject-impl.jar"> + <exec dir="bin" executable="launcher.exe"> + <arg file="${dist.jar}"/> + </exec> + </target> + + Notice that the overridden target depends on the jar target and not only on + the compile target as the regular run target does. Again, for a list of available + properties which you can use, check the target you are overriding in the + nbproject/build-impl.xml file. + + --> +</project> diff --git a/testgraphical/ui/java/ConvwatchGUIProject/dist/ConvwatchGUIProject.jar b/testgraphical/ui/java/ConvwatchGUIProject/dist/ConvwatchGUIProject.jar Binary files differnew file mode 100644 index 000000000000..3b0ac20afa74 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/dist/ConvwatchGUIProject.jar diff --git a/testgraphical/ui/java/ConvwatchGUIProject/makefile.mk b/testgraphical/ui/java/ConvwatchGUIProject/makefile.mk new file mode 100644 index 000000000000..5cb16f1d4c31 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/makefile.mk @@ -0,0 +1,71 @@ +#************************************************************************* +# +# 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. +# +#************************************************************************* + +PRJ=../../.. + +PRJNAME=gfxcmp_ui_java_convwatchgui +TARGET=notargetyet + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +# --- ANT build environment --------------------------------------- + +.INCLUDE : antsettings.mk + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk + +.IF "$(SHOW)" == "" +nothing .PHONY: + +.ELSE + + +ALLTAR: dist/ConvwatchGUIProject.jar + +dist/ConvwatchGUIProject.jar: src/ConvwatchGUI.java src/IniFile.java +# .if $(JDK_VERSION) < 160 +# echo "You need at least java 6" +# error +# .endif +# +.IF "$(GUI)"=="WNT" + $(ANT) +.ELSE + ant +.END + +.END + +.INCLUDE : $(PRJ)$/util$/makefile.pmk + +clean: + $(ANT) clean + diff --git a/testgraphical/ui/java/ConvwatchGUIProject/manifest.mf b/testgraphical/ui/java/ConvwatchGUIProject/manifest.mf new file mode 100644 index 000000000000..328e8e5bc3b7 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/build-impl.xml b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/build-impl.xml new file mode 100644 index 000000000000..e493afec4fc3 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/build-impl.xml @@ -0,0 +1,805 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +*** GENERATED FROM project.xml - DO NOT EDIT *** +*** EDIT ../build.xml INSTEAD *** + +For the purpose of easier reading the script +is divided into following sections: + + - initialization + - compilation + - jar + - execution + - debugging + - javadoc + - junit compilation + - junit execution + - junit debugging + - applet + - cleanup + + --> +<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="ConvwatchGUIProject-impl"> + <fail message="Please build using Ant 1.7.1 or higher."> + <condition> + <not> + <antversion atleast="1.7.1"/> + </not> + </condition> + </fail> + <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/> + <!-- + ====================== + INITIALIZATION SECTION + ====================== + --> + <target name="-pre-init"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="-pre-init" name="-init-private"> + <property file="nbproject/private/config.properties"/> + <property file="nbproject/private/configs/${config}.properties"/> + <property file="nbproject/private/private.properties"/> + </target> + <target depends="-pre-init,-init-private" name="-init-user"> + <property file="${user.properties.file}"/> + <!-- The two properties below are usually overridden --> + <!-- by the active platform. Just a fallback. --> + <property name="default.javac.source" value="1.4"/> + <property name="default.javac.target" value="1.4"/> + </target> + <target depends="-pre-init,-init-private,-init-user" name="-init-project"> + <property file="nbproject/configs/${config}.properties"/> + <property file="nbproject/project.properties"/> + </target> + <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init"> + <available file="${manifest.file}" property="manifest.available"/> + <condition property="main.class.available"> + <and> + <isset property="main.class"/> + <not> + <equals arg1="${main.class}" arg2="" trim="true"/> + </not> + </and> + </condition> + <condition property="manifest.available+main.class"> + <and> + <isset property="manifest.available"/> + <isset property="main.class.available"/> + </and> + </condition> + <condition property="do.mkdist"> + <and> + <isset property="libs.CopyLibs.classpath"/> + <not> + <istrue value="${mkdist.disabled}"/> + </not> + </and> + </condition> + <condition property="manifest.available+main.class+mkdist.available"> + <and> + <istrue value="${manifest.available+main.class}"/> + <isset property="do.mkdist"/> + </and> + </condition> + <condition property="manifest.available+mkdist.available"> + <and> + <istrue value="${manifest.available}"/> + <isset property="do.mkdist"/> + </and> + </condition> + <condition property="manifest.available-mkdist.available"> + <or> + <istrue value="${manifest.available}"/> + <isset property="do.mkdist"/> + </or> + </condition> + <condition property="manifest.available+main.class-mkdist.available"> + <or> + <istrue value="${manifest.available+main.class}"/> + <isset property="do.mkdist"/> + </or> + </condition> + <condition property="have.tests"> + <or> + <available file="${test.src.dir}"/> + </or> + </condition> + <condition property="have.sources"> + <or> + <available file="${src.dir}"/> + </or> + </condition> + <condition property="netbeans.home+have.tests"> + <and> + <isset property="netbeans.home"/> + <isset property="have.tests"/> + </and> + </condition> + <condition property="no.javadoc.preview"> + <and> + <isset property="javadoc.preview"/> + <isfalse value="${javadoc.preview}"/> + </and> + </condition> + <property name="run.jvmargs" value=""/> + <property name="javac.compilerargs" value=""/> + <property name="work.dir" value="${basedir}"/> + <condition property="no.deps"> + <and> + <istrue value="${no.dependencies}"/> + </and> + </condition> + <property name="javac.debug" value="true"/> + <property name="javadoc.preview" value="true"/> + <property name="application.args" value=""/> + <property name="source.encoding" value="${file.encoding}"/> + <property name="runtime.encoding" value="${source.encoding}"/> + <condition property="javadoc.encoding.used" value="${javadoc.encoding}"> + <and> + <isset property="javadoc.encoding"/> + <not> + <equals arg1="${javadoc.encoding}" arg2=""/> + </not> + </and> + </condition> + <property name="javadoc.encoding.used" value="${source.encoding}"/> + <property name="includes" value="**"/> + <property name="excludes" value=""/> + <property name="do.depend" value="false"/> + <condition property="do.depend.true"> + <istrue value="${do.depend}"/> + </condition> + <path id="endorsed.classpath.path" path="${endorsed.classpath}"/> + <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'"> + <length length="0" string="${endorsed.classpath}" when="greater"/> + </condition> + <property name="javac.fork" value="false"/> + </target> + <target name="-post-init"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check"> + <fail unless="src.dir">Must set src.dir</fail> + <fail unless="test.src.dir">Must set test.src.dir</fail> + <fail unless="build.dir">Must set build.dir</fail> + <fail unless="dist.dir">Must set dist.dir</fail> + <fail unless="build.classes.dir">Must set build.classes.dir</fail> + <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail> + <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail> + <fail unless="build.test.results.dir">Must set build.test.results.dir</fail> + <fail unless="build.classes.excludes">Must set build.classes.excludes</fail> + <fail unless="dist.jar">Must set dist.jar</fail> + </target> + <target name="-init-macrodef-property"> + <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1"> + <attribute name="name"/> + <attribute name="value"/> + <sequential> + <property name="@{name}" value="${@{value}}"/> + </sequential> + </macrodef> + </target> + <target name="-init-macrodef-javac"> + <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3"> + <attribute default="${src.dir}" name="srcdir"/> + <attribute default="${build.classes.dir}" name="destdir"/> + <attribute default="${javac.classpath}" name="classpath"/> + <attribute default="${includes}" name="includes"/> + <attribute default="${excludes}" name="excludes"/> + <attribute default="${javac.debug}" name="debug"/> + <attribute default="${empty.dir}" name="sourcepath"/> + <attribute default="${empty.dir}" name="gensrcdir"/> + <element name="customize" optional="true"/> + <sequential> + <property location="${build.dir}/empty" name="empty.dir"/> + <mkdir dir="${empty.dir}"/> + <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}"> + <src> + <dirset dir="@{gensrcdir}" erroronmissingdir="false"> + <include name="*"/> + </dirset> + </src> + <classpath> + <path path="@{classpath}"/> + </classpath> + <compilerarg line="${endorsed.classpath.cmd.line.arg}"/> + <compilerarg line="${javac.compilerargs}"/> + <customize/> + </javac> + </sequential> + </macrodef> + <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3"> + <attribute default="${src.dir}" name="srcdir"/> + <attribute default="${build.classes.dir}" name="destdir"/> + <attribute default="${javac.classpath}" name="classpath"/> + <sequential> + <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}"> + <classpath> + <path path="@{classpath}"/> + </classpath> + </depend> + </sequential> + </macrodef> + <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3"> + <attribute default="${build.classes.dir}" name="destdir"/> + <sequential> + <fail unless="javac.includes">Must set javac.includes</fail> + <pathconvert pathsep="," property="javac.includes.binary"> + <path> + <filelist dir="@{destdir}" files="${javac.includes}"/> + </path> + <globmapper from="*.java" to="*.class"/> + </pathconvert> + <delete> + <files includes="${javac.includes.binary}"/> + </delete> + </sequential> + </macrodef> + </target> + <target name="-init-macrodef-junit"> + <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3"> + <attribute default="${includes}" name="includes"/> + <attribute default="${excludes}" name="excludes"/> + <attribute default="**" name="testincludes"/> + <sequential> + <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${build.dir}"> + <batchtest todir="${build.test.results.dir}"> + <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}"> + <filename name="@{testincludes}"/> + </fileset> + </batchtest> + <classpath> + <path path="${run.test.classpath}"/> + </classpath> + <syspropertyset> + <propertyref prefix="test-sys-prop."/> + <mapper from="test-sys-prop.*" to="*" type="glob"/> + </syspropertyset> + <formatter type="brief" usefile="false"/> + <formatter type="xml"/> + <jvmarg line="${endorsed.classpath.cmd.line.arg}"/> + <jvmarg line="${run.jvmargs}"/> + </junit> + </sequential> + </macrodef> + </target> + <target depends="-init-debug-args" name="-init-macrodef-nbjpda"> + <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1"> + <attribute default="${main.class}" name="name"/> + <attribute default="${debug.classpath}" name="classpath"/> + <attribute default="" name="stopclassname"/> + <sequential> + <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}"> + <classpath> + <path path="@{classpath}"/> + </classpath> + </nbjpdastart> + </sequential> + </macrodef> + <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1"> + <attribute default="${build.classes.dir}" name="dir"/> + <sequential> + <nbjpdareload> + <fileset dir="@{dir}" includes="${fix.classes}"> + <include name="${fix.includes}*.class"/> + </fileset> + </nbjpdareload> + </sequential> + </macrodef> + </target> + <target name="-init-debug-args"> + <property name="version-output" value="java version "${ant.java.version}"/> + <condition property="have-jdk-older-than-1.4"> + <or> + <contains string="${version-output}" substring="java version "1.0"/> + <contains string="${version-output}" substring="java version "1.1"/> + <contains string="${version-output}" substring="java version "1.2"/> + <contains string="${version-output}" substring="java version "1.3"/> + </or> + </condition> + <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none"> + <istrue value="${have-jdk-older-than-1.4}"/> + </condition> + <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem"> + <os family="windows"/> + </condition> + <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}"> + <isset property="debug.transport"/> + </condition> + </target> + <target depends="-init-debug-args" name="-init-macrodef-debug"> + <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3"> + <attribute default="${main.class}" name="classname"/> + <attribute default="${debug.classpath}" name="classpath"/> + <element name="customize" optional="true"/> + <sequential> + <java classname="@{classname}" dir="${work.dir}" fork="true"> + <jvmarg line="${endorsed.classpath.cmd.line.arg}"/> + <jvmarg line="${debug-args-line}"/> + <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/> + <jvmarg value="-Dfile.encoding=${runtime.encoding}"/> + <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/> + <jvmarg line="${run.jvmargs}"/> + <classpath> + <path path="@{classpath}"/> + </classpath> + <syspropertyset> + <propertyref prefix="run-sys-prop."/> + <mapper from="run-sys-prop.*" to="*" type="glob"/> + </syspropertyset> + <customize/> + </java> + </sequential> + </macrodef> + </target> + <target name="-init-macrodef-java"> + <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1"> + <attribute default="${main.class}" name="classname"/> + <attribute default="${run.classpath}" name="classpath"/> + <element name="customize" optional="true"/> + <sequential> + <java classname="@{classname}" dir="${work.dir}" fork="true"> + <jvmarg line="${endorsed.classpath.cmd.line.arg}"/> + <jvmarg value="-Dfile.encoding=${runtime.encoding}"/> + <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/> + <jvmarg line="${run.jvmargs}"/> + <classpath> + <path path="@{classpath}"/> + </classpath> + <syspropertyset> + <propertyref prefix="run-sys-prop."/> + <mapper from="run-sys-prop.*" to="*" type="glob"/> + </syspropertyset> + <customize/> + </java> + </sequential> + </macrodef> + </target> + <target name="-init-presetdef-jar"> + <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1"> + <jar compress="${jar.compress}" jarfile="${dist.jar}"> + <j2seproject1:fileset dir="${build.classes.dir}"/> + </jar> + </presetdef> + </target> + <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar" name="init"/> + <!-- + =================== + COMPILATION SECTION + =================== + --> + <target name="-deps-jar-init" unless="built-jar.properties"> + <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/> + <delete file="${built-jar.properties}" quiet="true"/> + </target> + <target if="already.built.jar.${basedir}" name="-warn-already-built-jar"> + <echo level="warn" message="Cycle detected: ConvwatchGUIProject was already built"/> + </target> + <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps"> + <mkdir dir="${build.dir}"/> + <touch file="${built-jar.properties}" verbose="false"/> + <property file="${built-jar.properties}" prefix="already.built.jar."/> + <antcall target="-warn-already-built-jar"/> + <propertyfile file="${built-jar.properties}"> + <entry key="${basedir}" value=""/> + </propertyfile> + </target> + <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/> + <target depends="init" name="-check-automatic-build"> + <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/> + </target> + <target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build"> + <antcall target="clean"/> + </target> + <target depends="init,deps-jar" name="-pre-pre-compile"> + <mkdir dir="${build.classes.dir}"/> + </target> + <target name="-pre-compile"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target if="do.depend.true" name="-compile-depend"> + <pathconvert property="build.generated.subdirs"> + <dirset dir="${build.generated.sources.dir}" erroronmissingdir="false"> + <include name="*"/> + </dirset> + </pathconvert> + <j2seproject3:depend srcdir="${src.dir}:${build.generated.subdirs}"/> + </target> + <target depends="init,deps-jar,-pre-pre-compile,-pre-compile,-compile-depend" if="have.sources" name="-do-compile"> + <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/> + <copy todir="${build.classes.dir}"> + <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/> + </copy> + </target> + <target name="-post-compile"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/> + <target name="-pre-compile-single"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single"> + <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail> + <j2seproject3:force-recompile/> + <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.dir}"/> + </target> + <target name="-post-compile-single"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/> + <!-- + ==================== + JAR BUILDING SECTION + ==================== + --> + <target depends="init" name="-pre-pre-jar"> + <dirname file="${dist.jar}" property="dist.jar.dir"/> + <mkdir dir="${dist.jar.dir}"/> + </target> + <target name="-pre-jar"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" name="-do-jar-without-manifest" unless="manifest.available-mkdist.available"> + <j2seproject1:jar/> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class-mkdist.available"> + <j2seproject1:jar manifest="${manifest.file}"/> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available"> + <j2seproject1:jar manifest="${manifest.file}"> + <j2seproject1:manifest> + <j2seproject1:attribute name="Main-Class" value="${main.class}"/> + </j2seproject1:manifest> + </j2seproject1:jar> + <echo>To run this application from the command line without Ant, try:</echo> + <property location="${build.classes.dir}" name="build.classes.dir.resolved"/> + <property location="${dist.jar}" name="dist.jar.resolved"/> + <pathconvert property="run.classpath.with.dist.jar"> + <path path="${run.classpath}"/> + <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/> + </pathconvert> + <echo>java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class+mkdist.available" name="-do-jar-with-libraries"> + <property location="${build.classes.dir}" name="build.classes.dir.resolved"/> + <pathconvert property="run.classpath.without.build.classes.dir"> + <path path="${run.classpath}"/> + <map from="${build.classes.dir.resolved}" to=""/> + </pathconvert> + <pathconvert pathsep=" " property="jar.classpath"> + <path path="${run.classpath.without.build.classes.dir}"/> + <chainedmapper> + <flattenmapper/> + <globmapper from="*" to="lib/*"/> + </chainedmapper> + </pathconvert> + <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/> + <copylibs compress="${jar.compress}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}"> + <fileset dir="${build.classes.dir}"/> + <manifest> + <attribute name="Main-Class" value="${main.class}"/> + <attribute name="Class-Path" value="${jar.classpath}"/> + </manifest> + </copylibs> + <echo>To run this application from the command line without Ant, try:</echo> + <property location="${dist.jar}" name="dist.jar.resolved"/> + <echo>java -jar "${dist.jar.resolved}"</echo> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+mkdist.available" name="-do-jar-with-libraries-without-mainclass" unless="main.class.available"> + <property location="${build.classes.dir}" name="build.classes.dir.resolved"/> + <pathconvert property="run.classpath.without.build.classes.dir"> + <path path="${run.classpath}"/> + <map from="${build.classes.dir.resolved}" to=""/> + </pathconvert> + <pathconvert pathsep=" " property="jar.classpath"> + <path path="${run.classpath.without.build.classes.dir}"/> + <chainedmapper> + <flattenmapper/> + <globmapper from="*" to="lib/*"/> + </chainedmapper> + </pathconvert> + <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/> + <copylibs compress="${jar.compress}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}"> + <fileset dir="${build.classes.dir}"/> + <manifest> + <attribute name="Class-Path" value="${jar.classpath}"/> + </manifest> + </copylibs> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.mkdist" name="-do-jar-with-libraries-without-manifest" unless="manifest.available"> + <property location="${build.classes.dir}" name="build.classes.dir.resolved"/> + <pathconvert property="run.classpath.without.build.classes.dir"> + <path path="${run.classpath}"/> + <map from="${build.classes.dir.resolved}" to=""/> + </pathconvert> + <pathconvert pathsep=" " property="jar.classpath"> + <path path="${run.classpath.without.build.classes.dir}"/> + <chainedmapper> + <flattenmapper/> + <globmapper from="*" to="lib/*"/> + </chainedmapper> + </pathconvert> + <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/> + <copylibs compress="${jar.compress}" jarfile="${dist.jar}" runtimeclasspath="${run.classpath.without.build.classes.dir}"> + <fileset dir="${build.classes.dir}"/> + <manifest> + <attribute name="Class-Path" value="${jar.classpath}"/> + </manifest> + </copylibs> + </target> + <target name="-post-jar"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-do-jar-with-libraries-without-mainclass,-do-jar-with-libraries-without-manifest,-post-jar" description="Build JAR." name="jar"/> + <!-- + ================= + EXECUTION SECTION + ================= + --> + <target depends="init,compile" description="Run a main class." name="run"> + <j2seproject1:java> + <customize> + <arg line="${application.args}"/> + </customize> + </j2seproject1:java> + </target> + <target name="-do-not-recompile"> + <property name="javac.includes.binary" value=""/> + </target> + <target depends="init,compile-single" name="run-single"> + <fail unless="run.class">Must select one file in the IDE or set run.class</fail> + <j2seproject1:java classname="${run.class}"/> + </target> + <target depends="init,compile-test-single" name="run-test-with-main"> + <fail unless="run.class">Must select one file in the IDE or set run.class</fail> + <j2seproject1:java classname="${run.class}" classpath="${run.test.classpath}"/> + </target> + <!-- + ================= + DEBUGGING SECTION + ================= + --> + <target depends="init" if="netbeans.home" name="-debug-start-debugger"> + <j2seproject1:nbjpdastart name="${debug.class}"/> + </target> + <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test"> + <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/> + </target> + <target depends="init,compile" name="-debug-start-debuggee"> + <j2seproject3:debug> + <customize> + <arg line="${application.args}"/> + </customize> + </j2seproject3:debug> + </target> + <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/> + <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto"> + <j2seproject1:nbjpdastart stopclassname="${main.class}"/> + </target> + <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/> + <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single"> + <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail> + <j2seproject3:debug classname="${debug.class}"/> + </target> + <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/> + <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test"> + <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail> + <j2seproject3:debug classname="${debug.class}" classpath="${debug.test.classpath}"/> + </target> + <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/> + <target depends="init" name="-pre-debug-fix"> + <fail unless="fix.includes">Must set fix.includes</fail> + <property name="javac.includes" value="${fix.includes}.java"/> + </target> + <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix"> + <j2seproject1:nbjpdareload/> + </target> + <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/> + <!-- + =============== + JAVADOC SECTION + =============== + --> + <target depends="init" name="-javadoc-build"> + <mkdir dir="${dist.javadoc.dir}"/> + <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}"> + <classpath> + <path path="${javac.classpath}"/> + </classpath> + <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}"> + <filename name="**/*.java"/> + </fileset> + <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false"> + <include name="**/*.java"/> + </fileset> + </javadoc> + </target> + <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview"> + <nbbrowse file="${dist.javadoc.dir}/index.html"/> + </target> + <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/> + <!-- + ========================= + JUNIT COMPILATION SECTION + ========================= + --> + <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test"> + <mkdir dir="${build.test.classes.dir}"/> + </target> + <target name="-pre-compile-test"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target if="do.depend.true" name="-compile-test-depend"> + <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/> + </target> + <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test"> + <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/> + <copy todir="${build.test.classes.dir}"> + <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/> + </copy> + </target> + <target name="-post-compile-test"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/> + <target name="-pre-compile-test-single"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single"> + <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail> + <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/> + <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/> + <copy todir="${build.test.classes.dir}"> + <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/> + </copy> + </target> + <target name="-post-compile-test-single"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/> + <!-- + ======================= + JUNIT EXECUTION SECTION + ======================= + --> + <target depends="init" if="have.tests" name="-pre-test-run"> + <mkdir dir="${build.test.results.dir}"/> + </target> + <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run"> + <j2seproject3:junit testincludes="**/*Test.java"/> + </target> + <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run"> + <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail> + </target> + <target depends="init" if="have.tests" name="test-report"/> + <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/> + <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/> + <target depends="init" if="have.tests" name="-pre-test-run-single"> + <mkdir dir="${build.test.results.dir}"/> + </target> + <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single"> + <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail> + <j2seproject3:junit excludes="" includes="${test.includes}"/> + </target> + <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single"> + <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail> + </target> + <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/> + <!-- + ======================= + JUNIT DEBUGGING SECTION + ======================= + --> + <target depends="init,compile-test" if="have.tests" name="-debug-start-debuggee-test"> + <fail unless="test.class">Must select one file in the IDE or set test.class</fail> + <property location="${build.test.results.dir}/TEST-${test.class}.xml" name="test.report.file"/> + <delete file="${test.report.file}"/> + <mkdir dir="${build.test.results.dir}"/> + <j2seproject3:debug classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner" classpath="${ant.home}/lib/ant.jar:${ant.home}/lib/ant-junit.jar:${debug.test.classpath}"> + <customize> + <syspropertyset> + <propertyref prefix="test-sys-prop."/> + <mapper from="test-sys-prop.*" to="*" type="glob"/> + </syspropertyset> + <arg value="${test.class}"/> + <arg value="showoutput=true"/> + <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter"/> + <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,${test.report.file}"/> + </customize> + </j2seproject3:debug> + </target> + <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test"> + <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/> + </target> + <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/> + <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test"> + <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/> + </target> + <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/> + <!-- + ========================= + APPLET EXECUTION SECTION + ========================= + --> + <target depends="init,compile-single" name="run-applet"> + <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail> + <j2seproject1:java classname="sun.applet.AppletViewer"> + <customize> + <arg value="${applet.url}"/> + </customize> + </j2seproject1:java> + </target> + <!-- + ========================= + APPLET DEBUGGING SECTION + ========================= + --> + <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet"> + <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail> + <j2seproject3:debug classname="sun.applet.AppletViewer"> + <customize> + <arg value="${applet.url}"/> + </customize> + </j2seproject3:debug> + </target> + <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/> + <!-- + =============== + CLEANUP SECTION + =============== + --> + <target name="-deps-clean-init" unless="built-clean.properties"> + <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/> + <delete file="${built-clean.properties}" quiet="true"/> + </target> + <target if="already.built.clean.${basedir}" name="-warn-already-built-clean"> + <echo level="warn" message="Cycle detected: ConvwatchGUIProject was already built"/> + </target> + <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps"> + <mkdir dir="${build.dir}"/> + <touch file="${built-clean.properties}" verbose="false"/> + <property file="${built-clean.properties}" prefix="already.built.clean."/> + <antcall target="-warn-already-built-clean"/> + <propertyfile file="${built-clean.properties}"> + <entry key="${basedir}" value=""/> + </propertyfile> + </target> + <target depends="init" name="-do-clean"> + <delete dir="${build.dir}"/> + <delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/> + </target> + <target name="-post-clean"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/> + <target name="-check-call-dep"> + <property file="${call.built.properties}" prefix="already.built."/> + <condition property="should.call.dep"> + <not> + <isset property="already.built.${call.subproject}"/> + </not> + </condition> + </target> + <target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep"> + <ant antfile="${call.script}" inheritall="false" target="${call.target}"> + <propertyset> + <propertyref prefix="transfer."/> + <mapper from="transfer.*" to="*" type="glob"/> + </propertyset> + </ant> + </target> +</project> diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/genfiles.properties b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/genfiles.properties new file mode 100644 index 000000000000..9f120781c97e --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/genfiles.properties @@ -0,0 +1,9 @@ +# x-no-translate +build.xml.data.CRC32=d17eccb2 +build.xml.script.CRC32=a183e208 +build.xml.stylesheet.CRC32=958a1d3e@1.32.1.45 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=d17eccb2 +nbproject/build-impl.xml.script.CRC32=ea0e5dc9 +nbproject/build-impl.xml.stylesheet.CRC32=576378a2@1.32.1.45 diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/config.properties b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/config.properties new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/config.properties diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.properties b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.properties new file mode 100644 index 000000000000..23e517d892d7 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.properties @@ -0,0 +1,8 @@ +# x-no-translate +application.args=D:\\sources\\gfxcmp02\\DEV300\\ooo\\testgraphical\\wntmsci12.pro\\misc\\CurrentTime.ods.ps.ini +compile.on.save=true +do.depend=false +do.jar=true +javac.debug=true +javadoc.preview=true +user.properties.file=C:\\Documents and Settings\\ll93751\\.netbeans\\6.8\\build.properties diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.xml b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.xml new file mode 100644 index 000000000000..c1f155a782bd --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project-private xmlns="http://www.netbeans.org/ns/project-private/1"> + <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/> +</project-private> diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.properties b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.properties new file mode 100644 index 000000000000..3a6731d3bcf6 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.properties @@ -0,0 +1,72 @@ +# x-no-translate +application.desc=This Program shows three pictures in one line. +application.title=ConvwatchGUIProject +application.vendor=Oracle and/or its affiliates +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/ConvwatchGUIProject.jar +dist.javadoc.dir=${dist.dir}/javadoc +endorsed.classpath= +excludes= +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.source=1.5 +javac.target=1.5 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir}:\ + ${libs.junit.classpath}:\ + ${libs.junit_4.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +jnlp.codebase.type=local +jnlp.descriptor=application +jnlp.enabled=false +jnlp.offline-allowed=false +jnlp.signed=false +main.class=ConvwatchGUI +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value +# or test-sys-prop.name=value to set system properties for unit tests): +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.xml b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.xml new file mode 100644 index 000000000000..0bc513904c86 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://www.netbeans.org/ns/project/1"> + <type>org.netbeans.modules.java.j2seproject</type> + <configuration> + <data xmlns="http://www.netbeans.org/ns/j2se-project/3"> + <name>ConvwatchGUIProject</name> + <source-roots> + <root id="src.dir"/> + </source-roots> + <test-roots> + <root id="test.src.dir"/> + </test-roots> + </data> + </configuration> +</project> diff --git a/testgraphical/ui/java/ConvwatchGUIProject/src/ConvwatchGUI.form b/testgraphical/ui/java/ConvwatchGUIProject/src/ConvwatchGUI.form new file mode 100644 index 000000000000..ad0552d1efd5 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/src/ConvwatchGUI.form @@ -0,0 +1,286 @@ +<?xml version="1.0" encoding="UTF-8" ?> + +<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo"> + <Properties> + <Property name="defaultCloseOperation" type="int" value="3"/> + </Properties> + <SyntheticProperties> + <SyntheticProperty name="formSizePolicy" type="int" value="1"/> + </SyntheticProperties> + <Events> + <EventHandler event="componentResized" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="formComponentResized"/> + <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="formPropertyChange"/> + </Events> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="jPanel5" alignment="0" max="32767" attributes="0"/> + <Component id="jPanel4" alignment="0" max="32767" attributes="0"/> + <Group type="102" alignment="1" attributes="0"> + <Component id="jPanelOriginal" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jPanelReference" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jPanelDifference" max="32767" attributes="0"/> + </Group> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jPanel5" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="jPanelReference" alignment="1" max="32767" attributes="1"/> + <Component id="jPanelOriginal" alignment="1" max="32767" attributes="1"/> + <Component id="jPanelDifference" alignment="0" max="32767" attributes="1"/> + </Group> + <EmptySpace min="-2" max="-2" attributes="0"/> + <Component id="jPanel4" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JPanel" name="jPanelOriginal"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="Picture"/> + </Border> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabelOriginalImage" pref="299" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabelOriginalImage" pref="514" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabelOriginalImage"> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JPanel" name="jPanelReference"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="Reference Picture"/> + </Border> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabelReferenceImage" pref="299" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabelReferenceImage" pref="514" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabelReferenceImage"> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JPanel" name="jPanelDifference"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="Difference"/> + </Border> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabelDifferenceImage" pref="298" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabelDifferenceImage" pref="514" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabelDifferenceImage"> + <Properties> + <Property name="name" type="java.lang.String" value="DifferenceImage" noResource="true"/> + </Properties> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JPanel" name="jPanel4"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="Action"/> + </Border> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jButton2" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jButton3" min="-2" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="jLabelCurrentPage" min="-2" pref="107" max="-2" attributes="0"/> + <EmptySpace pref="614" max="32767" attributes="0"/> + <Component id="jButton1" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace max="32767" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="jButton1" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jButton2" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jButton3" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabelCurrentPage" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JButton" name="jButton1"> + <Properties> + <Property name="text" type="java.lang.String" value="Close"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JButton" name="jButton2"> + <Properties> + <Property name="label" type="java.lang.String" value="prev page"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton2ActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JButton" name="jButton3"> + <Properties> + <Property name="label" type="java.lang.String" value="next page"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton3ActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="jLabelCurrentPage"> + <Properties> + <Property name="text" type="java.lang.String" value="Current page: 1"/> + </Properties> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JPanel" name="jPanel5"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="Information"/> + </Border> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="jLabel1" alignment="0" pref="972" max="32767" attributes="0"/> + <Component id="jLabelDocumentName" alignment="0" pref="972" max="32767" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel1" pref="50" max="32767" attributes="0"/> + <EmptySpace min="-2" max="-2" attributes="0"/> + <Component id="jLabelDocumentName" min="-2" pref="19" max="-2" attributes="0"/> + <EmptySpace min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="text" type="java.lang.String" value="<html>Here you see a graphical compare by pictures created with a current running office, a stored reference picture and the difference between those both pictures created by ImageMagicks 'composite'.
</html>" noResource="true"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabelDocumentName"> + <Properties> + <Property name="text" type="java.lang.String" value="jLabel2"/> + </Properties> + </Component> + </SubComponents> + </Container> + </SubComponents> +</Form> diff --git a/testgraphical/ui/java/ConvwatchGUIProject/src/ConvwatchGUI.java b/testgraphical/ui/java/ConvwatchGUIProject/src/ConvwatchGUI.java new file mode 100644 index 000000000000..625e7b80c6e0 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/src/ConvwatchGUI.java @@ -0,0 +1,535 @@ + +import java.awt.Dimension; +import java.awt.Image; +import java.io.File; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.SwingWorker; + +/* +************************************************************************** +* +* 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. +* +************************************************************************** + */ + +/* + * Simple windows, which should show differences if there are some + */ + +public class ConvwatchGUI extends javax.swing.JFrame +{ + private ImageIcon[] m_aImageIcon; + private String m_sInifile; + private int m_nMaxPages; + private int m_nCurrentPage; + + /** Creates new form ConvwatchGUI + * @param args + */ + + private ConvwatchGUI(String args[]) + { + if (args.length > 0) + { + if (args[0].endsWith(".ini")) + { + m_sInifile = args[0]; + fillImageIconsFromInifile(); + } + else + { + fillImageIcons(args); + } + } + + String sVersion = System.getProperty("java.version"); + Float f = Float.valueOf(sVersion.substring(0,3)); + if (f.floatValue() < (float)1.6) + { + System.out.println("You need at least Java version 1.6"); + System.exit(1); + } + + initComponents(); + jLabelDocumentName.setText("Document: " + m_sInifile); + } + + void fillImageIconsFromInifile() + { + File aFile = new File(m_sInifile); + if (!aFile.exists()) + { + GlobalLogWriter.println("Inifile '" + m_sInifile + "' not found."); + printUsage(); + System.exit(1); + } + + IniFile aIniFile = new IniFile(aFile); + int nPages = aIniFile.getIntValue("global", "pages", 0); + if (nPages < 1) + { + System.out.println("No pages found."); + } + m_nMaxPages = nPages; + m_nCurrentPage = 1; + fillImageIcons(); + } + + private void fillImageIcons() + { + File aFile = new File(m_sInifile); + IniFile aIniFile = new IniFile(aFile); + String sSection = "page" + m_nCurrentPage; + String[] files = new String[3]; + files[0] = aIniFile.getValue(sSection, "newgfx"); // current created picture + files[1] = aIniFile.getValue(sSection, "oldgfx"); // reference picture + files[2] = aIniFile.getValue(sSection, "diffgfx"); + fillImageIcons(files); + } + + /** + * Give 3 file names + * @param args + */ + private void fillImageIcons(String args[]) + { + boolean bLoadImages = false; + m_aImageIcon = new ImageIcon[3]; + for (int i=0;i<3;i++) + { + if (args.length > i && args[i] != null) + { + File aFile = new File(args[i]); + if (aFile.exists()) + { + // TODO: Load images + // Image aImage = new BufferedImage(100,100, BufferedImage.TYPE_INT_RGB); + // aImage. + m_aImageIcon[i] = new ImageIcon(args[i]); + if (m_aImageIcon[i] != null) + { + bLoadImages = true; + } + } + else + { + System.out.println("Can't read file: " + aFile.getName()); + bLoadImages = false; + } + } + else + { + System.out.println("There is no #" + (i + 1) + " image given."); + bLoadImages = false; + } + } +// if (!bLoadImages) +// { +// printUsage(); +// System.exit(1); +// } + + + + // TODO: Set images. + + // formComponentResized(null); + } + + private void printUsage() + { + System.out.println("Usage:"); + System.out.println(" ConvwatchGUI <pic1> <pic2> <pic3>"); + System.out.println("or ConvwatchGUI <inifile>"); + } + +// private int m_nOldWidth; + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + jPanelOriginal = new javax.swing.JPanel(); + jLabelOriginalImage = new javax.swing.JLabel(); + jPanelReference = new javax.swing.JPanel(); + jLabelReferenceImage = new javax.swing.JLabel(); + jPanelDifference = new javax.swing.JPanel(); + jLabelDifferenceImage = new javax.swing.JLabel(); + jPanel4 = new javax.swing.JPanel(); + jButton1 = new javax.swing.JButton(); + jButton2 = new javax.swing.JButton(); + jButton3 = new javax.swing.JButton(); + jLabelCurrentPage = new javax.swing.JLabel(); + jPanel5 = new javax.swing.JPanel(); + jLabel1 = new javax.swing.JLabel(); + jLabelDocumentName = new javax.swing.JLabel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + addComponentListener(new java.awt.event.ComponentAdapter() { + public void componentResized(java.awt.event.ComponentEvent evt) { + formComponentResized(evt); + } + }); + addPropertyChangeListener(new java.beans.PropertyChangeListener() { + public void propertyChange(java.beans.PropertyChangeEvent evt) { + formPropertyChange(evt); + } + }); + + jPanelOriginal.setBorder(javax.swing.BorderFactory.createTitledBorder("Picture")); + + javax.swing.GroupLayout jPanelOriginalLayout = new javax.swing.GroupLayout(jPanelOriginal); + jPanelOriginal.setLayout(jPanelOriginalLayout); + jPanelOriginalLayout.setHorizontalGroup( + jPanelOriginalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanelOriginalLayout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabelOriginalImage, javax.swing.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE) + .addContainerGap()) + ); + jPanelOriginalLayout.setVerticalGroup( + jPanelOriginalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanelOriginalLayout.createSequentialGroup() + .addComponent(jLabelOriginalImage, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE) + .addContainerGap()) + ); + + jPanelReference.setBorder(javax.swing.BorderFactory.createTitledBorder("Reference Picture")); + + javax.swing.GroupLayout jPanelReferenceLayout = new javax.swing.GroupLayout(jPanelReference); + jPanelReference.setLayout(jPanelReferenceLayout); + jPanelReferenceLayout.setHorizontalGroup( + jPanelReferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanelReferenceLayout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabelReferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE) + .addContainerGap()) + ); + jPanelReferenceLayout.setVerticalGroup( + jPanelReferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanelReferenceLayout.createSequentialGroup() + .addComponent(jLabelReferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE) + .addContainerGap()) + ); + + jPanelDifference.setBorder(javax.swing.BorderFactory.createTitledBorder("Difference")); + + jLabelDifferenceImage.setName("DifferenceImage"); // NOI18N + + javax.swing.GroupLayout jPanelDifferenceLayout = new javax.swing.GroupLayout(jPanelDifference); + jPanelDifference.setLayout(jPanelDifferenceLayout); + jPanelDifferenceLayout.setHorizontalGroup( + jPanelDifferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanelDifferenceLayout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabelDifferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 298, Short.MAX_VALUE) + .addContainerGap()) + ); + jPanelDifferenceLayout.setVerticalGroup( + jPanelDifferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanelDifferenceLayout.createSequentialGroup() + .addComponent(jLabelDifferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE) + .addContainerGap()) + ); + + jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Action")); + + jButton1.setText("Close"); + jButton1.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton1ActionPerformed(evt); + } + }); + + jButton2.setLabel("prev page"); + jButton2.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton2ActionPerformed(evt); + } + }); + + jButton3.setLabel("next page"); + jButton3.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton3ActionPerformed(evt); + } + }); + + jLabelCurrentPage.setText("Current page: 1"); + + javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); + jPanel4.setLayout(jPanel4Layout); + jPanel4Layout.setHorizontalGroup( + jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup() + .addContainerGap() + .addComponent(jButton2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jButton3) + .addGap(18, 18, 18) + .addComponent(jLabelCurrentPage, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 614, Short.MAX_VALUE) + .addComponent(jButton1) + .addContainerGap()) + ); + jPanel4Layout.setVerticalGroup( + jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jButton1) + .addComponent(jButton2) + .addComponent(jButton3) + .addComponent(jLabelCurrentPage)) + .addContainerGap()) + ); + + jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder("Information")); + + jLabel1.setText("<html>Here you see a graphical compare by pictures created with a current running office, a stored reference picture and the difference between those both pictures created by ImageMagicks 'composite'.\n</html>"); // NOI18N + + jLabelDocumentName.setText("jLabel2"); + + javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); + jPanel5.setLayout(jPanel5Layout); + jPanel5Layout.setHorizontalGroup( + jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 972, Short.MAX_VALUE) + .addComponent(jLabelDocumentName, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 972, Short.MAX_VALUE)) + .addContainerGap()) + ); + jPanel5Layout.setVerticalGroup( + jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel5Layout.createSequentialGroup() + .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 50, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabelDocumentName, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jPanel5, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(jPanelOriginal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jPanelReference, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jPanelDifference, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jPanelReference, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanelOriginal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanelDifference, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + ); + + pack(); + }// </editor-fold>//GEN-END:initComponents + + private boolean bAdd = false; + + private void formComponentResized(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_formComponentResized + {//GEN-HEADEREND:event_formComponentResized + // TODO add your handling code here: + // we need to set icons to null + // if we don't do this, icons can only grow, but not shrink :-( + + initialiseImages(); + } + private void initialiseImages() + { + if (jLabelOriginalImage.getIcon() != null) + { + jLabelOriginalImage.setIcon(null); + jLabelReferenceImage.setIcon(null); + jLabelDifferenceImage.setIcon(null); + + int w = getWidth(); + int h = getHeight(); + if (bAdd) + { + this.setSize(w, h + 1); + bAdd = false; + } + else + { + this.setSize(w, h - 1); + bAdd = true; + } + } + else + { + new ResizeImage(jLabelOriginalImage, m_aImageIcon[0]).execute(); + new ResizeImage(jLabelReferenceImage, m_aImageIcon[1]).execute(); + new ResizeImage(jLabelDifferenceImage, m_aImageIcon[2]).execute(); + } + int dummy=0; + }//GEN-LAST:event_formComponentResized + + private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton1ActionPerformed + {//GEN-HEADEREND:event_jButton1ActionPerformed + // TODO add your handling code here: + System.exit(1); + }//GEN-LAST:event_jButton1ActionPerformed + + private void formPropertyChange(java.beans.PropertyChangeEvent evt)//GEN-FIRST:event_formPropertyChange + {//GEN-HEADEREND:event_formPropertyChange + // TODO add your handling code here: + int dummy = 0; + }//GEN-LAST:event_formPropertyChange + + private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton2ActionPerformed + {//GEN-HEADEREND:event_jButton2ActionPerformed + // TODO add your handling code here: + int nOldPage = m_nCurrentPage; + if (m_nCurrentPage > 1) + { + m_nCurrentPage--; + } + if (nOldPage != m_nCurrentPage) + { + jLabelCurrentPage.setText("Current page: " + m_nCurrentPage); + fillImageIcons(); + initialiseImages(); + } + }//GEN-LAST:event_jButton2ActionPerformed + + private void jButton3ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton3ActionPerformed + {//GEN-HEADEREND:event_jButton3ActionPerformed + // TODO add your handling code here: + int nOldPage = m_nCurrentPage; + if (m_nCurrentPage < m_nMaxPages) + { + m_nCurrentPage++; + } + if (nOldPage != m_nCurrentPage) + { + jLabelCurrentPage.setText("Current page: " + m_nCurrentPage); + fillImageIcons(); + initialiseImages(); + } + }//GEN-LAST:event_jButton3ActionPerformed + + class ResizeImage extends SwingWorker <ImageIcon, Object> + { + private JLabel m_jLabel; + private ImageIcon m_aImageIcon; + private int w; + private int h; + + public ResizeImage(JLabel _aLabel, ImageIcon _aImageIcon) + { + m_jLabel = _aLabel; + m_aImageIcon = _aImageIcon; + w = _aLabel.getWidth(); + h = _aLabel.getHeight(); + } + + // dont access here anything to "Event Swing Thread" + @Override + public ImageIcon doInBackground() + { + Image aImage = m_aImageIcon.getImage().getScaledInstance(w, h, Image.SCALE_AREA_AVERAGING); // SCALE_SMOOTH + final ImageIcon aIcon = new ImageIcon(aImage); + // m_jLabel.setIcon(aIcon); + return aIcon; + } + + @Override + protected void done() + { + try + { + m_jLabel.setIcon(get()); + } + catch (Exception e) + {} + } + + } + + /** + * @param args the command line arguments + */ + public static void main(final String args[]) + { + + // Start GUI + + java.awt.EventQueue.invokeLater(new Runnable() + { + + public void run() + { + ConvwatchGUI aGUI = new ConvwatchGUI(args); + aGUI.setTitle("Graphical Compare"); + aGUI.setPreferredSize(new Dimension(1024, 768)); + + aGUI.setVisible(true); + } + }); + } + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton jButton1; + private javax.swing.JButton jButton2; + private javax.swing.JButton jButton3; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabelCurrentPage; + private javax.swing.JLabel jLabelDifferenceImage; + private javax.swing.JLabel jLabelDocumentName; + private javax.swing.JLabel jLabelOriginalImage; + private javax.swing.JLabel jLabelReferenceImage; + private javax.swing.JPanel jPanel4; + private javax.swing.JPanel jPanel5; + private javax.swing.JPanel jPanelDifference; + private javax.swing.JPanel jPanelOriginal; + private javax.swing.JPanel jPanelReference; + // End of variables declaration//GEN-END:variables +} diff --git a/testgraphical/ui/java/ConvwatchGUIProject/src/IniFile.java b/testgraphical/ui/java/ConvwatchGUIProject/src/IniFile.java new file mode 100644 index 000000000000..20cede5b1c33 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/src/IniFile.java @@ -0,0 +1,718 @@ +/************************************************************************* + * + * 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.File; +import java.io.RandomAccessFile; +import java.util.ArrayList; +import java.util.Enumeration; + + +/** + * Simple implementation of a inifile manager + */ +class GlobalLogWriter +{ + public static void println(String _s) + { + System.out.println(_s); + } +} + +/** + Helper class to give a simple API to read/write windows like ini files +*/ + +/* public */ // is only need, if we need this class outside package convwatch +public class IniFile implements Enumeration +{ + + /** + * internal representation of the ini file content. + * Problem, if ini file changed why other write something difference, we don't realise this. + */ + private String m_sFilename; + // private File m_aFile; + private ArrayList<String> m_aList; + boolean m_bListContainUnsavedChanges = false; + private int m_aEnumerationPos = 0; + + /** + open a ini file by it's name + @param _sFilename string a filename, if the file doesn't exist, a new empty ini file will create. + write back to disk only if there are really changes. + */ + public IniFile(String _sFilename) + { + m_sFilename = _sFilename; + // m_aFile = new File(_sFilename); + m_aList = loadLines(); + m_aEnumerationPos = findNextSection(0); + } + + /** + open a ini file by it's name + @param _aFile a java.io.File object, if the file doesn't exist, a new empty ini file will create. + write back to disk only if there are really changes. + */ + public IniFile(File _aFile) + { + m_sFilename = _aFile.getAbsolutePath(); + m_aList = loadLines(); + m_aEnumerationPos = findNextSection(0); + } + + public void insertFirstComment(String[] _aList) + { + if (m_aList.size() == 0) + { + // can only insert if there is nothing else already in the ini file + for (int i = 0; i < _aList.length; i++) + { + m_aList.add(_aList[i]); + } + } + } + + private ArrayList<String> loadLines() + { + ArrayList<String> aLines = new ArrayList<String>(); + File aFile = new File(m_sFilename); + if (!aFile.exists()) + { + // GlobalLogWriter.println("couldn't find file '" + m_sFilename + "', will be created."); + // DebugHelper.exception(BasicErrorCode.SbERR_FILE_NOT_FOUND, ""); + // m_bListContainUnsavedChanges = false; + return aLines; + } + RandomAccessFile aReader = null; + // BufferedReader aReader; + try + { + aReader = new RandomAccessFile(aFile, "r"); + String aLine = ""; + while (aLine != null) + { + aLine = aReader.readLine(); + if (aLine != null && aLine.length() > 0) + { + aLines.add(aLine); + } + } + } + catch (java.io.FileNotFoundException fne) + { + GlobalLogWriter.println("couldn't open file " + m_sFilename); + GlobalLogWriter.println("Message: " + fne.getMessage()); + // DebugHelper.exception(BasicErrorCode.SbERR_FILE_NOT_FOUND, ""); + } + catch (java.io.IOException ie) + { + GlobalLogWriter.println("Exception occurs while reading from file " + m_sFilename); + GlobalLogWriter.println("Message: " + ie.getMessage()); + // DebugHelper.exception(BasicErrorCode.SbERR_INTERNAL_ERROR, ie.getMessage()); + } + try + { + aReader.close(); + } + catch (java.io.IOException ie) + { + GlobalLogWriter.println("Couldn't close file " + m_sFilename); + GlobalLogWriter.println("Message: " + ie.getMessage()); + // DebugHelper.exception(BasicErrorCode.SbERR_INTERNAL_ERROR, ie.getMessage()); + } + return aLines; + } + + /** + * @return true, if the ini file contain some readable data + */ + public boolean is() + { + return m_aList.size() > 1 ? true : false; + } + + /** + * Check if a given Section and Key exists in the ini file + * @param _sSectionName + * @param _sKey + * @return true if the given Section, Key exists, now you can get the value + */ + public boolean hasValue(String _sSectionName, String _sKey) + { + int n = findKey(_sSectionName, _sKey); + if (n > 0) + { + return true; + } + return false; + } + // ----------------------------------------------------------------------------- + + private boolean isRemark(String _sLine) + { + if (((_sLine.length() < 2)) || + (_sLine.startsWith("#")) || + (_sLine.startsWith(";"))) + { + return true; + } + return false; + } + + private String getItem(int i) + { + return m_aList.get(i); + } + + private String buildSectionName(String _sSectionName) + { + String sFindSection = "[" + _sSectionName + "]"; + return sFindSection; + } + + private String sectionToString(String _sSectionName) + { + String sKeyName = _sSectionName; + if (sKeyName.startsWith("[") && + sKeyName.endsWith("]")) + { + sKeyName = sKeyName.substring(1, sKeyName.length() - 1); + } + return sKeyName; + } + + private String toLowerIfNeed(String _sName) + { + return _sName.toLowerCase(); + } + + // return the number where this section starts + private int findSection(String _sSection) + { + String sFindSection = toLowerIfNeed(buildSectionName(_sSection)); + // ----------- find _sSection --------------- + int i; + for (i = 0; i < m_aList.size(); i++) + { + String sLine = toLowerIfNeed(getItem(i).trim()); + if (isRemark(sLine)) + { + continue; + } + if (sFindSection.equals("[]")) + { + // special case, empty Section. + return i - 1; + } + if (sLine.startsWith(sFindSection)) + { + return i; + } + } + return -1; + } + + /** + * Checks if a given section exists in the ini file + * @param _sSection + * @return true if the given _sSection was found + */ + public boolean hasSection(String _sSection) + { + int i = findSection(_sSection); + if (i == -1) + { + return false; + } + return true; + } + + // return the line number, where the key is found. + private int findKey(String _sSection, String _sKey) + { + int i = findSection(_sSection); + if (i == -1) + { + // Section not found, therefore the value can't exist + return -1; + } + return findKeyFromKnownSection(i, _sKey); + } + + // i must be the index in the list, where the well known section starts + private int findKeyFromKnownSection(int _nSectionIndex, String _sKey) + { + _sKey = toLowerIfNeed(_sKey); + for (int j = _nSectionIndex + 1; j < m_aList.size(); j++) + { + String sLine = getItem(j).trim(); + + if (isRemark(sLine)) + { + continue; + } + if (sLine.startsWith("[") /* && sLine.endsWith("]") */) + { + // TODO: due to the fact we would like to insert an empty line before new sections + // TODO: we should check if we are in an empty line and if, go back one line. + + // found end. + break; + } + + int nEqual = sLine.indexOf("="); + if (nEqual >= 0) + { + String sKey = toLowerIfNeed(sLine.substring(0, nEqual).trim()); + if (sKey.equals(_sKey)) + { + return j; + } + } + } + return -1; + } + + // i must be the index in the list, where the well known section starts + private int findLastKnownKeyIndex(int _nSectionIndex, String _sKey) + { + _sKey = toLowerIfNeed(_sKey); + int i = _nSectionIndex + 1; + for (int j = i; j < m_aList.size(); j++) + { + String sLine = getItem(j).trim(); + + if (isRemark(sLine)) + { + continue; + } + + if (sLine.startsWith("[") /* && sLine.endsWith("]") */) + { + // found end. + return j; + } + + int nEqual = sLine.indexOf("="); + if (nEqual >= 0) + { + String sKey = toLowerIfNeed(sLine.substring(0, nEqual).trim()); + if (sKey.equals(_sKey)) + { + return j; + } + } + } + return i; + } + + private String getValue(int _nIndex) + { + String sLine = getItem(_nIndex).trim(); + if (isRemark(sLine)) + { + return ""; + } + int nEqual = sLine.indexOf("="); + if (nEqual >= 0) + { + String sKey = sLine.substring(0, nEqual).trim(); + String sValue = sLine.substring(nEqual + 1).trim(); + return sValue; + } + return ""; + } + + /** + @param _sSection string + @param _sKey string + @return the value found in the inifile which is given by the section and key parameter + */ + // private int m_nCurrentPosition; + // private String m_sOldKey; + public String getValue(String _sSection, String _sKey) + { + String sValue = ""; + int m_nCurrentPosition = findKey(_sSection, _sKey); + if (m_nCurrentPosition == -1) + { + // Section not found, therefore the value can't exist + return ""; + } + + // m_sOldKey = _sKey; + sValue = getValue(m_nCurrentPosition); + + return sValue; + } + +// private String getNextValue() +// { +// if (m_nCurrentPosition >= 0) +// { +// ++m_nCurrentPosition; +// String sValue = getValue(m_nCurrentPosition); +// return sValue; +// } +// return ""; +// } + /** + * Returns the value at Section, Key converted to an integer + * Check with hasValue(Section, Key) to check before you get into trouble. + * @param _sSection + * @param _sKey + * @param _nDefault if there is a problem, key not found... this value will return + * @return the value as integer if possible to convert, if not return default value. + */ + public int getIntValue(String _sSection, String _sKey, int _nDefault) + { + String sValue = getValue(_sSection, _sKey); + int nValue = _nDefault; + if (sValue.length() > 0) + { + try + { + nValue = Integer.valueOf(sValue).intValue(); + } + catch (java.lang.NumberFormatException e) + { + GlobalLogWriter.println("IniFile.getIntValue(): Caught a number format exception, return the default value."); + } + } + return nValue; + } + +/** + * close a open inifile. + * If there are changes, all changes will store back to disk. + */ + public void close() + { + store(); + } + + /** + write back the ini file to the disk, only if there exist changes + * @deprecated use close() instead! + */ + + // TODO: make private + private void store() + { + if (m_bListContainUnsavedChanges == false) + { + // nothing has changed, so no need to store + return; + } + + File aFile = new File(m_sFilename); + if (aFile.exists()) + { + // System.out.println("couldn't find file " + m_sFilename); + // TODO: little bit unsafe here, first rename, after write is complete, delete the old. + aFile.delete(); + if (aFile.exists()) + { + GlobalLogWriter.println("Couldn't delete the file " + m_sFilename); + return; + // DebugHelper.exception(BasicErrorCode.SbERR_INTERNAL_ERROR, "Couldn't delete the file " + m_sFilename); + } + } + // if (! aFile.canWrite()) + // { + // System.out.println("Couldn't write to file " + m_sFilename); + // DebugHelper.exception(BasicErrorCode.SbERR_INTERNAL_ERROR, ""); + // } + try + { + RandomAccessFile aWriter = new RandomAccessFile(aFile, "rw"); + for (int i = 0; i < m_aList.size(); i++) + { + String sLine = getItem(i); + if (sLine.startsWith("[")) + { + // write an extra empty line before next section. + aWriter.writeByte((int) '\n'); + } + aWriter.writeBytes(sLine); + aWriter.writeByte((int) '\n'); + } + aWriter.close(); + } + catch (java.io.FileNotFoundException fne) + { + GlobalLogWriter.println("couldn't open file for writing " + m_sFilename); + GlobalLogWriter.println("Message: " + fne.getMessage()); + // DebugHelper.exception(BasicErrorCode.SbERR_FILE_NOT_FOUND, ""); + } + catch (java.io.IOException ie) + { + GlobalLogWriter.println("Exception occurs while writing to file " + m_sFilename); + GlobalLogWriter.println("Message: " + ie.getMessage()); + // DebugHelper.exception(BasicErrorCode.SbERR_INTERNAL_ERROR, ie.getMessage()); + } + } + + public void insertValue(String _sSection, String _sKey, int _nValue) + { + insertValue(_sSection, _sKey, String.valueOf(_nValue)); + } + + public void insertValue(String _sSection, String _sKey, long _nValue) + { + insertValue(_sSection, _sKey, String.valueOf(_nValue)); + } + + /** + insert a value + there are 3 cases + 1. section doesn't exist, goto end and insert a new section, insert a new key value pair + 2. section exist but key not, search section, search key, if key is -1 get last known key position and insert new key value pair there + 3. section exist and key exist, remove the old key and insert the key value pair at the same position + * @param _sSection + * @param _sKey + * @param _sValue + */ + public void insertValue(String _sSection, String _sKey, String _sValue) + { + int i = findSection(_sSection); + if (i == -1) + { + // case 1: section doesn't exist + String sFindSection = buildSectionName(_sSection); + + // TODO: before create a new Section, insert a empty line + m_aList.add(sFindSection); + if (_sKey.length() > 0) + { + String sKeyValuePair = _sKey + "=" + _sValue; + m_aList.add(sKeyValuePair); + } + m_bListContainUnsavedChanges = true; + return; + } + int j = findKeyFromKnownSection(i, _sKey); + if (j == -1) + { + // case 2: section exist, but not the key + j = findLastKnownKeyIndex(i, _sKey); + if (_sKey.length() > 0) + { + String sKeyValuePair = _sKey + "=" + _sValue; + m_aList.add(j, sKeyValuePair); + m_bListContainUnsavedChanges = true; + } + return; + } + else + { + // case 3: section exist, and also the key + String sKeyValuePair = _sKey + "=" + _sValue; + m_aList.set(j, sKeyValuePair); + m_bListContainUnsavedChanges = true; + } + } + // ----------------------------------------------------------------------------- + // String replaceEvaluatedValue(String _sSection, String _sValue) + // { + // String sValue = _sValue; + // int nIndex = 0; + // while (( nIndex = sValue.indexOf("$(", nIndex)) >= 0) + // { + // int nNextIndex = sValue.indexOf(")", nIndex); + // if (nNextIndex >= 0) + // { + // String sKey = sValue.substring(nIndex + 2, nNextIndex); + // String sNewValue = getValue(_sSection, sKey); + // if (sNewValue != null && sNewValue.length() > 0) + // { + // String sRegexpKey = "\\$\\(" + sKey + "\\)"; + // sValue = sValue.replaceAll(sRegexpKey, sNewValue); + // } + // nIndex = nNextIndex; + // } + // else + // { + // nIndex += 2; + // } + // } + // return sValue; + // } + // ----------------------------------------------------------------------------- + + // public String getLocalEvaluatedValue(String _sSection, String _sKey) + // { + // String sValue = getValue(_sSection, _sKey); + // sValue = replaceEvaluatedValue(_sSection, sValue); + // return sValue; + // } + + // ----------------------------------------------------------------------------- + + // this is a special behaviour. + // public String getGlobalLocalEvaluatedValue(String _sSection, String _sKey) + // { + // String sGlobalValue = getKey("global", _sKey); + // String sLocalValue = getKey(_sSection, _sKey); + // if (sLocalValue.length() == 0) + // { + // sGlobalValue = replaceEvaluatedKey(_sSection, sGlobalValue); + // sGlobalValue = replaceEvaluatedKey("global", sGlobalValue); + // return sGlobalValue; + // } + // sLocalValue = replaceEvaluatedKey(_sSection, sLocalValue); + // sLocalValue = replaceEvaluatedKey("global", sLocalValue); + // + // return sLocalValue; + // } + public void removeSection(String _sSectionToRemove) + { + // first, search for the name + int i = findSection(_sSectionToRemove); + if (i == -1) + { + // Section to remove not found, do nothing. + return; + } + // second, find the next section + int j = findNextSection(i + 1); + if (j == -1) + { + // if we are at the end, use size() as second section + j = m_aList.size(); + } + // remove all between first and second section + for (int k = i; k < j; k++) + { + m_aList.remove(i); + } + // mark the list as changed + m_bListContainUnsavedChanges = true; + } + + /** + * some tests for this class + */ +// public static void main(String[] args) +// { +// String sTempFile = System.getProperty("java.io.tmpdir"); +// sTempFile += "inifile"; +// +// +// IniFile aIniFile = new IniFile(sTempFile); +// String sValue = aIniFile.getValue("Section", "Key"); +// // insert a new value to a already exist section +// aIniFile.insertValue("Section", "Key2", "a new value in a existing section"); +// // replace a value +// aIniFile.insertValue("Section", "Key", "replaced value"); +// // create a new value +// aIniFile.insertValue("New Section", "Key", "a new key value pair"); +// aIniFile.insertValue("New Section", "Key2", "a new second key value pair"); +// +// String sValue2 = aIniFile.getValue("Section2", "Key"); +// +// aIniFile.removeSection("Section"); +// aIniFile.removeSection("New Section"); +// +// aIniFile.close(); +// } + + /** + * Enumeration Interface + * @return true, if there are more Key values + */ + public boolean hasMoreElements() + { + if (m_aEnumerationPos >= 0 && + m_aEnumerationPos < m_aList.size()) + { + return true; + } + return false; + } + + /** + * Find the next line, which starts with '[' + * @param i start position + * @return the line where '[' found or -1 + */ + private int findNextSection(int i) + { + if (i >= 0) + { + while (i < m_aList.size()) + { + String sLine = m_aList.get(i); + if (sLine.startsWith("[")) + { + return i; + } + i++; + } + } + return -1; + } + + /** + * Enumeration Interface + * @return a key without the enveloped '[' ']' + */ + public Object nextElement() + { + int nLineWithSection = findNextSection(m_aEnumerationPos); + if (nLineWithSection != -1) + { + String sSection = m_aList.get(nLineWithSection); + m_aEnumerationPos = findNextSection(nLineWithSection + 1); + sSection = sectionToString(sSection); + return sSection; + } + else + { + m_aEnumerationPos = m_aList.size(); + } + return null; + } + + /** + * Helper to count the occurence of Sections + * @return returns the count of '^['.*']$' Elements + */ + public int getElementCount() + { + int nCount = 0; + int nPosition = 0; + while ((nPosition = findNextSection(nPosition)) != -1) + { + nCount++; + nPosition++; + } + return nCount; + } +} + diff --git a/testgraphical/ui/java/makefile.mk b/testgraphical/ui/java/makefile.mk new file mode 100644 index 000000000000..134787a17a08 --- /dev/null +++ b/testgraphical/ui/java/makefile.mk @@ -0,0 +1,53 @@ +#************************************************************************* +# +# 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. +# +#************************************************************************* + +PRJ=..$/.. + +PRJNAME=gfxcmp_ui_java +TARGET=notargetyet + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk + +.IF "$(SHOW)" == "" +nothing .PHONY: + +.ELSE + +# PERLDEBUG=-d:ptkdb +ALLTAR: + $(COPY) ConvwatchGUIProject$/dist/ConvwatchGUIProject.jar $(CLASSDIR) + +.END + +.INCLUDE : $(PRJ)$/util$/makefile.pmk + diff --git a/testgraphical/util/makefile.pmk b/testgraphical/util/makefile.pmk new file mode 100644 index 000000000000..98b94dca0779 --- /dev/null +++ b/testgraphical/util/makefile.pmk @@ -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. +# +#************************************************************************* + +# this file will include by other makefiles only + +demo: ALLTAR +selftest: ALLTAR +failtest: ALLTAR + +clean: clean_all |