Browse Source

[GENERIC] Zend_Barcode:
- add Royalmail object

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@20056 44c647ce-9c0f-0410-b52a-842ac1e357ba

mikaelkael 16 years ago
parent
commit
648c77b404

BIN
documentation/manual/en/figures/zend.barcode.objects.details.planet.png


BIN
documentation/manual/en/figures/zend.barcode.objects.details.royalmail.png


+ 41 - 2
documentation/manual/en/module_specs/Zend_Barcode-Objects_Details.xml

@@ -570,7 +570,7 @@
         <itemizedlist>
             <listitem>
                 <para>
-                    <emphasis>Name:</emphasis> Planet
+                    <emphasis>Name:</emphasis> Planet (PostaL Alpha Numeric Encoding Technique)
                 </para>
             </listitem>
 
@@ -609,7 +609,7 @@
         <itemizedlist>
             <listitem>
                 <para>
-                    <emphasis>Name:</emphasis> Postnet
+                    <emphasis>Name:</emphasis> Postnet (POSTal Numeric Encoding Technique)
                 </para>
             </listitem>
 
@@ -637,6 +637,45 @@
         </para>
     </sect3>
 
+    <sect3 id="zend.barcode.objects.details.royalmail">
+        <title>Zend_Barcode_Object_Royalmail</title>
+
+        <para>
+            <inlinegraphic width="155" align="center" valign="middle"
+                fileref="figures/zend.barcode.objects.details.royalmail.png" format="PNG"/>
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <emphasis>Name:</emphasis> Royal Mail or RM4SCC (Royal Mail 4-State Customer Code)
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>Allowed characters:</emphasis> '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>Checksum:</emphasis> mandatory
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <emphasis>Length:</emphasis> variable
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            There are no particular options for this barcode.
+        </para>
+    </sect3>
+
     <sect3 id="zend.barcode.objects.details.upca">
         <title>Zend_Barcode_Object_Upca</title>
 

+ 163 - 0
library/Zend/Barcode/Object/Royalmail.php

@@ -0,0 +1,163 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category   Zend
+ * @package    Zend_Barcode
+ * @subpackage Object
+ * @copyright  Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ * @version    $Id$
+ */
+
+/**
+ * @see Zend_Barcode_Object_ObjectAbstract
+ */
+require_once 'Zend/Barcode/Object/ObjectAbstract.php';
+
+/**
+ * @see Zend_Validate_Barcode
+ */
+require_once 'Zend/Validate/Barcode.php';
+
+/**
+ * Class for generate Royal maim barcode
+ *
+ * @category   Zend
+ * @package    Zend_Barcode
+ * @copyright  Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ */
+class Zend_Barcode_Object_Royalmail extends Zend_Barcode_Object_ObjectAbstract
+{
+
+    /**
+     * Coding map
+     * - 0 = Tracker, Ascender and Descender
+     * - 1 = Tracker and Ascender
+     * - 2 = Tracker and Descender
+     * - 3 = Tracker
+     * @var array
+     */
+    protected $_codingMap = array(
+        '0' => '3300', '1' => '3210', '2' => '3201', '3' => '2310', '4' => '2301', '5' => '2211',
+        '6' => '3120', '7' => '3030', '8' => '3021', '9' => '2130', 'A' => '2121', 'B' => '2031',
+        'C' => '3102', 'D' => '3012', 'E' => '3003', 'F' => '2112', 'G' => '2103', 'H' => '2013',
+        'I' => '1320', 'J' => '1230', 'K' => '1221', 'L' => '0330', 'M' => '0321', 'N' => '0231',
+        'O' => '1302', 'P' => '1212', 'Q' => '1203', 'R' => '0312', 'S' => '0303', 'T' => '0213',
+        'U' => '1122', 'V' => '1032', 'W' => '1023', 'X' => '0132', 'Y' => '0123', 'Z' => '0033'
+    );
+
+    protected $_rows = array(
+        '0' => 1, '1' => 1, '2' => 1, '3' => 1, '4' => 1, '5' => 1,
+        '6' => 2, '7' => 2, '8' => 2, '9' => 2, 'A' => 2, 'B' => 2,
+        'C' => 3, 'D' => 3, 'E' => 3, 'F' => 3, 'G' => 3, 'H' => 3,
+        'I' => 4, 'J' => 4, 'K' => 4, 'L' => 4, 'M' => 4, 'N' => 4,
+        'O' => 5, 'P' => 5, 'Q' => 5, 'R' => 5, 'S' => 5, 'T' => 5,
+        'U' => 0, 'V' => 0, 'W' => 0, 'X' => 0, 'Y' => 0, 'Z' => 0,
+    );
+
+    protected $_columns = array(
+        '0' => 1, '1' => 2, '2' => 3, '3' => 4, '4' => 5, '5' => 0,
+        '6' => 1, '7' => 2, '8' => 3, '9' => 4, 'A' => 5, 'B' => 0,
+        'C' => 1, 'D' => 2, 'E' => 3, 'F' => 4, 'G' => 5, 'H' => 0,
+        'I' => 1, 'J' => 2, 'K' => 3, 'L' => 4, 'M' => 5, 'N' => 0,
+        'O' => 1, 'P' => 2, 'Q' => 3, 'R' => 4, 'S' => 5, 'T' => 0,
+        'U' => 1, 'V' => 2, 'W' => 3, 'X' => 4, 'Y' => 5, 'Z' => 0,
+    );
+
+    /**
+     * Default options for Postnet barcode
+     * @return void
+     */
+    protected function _getDefaultOptions()
+    {
+        $this->_barThinWidth = 2;
+        $this->_barHeight = 20;
+        $this->_drawText = false;
+        $this->_stretchText = true;
+        $this->_mandatoryChecksum = true;
+    }
+
+    /**
+     * Width of the barcode (in pixels)
+     * @return integer
+     */
+    protected function _calculateBarcodeWidth()
+    {
+        $quietZone       = $this->getQuietZone();
+        $startCharacter  = (2 * $this->_barThinWidth) * $this->_factor;
+        $stopCharacter   = (1 * $this->_barThinWidth) * $this->_factor;
+        $encodedData     = (8 * $this->_barThinWidth) * $this->_factor * strlen($this->getText());
+        return $quietZone + $startCharacter + $encodedData + $stopCharacter + $quietZone;
+    }
+
+    /**
+     * Partial check of interleaved Postnet barcode
+     * @return void
+     */
+    protected function _checkParams()
+    {}
+
+    /**
+     * Prepare array to draw barcode
+     * @return array
+     */
+    protected function _prepareBarcode()
+    {
+        $barcodeTable = array();
+
+        // Start character (1)
+        $barcodeTable[] = array(1 , $this->_barThinWidth , 0 , 5/8);
+        $barcodeTable[] = array(0 , $this->_barThinWidth , 0 , 1);
+
+        // Text to encode
+        $textTable = str_split($this->getText());
+        foreach ($textTable as $char) {
+            $bars = str_split($this->_codingMap[$char]);
+            foreach ($bars as $b) {
+                $barcodeTable[] = array(1 , $this->_barThinWidth , ($b > 1 ? 3/8 : 0) , ($b % 2 ? 5/8 : 1));
+                $barcodeTable[] = array(0 , $this->_barThinWidth , 0 , 1);
+            }
+        }
+
+        // Stop character (1)
+        $barcodeTable[] = array(1 , $this->_barThinWidth , 0 , 1);
+        return $barcodeTable;
+    }
+
+    /**
+     * Get barcode checksum
+     *
+     * @param  string $text
+     * @return int
+     */
+    public function getChecksum($text)
+    {
+        $this->_checkText($text);
+        $values   = str_split($text);
+        $rowvalue = 0;
+        $colvalue = 0;
+        foreach($values as $row) {
+            $rowvalue += $this->_rows[$row];
+            $colvalue += $this->_columns[$row];
+        }
+
+        $rowvalue %= 6;
+        $colvalue %= 6;
+
+        $rowchkvalue = array_keys($this->_rows, $rowvalue);
+        $colchkvalue = array_keys($this->_columns, $colvalue);
+        return current(array_intersect($rowchkvalue, $colchkvalue));
+    }
+}

+ 4 - 0
tests/Zend/Barcode/AllTests.php

@@ -55,6 +55,8 @@ require_once 'Zend/Barcode/Object/UpceTest.php';
 require_once 'Zend/Barcode/Object/PostnetTest.php';
 require_once 'Zend/Barcode/Object/PlanetTest.php';
 
+require_once 'Zend/Barcode/Object/RoyalmailTest.php';
+
 require_once 'Zend/Barcode/Object/ErrorTest.php';
 
 require_once 'Zend/Barcode/Renderer/ImageTest.php';
@@ -99,6 +101,8 @@ class Zend_Barcode_AllTests
         $suite->addTestSuite('Zend_Barcode_Object_PostnetTest');
         $suite->addTestSuite('Zend_Barcode_Object_PlanetTest');
 
+        $suite->addTestSuite('Zend_Barcode_Object_RoyalmailTest');
+
         $suite->addTestSuite('Zend_Barcode_Renderer_ImageTest');
         $suite->addTestSuite('Zend_Barcode_Renderer_PdfTest');
 

+ 159 - 0
tests/Zend/Barcode/Object/RoyalmailTest.php

@@ -0,0 +1,159 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category   Zend
+ * @package    Zend_Barcode
+ * @subpackage UnitTests
+ * @copyright  Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ * @version    $Id$
+ */
+
+require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/TestHelper.php';
+
+require_once dirname(__FILE__) . '/TestCommon.php';
+
+require_once 'Zend/Barcode/Object/Royalmail.php';
+
+/**
+ * @category   Zend
+ * @package    Zend_Barcode
+ * @subpackage UnitTests
+ * @group      Zend_Barcode
+ * @copyright  Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ */
+class Zend_Barcode_Object_RoyalmailTest extends Zend_Barcode_Object_TestCommon
+{
+
+    protected function _getBarcodeObject($options = null)
+    {
+        return new Zend_Barcode_Object_Royalmail($options);
+    }
+
+    public function testType()
+    {
+        $this->assertSame('royalmail', $this->_object->getType());
+    }
+
+    public function testChecksum()
+    {
+        $this->assertSame('W', $this->_object->getChecksum('012345'));
+        $this->assertSame('H', $this->_object->getChecksum('06CIOU'));
+        $this->assertSame('K', $this->_object->getChecksum('SN34RD1A'));
+    }
+
+    public function testSetText()
+    {
+        $this->_object->setText('012345');
+        $this->assertSame('012345', $this->_object->getRawText());
+        $this->assertSame('012345W', $this->_object->getText());
+        $this->assertSame('012345W', $this->_object->getTextToDisplay());
+    }
+
+    public function testSetTextWithoutChecksumHasNoEffect()
+    {
+        $this->_object->setText('012345');
+        $this->_object->setWithChecksum(false);
+        $this->assertSame('012345', $this->_object->getRawText());
+        $this->assertSame('012345W', $this->_object->getText());
+        $this->assertSame('012345W', $this->_object->getTextToDisplay());
+    }
+
+    public function testSetTextWithSpaces()
+    {
+        $this->_object->setText(' 012345 ');
+        $this->assertSame('012345', $this->_object->getRawText());
+        $this->assertSame('012345W', $this->_object->getText());
+        $this->assertSame('012345W', $this->_object->getTextToDisplay());
+    }
+
+    public function testSetTextWithChecksumNotDisplayed()
+    {
+        $this->_object->setText('012345');
+        $this->_object->setWithChecksumInText(false);
+        $this->assertSame('012345', $this->_object->getRawText());
+        $this->assertSame('012345W', $this->_object->getText());
+        $this->assertSame('012345W', $this->_object->getTextToDisplay());
+    }
+
+    /**
+     * @expectedException Zend_Barcode_Object_Exception
+     */
+    public function testBadTextDetectedIfChecksumWished()
+    {
+        $this->_object->setText('a');
+        $this->_object->setWithChecksum(true);
+        $this->_object->getText();
+    }
+
+    public function testCheckGoodParams()
+    {
+        $this->_object->setText('012345');
+        $this->assertTrue($this->_object->checkParams());
+    }
+
+
+    public function testGetKnownWidthWithoutOrientation()
+    {
+        $this->_object->setText('012345');
+        $this->assertEquals(158, $this->_object->getWidth());
+    }
+
+    public function testCompleteGeneration()
+    {
+        $this->_object->setText('012345');
+        $this->_object->draw();
+        $instructions = $this->loadInstructionsFile('Royalmail_012345_instructions');
+        $this->assertEquals($instructions, $this->_object->getInstructions());
+    }
+
+    public function testCompleteGenerationWithBorder()
+    {
+        $this->_object->setText('012345');
+        $this->_object->setWithBorder(true);
+        $this->_object->draw();
+        $instructions = $this->loadInstructionsFile(
+                'Royalmail_012345_border_instructions');
+        $this->assertEquals($instructions, $this->_object->getInstructions());
+    }
+
+    public function testCompleteGenerationWithOrientation()
+    {
+        $this->_object->setText('012345');
+        $this->_object->setOrientation(60);
+        $this->_object->draw();
+        $instructions = $this->loadInstructionsFile(
+                'Royalmail_012345_oriented_instructions');
+        $this->assertEquals($instructions, $this->_object->getInstructions());
+    }
+
+    public function testCompleteGenerationWithBorderWithOrientation()
+    {
+        $this->_object->setText('012345');
+        $this->_object->setOrientation(60);
+        $this->_object->setWithBorder(true);
+        $this->_object->draw();
+        $instructions = $this->loadInstructionsFile(
+                'Royalmail_012345_border_oriented_instructions');
+        $this->assertEquals($instructions, $this->_object->getInstructions());
+    }
+
+    public function testGetDefaultHeight()
+    {
+        // Checksum activated => text needed
+        $this->_object->setText('012345');
+        $this->assertEquals(20, $this->_object->getHeight(true));
+    }
+}

+ 937 - 0
tests/Zend/Barcode/Object/_files/Royalmail_012345_border_instructions.php

@@ -0,0 +1,937 @@
+<?php
+return
+array (
+  0 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 0,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 0,
+        1 => 23,
+      ),
+      2 => 
+      array (
+        0 => 159,
+        1 => 23,
+      ),
+      3 => 
+      array (
+        0 => 159,
+        1 => 0,
+      ),
+    ),
+    'color' => 16777215,
+    'filled' => true,
+  ),
+  1 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 21,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 21,
+        1 => 13,
+      ),
+      2 => 
+      array (
+        0 => 22,
+        1 => 13,
+      ),
+      3 => 
+      array (
+        0 => 22,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  2 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 25,
+        1 => 8,
+      ),
+      1 => 
+      array (
+        0 => 25,
+        1 => 13,
+      ),
+      2 => 
+      array (
+        0 => 26,
+        1 => 13,
+      ),
+      3 => 
+      array (
+        0 => 26,
+        1 => 8,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  3 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 29,
+        1 => 8,
+      ),
+      1 => 
+      array (
+        0 => 29,
+        1 => 13,
+      ),
+      2 => 
+      array (
+        0 => 30,
+        1 => 13,
+      ),
+      3 => 
+      array (
+        0 => 30,
+        1 => 8,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  4 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 33,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 33,
+        1 => 21,
+      ),
+      2 => 
+      array (
+        0 => 34,
+        1 => 21,
+      ),
+      3 => 
+      array (
+        0 => 34,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  5 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 37,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 37,
+        1 => 21,
+      ),
+      2 => 
+      array (
+        0 => 38,
+        1 => 21,
+      ),
+      3 => 
+      array (
+        0 => 38,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  6 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 41,
+        1 => 8,
+      ),
+      1 => 
+      array (
+        0 => 41,
+        1 => 13,
+      ),
+      2 => 
+      array (
+        0 => 42,
+        1 => 13,
+      ),
+      3 => 
+      array (
+        0 => 42,
+        1 => 8,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  7 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 45,
+        1 => 8,
+      ),
+      1 => 
+      array (
+        0 => 45,
+        1 => 21,
+      ),
+      2 => 
+      array (
+        0 => 46,
+        1 => 21,
+      ),
+      3 => 
+      array (
+        0 => 46,
+        1 => 8,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  8 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 49,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 49,
+        1 => 13,
+      ),
+      2 => 
+      array (
+        0 => 50,
+        1 => 13,
+      ),
+      3 => 
+      array (
+        0 => 50,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  9 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 53,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 53,
+        1 => 21,
+      ),
+      2 => 
+      array (
+        0 => 54,
+        1 => 21,
+      ),
+      3 => 
+      array (
+        0 => 54,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  10 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 57,
+        1 => 8,
+      ),
+      1 => 
+      array (
+        0 => 57,
+        1 => 13,
+      ),
+      2 => 
+      array (
+        0 => 58,
+        1 => 13,
+      ),
+      3 => 
+      array (
+        0 => 58,
+        1 => 8,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  11 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 61,
+        1 => 8,
+      ),
+      1 => 
+      array (
+        0 => 61,
+        1 => 21,
+      ),
+      2 => 
+      array (
+        0 => 62,
+        1 => 21,
+      ),
+      3 => 
+      array (
+        0 => 62,
+        1 => 8,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  12 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 65,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 65,
+        1 => 21,
+      ),
+      2 => 
+      array (
+        0 => 66,
+        1 => 21,
+      ),
+      3 => 
+      array (
+        0 => 66,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  13 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 69,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 69,
+        1 => 13,
+      ),
+      2 => 
+      array (
+        0 => 70,
+        1 => 13,
+      ),
+      3 => 
+      array (
+        0 => 70,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  14 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 73,
+        1 => 8,
+      ),
+      1 => 
+      array (
+        0 => 73,
+        1 => 21,
+      ),
+      2 => 
+      array (
+        0 => 74,
+        1 => 21,
+      ),
+      3 => 
+      array (
+        0 => 74,
+        1 => 8,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  15 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 77,
+        1 => 8,
+      ),
+      1 => 
+      array (
+        0 => 77,
+        1 => 13,
+      ),
+      2 => 
+      array (
+        0 => 78,
+        1 => 13,
+      ),
+      3 => 
+      array (
+        0 => 78,
+        1 => 8,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  16 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 81,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 81,
+        1 => 13,
+      ),
+      2 => 
+      array (
+        0 => 82,
+        1 => 13,
+      ),
+      3 => 
+      array (
+        0 => 82,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  17 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 85,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 85,
+        1 => 21,
+      ),
+      2 => 
+      array (
+        0 => 86,
+        1 => 21,
+      ),
+      3 => 
+      array (
+        0 => 86,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  18 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 89,
+        1 => 8,
+      ),
+      1 => 
+      array (
+        0 => 89,
+        1 => 21,
+      ),
+      2 => 
+      array (
+        0 => 90,
+        1 => 21,
+      ),
+      3 => 
+      array (
+        0 => 90,
+        1 => 8,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  19 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 93,
+        1 => 8,
+      ),
+      1 => 
+      array (
+        0 => 93,
+        1 => 13,
+      ),
+      2 => 
+      array (
+        0 => 94,
+        1 => 13,
+      ),
+      3 => 
+      array (
+        0 => 94,
+        1 => 8,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  20 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 97,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 97,
+        1 => 21,
+      ),
+      2 => 
+      array (
+        0 => 98,
+        1 => 21,
+      ),
+      3 => 
+      array (
+        0 => 98,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  21 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 101,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 101,
+        1 => 13,
+      ),
+      2 => 
+      array (
+        0 => 102,
+        1 => 13,
+      ),
+      3 => 
+      array (
+        0 => 102,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  22 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 105,
+        1 => 8,
+      ),
+      1 => 
+      array (
+        0 => 105,
+        1 => 21,
+      ),
+      2 => 
+      array (
+        0 => 106,
+        1 => 21,
+      ),
+      3 => 
+      array (
+        0 => 106,
+        1 => 8,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  23 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 109,
+        1 => 8,
+      ),
+      1 => 
+      array (
+        0 => 109,
+        1 => 21,
+      ),
+      2 => 
+      array (
+        0 => 110,
+        1 => 21,
+      ),
+      3 => 
+      array (
+        0 => 110,
+        1 => 8,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  24 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 113,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 113,
+        1 => 13,
+      ),
+      2 => 
+      array (
+        0 => 114,
+        1 => 13,
+      ),
+      3 => 
+      array (
+        0 => 114,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  25 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 117,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 117,
+        1 => 13,
+      ),
+      2 => 
+      array (
+        0 => 118,
+        1 => 13,
+      ),
+      3 => 
+      array (
+        0 => 118,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  26 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 121,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 121,
+        1 => 13,
+      ),
+      2 => 
+      array (
+        0 => 122,
+        1 => 13,
+      ),
+      3 => 
+      array (
+        0 => 122,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  27 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 125,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 125,
+        1 => 21,
+      ),
+      2 => 
+      array (
+        0 => 126,
+        1 => 21,
+      ),
+      3 => 
+      array (
+        0 => 126,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  28 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 129,
+        1 => 8,
+      ),
+      1 => 
+      array (
+        0 => 129,
+        1 => 21,
+      ),
+      2 => 
+      array (
+        0 => 130,
+        1 => 21,
+      ),
+      3 => 
+      array (
+        0 => 130,
+        1 => 8,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  29 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 133,
+        1 => 8,
+      ),
+      1 => 
+      array (
+        0 => 133,
+        1 => 13,
+      ),
+      2 => 
+      array (
+        0 => 134,
+        1 => 13,
+      ),
+      3 => 
+      array (
+        0 => 134,
+        1 => 8,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  30 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 137,
+        1 => 1,
+      ),
+      1 => 
+      array (
+        0 => 137,
+        1 => 21,
+      ),
+      2 => 
+      array (
+        0 => 138,
+        1 => 21,
+      ),
+      3 => 
+      array (
+        0 => 138,
+        1 => 1,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  31 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 0,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 159,
+        1 => 0,
+      ),
+      2 => 
+      array (
+        0 => 159,
+        1 => 23,
+      ),
+      3 => 
+      array (
+        0 => 0,
+        1 => 23,
+      ),
+      4 => 
+      array (
+        0 => 0,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => false,
+  ),
+);

+ 937 - 0
tests/Zend/Barcode/Object/_files/Royalmail_012345_border_oriented_instructions.php

@@ -0,0 +1,937 @@
+<?php
+return
+array (
+  0 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 17,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => -2,
+        1 => 11,
+      ),
+      2 => 
+      array (
+        0 => 76,
+        1 => 149,
+      ),
+      3 => 
+      array (
+        0 => 96,
+        1 => 137,
+      ),
+    ),
+    'color' => 16777215,
+    'filled' => true,
+  ),
+  1 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 26,
+        1 => 18,
+      ),
+      1 => 
+      array (
+        0 => 16,
+        1 => 24,
+      ),
+      2 => 
+      array (
+        0 => 16,
+        1 => 25,
+      ),
+      3 => 
+      array (
+        0 => 27,
+        1 => 19,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  2 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 22,
+        1 => 25,
+      ),
+      1 => 
+      array (
+        0 => 18,
+        1 => 28,
+      ),
+      2 => 
+      array (
+        0 => 18,
+        1 => 29,
+      ),
+      3 => 
+      array (
+        0 => 22,
+        1 => 26,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  3 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 24,
+        1 => 29,
+      ),
+      1 => 
+      array (
+        0 => 20,
+        1 => 31,
+      ),
+      2 => 
+      array (
+        0 => 20,
+        1 => 32,
+      ),
+      3 => 
+      array (
+        0 => 24,
+        1 => 30,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  4 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 32,
+        1 => 29,
+      ),
+      1 => 
+      array (
+        0 => 15,
+        1 => 39,
+      ),
+      2 => 
+      array (
+        0 => 16,
+        1 => 39,
+      ),
+      3 => 
+      array (
+        0 => 33,
+        1 => 29,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  5 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 34,
+        1 => 32,
+      ),
+      1 => 
+      array (
+        0 => 17,
+        1 => 42,
+      ),
+      2 => 
+      array (
+        0 => 18,
+        1 => 43,
+      ),
+      3 => 
+      array (
+        0 => 35,
+        1 => 33,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  6 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 30,
+        1 => 39,
+      ),
+      1 => 
+      array (
+        0 => 26,
+        1 => 42,
+      ),
+      2 => 
+      array (
+        0 => 26,
+        1 => 43,
+      ),
+      3 => 
+      array (
+        0 => 30,
+        1 => 40,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  7 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 32,
+        1 => 43,
+      ),
+      1 => 
+      array (
+        0 => 21,
+        1 => 49,
+      ),
+      2 => 
+      array (
+        0 => 22,
+        1 => 50,
+      ),
+      3 => 
+      array (
+        0 => 32,
+        1 => 44,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  8 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 40,
+        1 => 42,
+      ),
+      1 => 
+      array (
+        0 => 30,
+        1 => 49,
+      ),
+      2 => 
+      array (
+        0 => 30,
+        1 => 50,
+      ),
+      3 => 
+      array (
+        0 => 41,
+        1 => 43,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  9 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 42,
+        1 => 46,
+      ),
+      1 => 
+      array (
+        0 => 25,
+        1 => 56,
+      ),
+      2 => 
+      array (
+        0 => 26,
+        1 => 57,
+      ),
+      3 => 
+      array (
+        0 => 43,
+        1 => 47,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  10 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 38,
+        1 => 53,
+      ),
+      1 => 
+      array (
+        0 => 34,
+        1 => 56,
+      ),
+      2 => 
+      array (
+        0 => 34,
+        1 => 56,
+      ),
+      3 => 
+      array (
+        0 => 38,
+        1 => 54,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  11 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 40,
+        1 => 57,
+      ),
+      1 => 
+      array (
+        0 => 29,
+        1 => 63,
+      ),
+      2 => 
+      array (
+        0 => 30,
+        1 => 64,
+      ),
+      3 => 
+      array (
+        0 => 40,
+        1 => 57,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  12 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 48,
+        1 => 56,
+      ),
+      1 => 
+      array (
+        0 => 31,
+        1 => 66,
+      ),
+      2 => 
+      array (
+        0 => 32,
+        1 => 67,
+      ),
+      3 => 
+      array (
+        0 => 49,
+        1 => 57,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  13 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 50,
+        1 => 60,
+      ),
+      1 => 
+      array (
+        0 => 40,
+        1 => 66,
+      ),
+      2 => 
+      array (
+        0 => 40,
+        1 => 67,
+      ),
+      3 => 
+      array (
+        0 => 51,
+        1 => 61,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  14 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 46,
+        1 => 67,
+      ),
+      1 => 
+      array (
+        0 => 35,
+        1 => 73,
+      ),
+      2 => 
+      array (
+        0 => 36,
+        1 => 74,
+      ),
+      3 => 
+      array (
+        0 => 46,
+        1 => 68,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  15 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 48,
+        1 => 70,
+      ),
+      1 => 
+      array (
+        0 => 44,
+        1 => 73,
+      ),
+      2 => 
+      array (
+        0 => 44,
+        1 => 74,
+      ),
+      3 => 
+      array (
+        0 => 48,
+        1 => 71,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  16 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 56,
+        1 => 70,
+      ),
+      1 => 
+      array (
+        0 => 46,
+        1 => 76,
+      ),
+      2 => 
+      array (
+        0 => 46,
+        1 => 77,
+      ),
+      3 => 
+      array (
+        0 => 57,
+        1 => 71,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  17 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 58,
+        1 => 74,
+      ),
+      1 => 
+      array (
+        0 => 41,
+        1 => 84,
+      ),
+      2 => 
+      array (
+        0 => 42,
+        1 => 84,
+      ),
+      3 => 
+      array (
+        0 => 59,
+        1 => 74,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  18 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 54,
+        1 => 81,
+      ),
+      1 => 
+      array (
+        0 => 43,
+        1 => 87,
+      ),
+      2 => 
+      array (
+        0 => 44,
+        1 => 88,
+      ),
+      3 => 
+      array (
+        0 => 54,
+        1 => 82,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  19 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 56,
+        1 => 84,
+      ),
+      1 => 
+      array (
+        0 => 52,
+        1 => 87,
+      ),
+      2 => 
+      array (
+        0 => 52,
+        1 => 88,
+      ),
+      3 => 
+      array (
+        0 => 56,
+        1 => 85,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  20 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 64,
+        1 => 84,
+      ),
+      1 => 
+      array (
+        0 => 47,
+        1 => 94,
+      ),
+      2 => 
+      array (
+        0 => 48,
+        1 => 95,
+      ),
+      3 => 
+      array (
+        0 => 65,
+        1 => 85,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  21 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 66,
+        1 => 87,
+      ),
+      1 => 
+      array (
+        0 => 56,
+        1 => 94,
+      ),
+      2 => 
+      array (
+        0 => 56,
+        1 => 95,
+      ),
+      3 => 
+      array (
+        0 => 67,
+        1 => 88,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  22 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 62,
+        1 => 95,
+      ),
+      1 => 
+      array (
+        0 => 51,
+        1 => 101,
+      ),
+      2 => 
+      array (
+        0 => 52,
+        1 => 102,
+      ),
+      3 => 
+      array (
+        0 => 62,
+        1 => 96,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  23 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 64,
+        1 => 98,
+      ),
+      1 => 
+      array (
+        0 => 53,
+        1 => 104,
+      ),
+      2 => 
+      array (
+        0 => 54,
+        1 => 105,
+      ),
+      3 => 
+      array (
+        0 => 64,
+        1 => 99,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  24 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 72,
+        1 => 98,
+      ),
+      1 => 
+      array (
+        0 => 62,
+        1 => 104,
+      ),
+      2 => 
+      array (
+        0 => 62,
+        1 => 105,
+      ),
+      3 => 
+      array (
+        0 => 73,
+        1 => 99,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  25 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 74,
+        1 => 101,
+      ),
+      1 => 
+      array (
+        0 => 64,
+        1 => 108,
+      ),
+      2 => 
+      array (
+        0 => 64,
+        1 => 108,
+      ),
+      3 => 
+      array (
+        0 => 75,
+        1 => 102,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  26 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 76,
+        1 => 105,
+      ),
+      1 => 
+      array (
+        0 => 66,
+        1 => 111,
+      ),
+      2 => 
+      array (
+        0 => 66,
+        1 => 112,
+      ),
+      3 => 
+      array (
+        0 => 77,
+        1 => 106,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  27 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 78,
+        1 => 108,
+      ),
+      1 => 
+      array (
+        0 => 61,
+        1 => 118,
+      ),
+      2 => 
+      array (
+        0 => 62,
+        1 => 119,
+      ),
+      3 => 
+      array (
+        0 => 79,
+        1 => 109,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  28 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 74,
+        1 => 115,
+      ),
+      1 => 
+      array (
+        0 => 63,
+        1 => 122,
+      ),
+      2 => 
+      array (
+        0 => 64,
+        1 => 123,
+      ),
+      3 => 
+      array (
+        0 => 74,
+        1 => 116,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  29 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 76,
+        1 => 119,
+      ),
+      1 => 
+      array (
+        0 => 72,
+        1 => 121,
+      ),
+      2 => 
+      array (
+        0 => 72,
+        1 => 122,
+      ),
+      3 => 
+      array (
+        0 => 76,
+        1 => 120,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  30 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 84,
+        1 => 119,
+      ),
+      1 => 
+      array (
+        0 => 67,
+        1 => 129,
+      ),
+      2 => 
+      array (
+        0 => 68,
+        1 => 130,
+      ),
+      3 => 
+      array (
+        0 => 85,
+        1 => 120,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  31 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 17,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 96,
+        1 => 137,
+      ),
+      2 => 
+      array (
+        0 => 76,
+        1 => 149,
+      ),
+      3 => 
+      array (
+        0 => -2,
+        1 => 11,
+      ),
+      4 => 
+      array (
+        0 => 17,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => false,
+  ),
+);

+ 903 - 0
tests/Zend/Barcode/Object/_files/Royalmail_012345_instructions.php

@@ -0,0 +1,903 @@
+<?php
+return
+array (
+  0 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 0,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 0,
+        1 => 19,
+      ),
+      2 => 
+      array (
+        0 => 157,
+        1 => 19,
+      ),
+      3 => 
+      array (
+        0 => 157,
+        1 => 0,
+      ),
+    ),
+    'color' => 16777215,
+    'filled' => true,
+  ),
+  1 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 20,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 20,
+        1 => 12,
+      ),
+      2 => 
+      array (
+        0 => 21,
+        1 => 12,
+      ),
+      3 => 
+      array (
+        0 => 21,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  2 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 24,
+        1 => 7,
+      ),
+      1 => 
+      array (
+        0 => 24,
+        1 => 12,
+      ),
+      2 => 
+      array (
+        0 => 25,
+        1 => 12,
+      ),
+      3 => 
+      array (
+        0 => 25,
+        1 => 7,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  3 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 28,
+        1 => 7,
+      ),
+      1 => 
+      array (
+        0 => 28,
+        1 => 12,
+      ),
+      2 => 
+      array (
+        0 => 29,
+        1 => 12,
+      ),
+      3 => 
+      array (
+        0 => 29,
+        1 => 7,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  4 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 32,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 32,
+        1 => 20,
+      ),
+      2 => 
+      array (
+        0 => 33,
+        1 => 20,
+      ),
+      3 => 
+      array (
+        0 => 33,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  5 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 36,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 36,
+        1 => 20,
+      ),
+      2 => 
+      array (
+        0 => 37,
+        1 => 20,
+      ),
+      3 => 
+      array (
+        0 => 37,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  6 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 40,
+        1 => 7,
+      ),
+      1 => 
+      array (
+        0 => 40,
+        1 => 12,
+      ),
+      2 => 
+      array (
+        0 => 41,
+        1 => 12,
+      ),
+      3 => 
+      array (
+        0 => 41,
+        1 => 7,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  7 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 44,
+        1 => 7,
+      ),
+      1 => 
+      array (
+        0 => 44,
+        1 => 20,
+      ),
+      2 => 
+      array (
+        0 => 45,
+        1 => 20,
+      ),
+      3 => 
+      array (
+        0 => 45,
+        1 => 7,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  8 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 48,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 48,
+        1 => 12,
+      ),
+      2 => 
+      array (
+        0 => 49,
+        1 => 12,
+      ),
+      3 => 
+      array (
+        0 => 49,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  9 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 52,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 52,
+        1 => 20,
+      ),
+      2 => 
+      array (
+        0 => 53,
+        1 => 20,
+      ),
+      3 => 
+      array (
+        0 => 53,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  10 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 56,
+        1 => 7,
+      ),
+      1 => 
+      array (
+        0 => 56,
+        1 => 12,
+      ),
+      2 => 
+      array (
+        0 => 57,
+        1 => 12,
+      ),
+      3 => 
+      array (
+        0 => 57,
+        1 => 7,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  11 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 60,
+        1 => 7,
+      ),
+      1 => 
+      array (
+        0 => 60,
+        1 => 20,
+      ),
+      2 => 
+      array (
+        0 => 61,
+        1 => 20,
+      ),
+      3 => 
+      array (
+        0 => 61,
+        1 => 7,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  12 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 64,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 64,
+        1 => 20,
+      ),
+      2 => 
+      array (
+        0 => 65,
+        1 => 20,
+      ),
+      3 => 
+      array (
+        0 => 65,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  13 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 68,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 68,
+        1 => 12,
+      ),
+      2 => 
+      array (
+        0 => 69,
+        1 => 12,
+      ),
+      3 => 
+      array (
+        0 => 69,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  14 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 72,
+        1 => 7,
+      ),
+      1 => 
+      array (
+        0 => 72,
+        1 => 20,
+      ),
+      2 => 
+      array (
+        0 => 73,
+        1 => 20,
+      ),
+      3 => 
+      array (
+        0 => 73,
+        1 => 7,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  15 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 76,
+        1 => 7,
+      ),
+      1 => 
+      array (
+        0 => 76,
+        1 => 12,
+      ),
+      2 => 
+      array (
+        0 => 77,
+        1 => 12,
+      ),
+      3 => 
+      array (
+        0 => 77,
+        1 => 7,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  16 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 80,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 80,
+        1 => 12,
+      ),
+      2 => 
+      array (
+        0 => 81,
+        1 => 12,
+      ),
+      3 => 
+      array (
+        0 => 81,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  17 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 84,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 84,
+        1 => 20,
+      ),
+      2 => 
+      array (
+        0 => 85,
+        1 => 20,
+      ),
+      3 => 
+      array (
+        0 => 85,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  18 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 88,
+        1 => 7,
+      ),
+      1 => 
+      array (
+        0 => 88,
+        1 => 20,
+      ),
+      2 => 
+      array (
+        0 => 89,
+        1 => 20,
+      ),
+      3 => 
+      array (
+        0 => 89,
+        1 => 7,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  19 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 92,
+        1 => 7,
+      ),
+      1 => 
+      array (
+        0 => 92,
+        1 => 12,
+      ),
+      2 => 
+      array (
+        0 => 93,
+        1 => 12,
+      ),
+      3 => 
+      array (
+        0 => 93,
+        1 => 7,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  20 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 96,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 96,
+        1 => 20,
+      ),
+      2 => 
+      array (
+        0 => 97,
+        1 => 20,
+      ),
+      3 => 
+      array (
+        0 => 97,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  21 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 100,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 100,
+        1 => 12,
+      ),
+      2 => 
+      array (
+        0 => 101,
+        1 => 12,
+      ),
+      3 => 
+      array (
+        0 => 101,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  22 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 104,
+        1 => 7,
+      ),
+      1 => 
+      array (
+        0 => 104,
+        1 => 20,
+      ),
+      2 => 
+      array (
+        0 => 105,
+        1 => 20,
+      ),
+      3 => 
+      array (
+        0 => 105,
+        1 => 7,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  23 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 108,
+        1 => 7,
+      ),
+      1 => 
+      array (
+        0 => 108,
+        1 => 20,
+      ),
+      2 => 
+      array (
+        0 => 109,
+        1 => 20,
+      ),
+      3 => 
+      array (
+        0 => 109,
+        1 => 7,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  24 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 112,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 112,
+        1 => 12,
+      ),
+      2 => 
+      array (
+        0 => 113,
+        1 => 12,
+      ),
+      3 => 
+      array (
+        0 => 113,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  25 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 116,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 116,
+        1 => 12,
+      ),
+      2 => 
+      array (
+        0 => 117,
+        1 => 12,
+      ),
+      3 => 
+      array (
+        0 => 117,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  26 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 120,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 120,
+        1 => 12,
+      ),
+      2 => 
+      array (
+        0 => 121,
+        1 => 12,
+      ),
+      3 => 
+      array (
+        0 => 121,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  27 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 124,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 124,
+        1 => 20,
+      ),
+      2 => 
+      array (
+        0 => 125,
+        1 => 20,
+      ),
+      3 => 
+      array (
+        0 => 125,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  28 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 128,
+        1 => 7,
+      ),
+      1 => 
+      array (
+        0 => 128,
+        1 => 20,
+      ),
+      2 => 
+      array (
+        0 => 129,
+        1 => 20,
+      ),
+      3 => 
+      array (
+        0 => 129,
+        1 => 7,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  29 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 132,
+        1 => 7,
+      ),
+      1 => 
+      array (
+        0 => 132,
+        1 => 12,
+      ),
+      2 => 
+      array (
+        0 => 133,
+        1 => 12,
+      ),
+      3 => 
+      array (
+        0 => 133,
+        1 => 7,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  30 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 136,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 136,
+        1 => 20,
+      ),
+      2 => 
+      array (
+        0 => 137,
+        1 => 20,
+      ),
+      3 => 
+      array (
+        0 => 137,
+        1 => 0,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+);

+ 903 - 0
tests/Zend/Barcode/Object/_files/Royalmail_012345_oriented_instructions.php

@@ -0,0 +1,903 @@
+<?php
+return
+array (
+  0 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 17,
+        1 => 0,
+      ),
+      1 => 
+      array (
+        0 => 0,
+        1 => 9,
+      ),
+      2 => 
+      array (
+        0 => 79,
+        1 => 145,
+      ),
+      3 => 
+      array (
+        0 => 95,
+        1 => 135,
+      ),
+    ),
+    'color' => 16777215,
+    'filled' => true,
+  ),
+  1 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 27,
+        1 => 17,
+      ),
+      1 => 
+      array (
+        0 => 16,
+        1 => 23,
+      ),
+      2 => 
+      array (
+        0 => 16,
+        1 => 24,
+      ),
+      3 => 
+      array (
+        0 => 27,
+        1 => 18,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  2 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 22,
+        1 => 24,
+      ),
+      1 => 
+      array (
+        0 => 18,
+        1 => 27,
+      ),
+      2 => 
+      array (
+        0 => 18,
+        1 => 27,
+      ),
+      3 => 
+      array (
+        0 => 23,
+        1 => 25,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  3 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 24,
+        1 => 27,
+      ),
+      1 => 
+      array (
+        0 => 20,
+        1 => 30,
+      ),
+      2 => 
+      array (
+        0 => 20,
+        1 => 31,
+      ),
+      3 => 
+      array (
+        0 => 25,
+        1 => 28,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  4 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 33,
+        1 => 27,
+      ),
+      1 => 
+      array (
+        0 => 16,
+        1 => 37,
+      ),
+      2 => 
+      array (
+        0 => 16,
+        1 => 38,
+      ),
+      3 => 
+      array (
+        0 => 33,
+        1 => 28,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  5 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 35,
+        1 => 31,
+      ),
+      1 => 
+      array (
+        0 => 18,
+        1 => 41,
+      ),
+      2 => 
+      array (
+        0 => 18,
+        1 => 42,
+      ),
+      3 => 
+      array (
+        0 => 35,
+        1 => 32,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  6 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 30,
+        1 => 38,
+      ),
+      1 => 
+      array (
+        0 => 26,
+        1 => 40,
+      ),
+      2 => 
+      array (
+        0 => 26,
+        1 => 41,
+      ),
+      3 => 
+      array (
+        0 => 31,
+        1 => 39,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  7 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 32,
+        1 => 41,
+      ),
+      1 => 
+      array (
+        0 => 22,
+        1 => 48,
+      ),
+      2 => 
+      array (
+        0 => 22,
+        1 => 48,
+      ),
+      3 => 
+      array (
+        0 => 33,
+        1 => 42,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  8 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 41,
+        1 => 41,
+      ),
+      1 => 
+      array (
+        0 => 30,
+        1 => 47,
+      ),
+      2 => 
+      array (
+        0 => 30,
+        1 => 48,
+      ),
+      3 => 
+      array (
+        0 => 41,
+        1 => 42,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  9 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 43,
+        1 => 45,
+      ),
+      1 => 
+      array (
+        0 => 26,
+        1 => 55,
+      ),
+      2 => 
+      array (
+        0 => 26,
+        1 => 55,
+      ),
+      3 => 
+      array (
+        0 => 43,
+        1 => 45,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  10 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 38,
+        1 => 52,
+      ),
+      1 => 
+      array (
+        0 => 34,
+        1 => 54,
+      ),
+      2 => 
+      array (
+        0 => 34,
+        1 => 55,
+      ),
+      3 => 
+      array (
+        0 => 39,
+        1 => 53,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  11 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 40,
+        1 => 55,
+      ),
+      1 => 
+      array (
+        0 => 30,
+        1 => 61,
+      ),
+      2 => 
+      array (
+        0 => 30,
+        1 => 62,
+      ),
+      3 => 
+      array (
+        0 => 41,
+        1 => 56,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  12 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 49,
+        1 => 55,
+      ),
+      1 => 
+      array (
+        0 => 32,
+        1 => 65,
+      ),
+      2 => 
+      array (
+        0 => 32,
+        1 => 66,
+      ),
+      3 => 
+      array (
+        0 => 49,
+        1 => 56,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  13 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 51,
+        1 => 58,
+      ),
+      1 => 
+      array (
+        0 => 40,
+        1 => 65,
+      ),
+      2 => 
+      array (
+        0 => 40,
+        1 => 66,
+      ),
+      3 => 
+      array (
+        0 => 51,
+        1 => 59,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  14 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 46,
+        1 => 66,
+      ),
+      1 => 
+      array (
+        0 => 36,
+        1 => 72,
+      ),
+      2 => 
+      array (
+        0 => 36,
+        1 => 73,
+      ),
+      3 => 
+      array (
+        0 => 47,
+        1 => 66,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  15 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 48,
+        1 => 69,
+      ),
+      1 => 
+      array (
+        0 => 44,
+        1 => 72,
+      ),
+      2 => 
+      array (
+        0 => 44,
+        1 => 72,
+      ),
+      3 => 
+      array (
+        0 => 49,
+        1 => 70,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  16 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 57,
+        1 => 69,
+      ),
+      1 => 
+      array (
+        0 => 46,
+        1 => 75,
+      ),
+      2 => 
+      array (
+        0 => 46,
+        1 => 76,
+      ),
+      3 => 
+      array (
+        0 => 57,
+        1 => 70,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  17 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 59,
+        1 => 72,
+      ),
+      1 => 
+      array (
+        0 => 42,
+        1 => 82,
+      ),
+      2 => 
+      array (
+        0 => 42,
+        1 => 83,
+      ),
+      3 => 
+      array (
+        0 => 59,
+        1 => 73,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  18 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 54,
+        1 => 79,
+      ),
+      1 => 
+      array (
+        0 => 44,
+        1 => 86,
+      ),
+      2 => 
+      array (
+        0 => 44,
+        1 => 87,
+      ),
+      3 => 
+      array (
+        0 => 55,
+        1 => 80,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  19 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 56,
+        1 => 83,
+      ),
+      1 => 
+      array (
+        0 => 52,
+        1 => 85,
+      ),
+      2 => 
+      array (
+        0 => 52,
+        1 => 86,
+      ),
+      3 => 
+      array (
+        0 => 57,
+        1 => 84,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  20 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 65,
+        1 => 83,
+      ),
+      1 => 
+      array (
+        0 => 48,
+        1 => 93,
+      ),
+      2 => 
+      array (
+        0 => 48,
+        1 => 94,
+      ),
+      3 => 
+      array (
+        0 => 65,
+        1 => 84,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  21 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 67,
+        1 => 86,
+      ),
+      1 => 
+      array (
+        0 => 56,
+        1 => 92,
+      ),
+      2 => 
+      array (
+        0 => 56,
+        1 => 93,
+      ),
+      3 => 
+      array (
+        0 => 67,
+        1 => 87,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  22 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 62,
+        1 => 93,
+      ),
+      1 => 
+      array (
+        0 => 52,
+        1 => 100,
+      ),
+      2 => 
+      array (
+        0 => 52,
+        1 => 100,
+      ),
+      3 => 
+      array (
+        0 => 63,
+        1 => 94,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  23 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 64,
+        1 => 97,
+      ),
+      1 => 
+      array (
+        0 => 54,
+        1 => 103,
+      ),
+      2 => 
+      array (
+        0 => 54,
+        1 => 104,
+      ),
+      3 => 
+      array (
+        0 => 65,
+        1 => 98,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  24 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 73,
+        1 => 96,
+      ),
+      1 => 
+      array (
+        0 => 62,
+        1 => 103,
+      ),
+      2 => 
+      array (
+        0 => 62,
+        1 => 104,
+      ),
+      3 => 
+      array (
+        0 => 73,
+        1 => 97,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  25 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 75,
+        1 => 100,
+      ),
+      1 => 
+      array (
+        0 => 64,
+        1 => 106,
+      ),
+      2 => 
+      array (
+        0 => 64,
+        1 => 107,
+      ),
+      3 => 
+      array (
+        0 => 75,
+        1 => 101,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  26 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 77,
+        1 => 103,
+      ),
+      1 => 
+      array (
+        0 => 66,
+        1 => 110,
+      ),
+      2 => 
+      array (
+        0 => 66,
+        1 => 111,
+      ),
+      3 => 
+      array (
+        0 => 77,
+        1 => 104,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  27 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 79,
+        1 => 107,
+      ),
+      1 => 
+      array (
+        0 => 62,
+        1 => 117,
+      ),
+      2 => 
+      array (
+        0 => 62,
+        1 => 118,
+      ),
+      3 => 
+      array (
+        0 => 79,
+        1 => 108,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  28 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 74,
+        1 => 114,
+      ),
+      1 => 
+      array (
+        0 => 64,
+        1 => 120,
+      ),
+      2 => 
+      array (
+        0 => 64,
+        1 => 121,
+      ),
+      3 => 
+      array (
+        0 => 75,
+        1 => 115,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  29 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 76,
+        1 => 118,
+      ),
+      1 => 
+      array (
+        0 => 72,
+        1 => 120,
+      ),
+      2 => 
+      array (
+        0 => 72,
+        1 => 121,
+      ),
+      3 => 
+      array (
+        0 => 77,
+        1 => 118,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+  30 => 
+  array (
+    'type' => 'polygon',
+    'points' => 
+    array (
+      0 => 
+      array (
+        0 => 85,
+        1 => 117,
+      ),
+      1 => 
+      array (
+        0 => 68,
+        1 => 127,
+      ),
+      2 => 
+      array (
+        0 => 68,
+        1 => 128,
+      ),
+      3 => 
+      array (
+        0 => 85,
+        1 => 118,
+      ),
+    ),
+    'color' => 0,
+    'filled' => true,
+  ),
+);