From d4797da9509f4efd1decf558a59d8f76015579ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com> Date: Sat, 3 Mar 2007 13:24:11 +0000 Subject: [PATCH] Unit tests for PDFForm. Some cleanup in PDFForm, and minor changes to make it easier to test. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@13206 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5Form/PDFForm.py | 82 ++-- product/ERP5Form/tests/data/test_1.pdf | Bin 0 -> 25921 bytes product/ERP5Form/tests/data/test_1.sla | 582 +++++++++++++++++++++++++ product/ERP5Form/tests/testPDFForm.py | 130 ++++++ 4 files changed, 755 insertions(+), 39 deletions(-) create mode 100644 product/ERP5Form/tests/data/test_1.pdf create mode 100644 product/ERP5Form/tests/data/test_1.sla create mode 100644 product/ERP5Form/tests/testPDFForm.py diff --git a/product/ERP5Form/PDFForm.py b/product/ERP5Form/PDFForm.py index 2091b26e73..dfa2c1f1a1 100644 --- a/product/ERP5Form/PDFForm.py +++ b/product/ERP5Form/PDFForm.py @@ -52,10 +52,10 @@ try: except ImportError: SUPPORTS_WEBDAV_LOCKS = 0 -# FIXME: Programs linked against mandriva libgcj v 3.4.0 ave a strange -# issue that make them impossible to popen within zope. -# That's why we do not use the 'real' pdftk but a replacement program, -# pdftk-emulation available from nexedi's RPM repositories. +# Programs linked against mandriva libgcj v 3.4.0 ave a strange issue that make +# them impossible to popen within zope. That's why we do not use the 'real' +# pdftk but a replacement program, pdftk-emulation available from nexedi's RPM +# repositories. PDFTK_EXECUTABLE = "pdftk-emulation" # With python >= 2.4 and zope >= 2.7.8, pdftk-emulation is no longer needed @@ -71,9 +71,8 @@ if python_version >= 204 and zope_version >= 20708: PDFTK_EXECUTABLE = "pdftk" -class PDFTk : - """ - A class to wrapp calls to pdftk executable, found at +class PDFTk: + """A class to wrapp calls to pdftk executable, found at http://www.accesspdf.com/pdftk/ """ def catPages(self, pdfFile, cat_option) : @@ -193,6 +192,7 @@ class PDFTk : fdf += "trailer\x0d<<\x0d/Root 1 0 R \x0d\x0d>>\x0d%%EOF\x0d\x0a" return fdf + # Constructors manage_addPDFForm = DTMLFile("dtml/PDFForm_add", globals()) def addPDFForm(self, id, title="", pdf_file=None, REQUEST=None): @@ -203,7 +203,7 @@ def addPDFForm(self, id, title="", pdf_file=None, REQUEST=None): # upload content if pdf_file: self._getOb(id).manage_upload(pdf_file) - self._getOb(id).content_type="application/pdf" + self._getOb(id).content_type = "application/pdf" if REQUEST : u = REQUEST['URL1'] @@ -211,9 +211,9 @@ def addPDFForm(self, id, title="", pdf_file=None, REQUEST=None): u = "%s/%s" % (u, quote(id)) REQUEST.RESPONSE.redirect(u+'/manage_main') + class CalculatedValues : - """ - This class holds a reference to calculated values, for use in TALES, + """This class holds a reference to calculated values, for use in TALES, because in PDF Form filling, there is lots of references to others cell values (sums ...). This class will be in TALES context under the key 'cell' @@ -237,21 +237,37 @@ class CalculatedValues : # doesn't complain that NoneType doesn't support + when a1 not found return self.__values[attr] __getattr__ = __getitem__ - allow_class(CalculatedValues) + +class CircularReferencyError(ValueError): + """A circular reference is found trying to evaluate cell TALES.""" + + class EmptyERP5PdfFormError(Exception): """Error thrown when you try to display an empty Pdf. """ allow_class(EmptyERP5PdfFormError) + class PDFForm(File): - """ - This class allows to fill PDF Form with TALES expressions, + """This class allows to fill PDF Form with TALES expressions, using a TALES expression for each cell. + + TODO: + * cache compiled TALES + * set _v_errors when setting invalid TALES (setCellTALES can raise, but + not doEditCells) """ + meta_type = "ERP5 PDF Form" icon = "www/PDFForm.png" + # Those 2 are ugly names, but we keep compatibility + # the page range we want to print (a TALES expr) + __page_range__ = '' + # the method to format values (a TALES expr) + __format_method__ = '' + # Declarative Security security = ClassSecurityInfo() @@ -277,21 +293,16 @@ class PDFForm(File): filter(lambda option:option['label'] != "View", File.manage_options) ) + # XXX This non thread-safeness is probably a problem under high load pdftk = PDFTk() - def __init__ (self, id, title, pdf_file) : + def __init__ (self, id, title='', pdf_file=''): # holds all the cell informations, even those not related to this form - self.all_cells = PersistentMapping() + self.all_cells = PersistentMapping() # holds the cells related to this pdf form - self.cells = PersistentMapping() - # the page range we want to print - self.__page_range__ = "" - # the method to format values - self.__format_method__ = "" + self.cells = PersistentMapping() - if not pdf_file : - raise ValueError ("The pdf form file should not be empty") - # File constructor will call manage_upload, so we don't need to call it + # File constructor will set the file content File.__init__(self, id, title, pdf_file) security.declareProtected(Permissions.ManagePortal, 'manage_upload') @@ -389,7 +400,7 @@ class PDFForm(File): return raise ValueError, "Unable to download from any url from the "\ "`download_url` property." - + security.declareProtected(Permissions.ManagePortal, 'deletePdfContent') def deletePdfContent(self) : @@ -425,7 +436,7 @@ class PDFForm(File): return pdf security.declareProtected(Permissions.ManagePortal, 'doEditCells') - def doEditCells(self, REQUEST): + def doEditCells(self, REQUEST, RESPONSE=None): """ This is the action to the 'Edit Cell TALES' tab. """ if SUPPORTS_WEBDAV_LOCKS and self.wl_isLocked(): raise ResourceLockedError, "File is locked via WebDAV" @@ -434,12 +445,9 @@ class PDFForm(File): self.setCellTALES(k, REQUEST.get(str(k), v)) self.__format_method__ = REQUEST.get("__format_method__") self.__page_range__ = REQUEST.get("__page_range__") - - message = "Saved changes." - if getattr(self, '_v_warnings', None): - message = ("<strong>Warning:</strong> <i>%s</i>" - % '<br>'.join(self._v_warnings)) - return self.manage_cells(manage_tabs_message=message) + + if RESPONSE: + return self.manage_cells(manage_tabs_message="Saved changes.") security.declareProtected(Permissions.View, 'generatePDF') def generatePDF(self, REQUEST=None, RESPONSE=None, *args, **kwargs) : @@ -450,8 +458,7 @@ class PDFForm(File): context = { 'here' : self.aq_parent, 'context' : self.aq_parent, 'request' : REQUEST } - if hasattr(self, "__format_method__") \ - and self.__format_method__ not in ('', None) : + if self.__format_method__: compiled_tales = getEngine().compile(self.__format_method__) format_method = getEngine().getContext(context).evaluate(compiled_tales) # try to support both method name and method object @@ -465,7 +472,7 @@ class PDFForm(File): 'format method (%r) is not callable' % format_method) data = str(self.data) pdf = self.pdftk.fillFormWithDict(data, values) - if self.__page_range__ not in ('', None) : + if self.__page_range__: compiled_tales = getEngine().compile(self.__page_range__) page_range = getEngine().getContext(context).evaluate(compiled_tales) if page_range : @@ -517,8 +524,8 @@ class PDFForm(File): uncalculated_values.remove(cell_name) values[cell_name] = value if len(uncalculated_values) == uncalculated_values_len : - raise ValueError, "Circular reference: unable to evaluate cells " \ - + `uncalculated_values` + raise CircularReferencyError("Unable to evaluate cells: %r" + % (uncalculated_values, )) security.declareProtected(Permissions.View, 'getCellNames') def getCellNames(self, REQUEST=None) : @@ -579,9 +586,6 @@ class PDFForm(File): security.declareProtected(Permissions.View, 'getFormatMethodTALES') def getFormatMethodTALES(self): """ returns the TALES expression for the format method attribute """ - # backward compat - if not hasattr(self, "__format_method__") : - self.__format_method__ = "" return self.__format_method__ security.declareProtected(Permissions.ManagePortal, 'setFormatMethodTALES') diff --git a/product/ERP5Form/tests/data/test_1.pdf b/product/ERP5Form/tests/data/test_1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a1b936fdeef2c4b6c2ec0815be321897731e53af GIT binary patch literal 25921 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 literal 0 HcmV?d00001 diff --git a/product/ERP5Form/tests/data/test_1.sla b/product/ERP5Form/tests/data/test_1.sla new file mode 100644 index 0000000000..16c54d99fa --- /dev/null +++ b/product/ERP5Form/tests/data/test_1.sla @@ -0,0 +1,582 @@ +<SCRIBUSUTF8NEW Version="1.3.0" > + <DOCUMENT HalfRes="1" MAGMAX="800" MAJGRID="100" ABSTSPALTEN="11" ScratchBottom="20" AUTOCHECK="0" LANGUAGE="French" DPIn2="" DPgam="0" HCMS="1" UnderlineWidth="-1" TabFill="" DGAP="0" ORIENTATION="0" PASPECT="1" WIDTH="1" POLYR="0" SHOWLINK="0" MINWORDLEN="3" UnderlinePos="-1" VTIEFSC="100" DOCLANGINFO="" COMMENTS="" AutoSaveTime="600000" POLYS="0" GuideRad="10" TITLE="" KEYWORDS="" TabWidth="36" DSIZE="12" AUTOSPALTEN="1" PAGESIZE="A4" STIL="1" PEN="Black" POLYC="4" SnapToGuides="0" GROUPC="3" DOCFORMAT="" DOCDATE="" BORDERTOP="9" currentProfile="PostScript" MARGC="#0000ff" EndArrow="0" SHOWBASE="0" SHOWGRID="0" SnapToGrid="0" GUIDELOCK="0" DIMo="1" DIPr="0" StrikeThruPos="-1" WIDTHLINE="1" DPuse="0" DPSo="0" DOCSOURCE="" FIRSTLEFT="1" FIRSTNUM="1" GuideC="#000080" BRUSH="Black" StartArrow="0" ScratchRight="100" POLYF="0.5" SHOWMARGIN="1" DPbla="1" StrikeThruWidth="-1" VHOCHSC="100" DOCTYPE="" BORDERBOTTOM="40" BRUSHSHADE="100" StrokeText="Black" BASEGRID="14.4" VTIEF="33" DOCCONTRIB="" DOCRELATION="" PICTSCX="1" CPICT="White" PENLINE="Black" AutoSave="0" BASEO="0" DOCIDENT="" PICTSCY="1" MAGSTEP="25" ScratchTop="20" POLYFD="0" AUTOL="20" PUBLISHER="" ANZPAGES="1" PSCALE="1" LINESHADE="100" HYCOUNT="2" DIMo2="1" AUTHOR="" UNITS="0" BORDERRIGHT="9" RANDF="0" MAJORC="#00ff00" PENSHADE="100" PENTEXT="Black" GRAB="4" SHOWGUIDES="1" DPPr="" DPMo="" PAGEHEIGHT="842" PAGEWIDTH="595" BACKG="1" GuideZ="10" MINGRID="20" VHOCH="33" DOCCOVER="" DCOL="1" EmbeddedPath="0" SHOWPICT="1" SHOWFRAME="1" AUTOMATIC="1" ALAYER="0" DOCRIGHTS="" PICTSHADE="100" ScratchLeft="100" DPIn="" VKAPIT="75" DFONT="Blue Highway Bold" BORDERLEFT="9" PAGEC="#ffffff" BaseC="#c0c0c0" MINORC="#00ff00" MAGMIN="10" STILLINE="1" SHOWControl="0" > + <CheckProfile checkTransparency="1" autoCheck="1" minResolution="144" checkOverflow="1" ignoreErrors="0" checkRasterPDF="1" checkResolution="1" checkGlyphs="1" Name="PDF/X-3" checkAnnotations="1" checkPictures="1" checkOrphans="1" /> + <CheckProfile checkTransparency="1" autoCheck="1" minResolution="72" checkOverflow="1" ignoreErrors="0" checkRasterPDF="1" checkResolution="1" checkGlyphs="1" Name="PDF·1.3" checkAnnotations="0" checkPictures="1" checkOrphans="1" /> + <CheckProfile checkTransparency="0" autoCheck="1" minResolution="72" checkOverflow="1" ignoreErrors="0" checkRasterPDF="1" checkResolution="1" checkGlyphs="1" Name="PDF·1.4" checkAnnotations="0" checkPictures="1" checkOrphans="1" /> + <CheckProfile checkTransparency="1" autoCheck="1" minResolution="72" checkOverflow="1" ignoreErrors="0" checkRasterPDF="1" checkResolution="1" checkGlyphs="1" Name="PostScript" checkAnnotations="0" checkPictures="1" checkOrphans="1" /> + <COLOR RGB="#f0f8ff" CMYK="#0f070000" NAME="AliceBlue" /> + <COLOR RGB="#faebd7" CMYK="#000f2305" NAME="AntiqueWhite" /> + <COLOR RGB="#ffefdb" CMYK="#00102400" NAME="AntiqueWhite1" /> + <COLOR RGB="#eedfcc" CMYK="#000f2211" NAME="AntiqueWhite2" /> + <COLOR RGB="#cdc0b0" CMYK="#000d1d32" NAME="AntiqueWhite3" /> + <COLOR RGB="#8b8378" CMYK="#00081374" NAME="AntiqueWhite4" /> + <COLOR RGB="#7fffd4" CMYK="#80002b00" NAME="Aquamarine" /> + <COLOR RGB="#7fffd4" CMYK="#80002b00" NAME="Aquamarine1" /> + <COLOR RGB="#76eec6" CMYK="#78002811" NAME="Aquamarine2" /> + <COLOR RGB="#66cdaa" CMYK="#67002332" NAME="Aquamarine3" /> + <COLOR RGB="#458b74" CMYK="#46001774" NAME="Aquamarine4" /> + <COLOR RGB="#f0ffff" CMYK="#0f000000" NAME="Azure" /> + <COLOR RGB="#f0ffff" CMYK="#0f000000" NAME="Azure1" /> + <COLOR RGB="#e0eeee" CMYK="#0e000011" NAME="Azure2" /> + <COLOR RGB="#c1cdcd" CMYK="#0c000032" NAME="Azure3" /> + <COLOR RGB="#838b8b" CMYK="#08000074" NAME="Azure4" /> + <COLOR RGB="#f5f5dc" CMYK="#0000190a" NAME="Beige" /> + <COLOR RGB="#ffe4c4" CMYK="#001b3b00" NAME="Bisque" /> + <COLOR RGB="#ffe4c4" CMYK="#001b3b00" NAME="Bisque1" /> + <COLOR RGB="#eed5b7" CMYK="#00193711" NAME="Bisque2" /> + <COLOR RGB="#cdb79e" CMYK="#00162f32" NAME="Bisque3" /> + <COLOR RGB="#8b7d6b" CMYK="#000e2074" NAME="Bisque4" /> + <COLOR RGB="#000000" CMYK="#000000ff" NAME="Black" /> + <COLOR RGB="#ffebcd" CMYK="#00143200" NAME="BlanchedAlmond" /> + <COLOR RGB="#0000ff" CMYK="#ffff0000" NAME="Blue" /> + <COLOR RGB="#0000ff" CMYK="#ffff0000" NAME="Blue1" /> + <COLOR RGB="#0000ee" CMYK="#eeee0011" NAME="Blue2" /> + <COLOR RGB="#0000cd" CMYK="#cdcd0032" NAME="Blue3" /> + <COLOR RGB="#00008b" CMYK="#8b8b0074" NAME="Blue4" /> + <COLOR RGB="#8a2be2" CMYK="#58b7001d" NAME="BlueViolet" /> + <COLOR RGB="#a52a2a" CMYK="#007b7b5a" NAME="Brown" /> + <COLOR RGB="#ff4040" CMYK="#00bfbf00" NAME="Brown1" /> + <COLOR RGB="#ee3b3b" CMYK="#00b3b311" NAME="Brown2" /> + <COLOR RGB="#cd3333" CMYK="#009a9a32" NAME="Brown3" /> + <COLOR RGB="#8b2323" CMYK="#00686874" NAME="Brown4" /> + <COLOR RGB="#deb887" CMYK="#00265721" NAME="Burlywood" /> + <COLOR RGB="#ffd39b" CMYK="#002c6400" NAME="Burlywood1" /> + <COLOR RGB="#eec591" CMYK="#00295d11" NAME="Burlywood2" /> + <COLOR RGB="#cdaa7d" CMYK="#00235032" NAME="Burlywood3" /> + <COLOR RGB="#8b7355" CMYK="#00183674" NAME="Burlywood4" /> + <COLOR RGB="#5f9ea0" CMYK="#4102005f" NAME="CadetBlue" /> + <COLOR RGB="#98f5ff" CMYK="#670a0000" NAME="CadetBlue1" /> + <COLOR RGB="#8ee5ee" CMYK="#60090011" NAME="CadetBlue2" /> + <COLOR RGB="#7ac5cd" CMYK="#53080032" NAME="CadetBlue3" /> + <COLOR RGB="#53868b" CMYK="#38050074" NAME="CadetBlue4" /> + <COLOR RGB="#7fff00" CMYK="#8000ff00" NAME="Chartreuse" /> + <COLOR RGB="#7fff00" CMYK="#8000ff00" NAME="Chartreuse1" /> + <COLOR RGB="#76ee00" CMYK="#7800ee11" NAME="Chartreuse2" /> + <COLOR RGB="#66cd00" CMYK="#6700cd32" NAME="Chartreuse3" /> + <COLOR RGB="#458b00" CMYK="#46008b74" NAME="Chartreuse4" /> + <COLOR RGB="#d2691e" CMYK="#0069b42d" NAME="Chocolate" /> + <COLOR RGB="#ff7f24" CMYK="#0080db00" NAME="Chocolate1" /> + <COLOR RGB="#ee7621" CMYK="#0078cd11" NAME="Chocolate2" /> + <COLOR RGB="#cd661d" CMYK="#0067b032" NAME="Chocolate3" /> + <COLOR RGB="#8b4513" CMYK="#00467874" NAME="Chocolate4" /> + <COLOR RGB="#ff7f50" CMYK="#0080af00" NAME="Coral" /> + <COLOR RGB="#ff7256" CMYK="#008da900" NAME="Coral1" /> + <COLOR RGB="#ee6a50" CMYK="#00849e11" NAME="Coral2" /> + <COLOR RGB="#cd5b45" CMYK="#00728832" NAME="Coral3" /> + <COLOR RGB="#8b3e2f" CMYK="#004d5c74" NAME="Coral4" /> + <COLOR RGB="#6495ed" CMYK="#89580012" NAME="CornflowerBlue" /> + <COLOR RGB="#fff8dc" CMYK="#00072300" NAME="Cornsilk" /> + <COLOR RGB="#fff8dc" CMYK="#00072300" NAME="Cornsilk1" /> + <COLOR RGB="#eee8cd" CMYK="#00062111" NAME="Cornsilk2" /> + <COLOR RGB="#cdc8b1" CMYK="#00051c32" NAME="Cornsilk3" /> + <COLOR RGB="#8b8878" CMYK="#00031374" NAME="Cornsilk4" /> + <COLOR RGB="#00ffff" CMYK="#ff000000" NAME="Cyan" /> + <COLOR RGB="#00ffff" CMYK="#ff000000" NAME="Cyan1" /> + <COLOR RGB="#00eeee" CMYK="#ee000011" NAME="Cyan2" /> + <COLOR RGB="#00cdcd" CMYK="#cd000032" NAME="Cyan3" /> + <COLOR RGB="#008b8b" CMYK="#8b000074" NAME="Cyan4" /> + <COLOR RGB="#00008b" CMYK="#8b8b0074" NAME="DarkBlue" /> + <COLOR RGB="#008b8b" CMYK="#8b000074" NAME="DarkCyan" /> + <COLOR RGB="#b8860b" CMYK="#0032ad47" NAME="DarkGoldenrod" /> + <COLOR RGB="#ffb90f" CMYK="#0046f000" NAME="DarkGoldenrod1" /> + <COLOR RGB="#eead0e" CMYK="#0041e011" NAME="DarkGoldenrod2" /> + <COLOR RGB="#cd950c" CMYK="#0038c132" NAME="DarkGoldenrod3" /> + <COLOR RGB="#8b6508" CMYK="#00268374" NAME="DarkGoldenrod4" /> + <COLOR RGB="#006400" CMYK="#6400649b" NAME="DarkGreen" /> + <COLOR RGB="#a9a9a9" CMYK="#00000056" NAME="DarkGrey" /> + <COLOR RGB="#bdb76b" CMYK="#00065242" NAME="DarkKhaki" /> + <COLOR RGB="#8b008b" CMYK="#008b0074" NAME="DarkMagenta" /> + <COLOR RGB="#556b2f" CMYK="#16003c94" NAME="DarkOliveGreen" /> + <COLOR RGB="#caff70" CMYK="#35008f00" NAME="DarkOliveGreen1" /> + <COLOR RGB="#bcee68" CMYK="#32008611" NAME="DarkOliveGreen2" /> + <COLOR RGB="#a2cd5a" CMYK="#2b007332" NAME="DarkOliveGreen3" /> + <COLOR RGB="#6e8b3d" CMYK="#1d004e74" NAME="DarkOliveGreen4" /> + <COLOR RGB="#ff8c00" CMYK="#0073ff00" NAME="DarkOrange" /> + <COLOR RGB="#ff7f00" CMYK="#0080ff00" NAME="DarkOrange1" /> + <COLOR RGB="#ee7600" CMYK="#0078ee11" NAME="DarkOrange2" /> + <COLOR RGB="#cd6600" CMYK="#0067cd32" NAME="DarkOrange3" /> + <COLOR RGB="#8b4500" CMYK="#00468b74" NAME="DarkOrange4" /> + <COLOR RGB="#9932cc" CMYK="#339a0033" NAME="DarkOrchid" /> + <COLOR RGB="#bf3eff" CMYK="#40c10000" NAME="DarkOrchid1" /> + <COLOR RGB="#b23aee" CMYK="#3cb40011" NAME="DarkOrchid2" /> + <COLOR RGB="#9a32cd" CMYK="#339b0032" NAME="DarkOrchid3" /> + <COLOR RGB="#68228b" CMYK="#23690074" NAME="DarkOrchid4" /> + <COLOR RGB="#8b0000" CMYK="#008b8b74" NAME="DarkRed" /> + <COLOR RGB="#e9967a" CMYK="#00536f16" NAME="DarkSalmon" /> + <COLOR RGB="#8fbc8f" CMYK="#2d002d43" NAME="DarkSeaGreen" /> + <COLOR RGB="#c1ffc1" CMYK="#3e003e00" NAME="DarkSeaGreen1" /> + <COLOR RGB="#b4eeb4" CMYK="#3a003a11" NAME="DarkSeaGreen2" /> + <COLOR RGB="#9bcd9b" CMYK="#32003232" NAME="DarkSeaGreen3" /> + <COLOR RGB="#698b69" CMYK="#22002274" NAME="DarkSeaGreen4" /> + <COLOR RGB="#483d8b" CMYK="#434e0074" NAME="DarkSlateBlue" /> + <COLOR RGB="#2f4f4f" CMYK="#200000b0" NAME="DarkSlateGrey" /> + <COLOR RGB="#97ffff" CMYK="#68000000" NAME="DarkSlateGrey1" /> + <COLOR RGB="#8deeee" CMYK="#61000011" NAME="DarkSlateGrey2" /> + <COLOR RGB="#79cdcd" CMYK="#54000032" NAME="DarkSlateGrey3" /> + <COLOR RGB="#528b8b" CMYK="#39000074" NAME="DarkSlateGrey4" /> + <COLOR RGB="#00ced1" CMYK="#d103002e" NAME="DarkTurquoise" /> + <COLOR RGB="#9400d3" CMYK="#3fd3002c" NAME="DarkViolet" /> + <COLOR RGB="#ff1493" CMYK="#00eb6c00" NAME="DeepPink" /> + <COLOR RGB="#ff1493" CMYK="#00eb6c00" NAME="DeepPink1" /> + <COLOR RGB="#ee1289" CMYK="#00dc6511" NAME="DeepPink2" /> + <COLOR RGB="#cd1076" CMYK="#00bd5732" NAME="DeepPink3" /> + <COLOR RGB="#8b0a50" CMYK="#00813b74" NAME="DeepPink4" /> + <COLOR RGB="#00bfff" CMYK="#ff400000" NAME="DeepSkyBlue" /> + <COLOR RGB="#00bfff" CMYK="#ff400000" NAME="DeepSkyBlue1" /> + <COLOR RGB="#00b2ee" CMYK="#ee3c0011" NAME="DeepSkyBlue2" /> + <COLOR RGB="#009acd" CMYK="#cd330032" NAME="DeepSkyBlue3" /> + <COLOR RGB="#00688b" CMYK="#8b230074" NAME="DeepSkyBlue4" /> + <COLOR RGB="#696969" CMYK="#00000096" NAME="DimGrey" /> + <COLOR RGB="#1e90ff" CMYK="#e16f0000" NAME="DodgerBlue" /> + <COLOR RGB="#1e90ff" CMYK="#e16f0000" NAME="DodgerBlue1" /> + <COLOR RGB="#1c86ee" CMYK="#d2680011" NAME="DodgerBlue2" /> + <COLOR RGB="#1874cd" CMYK="#b5590032" NAME="DodgerBlue3" /> + <COLOR RGB="#104e8b" CMYK="#7b3d0074" NAME="DodgerBlue4" /> + <COLOR RGB="#b22222" CMYK="#0090904d" NAME="Firebrick" /> + <COLOR RGB="#ff3030" CMYK="#00cfcf00" NAME="Firebrick1" /> + <COLOR RGB="#ee2c2c" CMYK="#00c2c211" NAME="Firebrick2" /> + <COLOR RGB="#cd2626" CMYK="#00a7a732" NAME="Firebrick3" /> + <COLOR RGB="#8b1a1a" CMYK="#00717174" NAME="Firebrick4" /> + <COLOR RGB="#fffaf0" CMYK="#00050f00" NAME="FloralWhite" /> + <COLOR RGB="#228b22" CMYK="#69006974" NAME="ForestGreen" /> + <COLOR RGB="#dcdcdc" CMYK="#00000023" NAME="Gainsboro" /> + <COLOR RGB="#f8f8ff" CMYK="#07070000" NAME="GhostWhite" /> + <COLOR RGB="#ffd700" CMYK="#0028ff00" NAME="Gold" /> + <COLOR RGB="#ffd700" CMYK="#0028ff00" NAME="Gold1" /> + <COLOR RGB="#eec900" CMYK="#0025ee11" NAME="Gold2" /> + <COLOR RGB="#cdad00" CMYK="#0020cd32" NAME="Gold3" /> + <COLOR RGB="#8b7500" CMYK="#00168b74" NAME="Gold4" /> + <COLOR RGB="#daa520" CMYK="#0035ba25" NAME="Goldenrod" /> + <COLOR RGB="#ffc125" CMYK="#003eda00" NAME="Goldenrod1" /> + <COLOR RGB="#eeb422" CMYK="#003acc11" NAME="Goldenrod2" /> + <COLOR RGB="#cd9b1d" CMYK="#0032b032" NAME="Goldenrod3" /> + <COLOR RGB="#8b6914" CMYK="#00227774" NAME="Goldenrod4" /> + <COLOR RGB="#00ff00" CMYK="#ff00ff00" NAME="Green" /> + <COLOR RGB="#00ff00" CMYK="#ff00ff00" NAME="Green1" /> + <COLOR RGB="#00ee00" CMYK="#ee00ee11" NAME="Green2" /> + <COLOR RGB="#00cd00" CMYK="#cd00cd32" NAME="Green3" /> + <COLOR RGB="#008b00" CMYK="#8b008b74" NAME="Green4" /> + <COLOR RGB="#adff2f" CMYK="#5200d000" NAME="GreenYellow" /> + <COLOR RGB="#bebebe" CMYK="#00000041" NAME="Grey" /> + <COLOR RGB="#000000" CMYK="#000000ff" NAME="Grey0" /> + <COLOR RGB="#030303" CMYK="#000000fc" NAME="Grey1" /> + <COLOR RGB="#1a1a1a" CMYK="#000000e5" NAME="Grey10" /> + <COLOR RGB="#ffffff" CMYK="#00000000" NAME="Grey100" /> + <COLOR RGB="#1c1c1c" CMYK="#000000e3" NAME="Grey11" /> + <COLOR RGB="#1f1f1f" CMYK="#000000e0" NAME="Grey12" /> + <COLOR RGB="#212121" CMYK="#000000de" NAME="Grey13" /> + <COLOR RGB="#242424" CMYK="#000000db" NAME="Grey14" /> + <COLOR RGB="#262626" CMYK="#000000d9" NAME="Grey15" /> + <COLOR RGB="#292929" CMYK="#000000d6" NAME="Grey16" /> + <COLOR RGB="#2b2b2b" CMYK="#000000d4" NAME="Grey17" /> + <COLOR RGB="#2e2e2e" CMYK="#000000d1" NAME="Grey18" /> + <COLOR RGB="#303030" CMYK="#000000cf" NAME="Grey19" /> + <COLOR RGB="#050505" CMYK="#000000fa" NAME="Grey2" /> + <COLOR RGB="#333333" CMYK="#000000cc" NAME="Grey20" /> + <COLOR RGB="#363636" CMYK="#000000c9" NAME="Grey21" /> + <COLOR RGB="#383838" CMYK="#000000c7" NAME="Grey22" /> + <COLOR RGB="#3b3b3b" CMYK="#000000c4" NAME="Grey23" /> + <COLOR RGB="#3d3d3d" CMYK="#000000c2" NAME="Grey24" /> + <COLOR RGB="#404040" CMYK="#000000bf" NAME="Grey25" /> + <COLOR RGB="#424242" CMYK="#000000bd" NAME="Grey26" /> + <COLOR RGB="#454545" CMYK="#000000ba" NAME="Grey27" /> + <COLOR RGB="#474747" CMYK="#000000b8" NAME="Grey28" /> + <COLOR RGB="#4a4a4a" CMYK="#000000b5" NAME="Grey29" /> + <COLOR RGB="#080808" CMYK="#000000f7" NAME="Grey3" /> + <COLOR RGB="#4d4d4d" CMYK="#000000b2" NAME="Grey30" /> + <COLOR RGB="#4f4f4f" CMYK="#000000b0" NAME="Grey31" /> + <COLOR RGB="#525252" CMYK="#000000ad" NAME="Grey32" /> + <COLOR RGB="#545454" CMYK="#000000ab" NAME="Grey33" /> + <COLOR RGB="#575757" CMYK="#000000a8" NAME="Grey34" /> + <COLOR RGB="#595959" CMYK="#000000a6" NAME="Grey35" /> + <COLOR RGB="#5c5c5c" CMYK="#000000a3" NAME="Grey36" /> + <COLOR RGB="#5e5e5e" CMYK="#000000a1" NAME="Grey37" /> + <COLOR RGB="#616161" CMYK="#0000009e" NAME="Grey38" /> + <COLOR RGB="#636363" CMYK="#0000009c" NAME="Grey39" /> + <COLOR RGB="#0a0a0a" CMYK="#000000f5" NAME="Grey4" /> + <COLOR RGB="#666666" CMYK="#00000099" NAME="Grey40" /> + <COLOR RGB="#696969" CMYK="#00000096" NAME="Grey41" /> + <COLOR RGB="#6b6b6b" CMYK="#00000094" NAME="Grey42" /> + <COLOR RGB="#6e6e6e" CMYK="#00000091" NAME="Grey43" /> + <COLOR RGB="#707070" CMYK="#0000008f" NAME="Grey44" /> + <COLOR RGB="#737373" CMYK="#0000008c" NAME="Grey45" /> + <COLOR RGB="#757575" CMYK="#0000008a" NAME="Grey46" /> + <COLOR RGB="#787878" CMYK="#00000087" NAME="Grey47" /> + <COLOR RGB="#7a7a7a" CMYK="#00000085" NAME="Grey48" /> + <COLOR RGB="#7d7d7d" CMYK="#00000082" NAME="Grey49" /> + <COLOR RGB="#0d0d0d" CMYK="#000000f2" NAME="Grey5" /> + <COLOR RGB="#7f7f7f" CMYK="#00000080" NAME="Grey50" /> + <COLOR RGB="#828282" CMYK="#0000007d" NAME="Grey51" /> + <COLOR RGB="#858585" CMYK="#0000007a" NAME="Grey52" /> + <COLOR RGB="#878787" CMYK="#00000078" NAME="Grey53" /> + <COLOR RGB="#8a8a8a" CMYK="#00000075" NAME="Grey54" /> + <COLOR RGB="#8c8c8c" CMYK="#00000073" NAME="Grey55" /> + <COLOR RGB="#8f8f8f" CMYK="#00000070" NAME="Grey56" /> + <COLOR RGB="#919191" CMYK="#0000006e" NAME="Grey57" /> + <COLOR RGB="#949494" CMYK="#0000006b" NAME="Grey58" /> + <COLOR RGB="#969696" CMYK="#00000069" NAME="Grey59" /> + <COLOR RGB="#0f0f0f" CMYK="#000000f0" NAME="Grey6" /> + <COLOR RGB="#999999" CMYK="#00000066" NAME="Grey60" /> + <COLOR RGB="#9c9c9c" CMYK="#00000063" NAME="Grey61" /> + <COLOR RGB="#9e9e9e" CMYK="#00000061" NAME="Grey62" /> + <COLOR RGB="#a1a1a1" CMYK="#0000005e" NAME="Grey63" /> + <COLOR RGB="#a3a3a3" CMYK="#0000005c" NAME="Grey64" /> + <COLOR RGB="#a6a6a6" CMYK="#00000059" NAME="Grey65" /> + <COLOR RGB="#a8a8a8" CMYK="#00000057" NAME="Grey66" /> + <COLOR RGB="#ababab" CMYK="#00000054" NAME="Grey67" /> + <COLOR RGB="#adadad" CMYK="#00000052" NAME="Grey68" /> + <COLOR RGB="#b0b0b0" CMYK="#0000004f" NAME="Grey69" /> + <COLOR RGB="#121212" CMYK="#000000ed" NAME="Grey7" /> + <COLOR RGB="#b3b3b3" CMYK="#0000004c" NAME="Grey70" /> + <COLOR RGB="#b5b5b5" CMYK="#0000004a" NAME="Grey71" /> + <COLOR RGB="#b8b8b8" CMYK="#00000047" NAME="Grey72" /> + <COLOR RGB="#bababa" CMYK="#00000045" NAME="Grey73" /> + <COLOR RGB="#bdbdbd" CMYK="#00000042" NAME="Grey74" /> + <COLOR RGB="#bfbfbf" CMYK="#00000040" NAME="Grey75" /> + <COLOR RGB="#c2c2c2" CMYK="#0000003d" NAME="Grey76" /> + <COLOR RGB="#c4c4c4" CMYK="#0000003b" NAME="Grey77" /> + <COLOR RGB="#c7c7c7" CMYK="#00000038" NAME="Grey78" /> + <COLOR RGB="#c9c9c9" CMYK="#00000036" NAME="Grey79" /> + <COLOR RGB="#141414" CMYK="#000000eb" NAME="Grey8" /> + <COLOR RGB="#cccccc" CMYK="#00000033" NAME="Grey80" /> + <COLOR RGB="#cfcfcf" CMYK="#00000030" NAME="Grey81" /> + <COLOR RGB="#d1d1d1" CMYK="#0000002e" NAME="Grey82" /> + <COLOR RGB="#d4d4d4" CMYK="#0000002b" NAME="Grey83" /> + <COLOR RGB="#d6d6d6" CMYK="#00000029" NAME="Grey84" /> + <COLOR RGB="#d9d9d9" CMYK="#00000026" NAME="Grey85" /> + <COLOR RGB="#dbdbdb" CMYK="#00000024" NAME="Grey86" /> + <COLOR RGB="#dedede" CMYK="#00000021" NAME="Grey87" /> + <COLOR RGB="#e0e0e0" CMYK="#0000001f" NAME="Grey88" /> + <COLOR RGB="#e3e3e3" CMYK="#0000001c" NAME="Grey89" /> + <COLOR RGB="#171717" CMYK="#000000e8" NAME="Grey9" /> + <COLOR RGB="#e5e5e5" CMYK="#0000001a" NAME="Grey90" /> + <COLOR RGB="#e8e8e8" CMYK="#00000017" NAME="Grey91" /> + <COLOR RGB="#ebebeb" CMYK="#00000014" NAME="Grey92" /> + <COLOR RGB="#ededed" CMYK="#00000012" NAME="Grey93" /> + <COLOR RGB="#f0f0f0" CMYK="#0000000f" NAME="Grey94" /> + <COLOR RGB="#f2f2f2" CMYK="#0000000d" NAME="Grey95" /> + <COLOR RGB="#f5f5f5" CMYK="#0000000a" NAME="Grey96" /> + <COLOR RGB="#f7f7f7" CMYK="#00000008" NAME="Grey97" /> + <COLOR RGB="#fafafa" CMYK="#00000005" NAME="Grey98" /> + <COLOR RGB="#fcfcfc" CMYK="#00000003" NAME="Grey99" /> + <COLOR RGB="#f0fff0" CMYK="#0f000f00" NAME="Honeydew" /> + <COLOR RGB="#f0fff0" CMYK="#0f000f00" NAME="Honeydew1" /> + <COLOR RGB="#e0eee0" CMYK="#0e000e11" NAME="Honeydew2" /> + <COLOR RGB="#c1cdc1" CMYK="#0c000c32" NAME="Honeydew3" /> + <COLOR RGB="#838b83" CMYK="#08000874" NAME="Honeydew4" /> + <COLOR RGB="#ff69b4" CMYK="#00964b00" NAME="HotPink" /> + <COLOR RGB="#ff6eb4" CMYK="#00914b00" NAME="HotPink1" /> + <COLOR RGB="#ee6aa7" CMYK="#00844711" NAME="HotPink2" /> + <COLOR RGB="#cd6090" CMYK="#006d3d32" NAME="HotPink3" /> + <COLOR RGB="#8b3a62" CMYK="#00512974" NAME="HotPink4" /> + <COLOR RGB="#cd5c5c" CMYK="#00717132" NAME="IndianRed" /> + <COLOR RGB="#ff6a6a" CMYK="#00959500" NAME="IndianRed1" /> + <COLOR RGB="#ee6363" CMYK="#008b8b11" NAME="IndianRed2" /> + <COLOR RGB="#cd5555" CMYK="#00787832" NAME="IndianRed3" /> + <COLOR RGB="#8b3a3a" CMYK="#00515174" NAME="IndianRed4" /> + <COLOR RGB="#fffff0" CMYK="#00000f00" NAME="Ivory" /> + <COLOR RGB="#fffff0" CMYK="#00000f00" NAME="Ivory1" /> + <COLOR RGB="#eeeee0" CMYK="#00000e11" NAME="Ivory2" /> + <COLOR RGB="#cdcdc1" CMYK="#00000c32" NAME="Ivory3" /> + <COLOR RGB="#8b8b83" CMYK="#00000874" NAME="Ivory4" /> + <COLOR RGB="#f0e68c" CMYK="#000a640f" NAME="Khaki" /> + <COLOR RGB="#fff68f" CMYK="#00097000" NAME="Khaki1" /> + <COLOR RGB="#eee685" CMYK="#00086911" NAME="Khaki2" /> + <COLOR RGB="#cdc673" CMYK="#00075a32" NAME="Khaki3" /> + <COLOR RGB="#8b864e" CMYK="#00053d74" NAME="Khaki4" /> + <COLOR RGB="#e6e6fa" CMYK="#14140005" NAME="Lavender" /> + <COLOR RGB="#fff0f5" CMYK="#000f0a00" NAME="LavenderBlush" /> + <COLOR RGB="#fff0f5" CMYK="#000f0a00" NAME="LavenderBlush1" /> + <COLOR RGB="#eee0e5" CMYK="#000e0911" NAME="LavenderBlush2" /> + <COLOR RGB="#cdc1c5" CMYK="#000c0832" NAME="LavenderBlush3" /> + <COLOR RGB="#8b8386" CMYK="#00080574" NAME="LavenderBlush4" /> + <COLOR RGB="#7cfc00" CMYK="#8000fc03" NAME="LawnGreen" /> + <COLOR RGB="#fffacd" CMYK="#00053200" NAME="LemonChiffon" /> + <COLOR RGB="#fffacd" CMYK="#00053200" NAME="LemonChiffon1" /> + <COLOR RGB="#eee9bf" CMYK="#00052f11" NAME="LemonChiffon2" /> + <COLOR RGB="#cdc9a5" CMYK="#00042832" NAME="LemonChiffon3" /> + <COLOR RGB="#8b8970" CMYK="#00021b74" NAME="LemonChiffon4" /> + <COLOR RGB="#add8e6" CMYK="#390e0019" NAME="LightBlue" /> + <COLOR RGB="#bfefff" CMYK="#40100000" NAME="LightBlue1" /> + <COLOR RGB="#b2dfee" CMYK="#3c0f0011" NAME="LightBlue2" /> + <COLOR RGB="#9ac0cd" CMYK="#330d0032" NAME="LightBlue3" /> + <COLOR RGB="#68838b" CMYK="#23080074" NAME="LightBlue4" /> + <COLOR RGB="#f08080" CMYK="#0070700f" NAME="LightCoral" /> + <COLOR RGB="#e0ffff" CMYK="#1f000000" NAME="LightCyan" /> + <COLOR RGB="#e0ffff" CMYK="#1f000000" NAME="LightCyan1" /> + <COLOR RGB="#d1eeee" CMYK="#1d000011" NAME="LightCyan2" /> + <COLOR RGB="#b4cdcd" CMYK="#19000032" NAME="LightCyan3" /> + <COLOR RGB="#7a8b8b" CMYK="#11000074" NAME="LightCyan4" /> + <COLOR RGB="#eedd82" CMYK="#00116c11" NAME="LightGoldenrod" /> + <COLOR RGB="#ffec8b" CMYK="#00137400" NAME="LightGoldenrod1" /> + <COLOR RGB="#eedc82" CMYK="#00126c11" NAME="LightGoldenrod2" /> + <COLOR RGB="#cdbe70" CMYK="#000f5d32" NAME="LightGoldenrod3" /> + <COLOR RGB="#8b814c" CMYK="#000a3f74" NAME="LightGoldenrod4" /> + <COLOR RGB="#fafad2" CMYK="#00002805" NAME="LightGoldenrodYellow" /> + <COLOR RGB="#90ee90" CMYK="#5e005e11" NAME="LightGreen" /> + <COLOR RGB="#d3d3d3" CMYK="#0000002c" NAME="LightGrey" /> + <COLOR RGB="#ffb6c1" CMYK="#00493e00" NAME="LightPink" /> + <COLOR RGB="#ffaeb9" CMYK="#00514600" NAME="LightPink1" /> + <COLOR RGB="#eea2ad" CMYK="#004c4111" NAME="LightPink2" /> + <COLOR RGB="#cd8c95" CMYK="#00413832" NAME="LightPink3" /> + <COLOR RGB="#8b5f65" CMYK="#002c2674" NAME="LightPink4" /> + <COLOR RGB="#ffa07a" CMYK="#005f8500" NAME="LightSalmon" /> + <COLOR RGB="#ffa07a" CMYK="#005f8500" NAME="LightSalmon1" /> + <COLOR RGB="#ee9572" CMYK="#00597c11" NAME="LightSalmon2" /> + <COLOR RGB="#cd8162" CMYK="#004c6b32" NAME="LightSalmon3" /> + <COLOR RGB="#8b5742" CMYK="#00344974" NAME="LightSalmon4" /> + <COLOR RGB="#20b2aa" CMYK="#9200084d" NAME="LightSeaGreen" /> + <COLOR RGB="#87cefa" CMYK="#732c0005" NAME="LightSkyBlue" /> + <COLOR RGB="#b0e2ff" CMYK="#4f1d0000" NAME="LightSkyBlue1" /> + <COLOR RGB="#a4d3ee" CMYK="#4a1b0011" NAME="LightSkyBlue2" /> + <COLOR RGB="#8db6cd" CMYK="#40170032" NAME="LightSkyBlue3" /> + <COLOR RGB="#607b8b" CMYK="#2b100074" NAME="LightSkyBlue4" /> + <COLOR RGB="#8470ff" CMYK="#7b8f0000" NAME="LightSlateBlue" /> + <COLOR RGB="#778899" CMYK="#22110066" NAME="LightSlateGrey" /> + <COLOR RGB="#b0c4de" CMYK="#2e1a0021" NAME="LightSteelBlue" /> + <COLOR RGB="#cae1ff" CMYK="#351e0000" NAME="LightSteelBlue1" /> + <COLOR RGB="#bcd2ee" CMYK="#321c0011" NAME="LightSteelBlue2" /> + <COLOR RGB="#a2b5cd" CMYK="#2b180032" NAME="LightSteelBlue3" /> + <COLOR RGB="#6e7b8b" CMYK="#1d100074" NAME="LightSteelBlue4" /> + <COLOR RGB="#ffffe0" CMYK="#00001f00" NAME="LightYellow" /> + <COLOR RGB="#ffffe0" CMYK="#00001f00" NAME="LightYellow1" /> + <COLOR RGB="#eeeed1" CMYK="#00001d11" NAME="LightYellow2" /> + <COLOR RGB="#cdcdb4" CMYK="#00001932" NAME="LightYellow3" /> + <COLOR RGB="#8b8b7a" CMYK="#00001174" NAME="LightYellow4" /> + <COLOR RGB="#32cd32" CMYK="#9b009b32" NAME="LimeGreen" /> + <COLOR RGB="#faf0e6" CMYK="#000a1405" NAME="Linen" /> + <COLOR RGB="#ff00ff" CMYK="#00ff0000" NAME="Magenta" /> + <COLOR RGB="#ff00ff" CMYK="#00ff0000" NAME="Magenta1" /> + <COLOR RGB="#ee00ee" CMYK="#00ee0011" NAME="Magenta2" /> + <COLOR RGB="#cd00cd" CMYK="#00cd0032" NAME="Magenta3" /> + <COLOR RGB="#8b008b" CMYK="#008b0074" NAME="Magenta4" /> + <COLOR RGB="#b03060" CMYK="#0080504f" NAME="Maroon" /> + <COLOR RGB="#ff34b3" CMYK="#00cb4c00" NAME="Maroon1" /> + <COLOR RGB="#ee30a7" CMYK="#00be4711" NAME="Maroon2" /> + <COLOR RGB="#cd2990" CMYK="#00a43d32" NAME="Maroon3" /> + <COLOR RGB="#8b1c62" CMYK="#006f2974" NAME="Maroon4" /> + <COLOR RGB="#66cdaa" CMYK="#67002332" NAME="MediumAquamarine" /> + <COLOR RGB="#0000cd" CMYK="#cdcd0032" NAME="MediumBlue" /> + <COLOR RGB="#ba55d3" CMYK="#197e002c" NAME="MediumOrchid" /> + <COLOR RGB="#e066ff" CMYK="#1f990000" NAME="MediumOrchid1" /> + <COLOR RGB="#d15fee" CMYK="#1d8f0011" NAME="MediumOrchid2" /> + <COLOR RGB="#b452cd" CMYK="#197b0032" NAME="MediumOrchid3" /> + <COLOR RGB="#7a378b" CMYK="#11540074" NAME="MediumOrchid4" /> + <COLOR RGB="#9370db" CMYK="#486b0024" NAME="MediumPurple" /> + <COLOR RGB="#ab82ff" CMYK="#547d0000" NAME="MediumPurple1" /> + <COLOR RGB="#9f79ee" CMYK="#4f750011" NAME="MediumPurple2" /> + <COLOR RGB="#8968cd" CMYK="#44650032" NAME="MediumPurple3" /> + <COLOR RGB="#5d478b" CMYK="#2e440074" NAME="MediumPurple4" /> + <COLOR RGB="#3cb371" CMYK="#7700424c" NAME="MediumSeaGreen" /> + <COLOR RGB="#7b68ee" CMYK="#73860011" NAME="MediumSlateBlue" /> + <COLOR RGB="#00fa9a" CMYK="#fa006005" NAME="MediumSpringGreen" /> + <COLOR RGB="#48d1cc" CMYK="#8900052e" NAME="MediumTurquoise" /> + <COLOR RGB="#c71585" CMYK="#00b24238" NAME="MediumVioletRed" /> + <COLOR RGB="#191970" CMYK="#5757008f" NAME="MidnightBlue" /> + <COLOR RGB="#f5fffa" CMYK="#0a000500" NAME="MintCream" /> + <COLOR RGB="#ffe4e1" CMYK="#001b1e00" NAME="MistyRose" /> + <COLOR RGB="#ffe4e1" CMYK="#001b1e00" NAME="MistyRose1" /> + <COLOR RGB="#eed5d2" CMYK="#00191c11" NAME="MistyRose2" /> + <COLOR RGB="#cdb7b5" CMYK="#00161832" NAME="MistyRose3" /> + <COLOR RGB="#8b7d7b" CMYK="#000e1074" NAME="MistyRose4" /> + <COLOR RGB="#ffe4b5" CMYK="#001b4a00" NAME="Moccasin" /> + <COLOR RGB="#ffdead" CMYK="#00215200" NAME="NavajoWhite" /> + <COLOR RGB="#ffdead" CMYK="#00215200" NAME="NavajoWhite1" /> + <COLOR RGB="#eecfa1" CMYK="#001f4d11" NAME="NavajoWhite2" /> + <COLOR RGB="#cdb38b" CMYK="#001a4232" NAME="NavajoWhite3" /> + <COLOR RGB="#8b795e" CMYK="#00122d74" NAME="NavajoWhite4" /> + <COLOR RGB="#000080" CMYK="#8080007f" NAME="NavyBlue" /> + <COLOR RGB="#fdf5e6" CMYK="#00081702" NAME="OldLace" /> + <COLOR RGB="#6b8e23" CMYK="#23006b71" NAME="OliveDrab" /> + <COLOR RGB="#c0ff3e" CMYK="#3f00c100" NAME="OliveDrab1" /> + <COLOR RGB="#b3ee3a" CMYK="#3b00b411" NAME="OliveDrab2" /> + <COLOR RGB="#9acd32" CMYK="#33009b32" NAME="OliveDrab3" /> + <COLOR RGB="#698b22" CMYK="#22006974" NAME="OliveDrab4" /> + <COLOR RGB="#ffa500" CMYK="#005aff00" NAME="Orange" /> + <COLOR RGB="#ffa500" CMYK="#005aff00" NAME="Orange1" /> + <COLOR RGB="#ee9a00" CMYK="#0054ee11" NAME="Orange2" /> + <COLOR RGB="#cd8500" CMYK="#0048cd32" NAME="Orange3" /> + <COLOR RGB="#8b5a00" CMYK="#00318b74" NAME="Orange4" /> + <COLOR RGB="#ff4500" CMYK="#00baff00" NAME="OrangeRed" /> + <COLOR RGB="#ff4500" CMYK="#00baff00" NAME="OrangeRed1" /> + <COLOR RGB="#ee4000" CMYK="#00aeee11" NAME="OrangeRed2" /> + <COLOR RGB="#cd3700" CMYK="#0096cd32" NAME="OrangeRed3" /> + <COLOR RGB="#8b2500" CMYK="#00668b74" NAME="OrangeRed4" /> + <COLOR RGB="#da70d6" CMYK="#006a0425" NAME="Orchid" /> + <COLOR RGB="#ff83fa" CMYK="#007c0500" NAME="Orchid1" /> + <COLOR RGB="#ee7ae9" CMYK="#00740511" NAME="Orchid2" /> + <COLOR RGB="#cd69c9" CMYK="#00640432" NAME="Orchid3" /> + <COLOR RGB="#8b4789" CMYK="#00440274" NAME="Orchid4" /> + <COLOR RGB="#eee8aa" CMYK="#00064411" NAME="PaleGoldenrod" /> + <COLOR RGB="#98fb98" CMYK="#63006304" NAME="PaleGreen" /> + <COLOR RGB="#9aff9a" CMYK="#65006500" NAME="PaleGreen1" /> + <COLOR RGB="#90ee90" CMYK="#5e005e11" NAME="PaleGreen2" /> + <COLOR RGB="#7ccd7c" CMYK="#51005132" NAME="PaleGreen3" /> + <COLOR RGB="#548b54" CMYK="#37003774" NAME="PaleGreen4" /> + <COLOR RGB="#afeeee" CMYK="#3f000011" NAME="PaleTurquoise" /> + <COLOR RGB="#bbffff" CMYK="#44000000" NAME="PaleTurquoise1" /> + <COLOR RGB="#aeeeee" CMYK="#40000011" NAME="PaleTurquoise2" /> + <COLOR RGB="#96cdcd" CMYK="#37000032" NAME="PaleTurquoise3" /> + <COLOR RGB="#668b8b" CMYK="#25000074" NAME="PaleTurquoise4" /> + <COLOR RGB="#db7093" CMYK="#006b4824" NAME="PaleVioletRed" /> + <COLOR RGB="#ff82ab" CMYK="#007d5400" NAME="PaleVioletRed1" /> + <COLOR RGB="#ee799f" CMYK="#00754f11" NAME="PaleVioletRed2" /> + <COLOR RGB="#cd6889" CMYK="#00654432" NAME="PaleVioletRed3" /> + <COLOR RGB="#8b475d" CMYK="#00442e74" NAME="PaleVioletRed4" /> + <COLOR RGB="#ffefd5" CMYK="#00102a00" NAME="PapayaWhip" /> + <COLOR RGB="#ffdab9" CMYK="#00254600" NAME="PeachPuff" /> + <COLOR RGB="#ffdab9" CMYK="#00254600" NAME="PeachPuff1" /> + <COLOR RGB="#eecbad" CMYK="#00234111" NAME="PeachPuff2" /> + <COLOR RGB="#cdaf95" CMYK="#001e3832" NAME="PeachPuff3" /> + <COLOR RGB="#8b7765" CMYK="#00142674" NAME="PeachPuff4" /> + <COLOR RGB="#cd853f" CMYK="#00488e32" NAME="Peru" /> + <COLOR RGB="#ffc0cb" CMYK="#003f3400" NAME="Pink" /> + <COLOR RGB="#ffb5c5" CMYK="#004a3a00" NAME="Pink1" /> + <COLOR RGB="#eea9b8" CMYK="#00453611" NAME="Pink2" /> + <COLOR RGB="#cd919e" CMYK="#003c2f32" NAME="Pink3" /> + <COLOR RGB="#8b636c" CMYK="#00281f74" NAME="Pink4" /> + <COLOR RGB="#dda0dd" CMYK="#003d0022" NAME="Plum" /> + <COLOR RGB="#ffbbff" CMYK="#00440000" NAME="Plum1" /> + <COLOR RGB="#eeaeee" CMYK="#00400011" NAME="Plum2" /> + <COLOR RGB="#cd96cd" CMYK="#00370032" NAME="Plum3" /> + <COLOR RGB="#8b668b" CMYK="#00250074" NAME="Plum4" /> + <COLOR RGB="#b0e0e6" CMYK="#36060019" NAME="PowderBlue" /> + <COLOR RGB="#a020f0" CMYK="#50d0000f" NAME="Purple" /> + <COLOR RGB="#9b30ff" CMYK="#64cf0000" NAME="Purple1" /> + <COLOR RGB="#912cee" CMYK="#5dc20011" NAME="Purple2" /> + <COLOR RGB="#7d26cd" CMYK="#50a70032" NAME="Purple3" /> + <COLOR RGB="#551a8b" CMYK="#36710074" NAME="Purple4" /> + <COLOR RGB="#ff0000" CMYK="#00ffff00" NAME="Red" /> + <COLOR RGB="#ff0000" CMYK="#00ffff00" NAME="Red1" /> + <COLOR RGB="#ee0000" CMYK="#00eeee11" NAME="Red2" /> + <COLOR RGB="#cd0000" CMYK="#00cdcd32" NAME="Red3" /> + <COLOR RGB="#8b0000" CMYK="#008b8b74" NAME="Red4" /> + <COLOR RGB="#bc8f8f" CMYK="#002d2d43" NAME="RosyBrown" /> + <COLOR RGB="#ffc1c1" CMYK="#003e3e00" NAME="RosyBrown1" /> + <COLOR RGB="#eeb4b4" CMYK="#003a3a11" NAME="RosyBrown2" /> + <COLOR RGB="#cd9b9b" CMYK="#00323232" NAME="RosyBrown3" /> + <COLOR RGB="#8b6969" CMYK="#00222274" NAME="RosyBrown4" /> + <COLOR RGB="#4169e1" CMYK="#a078001e" NAME="RoyalBlue" /> + <COLOR RGB="#4876ff" CMYK="#b7890000" NAME="RoyalBlue1" /> + <COLOR RGB="#436eee" CMYK="#ab800011" NAME="RoyalBlue2" /> + <COLOR RGB="#3a5fcd" CMYK="#936e0032" NAME="RoyalBlue3" /> + <COLOR RGB="#27408b" CMYK="#644b0074" NAME="RoyalBlue4" /> + <COLOR RGB="#8b4513" CMYK="#00467874" NAME="SaddleBrown" /> + <COLOR RGB="#fa8072" CMYK="#007a8805" NAME="Salmon" /> + <COLOR RGB="#ff8c69" CMYK="#00739600" NAME="Salmon1" /> + <COLOR RGB="#ee8262" CMYK="#006c8c11" NAME="Salmon2" /> + <COLOR RGB="#cd7054" CMYK="#005d7932" NAME="Salmon3" /> + <COLOR RGB="#8b4c39" CMYK="#003f5274" NAME="Salmon4" /> + <COLOR RGB="#f4a460" CMYK="#0050940b" NAME="SandyBrown" /> + <COLOR RGB="#2e8b57" CMYK="#5d003474" NAME="SeaGreen" /> + <COLOR RGB="#54ff9f" CMYK="#ab006000" NAME="SeaGreen1" /> + <COLOR RGB="#4eee94" CMYK="#a0005a11" NAME="SeaGreen2" /> + <COLOR RGB="#43cd80" CMYK="#8a004d32" NAME="SeaGreen3" /> + <COLOR RGB="#2e8b57" CMYK="#5d003474" NAME="SeaGreen4" /> + <COLOR RGB="#fff5ee" CMYK="#000a1100" NAME="Seashell" /> + <COLOR RGB="#fff5ee" CMYK="#000a1100" NAME="Seashell1" /> + <COLOR RGB="#eee5de" CMYK="#00091011" NAME="Seashell2" /> + <COLOR RGB="#cdc5bf" CMYK="#00080e32" NAME="Seashell3" /> + <COLOR RGB="#8b8682" CMYK="#00050974" NAME="Seashell4" /> + <COLOR RGB="#a0522d" CMYK="#004e735f" NAME="Sienna" /> + <COLOR RGB="#ff8247" CMYK="#007db800" NAME="Sienna1" /> + <COLOR RGB="#ee7942" CMYK="#0075ac11" NAME="Sienna2" /> + <COLOR RGB="#cd6839" CMYK="#00659432" NAME="Sienna3" /> + <COLOR RGB="#8b4726" CMYK="#00446574" NAME="Sienna4" /> + <COLOR RGB="#87ceeb" CMYK="#641d0014" NAME="SkyBlue" /> + <COLOR RGB="#87ceff" CMYK="#78310000" NAME="SkyBlue1" /> + <COLOR RGB="#7ec0ee" CMYK="#702e0011" NAME="SkyBlue2" /> + <COLOR RGB="#6ca6cd" CMYK="#61270032" NAME="SkyBlue3" /> + <COLOR RGB="#4a708b" CMYK="#411b0074" NAME="SkyBlue4" /> + <COLOR RGB="#6a5acd" CMYK="#63730032" NAME="SlateBlue" /> + <COLOR RGB="#836fff" CMYK="#7c900000" NAME="SlateBlue1" /> + <COLOR RGB="#7a67ee" CMYK="#74870011" NAME="SlateBlue2" /> + <COLOR RGB="#6959cd" CMYK="#64740032" NAME="SlateBlue3" /> + <COLOR RGB="#473c8b" CMYK="#444f0074" NAME="SlateBlue4" /> + <COLOR RGB="#708090" CMYK="#2010006f" NAME="SlateGrey" /> + <COLOR RGB="#c6e2ff" CMYK="#391d0000" NAME="SlateGrey1" /> + <COLOR RGB="#b9d3ee" CMYK="#351b0011" NAME="SlateGrey2" /> + <COLOR RGB="#9fb6cd" CMYK="#2e170032" NAME="SlateGrey3" /> + <COLOR RGB="#6c7b8b" CMYK="#1f100074" NAME="SlateGrey4" /> + <COLOR RGB="#fffafa" CMYK="#00050500" NAME="Snow" /> + <COLOR RGB="#fffafa" CMYK="#00050500" NAME="Snow1" /> + <COLOR RGB="#eee9e9" CMYK="#00050511" NAME="Snow2" /> + <COLOR RGB="#cdc9c9" CMYK="#00040432" NAME="Snow3" /> + <COLOR RGB="#8b8989" CMYK="#00020274" NAME="Snow4" /> + <COLOR RGB="#00ff7f" CMYK="#ff008000" NAME="SpringGreen" /> + <COLOR RGB="#00ff7f" CMYK="#ff008000" NAME="SpringGreen1" /> + <COLOR RGB="#00ee76" CMYK="#ee007811" NAME="SpringGreen2" /> + <COLOR RGB="#00cd66" CMYK="#cd006732" NAME="SpringGreen3" /> + <COLOR RGB="#008b45" CMYK="#8b004674" NAME="SpringGreen4" /> + <COLOR RGB="#4682b4" CMYK="#6e32004b" NAME="SteelBlue" /> + <COLOR RGB="#63b8ff" CMYK="#9c470000" NAME="SteelBlue1" /> + <COLOR RGB="#5cacee" CMYK="#92420011" NAME="SteelBlue2" /> + <COLOR RGB="#4f94cd" CMYK="#7e390032" NAME="SteelBlue3" /> + <COLOR RGB="#36648b" CMYK="#55270074" NAME="SteelBlue4" /> + <COLOR RGB="#d2b48c" CMYK="#001e462d" NAME="Tan" /> + <COLOR RGB="#ffa54f" CMYK="#005ab000" NAME="Tan1" /> + <COLOR RGB="#ee9a49" CMYK="#0054a511" NAME="Tan2" /> + <COLOR RGB="#cd853f" CMYK="#00488e32" NAME="Tan3" /> + <COLOR RGB="#8b5a2b" CMYK="#00316074" NAME="Tan4" /> + <COLOR RGB="#d8bfd8" CMYK="#00190027" NAME="Thistle" /> + <COLOR RGB="#ffe1ff" CMYK="#001e0000" NAME="Thistle1" /> + <COLOR RGB="#eed2ee" CMYK="#001c0011" NAME="Thistle2" /> + <COLOR RGB="#cdb5cd" CMYK="#00180032" NAME="Thistle3" /> + <COLOR RGB="#8b7b8b" CMYK="#00100074" NAME="Thistle4" /> + <COLOR RGB="#ff6347" CMYK="#009cb800" NAME="Tomato" /> + <COLOR RGB="#ff6347" CMYK="#009cb800" NAME="Tomato1" /> + <COLOR RGB="#ee5c42" CMYK="#0092ac11" NAME="Tomato2" /> + <COLOR RGB="#cd4f39" CMYK="#007e9432" NAME="Tomato3" /> + <COLOR RGB="#8b3626" CMYK="#00556574" NAME="Tomato4" /> + <COLOR RGB="#40e0d0" CMYK="#a000101f" NAME="Turquoise" /> + <COLOR RGB="#00f5ff" CMYK="#ff0a0000" NAME="Turquoise1" /> + <COLOR RGB="#00e5ee" CMYK="#ee090011" NAME="Turquoise2" /> + <COLOR RGB="#00c5cd" CMYK="#cd080032" NAME="Turquoise3" /> + <COLOR RGB="#00868b" CMYK="#8b050074" NAME="Turquoise4" /> + <COLOR RGB="#ee82ee" CMYK="#006c0011" NAME="Violet" /> + <COLOR RGB="#d02090" CMYK="#00b0402f" NAME="VioletRed" /> + <COLOR RGB="#ff3e96" CMYK="#00c16900" NAME="VioletRed1" /> + <COLOR RGB="#ee3a8c" CMYK="#00b46211" NAME="VioletRed2" /> + <COLOR RGB="#cd3278" CMYK="#009b5532" NAME="VioletRed3" /> + <COLOR RGB="#8b2252" CMYK="#00693974" NAME="VioletRed4" /> + <COLOR RGB="#f5deb3" CMYK="#0017420a" NAME="Wheat" /> + <COLOR RGB="#ffe7ba" CMYK="#00184500" NAME="Wheat1" /> + <COLOR RGB="#eed8ae" CMYK="#00164011" NAME="Wheat2" /> + <COLOR RGB="#cdba96" CMYK="#00133732" NAME="Wheat3" /> + <COLOR RGB="#8b7e66" CMYK="#000d2574" NAME="Wheat4" /> + <COLOR RGB="#ffffff" CMYK="#00000000" NAME="White" /> + <COLOR RGB="#f5f5f5" CMYK="#0000000a" NAME="WhiteSmoke" /> + <COLOR RGB="#ffff00" CMYK="#0000ff00" NAME="Yellow" /> + <COLOR RGB="#ffff00" CMYK="#0000ff00" NAME="Yellow1" /> + <COLOR RGB="#eeee00" CMYK="#0000ee11" NAME="Yellow2" /> + <COLOR RGB="#cdcd00" CMYK="#0000cd32" NAME="Yellow3" /> + <COLOR RGB="#8b8b00" CMYK="#00008b74" NAME="Yellow4" /> + <COLOR RGB="#9acd32" CMYK="#33009b32" NAME="YellowGreen" /> + <LAYERS DRUCKEN="1" NUMMER="0" NAME="Fond de page" SICHTBAR="1" LEVEL="0" /> + <PDF ImagePr="0" BTop="9" UseProfiles="0" BLeft="9" PrintP="" RecalcPic="0" ImageP="" SolidP="" PicRes="300" Thumbnails="0" CMethod="0" UseLayers="0" Encrypt="0" BRight="9" Binding="0" Articles="0" InfoString="" RGBMode="1" Grayscale="0" PresentMode="0" Permissions="-4" Intent="1" Compress="1" Version="14" Resolution="300" Bookmarks="0" UseProfiles2="0" RotateDeg="0" MirrorV="0" Quality="0" UseLpi="0" PassUser="" BBottom="40" Intent2="1" MirrorH="0" PassOwner="" > + <Fonts Name="Blue Highway Bold" /> + <Effekte pageViewDuration="1" Di="0" pageEffectDuration="1" effectType="0" Dm="0" M="0" /> + <LPI Angle="45" Frequency="75" SpotFunction="2" Color="Black" /> + <LPI Angle="105" Frequency="75" SpotFunction="2" Color="Cyan" /> + <LPI Angle="75" Frequency="75" SpotFunction="2" Color="Magenta" /> + <LPI Angle="90" Frequency="75" SpotFunction="2" Color="Yellow" /> + </PDF> + <DocItemAttributes/> + <TablesOfContents/> + <MASTERPAGE NUM="0" BORDERTOP="9" NAM="Normal" LEFT="0" BORDERBOTTOM="40" BORDERRIGHT="9" NumVGuides="0" PAGEHEIGHT="842" PAGEWIDTH="595" PAGEYPOS="20" HorizontalGuides="" MNAM="" PAGEXPOS="100" NumHGuides="0" VerticalGuides="" BORDERLEFT="9" /> + <PAGE NUM="0" BORDERTOP="9" NAM="" LEFT="0" BORDERBOTTOM="40" BORDERRIGHT="9" NumVGuides="0" PAGEHEIGHT="842" PAGEWIDTH="595" PAGEYPOS="20" HorizontalGuides="" MNAM="Normal" PAGEXPOS="100" NumHGuides="0" VerticalGuides="" BORDERLEFT="9" /> + <PAGEOBJECT OnMasterPage="" BottomLine="0" REXTRA="1" ALIGN="0" LANGUAGE="French" NUMPO="16" PLINEART="1" TXTSCALE="100" RightLine="0" LOCALSCX="1" LINESP="14.4" ROT="0" TXTSHX="5" TXTSTROKE="Black" WIDTH="69" ImageRes="1" GROUPS="" LOCKR="0" IFONT="Blue Highway Bold" LOCALSCY="1" NAMEDLST="" TXTSHY="-5" isInline="0" AUTOTEXT="0" FLIPPEDV="0" PCOLOR="None" RADRECT="0" REVERS="0" PRINTABLE="1" RATIO="1" FLIPPEDH="0" COLGAP="0" PCOLOR2="None" NEXTITEM="-1" NUMGROUP="0" TransValue="0" PLINEEND="0" TXTSTW="-0.1" FRTYPE="0" PTYPE="4" ImageClip="" isTableItem="0" TEXTFLOW2="0" SHADE2="100" TXTBASE="0" PWIDTH="1" HEIGHT="23" DASHOFF="0" PFILE2="" PFILE="" TEXTFLOW3="0" ISIZE="12" PLTSHOW="0" LINESPMode="0" TXTSTYLE="0" CLIPEDIT="0" BACKITEM="-1" BookNr="0" TransValueS="0" EMBEDDED="1" PFILE3="" ANNAME="" SHADE="100" TXTULP="-0.1" COCOOR="0 0 0 0 69 0 69 0 69 0 69 0 69 23 69 23 69 23 69 23 0 23 0 23 0 23 0 23 0 0 0 0 " BASEOF="0" PICART="1" TXTKERN="0" COLUMNS="1" OwnPage="0" LAYER="0" BOOKMARK="0" startArrowIndex="0" TopLine="0" LOCK="0" EPROF="" BBOXX="0" DASHS="" IRENDER="0" TEXTFLOW="0" BBOXH="0" TXTFILLSH="100" YPOS="67" ANNOTATION="0" LOCALX="0" GRTYP="0" XPOS="166" NUMCO="16" POCOOR="0 0 0 0 69 0 69 0 69 0 69 0 69 23 69 23 69 23 69 23 0 23 0 23 0 23 0 23 0 0 0 0 " EXTRA="1" LOCALY="0" NUMDASH="0" LeftLine="0" PRFILE="" TEXTRA="1" SCALETYPE="1" TXTOUT="1" TXTFILL="Black" endArrowIndex="0" BEXTRA="1" PLINEJOIN="0" TXTSTP="-0.1" TXTULW="-0.1" TXTSCALEV="100" TXTSTRSH="100" > + <ITEXT CAB="0" CCOLOR="Black" CBASE="0" CSTW="-0.1" CSIZE="12" CULP="-0.1" CH="Static Text" CSHADE2="100" CKERN="0" CSCALE="100" CSHADE="100" COUT="1" CSCALEV="100" CSTP="-0.1" CULW="-0.1" CSTYLE="0" CFONT="Blue Highway Bold" CSHX="5" CSHY="-5" CSTROKE="Black" /> + <PageItemAttributes/> + </PAGEOBJECT> + <PAGEOBJECT OnMasterPage="" BottomLine="0" REXTRA="1" ANACTYP="0" ALIGN="0" LANGUAGE="French" NUMPO="16" ANBSTY="0" PLINEART="1" TXTSCALE="100" RightLine="0" LOCALSCX="1" LINESP="14.4" ROT="0" TXTSHX="5" TXTSTROKE="Black" WIDTH="191" ImageRes="1" GROUPS="" LOCKR="0" ANMC="-1" ANZIEL="0" ANKACT="" IFONT="Blue Highway Bold" LOCALSCY="1" NAMEDLST="" TXTSHY="-5" isInline="0" AUTOTEXT="0" FLIPPEDV="0" PCOLOR="None" RADRECT="0" REVERS="0" ANTOOLTIP="" PRINTABLE="1" RATIO="1" FLIPPEDH="0" COLGAP="0" PCOLOR2="None" NEXTITEM="-1" NUMGROUP="0" TransValue="0" ANICON="0" ANCHK="0" PLINEEND="0" TXTSTW="-0.1" FRTYPE="0" PTYPE="4" ImageClip="" isTableItem="0" TEXTFLOW2="0" ANHTML="0" ANXACT="" ANTYPE="3" SHADE2="100" TXTBASE="0" PWIDTH="1" HEIGHT="38" DASHOFF="0" PFILE2="" PFILE="" TEXTFLOW3="0" ANFLAG="0" ANEXTERN="../../tests" ANFACT="" ANBLACT="" ISIZE="12" PLTSHOW="0" LINESPMode="0" TXTSTYLE="0" CLIPEDIT="0" BACKITEM="-1" BookNr="0" TransValueS="0" EMBEDDED="1" PFILE3="" ANNAME="text_1" ANCHKS="0" ANVACT="" ANFOACT="" ANEACT="" SHADE="100" TXTULP="-0.1" COCOOR="0 0 0 0 191 0 191 0 191 0 191 0 191 38 191 38 191 38 191 38 0 38 0 38 0 38 0 38 0 0 0 0 " ANSCALE="0" ANROLL="" ANDACT="" BASEOF="0" PICART="1" TXTKERN="0" COLUMNS="1" OwnPage="0" LAYER="0" BOOKMARK="0" startArrowIndex="0" TopLine="0" LOCK="0" EPROF="" ANBCOL="Black" ANFONT="4" ANFEED="1" ANCACT="" BBOXX="0" DASHS="" IRENDER="0" TEXTFLOW="0" ANBWID="1" BBOXH="0" TXTFILLSH="100" YPOS="116" ANAA="0" ANNOTATION="1" LOCALX="0" GRTYP="0" XPOS="166" NUMCO="16" POCOOR="0 0 0 0 191 0 191 0 191 0 191 0 191 38 191 38 191 38 191 38 0 38 0 38 0 38 0 38 0 0 0 0 " EXTRA="1" ANFORMAT="0" LOCALY="0" NUMDASH="0" LeftLine="0" PRFILE="" TEXTRA="1" ANPLACE="1" ANVIS="0" ANDOWN="" SCALETYPE="1" TXTOUT="1" TXTFILL="Black" endArrowIndex="0" BEXTRA="1" ANACTION="" PLINEJOIN="0" TXTSTP="-0.1" TXTULW="-0.1" TXTSCALEV="100" TXTSTRSH="100" > + <PageItemAttributes/> + </PAGEOBJECT> + <PAGEOBJECT OnMasterPage="" BottomLine="0" REXTRA="1" ANACTYP="0" ALIGN="0" LANGUAGE="French" NUMPO="16" ANBSTY="0" PLINEART="1" TXTSCALE="100" RightLine="0" LOCALSCX="1" LINESP="14.4" ROT="0" TXTSHX="5" TXTSTROKE="Black" WIDTH="191" ImageRes="1" GROUPS="" LOCKR="0" ANMC="-1" ANZIEL="0" ANKACT="" IFONT="Blue Highway Bold" LOCALSCY="1" NAMEDLST="" TXTSHY="-5" isInline="0" AUTOTEXT="0" FLIPPEDV="0" PCOLOR="None" RADRECT="0" REVERS="0" ANTOOLTIP="" PRINTABLE="1" RATIO="1" FLIPPEDH="0" COLGAP="0" PCOLOR2="None" NEXTITEM="-1" NUMGROUP="0" TransValue="0" ANICON="0" ANCHK="0" PLINEEND="0" TXTSTW="-0.1" FRTYPE="0" PTYPE="4" ImageClip="" isTableItem="0" TEXTFLOW2="0" ANHTML="0" ANXACT="" ANTYPE="3" SHADE2="100" TXTBASE="0" PWIDTH="1" HEIGHT="38" DASHOFF="0" PFILE2="" PFILE="" TEXTFLOW3="0" ANFLAG="0" ANEXTERN="../../../../../../../../home" ANFACT="" ANBLACT="" ISIZE="12" PLTSHOW="0" LINESPMode="0" TXTSTYLE="0" CLIPEDIT="0" BACKITEM="-1" BookNr="0" TransValueS="0" EMBEDDED="1" PFILE3="" ANNAME="text_2" ANCHKS="0" ANVACT="" ANFOACT="" ANEACT="" SHADE="100" TXTULP="-0.1" COCOOR="0 0 0 0 191 0 191 0 191 0 191 0 191 38 191 38 191 38 191 38 0 38 0 38 0 38 0 38 0 0 0 0 " ANSCALE="0" ANROLL="" ANDACT="" BASEOF="0" PICART="1" TXTKERN="0" COLUMNS="1" OwnPage="0" LAYER="0" BOOKMARK="0" startArrowIndex="0" TopLine="0" LOCK="0" EPROF="" ANBCOL="Black" ANFONT="4" ANFEED="1" ANCACT="" BBOXX="0" DASHS="" IRENDER="0" TEXTFLOW="0" ANBWID="1" BBOXH="0" TXTFILLSH="100" YPOS="165" ANAA="0" ANNOTATION="1" LOCALX="0" GRTYP="0" XPOS="165" NUMCO="16" POCOOR="0 0 0 0 191 0 191 0 191 0 191 0 191 38 191 38 191 38 191 38 0 38 0 38 0 38 0 38 0 0 0 0 " EXTRA="1" ANFORMAT="0" LOCALY="0" NUMDASH="0" LeftLine="0" PRFILE="" TEXTRA="1" ANPLACE="1" ANVIS="0" ANDOWN="" SCALETYPE="1" TXTOUT="1" TXTFILL="Black" endArrowIndex="0" BEXTRA="1" ANACTION="" PLINEJOIN="0" TXTSTP="-0.1" TXTULW="-0.1" TXTSCALEV="100" TXTSTRSH="100" > + <PageItemAttributes/> + </PAGEOBJECT> + <PAGEOBJECT OnMasterPage="" BottomLine="0" REXTRA="1" ANACTYP="0" ALIGN="0" LANGUAGE="French" NUMPO="16" ANBSTY="0" PLINEART="1" TXTSCALE="100" RightLine="0" LOCALSCX="1" LINESP="14.4" ROT="0" TXTSHX="5" TXTSTROKE="Black" WIDTH="191" ImageRes="1" GROUPS="" LOCKR="0" ANMC="-1" ANZIEL="0" ANKACT="" IFONT="Blue Highway Bold" LOCALSCY="1" NAMEDLST="" TXTSHY="-5" isInline="0" AUTOTEXT="0" FLIPPEDV="0" PCOLOR="None" RADRECT="0" REVERS="0" ANTOOLTIP="" PRINTABLE="1" RATIO="1" FLIPPEDH="0" COLGAP="0" PCOLOR2="None" NEXTITEM="-1" NUMGROUP="0" TransValue="0" ANICON="0" ANCHK="0" PLINEEND="0" TXTSTW="-0.1" FRTYPE="0" PTYPE="4" ImageClip="" isTableItem="0" TEXTFLOW2="0" ANHTML="0" ANXACT="" ANTYPE="3" SHADE2="100" TXTBASE="0" PWIDTH="1" HEIGHT="38" DASHOFF="0" PFILE2="" PFILE="" TEXTFLOW3="0" ANFLAG="0" ANEXTERN="../../../../../../../../home" ANFACT="" ANBLACT="" ISIZE="12" PLTSHOW="0" LINESPMode="0" TXTSTYLE="0" CLIPEDIT="0" BACKITEM="-1" BookNr="0" TransValueS="0" EMBEDDED="1" PFILE3="" ANNAME="text_3" ANCHKS="0" ANVACT="" ANFOACT="" ANEACT="" SHADE="100" TXTULP="-0.1" COCOOR="0 0 0 0 191 0 191 0 191 0 191 0 191 38 191 38 191 38 191 38 0 38 0 38 0 38 0 38 0 0 0 0 " ANSCALE="0" ANROLL="" ANDACT="" BASEOF="0" PICART="1" TXTKERN="0" COLUMNS="1" OwnPage="0" LAYER="0" BOOKMARK="0" startArrowIndex="0" TopLine="0" LOCK="0" EPROF="" ANBCOL="Black" ANFONT="4" ANFEED="1" ANCACT="" BBOXX="0" DASHS="" IRENDER="0" TEXTFLOW="0" ANBWID="1" BBOXH="0" TXTFILLSH="100" YPOS="213" ANAA="0" ANNOTATION="1" LOCALX="0" GRTYP="0" XPOS="165" NUMCO="16" POCOOR="0 0 0 0 191 0 191 0 191 0 191 0 191 38 191 38 191 38 191 38 0 38 0 38 0 38 0 38 0 0 0 0 " EXTRA="1" ANFORMAT="0" LOCALY="0" NUMDASH="0" LeftLine="0" PRFILE="" TEXTRA="1" ANPLACE="1" ANVIS="0" ANDOWN="" SCALETYPE="1" TXTOUT="1" TXTFILL="Black" endArrowIndex="0" BEXTRA="1" ANACTION="" PLINEJOIN="0" TXTSTP="-0.1" TXTULW="-0.1" TXTSCALEV="100" TXTSTRSH="100" > + <PageItemAttributes/> + </PAGEOBJECT> + </DOCUMENT> +</SCRIBUSUTF8NEW> diff --git a/product/ERP5Form/tests/testPDFForm.py b/product/ERP5Form/tests/testPDFForm.py new file mode 100644 index 0000000000..21ab3cce6d --- /dev/null +++ b/product/ERP5Form/tests/testPDFForm.py @@ -0,0 +1,130 @@ +############################################################################## +# +# Copyright (c) 2007 Nexedi SARL and Contributors. All Rights Reserved. +# Jerome Perrin <jerome@nexedi.com> +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# garantees and support are strongly adviced to contract a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + +import unittest +import os + +from Products.ERP5Form.PDFForm import PDFForm +from Products.ERP5.Document.Document import Document + + +class TestPDFForm(unittest.TestCase): + """Tests PDF Form + """ + def setUp(self): + """Creates a PDFForm, and a document on which the PDF form is rendered. + """ + self.document = Document('doc_id', title='The Document') + pdf_file = open(os.path.join(os.path.dirname(__file__), + 'data', 'test_1.pdf')) + self.pdf_form = PDFForm('test_pdf_form').__of__(self.document) + self.pdf_form.manage_upload(pdf_file) + + def test_getCellNames(self): + self.assertEquals(['text_1', 'text_2', 'text_3'], + self.pdf_form.getCellNames()) + + def test_SimpleGeneratePDF(self): + self.pdf_form.setCellTALES('text_1', 'string:Something simple') + self.failUnless(self.pdf_form.generatePDF()) + # aliases + self.failUnless(self.pdf_form.index_html()) + self.failUnless(self.pdf_form()) + + def test_EmptyGeneratePdf(self): + self.failUnless(self.pdf_form.generatePDF()) + # aliases + self.failUnless(self.pdf_form.index_html()) + self.failUnless(self.pdf_form()) + + def test_showCellName(self): + self.failUnless(self.pdf_form.showCellNames()) + + def test_CellTALES(self): + self.pdf_form.setCellTALES('text_1', 'here/getId') + self.assertEquals('here/getId', self.pdf_form.getCellTALES('text_1')) + + def test_setInvalidTALES(self): + from Products.PageTemplates.TALES import CompilerError + self.pdf_form.setCellTALES('text_1', 'python:(inv.alid "= ') + # maybe should raise when setting the TALES, not when getting ? + self.assertRaises(CompilerError, self.pdf_form.evaluateCell, 'text_1') + + def test_EditCells(self): + self.pdf_form.doEditCells(REQUEST=dict(text_1='here/getId', + text_2='string:')) + self.assertEquals('here/getId', self.pdf_form.getCellTALES('text_1')) + self.assertEquals('string:', self.pdf_form.getCellTALES('text_2')) + + def test_EvaluateCell(self): + self.pdf_form.setCellTALES('text_1', 'here/getId') + self.assertEquals('doc_id', self.pdf_form.evaluateCell('text_1')) + + def test_EvaluateNonExistCell(self): + self.assertRaises(KeyError, self.pdf_form.evaluateCell, + 'this_cell_does_not_exist') + + def test_CalculateCellValues(self): + self.pdf_form.setCellTALES('text_1', 'here/getId') + self.pdf_form.setCellTALES('text_2', 'string:static') + calculated_values = self.pdf_form.calculateCellValues() + self.assertEquals('doc_id', calculated_values['text_1']) + self.assertEquals('static', calculated_values['text_2']) + + def test_CalculateCellValuesWithCellKey(self): + self.pdf_form.setCellTALES('text_1', 'here/getId') + self.pdf_form.setCellTALES('text_2', 'cell/text_1') + calculated_values = self.pdf_form.calculateCellValues() + self.assertEquals('doc_id', calculated_values['text_1']) + self.assertEquals('doc_id', calculated_values['text_2']) + + def test_CalculateCellValuesTotal(self): + # The original use case of `cell` + self.pdf_form.setCellTALES('text_1', 'python:3') + self.pdf_form.setCellTALES('text_2', 'python:2') + self.pdf_form.setCellTALES('text_3', + 'python:cell["text_1"] + cell["text_2"]') + self.assertEquals(3 + 2, self.pdf_form.calculateCellValues()['text_3']) + + def test_CalculateCellValuesCircularRefs(self): + self.pdf_form.setCellTALES('text_1', 'cell/text2') + self.pdf_form.setCellTALES('text_2', 'cell/text_1') + from Products.ERP5Form.PDFForm import CircularReferencyError + self.assertRaises(CircularReferencyError, + self.pdf_form.calculateCellValues) + + def test_CalculateCellValuesParms(self): + self.pdf_form.setCellTALES('text_1', 'a_parameter') + calculated_values = self.pdf_form.calculateCellValues(a_parameter='Value') + self.assertEquals('Value', calculated_values['text_1']) + + +def test_suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(TestPDFForm)) + return suite -- 2.30.9