diff --git a/include/class.format.php b/include/class.format.php index fd51d95867d76918bb85e5a34d1eb524ee2066ff..4ed82d907684561a2cfc647678dde77e558e0a0b 100644 --- a/include/class.format.php +++ b/include/class.format.php @@ -168,6 +168,7 @@ class Format { 'safe' => 1, //Exclude applet, embed, iframe, object and script tags. 'balance' => 1, //balance and close unclosed tags. 'comment' => 1, //Remove html comments (OUTLOOK LOVE THEM) + 'tidy' => -1, 'deny_attribute' => 'id', 'schemes' => 'href: aim, feed, file, ftp, gopher, http, https, irc, mailto, news, nntp, sftp, ssh, telnet; *:file, http, https; src: cid, http, https, data', 'hook_tag' => function ($el, $attributes=0) { @@ -196,9 +197,6 @@ class Format { } ); - if (!preg_match('/style="[^"]*white-space:\s*pre/i', $html) !== false) - $config['tidy'] = -1; // Clean extra whitspace - return Format::html($html, $config); } diff --git a/include/class.mailfetch.php b/include/class.mailfetch.php index f71c002517911d3fc3769086130eba35f8f622eb..0f1f7cef5a5737c1a23d2bdad285f0915c55fcf0 100644 --- a/include/class.mailfetch.php +++ b/include/class.mailfetch.php @@ -431,7 +431,7 @@ class MailFetcher { } elseif ($body=$this->getPart($mid, 'text/plain', $this->charset)) { $body = trim($body) - ? sprintf('<div style="white-space:pre-wrap">%s</div>', + ? sprintf('<pre>%s</pre>', Format::htmlchars($body)) : '--'; } @@ -444,7 +444,7 @@ class MailFetcher { $body = Format::html2text(Format::safe_html($body), 100, false); } $body = trim($body) - ? sprintf('<div style="white-space:pre-wrap">%s</div>', + ? sprintf('<pre>%s</pre>', $body) : '--'; } diff --git a/include/class.mailparse.php b/include/class.mailparse.php index 15247689ca10f3ea5c059c11efd26956002ae70f..8d84f3f5afeb4d8129490def2802b158aa3f0dd7 100644 --- a/include/class.mailparse.php +++ b/include/class.mailparse.php @@ -181,7 +181,7 @@ class Mail_Parse { } elseif ($body=$this->getPart($this->struct,'text/plain')) { $body = trim($body) - ? sprintf('<div style="white-space:pre-wrap">%s</div>', + ? sprintf('<pre>%s</pre>', Format::htmlchars($body)) : '--'; } @@ -194,7 +194,7 @@ class Mail_Parse { $body = Format::html2text(Format::safe_html($body), 100, false); } $body = trim($body) - ? sprintf('<div style="white-space:pre-wrap">%s</div>', + ? sprintf('<pre>%s</pre>', $body) : '--'; } diff --git a/include/class.pdf.php b/include/class.pdf.php index cf17a2f7e4bc954c55a0bf807a3ff9b71f55b412..05e5b13de761c5440bd2cb6b15bca7fd75e2092e 100644 --- a/include/class.pdf.php +++ b/include/class.pdf.php @@ -15,11 +15,10 @@ **********************************************************************/ define('THIS_DIR', str_replace('\\', '/', realpath(dirname(__FILE__))) . '/'); //Include path.. -define('FPDF_DIR', THIS_DIR . 'fpdf/'); -define('FPDF_FONTPATH', FPDF_DIR . 'font/'); //fonts directory. -require (FPDF_DIR . 'fpdf.php'); -class Ticket2PDF extends FPDF +require_once(INCLUDE_DIR.'mpdf/mpdf.php'); + +class Ticket2PDF extends mPDF { var $includenotes = false; @@ -32,15 +31,16 @@ class Ticket2PDF extends FPDF global $thisstaff; - parent::FPDF('P', 'mm', $psize); - $this->ticket = $ticket; - $this->includenotes = $notes; + + parent::__construct('', $psize); + $this->SetMargins(10,10,10); $this->AliasNbPages(); $this->AddPage(); $this->cMargin = 3; + $this->_print(); } @@ -73,18 +73,18 @@ class Ticket2PDF extends FPDF //Common header $logo = $this->getLogoFile(); - $this->Image($logo, null, $this->tMargin, 0, 20); + $this->Image($logo, $this->lMargin, $this->tMargin, 0, 20); if (strpos($logo, INCLUDE_DIR) === false) unlink($logo); - $this->SetFont('Times', 'B', 16); + $this->SetFont('Arial', 'B', 16); $this->SetY($this->tMargin + 20); $this->SetX($this->lMargin); - $this->Cell(0, 0, '', "B", 2, 'L'); + $this->WriteCell(0, 0, '', "B", 2, 'L'); $this->Ln(1); $this->SetFont('Arial', 'B',10); - $this->Cell(0, 5, $cfg->getTitle(), 0, 0, 'L'); + $this->WriteCell(0, 5, $cfg->getTitle(), 0, 0, 'L'); $this->SetFont('Arial', 'I',10); - $this->Cell(0, 5, Format::date($cfg->getDateTimeFormat(), Misc::gmtime(), + $this->WriteCell(0, 5, Format::date($cfg->getDateTimeFormat(), Misc::gmtime(), $_SESSION['TZ_OFFSET'], $_SESSION['TZ_DST']) .' GMT '.$_SESSION['TZ_OFFSET'], 0, 1, 'R'); $this->Ln(5); @@ -95,40 +95,40 @@ class Ticket2PDF extends FPDF global $thisstaff; $this->SetY(-15); - $this->Cell(0, 2, '', "T", 2, 'L'); + $this->WriteCell(0, 2, '', "T", 2, 'L'); $this->SetFont('Arial', 'I', 9); - $this->Cell(0, 7, 'Ticket #'.$this->getTicket()->getNumber().' printed by '.$thisstaff->getUserName().' on '.date('r'), 0, 0, 'L'); - //$this->Cell(0,10,'Page '.($this->PageNo()-$this->pageOffset).' of {nb} '.$this->pageOffset.' '.$this->PageNo(),0,0,'R'); - $this->Cell(0, 7, 'Page ' . ($this->PageNo() - $this->pageOffset), 0, 0, 'R'); + $this->WriteCell(0, 7, 'Ticket #'.$this->getTicket()->getNumber().' printed by '.$thisstaff->getUserName().' on '.date('r'), 0, 0, 'L'); + //$this->WriteCell(0,10,'Page '.($this->PageNo()-$this->pageOffset).' of {nb} '.$this->pageOffset.' '.$this->PageNo(),0,0,'R'); + $this->WriteCell(0, 7, 'Page ' . ($this->PageNo() - $this->pageOffset), 0, 0, 'R'); } function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='') { - parent::Cell($w, $h, $this->_utf8($txt), $border, $ln, $align, $fill, $link); + parent::Cell($w, $h, $txt, $border, $ln, $align, $fill, $link); } function WriteText($w, $text, $border) { - $this->SetFont('Times','',11); + $this->SetFont('Arial','',11); $this->MultiCell($w, 7, $text, $border, 'L'); } - function _utf8($text) { - // Assume text is in utf-8 charset - $flags = ENT_COMPAT; - if (phpversion() >= '5.4.0') - $flags |= ENT_HTML401; - - // Assume text in the database is HTML - $text = html_entity_decode($text, $flags, 'UTF-8'); - - if (function_exists('iconv')) - return iconv('UTF-8', 'windows-1252', $text); - elseif (function_exists('utf8_decode')) - return utf8_decode($text); - - // XXX: FPDF does not support UTF-8 encoding - return $text; + function WriteHtml() { + static $filenumber = 1; + $args = func_get_args(); + $text = &$args[0]; + $self = $this; + $text = preg_replace_callback('/cid:([\w.-]{32})/', + function($match) use ($self, &$filenumber) { + if (!($file = AttachmentFile::lookup($match[1]))) + return $match[0]; + $key = "__attached_file_".$filenumber++; + $self->{$key} = $file->getData(); + return 'var:'.$key; + }, + $text + ); + call_user_func_array(array('parent', 'WriteHtml'), $args); } function _print() { @@ -140,12 +140,16 @@ class Ticket2PDF extends FPDF $l = 35; $c = $w-$l; + // Setup HTML writing and load default thread stylesheet + $this->WriteHtml( + '<style>'.file_get_contents(ROOT_DIR.'css/thread.css') + .'</style>', 1, true, false); $this->SetFont('Arial', 'B', 11); $this->cMargin = 0; $this->SetFont('Arial', 'B', 11); $this->SetTextColor(10, 86, 142); - $this->Cell($w, 7,'Ticket #'.$ticket->getNumber(), 0, 0, 'L'); + $this->WriteCell($w, 7,'Ticket #'.$ticket->getNumber(), 0, 0, 'L'); $this->Ln(7); $this->cMargin = 3; $this->SetTextColor(0); @@ -153,106 +157,108 @@ class Ticket2PDF extends FPDF $this->SetFillColor(244, 250, 255); $this->SetX($this->lMargin); $this->SetFont('Arial', 'B', 11); - $this->Cell($l, 7, 'Status', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'Status', 1, 0, 'L', true); $this->SetFont(''); - $this->Cell($c, 7, $ticket->getStatus(), 1, 0, 'L', true); + $this->WriteCell($c, 7, $ticket->getStatus(), 1, 0, 'L', true); $this->SetFont('Arial', 'B', 11); - $this->Cell($l, 7, 'Name', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'Name', 1, 0, 'L', true); $this->SetFont(''); - $this->Cell($c, 7, $ticket->getName(), 1, 1, 'L', true); + $this->WriteCell($c, 7, (string)$ticket->getName(), 1, 1, 'L', true); $this->SetFont('Arial', 'B', 11); - $this->Cell($l, 7, 'Priority', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'Priority', 1, 0, 'L', true); $this->SetFont(''); - $this->Cell($c, 7, $ticket->getPriority(), 1, 0, 'L', true); + $this->WriteCell($c, 7, $ticket->getPriority(), 1, 0, 'L', true); $this->SetFont('Arial', 'B', 11); - $this->Cell($l, 7, 'Email', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'Email', 1, 0, 'L', true); $this->SetFont(''); - $this->Cell($c, 7, $ticket->getEmail(), 1, 1, 'L', true); + $this->WriteCell($c, 7, $ticket->getEmail(), 1, 1, 'L', true); $this->SetFont('Arial', 'B', 11); - $this->Cell($l, 7, 'Department', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'Department', 1, 0, 'L', true); $this->SetFont(''); - $this->Cell($c, 7, $ticket->getDeptName(), 1, 0, 'L', true); + $this->WriteCell($c, 7, $ticket->getDeptName(), 1, 0, 'L', true); $this->SetFont('Arial', 'B', 11); - $this->Cell($l, 7, 'Phone', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'Phone', 1, 0, 'L', true); $this->SetFont(''); - $this->Cell($c, 7, $ticket->getPhoneNumber(), 1, 1, 'L', true); + $this->WriteCell($c, 7, $ticket->getPhoneNumber(), 1, 1, 'L', true); $this->SetFont('Arial', 'B', 11); - $this->Cell($l, 7, 'Create Date', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'Create Date', 1, 0, 'L', true); $this->SetFont(''); - $this->Cell($c, 7, Format::db_datetime($ticket->getCreateDate()), 1, 0, 'L', true); + $this->WriteCell($c, 7, Format::db_datetime($ticket->getCreateDate()), 1, 0, 'L', true); $this->SetFont('Arial', 'B', 11); - $this->Cell($l, 7, 'Source', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'Source', 1, 0, 'L', true); $this->SetFont(''); $source = ucfirst($ticket->getSource()); if($ticket->getIP()) $source.=' ('.$ticket->getIP().')'; - $this->Cell($c, 7, $source, 1, 0, 'L', true); + $this->WriteCell($c, 7, $source, 1, 0, 'L', true); $this->Ln(12); $this->SetFont('Arial', 'B', 11); if($ticket->isOpen()) { - $this->Cell($l, 7, 'Assigned To', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'Assigned To', 1, 0, 'L', true); $this->SetFont(''); - $this->Cell($c, 7, $ticket->isAssigned()?$ticket->getAssigned():' -- ', 1, 0, 'L', true); + $this->WriteCell($c, 7, $ticket->isAssigned()?$ticket->getAssigned():' -- ', 1, 0, 'L', true); } else { $closedby = 'unknown'; if(($staff = $ticket->getStaff())) $closedby = $staff->getName(); - $this->Cell($l, 7, 'Closed By', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'Closed By', 1, 0, 'L', true); $this->SetFont(''); - $this->Cell($c, 7, $closedby, 1, 0, 'L', true); + $this->WriteCell($c, 7, $closedby, 1, 0, 'L', true); } $this->SetFont('Arial', 'B', 11); - $this->Cell($l, 7, 'Help Topic', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'Help Topic', 1, 0, 'L', true); $this->SetFont(''); - $this->Cell($c, 7, $ticket->getHelpTopic(), 1, 1, 'L', true); + $this->WriteCell($c, 7, $ticket->getHelpTopic(), 1, 1, 'L', true); $this->SetFont('Arial', 'B', 11); - $this->Cell($l, 7, 'SLA Plan', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'SLA Plan', 1, 0, 'L', true); $this->SetFont(''); $sla = $ticket->getSLA(); - $this->Cell($c, 7, $sla?$sla->getName():' -- ', 1, 0, 'L', true); + $this->WriteCell($c, 7, $sla?$sla->getName():' -- ', 1, 0, 'L', true); $this->SetFont('Arial', 'B', 11); - $this->Cell($l, 7, 'Last Response', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'Last Response', 1, 0, 'L', true); $this->SetFont(''); - $this->Cell($c, 7, Format::db_datetime($ticket->getLastRespDate()), 1, 1, 'L', true); + $this->WriteCell($c, 7, Format::db_datetime($ticket->getLastRespDate()), 1, 1, 'L', true); $this->SetFont('Arial', 'B', 11); if($ticket->isOpen()) { - $this->Cell($l, 7, 'Due Date', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'Due Date', 1, 0, 'L', true); $this->SetFont(''); - $this->Cell($c, 7, Format::db_datetime($ticket->getEstDueDate()), 1, 0, 'L', true); + $this->WriteCell($c, 7, Format::db_datetime($ticket->getEstDueDate()), 1, 0, 'L', true); } else { - $this->Cell($l, 7, 'Close Date', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'Close Date', 1, 0, 'L', true); $this->SetFont(''); - $this->Cell($c, 7, Format::db_datetime($ticket->getCloseDate()), 1, 0, 'L', true); + $this->WriteCell($c, 7, Format::db_datetime($ticket->getCloseDate()), 1, 0, 'L', true); } $this->SetFont('Arial', 'B', 11); - $this->Cell($l, 7, 'Last Message', 1, 0, 'L', true); + $this->WriteCell($l, 7, 'Last Message', 1, 0, 'L', true); $this->SetFont(''); - $this->Cell($c, 7, Format::db_datetime($ticket->getLastMsgDate()), 1, 1, 'L', true); + $this->WriteCell($c, 7, Format::db_datetime($ticket->getLastMsgDate()), 1, 1, 'L', true); $this->SetFillColor(255, 255, 255); foreach (DynamicFormEntry::forTicket($ticket->getId()) as $form) { $idx = 0; foreach ($form->getAnswers() as $a) { if (in_array($a->getField()->get('name'), - array('email','name','subject','phone'))) + array('email','name','subject','phone','priority'))) continue; $this->SetFont('Arial', 'B', 11); if ($idx++ === 0) { $this->Ln(5); $this->SetFillColor(244, 250, 255); - $this->Cell(($l+$c)*2, 7, $a->getForm()->get('title'), + $this->WriteCell(($l+$c)*2, 7, $a->getForm()->get('title'), 1, 0, 'L', true); - $this->Ln(7); $this->SetFillColor(255, 255, 255); } - $this->Cell($l*2, 7, $a->getField()->get('label'), 1, 0, 'L', true); - $this->SetFont(''); - $this->WriteText($c*2, $a->toString(), 1); + if ($val = $a->toString()) { + $this->Ln(7); + $this->WriteCell($l*2, 7, $a->getField()->get('label'), 1, 0, 'L', true); + $this->SetFont(''); + $this->WriteCell($c*2, 7, $val, 1, 0, 'L', true); + } } } $this->SetFillColor(244, 250, 255); @@ -261,7 +267,7 @@ class Ticket2PDF extends FPDF $this->SetFont('Arial', 'B', 11); $this->cMargin = 0; $this->SetTextColor(10, 86, 142); - $this->Cell($w, 7,trim($ticket->getSubject()), 0, 0, 'L'); + $this->WriteCell($w, 7,trim($ticket->getSubject()), 0, 0, 'L'); $this->Ln(7); $this->SetTextColor(0); $this->cMargin = 3; @@ -282,10 +288,10 @@ class Ticket2PDF extends FPDF $this->SetFillColor($color[0], $color[1], $color[2]); $this->SetFont('Arial', 'B', 11); - $this->Cell($w/2, 7, Format::db_datetime($entry['created']), 'LTB', 0, 'L', true); + $this->WriteCell($w/2, 7, Format::db_datetime($entry['created']), 'LTB', 0, 'L', true); $this->SetFont('Arial', '', 10); - $this->Cell($w, 7, $entry['title'], 'TB', 0, 'L', true); - $this->Cell($w/2, 7, $entry['poster'], 'TBR', 1, 'L', true); + $this->WriteCell($w, 7, Format::truncate($entry['title'], 50), 'TB', 0, 'L', true); + $this->WriteCell($w/2, 7, $entry['poster'], 'TBR', 1, 'L', true); $this->SetFont(''); $text= $entry['body']; if($entry['attachments'] @@ -295,13 +301,15 @@ class Ticket2PDF extends FPDF foreach($attachments as $attachment) $files[]= $attachment['name']; - $text.="\nFiles Attached: [".implode(', ',$files)."]\n"; + $text.="<div>Files Attached: [".implode(', ',$files)."]</div>"; } - $this->WriteText($w*2, $text, 1); + $this->WriteHtml('<div class="thread-body">'.$text.'</div>', 2, false, false); $this->Ln(5); } } + $this->WriteHtml('', 2, false, true); + } } ?> diff --git a/include/fpdf/font/courier.php b/include/fpdf/font/courier.php deleted file mode 100755 index 913f9a4533e0047f42e8ac037991b3d44c8cc939..0000000000000000000000000000000000000000 --- a/include/fpdf/font/courier.php +++ /dev/null @@ -1,7 +0,0 @@ -<?php -for($i=0;$i<=255;$i++) - $fpdf_charwidths['courier'][chr($i)]=600; -$fpdf_charwidths['courierB']=$fpdf_charwidths['courier']; -$fpdf_charwidths['courierI']=$fpdf_charwidths['courier']; -$fpdf_charwidths['courierBI']=$fpdf_charwidths['courier']; -?> diff --git a/include/fpdf/font/desktop.ini b/include/fpdf/font/desktop.ini deleted file mode 100755 index 8a96fbb70f2b706eab094d4beb65a2e5fc5b6ee9..0000000000000000000000000000000000000000 --- a/include/fpdf/font/desktop.ini +++ /dev/null @@ -1,4 +0,0 @@ -[ViewState] -Mode= -Vid= -FolderType=NotSpecified diff --git a/include/fpdf/font/makefont/cp1250.map b/include/fpdf/font/makefont/cp1250.map deleted file mode 100755 index ec110af06108ab961c9eafd5fc45a7488ca6cce0..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/cp1250.map +++ /dev/null @@ -1,251 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!82 U+201A quotesinglbase -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!89 U+2030 perthousand -!8A U+0160 Scaron -!8B U+2039 guilsinglleft -!8C U+015A Sacute -!8D U+0164 Tcaron -!8E U+017D Zcaron -!8F U+0179 Zacute -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!99 U+2122 trademark -!9A U+0161 scaron -!9B U+203A guilsinglright -!9C U+015B sacute -!9D U+0165 tcaron -!9E U+017E zcaron -!9F U+017A zacute -!A0 U+00A0 space -!A1 U+02C7 caron -!A2 U+02D8 breve -!A3 U+0141 Lslash -!A4 U+00A4 currency -!A5 U+0104 Aogonek -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AA U+015E Scedilla -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+017B Zdotaccent -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+02DB ogonek -!B3 U+0142 lslash -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+00B8 cedilla -!B9 U+0105 aogonek -!BA U+015F scedilla -!BB U+00BB guillemotright -!BC U+013D Lcaron -!BD U+02DD hungarumlaut -!BE U+013E lcaron -!BF U+017C zdotaccent -!C0 U+0154 Racute -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+0102 Abreve -!C4 U+00C4 Adieresis -!C5 U+0139 Lacute -!C6 U+0106 Cacute -!C7 U+00C7 Ccedilla -!C8 U+010C Ccaron -!C9 U+00C9 Eacute -!CA U+0118 Eogonek -!CB U+00CB Edieresis -!CC U+011A Ecaron -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+010E Dcaron -!D0 U+0110 Dcroat -!D1 U+0143 Nacute -!D2 U+0147 Ncaron -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+0150 Ohungarumlaut -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+0158 Rcaron -!D9 U+016E Uring -!DA U+00DA Uacute -!DB U+0170 Uhungarumlaut -!DC U+00DC Udieresis -!DD U+00DD Yacute -!DE U+0162 Tcommaaccent -!DF U+00DF germandbls -!E0 U+0155 racute -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+0103 abreve -!E4 U+00E4 adieresis -!E5 U+013A lacute -!E6 U+0107 cacute -!E7 U+00E7 ccedilla -!E8 U+010D ccaron -!E9 U+00E9 eacute -!EA U+0119 eogonek -!EB U+00EB edieresis -!EC U+011B ecaron -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+010F dcaron -!F0 U+0111 dcroat -!F1 U+0144 nacute -!F2 U+0148 ncaron -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+0151 ohungarumlaut -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+0159 rcaron -!F9 U+016F uring -!FA U+00FA uacute -!FB U+0171 uhungarumlaut -!FC U+00FC udieresis -!FD U+00FD yacute -!FE U+0163 tcommaaccent -!FF U+02D9 dotaccent diff --git a/include/fpdf/font/makefont/cp1251.map b/include/fpdf/font/makefont/cp1251.map deleted file mode 100755 index de6a198d99d9d17db29f02633e3b0e66c9a60e98..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/cp1251.map +++ /dev/null @@ -1,255 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0402 afii10051 -!81 U+0403 afii10052 -!82 U+201A quotesinglbase -!83 U+0453 afii10100 -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!88 U+20AC Euro -!89 U+2030 perthousand -!8A U+0409 afii10058 -!8B U+2039 guilsinglleft -!8C U+040A afii10059 -!8D U+040C afii10061 -!8E U+040B afii10060 -!8F U+040F afii10145 -!90 U+0452 afii10099 -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!99 U+2122 trademark -!9A U+0459 afii10106 -!9B U+203A guilsinglright -!9C U+045A afii10107 -!9D U+045C afii10109 -!9E U+045B afii10108 -!9F U+045F afii10193 -!A0 U+00A0 space -!A1 U+040E afii10062 -!A2 U+045E afii10110 -!A3 U+0408 afii10057 -!A4 U+00A4 currency -!A5 U+0490 afii10050 -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+0401 afii10023 -!A9 U+00A9 copyright -!AA U+0404 afii10053 -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+0407 afii10056 -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+0406 afii10055 -!B3 U+0456 afii10103 -!B4 U+0491 afii10098 -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+0451 afii10071 -!B9 U+2116 afii61352 -!BA U+0454 afii10101 -!BB U+00BB guillemotright -!BC U+0458 afii10105 -!BD U+0405 afii10054 -!BE U+0455 afii10102 -!BF U+0457 afii10104 -!C0 U+0410 afii10017 -!C1 U+0411 afii10018 -!C2 U+0412 afii10019 -!C3 U+0413 afii10020 -!C4 U+0414 afii10021 -!C5 U+0415 afii10022 -!C6 U+0416 afii10024 -!C7 U+0417 afii10025 -!C8 U+0418 afii10026 -!C9 U+0419 afii10027 -!CA U+041A afii10028 -!CB U+041B afii10029 -!CC U+041C afii10030 -!CD U+041D afii10031 -!CE U+041E afii10032 -!CF U+041F afii10033 -!D0 U+0420 afii10034 -!D1 U+0421 afii10035 -!D2 U+0422 afii10036 -!D3 U+0423 afii10037 -!D4 U+0424 afii10038 -!D5 U+0425 afii10039 -!D6 U+0426 afii10040 -!D7 U+0427 afii10041 -!D8 U+0428 afii10042 -!D9 U+0429 afii10043 -!DA U+042A afii10044 -!DB U+042B afii10045 -!DC U+042C afii10046 -!DD U+042D afii10047 -!DE U+042E afii10048 -!DF U+042F afii10049 -!E0 U+0430 afii10065 -!E1 U+0431 afii10066 -!E2 U+0432 afii10067 -!E3 U+0433 afii10068 -!E4 U+0434 afii10069 -!E5 U+0435 afii10070 -!E6 U+0436 afii10072 -!E7 U+0437 afii10073 -!E8 U+0438 afii10074 -!E9 U+0439 afii10075 -!EA U+043A afii10076 -!EB U+043B afii10077 -!EC U+043C afii10078 -!ED U+043D afii10079 -!EE U+043E afii10080 -!EF U+043F afii10081 -!F0 U+0440 afii10082 -!F1 U+0441 afii10083 -!F2 U+0442 afii10084 -!F3 U+0443 afii10085 -!F4 U+0444 afii10086 -!F5 U+0445 afii10087 -!F6 U+0446 afii10088 -!F7 U+0447 afii10089 -!F8 U+0448 afii10090 -!F9 U+0449 afii10091 -!FA U+044A afii10092 -!FB U+044B afii10093 -!FC U+044C afii10094 -!FD U+044D afii10095 -!FE U+044E afii10096 -!FF U+044F afii10097 diff --git a/include/fpdf/font/makefont/cp1252.map b/include/fpdf/font/makefont/cp1252.map deleted file mode 100755 index dd490e5961485ea47e527508691007e31e376fe9..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/cp1252.map +++ /dev/null @@ -1,251 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!82 U+201A quotesinglbase -!83 U+0192 florin -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!88 U+02C6 circumflex -!89 U+2030 perthousand -!8A U+0160 Scaron -!8B U+2039 guilsinglleft -!8C U+0152 OE -!8E U+017D Zcaron -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!98 U+02DC tilde -!99 U+2122 trademark -!9A U+0161 scaron -!9B U+203A guilsinglright -!9C U+0153 oe -!9E U+017E zcaron -!9F U+0178 Ydieresis -!A0 U+00A0 space -!A1 U+00A1 exclamdown -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+00A4 currency -!A5 U+00A5 yen -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AA U+00AA ordfeminine -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+00B8 cedilla -!B9 U+00B9 onesuperior -!BA U+00BA ordmasculine -!BB U+00BB guillemotright -!BC U+00BC onequarter -!BD U+00BD onehalf -!BE U+00BE threequarters -!BF U+00BF questiondown -!C0 U+00C0 Agrave -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+00C3 Atilde -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+00C6 AE -!C7 U+00C7 Ccedilla -!C8 U+00C8 Egrave -!C9 U+00C9 Eacute -!CA U+00CA Ecircumflex -!CB U+00CB Edieresis -!CC U+00CC Igrave -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+00CF Idieresis -!D0 U+00D0 Eth -!D1 U+00D1 Ntilde -!D2 U+00D2 Ograve -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+00D5 Otilde -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+00D8 Oslash -!D9 U+00D9 Ugrave -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+00DD Yacute -!DE U+00DE Thorn -!DF U+00DF germandbls -!E0 U+00E0 agrave -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+00E3 atilde -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+00E6 ae -!E7 U+00E7 ccedilla -!E8 U+00E8 egrave -!E9 U+00E9 eacute -!EA U+00EA ecircumflex -!EB U+00EB edieresis -!EC U+00EC igrave -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+00EF idieresis -!F0 U+00F0 eth -!F1 U+00F1 ntilde -!F2 U+00F2 ograve -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+00F5 otilde -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+00F8 oslash -!F9 U+00F9 ugrave -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+00FD yacute -!FE U+00FE thorn -!FF U+00FF ydieresis diff --git a/include/fpdf/font/makefont/cp1253.map b/include/fpdf/font/makefont/cp1253.map deleted file mode 100755 index 4bd826fb2652c285e2d5ada788827e5d0085c31f..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/cp1253.map +++ /dev/null @@ -1,239 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!82 U+201A quotesinglbase -!83 U+0192 florin -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!89 U+2030 perthousand -!8B U+2039 guilsinglleft -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!99 U+2122 trademark -!9B U+203A guilsinglright -!A0 U+00A0 space -!A1 U+0385 dieresistonos -!A2 U+0386 Alphatonos -!A3 U+00A3 sterling -!A4 U+00A4 currency -!A5 U+00A5 yen -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+2015 afii00208 -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+0384 tonos -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+0388 Epsilontonos -!B9 U+0389 Etatonos -!BA U+038A Iotatonos -!BB U+00BB guillemotright -!BC U+038C Omicrontonos -!BD U+00BD onehalf -!BE U+038E Upsilontonos -!BF U+038F Omegatonos -!C0 U+0390 iotadieresistonos -!C1 U+0391 Alpha -!C2 U+0392 Beta -!C3 U+0393 Gamma -!C4 U+0394 Delta -!C5 U+0395 Epsilon -!C6 U+0396 Zeta -!C7 U+0397 Eta -!C8 U+0398 Theta -!C9 U+0399 Iota -!CA U+039A Kappa -!CB U+039B Lambda -!CC U+039C Mu -!CD U+039D Nu -!CE U+039E Xi -!CF U+039F Omicron -!D0 U+03A0 Pi -!D1 U+03A1 Rho -!D3 U+03A3 Sigma -!D4 U+03A4 Tau -!D5 U+03A5 Upsilon -!D6 U+03A6 Phi -!D7 U+03A7 Chi -!D8 U+03A8 Psi -!D9 U+03A9 Omega -!DA U+03AA Iotadieresis -!DB U+03AB Upsilondieresis -!DC U+03AC alphatonos -!DD U+03AD epsilontonos -!DE U+03AE etatonos -!DF U+03AF iotatonos -!E0 U+03B0 upsilondieresistonos -!E1 U+03B1 alpha -!E2 U+03B2 beta -!E3 U+03B3 gamma -!E4 U+03B4 delta -!E5 U+03B5 epsilon -!E6 U+03B6 zeta -!E7 U+03B7 eta -!E8 U+03B8 theta -!E9 U+03B9 iota -!EA U+03BA kappa -!EB U+03BB lambda -!EC U+03BC mu -!ED U+03BD nu -!EE U+03BE xi -!EF U+03BF omicron -!F0 U+03C0 pi -!F1 U+03C1 rho -!F2 U+03C2 sigma1 -!F3 U+03C3 sigma -!F4 U+03C4 tau -!F5 U+03C5 upsilon -!F6 U+03C6 phi -!F7 U+03C7 chi -!F8 U+03C8 psi -!F9 U+03C9 omega -!FA U+03CA iotadieresis -!FB U+03CB upsilondieresis -!FC U+03CC omicrontonos -!FD U+03CD upsilontonos -!FE U+03CE omegatonos diff --git a/include/fpdf/font/makefont/cp1254.map b/include/fpdf/font/makefont/cp1254.map deleted file mode 100755 index 829473b28c5e53c7f89c68808151f7e45d5dc89e..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/cp1254.map +++ /dev/null @@ -1,249 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!82 U+201A quotesinglbase -!83 U+0192 florin -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!88 U+02C6 circumflex -!89 U+2030 perthousand -!8A U+0160 Scaron -!8B U+2039 guilsinglleft -!8C U+0152 OE -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!98 U+02DC tilde -!99 U+2122 trademark -!9A U+0161 scaron -!9B U+203A guilsinglright -!9C U+0153 oe -!9F U+0178 Ydieresis -!A0 U+00A0 space -!A1 U+00A1 exclamdown -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+00A4 currency -!A5 U+00A5 yen -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AA U+00AA ordfeminine -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+00B8 cedilla -!B9 U+00B9 onesuperior -!BA U+00BA ordmasculine -!BB U+00BB guillemotright -!BC U+00BC onequarter -!BD U+00BD onehalf -!BE U+00BE threequarters -!BF U+00BF questiondown -!C0 U+00C0 Agrave -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+00C3 Atilde -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+00C6 AE -!C7 U+00C7 Ccedilla -!C8 U+00C8 Egrave -!C9 U+00C9 Eacute -!CA U+00CA Ecircumflex -!CB U+00CB Edieresis -!CC U+00CC Igrave -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+00CF Idieresis -!D0 U+011E Gbreve -!D1 U+00D1 Ntilde -!D2 U+00D2 Ograve -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+00D5 Otilde -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+00D8 Oslash -!D9 U+00D9 Ugrave -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+0130 Idotaccent -!DE U+015E Scedilla -!DF U+00DF germandbls -!E0 U+00E0 agrave -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+00E3 atilde -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+00E6 ae -!E7 U+00E7 ccedilla -!E8 U+00E8 egrave -!E9 U+00E9 eacute -!EA U+00EA ecircumflex -!EB U+00EB edieresis -!EC U+00EC igrave -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+00EF idieresis -!F0 U+011F gbreve -!F1 U+00F1 ntilde -!F2 U+00F2 ograve -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+00F5 otilde -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+00F8 oslash -!F9 U+00F9 ugrave -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+0131 dotlessi -!FE U+015F scedilla -!FF U+00FF ydieresis diff --git a/include/fpdf/font/makefont/cp1255.map b/include/fpdf/font/makefont/cp1255.map deleted file mode 100755 index 079e10c61cd8e6360bb266cd95cca7672d3872f0..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/cp1255.map +++ /dev/null @@ -1,233 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!82 U+201A quotesinglbase -!83 U+0192 florin -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!88 U+02C6 circumflex -!89 U+2030 perthousand -!8B U+2039 guilsinglleft -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!98 U+02DC tilde -!99 U+2122 trademark -!9B U+203A guilsinglright -!A0 U+00A0 space -!A1 U+00A1 exclamdown -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+20AA afii57636 -!A5 U+00A5 yen -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AA U+00D7 multiply -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD sfthyphen -!AE U+00AE registered -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 middot -!B8 U+00B8 cedilla -!B9 U+00B9 onesuperior -!BA U+00F7 divide -!BB U+00BB guillemotright -!BC U+00BC onequarter -!BD U+00BD onehalf -!BE U+00BE threequarters -!BF U+00BF questiondown -!C0 U+05B0 afii57799 -!C1 U+05B1 afii57801 -!C2 U+05B2 afii57800 -!C3 U+05B3 afii57802 -!C4 U+05B4 afii57793 -!C5 U+05B5 afii57794 -!C6 U+05B6 afii57795 -!C7 U+05B7 afii57798 -!C8 U+05B8 afii57797 -!C9 U+05B9 afii57806 -!CB U+05BB afii57796 -!CC U+05BC afii57807 -!CD U+05BD afii57839 -!CE U+05BE afii57645 -!CF U+05BF afii57841 -!D0 U+05C0 afii57842 -!D1 U+05C1 afii57804 -!D2 U+05C2 afii57803 -!D3 U+05C3 afii57658 -!D4 U+05F0 afii57716 -!D5 U+05F1 afii57717 -!D6 U+05F2 afii57718 -!D7 U+05F3 gereshhebrew -!D8 U+05F4 gershayimhebrew -!E0 U+05D0 afii57664 -!E1 U+05D1 afii57665 -!E2 U+05D2 afii57666 -!E3 U+05D3 afii57667 -!E4 U+05D4 afii57668 -!E5 U+05D5 afii57669 -!E6 U+05D6 afii57670 -!E7 U+05D7 afii57671 -!E8 U+05D8 afii57672 -!E9 U+05D9 afii57673 -!EA U+05DA afii57674 -!EB U+05DB afii57675 -!EC U+05DC afii57676 -!ED U+05DD afii57677 -!EE U+05DE afii57678 -!EF U+05DF afii57679 -!F0 U+05E0 afii57680 -!F1 U+05E1 afii57681 -!F2 U+05E2 afii57682 -!F3 U+05E3 afii57683 -!F4 U+05E4 afii57684 -!F5 U+05E5 afii57685 -!F6 U+05E6 afii57686 -!F7 U+05E7 afii57687 -!F8 U+05E8 afii57688 -!F9 U+05E9 afii57689 -!FA U+05EA afii57690 -!FD U+200E afii299 -!FE U+200F afii300 diff --git a/include/fpdf/font/makefont/cp1257.map b/include/fpdf/font/makefont/cp1257.map deleted file mode 100755 index 2f2ecfa21dabe90c8cfa15e1738f2cd3c149d2a2..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/cp1257.map +++ /dev/null @@ -1,244 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!82 U+201A quotesinglbase -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!89 U+2030 perthousand -!8B U+2039 guilsinglleft -!8D U+00A8 dieresis -!8E U+02C7 caron -!8F U+00B8 cedilla -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!99 U+2122 trademark -!9B U+203A guilsinglright -!9D U+00AF macron -!9E U+02DB ogonek -!A0 U+00A0 space -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+00A4 currency -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00D8 Oslash -!A9 U+00A9 copyright -!AA U+0156 Rcommaaccent -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+00C6 AE -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+00F8 oslash -!B9 U+00B9 onesuperior -!BA U+0157 rcommaaccent -!BB U+00BB guillemotright -!BC U+00BC onequarter -!BD U+00BD onehalf -!BE U+00BE threequarters -!BF U+00E6 ae -!C0 U+0104 Aogonek -!C1 U+012E Iogonek -!C2 U+0100 Amacron -!C3 U+0106 Cacute -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+0118 Eogonek -!C7 U+0112 Emacron -!C8 U+010C Ccaron -!C9 U+00C9 Eacute -!CA U+0179 Zacute -!CB U+0116 Edotaccent -!CC U+0122 Gcommaaccent -!CD U+0136 Kcommaaccent -!CE U+012A Imacron -!CF U+013B Lcommaaccent -!D0 U+0160 Scaron -!D1 U+0143 Nacute -!D2 U+0145 Ncommaaccent -!D3 U+00D3 Oacute -!D4 U+014C Omacron -!D5 U+00D5 Otilde -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+0172 Uogonek -!D9 U+0141 Lslash -!DA U+015A Sacute -!DB U+016A Umacron -!DC U+00DC Udieresis -!DD U+017B Zdotaccent -!DE U+017D Zcaron -!DF U+00DF germandbls -!E0 U+0105 aogonek -!E1 U+012F iogonek -!E2 U+0101 amacron -!E3 U+0107 cacute -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+0119 eogonek -!E7 U+0113 emacron -!E8 U+010D ccaron -!E9 U+00E9 eacute -!EA U+017A zacute -!EB U+0117 edotaccent -!EC U+0123 gcommaaccent -!ED U+0137 kcommaaccent -!EE U+012B imacron -!EF U+013C lcommaaccent -!F0 U+0161 scaron -!F1 U+0144 nacute -!F2 U+0146 ncommaaccent -!F3 U+00F3 oacute -!F4 U+014D omacron -!F5 U+00F5 otilde -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+0173 uogonek -!F9 U+0142 lslash -!FA U+015B sacute -!FB U+016B umacron -!FC U+00FC udieresis -!FD U+017C zdotaccent -!FE U+017E zcaron -!FF U+02D9 dotaccent diff --git a/include/fpdf/font/makefont/cp1258.map b/include/fpdf/font/makefont/cp1258.map deleted file mode 100755 index fed915f7152ca24e30fb33d1922de45177d84428..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/cp1258.map +++ /dev/null @@ -1,247 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!82 U+201A quotesinglbase -!83 U+0192 florin -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!88 U+02C6 circumflex -!89 U+2030 perthousand -!8B U+2039 guilsinglleft -!8C U+0152 OE -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!98 U+02DC tilde -!99 U+2122 trademark -!9B U+203A guilsinglright -!9C U+0153 oe -!9F U+0178 Ydieresis -!A0 U+00A0 space -!A1 U+00A1 exclamdown -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+00A4 currency -!A5 U+00A5 yen -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AA U+00AA ordfeminine -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+00B8 cedilla -!B9 U+00B9 onesuperior -!BA U+00BA ordmasculine -!BB U+00BB guillemotright -!BC U+00BC onequarter -!BD U+00BD onehalf -!BE U+00BE threequarters -!BF U+00BF questiondown -!C0 U+00C0 Agrave -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+0102 Abreve -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+00C6 AE -!C7 U+00C7 Ccedilla -!C8 U+00C8 Egrave -!C9 U+00C9 Eacute -!CA U+00CA Ecircumflex -!CB U+00CB Edieresis -!CC U+0300 gravecomb -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+00CF Idieresis -!D0 U+0110 Dcroat -!D1 U+00D1 Ntilde -!D2 U+0309 hookabovecomb -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+01A0 Ohorn -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+00D8 Oslash -!D9 U+00D9 Ugrave -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+01AF Uhorn -!DE U+0303 tildecomb -!DF U+00DF germandbls -!E0 U+00E0 agrave -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+0103 abreve -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+00E6 ae -!E7 U+00E7 ccedilla -!E8 U+00E8 egrave -!E9 U+00E9 eacute -!EA U+00EA ecircumflex -!EB U+00EB edieresis -!EC U+0301 acutecomb -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+00EF idieresis -!F0 U+0111 dcroat -!F1 U+00F1 ntilde -!F2 U+0323 dotbelowcomb -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+01A1 ohorn -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+00F8 oslash -!F9 U+00F9 ugrave -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+01B0 uhorn -!FE U+20AB dong -!FF U+00FF ydieresis diff --git a/include/fpdf/font/makefont/cp874.map b/include/fpdf/font/makefont/cp874.map deleted file mode 100755 index 1006e6b17f2a9d3cbbd8fc4fadd1c944c562cc1c..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/cp874.map +++ /dev/null @@ -1,225 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!85 U+2026 ellipsis -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!A0 U+00A0 space -!A1 U+0E01 kokaithai -!A2 U+0E02 khokhaithai -!A3 U+0E03 khokhuatthai -!A4 U+0E04 khokhwaithai -!A5 U+0E05 khokhonthai -!A6 U+0E06 khorakhangthai -!A7 U+0E07 ngonguthai -!A8 U+0E08 chochanthai -!A9 U+0E09 chochingthai -!AA U+0E0A chochangthai -!AB U+0E0B sosothai -!AC U+0E0C chochoethai -!AD U+0E0D yoyingthai -!AE U+0E0E dochadathai -!AF U+0E0F topatakthai -!B0 U+0E10 thothanthai -!B1 U+0E11 thonangmonthothai -!B2 U+0E12 thophuthaothai -!B3 U+0E13 nonenthai -!B4 U+0E14 dodekthai -!B5 U+0E15 totaothai -!B6 U+0E16 thothungthai -!B7 U+0E17 thothahanthai -!B8 U+0E18 thothongthai -!B9 U+0E19 nonuthai -!BA U+0E1A bobaimaithai -!BB U+0E1B poplathai -!BC U+0E1C phophungthai -!BD U+0E1D fofathai -!BE U+0E1E phophanthai -!BF U+0E1F fofanthai -!C0 U+0E20 phosamphaothai -!C1 U+0E21 momathai -!C2 U+0E22 yoyakthai -!C3 U+0E23 roruathai -!C4 U+0E24 ruthai -!C5 U+0E25 lolingthai -!C6 U+0E26 luthai -!C7 U+0E27 wowaenthai -!C8 U+0E28 sosalathai -!C9 U+0E29 sorusithai -!CA U+0E2A sosuathai -!CB U+0E2B hohipthai -!CC U+0E2C lochulathai -!CD U+0E2D oangthai -!CE U+0E2E honokhukthai -!CF U+0E2F paiyannoithai -!D0 U+0E30 saraathai -!D1 U+0E31 maihanakatthai -!D2 U+0E32 saraaathai -!D3 U+0E33 saraamthai -!D4 U+0E34 saraithai -!D5 U+0E35 saraiithai -!D6 U+0E36 sarauethai -!D7 U+0E37 saraueethai -!D8 U+0E38 sarauthai -!D9 U+0E39 sarauuthai -!DA U+0E3A phinthuthai -!DF U+0E3F bahtthai -!E0 U+0E40 saraethai -!E1 U+0E41 saraaethai -!E2 U+0E42 saraothai -!E3 U+0E43 saraaimaimuanthai -!E4 U+0E44 saraaimaimalaithai -!E5 U+0E45 lakkhangyaothai -!E6 U+0E46 maiyamokthai -!E7 U+0E47 maitaikhuthai -!E8 U+0E48 maiekthai -!E9 U+0E49 maithothai -!EA U+0E4A maitrithai -!EB U+0E4B maichattawathai -!EC U+0E4C thanthakhatthai -!ED U+0E4D nikhahitthai -!EE U+0E4E yamakkanthai -!EF U+0E4F fongmanthai -!F0 U+0E50 zerothai -!F1 U+0E51 onethai -!F2 U+0E52 twothai -!F3 U+0E53 threethai -!F4 U+0E54 fourthai -!F5 U+0E55 fivethai -!F6 U+0E56 sixthai -!F7 U+0E57 seventhai -!F8 U+0E58 eightthai -!F9 U+0E59 ninethai -!FA U+0E5A angkhankhuthai -!FB U+0E5B khomutthai diff --git a/include/fpdf/font/makefont/iso-8859-1.map b/include/fpdf/font/makefont/iso-8859-1.map deleted file mode 100755 index 61740a38fa3faa456159466766a92581b976d565..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/iso-8859-1.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+00A1 exclamdown -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+00A4 currency -!A5 U+00A5 yen -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AA U+00AA ordfeminine -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+00B8 cedilla -!B9 U+00B9 onesuperior -!BA U+00BA ordmasculine -!BB U+00BB guillemotright -!BC U+00BC onequarter -!BD U+00BD onehalf -!BE U+00BE threequarters -!BF U+00BF questiondown -!C0 U+00C0 Agrave -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+00C3 Atilde -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+00C6 AE -!C7 U+00C7 Ccedilla -!C8 U+00C8 Egrave -!C9 U+00C9 Eacute -!CA U+00CA Ecircumflex -!CB U+00CB Edieresis -!CC U+00CC Igrave -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+00CF Idieresis -!D0 U+00D0 Eth -!D1 U+00D1 Ntilde -!D2 U+00D2 Ograve -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+00D5 Otilde -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+00D8 Oslash -!D9 U+00D9 Ugrave -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+00DD Yacute -!DE U+00DE Thorn -!DF U+00DF germandbls -!E0 U+00E0 agrave -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+00E3 atilde -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+00E6 ae -!E7 U+00E7 ccedilla -!E8 U+00E8 egrave -!E9 U+00E9 eacute -!EA U+00EA ecircumflex -!EB U+00EB edieresis -!EC U+00EC igrave -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+00EF idieresis -!F0 U+00F0 eth -!F1 U+00F1 ntilde -!F2 U+00F2 ograve -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+00F5 otilde -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+00F8 oslash -!F9 U+00F9 ugrave -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+00FD yacute -!FE U+00FE thorn -!FF U+00FF ydieresis diff --git a/include/fpdf/font/makefont/iso-8859-11.map b/include/fpdf/font/makefont/iso-8859-11.map deleted file mode 100755 index 91688120667161d4acf8066f456d67d31a2bc0d9..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/iso-8859-11.map +++ /dev/null @@ -1,248 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+0E01 kokaithai -!A2 U+0E02 khokhaithai -!A3 U+0E03 khokhuatthai -!A4 U+0E04 khokhwaithai -!A5 U+0E05 khokhonthai -!A6 U+0E06 khorakhangthai -!A7 U+0E07 ngonguthai -!A8 U+0E08 chochanthai -!A9 U+0E09 chochingthai -!AA U+0E0A chochangthai -!AB U+0E0B sosothai -!AC U+0E0C chochoethai -!AD U+0E0D yoyingthai -!AE U+0E0E dochadathai -!AF U+0E0F topatakthai -!B0 U+0E10 thothanthai -!B1 U+0E11 thonangmonthothai -!B2 U+0E12 thophuthaothai -!B3 U+0E13 nonenthai -!B4 U+0E14 dodekthai -!B5 U+0E15 totaothai -!B6 U+0E16 thothungthai -!B7 U+0E17 thothahanthai -!B8 U+0E18 thothongthai -!B9 U+0E19 nonuthai -!BA U+0E1A bobaimaithai -!BB U+0E1B poplathai -!BC U+0E1C phophungthai -!BD U+0E1D fofathai -!BE U+0E1E phophanthai -!BF U+0E1F fofanthai -!C0 U+0E20 phosamphaothai -!C1 U+0E21 momathai -!C2 U+0E22 yoyakthai -!C3 U+0E23 roruathai -!C4 U+0E24 ruthai -!C5 U+0E25 lolingthai -!C6 U+0E26 luthai -!C7 U+0E27 wowaenthai -!C8 U+0E28 sosalathai -!C9 U+0E29 sorusithai -!CA U+0E2A sosuathai -!CB U+0E2B hohipthai -!CC U+0E2C lochulathai -!CD U+0E2D oangthai -!CE U+0E2E honokhukthai -!CF U+0E2F paiyannoithai -!D0 U+0E30 saraathai -!D1 U+0E31 maihanakatthai -!D2 U+0E32 saraaathai -!D3 U+0E33 saraamthai -!D4 U+0E34 saraithai -!D5 U+0E35 saraiithai -!D6 U+0E36 sarauethai -!D7 U+0E37 saraueethai -!D8 U+0E38 sarauthai -!D9 U+0E39 sarauuthai -!DA U+0E3A phinthuthai -!DF U+0E3F bahtthai -!E0 U+0E40 saraethai -!E1 U+0E41 saraaethai -!E2 U+0E42 saraothai -!E3 U+0E43 saraaimaimuanthai -!E4 U+0E44 saraaimaimalaithai -!E5 U+0E45 lakkhangyaothai -!E6 U+0E46 maiyamokthai -!E7 U+0E47 maitaikhuthai -!E8 U+0E48 maiekthai -!E9 U+0E49 maithothai -!EA U+0E4A maitrithai -!EB U+0E4B maichattawathai -!EC U+0E4C thanthakhatthai -!ED U+0E4D nikhahitthai -!EE U+0E4E yamakkanthai -!EF U+0E4F fongmanthai -!F0 U+0E50 zerothai -!F1 U+0E51 onethai -!F2 U+0E52 twothai -!F3 U+0E53 threethai -!F4 U+0E54 fourthai -!F5 U+0E55 fivethai -!F6 U+0E56 sixthai -!F7 U+0E57 seventhai -!F8 U+0E58 eightthai -!F9 U+0E59 ninethai -!FA U+0E5A angkhankhuthai -!FB U+0E5B khomutthai diff --git a/include/fpdf/font/makefont/iso-8859-15.map b/include/fpdf/font/makefont/iso-8859-15.map deleted file mode 100755 index 6c2b5712793d7eed6fec0f72e80ee3cd2ccf79ea..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/iso-8859-15.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+00A1 exclamdown -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+20AC Euro -!A5 U+00A5 yen -!A6 U+0160 Scaron -!A7 U+00A7 section -!A8 U+0161 scaron -!A9 U+00A9 copyright -!AA U+00AA ordfeminine -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+017D Zcaron -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+017E zcaron -!B9 U+00B9 onesuperior -!BA U+00BA ordmasculine -!BB U+00BB guillemotright -!BC U+0152 OE -!BD U+0153 oe -!BE U+0178 Ydieresis -!BF U+00BF questiondown -!C0 U+00C0 Agrave -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+00C3 Atilde -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+00C6 AE -!C7 U+00C7 Ccedilla -!C8 U+00C8 Egrave -!C9 U+00C9 Eacute -!CA U+00CA Ecircumflex -!CB U+00CB Edieresis -!CC U+00CC Igrave -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+00CF Idieresis -!D0 U+00D0 Eth -!D1 U+00D1 Ntilde -!D2 U+00D2 Ograve -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+00D5 Otilde -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+00D8 Oslash -!D9 U+00D9 Ugrave -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+00DD Yacute -!DE U+00DE Thorn -!DF U+00DF germandbls -!E0 U+00E0 agrave -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+00E3 atilde -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+00E6 ae -!E7 U+00E7 ccedilla -!E8 U+00E8 egrave -!E9 U+00E9 eacute -!EA U+00EA ecircumflex -!EB U+00EB edieresis -!EC U+00EC igrave -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+00EF idieresis -!F0 U+00F0 eth -!F1 U+00F1 ntilde -!F2 U+00F2 ograve -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+00F5 otilde -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+00F8 oslash -!F9 U+00F9 ugrave -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+00FD yacute -!FE U+00FE thorn -!FF U+00FF ydieresis diff --git a/include/fpdf/font/makefont/iso-8859-16.map b/include/fpdf/font/makefont/iso-8859-16.map deleted file mode 100755 index 202c8fe594186cf762126b1265d7e2f73f7f92ac..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/iso-8859-16.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+0104 Aogonek -!A2 U+0105 aogonek -!A3 U+0141 Lslash -!A4 U+20AC Euro -!A5 U+201E quotedblbase -!A6 U+0160 Scaron -!A7 U+00A7 section -!A8 U+0161 scaron -!A9 U+00A9 copyright -!AA U+0218 Scommaaccent -!AB U+00AB guillemotleft -!AC U+0179 Zacute -!AD U+00AD hyphen -!AE U+017A zacute -!AF U+017B Zdotaccent -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+010C Ccaron -!B3 U+0142 lslash -!B4 U+017D Zcaron -!B5 U+201D quotedblright -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+017E zcaron -!B9 U+010D ccaron -!BA U+0219 scommaaccent -!BB U+00BB guillemotright -!BC U+0152 OE -!BD U+0153 oe -!BE U+0178 Ydieresis -!BF U+017C zdotaccent -!C0 U+00C0 Agrave -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+0102 Abreve -!C4 U+00C4 Adieresis -!C5 U+0106 Cacute -!C6 U+00C6 AE -!C7 U+00C7 Ccedilla -!C8 U+00C8 Egrave -!C9 U+00C9 Eacute -!CA U+00CA Ecircumflex -!CB U+00CB Edieresis -!CC U+00CC Igrave -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+00CF Idieresis -!D0 U+0110 Dcroat -!D1 U+0143 Nacute -!D2 U+00D2 Ograve -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+0150 Ohungarumlaut -!D6 U+00D6 Odieresis -!D7 U+015A Sacute -!D8 U+0170 Uhungarumlaut -!D9 U+00D9 Ugrave -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+0118 Eogonek -!DE U+021A Tcommaaccent -!DF U+00DF germandbls -!E0 U+00E0 agrave -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+0103 abreve -!E4 U+00E4 adieresis -!E5 U+0107 cacute -!E6 U+00E6 ae -!E7 U+00E7 ccedilla -!E8 U+00E8 egrave -!E9 U+00E9 eacute -!EA U+00EA ecircumflex -!EB U+00EB edieresis -!EC U+00EC igrave -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+00EF idieresis -!F0 U+0111 dcroat -!F1 U+0144 nacute -!F2 U+00F2 ograve -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+0151 ohungarumlaut -!F6 U+00F6 odieresis -!F7 U+015B sacute -!F8 U+0171 uhungarumlaut -!F9 U+00F9 ugrave -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+0119 eogonek -!FE U+021B tcommaaccent -!FF U+00FF ydieresis diff --git a/include/fpdf/font/makefont/iso-8859-2.map b/include/fpdf/font/makefont/iso-8859-2.map deleted file mode 100755 index 65ae09f95819ca5841b87ffe81e0e9326318cd75..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/iso-8859-2.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+0104 Aogonek -!A2 U+02D8 breve -!A3 U+0141 Lslash -!A4 U+00A4 currency -!A5 U+013D Lcaron -!A6 U+015A Sacute -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+0160 Scaron -!AA U+015E Scedilla -!AB U+0164 Tcaron -!AC U+0179 Zacute -!AD U+00AD hyphen -!AE U+017D Zcaron -!AF U+017B Zdotaccent -!B0 U+00B0 degree -!B1 U+0105 aogonek -!B2 U+02DB ogonek -!B3 U+0142 lslash -!B4 U+00B4 acute -!B5 U+013E lcaron -!B6 U+015B sacute -!B7 U+02C7 caron -!B8 U+00B8 cedilla -!B9 U+0161 scaron -!BA U+015F scedilla -!BB U+0165 tcaron -!BC U+017A zacute -!BD U+02DD hungarumlaut -!BE U+017E zcaron -!BF U+017C zdotaccent -!C0 U+0154 Racute -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+0102 Abreve -!C4 U+00C4 Adieresis -!C5 U+0139 Lacute -!C6 U+0106 Cacute -!C7 U+00C7 Ccedilla -!C8 U+010C Ccaron -!C9 U+00C9 Eacute -!CA U+0118 Eogonek -!CB U+00CB Edieresis -!CC U+011A Ecaron -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+010E Dcaron -!D0 U+0110 Dcroat -!D1 U+0143 Nacute -!D2 U+0147 Ncaron -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+0150 Ohungarumlaut -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+0158 Rcaron -!D9 U+016E Uring -!DA U+00DA Uacute -!DB U+0170 Uhungarumlaut -!DC U+00DC Udieresis -!DD U+00DD Yacute -!DE U+0162 Tcommaaccent -!DF U+00DF germandbls -!E0 U+0155 racute -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+0103 abreve -!E4 U+00E4 adieresis -!E5 U+013A lacute -!E6 U+0107 cacute -!E7 U+00E7 ccedilla -!E8 U+010D ccaron -!E9 U+00E9 eacute -!EA U+0119 eogonek -!EB U+00EB edieresis -!EC U+011B ecaron -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+010F dcaron -!F0 U+0111 dcroat -!F1 U+0144 nacute -!F2 U+0148 ncaron -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+0151 ohungarumlaut -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+0159 rcaron -!F9 U+016F uring -!FA U+00FA uacute -!FB U+0171 uhungarumlaut -!FC U+00FC udieresis -!FD U+00FD yacute -!FE U+0163 tcommaaccent -!FF U+02D9 dotaccent diff --git a/include/fpdf/font/makefont/iso-8859-4.map b/include/fpdf/font/makefont/iso-8859-4.map deleted file mode 100755 index a7d87bf3ef2a97e84de2aa4e1b46c4dbb9fec239..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/iso-8859-4.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+0104 Aogonek -!A2 U+0138 kgreenlandic -!A3 U+0156 Rcommaaccent -!A4 U+00A4 currency -!A5 U+0128 Itilde -!A6 U+013B Lcommaaccent -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+0160 Scaron -!AA U+0112 Emacron -!AB U+0122 Gcommaaccent -!AC U+0166 Tbar -!AD U+00AD hyphen -!AE U+017D Zcaron -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+0105 aogonek -!B2 U+02DB ogonek -!B3 U+0157 rcommaaccent -!B4 U+00B4 acute -!B5 U+0129 itilde -!B6 U+013C lcommaaccent -!B7 U+02C7 caron -!B8 U+00B8 cedilla -!B9 U+0161 scaron -!BA U+0113 emacron -!BB U+0123 gcommaaccent -!BC U+0167 tbar -!BD U+014A Eng -!BE U+017E zcaron -!BF U+014B eng -!C0 U+0100 Amacron -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+00C3 Atilde -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+00C6 AE -!C7 U+012E Iogonek -!C8 U+010C Ccaron -!C9 U+00C9 Eacute -!CA U+0118 Eogonek -!CB U+00CB Edieresis -!CC U+0116 Edotaccent -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+012A Imacron -!D0 U+0110 Dcroat -!D1 U+0145 Ncommaaccent -!D2 U+014C Omacron -!D3 U+0136 Kcommaaccent -!D4 U+00D4 Ocircumflex -!D5 U+00D5 Otilde -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+00D8 Oslash -!D9 U+0172 Uogonek -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+0168 Utilde -!DE U+016A Umacron -!DF U+00DF germandbls -!E0 U+0101 amacron -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+00E3 atilde -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+00E6 ae -!E7 U+012F iogonek -!E8 U+010D ccaron -!E9 U+00E9 eacute -!EA U+0119 eogonek -!EB U+00EB edieresis -!EC U+0117 edotaccent -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+012B imacron -!F0 U+0111 dcroat -!F1 U+0146 ncommaaccent -!F2 U+014D omacron -!F3 U+0137 kcommaaccent -!F4 U+00F4 ocircumflex -!F5 U+00F5 otilde -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+00F8 oslash -!F9 U+0173 uogonek -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+0169 utilde -!FE U+016B umacron -!FF U+02D9 dotaccent diff --git a/include/fpdf/font/makefont/iso-8859-5.map b/include/fpdf/font/makefont/iso-8859-5.map deleted file mode 100755 index f9cd4edcf85de8e6206ff0ad32d64356101ce723..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/iso-8859-5.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+0401 afii10023 -!A2 U+0402 afii10051 -!A3 U+0403 afii10052 -!A4 U+0404 afii10053 -!A5 U+0405 afii10054 -!A6 U+0406 afii10055 -!A7 U+0407 afii10056 -!A8 U+0408 afii10057 -!A9 U+0409 afii10058 -!AA U+040A afii10059 -!AB U+040B afii10060 -!AC U+040C afii10061 -!AD U+00AD hyphen -!AE U+040E afii10062 -!AF U+040F afii10145 -!B0 U+0410 afii10017 -!B1 U+0411 afii10018 -!B2 U+0412 afii10019 -!B3 U+0413 afii10020 -!B4 U+0414 afii10021 -!B5 U+0415 afii10022 -!B6 U+0416 afii10024 -!B7 U+0417 afii10025 -!B8 U+0418 afii10026 -!B9 U+0419 afii10027 -!BA U+041A afii10028 -!BB U+041B afii10029 -!BC U+041C afii10030 -!BD U+041D afii10031 -!BE U+041E afii10032 -!BF U+041F afii10033 -!C0 U+0420 afii10034 -!C1 U+0421 afii10035 -!C2 U+0422 afii10036 -!C3 U+0423 afii10037 -!C4 U+0424 afii10038 -!C5 U+0425 afii10039 -!C6 U+0426 afii10040 -!C7 U+0427 afii10041 -!C8 U+0428 afii10042 -!C9 U+0429 afii10043 -!CA U+042A afii10044 -!CB U+042B afii10045 -!CC U+042C afii10046 -!CD U+042D afii10047 -!CE U+042E afii10048 -!CF U+042F afii10049 -!D0 U+0430 afii10065 -!D1 U+0431 afii10066 -!D2 U+0432 afii10067 -!D3 U+0433 afii10068 -!D4 U+0434 afii10069 -!D5 U+0435 afii10070 -!D6 U+0436 afii10072 -!D7 U+0437 afii10073 -!D8 U+0438 afii10074 -!D9 U+0439 afii10075 -!DA U+043A afii10076 -!DB U+043B afii10077 -!DC U+043C afii10078 -!DD U+043D afii10079 -!DE U+043E afii10080 -!DF U+043F afii10081 -!E0 U+0440 afii10082 -!E1 U+0441 afii10083 -!E2 U+0442 afii10084 -!E3 U+0443 afii10085 -!E4 U+0444 afii10086 -!E5 U+0445 afii10087 -!E6 U+0446 afii10088 -!E7 U+0447 afii10089 -!E8 U+0448 afii10090 -!E9 U+0449 afii10091 -!EA U+044A afii10092 -!EB U+044B afii10093 -!EC U+044C afii10094 -!ED U+044D afii10095 -!EE U+044E afii10096 -!EF U+044F afii10097 -!F0 U+2116 afii61352 -!F1 U+0451 afii10071 -!F2 U+0452 afii10099 -!F3 U+0453 afii10100 -!F4 U+0454 afii10101 -!F5 U+0455 afii10102 -!F6 U+0456 afii10103 -!F7 U+0457 afii10104 -!F8 U+0458 afii10105 -!F9 U+0459 afii10106 -!FA U+045A afii10107 -!FB U+045B afii10108 -!FC U+045C afii10109 -!FD U+00A7 section -!FE U+045E afii10110 -!FF U+045F afii10193 diff --git a/include/fpdf/font/makefont/iso-8859-7.map b/include/fpdf/font/makefont/iso-8859-7.map deleted file mode 100755 index e163796b1cad3004dc8f80315217c838a6df77aa..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/iso-8859-7.map +++ /dev/null @@ -1,250 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+2018 quoteleft -!A2 U+2019 quoteright -!A3 U+00A3 sterling -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AF U+2015 afii00208 -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+0384 tonos -!B5 U+0385 dieresistonos -!B6 U+0386 Alphatonos -!B7 U+00B7 periodcentered -!B8 U+0388 Epsilontonos -!B9 U+0389 Etatonos -!BA U+038A Iotatonos -!BB U+00BB guillemotright -!BC U+038C Omicrontonos -!BD U+00BD onehalf -!BE U+038E Upsilontonos -!BF U+038F Omegatonos -!C0 U+0390 iotadieresistonos -!C1 U+0391 Alpha -!C2 U+0392 Beta -!C3 U+0393 Gamma -!C4 U+0394 Delta -!C5 U+0395 Epsilon -!C6 U+0396 Zeta -!C7 U+0397 Eta -!C8 U+0398 Theta -!C9 U+0399 Iota -!CA U+039A Kappa -!CB U+039B Lambda -!CC U+039C Mu -!CD U+039D Nu -!CE U+039E Xi -!CF U+039F Omicron -!D0 U+03A0 Pi -!D1 U+03A1 Rho -!D3 U+03A3 Sigma -!D4 U+03A4 Tau -!D5 U+03A5 Upsilon -!D6 U+03A6 Phi -!D7 U+03A7 Chi -!D8 U+03A8 Psi -!D9 U+03A9 Omega -!DA U+03AA Iotadieresis -!DB U+03AB Upsilondieresis -!DC U+03AC alphatonos -!DD U+03AD epsilontonos -!DE U+03AE etatonos -!DF U+03AF iotatonos -!E0 U+03B0 upsilondieresistonos -!E1 U+03B1 alpha -!E2 U+03B2 beta -!E3 U+03B3 gamma -!E4 U+03B4 delta -!E5 U+03B5 epsilon -!E6 U+03B6 zeta -!E7 U+03B7 eta -!E8 U+03B8 theta -!E9 U+03B9 iota -!EA U+03BA kappa -!EB U+03BB lambda -!EC U+03BC mu -!ED U+03BD nu -!EE U+03BE xi -!EF U+03BF omicron -!F0 U+03C0 pi -!F1 U+03C1 rho -!F2 U+03C2 sigma1 -!F3 U+03C3 sigma -!F4 U+03C4 tau -!F5 U+03C5 upsilon -!F6 U+03C6 phi -!F7 U+03C7 chi -!F8 U+03C8 psi -!F9 U+03C9 omega -!FA U+03CA iotadieresis -!FB U+03CB upsilondieresis -!FC U+03CC omicrontonos -!FD U+03CD upsilontonos -!FE U+03CE omegatonos diff --git a/include/fpdf/font/makefont/iso-8859-9.map b/include/fpdf/font/makefont/iso-8859-9.map deleted file mode 100755 index 48c123ae6f6b6bee1186517e7d6557fb2fee8055..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/iso-8859-9.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+00A1 exclamdown -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+00A4 currency -!A5 U+00A5 yen -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AA U+00AA ordfeminine -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+00B8 cedilla -!B9 U+00B9 onesuperior -!BA U+00BA ordmasculine -!BB U+00BB guillemotright -!BC U+00BC onequarter -!BD U+00BD onehalf -!BE U+00BE threequarters -!BF U+00BF questiondown -!C0 U+00C0 Agrave -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+00C3 Atilde -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+00C6 AE -!C7 U+00C7 Ccedilla -!C8 U+00C8 Egrave -!C9 U+00C9 Eacute -!CA U+00CA Ecircumflex -!CB U+00CB Edieresis -!CC U+00CC Igrave -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+00CF Idieresis -!D0 U+011E Gbreve -!D1 U+00D1 Ntilde -!D2 U+00D2 Ograve -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+00D5 Otilde -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+00D8 Oslash -!D9 U+00D9 Ugrave -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+0130 Idotaccent -!DE U+015E Scedilla -!DF U+00DF germandbls -!E0 U+00E0 agrave -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+00E3 atilde -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+00E6 ae -!E7 U+00E7 ccedilla -!E8 U+00E8 egrave -!E9 U+00E9 eacute -!EA U+00EA ecircumflex -!EB U+00EB edieresis -!EC U+00EC igrave -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+00EF idieresis -!F0 U+011F gbreve -!F1 U+00F1 ntilde -!F2 U+00F2 ograve -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+00F5 otilde -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+00F8 oslash -!F9 U+00F9 ugrave -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+0131 dotlessi -!FE U+015F scedilla -!FF U+00FF ydieresis diff --git a/include/fpdf/font/makefont/koi8-r.map b/include/fpdf/font/makefont/koi8-r.map deleted file mode 100755 index 6ad5d05d0dacf74138044384c23f319f830482ae..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/koi8-r.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+2500 SF100000 -!81 U+2502 SF110000 -!82 U+250C SF010000 -!83 U+2510 SF030000 -!84 U+2514 SF020000 -!85 U+2518 SF040000 -!86 U+251C SF080000 -!87 U+2524 SF090000 -!88 U+252C SF060000 -!89 U+2534 SF070000 -!8A U+253C SF050000 -!8B U+2580 upblock -!8C U+2584 dnblock -!8D U+2588 block -!8E U+258C lfblock -!8F U+2590 rtblock -!90 U+2591 ltshade -!91 U+2592 shade -!92 U+2593 dkshade -!93 U+2320 integraltp -!94 U+25A0 filledbox -!95 U+2219 periodcentered -!96 U+221A radical -!97 U+2248 approxequal -!98 U+2264 lessequal -!99 U+2265 greaterequal -!9A U+00A0 space -!9B U+2321 integralbt -!9C U+00B0 degree -!9D U+00B2 twosuperior -!9E U+00B7 periodcentered -!9F U+00F7 divide -!A0 U+2550 SF430000 -!A1 U+2551 SF240000 -!A2 U+2552 SF510000 -!A3 U+0451 afii10071 -!A4 U+2553 SF520000 -!A5 U+2554 SF390000 -!A6 U+2555 SF220000 -!A7 U+2556 SF210000 -!A8 U+2557 SF250000 -!A9 U+2558 SF500000 -!AA U+2559 SF490000 -!AB U+255A SF380000 -!AC U+255B SF280000 -!AD U+255C SF270000 -!AE U+255D SF260000 -!AF U+255E SF360000 -!B0 U+255F SF370000 -!B1 U+2560 SF420000 -!B2 U+2561 SF190000 -!B3 U+0401 afii10023 -!B4 U+2562 SF200000 -!B5 U+2563 SF230000 -!B6 U+2564 SF470000 -!B7 U+2565 SF480000 -!B8 U+2566 SF410000 -!B9 U+2567 SF450000 -!BA U+2568 SF460000 -!BB U+2569 SF400000 -!BC U+256A SF540000 -!BD U+256B SF530000 -!BE U+256C SF440000 -!BF U+00A9 copyright -!C0 U+044E afii10096 -!C1 U+0430 afii10065 -!C2 U+0431 afii10066 -!C3 U+0446 afii10088 -!C4 U+0434 afii10069 -!C5 U+0435 afii10070 -!C6 U+0444 afii10086 -!C7 U+0433 afii10068 -!C8 U+0445 afii10087 -!C9 U+0438 afii10074 -!CA U+0439 afii10075 -!CB U+043A afii10076 -!CC U+043B afii10077 -!CD U+043C afii10078 -!CE U+043D afii10079 -!CF U+043E afii10080 -!D0 U+043F afii10081 -!D1 U+044F afii10097 -!D2 U+0440 afii10082 -!D3 U+0441 afii10083 -!D4 U+0442 afii10084 -!D5 U+0443 afii10085 -!D6 U+0436 afii10072 -!D7 U+0432 afii10067 -!D8 U+044C afii10094 -!D9 U+044B afii10093 -!DA U+0437 afii10073 -!DB U+0448 afii10090 -!DC U+044D afii10095 -!DD U+0449 afii10091 -!DE U+0447 afii10089 -!DF U+044A afii10092 -!E0 U+042E afii10048 -!E1 U+0410 afii10017 -!E2 U+0411 afii10018 -!E3 U+0426 afii10040 -!E4 U+0414 afii10021 -!E5 U+0415 afii10022 -!E6 U+0424 afii10038 -!E7 U+0413 afii10020 -!E8 U+0425 afii10039 -!E9 U+0418 afii10026 -!EA U+0419 afii10027 -!EB U+041A afii10028 -!EC U+041B afii10029 -!ED U+041C afii10030 -!EE U+041D afii10031 -!EF U+041E afii10032 -!F0 U+041F afii10033 -!F1 U+042F afii10049 -!F2 U+0420 afii10034 -!F3 U+0421 afii10035 -!F4 U+0422 afii10036 -!F5 U+0423 afii10037 -!F6 U+0416 afii10024 -!F7 U+0412 afii10019 -!F8 U+042C afii10046 -!F9 U+042B afii10045 -!FA U+0417 afii10025 -!FB U+0428 afii10042 -!FC U+042D afii10047 -!FD U+0429 afii10043 -!FE U+0427 afii10041 -!FF U+042A afii10044 diff --git a/include/fpdf/font/makefont/koi8-u.map b/include/fpdf/font/makefont/koi8-u.map deleted file mode 100755 index 40a7e4fd7e52a0433e42b5502cf4d9a23cf11e2e..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/koi8-u.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+2500 SF100000 -!81 U+2502 SF110000 -!82 U+250C SF010000 -!83 U+2510 SF030000 -!84 U+2514 SF020000 -!85 U+2518 SF040000 -!86 U+251C SF080000 -!87 U+2524 SF090000 -!88 U+252C SF060000 -!89 U+2534 SF070000 -!8A U+253C SF050000 -!8B U+2580 upblock -!8C U+2584 dnblock -!8D U+2588 block -!8E U+258C lfblock -!8F U+2590 rtblock -!90 U+2591 ltshade -!91 U+2592 shade -!92 U+2593 dkshade -!93 U+2320 integraltp -!94 U+25A0 filledbox -!95 U+2022 bullet -!96 U+221A radical -!97 U+2248 approxequal -!98 U+2264 lessequal -!99 U+2265 greaterequal -!9A U+00A0 space -!9B U+2321 integralbt -!9C U+00B0 degree -!9D U+00B2 twosuperior -!9E U+00B7 periodcentered -!9F U+00F7 divide -!A0 U+2550 SF430000 -!A1 U+2551 SF240000 -!A2 U+2552 SF510000 -!A3 U+0451 afii10071 -!A4 U+0454 afii10101 -!A5 U+2554 SF390000 -!A6 U+0456 afii10103 -!A7 U+0457 afii10104 -!A8 U+2557 SF250000 -!A9 U+2558 SF500000 -!AA U+2559 SF490000 -!AB U+255A SF380000 -!AC U+255B SF280000 -!AD U+0491 afii10098 -!AE U+255D SF260000 -!AF U+255E SF360000 -!B0 U+255F SF370000 -!B1 U+2560 SF420000 -!B2 U+2561 SF190000 -!B3 U+0401 afii10023 -!B4 U+0404 afii10053 -!B5 U+2563 SF230000 -!B6 U+0406 afii10055 -!B7 U+0407 afii10056 -!B8 U+2566 SF410000 -!B9 U+2567 SF450000 -!BA U+2568 SF460000 -!BB U+2569 SF400000 -!BC U+256A SF540000 -!BD U+0490 afii10050 -!BE U+256C SF440000 -!BF U+00A9 copyright -!C0 U+044E afii10096 -!C1 U+0430 afii10065 -!C2 U+0431 afii10066 -!C3 U+0446 afii10088 -!C4 U+0434 afii10069 -!C5 U+0435 afii10070 -!C6 U+0444 afii10086 -!C7 U+0433 afii10068 -!C8 U+0445 afii10087 -!C9 U+0438 afii10074 -!CA U+0439 afii10075 -!CB U+043A afii10076 -!CC U+043B afii10077 -!CD U+043C afii10078 -!CE U+043D afii10079 -!CF U+043E afii10080 -!D0 U+043F afii10081 -!D1 U+044F afii10097 -!D2 U+0440 afii10082 -!D3 U+0441 afii10083 -!D4 U+0442 afii10084 -!D5 U+0443 afii10085 -!D6 U+0436 afii10072 -!D7 U+0432 afii10067 -!D8 U+044C afii10094 -!D9 U+044B afii10093 -!DA U+0437 afii10073 -!DB U+0448 afii10090 -!DC U+044D afii10095 -!DD U+0449 afii10091 -!DE U+0447 afii10089 -!DF U+044A afii10092 -!E0 U+042E afii10048 -!E1 U+0410 afii10017 -!E2 U+0411 afii10018 -!E3 U+0426 afii10040 -!E4 U+0414 afii10021 -!E5 U+0415 afii10022 -!E6 U+0424 afii10038 -!E7 U+0413 afii10020 -!E8 U+0425 afii10039 -!E9 U+0418 afii10026 -!EA U+0419 afii10027 -!EB U+041A afii10028 -!EC U+041B afii10029 -!ED U+041C afii10030 -!EE U+041D afii10031 -!EF U+041E afii10032 -!F0 U+041F afii10033 -!F1 U+042F afii10049 -!F2 U+0420 afii10034 -!F3 U+0421 afii10035 -!F4 U+0422 afii10036 -!F5 U+0423 afii10037 -!F6 U+0416 afii10024 -!F7 U+0412 afii10019 -!F8 U+042C afii10046 -!F9 U+042B afii10045 -!FA U+0417 afii10025 -!FB U+0428 afii10042 -!FC U+042D afii10047 -!FD U+0429 afii10043 -!FE U+0427 afii10041 -!FF U+042A afii10044 diff --git a/include/fpdf/font/makefont/makefont.php b/include/fpdf/font/makefont/makefont.php deleted file mode 100755 index 7e7ed5647e03c018220c93aa4506a8686710b198..0000000000000000000000000000000000000000 --- a/include/fpdf/font/makefont/makefont.php +++ /dev/null @@ -1,419 +0,0 @@ -<?php -/******************************************************************************* -* Utility to generate font definition files * -* * -* Version: 1.14 * -* Date: 2008-08-03 * -* Author: Olivier PLATHEY * -*******************************************************************************/ - -function ReadMap($enc) -{ - //Read a map file - $file=dirname(__FILE__).'/'.strtolower($enc).'.map'; - $a=file($file); - if(empty($a)) - die('<b>Error:</b> encoding not found: '.$enc); - $cc2gn=array(); - foreach($a as $l) - { - if($l[0]=='!') - { - $e=preg_split('/[ \\t]+/',rtrim($l)); - $cc=hexdec(substr($e[0],1)); - $gn=$e[2]; - $cc2gn[$cc]=$gn; - } - } - for($i=0;$i<=255;$i++) - { - if(!isset($cc2gn[$i])) - $cc2gn[$i]='.notdef'; - } - return $cc2gn; -} - -function ReadAFM($file, &$map) -{ - //Read a font metric file - $a=file($file); - if(empty($a)) - die('File not found'); - $widths=array(); - $fm=array(); - $fix=array('Edot'=>'Edotaccent','edot'=>'edotaccent','Idot'=>'Idotaccent','Zdot'=>'Zdotaccent','zdot'=>'zdotaccent', - 'Odblacute'=>'Ohungarumlaut','odblacute'=>'ohungarumlaut','Udblacute'=>'Uhungarumlaut','udblacute'=>'uhungarumlaut', - 'Gcedilla'=>'Gcommaaccent','gcedilla'=>'gcommaaccent','Kcedilla'=>'Kcommaaccent','kcedilla'=>'kcommaaccent', - 'Lcedilla'=>'Lcommaaccent','lcedilla'=>'lcommaaccent','Ncedilla'=>'Ncommaaccent','ncedilla'=>'ncommaaccent', - 'Rcedilla'=>'Rcommaaccent','rcedilla'=>'rcommaaccent','Scedilla'=>'Scommaaccent','scedilla'=>'scommaaccent', - 'Tcedilla'=>'Tcommaaccent','tcedilla'=>'tcommaaccent','Dslash'=>'Dcroat','dslash'=>'dcroat','Dmacron'=>'Dcroat','dmacron'=>'dcroat', - 'combininggraveaccent'=>'gravecomb','combininghookabove'=>'hookabovecomb','combiningtildeaccent'=>'tildecomb', - 'combiningacuteaccent'=>'acutecomb','combiningdotbelow'=>'dotbelowcomb','dongsign'=>'dong'); - foreach($a as $l) - { - $e=explode(' ',rtrim($l)); - if(count($e)<2) - continue; - $code=$e[0]; - $param=$e[1]; - if($code=='C') - { - //Character metrics - $cc=(int)$e[1]; - $w=$e[4]; - $gn=$e[7]; - if(substr($gn,-4)=='20AC') - $gn='Euro'; - if(isset($fix[$gn])) - { - //Fix incorrect glyph name - foreach($map as $c=>$n) - { - if($n==$fix[$gn]) - $map[$c]=$gn; - } - } - if(empty($map)) - { - //Symbolic font: use built-in encoding - $widths[$cc]=$w; - } - else - { - $widths[$gn]=$w; - if($gn=='X') - $fm['CapXHeight']=$e[13]; - } - if($gn=='.notdef') - $fm['MissingWidth']=$w; - } - elseif($code=='FontName') - $fm['FontName']=$param; - elseif($code=='Weight') - $fm['Weight']=$param; - elseif($code=='ItalicAngle') - $fm['ItalicAngle']=(double)$param; - elseif($code=='Ascender') - $fm['Ascender']=(int)$param; - elseif($code=='Descender') - $fm['Descender']=(int)$param; - elseif($code=='UnderlineThickness') - $fm['UnderlineThickness']=(int)$param; - elseif($code=='UnderlinePosition') - $fm['UnderlinePosition']=(int)$param; - elseif($code=='IsFixedPitch') - $fm['IsFixedPitch']=($param=='true'); - elseif($code=='FontBBox') - $fm['FontBBox']=array($e[1],$e[2],$e[3],$e[4]); - elseif($code=='CapHeight') - $fm['CapHeight']=(int)$param; - elseif($code=='StdVW') - $fm['StdVW']=(int)$param; - } - if(!isset($fm['FontName'])) - die('FontName not found'); - if(!empty($map)) - { - if(!isset($widths['.notdef'])) - $widths['.notdef']=600; - if(!isset($widths['Delta']) && isset($widths['increment'])) - $widths['Delta']=$widths['increment']; - //Order widths according to map - for($i=0;$i<=255;$i++) - { - if(!isset($widths[$map[$i]])) - { - echo '<b>Warning:</b> character '.$map[$i].' is missing<br>'; - $widths[$i]=$widths['.notdef']; - } - else - $widths[$i]=$widths[$map[$i]]; - } - } - $fm['Widths']=$widths; - return $fm; -} - -function MakeFontDescriptor($fm, $symbolic) -{ - //Ascent - $asc=(isset($fm['Ascender']) ? $fm['Ascender'] : 1000); - $fd="array('Ascent'=>".$asc; - //Descent - $desc=(isset($fm['Descender']) ? $fm['Descender'] : -200); - $fd.=",'Descent'=>".$desc; - //CapHeight - if(isset($fm['CapHeight'])) - $ch=$fm['CapHeight']; - elseif(isset($fm['CapXHeight'])) - $ch=$fm['CapXHeight']; - else - $ch=$asc; - $fd.=",'CapHeight'=>".$ch; - //Flags - $flags=0; - if(isset($fm['IsFixedPitch']) && $fm['IsFixedPitch']) - $flags+=1<<0; - if($symbolic) - $flags+=1<<2; - if(!$symbolic) - $flags+=1<<5; - if(isset($fm['ItalicAngle']) && $fm['ItalicAngle']!=0) - $flags+=1<<6; - $fd.=",'Flags'=>".$flags; - //FontBBox - if(isset($fm['FontBBox'])) - $fbb=$fm['FontBBox']; - else - $fbb=array(0,$desc-100,1000,$asc+100); - $fd.=",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'"; - //ItalicAngle - $ia=(isset($fm['ItalicAngle']) ? $fm['ItalicAngle'] : 0); - $fd.=",'ItalicAngle'=>".$ia; - //StemV - if(isset($fm['StdVW'])) - $stemv=$fm['StdVW']; - elseif(isset($fm['Weight']) && preg_match('/bold|black/i',$fm['Weight'])) - $stemv=120; - else - $stemv=70; - $fd.=",'StemV'=>".$stemv; - //MissingWidth - if(isset($fm['MissingWidth'])) - $fd.=",'MissingWidth'=>".$fm['MissingWidth']; - $fd.=')'; - return $fd; -} - -function MakeWidthArray($fm) -{ - //Make character width array - $s="array(\n\t"; - $cw=$fm['Widths']; - for($i=0;$i<=255;$i++) - { - if(chr($i)=="'") - $s.="'\\''"; - elseif(chr($i)=="\\") - $s.="'\\\\'"; - elseif($i>=32 && $i<=126) - $s.="'".chr($i)."'"; - else - $s.="chr($i)"; - $s.='=>'.$fm['Widths'][$i]; - if($i<255) - $s.=','; - if(($i+1)%22==0) - $s.="\n\t"; - } - $s.=')'; - return $s; -} - -function MakeFontEncoding($map) -{ - //Build differences from reference encoding - $ref=ReadMap('cp1252'); - $s=''; - $last=0; - for($i=32;$i<=255;$i++) - { - if($map[$i]!=$ref[$i]) - { - if($i!=$last+1) - $s.=$i.' '; - $last=$i; - $s.='/'.$map[$i].' '; - } - } - return rtrim($s); -} - -function SaveToFile($file, $s, $mode) -{ - $f=fopen($file,'w'.$mode); - if(!$f) - die('Can\'t write to file '.$file); - fwrite($f,$s,strlen($s)); - fclose($f); -} - -function ReadShort($f) -{ - $a=unpack('n1n',fread($f,2)); - return $a['n']; -} - -function ReadLong($f) -{ - $a=unpack('N1N',fread($f,4)); - return $a['N']; -} - -function CheckTTF($file) -{ - //Check if font license allows embedding - $f=fopen($file,'rb'); - if(!$f) - die('<b>Error:</b> Can\'t open '.$file); - //Extract number of tables - fseek($f,4,SEEK_CUR); - $nb=ReadShort($f); - fseek($f,6,SEEK_CUR); - //Seek OS/2 table - $found=false; - for($i=0;$i<$nb;$i++) - { - if(fread($f,4)=='OS/2') - { - $found=true; - break; - } - fseek($f,12,SEEK_CUR); - } - if(!$found) - { - fclose($f); - return; - } - fseek($f,4,SEEK_CUR); - $offset=ReadLong($f); - fseek($f,$offset,SEEK_SET); - //Extract fsType flags - fseek($f,8,SEEK_CUR); - $fsType=ReadShort($f); - $rl=($fsType & 0x02)!=0; - $pp=($fsType & 0x04)!=0; - $e=($fsType & 0x08)!=0; - fclose($f); - if($rl && !$pp && !$e) - echo '<b>Warning:</b> font license does not allow embedding'; -} - -/******************************************************************************* -* fontfile: path to TTF file (or empty string if not to be embedded) * -* afmfile: path to AFM file * -* enc: font encoding (or empty string for symbolic fonts) * -* patch: optional patch for encoding * -* type: font type if fontfile is empty * -*******************************************************************************/ -function MakeFont($fontfile, $afmfile, $enc='cp1252', $patch=array(), $type='TrueType') -{ - //Generate a font definition file - if(get_magic_quotes_runtime()) - @set_magic_quotes_runtime(0); - ini_set('auto_detect_line_endings','1'); - if($enc) - { - $map=ReadMap($enc); - foreach($patch as $cc=>$gn) - $map[$cc]=$gn; - } - else - $map=array(); - if(!file_exists($afmfile)) - die('<b>Error:</b> AFM file not found: '.$afmfile); - $fm=ReadAFM($afmfile,$map); - if($enc) - $diff=MakeFontEncoding($map); - else - $diff=''; - $fd=MakeFontDescriptor($fm,empty($map)); - //Find font type - if($fontfile) - { - $ext=strtolower(substr($fontfile,-3)); - if($ext=='ttf') - $type='TrueType'; - elseif($ext=='pfb') - $type='Type1'; - else - die('<b>Error:</b> unrecognized font file extension: '.$ext); - } - else - { - if($type!='TrueType' && $type!='Type1') - die('<b>Error:</b> incorrect font type: '.$type); - } - //Start generation - $s='<?php'."\n"; - $s.='$type=\''.$type."';\n"; - $s.='$name=\''.$fm['FontName']."';\n"; - $s.='$desc='.$fd.";\n"; - if(!isset($fm['UnderlinePosition'])) - $fm['UnderlinePosition']=-100; - if(!isset($fm['UnderlineThickness'])) - $fm['UnderlineThickness']=50; - $s.='$up='.$fm['UnderlinePosition'].";\n"; - $s.='$ut='.$fm['UnderlineThickness'].";\n"; - $w=MakeWidthArray($fm); - $s.='$cw='.$w.";\n"; - $s.='$enc=\''.$enc."';\n"; - $s.='$diff=\''.$diff."';\n"; - $basename=substr(basename($afmfile),0,-4); - if($fontfile) - { - //Embedded font - if(!file_exists($fontfile)) - die('<b>Error:</b> font file not found: '.$fontfile); - if($type=='TrueType') - CheckTTF($fontfile); - $f=fopen($fontfile,'rb'); - if(!$f) - die('<b>Error:</b> Can\'t open '.$fontfile); - $file=fread($f,filesize($fontfile)); - fclose($f); - if($type=='Type1') - { - //Find first two sections and discard third one - $header=(ord($file[0])==128); - if($header) - { - //Strip first binary header - $file=substr($file,6); - } - $pos=strpos($file,'eexec'); - if(!$pos) - die('<b>Error:</b> font file does not seem to be valid Type1'); - $size1=$pos+6; - if($header && ord($file[$size1])==128) - { - //Strip second binary header - $file=substr($file,0,$size1).substr($file,$size1+6); - } - $pos=strpos($file,'00000000'); - if(!$pos) - die('<b>Error:</b> font file does not seem to be valid Type1'); - $size2=$pos-$size1; - $file=substr($file,0,$size1+$size2); - } - if(function_exists('gzcompress')) - { - $cmp=$basename.'.z'; - SaveToFile($cmp,gzcompress($file),'b'); - $s.='$file=\''.$cmp."';\n"; - echo 'Font file compressed ('.$cmp.')<br>'; - } - else - { - $s.='$file=\''.basename($fontfile)."';\n"; - echo '<b>Notice:</b> font file could not be compressed (zlib extension not available)<br>'; - } - if($type=='Type1') - { - $s.='$size1='.$size1.";\n"; - $s.='$size2='.$size2.";\n"; - } - else - $s.='$originalsize='.filesize($fontfile).";\n"; - } - else - { - //Not embedded font - $s.='$file='."'';\n"; - } - $s.="?>\n"; - SaveToFile($basename.'.php',$s,'t'); - echo 'Font definition file generated ('.$basename.'.php'.')<br>'; -} -?> diff --git a/include/fpdf/fpdf.php b/include/fpdf/fpdf.php deleted file mode 100644 index b2fc21dd740e0109f2e2ea1b468ae58b0e92bb1a..0000000000000000000000000000000000000000 --- a/include/fpdf/fpdf.php +++ /dev/null @@ -1,1732 +0,0 @@ -<?php -/******************************************************************************* -* FPDF * -* * -* Version: 1.6 * -* Date: 2008-08-03 * -* Author: Olivier PLATHEY * -*******************************************************************************/ - -define('FPDF_VERSION','1.6'); - -class FPDF -{ -var $page; //current page number -var $n; //current object number -var $offsets; //array of object offsets -var $buffer; //buffer holding in-memory PDF -var $pages; //array containing pages -var $state; //current document state -var $compress; //compression flag -var $k; //scale factor (number of points in user unit) -var $DefOrientation; //default orientation -var $CurOrientation; //current orientation -var $PageFormats; //available page formats -var $DefPageFormat; //default page format -var $CurPageFormat; //current page format -var $PageSizes; //array storing non-default page sizes -var $wPt,$hPt; //dimensions of current page in points -var $w,$h; //dimensions of current page in user unit -var $lMargin; //left margin -var $tMargin; //top margin -var $rMargin; //right margin -var $bMargin; //page break margin -var $cMargin; //cell margin -var $x,$y; //current position in user unit -var $lasth; //height of last printed cell -var $LineWidth; //line width in user unit -var $CoreFonts; //array of standard font names -var $fonts; //array of used fonts -var $FontFiles; //array of font files -var $diffs; //array of encoding differences -var $FontFamily; //current font family -var $FontStyle; //current font style -var $underline; //underlining flag -var $CurrentFont; //current font info -var $FontSizePt; //current font size in points -var $FontSize; //current font size in user unit -var $DrawColor; //commands for drawing color -var $FillColor; //commands for filling color -var $TextColor; //commands for text color -var $ColorFlag; //indicates whether fill and text colors are different -var $ws; //word spacing -var $images; //array of used images -var $PageLinks; //array of links in pages -var $links; //array of internal links -var $AutoPageBreak; //automatic page breaking -var $PageBreakTrigger; //threshold used to trigger page breaks -var $InHeader; //flag set when processing header -var $InFooter; //flag set when processing footer -var $ZoomMode; //zoom display mode -var $LayoutMode; //layout display mode -var $title; //title -var $subject; //subject -var $author; //author -var $keywords; //keywords -var $creator; //creator -var $AliasNbPages; //alias for total number of pages -var $PDFVersion; //PDF version number - -/******************************************************************************* -* * -* Public methods * -* * -*******************************************************************************/ -function FPDF($orientation='P', $unit='mm', $format='A3') -{ - //Some checks - $this->_dochecks(); - //Initialization of properties - $this->page=0; - $this->n=2; - $this->buffer=''; - $this->pages=array(); - $this->PageSizes=array(); - $this->state=0; - $this->fonts=array(); - $this->FontFiles=array(); - $this->diffs=array(); - $this->images=array(); - $this->links=array(); - $this->InHeader=false; - $this->InFooter=false; - $this->lasth=0; - $this->FontFamily=''; - $this->FontStyle=''; - $this->FontSizePt=12; - $this->underline=false; - $this->DrawColor='0 G'; - $this->FillColor='0 g'; - $this->TextColor='0 g'; - $this->ColorFlag=false; - $this->ws=0; - //Standard fonts - $this->CoreFonts=array('courier'=>'Courier', 'courierB'=>'Courier-Bold', 'courierI'=>'Courier-Oblique', 'courierBI'=>'Courier-BoldOblique', - 'helvetica'=>'Helvetica', 'helveticaB'=>'Helvetica-Bold', 'helveticaI'=>'Helvetica-Oblique', 'helveticaBI'=>'Helvetica-BoldOblique', - 'times'=>'Times-Roman', 'timesB'=>'Times-Bold', 'timesI'=>'Times-Italic', 'timesBI'=>'Times-BoldItalic', - 'symbol'=>'Symbol', 'zapfdingbats'=>'ZapfDingbats'); - //Scale factor - if($unit=='pt') - $this->k=1; - elseif($unit=='mm') - $this->k=72/25.4; - elseif($unit=='cm') - $this->k=72/2.54; - elseif($unit=='in') - $this->k=72; - else - $this->Error('Incorrect unit: '.$unit); - //Page format - $this->PageFormats=array('a3'=>array(841.89,1190.55), 'a4'=>array(595.28,841.89), 'a5'=>array(420.94,595.28), - 'letter'=>array(612,792), 'legal'=>array(612,1008)); - if(is_string($format)) - $format=$this->_getpageformat($format); - $this->DefPageFormat=$format; - $this->CurPageFormat=$format; - //Page orientation - $orientation=strtolower($orientation); - if($orientation=='p' || $orientation=='portrait') - { - $this->DefOrientation='P'; - $this->w=$this->DefPageFormat[0]; - $this->h=$this->DefPageFormat[1]; - } - elseif($orientation=='l' || $orientation=='landscape') - { - $this->DefOrientation='L'; - $this->w=$this->DefPageFormat[1]; - $this->h=$this->DefPageFormat[0]; - } - else - $this->Error('Incorrect orientation: '.$orientation); - $this->CurOrientation=$this->DefOrientation; - $this->wPt=$this->w*$this->k; - $this->hPt=$this->h*$this->k; - //Page margins (1 cm) - $margin=28.35/$this->k; - $this->SetMargins($margin,$margin); - //Interior cell margin (1 mm) - $this->cMargin=$margin/10; - //Line width (0.2 mm) - $this->LineWidth=.567/$this->k; - //Automatic page break - $this->SetAutoPageBreak(true,2*$margin); - //Full width display mode - $this->SetDisplayMode('fullwidth'); - //Enable compression - $this->SetCompression(true); - //Set default PDF version number - $this->PDFVersion='1.3'; -} - -function SetMargins($left, $top, $right=null) -{ - //Set left, top and right margins - $this->lMargin=$left; - $this->tMargin=$top; - if($right===null) - $right=$left; - $this->rMargin=$right; -} - -function SetLeftMargin($margin) -{ - //Set left margin - $this->lMargin=$margin; - if($this->page>0 && $this->x<$margin) - $this->x=$margin; -} - -function SetTopMargin($margin) -{ - //Set top margin - $this->tMargin=$margin; -} - -function SetRightMargin($margin) -{ - //Set right margin - $this->rMargin=$margin; -} - -function SetAutoPageBreak($auto, $margin=0) -{ - //Set auto page break mode and triggering margin - $this->AutoPageBreak=$auto; - $this->bMargin=$margin; - $this->PageBreakTrigger=$this->h-$margin; -} - -function SetDisplayMode($zoom, $layout='continuous') -{ - //Set display mode in viewer - if($zoom=='fullpage' || $zoom=='fullwidth' || $zoom=='real' || $zoom=='default' || !is_string($zoom)) - $this->ZoomMode=$zoom; - else - $this->Error('Incorrect zoom display mode: '.$zoom); - if($layout=='single' || $layout=='continuous' || $layout=='two' || $layout=='default') - $this->LayoutMode=$layout; - else - $this->Error('Incorrect layout display mode: '.$layout); -} - -function SetCompression($compress) -{ - //Set page compression - if(function_exists('gzcompress')) - $this->compress=$compress; - else - $this->compress=false; -} - -function SetTitle($title, $isUTF8=false) -{ - //Title of document - if($isUTF8) - $title=$this->_UTF8toUTF16($title); - $this->title=$title; -} - -function SetSubject($subject, $isUTF8=false) -{ - //Subject of document - if($isUTF8) - $subject=$this->_UTF8toUTF16($subject); - $this->subject=$subject; -} - -function SetAuthor($author, $isUTF8=false) -{ - //Author of document - if($isUTF8) - $author=$this->_UTF8toUTF16($author); - $this->author=$author; -} - -function SetKeywords($keywords, $isUTF8=false) -{ - //Keywords of document - if($isUTF8) - $keywords=$this->_UTF8toUTF16($keywords); - $this->keywords=$keywords; -} - -function SetCreator($creator, $isUTF8=false) -{ - //Creator of document - if($isUTF8) - $creator=$this->_UTF8toUTF16($creator); - $this->creator=$creator; -} - -function AliasNbPages($alias='{nb}') -{ - //Define an alias for total number of pages - $this->AliasNbPages=$alias; -} - -function Error($msg) -{ - //Fatal error - die('<b>FPDF error:</b> '.$msg); -} - -function Open() -{ - //Begin document - $this->state=1; -} - -function Close() -{ - //Terminate document - if($this->state==3) - return; - if($this->page==0) - $this->AddPage(); - //Page footer - $this->InFooter=true; - $this->Footer(); - $this->InFooter=false; - //Close page - $this->_endpage(); - //Close document - $this->_enddoc(); -} - -function AddPage($orientation='', $format='') -{ - //Start a new page - if($this->state==0) - $this->Open(); - $family=$this->FontFamily; - $style=$this->FontStyle.($this->underline ? 'U' : ''); - $size=$this->FontSizePt; - $lw=$this->LineWidth; - $dc=$this->DrawColor; - $fc=$this->FillColor; - $tc=$this->TextColor; - $cf=$this->ColorFlag; - if($this->page>0) - { - //Page footer - $this->InFooter=true; - $this->Footer(); - $this->InFooter=false; - //Close page - $this->_endpage(); - } - //Start new page - $this->_beginpage($orientation,$format); - //Set line cap style to square - $this->_out('2 J'); - //Set line width - $this->LineWidth=$lw; - $this->_out(sprintf('%.2F w',$lw*$this->k)); - //Set font - if($family) - $this->SetFont($family,$style,$size); - //Set colors - $this->DrawColor=$dc; - if($dc!='0 G') - $this->_out($dc); - $this->FillColor=$fc; - if($fc!='0 g') - $this->_out($fc); - $this->TextColor=$tc; - $this->ColorFlag=$cf; - //Page header - $this->InHeader=true; - $this->Header(); - $this->InHeader=false; - //Restore line width - if($this->LineWidth!=$lw) - { - $this->LineWidth=$lw; - $this->_out(sprintf('%.2F w',$lw*$this->k)); - } - //Restore font - if($family) - $this->SetFont($family,$style,$size); - //Restore colors - if($this->DrawColor!=$dc) - { - $this->DrawColor=$dc; - $this->_out($dc); - } - if($this->FillColor!=$fc) - { - $this->FillColor=$fc; - $this->_out($fc); - } - $this->TextColor=$tc; - $this->ColorFlag=$cf; -} - -function Header() -{ - //To be implemented in your own inherited class -} - -function Footer() -{ - //To be implemented in your own inherited class -} - -function PageNo() -{ - //Get current page number - return $this->page; -} - -function SetDrawColor($r, $g=null, $b=null) -{ - //Set color for all stroking operations - if(($r==0 && $g==0 && $b==0) || $g===null) - $this->DrawColor=sprintf('%.3F G',$r/255); - else - $this->DrawColor=sprintf('%.3F %.3F %.3F RG',$r/255,$g/255,$b/255); - if($this->page>0) - $this->_out($this->DrawColor); -} - -function SetFillColor($r, $g=null, $b=null) -{ - //Set color for all filling operations - if(($r==0 && $g==0 && $b==0) || $g===null) - $this->FillColor=sprintf('%.3F g',$r/255); - else - $this->FillColor=sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255); - $this->ColorFlag=($this->FillColor!=$this->TextColor); - if($this->page>0) - $this->_out($this->FillColor); -} - -function SetTextColor($r, $g=null, $b=null) -{ - //Set color for text - if(($r==0 && $g==0 && $b==0) || $g===null) - $this->TextColor=sprintf('%.3F g',$r/255); - else - $this->TextColor=sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255); - $this->ColorFlag=($this->FillColor!=$this->TextColor); -} - -function GetStringWidth($s) -{ - //Get width of a string in the current font - $s=(string)$s; - $cw=&$this->CurrentFont['cw']; - $w=0; - $l=strlen($s); - for($i=0;$i<$l;$i++) - $w+=$cw[$s[$i]]; - return $w*$this->FontSize/1000; -} - -function SetLineWidth($width) -{ - //Set line width - $this->LineWidth=$width; - if($this->page>0) - $this->_out(sprintf('%.2F w',$width*$this->k)); -} - -function Line($x1, $y1, $x2, $y2) -{ - //Draw a line - $this->_out(sprintf('%.2F %.2F m %.2F %.2F l S',$x1*$this->k,($this->h-$y1)*$this->k,$x2*$this->k,($this->h-$y2)*$this->k)); -} - -function Rect($x, $y, $w, $h, $style='') -{ - //Draw a rectangle - if($style=='F') - $op='f'; - elseif($style=='FD' || $style=='DF') - $op='B'; - else - $op='S'; - $this->_out(sprintf('%.2F %.2F %.2F %.2F re %s',$x*$this->k,($this->h-$y)*$this->k,$w*$this->k,-$h*$this->k,$op)); -} - -function AddFont($family, $style='', $file='') -{ - //Add a TrueType or Type1 font - $family=strtolower($family); - if($file=='') - $file=str_replace(' ','',$family).strtolower($style).'.php'; - if($family=='arial') - $family='helvetica'; - $style=strtoupper($style); - if($style=='IB') - $style='BI'; - $fontkey=$family.$style; - if(isset($this->fonts[$fontkey])) - return; - include($this->_getfontpath().$file); - if(!isset($name)) - $this->Error('Could not include font definition file'); - $i=count($this->fonts)+1; - $this->fonts[$fontkey]=array('i'=>$i, 'type'=>$type, 'name'=>$name, 'desc'=>$desc, 'up'=>$up, 'ut'=>$ut, 'cw'=>$cw, 'enc'=>$enc, 'file'=>$file); # nolint - if($diff) # nolint - { - //Search existing encodings - $d=0; - $nb=count($this->diffs); - for($i=1;$i<=$nb;$i++) - { - if($this->diffs[$i]==$diff) # nolint - { - $d=$i; - break; - } - } - if($d==0) - { - $d=$nb+1; - $this->diffs[$d]=$diff; # nolint - } - $this->fonts[$fontkey]['diff']=$d; - } - if($file) - { - if($type=='TrueType') - $this->FontFiles[$file]=array('length1'=>$originalsize); # nolint - else - $this->FontFiles[$file]=array('length1'=>$size1, 'length2'=>$size2); # nolint - } -} - -function SetFont($family, $style='', $size=0) -{ - //Select a font; size given in points - global $fpdf_charwidths; - - $family=strtolower($family); - if($family=='') - $family=$this->FontFamily; - if($family=='arial') - $family='helvetica'; - elseif($family=='symbol' || $family=='zapfdingbats') - $style=''; - $style=strtoupper($style); - if(strpos($style,'U')!==false) - { - $this->underline=true; - $style=str_replace('U','',$style); - } - else - $this->underline=false; - if($style=='IB') - $style='BI'; - if($size==0) - $size=$this->FontSizePt; - //Test if font is already selected - if($this->FontFamily==$family && $this->FontStyle==$style && $this->FontSizePt==$size) - return; - //Test if used for the first time - $fontkey=$family.$style; - if(!isset($this->fonts[$fontkey])) - { - //Check if one of the standard fonts - if(isset($this->CoreFonts[$fontkey])) - { - if(!isset($fpdf_charwidths[$fontkey])) - { - //Load metric file - $file=$family; - if($family=='times' || $family=='helvetica') - $file.=strtolower($style); - include($this->_getfontpath().$file.'.php'); - if(!isset($fpdf_charwidths[$fontkey])) - $this->Error('Could not include font metric file'); - } - $i=count($this->fonts)+1; - $name=$this->CoreFonts[$fontkey]; - $cw=$fpdf_charwidths[$fontkey]; - $this->fonts[$fontkey]=array('i'=>$i, 'type'=>'core', 'name'=>$name, 'up'=>-100, 'ut'=>50, 'cw'=>$cw); - } - else - $this->Error('Undefined font: '.$family.' '.$style.'=>'.print_r($this->CoreFonts,true)); - } - //Select it - $this->FontFamily=$family; - $this->FontStyle=$style; - $this->FontSizePt=$size; - $this->FontSize=$size/$this->k; - $this->CurrentFont=&$this->fonts[$fontkey]; - if($this->page>0) - $this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt)); -} - -function SetFontSize($size) -{ - //Set font size in points - if($this->FontSizePt==$size) - return; - $this->FontSizePt=$size; - $this->FontSize=$size/$this->k; - if($this->page>0) - $this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt)); -} - -function AddLink() -{ - //Create a new internal link - $n=count($this->links)+1; - $this->links[$n]=array(0, 0); - return $n; -} - -function SetLink($link, $y=0, $page=-1) -{ - //Set destination of internal link - if($y==-1) - $y=$this->y; - if($page==-1) - $page=$this->page; - $this->links[$link]=array($page, $y); -} - -function Link($x, $y, $w, $h, $link) -{ - //Put a link on the page - $this->PageLinks[$this->page][]=array($x*$this->k, $this->hPt-$y*$this->k, $w*$this->k, $h*$this->k, $link); -} - -function Text($x, $y, $txt) -{ - //Output a string - $s=sprintf('BT %.2F %.2F Td (%s) Tj ET',$x*$this->k,($this->h-$y)*$this->k,$this->_escape($txt)); - if($this->underline && $txt!='') - $s.=' '.$this->_dounderline($x,$y,$txt); - if($this->ColorFlag) - $s='q '.$this->TextColor.' '.$s.' Q'; - $this->_out($s); -} - -function AcceptPageBreak() -{ - //Accept automatic page break or not - return $this->AutoPageBreak; -} - -function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='') -{ - //Output a cell - $k=$this->k; - if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak()) - { - //Automatic page break - $x=$this->x; - $ws=$this->ws; - if($ws>0) - { - $this->ws=0; - $this->_out('0 Tw'); - } - $this->AddPage($this->CurOrientation,$this->CurPageFormat); - $this->x=$x; - if($ws>0) - { - $this->ws=$ws; - $this->_out(sprintf('%.3F Tw',$ws*$k)); - } - } - if($w==0) - $w=$this->w-$this->rMargin-$this->x; - $s=''; - if($fill || $border==1) - { - if($fill) - $op=($border==1) ? 'B' : 'f'; - else - $op='S'; - $s=sprintf('%.2F %.2F %.2F %.2F re %s ',$this->x*$k,($this->h-$this->y)*$k,$w*$k,-$h*$k,$op); - } - if(is_string($border)) - { - $x=$this->x; - $y=$this->y; - if(strpos($border,'L')!==false) - $s.=sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k); - if(strpos($border,'T')!==false) - $s.=sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k); - if(strpos($border,'R')!==false) - $s.=sprintf('%.2F %.2F m %.2F %.2F l S ',($x+$w)*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-($y+$h))*$k); - if(strpos($border,'B')!==false) - $s.=sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-($y+$h))*$k,($x+$w)*$k,($this->h-($y+$h))*$k); - } - if($txt!=='') - { - if($align=='R') - $dx=$w-$this->cMargin-$this->GetStringWidth($txt); - elseif($align=='C') - $dx=($w-$this->GetStringWidth($txt))/2; - else - $dx=$this->cMargin; - if($this->ColorFlag) - $s.='q '.$this->TextColor.' '; - $txt2=str_replace(')','\\)',str_replace('(','\\(',str_replace('\\','\\\\',$txt))); - $s.=sprintf('BT %.2F %.2F Td (%s) Tj ET',($this->x+$dx)*$k,($this->h-($this->y+.5*$h+.3*$this->FontSize))*$k,$txt2); - if($this->underline) - $s.=' '.$this->_dounderline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt); - if($this->ColorFlag) - $s.=' Q'; - if($link) - $this->Link($this->x+$dx,$this->y+.5*$h-.5*$this->FontSize,$this->GetStringWidth($txt),$this->FontSize,$link); - } - if($s) - $this->_out($s); - $this->lasth=$h; - if($ln>0) - { - //Go to next line - $this->y+=$h; - if($ln==1) - $this->x=$this->lMargin; - } - else - $this->x+=$w; -} - -function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false) -{ - //Output text with automatic or explicit line breaks - $cw=&$this->CurrentFont['cw']; - if($w==0) - $w=$this->w-$this->rMargin-$this->x; - $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; - $s=str_replace("\r",'',$txt); - $nb=strlen($s); - if($nb>0 && $s[$nb-1]=="\n") - $nb--; - $b=0; - if($border) - { - if($border==1) - { - $border='LTRB'; - $b='LRT'; - $b2='LR'; - } - else - { - $b2=''; - if(strpos($border,'L')!==false) - $b2.='L'; - if(strpos($border,'R')!==false) - $b2.='R'; - $b=(strpos($border,'T')!==false) ? $b2.'T' : $b2; - } - } - $sep=-1; - $i=0; - $j=0; - $l=0; - $ns=0; - $nl=1; - while($i<$nb) - { - //Get next character - $c=$s[$i]; - if($c=="\n") - { - //Explicit line break - if($this->ws>0) - { - $this->ws=0; - $this->_out('0 Tw'); - } - $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); - $i++; - $sep=-1; - $j=$i; - $l=0; - $ns=0; - $nl++; - if($border && $nl==2) - $b=$b2; - continue; - } - if($c==' ') - { - $sep=$i; - $ls=$l; - $ns++; - } - $l+=$cw[$c]; - if($l>$wmax) - { - //Automatic line break - if($sep==-1) - { - if($i==$j) - $i++; - if($this->ws>0) - { - $this->ws=0; - $this->_out('0 Tw'); - } - $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); - } - else - { - if($align=='J') - { - $this->ws=($ns>1) ? ($wmax-$ls)/1000*$this->FontSize/($ns-1) : 0; - $this->_out(sprintf('%.3F Tw',$this->ws*$this->k)); - } - $this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill); - $i=$sep+1; - } - $sep=-1; - $j=$i; - $l=0; - $ns=0; - $nl++; - if($border && $nl==2) - $b=$b2; - } - else - $i++; - } - //Last chunk - if($this->ws>0) - { - $this->ws=0; - $this->_out('0 Tw'); - } - if($border && strpos($border,'B')!==false) - $b.='B'; - $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); - $this->x=$this->lMargin; -} - -function Write($h, $txt, $link='') -{ - //Output text in flowing mode - $cw=&$this->CurrentFont['cw']; - $w=$this->w-$this->rMargin-$this->x; - $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; - $s=str_replace("\r",'',$txt); - $nb=strlen($s); - $sep=-1; - $i=0; - $j=0; - $l=0; - $nl=1; - while($i<$nb) - { - //Get next character - $c=$s[$i]; - if($c=="\n") - { - //Explicit line break - $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link); - $i++; - $sep=-1; - $j=$i; - $l=0; - if($nl==1) - { - $this->x=$this->lMargin; - $w=$this->w-$this->rMargin-$this->x; - $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; - } - $nl++; - continue; - } - if($c==' ') - $sep=$i; - $l+=$cw[$c]; - if($l>$wmax) - { - //Automatic line break - if($sep==-1) - { - if($this->x>$this->lMargin) - { - //Move to next line - $this->x=$this->lMargin; - $this->y+=$h; - $w=$this->w-$this->rMargin-$this->x; - $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; - $i++; - $nl++; - continue; - } - if($i==$j) - $i++; - $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link); - } - else - { - $this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,'',0,$link); - $i=$sep+1; - } - $sep=-1; - $j=$i; - $l=0; - if($nl==1) - { - $this->x=$this->lMargin; - $w=$this->w-$this->rMargin-$this->x; - $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; - } - $nl++; - } - else - $i++; - } - //Last chunk - if($i!=$j) - $this->Cell($l/1000*$this->FontSize,$h,substr($s,$j),0,0,'',0,$link); -} - -function Ln($h=null) -{ - //Line feed; default value is last cell height - $this->x=$this->lMargin; - if($h===null) - $this->y+=$this->lasth; - else - $this->y+=$h; -} - -function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='') -{ - //Put an image on the page - if(!isset($this->images[$file])) - { - //First use of this image, get info - if($type=='') - { - $pos=strrpos($file,'.'); - if(!$pos) - $this->Error('Image file has no extension and no type was specified: '.$file); - $type=substr($file,$pos+1); - } - $type=strtolower($type); - if($type=='jpeg') - $type='jpg'; - $mtd='_parse'.$type; - if(!method_exists($this,$mtd)) - $this->Error('Unsupported image type: '.$type); - $info=$this->$mtd($file); - $info['i']=count($this->images)+1; - $this->images[$file]=$info; - } - else - $info=$this->images[$file]; - //Automatic width and height calculation if needed - if($w==0 && $h==0) - { - //Put image at 72 dpi - $w=$info['w']/$this->k; - $h=$info['h']/$this->k; - } - elseif($w==0) - $w=$h*$info['w']/$info['h']; - elseif($h==0) - $h=$w*$info['h']/$info['w']; - //Flowing mode - if($y===null) - { - if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak()) - { - //Automatic page break - $x2=$this->x; - $this->AddPage($this->CurOrientation,$this->CurPageFormat); - $this->x=$x2; - } - $y=$this->y; - $this->y+=$h; - } - if($x===null) - $x=$this->x; - $this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k,$info['i'])); - if($link) - $this->Link($x,$y,$w,$h,$link); -} - -function GetX() -{ - //Get x position - return $this->x; -} - -function SetX($x) -{ - //Set x position - if($x>=0) - $this->x=$x; - else - $this->x=$this->w+$x; -} - -function GetY() -{ - //Get y position - return $this->y; -} - -function SetY($y) -{ - //Set y position and reset x - $this->x=$this->lMargin; - if($y>=0) - $this->y=$y; - else - $this->y=$this->h+$y; -} - -function SetXY($x, $y) -{ - //Set x and y positions - $this->SetY($y); - $this->SetX($x); -} - -function Output($name='', $dest='') -{ - //Output PDF to some destination - if($this->state<3) - $this->Close(); - $dest=strtoupper($dest); - if($dest=='') - { - if($name=='') - { - $name='doc.pdf'; - $dest='I'; - } - else - $dest='F'; - } - switch($dest) - { - case 'I': - //Send to standard output - if(ob_get_length()) - $this->Error('Some data has already been output. Can\'t send PDF file'); - if(php_sapi_name()!='cli') - { - //We send to a browser - header('Content-Type: application/pdf'); - if(headers_sent()) - $this->Error('Some data has already been output. Can\'t send PDF file'); - header('Content-Length: '.strlen($this->buffer)); - header('Content-Disposition: inline; filename="'.$name.'"'); - header('Cache-Control: private, max-age=0, must-revalidate'); - header('Pragma: public'); - ini_set('zlib.output_compression','0'); - } - echo $this->buffer; - break; - case 'D': - //Download file - if(ob_get_length()) - $this->Error('Some data has already been output. Can\'t send PDF file'); - header('Content-Type: application/x-download'); - if(headers_sent()) - $this->Error('Some data has already been output. Can\'t send PDF file'); - header('Content-Length: '.strlen($this->buffer)); - header('Content-Disposition: attachment; filename="'.$name.'"'); - header('Cache-Control: private, max-age=0, must-revalidate'); - header('Pragma: public'); - ini_set('zlib.output_compression','0'); - echo $this->buffer; - break; - case 'F': - //Save to local file - $f=fopen($name,'wb'); - if(!$f) - $this->Error('Unable to create output file: '.$name); - fwrite($f,$this->buffer,strlen($this->buffer)); - fclose($f); - break; - case 'S': - //Return as a string - return $this->buffer; - default: - $this->Error('Incorrect output destination: '.$dest); - } - return ''; -} - -/******************************************************************************* -* * -* Protected methods * -* * -*******************************************************************************/ -function _dochecks() -{ - //Check availability of %F - if(sprintf('%.1F',1.0)!='1.0') - $this->Error('This version of PHP is not supported'); - //Check mbstring overloading - if(ini_get('mbstring.func_overload') & 2) - $this->Error('mbstring overloading must be disabled'); - //Disable runtime magic quotes - if(get_magic_quotes_runtime()) - @set_magic_quotes_runtime(0); -} - -function _getpageformat($format) -{ - $format=strtolower($format); - if(!isset($this->PageFormats[$format])) - $this->Error('Unknown page format: '.$format); - $a=$this->PageFormats[$format]; - return array($a[0]/$this->k, $a[1]/$this->k); -} - -function _getfontpath() -{ - if(!defined('FPDF_FONTPATH') && is_dir(dirname(__FILE__).'/font')) - define('FPDF_FONTPATH',dirname(__FILE__).'/font/'); - return defined('FPDF_FONTPATH') ? FPDF_FONTPATH : ''; -} - -function _beginpage($orientation, $format) -{ - $this->page++; - $this->pages[$this->page]=''; - $this->state=2; - $this->x=$this->lMargin; - $this->y=$this->tMargin; - $this->FontFamily=''; - //Check page size - if($orientation=='') - $orientation=$this->DefOrientation; - else - $orientation=strtoupper($orientation[0]); - if($format=='') - $format=$this->DefPageFormat; - else - { - if(is_string($format)) - $format=$this->_getpageformat($format); - } - if($orientation!=$this->CurOrientation || $format[0]!=$this->CurPageFormat[0] || $format[1]!=$this->CurPageFormat[1]) - { - //New size - if($orientation=='P') - { - $this->w=$format[0]; - $this->h=$format[1]; - } - else - { - $this->w=$format[1]; - $this->h=$format[0]; - } - $this->wPt=$this->w*$this->k; - $this->hPt=$this->h*$this->k; - $this->PageBreakTrigger=$this->h-$this->bMargin; - $this->CurOrientation=$orientation; - $this->CurPageFormat=$format; - } - if($orientation!=$this->DefOrientation || $format[0]!=$this->DefPageFormat[0] || $format[1]!=$this->DefPageFormat[1]) - $this->PageSizes[$this->page]=array($this->wPt, $this->hPt); -} - -function _endpage() -{ - $this->state=1; -} - -function _escape($s) -{ - //Escape special characters in strings - $s=str_replace('\\','\\\\',$s); - $s=str_replace('(','\\(',$s); - $s=str_replace(')','\\)',$s); - $s=str_replace("\r",'\\r',$s); - return $s; -} - -function _textstring($s) -{ - //Format a text string - return '('.$this->_escape($s).')'; -} - -function _UTF8toUTF16($s) -{ - //Convert UTF-8 to UTF-16BE with BOM - $res="\xFE\xFF"; - $nb=strlen($s); - $i=0; - while($i<$nb) - { - $c1=ord($s[$i++]); - if($c1>=224) - { - //3-byte character - $c2=ord($s[$i++]); - $c3=ord($s[$i++]); - $res.=chr((($c1 & 0x0F)<<4) + (($c2 & 0x3C)>>2)); - $res.=chr((($c2 & 0x03)<<6) + ($c3 & 0x3F)); - } - elseif($c1>=192) - { - //2-byte character - $c2=ord($s[$i++]); - $res.=chr(($c1 & 0x1C)>>2); - $res.=chr((($c1 & 0x03)<<6) + ($c2 & 0x3F)); - } - else - { - //Single-byte character - $res.="\0".chr($c1); - } - } - return $res; -} - -function _dounderline($x, $y, $txt) -{ - //Underline text - $up=$this->CurrentFont['up']; - $ut=$this->CurrentFont['ut']; - $w=$this->GetStringWidth($txt)+$this->ws*substr_count($txt,' '); - return sprintf('%.2F %.2F %.2F %.2F re f',$x*$this->k,($this->h-($y-$up/1000*$this->FontSize))*$this->k,$w*$this->k,-$ut/1000*$this->FontSizePt); -} - -function _parsejpg($file) -{ - //Extract info from a JPEG file - $a=GetImageSize($file); - if(!$a) - $this->Error('Missing or incorrect image file: '.$file); - if($a[2]!=2) - $this->Error('Not a JPEG file: '.$file); - if(!isset($a['channels']) || $a['channels']==3) - $colspace='DeviceRGB'; - elseif($a['channels']==4) - $colspace='DeviceCMYK'; - else - $colspace='DeviceGray'; - $bpc=isset($a['bits']) ? $a['bits'] : 8; - //Read whole file - $f=fopen($file,'rb'); - $data=''; - while(!feof($f)) - $data.=fread($f,8192); - fclose($f); - return array('w'=>$a[0], 'h'=>$a[1], 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'DCTDecode', 'data'=>$data); -} - -function _parsepng($file) -{ - //Extract info from a PNG file - $f=fopen($file,'rb'); - if(!$f) - $this->Error('Can\'t open image file: '.$file); - //Check signature - if($this->_readstream($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) - $this->Error('Not a PNG file: '.$file); - //Read header chunk - $this->_readstream($f,4); - if($this->_readstream($f,4)!='IHDR') - $this->Error('Incorrect PNG file: '.$file); - $w=$this->_readint($f); - $h=$this->_readint($f); - $bpc=ord($this->_readstream($f,1)); - if($bpc>8) - $this->Error('16-bit depth not supported: '.$file); - $ct=ord($this->_readstream($f,1)); - if($ct==0) - $colspace='DeviceGray'; - elseif($ct==2) - $colspace='DeviceRGB'; - elseif($ct==3) - $colspace='Indexed'; - else - $this->Error('Alpha channel not supported: '.$file); - if(ord($this->_readstream($f,1))!=0) - $this->Error('Unknown compression method: '.$file); - if(ord($this->_readstream($f,1))!=0) - $this->Error('Unknown filter method: '.$file); - if(ord($this->_readstream($f,1))!=0) - $this->Error('Interlacing not supported: '.$file); - $this->_readstream($f,4); - $parms='/DecodeParms <</Predictor 15 /Colors '.($ct==2 ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w.'>>'; - //Scan chunks looking for palette, transparency and image data - $pal=''; - $trns=''; - $data=''; - do - { - $n=$this->_readint($f); - $type=$this->_readstream($f,4); - if($type=='PLTE') - { - //Read palette - $pal=$this->_readstream($f,$n); - $this->_readstream($f,4); - } - elseif($type=='tRNS') - { - //Read transparency info - $t=$this->_readstream($f,$n); - if($ct==0) - $trns=array(ord(substr($t,1,1))); - elseif($ct==2) - $trns=array(ord(substr($t,1,1)), ord(substr($t,3,1)), ord(substr($t,5,1))); - else - { - $pos=strpos($t,chr(0)); - if($pos!==false) - $trns=array($pos); - } - $this->_readstream($f,4); - } - elseif($type=='IDAT') - { - //Read image data block - $data.=$this->_readstream($f,$n); - $this->_readstream($f,4); - } - elseif($type=='IEND') - break; - else - $this->_readstream($f,$n+4); - } - while($n); - if($colspace=='Indexed' && empty($pal)) - $this->Error('Missing palette in '.$file); - fclose($f); - return array('w'=>$w, 'h'=>$h, 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'FlateDecode', 'parms'=>$parms, 'pal'=>$pal, 'trns'=>$trns, 'data'=>$data); -} - -function _readstream($f, $n) -{ - //Read n bytes from stream - $res=''; - while($n>0 && !feof($f)) - { - $s=fread($f,$n); - if($s===false) - $this->Error('Error while reading stream'); - $n-=strlen($s); - $res.=$s; - } - if($n>0) - $this->Error('Unexpected end of stream'); - return $res; -} - -function _readint($f) -{ - //Read a 4-byte integer from stream - $a=unpack('Ni',$this->_readstream($f,4)); - return $a['i']; -} - -function _parsegif($file) -{ - //Extract info from a GIF file (via PNG conversion) - if(!function_exists('imagepng')) - $this->Error('GD extension is required for GIF support'); - if(!function_exists('imagecreatefromgif')) - $this->Error('GD has no GIF read support'); - $im=imagecreatefromgif($file); - if(!$im) - $this->Error('Missing or incorrect image file: '.$file); - imageinterlace($im,0); - $tmp=tempnam('.','gif'); - if(!$tmp) - $this->Error('Unable to create a temporary file'); - if(!imagepng($im,$tmp)) - $this->Error('Error while saving to temporary file'); - imagedestroy($im); - $info=$this->_parsepng($tmp); - unlink($tmp); - return $info; -} - -function _newobj() -{ - //Begin a new object - $this->n++; - $this->offsets[$this->n]=strlen($this->buffer); - $this->_out($this->n.' 0 obj'); -} - -function _putstream($s) -{ - $this->_out('stream'); - $this->_out($s); - $this->_out('endstream'); -} - -function _out($s) -{ - //Add a line to the document - if($this->state==2) - $this->pages[$this->page].=$s."\n"; - else - $this->buffer.=$s."\n"; -} - -function _putpages() -{ - $nb=$this->page; - if(!empty($this->AliasNbPages)) - { - //Replace number of pages - for($n=1;$n<=$nb;$n++) - $this->pages[$n]=str_replace($this->AliasNbPages,$nb,$this->pages[$n]); - } - if($this->DefOrientation=='P') - { - $wPt=$this->DefPageFormat[0]*$this->k; - $hPt=$this->DefPageFormat[1]*$this->k; - } - else - { - $wPt=$this->DefPageFormat[1]*$this->k; - $hPt=$this->DefPageFormat[0]*$this->k; - } - $filter=($this->compress) ? '/Filter /FlateDecode ' : ''; - for($n=1;$n<=$nb;$n++) - { - //Page - $this->_newobj(); - $this->_out('<</Type /Page'); - $this->_out('/Parent 1 0 R'); - if(isset($this->PageSizes[$n])) - $this->_out(sprintf('/MediaBox [0 0 %.2F %.2F]',$this->PageSizes[$n][0],$this->PageSizes[$n][1])); - $this->_out('/Resources 2 0 R'); - if(isset($this->PageLinks[$n])) - { - //Links - $annots='/Annots ['; - foreach($this->PageLinks[$n] as $pl) - { - $rect=sprintf('%.2F %.2F %.2F %.2F',$pl[0],$pl[1],$pl[0]+$pl[2],$pl[1]-$pl[3]); - $annots.='<</Type /Annot /Subtype /Link /Rect ['.$rect.'] /Border [0 0 0] '; - if(is_string($pl[4])) - $annots.='/A <</S /URI /URI '.$this->_textstring($pl[4]).'>>>>'; - else - { - $l=$this->links[$pl[4]]; - $h=isset($this->PageSizes[$l[0]]) ? $this->PageSizes[$l[0]][1] : $hPt; - $annots.=sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]>>',1+2*$l[0],$h-$l[1]*$this->k); - } - } - $this->_out($annots.']'); - } - $this->_out('/Contents '.($this->n+1).' 0 R>>'); - $this->_out('endobj'); - //Page content - $p=($this->compress) ? gzcompress($this->pages[$n]) : $this->pages[$n]; - $this->_newobj(); - $this->_out('<<'.$filter.'/Length '.strlen($p).'>>'); - $this->_putstream($p); - $this->_out('endobj'); - } - //Pages root - $this->offsets[1]=strlen($this->buffer); - $this->_out('1 0 obj'); - $this->_out('<</Type /Pages'); - $kids='/Kids ['; - for($i=0;$i<$nb;$i++) - $kids.=(3+2*$i).' 0 R '; - $this->_out($kids.']'); - $this->_out('/Count '.$nb); - $this->_out(sprintf('/MediaBox [0 0 %.2F %.2F]',$wPt,$hPt)); - $this->_out('>>'); - $this->_out('endobj'); -} - -function _putfonts() -{ - $nf=$this->n; - foreach($this->diffs as $diff) - { - //Encodings - $this->_newobj(); - $this->_out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$diff.']>>'); - $this->_out('endobj'); - } - foreach($this->FontFiles as $file=>$info) - { - //Font file embedding - $this->_newobj(); - $this->FontFiles[$file]['n']=$this->n; - $font=''; - $f=fopen($this->_getfontpath().$file,'rb',1); - if(!$f) - $this->Error('Font file not found'); - while(!feof($f)) - $font.=fread($f,8192); - fclose($f); - $compressed=(substr($file,-2)=='.z'); - if(!$compressed && isset($info['length2'])) - { - $header=(ord($font[0])==128); - if($header) - { - //Strip first binary header - $font=substr($font,6); - } - if($header && ord($font[$info['length1']])==128) - { - //Strip second binary header - $font=substr($font,0,$info['length1']).substr($font,$info['length1']+6); - } - } - $this->_out('<</Length '.strlen($font)); - if($compressed) - $this->_out('/Filter /FlateDecode'); - $this->_out('/Length1 '.$info['length1']); - if(isset($info['length2'])) - $this->_out('/Length2 '.$info['length2'].' /Length3 0'); - $this->_out('>>'); - $this->_putstream($font); - $this->_out('endobj'); - } - foreach($this->fonts as $k=>$font) - { - //Font objects - $this->fonts[$k]['n']=$this->n+1; - $type=$font['type']; - $name=$font['name']; - if($type=='core') - { - //Standard font - $this->_newobj(); - $this->_out('<</Type /Font'); - $this->_out('/BaseFont /'.$name); - $this->_out('/Subtype /Type1'); - if($name!='Symbol' && $name!='ZapfDingbats') - $this->_out('/Encoding /WinAnsiEncoding'); - $this->_out('>>'); - $this->_out('endobj'); - } - elseif($type=='Type1' || $type=='TrueType') - { - //Additional Type1 or TrueType font - $this->_newobj(); - $this->_out('<</Type /Font'); - $this->_out('/BaseFont /'.$name); - $this->_out('/Subtype /'.$type); - $this->_out('/FirstChar 32 /LastChar 255'); - $this->_out('/Widths '.($this->n+1).' 0 R'); - $this->_out('/FontDescriptor '.($this->n+2).' 0 R'); - if($font['enc']) - { - if(isset($font['diff'])) - $this->_out('/Encoding '.($nf+$font['diff']).' 0 R'); - else - $this->_out('/Encoding /WinAnsiEncoding'); - } - $this->_out('>>'); - $this->_out('endobj'); - //Widths - $this->_newobj(); - $cw=&$font['cw']; - $s='['; - for($i=32;$i<=255;$i++) - $s.=$cw[chr($i)].' '; - $this->_out($s.']'); - $this->_out('endobj'); - //Descriptor - $this->_newobj(); - $s='<</Type /FontDescriptor /FontName /'.$name; - foreach($font['desc'] as $k=>$v) - $s.=' /'.$k.' '.$v; - $file=$font['file']; - if($file) - $s.=' /FontFile'.($type=='Type1' ? '' : '2').' '.$this->FontFiles[$file]['n'].' 0 R'; - $this->_out($s.'>>'); - $this->_out('endobj'); - } - else - { - //Allow for additional types - $mtd='_put'.strtolower($type); - if(!method_exists($this,$mtd)) - $this->Error('Unsupported font type: '.$type); - $this->$mtd($font); - } - } -} - -function _putimages() -{ - $filter=($this->compress) ? '/Filter /FlateDecode ' : ''; - reset($this->images); - while(list($file,$info)=each($this->images)) - { - $this->_newobj(); - $this->images[$file]['n']=$this->n; - $this->_out('<</Type /XObject'); - $this->_out('/Subtype /Image'); - $this->_out('/Width '.$info['w']); - $this->_out('/Height '.$info['h']); - if($info['cs']=='Indexed') - $this->_out('/ColorSpace [/Indexed /DeviceRGB '.(strlen($info['pal'])/3-1).' '.($this->n+1).' 0 R]'); - else - { - $this->_out('/ColorSpace /'.$info['cs']); - if($info['cs']=='DeviceCMYK') - $this->_out('/Decode [1 0 1 0 1 0 1 0]'); - } - $this->_out('/BitsPerComponent '.$info['bpc']); - if(isset($info['f'])) - $this->_out('/Filter /'.$info['f']); - if(isset($info['parms'])) - $this->_out($info['parms']); - if(isset($info['trns']) && is_array($info['trns'])) - { - $trns=''; - for($i=0;$i<count($info['trns']);$i++) - $trns.=$info['trns'][$i].' '.$info['trns'][$i].' '; - $this->_out('/Mask ['.$trns.']'); - } - $this->_out('/Length '.strlen($info['data']).'>>'); - $this->_putstream($info['data']); - unset($this->images[$file]['data']); - $this->_out('endobj'); - //Palette - if($info['cs']=='Indexed') - { - $this->_newobj(); - $pal=($this->compress) ? gzcompress($info['pal']) : $info['pal']; - $this->_out('<<'.$filter.'/Length '.strlen($pal).'>>'); - $this->_putstream($pal); - $this->_out('endobj'); - } - } -} - -function _putxobjectdict() -{ - foreach($this->images as $image) - $this->_out('/I'.$image['i'].' '.$image['n'].' 0 R'); -} - -function _putresourcedict() -{ - $this->_out('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'); - $this->_out('/Font <<'); - foreach($this->fonts as $font) - $this->_out('/F'.$font['i'].' '.$font['n'].' 0 R'); - $this->_out('>>'); - $this->_out('/XObject <<'); - $this->_putxobjectdict(); - $this->_out('>>'); -} - -function _putresources() -{ - $this->_putfonts(); - $this->_putimages(); - //Resource dictionary - $this->offsets[2]=strlen($this->buffer); - $this->_out('2 0 obj'); - $this->_out('<<'); - $this->_putresourcedict(); - $this->_out('>>'); - $this->_out('endobj'); -} - -function _putinfo() -{ - $this->_out('/Producer '.$this->_textstring('FPDF '.FPDF_VERSION)); - if(!empty($this->title)) - $this->_out('/Title '.$this->_textstring($this->title)); - if(!empty($this->subject)) - $this->_out('/Subject '.$this->_textstring($this->subject)); - if(!empty($this->author)) - $this->_out('/Author '.$this->_textstring($this->author)); - if(!empty($this->keywords)) - $this->_out('/Keywords '.$this->_textstring($this->keywords)); - if(!empty($this->creator)) - $this->_out('/Creator '.$this->_textstring($this->creator)); - $this->_out('/CreationDate '.$this->_textstring('D:'.@date('YmdHis'))); -} - -function _putcatalog() -{ - $this->_out('/Type /Catalog'); - $this->_out('/Pages 1 0 R'); - if($this->ZoomMode=='fullpage') - $this->_out('/OpenAction [3 0 R /Fit]'); - elseif($this->ZoomMode=='fullwidth') - $this->_out('/OpenAction [3 0 R /FitH null]'); - elseif($this->ZoomMode=='real') - $this->_out('/OpenAction [3 0 R /XYZ null null 1]'); - elseif(!is_string($this->ZoomMode)) - $this->_out('/OpenAction [3 0 R /XYZ null null '.($this->ZoomMode/100).']'); - if($this->LayoutMode=='single') - $this->_out('/PageLayout /SinglePage'); - elseif($this->LayoutMode=='continuous') - $this->_out('/PageLayout /OneColumn'); - elseif($this->LayoutMode=='two') - $this->_out('/PageLayout /TwoColumnLeft'); -} - -function _putheader() -{ - $this->_out('%PDF-'.$this->PDFVersion); -} - -function _puttrailer() -{ - $this->_out('/Size '.($this->n+1)); - $this->_out('/Root '.$this->n.' 0 R'); - $this->_out('/Info '.($this->n-1).' 0 R'); -} - -function _enddoc() -{ - $this->_putheader(); - $this->_putpages(); - $this->_putresources(); - //Info - $this->_newobj(); - $this->_out('<<'); - $this->_putinfo(); - $this->_out('>>'); - $this->_out('endobj'); - //Catalog - $this->_newobj(); - $this->_out('<<'); - $this->_putcatalog(); - $this->_out('>>'); - $this->_out('endobj'); - //Cross-ref - $o=strlen($this->buffer); - $this->_out('xref'); - $this->_out('0 '.($this->n+1)); - $this->_out('0000000000 65535 f '); - for($i=1;$i<=$this->n;$i++) - $this->_out(sprintf('%010d 00000 n ',$this->offsets[$i])); - //Trailer - $this->_out('trailer'); - $this->_out('<<'); - $this->_puttrailer(); - $this->_out('>>'); - $this->_out('startxref'); - $this->_out($o); - $this->_out('%%EOF'); - $this->state=3; -} -//End of class -} - -//Handle special IE contype request -if(isset($_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_USER_AGENT']=='contype') -{ - header('Content-Type: application/pdf'); - exit; -} - -?> diff --git a/include/mpdf/classes/bmp.php b/include/mpdf/classes/bmp.php new file mode 100755 index 0000000000000000000000000000000000000000..acf7f808549104a003bcf9b180aee41b5b6bcfd8 --- /dev/null +++ b/include/mpdf/classes/bmp.php @@ -0,0 +1,248 @@ +<?php + +class bmp { + +var $mpdf = null; + +function bmp(&$mpdf) { + $this->mpdf = $mpdf; +} + + +function _getBMPimage($data, $file) { + $info = array(); + // Adapted from script by Valentin Schmidt + // http://staff.dasdeck.de/valentin/fpdf/fpdf_bmp/ + $bfOffBits=$this->_fourbytes2int_le(substr($data,10,4)); + $width=$this->_fourbytes2int_le(substr($data,18,4)); + $height=$this->_fourbytes2int_le(substr($data,22,4)); + $flip = ($height<0); + if ($flip) $height =-$height; + $biBitCount=$this->_twobytes2int_le(substr($data,28,2)); + $biCompression=$this->_fourbytes2int_le(substr($data,30,4)); + $info = array('w'=>$width, 'h'=>$height); + if ($biBitCount<16){ + $info['cs'] = 'Indexed'; + $info['bpc'] = $biBitCount; + $palStr = substr($data,54,($bfOffBits-54)); + $pal = ''; + $cnt = strlen($palStr)/4; + for ($i=0;$i<$cnt;$i++){ + $n = 4*$i; + $pal .= $palStr[$n+2].$palStr[$n+1].$palStr[$n]; + } + $info['pal'] = $pal; + } + else{ + $info['cs'] = 'DeviceRGB'; + $info['bpc'] = 8; + } + + if ($this->mpdf->restrictColorSpace==1 || $this->mpdf->PDFX || $this->mpdf->restrictColorSpace==3) { + if (($this->mpdf->PDFA && !$this->mpdf->PDFAauto) || ($this->mpdf->PDFX && !$this->mpdf->PDFXauto)) { $this->mpdf->PDFAXwarnings[] = "Image cannot be converted to suitable colour space for PDFA or PDFX file - ".$file." - (Image replaced by 'no-image'.)"; } + return array('error' => "BMP Image cannot be converted to suitable colour space - ".$file." - (Image replaced by 'no-image'.)"); + } + + $biXPelsPerMeter=$this->_fourbytes2int_le(substr($data,38,4)); // horizontal pixels per meter, usually set to zero + //$biYPelsPerMeter=$this->_fourbytes2int_le(substr($data,42,4)); // vertical pixels per meter, usually set to zero + $biXPelsPerMeter=round($biXPelsPerMeter/1000 *25.4); + //$biYPelsPerMeter=round($biYPelsPerMeter/1000 *25.4); + $info['set-dpi'] = $biXPelsPerMeter; + + switch ($biCompression){ + case 0: + $str = substr($data,$bfOffBits); + break; + case 1: # BI_RLE8 + $str = $this->rle8_decode(substr($data,$bfOffBits), $width); + break; + case 2: # BI_RLE4 + $str = $this->rle4_decode(substr($data,$bfOffBits), $width); + break; + } + $bmpdata = ''; + $padCnt = (4-ceil(($width/(8/$biBitCount)))%4)%4; + switch ($biBitCount){ + case 1: + case 4: + case 8: + $w = floor($width/(8/$biBitCount)) + ($width%(8/$biBitCount)?1:0); + $w_row = $w + $padCnt; + if ($flip){ + for ($y=0;$y<$height;$y++){ + $y0 = $y*$w_row; + for ($x=0;$x<$w;$x++) + $bmpdata .= $str[$y0+$x]; + } + }else{ + for ($y=$height-1;$y>=0;$y--){ + $y0 = $y*$w_row; + for ($x=0;$x<$w;$x++) + $bmpdata .= $str[$y0+$x]; + } + } + break; + + case 16: + $w_row = $width*2 + $padCnt; + if ($flip){ + for ($y=0;$y<$height;$y++){ + $y0 = $y*$w_row; + for ($x=0;$x<$width;$x++){ + $n = (ord( $str[$y0 + 2*$x + 1])*256 + ord( $str[$y0 + 2*$x])); + $b = ($n & 31)<<3; $g = ($n & 992)>>2; $r = ($n & 31744)>>7128; + $bmpdata .= chr($r) . chr($g) . chr($b); + } + } + }else{ + for ($y=$height-1;$y>=0;$y--){ + $y0 = $y*$w_row; + for ($x=0;$x<$width;$x++){ + $n = (ord( $str[$y0 + 2*$x + 1])*256 + ord( $str[$y0 + 2*$x])); + $b = ($n & 31)<<3; $g = ($n & 992)>>2; $r = ($n & 31744)>>7; + $bmpdata .= chr($r) . chr($g) . chr($b); + } + } + } + break; + + case 24: + case 32: + $byteCnt = $biBitCount/8; + $w_row = $width*$byteCnt + $padCnt; + + if ($flip){ + for ($y=0;$y<$height;$y++){ + $y0 = $y*$w_row; + for ($x=0;$x<$width;$x++){ + $i = $y0 + $x*$byteCnt ; # + 1 + $bmpdata .= $str[$i+2].$str[$i+1].$str[$i]; + } + } + }else{ + for ($y=$height-1;$y>=0;$y--){ + $y0 = $y*$w_row; + for ($x=0;$x<$width;$x++){ + $i = $y0 + $x*$byteCnt ; # + 1 + $bmpdata .= $str[$i+2].$str[$i+1].$str[$i]; + } + } + } + break; + + default: + return array('error' => 'Error parsing BMP image - Unsupported image biBitCount'); + } + if ($this->mpdf->compress) { + $bmpdata=gzcompress($bmpdata); + $info['f']='FlateDecode'; + } + $info['data']=$bmpdata; + $info['type']='bmp'; + return $info; +} + +function _fourbytes2int_le($s) { + //Read a 4-byte integer from string + return (ord($s[3])<<24) + (ord($s[2])<<16) + (ord($s[1])<<8) + ord($s[0]); +} + +function _twobytes2int_le($s) { + //Read a 2-byte integer from string + return (ord(substr($s, 1, 1))<<8) + ord(substr($s, 0, 1)); +} + + +# Decoder for RLE8 compression in windows bitmaps +# see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_6x0u.asp +function rle8_decode ($str, $width){ + $lineWidth = $width + (3 - ($width-1) % 4); + $out = ''; + $cnt = strlen($str); + for ($i=0;$i<$cnt;$i++){ + $o = ord($str[$i]); + switch ($o){ + case 0: # ESCAPE + $i++; + switch (ord($str[$i])){ + case 0: # NEW LINE + $padCnt = $lineWidth - strlen($out)%$lineWidth; + if ($padCnt<$lineWidth) $out .= str_repeat(chr(0), $padCnt); # pad line + break; + case 1: # END OF FILE + $padCnt = $lineWidth - strlen($out)%$lineWidth; + if ($padCnt<$lineWidth) $out .= str_repeat(chr(0), $padCnt); # pad line + break 3; + case 2: # DELTA + $i += 2; + break; + default: # ABSOLUTE MODE + $num = ord($str[$i]); + for ($j=0;$j<$num;$j++) + $out .= $str[++$i]; + if ($num % 2) $i++; + } + break; + default: + $out .= str_repeat($str[++$i], $o); + } + } + return $out; +} + +# Decoder for RLE4 compression in windows bitmaps +# see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_6x0u.asp +function rle4_decode ($str, $width){ + $w = floor($width/2) + ($width % 2); + $lineWidth = $w + (3 - ( ($width-1) / 2) % 4); + $pixels = array(); + $cnt = strlen($str); + for ($i=0;$i<$cnt;$i++){ + $o = ord($str[$i]); + switch ($o){ + case 0: # ESCAPE + $i++; + switch (ord($str[$i])){ + case 0: # NEW LINE + while (count($pixels)%$lineWidth!=0) + $pixels[]=0; + break; + case 1: # END OF FILE + while (count($pixels)%$lineWidth!=0) + $pixels[]=0; + break 3; + case 2: # DELTA + $i += 2; + break; + default: # ABSOLUTE MODE + $num = ord($str[$i]); + for ($j=0;$j<$num;$j++){ + if ($j%2==0){ + $c = ord($str[++$i]); + $pixels[] = ($c & 240)>>4; + } else + $pixels[] = $c & 15; + } + if ($num % 2) $i++; + } + break; + default: + $c = ord($str[++$i]); + for ($j=0;$j<$o;$j++) + $pixels[] = ($j%2==0 ? ($c & 240)>>4 : $c & 15); + } + } + + $out = ''; + if (count($pixels)%2) $pixels[]=0; + $cnt = count($pixels)/2; + for ($i=0;$i<$cnt;$i++) + $out .= chr(16*$pixels[2*$i] + $pixels[2*$i+1]); + return $out; +} + + + +} + +?> \ No newline at end of file diff --git a/include/mpdf/classes/cssmgr.php b/include/mpdf/classes/cssmgr.php new file mode 100755 index 0000000000000000000000000000000000000000..c6eff8e9eafdd3d1a377c89e74c90c9252c10c14 --- /dev/null +++ b/include/mpdf/classes/cssmgr.php @@ -0,0 +1,1566 @@ +<?php + +class cssmgr { + +var $mpdf = null; + +var $tablecascadeCSS; +var $listcascadeCSS; +var $cascadeCSS; +var $CSS; +var $tbCSSlvl; +var $listCSSlvl; + + +function cssmgr(&$mpdf) { + $this->mpdf = $mpdf; + $this->tablecascadeCSS = array(); + $this->listcascadeCSS = array(); + $this->CSS=array(); + $this->cascadeCSS = array(); + $this->tbCSSlvl = 0; + $this->listCSSlvl = 0; +} + + +function ReadDefaultCSS($CSSstr) { + $CSS = array(); + $CSSstr = preg_replace('|/\*.*?\*/|s',' ',$CSSstr); + $CSSstr = preg_replace('/[\s\n\r\t\f]/s',' ',$CSSstr); + $CSSstr = preg_replace('/(<\!\-\-|\-\->)/s',' ',$CSSstr); + if ($CSSstr ) { + preg_match_all('/(.*?)\{(.*?)\}/',$CSSstr,$styles); + for($i=0; $i < count($styles[1]) ; $i++) { + $stylestr= trim($styles[2][$i]); + $stylearr = explode(';',$stylestr); + foreach($stylearr AS $sta) { + if (trim($sta)) { + // Changed to allow style="background: url('http://www.bpm1.com/bg.jpg')" + list($property,$value) = explode(':',$sta,2); + $property = trim($property); + $value = preg_replace('/\s*!important/i','',$value); + $value = trim($value); + if ($property && ($value || $value==='0')) { + $classproperties[strtoupper($property)] = $value; + } + } + } + $classproperties = $this->fixCSS($classproperties); + $tagstr = strtoupper(trim($styles[1][$i])); + $tagarr = explode(',',$tagstr); + foreach($tagarr AS $tg) { + $tags = preg_split('/\s+/',trim($tg)); + $level = count($tags); + if ($level == 1) { // e.g. p or .class or #id or p.class or p#id + $t = trim($tags[0]); + if ($t) { + $tag = ''; + if (preg_match('/^('.$this->mpdf->allowedCSStags.')$/',$t)) { $tag= $t; } + if ($this->CSS[$tag] && $tag) { $CSS[$tag] = $this->array_merge_recursive_unique($CSS[$tag], $classproperties); } + else if ($tag) { $CSS[$tag] = $classproperties; } + } + } + } + $properties = array(); + $values = array(); + $classproperties = array(); + } + + } // end of if + return $CSS; +} + + + +function ReadCSS($html) { + preg_match_all('/<style[^>]*media=["\']([^"\'>]*)["\'].*?<\/style>/is',$html,$m); + for($i=0; $i<count($m[0]); $i++) { + if ($this->mpdf->CSSselectMedia && !preg_match('/('.trim($this->mpdf->CSSselectMedia).'|all)/i',$m[1][$i])) { + $html = preg_replace('/'.preg_quote($m[0][$i],'/').'/','',$html); + } + } + preg_match_all('/<link[^>]*media=["\']([^"\'>]*)["\'].*?>/is',$html,$m); + for($i=0; $i<count($m[0]); $i++) { + if ($this->mpdf->CSSselectMedia && !preg_match('/('.trim($this->mpdf->CSSselectMedia).'|all)/i',$m[1][$i])) { + $html = preg_replace('/'.preg_quote($m[0][$i],'/').'/','',$html); + } + } + + // mPDF 5.5.02 + // Remove Comment tags <!-- ... --> inside CSS as <style> in HTML document + // Remove Comment tags /* ... */ inside CSS as <style> in HTML document + // But first, we replace upper and mixed case closing style tag with lower + // case so we can use str_replace later. + preg_replace('/<\/style>/i', '</style>', $html); + preg_match_all('/<style.*?>(.*?)<\/style>/si',$html,$m); + if (count($m[1])) { + for($i=0;$i<count($m[1]);$i++) { + // Remove comment tags + $sub = preg_replace('/(<\!\-\-|\-\->)/s',' ',$m[1][$i]); + $sub = '>'.preg_replace('|/\*.*?\*/|s',' ',$sub).'</style>'; + $html = str_replace('>'.$m[1][$i].'</style>', $sub, $html); + } + } + + + $html = preg_replace('/<!--mpdf/i','',$html); + $html = preg_replace('/mpdf-->/i','',$html); + $html = preg_replace('/<\!\-\-.*?\-\->/s',' ',$html); + + $match = 0; // no match for instance + $regexp = ''; // This helps debugging: showing what is the REAL string being processed + $CSSext = array(); + + //CSS inside external files + $regexp = '/<link[^>]*rel=["\']stylesheet["\'][^>]*href=["\']([^>"\']*)["\'].*?>/si'; + $x = preg_match_all($regexp,$html,$cxt); + if ($x) { + $match += $x; + $CSSext = $cxt[1]; + } + + $regexp = '/<link[^>]*href=["\']([^>"\']*)["\'][^>]*?rel=["\']stylesheet["\'].*?>/si'; + $x = preg_match_all($regexp,$html,$cxt); + if ($x) { + $match += $x; + $CSSext = array_merge($CSSext,$cxt[1]); + } + + // look for @import stylesheets + //$regexp = '/@import url\([\'\"]{0,1}([^\)]*?\.css)[\'\"]{0,1}\)/si'; + $regexp = '/@import url\([\'\"]{0,1}([^\)]*?\.css(\?\S+)?)[\'\"]{0,1}\)/si'; + $x = preg_match_all($regexp,$html,$cxt); + if ($x) { + $match += $x; + $CSSext = array_merge($CSSext,$cxt[1]); + } + + // look for @import without the url() + //$regexp = '/@import [\'\"]{0,1}([^;]*?\.css)[\'\"]{0,1}/si'; + $regexp = '/@import [\'\"]{0,1}([^;]*?\.css(\?\S+)?)[\'\"]{0,1}/si'; + $x = preg_match_all($regexp,$html,$cxt); + if ($x) { + $match += $x; + $CSSext = array_merge($CSSext,$cxt[1]); + } + + $ind = 0; + $CSSstr = ''; + + if (!is_array($this->cascadeCSS)) $this->cascadeCSS = array(); + + while($match){ + $path = $CSSext[$ind]; + $this->mpdf->GetFullPath($path); + $CSSextblock = $this->mpdf->_get_file($path); + if ($CSSextblock) { + // look for embedded @import stylesheets in other stylesheets + // and fix url paths (including background-images) relative to stylesheet + //$regexpem = '/@import url\([\'\"]{0,1}(.*?\.css)[\'\"]{0,1}\)/si'; + $regexpem = '/@import url\([\'\"]{0,1}(.*?\.css(\?\S+)?)[\'\"]{0,1}\)/si'; + $xem = preg_match_all($regexpem,$CSSextblock,$cxtem); + $cssBasePath = preg_replace('/\/[^\/]*$/','',$path) . '/'; + if ($xem) { + foreach($cxtem[1] AS $cxtembedded) { + // path is relative to original stlyesheet!! + $this->mpdf->GetFullPath($cxtembedded, $cssBasePath ); + $match++; + $CSSext[] = $cxtembedded; + } + } + $regexpem = '/(background[^;]*url\s*\(\s*[\'\"]{0,1})([^\)\'\"]*)([\'\"]{0,1}\s*\))/si'; + $xem = preg_match_all($regexpem,$CSSextblock,$cxtem); + if ($xem) { + for ($i=0;$i<count($cxtem[0]);$i++) { + // path is relative to original stlyesheet!! + $embedded = $cxtem[2][$i]; + if (!preg_match('/^data:image/i', $embedded)) { // mPDF 5.5.13 + $this->mpdf->GetFullPath($embedded, $cssBasePath ); + $CSSextblock = preg_replace('/'.preg_quote($cxtem[0][$i],'/').'/', ($cxtem[1][$i].$embedded.$cxtem[3][$i]), $CSSextblock); + } + } + } + $CSSstr .= ' '.$CSSextblock; + } + $match--; + $ind++; + } //end of match + + $match = 0; // reset value, if needed + // CSS as <style> in HTML document + $regexp = '/<style.*?>(.*?)<\/style>/si'; + $match = preg_match_all($regexp,$html,$CSSblock); + if ($match) { + $tmpCSSstr = implode(' ',$CSSblock[1]); + $regexpem = '/(background[^;]*url\s*\(\s*[\'\"]{0,1})([^\)\'\"]*)([\'\"]{0,1}\s*\))/si'; + $xem = preg_match_all($regexpem,$tmpCSSstr ,$cxtem); + if ($xem) { + for ($i=0;$i<count($cxtem[0]);$i++) { + $embedded = $cxtem[2][$i]; + if (!preg_match('/^data:image/i', $embedded)) { // mPDF 5.5.13 + $this->mpdf->GetFullPath($embedded); + $tmpCSSstr = preg_replace('/'.preg_quote($cxtem[0][$i],'/').'/', ($cxtem[1][$i].$embedded.$cxtem[3][$i]), $tmpCSSstr ); + } + } + } + $CSSstr .= ' '.$tmpCSSstr; + } + // Remove comments + $CSSstr = preg_replace('|/\*.*?\*/|s',' ',$CSSstr); + $CSSstr = preg_replace('/[\s\n\r\t\f]/s',' ',$CSSstr); + + if (preg_match('/@media/',$CSSstr)) { + preg_match_all('/@media(.*?)\{(([^\{\}]*\{[^\{\}]*\})+)\s*\}/is',$CSSstr,$m); + for($i=0; $i<count($m[0]); $i++) { + if ($this->mpdf->CSSselectMedia && !preg_match('/('.trim($this->mpdf->CSSselectMedia).'|all)/i',$m[1][$i])) { + $CSSstr = preg_replace('/'.preg_quote($m[0][$i],'/').'/','',$CSSstr); + } + else { + $CSSstr = preg_replace('/'.preg_quote($m[0][$i],'/').'/',' '.$m[2][$i].' ',$CSSstr); + } + } + } + + // mPDF 5.5.13 + // Replace any background: url(data:image... with temporary image file reference + preg_match_all("/(url\(data:image\/(jpeg|gif|png);base64,(.*)\))/si", $CSSstr, $idata); + if (count($idata[0])) { + for($i=0;$i<count($idata[0]);$i++) { + $file = _MPDF_TEMP_PATH.'_tempCSSidata'.RAND(1,10000).'_'.$i.'.'.$idata[2][$i]; + //Save to local file + file_put_contents($file, base64_decode($idata[3][$i])); + // $this->mpdf->GetFullPath($file); // ? is this needed - NO mPDF 5.6.03 + $CSSstr = str_replace($idata[0][$i], 'url("'.$file.'")', $CSSstr); // mPDF 5.5.17 + } + } + + $CSSstr = preg_replace('/(<\!\-\-|\-\->)/s',' ',$CSSstr); + if ($CSSstr ) { + preg_match_all('/(.*?)\{(.*?)\}/',$CSSstr,$styles); + for($i=0; $i < count($styles[1]) ; $i++) { + // SET array e.g. $classproperties['COLOR'] = '#ffffff'; + $stylestr= trim($styles[2][$i]); + $stylearr = explode(';',$stylestr); + foreach($stylearr AS $sta) { + if (trim($sta)) { + // Changed to allow style="background: url('http://www.bpm1.com/bg.jpg')" + list($property,$value) = explode(':',$sta,2); + $property = trim($property); + $value = preg_replace('/\s*!important/i','',$value); + $value = trim($value); + if ($property && ($value || $value==='0')) { + // Ignores -webkit-gradient so doesn't override -moz- + if ((strtoupper($property)=='BACKGROUND-IMAGE' || strtoupper($property)=='BACKGROUND') && preg_match('/-webkit-gradient/i',$value)) { + continue; + } + $classproperties[strtoupper($property)] = $value; + } + } + } + $classproperties = $this->fixCSS($classproperties); + $tagstr = strtoupper(trim($styles[1][$i])); + $tagarr = explode(',',$tagstr); + $pageselectors = false; // used to turn on $this->mpdf->mirrorMargins + foreach($tagarr AS $tg) { + $tags = preg_split('/\s+/',trim($tg)); + $level = count($tags); + $t = ''; + $t2 = ''; + $t3 = ''; + if (trim($tags[0])=='@PAGE') { + if (isset($tags[0])) { $t = trim($tags[0]); } + if (isset($tags[1])) { $t2 = trim($tags[1]); } + if (isset($tags[2])) { $t3 = trim($tags[2]); } + $tag = ''; + if ($level==1) { $tag = $t; } + else if ($level==2 && preg_match('/^[:](.*)$/',$t2,$m)) { + $tag = $t.'>>PSEUDO>>'.$m[1]; + if ($m[1]=='LEFT' || $m[1]=='RIGHT') { $pageselectors = true; } // used to turn on $this->mpdf->mirrorMargins + } + else if ($level==2) { $tag = $t.'>>NAMED>>'.$t2; } + else if ($level==3 && preg_match('/^[:](.*)$/',$t3,$m)) { + $tag = $t.'>>NAMED>>'.$t2.'>>PSEUDO>>'.$m[1]; + if ($m[1]=='LEFT' || $m[1]=='RIGHT') { $pageselectors = true; } // used to turn on $this->mpdf->mirrorMargins + } + if (isset($this->CSS[$tag]) && $tag) { $this->CSS[$tag] = $this->array_merge_recursive_unique($this->CSS[$tag], $classproperties); } + else if ($tag) { $this->CSS[$tag] = $classproperties; } + } + + else if ($level == 1) { // e.g. p or .class or #id or p.class or p#id + if (isset($tags[0])) { $t = trim($tags[0]); } + if ($t) { + $tag = ''; + if (preg_match('/^[.](.*)$/',$t,$m)) { $tag = 'CLASS>>'.$m[1]; } + else if (preg_match('/^[#](.*)$/',$t,$m)) { $tag = 'ID>>'.$m[1]; } + else if (preg_match('/^('.$this->mpdf->allowedCSStags.')[.](.*)$/',$t,$m)) { $tag = $m[1].'>>CLASS>>'.$m[2]; } + else if (preg_match('/^('.$this->mpdf->allowedCSStags.')\s*:NTH-CHILD\((.*)\)$/',$t,$m)) { $tag = $m[1].'>>SELECTORNTHCHILD>>'.$m[2]; } + else if (preg_match('/^('.$this->mpdf->allowedCSStags.')[#](.*)$/',$t,$m)) { $tag = $m[1].'>>ID>>'.$m[2]; } + else if (preg_match('/^('.$this->mpdf->allowedCSStags.')$/',$t)) { $tag= $t; } + if (isset($this->CSS[$tag]) && $tag) { $this->CSS[$tag] = $this->array_merge_recursive_unique($this->CSS[$tag], $classproperties); } + else if ($tag) { $this->CSS[$tag] = $classproperties; } + } + } + else { + $tmp = array(); + for($n=0;$n<$level;$n++) { + if (isset($tags[$n])) { $t = trim($tags[$n]); } + else { $t = ''; } + if ($t) { + $tag = ''; + if (preg_match('/^[.](.*)$/',$t,$m)) { $tag = 'CLASS>>'.$m[1]; } + else if (preg_match('/^[#](.*)$/',$t,$m)) { $tag = 'ID>>'.$m[1]; } + else if (preg_match('/^('.$this->mpdf->allowedCSStags.')[.](.*)$/',$t,$m)) { $tag = $m[1].'>>CLASS>>'.$m[2]; } + else if (preg_match('/^('.$this->mpdf->allowedCSStags.')\s*:NTH-CHILD\((.*)\)$/',$t,$m)) { $tag = $m[1].'>>SELECTORNTHCHILD>>'.$m[2]; } + else if (preg_match('/^('.$this->mpdf->allowedCSStags.')[#](.*)$/',$t,$m)) { $tag = $m[1].'>>ID>>'.$m[2]; } + else if (preg_match('/^('.$this->mpdf->allowedCSStags.')$/',$t)) { $tag= $t; } + + if ($tag) $tmp[] = $tag; + else { break; } + } + } + + if ($tag) { + $x = &$this->cascadeCSS; + foreach($tmp AS $tp) { $x = &$x[$tp]; } + $x = $this->array_merge_recursive_unique($x, $classproperties); + $x['depth'] = $level; + } + } + } + if ($pageselectors) { $this->mpdf->mirrorMargins = true; } + $properties = array(); + $values = array(); + $classproperties = array(); + } + } // end of if + //Remove CSS (tags and content), if any + $regexp = '/<style.*?>(.*?)<\/style>/si'; // it can be <style> or <style type="txt/css"> + $html = preg_replace($regexp,'',$html); +//print_r($this->CSS); exit; +//print_r($this->cascadeCSS); exit; + return $html; +} + + + +function readInlineCSS($html) { + //Fix incomplete CSS code + $size = strlen($html)-1; + if (substr($html,$size,1) != ';') $html .= ';'; + //Make CSS[Name-of-the-class] = array(key => value) + $regexp = '|\\s*?(\\S+?):(.+?);|i'; + preg_match_all( $regexp, $html, $styleinfo); + $properties = $styleinfo[1]; + $values = $styleinfo[2]; + //Array-properties and Array-values must have the SAME SIZE! + $classproperties = array(); + for($i = 0; $i < count($properties) ; $i++) { + // Ignores -webkit-gradient so doesn't override -moz- + if ((strtoupper($properties[$i])=='BACKGROUND-IMAGE' || strtoupper($properties[$i])=='BACKGROUND') && preg_match('/-webkit-gradient/i',$values[$i])) { + continue; + } + $classproperties[strtoupper($properties[$i])] = trim($values[$i]); + } + return $this->fixCSS($classproperties); +} + + + +function _fix_borderStr($bd) { + preg_match_all("/\((.*?)\)/", $bd, $m); + if (count($m[1])) { + for($i=0;$i<count($m[1]);$i++) { + $sub = preg_replace("/ /", "", $m[1][$i]); + $bd = preg_replace('/'.preg_quote($m[1][$i], '/').'/si', $sub, $bd); + } + } + + $prop = preg_split('/\s+/',trim($bd)); + $w = 'medium'; + $c = '#000000'; + $s = 'none'; + + if ( count($prop) == 1 ) { + // solid + if (in_array($prop[0],$this->mpdf->borderstyles) || $prop[0] == 'none' || $prop[0] == 'hidden' ) { $s = $prop[0]; } + // #000000 + else if (is_array($this->mpdf->ConvertColor($prop[0]))) { $c = $prop[0]; } + // 1px + else { $w = $prop[0]; } + } + else if (count($prop) == 2 ) { + // 1px solid + if (in_array($prop[1],$this->mpdf->borderstyles) || $prop[1] == 'none' || $prop[1] == 'hidden' ) { $w = $prop[0]; $s = $prop[1]; } + // solid #000000 + else if (in_array($prop[0],$this->mpdf->borderstyles) || $prop[0] == 'none' || $prop[0] == 'hidden' ) { $s = $prop[0]; $c = $prop[1]; } + // 1px #000000 + else { $w = $prop[0]; $c = $prop[1]; } + } + else if ( count($prop) == 3 ) { + // Change #000000 1px solid to 1px solid #000000 (proper) + if (substr($prop[0],0,1) == '#') { $c = $prop[0]; $w = $prop[1]; $s = $prop[2]; } + // Change solid #000000 1px to 1px solid #000000 (proper) + else if (substr($prop[0],1,1) == '#') { $s = $prop[0]; $c = $prop[1]; $w = $prop[2]; } + // Change solid 1px #000000 to 1px solid #000000 (proper) + else if (in_array($prop[0],$this->mpdf->borderstyles) || $prop[0] == 'none' || $prop[0] == 'hidden' ) { + $s = $prop[0]; $w = $prop[1]; $c = $prop[2]; + } + else { $w = $prop[0]; $s = $prop[1]; $c = $prop[2]; } + } + else { return ''; } + $s = strtolower($s); + return $w.' '.$s.' '.$c; +} + + + +function fixCSS($prop) { + if (!is_array($prop) || (count($prop)==0)) return array(); + $newprop = array(); + foreach($prop AS $k => $v) { + if ($k != 'BACKGROUND-IMAGE' && $k != 'BACKGROUND' && $k != 'ODD-HEADER-NAME' && $k != 'EVEN-HEADER-NAME' && $k != 'ODD-FOOTER-NAME' && $k != 'EVEN-FOOTER-NAME' && $k != 'HEADER' && $k != 'FOOTER') { + $v = strtolower($v); + } + + if ($k == 'FONT') { + $s = trim($v); + preg_match_all('/\"(.*?)\"/',$s,$ff); + if (count($ff[1])) { + foreach($ff[1] AS $ffp) { + $w = preg_split('/\s+/',$ffp); + $s = preg_replace('/\"'.$ffp.'\"/',$w[0],$s); + } + } + preg_match_all('/\'(.*?)\'/',$s,$ff); + if (count($ff[1])) { + foreach($ff[1] AS $ffp) { + $w = preg_split('/\s+/',$ffp); + $s = preg_replace('/\''.$ffp.'\'/',$w[0],$s); + } + } + $s = preg_replace('/\s*,\s*/',',',$s); + $bits = preg_split('/\s+/',$s); + if (count($bits)>1) { + $k = 'FONT-FAMILY'; $v = $bits[(count($bits)-1)]; + $fs = $bits[(count($bits)-2)]; + if (preg_match('/(.*?)\/(.*)/',$fs, $fsp)) { + $newprop['FONT-SIZE'] = $fsp[1]; + $newprop['LINE-HEIGHT'] = $fsp[2]; + } + else { $newprop['FONT-SIZE'] = $fs; } + if (preg_match('/(italic|oblique)/i',$s)) { $newprop['FONT-STYLE'] = 'italic'; } + else { $newprop['FONT-STYLE'] = 'normal'; } + if (preg_match('/bold/i',$s)) { $newprop['FONT-WEIGHT'] = 'bold'; } + else { $newprop['FONT-WEIGHT'] = 'normal'; } + if (preg_match('/small-caps/i',$s)) { $newprop['TEXT-TRANSFORM'] = 'uppercase'; } + } + } + if ($k == 'FONT-FAMILY') { + $aux_fontlist = explode(",",$v); + $found = 0; + foreach($aux_fontlist AS $f) { + $fonttype = trim($f); + $fonttype = preg_replace('/["\']*(.*?)["\']*/','\\1',$fonttype); + $fonttype = preg_replace('/ /','',$fonttype); + $v = strtolower(trim($fonttype)); + if (isset($this->mpdf->fonttrans[$v]) && $this->mpdf->fonttrans[$v]) { $v = $this->mpdf->fonttrans[$v]; } + if ((!$this->mpdf->onlyCoreFonts && in_array($v,$this->mpdf->available_unifonts)) || + in_array($v,array('ccourier','ctimes','chelvetica')) || + ($this->mpdf->onlyCoreFonts && in_array($v,array('courier','times','helvetica','arial'))) || + in_array($v, array('sjis','uhc','big5','gb'))) { + $newprop[$k] = $v; + $found = 1; + break; + } + } + if (!$found) { + foreach($aux_fontlist AS $f) { + $fonttype = trim($f); + $fonttype = preg_replace('/["\']*(.*?)["\']*/','\\1',$fonttype); + $fonttype = preg_replace('/ /','',$fonttype); + $v = strtolower(trim($fonttype)); + if (isset($this->mpdf->fonttrans[$v]) && $this->mpdf->fonttrans[$v]) { $v = $this->mpdf->fonttrans[$v]; } + if (in_array($v,$this->mpdf->sans_fonts) || in_array($v,$this->mpdf->serif_fonts) || in_array($v,$this->mpdf->mono_fonts) ) { + $newprop[$k] = $v; + break; + } + } + } + } + else if ($k == 'MARGIN') { + $tmp = $this->expand24($v); + $newprop['MARGIN-TOP'] = $tmp['T']; + $newprop['MARGIN-RIGHT'] = $tmp['R']; + $newprop['MARGIN-BOTTOM'] = $tmp['B']; + $newprop['MARGIN-LEFT'] = $tmp['L']; + } +/*-- BORDER-RADIUS --*/ + else if ($k == 'BORDER-RADIUS' || $k == 'BORDER-TOP-LEFT-RADIUS' || $k == 'BORDER-TOP-RIGHT-RADIUS' || $k == 'BORDER-BOTTOM-LEFT-RADIUS' || $k == 'BORDER-BOTTOM-RIGHT-RADIUS') { + $tmp = $this->border_radius_expand($v,$k); + if (isset($tmp['TL-H'])) $newprop['BORDER-TOP-LEFT-RADIUS-H'] = $tmp['TL-H']; + if (isset($tmp['TL-V'])) $newprop['BORDER-TOP-LEFT-RADIUS-V'] = $tmp['TL-V']; + if (isset($tmp['TR-H'])) $newprop['BORDER-TOP-RIGHT-RADIUS-H'] = $tmp['TR-H']; + if (isset($tmp['TR-V'])) $newprop['BORDER-TOP-RIGHT-RADIUS-V'] = $tmp['TR-V']; + if (isset($tmp['BL-H'])) $newprop['BORDER-BOTTOM-LEFT-RADIUS-H'] = $tmp['BL-H']; + if (isset($tmp['BL-V'])) $newprop['BORDER-BOTTOM-LEFT-RADIUS-V'] = $tmp['BL-V']; + if (isset($tmp['BR-H'])) $newprop['BORDER-BOTTOM-RIGHT-RADIUS-H'] = $tmp['BR-H']; + if (isset($tmp['BR-V'])) $newprop['BORDER-BOTTOM-RIGHT-RADIUS-V'] = $tmp['BR-V']; + } +/*-- END BORDER-RADIUS --*/ + else if ($k == 'PADDING') { + $tmp = $this->expand24($v); + $newprop['PADDING-TOP'] = $tmp['T']; + $newprop['PADDING-RIGHT'] = $tmp['R']; + $newprop['PADDING-BOTTOM'] = $tmp['B']; + $newprop['PADDING-LEFT'] = $tmp['L']; + } + else if ($k == 'BORDER') { + if ($v == '1') { $v = '1px solid #000000'; } + else { $v = $this->_fix_borderStr($v); } + $newprop['BORDER-TOP'] = $v; + $newprop['BORDER-RIGHT'] = $v; + $newprop['BORDER-BOTTOM'] = $v; + $newprop['BORDER-LEFT'] = $v; + } + else if ($k == 'BORDER-TOP') { + $newprop['BORDER-TOP'] = $this->_fix_borderStr($v); + } + else if ($k == 'BORDER-RIGHT') { + $newprop['BORDER-RIGHT'] = $this->_fix_borderStr($v); + } + else if ($k == 'BORDER-BOTTOM') { + $newprop['BORDER-BOTTOM'] = $this->_fix_borderStr($v); + } + else if ($k == 'BORDER-LEFT') { + $newprop['BORDER-LEFT'] = $this->_fix_borderStr($v); + } + else if ($k == 'BORDER-STYLE') { + $e = $this->expand24($v); + $newprop['BORDER-TOP-STYLE'] = $e['T']; + $newprop['BORDER-RIGHT-STYLE'] = $e['R']; + $newprop['BORDER-BOTTOM-STYLE'] = $e['B']; + $newprop['BORDER-LEFT-STYLE'] = $e['L']; + } + else if ($k == 'BORDER-WIDTH') { + $e = $this->expand24($v); + $newprop['BORDER-TOP-WIDTH'] = $e['T']; + $newprop['BORDER-RIGHT-WIDTH'] = $e['R']; + $newprop['BORDER-BOTTOM-WIDTH'] = $e['B']; + $newprop['BORDER-LEFT-WIDTH'] = $e['L']; + } + else if ($k == 'BORDER-COLOR') { + $e = $this->expand24($v); + $newprop['BORDER-TOP-COLOR'] = $e['T']; + $newprop['BORDER-RIGHT-COLOR'] = $e['R']; + $newprop['BORDER-BOTTOM-COLOR'] = $e['B']; + $newprop['BORDER-LEFT-COLOR'] = $e['L']; + } + + else if ($k == 'BORDER-SPACING') { + $prop = preg_split('/\s+/',trim($v)); + if (count($prop) == 1 ) { + $newprop['BORDER-SPACING-H'] = $prop[0]; + $newprop['BORDER-SPACING-V'] = $prop[0]; + } + else if (count($prop) == 2 ) { + $newprop['BORDER-SPACING-H'] = $prop[0]; + $newprop['BORDER-SPACING-V'] = $prop[1]; + } + } + else if ($k == 'TEXT-OUTLINE') { // mPDF 5.6.07 + $prop = preg_split('/\s+/',trim($v)); + if (trim(strtolower($v)) == 'none' ) { + $newprop['TEXT-OUTLINE'] = 'none'; + } + else if (count($prop) == 2 ) { + $newprop['TEXT-OUTLINE-WIDTH'] = $prop[0]; + $newprop['TEXT-OUTLINE-COLOR'] = $prop[1]; + } + else if (count($prop) == 3 ) { + $newprop['TEXT-OUTLINE-WIDTH'] = $prop[0]; + $newprop['TEXT-OUTLINE-COLOR'] = $prop[2]; + } + } + else if ($k == 'SIZE') { + $prop = preg_split('/\s+/',trim($v)); + if (preg_match('/(auto|portrait|landscape)/',$prop[0])) { + $newprop['SIZE'] = strtoupper($prop[0]); + } + else if (count($prop) == 1 ) { + $newprop['SIZE']['W'] = $this->mpdf->ConvertSize($prop[0]); + $newprop['SIZE']['H'] = $this->mpdf->ConvertSize($prop[0]); + } + else if (count($prop) == 2 ) { + $newprop['SIZE']['W'] = $this->mpdf->ConvertSize($prop[0]); + $newprop['SIZE']['H'] = $this->mpdf->ConvertSize($prop[1]); + } + } + else if ($k == 'SHEET-SIZE') { + $prop = preg_split('/\s+/',trim($v)); + if (count($prop) == 2 ) { + $newprop['SHEET-SIZE'] = array($this->mpdf->ConvertSize($prop[0]), $this->mpdf->ConvertSize($prop[1])); + } + else { + if(preg_match('/([0-9a-zA-Z]*)-L/i',$v,$m)) { // e.g. A4-L = A$ landscape + $ft = $this->mpdf->_getPageFormat($m[1]); + $format = array($ft[1],$ft[0]); + } + else { $format = $this->mpdf->_getPageFormat($v); } + if ($format) { $newprop['SHEET-SIZE'] = array($format[0]/_MPDFK, $format[1]/_MPDFK); } + } + } + else if ($k == 'BACKGROUND') { + $bg = $this->parseCSSbackground($v); + if ($bg['c']) { $newprop['BACKGROUND-COLOR'] = $bg['c']; } + else { $newprop['BACKGROUND-COLOR'] = 'transparent'; } +/*-- BACKGROUNDS --*/ + if ($bg['i']) { + $newprop['BACKGROUND-IMAGE'] = $bg['i']; + if ($bg['r']) { $newprop['BACKGROUND-REPEAT'] = $bg['r']; } + if ($bg['p']) { $newprop['BACKGROUND-POSITION'] = $bg['p']; } + } + else { $newprop['BACKGROUND-IMAGE'] = ''; } +/*-- END BACKGROUNDS --*/ + } +/*-- BACKGROUNDS --*/ + else if ($k == 'BACKGROUND-IMAGE') { + if (preg_match('/(-moz-)*(repeating-)*(linear|radial)-gradient\(.*\)/i',$v,$m)) { + $newprop['BACKGROUND-IMAGE'] = $m[0]; + continue; + } + if (preg_match('/url\([\'\"]{0,1}(.*?)[\'\"]{0,1}\)/i',$v,$m)) { + $newprop['BACKGROUND-IMAGE'] = $m[1]; + } + + else if (strtolower($v)=='none') { $newprop['BACKGROUND-IMAGE'] = ''; } + + } + else if ($k == 'BACKGROUND-REPEAT') { + if (preg_match('/(repeat-x|repeat-y|no-repeat|repeat)/i',$v,$m)) { + $newprop['BACKGROUND-REPEAT'] = strtolower($m[1]); + } + } + else if ($k == 'BACKGROUND-POSITION') { + $s = $v; + $bits = preg_split('/\s+/',trim($s)); + // These should be Position x1 or x2 + if (count($bits)==1) { + if (preg_match('/bottom/',$bits[0])) { $bg['p'] = '50% 100%'; } + else if (preg_match('/top/',$bits[0])) { $bg['p'] = '50% 0%'; } + else { $bg['p'] = $bits[0] . ' 50%'; } + } + else if (count($bits)==2) { + // Can be either right center or center right + if (preg_match('/(top|bottom)/',$bits[0]) || preg_match('/(left|right)/',$bits[1])) { + $bg['p'] = $bits[1] . ' '.$bits[0]; + } + else { + $bg['p'] = $bits[0] . ' '.$bits[1]; + } + } + if ($bg['p']) { + $bg['p'] = preg_replace('/(left|top)/','0%',$bg['p']); + $bg['p'] = preg_replace('/(right|bottom)/','100%',$bg['p']); + $bg['p'] = preg_replace('/(center)/','50%',$bg['p']); + if (!preg_match('/[\-]{0,1}\d+(in|cm|mm|pt|pc|em|ex|px|%)* [\-]{0,1}\d+(in|cm|mm|pt|pc|em|ex|px|%)*/',$bg['p'])) { + $bg['p'] = false; + } + } + if ($bg['p']) { $newprop['BACKGROUND-POSITION'] = $bg['p']; } + } +/*-- END BACKGROUNDS --*/ + else if ($k == 'IMAGE-ORIENTATION') { + if (preg_match('/([\-]*[0-9\.]+)(deg|grad|rad)/i',$v,$m)) { + $angle = $m[1] + 0; + if (strtolower($m[2])=='deg') { $angle = $angle; } + else if (strtolower($m[2])=='grad') { $angle *= (360/400); } + else if (strtolower($m[2])=='rad') { $angle = rad2deg($angle); } + while($angle < 0) { $angle += 360; } + $angle = ($angle % 360); + $angle /= 90; + $angle = round($angle) * 90; + $newprop['IMAGE-ORIENTATION'] = $angle; + } + } + // mPDF 5.6.13 + else if ($k == 'TEXT-ALIGN') { + if (preg_match('/["\'](.){1}["\']/i',$v,$m)) { + $d = array_search($m[1],$this->mpdf->decimal_align); + if ($d !== false) { $newprop['TEXT-ALIGN'] = $d; } + if (preg_match('/(center|left|right)/i',$v,$m)) { $newprop['TEXT-ALIGN'] .= strtoupper(substr($m[1],0,1)); } + else { $newprop['TEXT-ALIGN'] .= 'R'; } // default = R + } + else if (preg_match('/["\'](\\\[a-fA-F0-9]{1,6})["\']/i',$v,$m)) { + $utf8 = codeHex2utf(substr($m[1],1,6)); + $d = array_search($utf8,$this->mpdf->decimal_align); + if ($d !== false) { $newprop['TEXT-ALIGN'] = $d; } + if (preg_match('/(center|left|right)/i',$v,$m)) { $newprop['TEXT-ALIGN'] .= strtoupper(substr($m[1],0,1)); } + else { $newprop['TEXT-ALIGN'] .= 'R'; } // default = R + } + else { $newprop[$k] = $v; } + } + + else { + $newprop[$k] = $v; + } + } + + return $newprop; +} + +function setCSSboxshadow($v) { + $sh = array(); + $c = preg_match_all('/(rgba|rgb|device-cmyka|cmyka|device-cmyk|cmyk|hsla|hsl)\(.*?\)/',$v,$x); // mPDF 5.6.05 + for($i=0; $i<$c; $i++) { + $col = preg_replace('/,/','*',$x[0][$i]); + $v = preg_replace('/'.preg_quote($x[0][$i],'/').'/',$col,$v); + } + $ss = explode(',',$v); + foreach ($ss AS $s) { + $new = array('inset'=>false, 'blur'=>0, 'spread'=>0); + if (preg_match('/inset/i',$s)) { $new['inset'] = true; $s = preg_replace('/\s*inset\s*/','',$s); } + $p = explode(' ',trim($s)); + if (isset($p[0])) { $new['x'] = $this->mpdf->ConvertSize(trim($p[0]),$this->mpdf->blk[$this->mpdf->blklvl-1]['inner_width'],$this->mpdf->FontSize,false); } + if (isset($p[1])) { $new['y'] = $this->mpdf->ConvertSize(trim($p[1]),$this->mpdf->blk[$this->mpdf->blklvl-1]['inner_width'],$this->mpdf->FontSize,false); } + if (isset($p[2])) { + if (preg_match('/^\s*[\.\-0-9]/',$p[2])) { + $new['blur'] = $this->mpdf->ConvertSize(trim($p[2]),$this->mpdf->blk[$this->mpdf->blklvl-1]['inner_width'],$this->mpdf->FontSize,false); + } + else { $new['col'] = $this->mpdf->ConvertColor(preg_replace('/\*/',',',$p[2])); } + if (isset($p[3])) { + if (preg_match('/^\s*[\.\-0-9]/',$p[3])) { + $new['spread'] = $this->mpdf->ConvertSize(trim($p[3]),$this->mpdf->blk[$this->mpdf->blklvl-1]['inner_width'],$this->mpdf->FontSize,false); + } + else { $new['col'] = $this->mpdf->ConvertColor(preg_replace('/\*/',',',$p[3])); } + if (isset($p[4])) { + $new['col'] = $this->mpdf->ConvertColor(preg_replace('/\*/',',',$p[4])); + } + } + } + if (!$new['col']) { $new['col'] = $this->mpdf->ConvertColor('#888888'); } + if (isset($new['y'])) { array_unshift($sh, $new); } + } + return $sh; +} + +function setCSStextshadow($v) { + $sh = array(); + $c = preg_match_all('/(rgba|rgb|device-cmyka|cmyka|device-cmyk|cmyk|hsla|hsl)\(.*?\)/',$v,$x); // mPDF 5.6.05 + for($i=0; $i<$c; $i++) { + $col = preg_replace('/,/','*',$x[0][$i]); + $v = preg_replace('/'.preg_quote($x[0][$i],'/').'/',$col,$v); + } + $ss = explode(',',$v); + foreach ($ss AS $s) { + $new = array('blur'=>0); + $p = explode(' ',trim($s)); + if (isset($p[0])) { $new['x'] = $this->mpdf->ConvertSize(trim($p[0]),$this->mpdf->blk[$this->mpdf->blklvl-1]['inner_width'],$this->mpdf->FontSize,false); } + if (isset($p[1])) { $new['y'] = $this->mpdf->ConvertSize(trim($p[1]),$this->mpdf->blk[$this->mpdf->blklvl-1]['inner_width'],$this->mpdf->FontSize,false); } + if (isset($p[2])) { + if (preg_match('/^\s*[\.\-0-9]/',$p[2])) { + $new['blur'] = $this->mpdf->ConvertSize(trim($p[2]),$this->mpdf->blk[$this->mpdf->blklvl-1]['inner_width'],$this->mpdf->FontSize,false); + } + else { $new['col'] = $this->mpdf->ConvertColor(preg_replace('/\*/',',',$p[2])); } + if (isset($p[3])) { + $new['col'] = $this->mpdf->ConvertColor(preg_replace('/\*/',',',$p[3])); + } + } + if (!$new['col']) { $new['col'] = $this->mpdf->ConvertColor('#888888'); } + if (isset($new['y'])) { array_unshift($sh, $new); } + } + return $sh; +} + +function parseCSSbackground($s) { + $bg = array('c'=>false, 'i'=>false, 'r'=>false, 'p'=>false, ); +/*-- BACKGROUNDS --*/ + if (preg_match('/(-moz-)*(repeating-)*(linear|radial)-gradient\(.*\)/i',$s,$m)) { + $bg['i'] = $m[0]; + } + else +/*-- END BACKGROUNDS --*/ + if (preg_match('/url\(/i',$s)) { + // If color, set and strip it off + // mPDF 5.6.05 + if (preg_match('/^\s*(#[0-9a-fA-F]{3,6}|(rgba|rgb|device-cmyka|cmyka|device-cmyk|cmyk|hsla|hsl|spot)\(.*?\)|[a-zA-Z]{3,})\s+(url\(.*)/i',$s,$m)) { + $bg['c'] = strtolower($m[1]); + $s = $m[3]; + } +/*-- BACKGROUNDS --*/ + if (preg_match('/url\([\'\"]{0,1}(.*?)[\'\"]{0,1}\)\s*(.*)/i',$s,$m)) { + $bg['i'] = $m[1]; + $s = strtolower($m[2]); + if (preg_match('/(repeat-x|repeat-y|no-repeat|repeat)/',$s,$m)) { + $bg['r'] = $m[1]; + } + // Remove repeat, attachment (discarded) and also any inherit + $s = preg_replace('/(repeat-x|repeat-y|no-repeat|repeat|scroll|fixed|inherit)/','',$s); + $bits = preg_split('/\s+/',trim($s)); + // These should be Position x1 or x2 + if (count($bits)==1) { + if (preg_match('/bottom/',$bits[0])) { $bg['p'] = '50% 100%'; } + else if (preg_match('/top/',$bits[0])) { $bg['p'] = '50% 0%'; } + else { $bg['p'] = $bits[0] . ' 50%'; } + } + else if (count($bits)==2) { + // Can be either right center or center right + if (preg_match('/(top|bottom)/',$bits[0]) || preg_match('/(left|right)/',$bits[1])) { + $bg['p'] = $bits[1] . ' '.$bits[0]; + } + else { + $bg['p'] = $bits[0] . ' '.$bits[1]; + } + } + if ($bg['p']) { + $bg['p'] = preg_replace('/(left|top)/','0%',$bg['p']); + $bg['p'] = preg_replace('/(right|bottom)/','100%',$bg['p']); + $bg['p'] = preg_replace('/(center)/','50%',$bg['p']); + if (!preg_match('/[\-]{0,1}\d+(in|cm|mm|pt|pc|em|ex|px|%)* [\-]{0,1}\d+(in|cm|mm|pt|pc|em|ex|px|%)*/',$bg['p'])) { + $bg['p'] = false; + } + } + } +/*-- END BACKGROUNDS --*/ + } + else if (preg_match('/^\s*(#[0-9a-fA-F]{3,6}|(rgba|rgb|device-cmyka|cmyka|device-cmyk|cmyk|hsla|hsl|spot)\(.*?\)|[a-zA-Z]{3,})/i',$s,$m)) { $bg['c'] = strtolower($m[1]); } // mPDF 5.6.05 + return ($bg); +} + + +function expand24($mp) { + $prop = preg_split('/\s+/',trim($mp)); + if (count($prop) == 1 ) { + return array('T' => $prop[0], 'R' => $prop[0], 'B' => $prop[0], 'L'=> $prop[0]); + } + if (count($prop) == 2 ) { + return array('T' => $prop[0], 'R' => $prop[1], 'B' => $prop[0], 'L'=> $prop[1]); + } + + if (count($prop) == 3 ) { + return array('T' => $prop[0], 'R' => $prop[1], 'B' => $prop[2], 'L'=> $prop[1]); + } + if (count($prop) == 4 ) { + return array('T' => $prop[0], 'R' => $prop[1], 'B' => $prop[2], 'L'=> $prop[3]); + } + return array(); +} + +/*-- BORDER-RADIUS --*/ +function border_radius_expand($val,$k) { + $b = array(); + if ($k == 'BORDER-RADIUS') { + $hv = explode('/',trim($val)); + $prop = preg_split('/\s+/',trim($hv[0])); + if (count($prop)==1) { + $b['TL-H'] = $b['TR-H'] = $b['BR-H'] = $b['BL-H'] = $prop[0]; + } + else if (count($prop)==2) { + $b['TL-H'] = $b['BR-H'] = $prop[0]; + $b['TR-H'] = $b['BL-H'] = $prop[1]; + } + else if (count($prop)==3) { + $b['TL-H'] = $prop[0]; + $b['TR-H'] = $b['BL-H'] = $prop[1]; + $b['BR-H'] = $prop[2]; + } + else if (count($prop)==4) { + $b['TL-H'] = $prop[0]; + $b['TR-H'] = $prop[1]; + $b['BR-H'] = $prop[2]; + $b['BL-H'] = $prop[3]; + } + if (count($hv)==2) { + $prop = preg_split('/\s+/',trim($hv[1])); + if (count($prop)==1) { + $b['TL-V'] = $b['TR-V'] = $b['BR-V'] = $b['BL-V'] = $prop[0]; + } + else if (count($prop)==2) { + $b['TL-V'] = $b['BR-V'] = $prop[0]; + $b['TR-V'] = $b['BL-V'] = $prop[1]; + } + else if (count($prop)==3) { + $b['TL-V'] = $prop[0]; + $b['TR-V'] = $b['BL-V'] = $prop[1]; + $b['BR-V'] = $prop[2]; + } + else if (count($prop)==4) { + $b['TL-V'] = $prop[0]; + $b['TR-V'] = $prop[1]; + $b['BR-V'] = $prop[2]; + $b['BL-V'] = $prop[3]; + } + } + else { + $b['TL-V'] = $b['TL-H']; + $b['TR-V'] = $b['TR-H']; + $b['BL-V'] = $b['BL-H']; + $b['BR-V'] = $b['BR-H']; + } + return $b; + } + + // Parse 2 + $h = 0; + $v = 0; + $prop = preg_split('/\s+/',trim($val)); + if (count($prop)==1) { $h = $v = $val; } + else { $h = $prop[0]; $v = $prop[1]; } + if ($h==0 || $v==0) { $h = $v = 0; } + if ($k == 'BORDER-TOP-LEFT-RADIUS') { + $b['TL-H'] = $h; + $b['TL-V'] = $v; + } + else if ($k == 'BORDER-TOP-RIGHT-RADIUS') { + $b['TR-H'] = $h; + $b['TR-V'] = $v; + } + else if ($k == 'BORDER-BOTTOM-LEFT-RADIUS') { + $b['BL-H'] = $h; + $b['BL-V'] = $v; + } + else if ($k == 'BORDER-BOTTOM-RIGHT-RADIUS') { + $b['BR-H'] = $h; + $b['BR-V'] = $v; + } + return $b; + +} +/*-- END BORDER-RADIUS --*/ + +function _mergeCSS($p, &$t) { + // Save Cascading CSS e.g. "div.topic p" at this block level + if (isset($p) && $p) { + if ($t) { + $t = $this->array_merge_recursive_unique($t, $p); + } + else { $t = $p; } + } +} + +// for CSS handling +function array_merge_recursive_unique($array1, $array2) { + $arrays = func_get_args(); + $narrays = count($arrays); + $ret = $arrays[0]; + for ($i = 1; $i < $narrays; $i ++) { + foreach ($arrays[$i] as $key => $value) { + if (((string) $key) === ((string) intval($key))) { // integer or string as integer key - append + $ret[] = $value; + } + else { // string key - merge + if (is_array($value) && isset($ret[$key])) { + $ret[$key] = $this->array_merge_recursive_unique($ret[$key], $value); + } + else { + $ret[$key] = $value; + } + } + } + } + return $ret; +} + + + +function _mergeFullCSS($p, &$t, $tag, $classes, $id) { + $this->_mergeCSS($p[$tag], $t); + // STYLESHEET CLASS e.g. .smallone{} .redletter{} + foreach($classes AS $class) { + $this->_mergeCSS($p['CLASS>>'.$class], $t); + } + // STYLESHEET nth-child SELECTOR e.g. tr:nth-child(odd) td:nth-child(2n+1) + if ($tag=='TR' && isset($p) && $p) { + foreach($p AS $k=>$val) { + if (preg_match('/'.$tag.'>>SELECTORNTHCHILD>>(.*)/',$k, $m)) { + $select = false; + if ($tag=='TR') { + $row = $this->mpdf->row; + $thnr = (isset($this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['is_thead']) ? count($this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['is_thead']) : 0); + $tfnr = (isset($this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['is_tfoot']) ? count($this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['is_tfoot']) : 0); + if ($this->mpdf->tabletfoot) { $row -= $thnr; } + else if (!$this->mpdf->tablethead) { $row -= ($thnr + $tfnr); } + if ($m[1]=='ODD' && ($row % 2) == 0) { $select = true; } + else if ($m[1]=='EVEN' && ($row % 2) == 1) { $select = true; } + else if (preg_match('/(\d+)N\+(\d+)/',$m[1],$a)) { + if ((($row + 1) % $a[1]) == $a[2]) { $select = true; } + } + } + else if ($tag=='TD' || $tag=='TH') { + if ($m[1]=='ODD' && ($this->mpdf->col % 2) == 0) { $select = true; } + else if ($m[1]=='EVEN' && ($this->mpdf->col % 2) == 1) { $select = true; } + else if (preg_match('/(\d+)N\+(\d+)/',$m[1],$a)) { + if ((($this->mpdf->col + 1) % $a[1]) == $a[2]) { $select = true; } + } + } + if ($select) { + $this->_mergeCSS($p[$tag.'>>SELECTORNTHCHILD>>'.$m[1]], $t); + } + } + } + } + // STYLESHEET CLASS e.g. #smallone{} #redletter{} + if (isset($id) && $id) { + $this->_mergeCSS($p['ID>>'.$id], $t); + } + // STYLESHEET CLASS e.g. .smallone{} .redletter{} + foreach($classes AS $class) { + $this->_mergeCSS($p[$tag.'>>CLASS>>'.$class], $t); + } + // STYLESHEET CLASS e.g. #smallone{} #redletter{} + if (isset($id)) { + $this->_mergeCSS($p[$tag.'>>ID>>'.$id], $t); + } +} + +function setBorderDominance($prop, $val) { + if (isset($prop['BORDER-LEFT']) && $prop['BORDER-LEFT']) { $this->cell_border_dominance_L = $val; } + if (isset($prop['BORDER-RIGHT']) && $prop['BORDER-RIGHT']) { $this->cell_border_dominance_R = $val; } + if (isset($prop['BORDER-TOP']) && $prop['BORDER-TOP']) { $this->cell_border_dominance_T = $val; } + if (isset($prop['BORDER-BOTTOM']) && $prop['BORDER-BOTTOM']) { $this->cell_border_dominance_B = $val; } +} + +function _set_mergedCSS(&$m, &$p, $d=true, $bd=false) { + if (isset($m)) { + if ((isset($m['depth']) && $m['depth']>1) || $d==false) { // include check for 'depth' + if ($bd) { $this->setBorderDominance($m, $bd); } // *TABLES* + if (is_array($m)) { + $p = array_merge($p,$m); + $this->_mergeBorders($p,$m); + } + } + } +} + + +function _mergeBorders(&$b, &$a) { // Merges $a['BORDER-TOP-STYLE'] to $b['BORDER-TOP'] etc. + foreach(array('TOP','RIGHT','BOTTOM','LEFT') AS $side) { + foreach(array('STYLE','WIDTH','COLOR') AS $el) { + if (isset($a['BORDER-'.$side.'-'.$el])) { // e.g. $b['BORDER-TOP-STYLE'] + $s = trim($a['BORDER-'.$side.'-'.$el]); + if (isset($b['BORDER-'.$side])) { // e.g. $b['BORDER-TOP'] + $p = trim($b['BORDER-'.$side]); + } + else { $p = ''; } + if ($el=='STYLE') { + if ($p) { $b['BORDER-'.$side] = preg_replace('/(\S+)\s+(\S+)\s+(\S+)/', '\\1 '.$s.' \\3', $p); } + else { $b['BORDER-'.$side] = '0px '.$s.' #000000'; } + } + else if ($el=='WIDTH') { + if ($p) { $b['BORDER-'.$side] = preg_replace('/(\S+)\s+(\S+)\s+(\S+)/', $s.' \\2 \\3', $p); } + else { $b['BORDER-'.$side] = $s.' none #000000'; } + } + else if ($el=='COLOR') { + if ($p) { $b['BORDER-'.$side] = preg_replace('/(\S+)\s+(\S+)\s+(\S+)/', '\\1 \\2 '.$s, $p); } + else { $b['BORDER-'.$side] = '0px none '.$s; } + } + } + } + } +} + + +function MergeCSS($inherit,$tag,$attr) { + $p = array(); + $zp = array(); + + $classes = array(); + if (isset($attr['CLASS'])) { + $classes = preg_split('/\s+/',$attr['CLASS']); + } + if (!isset($attr['ID'])) { $attr['ID']=''; } + //=============================================== +/*-- TABLES --*/ + // Set Inherited properties + if ($inherit == 'TOPTABLE') { // $tag = TABLE + //=============================================== + // Save Cascading CSS e.g. "div.topic p" at this block level + + if (isset($this->mpdf->blk[$this->mpdf->blklvl]['cascadeCSS'])) { + $this->tablecascadeCSS[0] = $this->mpdf->blk[$this->mpdf->blklvl]['cascadeCSS']; + } + else { + $this->tablecascadeCSS[0] = $this->cascadeCSS; + } + } + //=============================================== + // Set Inherited properties + if ($inherit == 'TOPTABLE' || $inherit == 'TABLE') { + //Cascade everything from last level that is not an actual property, or defined by current tag/attributes + if (isset($this->tablecascadeCSS[$this->tbCSSlvl-1]) && is_array($this->tablecascadeCSS[$this->tbCSSlvl-1])) { + foreach($this->tablecascadeCSS[$this->tbCSSlvl-1] AS $k=>$v) { + $this->tablecascadeCSS[$this->tbCSSlvl][$k] = $v; + } + } + $this->_mergeFullCSS($this->cascadeCSS, $this->tablecascadeCSS[$this->tbCSSlvl], $tag, $classes, $attr['ID']); + //=============================================== + // Cascading forward CSS e.g. "table.topic td" for this table in $this->tablecascadeCSS + //=============================================== + // STYLESHEET TAG e.g. table + $this->_mergeFullCSS($this->tablecascadeCSS[$this->tbCSSlvl-1], $this->tablecascadeCSS[$this->tbCSSlvl], $tag, $classes, $attr['ID']); + //=============================================== + } +/*-- END TABLES --*/ + //=============================================== +/*-- LISTS --*/ + // Set Inherited properties + if ($inherit == 'TOPLIST') { // $tag = UL,OL + //=============================================== + // Save Cascading CSS e.g. "div.topic p" at this block level + if (isset($this->mpdf->blk[$this->mpdf->blklvl]['cascadeCSS'])) { + $this->listcascadeCSS[0] = $this->mpdf->blk[$this->mpdf->blklvl]['cascadeCSS']; + } + else { + $this->listcascadeCSS[0] = $this->cascadeCSS; + } + } + //=============================================== + // Set Inherited properties + if ($inherit == 'TOPLIST' || $inherit == 'LIST') { + //Cascade everything from last level that is not an actual property, or defined by current tag/attributes + if (isset($this->listcascadeCSS[$this->listCSSlvl-1]) && is_array($this->listcascadeCSS[$this->listCSSlvl-1])) { + foreach($this->listcascadeCSS[$this->listCSSlvl-1] AS $k=>$v) { + $this->listcascadeCSS[$this->listCSSlvl][$k] = $v; + } + } + $this->_mergeFullCSS($this->cascadeCSS, $this->listcascadeCSS[$this->listCSSlvl], $tag, $classes, $attr['ID']); + //=============================================== + // Cascading forward CSS e.g. "table.topic td" for this list in $this->listcascadeCSS + //=============================================== + // STYLESHEET TAG e.g. table + $this->_mergeFullCSS($this->listcascadeCSS[$this->listCSSlvl-1], $this->listcascadeCSS[$this->listCSSlvl], $tag, $classes, $attr['ID']); + //=============================================== + } +/*-- END LISTS --*/ + //=============================================== + // Set Inherited properties + if ($inherit == 'BLOCK') { + if (isset($this->mpdf->blk[$this->mpdf->blklvl-1]['cascadeCSS']) && is_array($this->mpdf->blk[$this->mpdf->blklvl-1]['cascadeCSS'])) { + foreach($this->mpdf->blk[$this->mpdf->blklvl-1]['cascadeCSS'] AS $k=>$v) { + $this->mpdf->blk[$this->mpdf->blklvl]['cascadeCSS'][$k] = $v; + + } + } + + //=============================================== + // Save Cascading CSS e.g. "div.topic p" at this block level + $this->_mergeFullCSS($this->cascadeCSS, $this->mpdf->blk[$this->mpdf->blklvl]['cascadeCSS'], $tag, $classes, $attr['ID']); + //=============================================== + // Cascading forward CSS + //=============================================== + $this->_mergeFullCSS($this->mpdf->blk[$this->mpdf->blklvl-1]['cascadeCSS'], $this->mpdf->blk[$this->mpdf->blklvl]['cascadeCSS'], $tag, $classes, $attr['ID']); + //=============================================== + // Block properties + if (isset($this->mpdf->blk[$this->mpdf->blklvl-1]['margin_collapse']) && $this->mpdf->blk[$this->mpdf->blklvl-1]['margin_collapse']) { $p['MARGIN-COLLAPSE'] = 'COLLAPSE'; } // custom tag, but follows CSS principle that border-collapse is inherited + if (isset($this->mpdf->blk[$this->mpdf->blklvl-1]['line_height']) && $this->mpdf->blk[$this->mpdf->blklvl-1]['line_height']) { $p['LINE-HEIGHT'] = $this->mpdf->blk[$this->mpdf->blklvl-1]['line_height']; } + + if (isset($this->mpdf->blk[$this->mpdf->blklvl-1]['direction']) && $this->mpdf->blk[$this->mpdf->blklvl-1]['direction']) { $p['DIRECTION'] = $this->mpdf->blk[$this->mpdf->blklvl-1]['direction']; } + + if (isset($this->mpdf->blk[$this->mpdf->blklvl-1]['align']) && $this->mpdf->blk[$this->mpdf->blklvl-1]['align']) { + if ($this->mpdf->blk[$this->mpdf->blklvl-1]['align'] == 'L') { $p['TEXT-ALIGN'] = 'left'; } + else if ($this->mpdf->blk[$this->mpdf->blklvl-1]['align'] == 'J') { $p['TEXT-ALIGN'] = 'justify'; } + else if ($this->mpdf->blk[$this->mpdf->blklvl-1]['align'] == 'R') { $p['TEXT-ALIGN'] = 'right'; } + else if ($this->mpdf->blk[$this->mpdf->blklvl-1]['align'] == 'C') { $p['TEXT-ALIGN'] = 'center'; } + } + if ($this->mpdf->ColActive || $this->mpdf->keep_block_together) { + if (isset($this->mpdf->blk[$this->mpdf->blklvl-1]['bgcolor']) && $this->mpdf->blk[$this->mpdf->blklvl-1]['bgcolor']) { // Doesn't officially inherit, but default value is transparent (?=inherited) + $cor = $this->mpdf->blk[$this->mpdf->blklvl-1]['bgcolorarray' ]; + $p['BACKGROUND-COLOR'] = $this->mpdf->_colAtoString($cor); + } + } + + if (isset($this->mpdf->blk[$this->mpdf->blklvl-1]['text_indent']) && ($this->mpdf->blk[$this->mpdf->blklvl-1]['text_indent'] || $this->mpdf->blk[$this->mpdf->blklvl-1]['text_indent']===0)) { $p['TEXT-INDENT'] = $this->mpdf->blk[$this->mpdf->blklvl-1]['text_indent']; } + if (isset($this->mpdf->blk[$this->mpdf->blklvl-1]['InlineProperties'])) { + $biilp = $this->mpdf->blk[$this->mpdf->blklvl-1]['InlineProperties']; + } + else { $biilp = null; } + if (isset($biilp[ 'family' ]) && $biilp[ 'family' ]) { $p['FONT-FAMILY'] = $biilp[ 'family' ]; } + if (isset($biilp[ 'I' ]) && $biilp[ 'I' ]) { $p['FONT-STYLE'] = 'italic'; } + if (isset($biilp[ 'sizePt' ]) && $biilp[ 'sizePt' ]) { $p['FONT-SIZE'] = $biilp[ 'sizePt' ] . 'pt'; } + if (isset($biilp[ 'B' ]) && $biilp[ 'B' ]) { $p['FONT-WEIGHT'] = 'bold'; } + if (isset($biilp[ 'colorarray' ]) && $biilp[ 'colorarray' ]) { + $cor = $biilp[ 'colorarray' ]; + $p['COLOR'] = $this->mpdf->_colAtoString($cor); + } + if (isset($biilp[ 'fontkerning' ])) { + if ($biilp[ 'fontkerning' ]) { $p['FONT-KERNING'] = 'normal'; } + else { $p['FONT-KERNING'] = 'none'; } + } + if (isset($biilp[ 'lSpacingCSS' ]) && $biilp[ 'lSpacingCSS' ]) { $p['LETTER-SPACING'] = $biilp[ 'lSpacingCSS' ]; } + if (isset($biilp[ 'wSpacingCSS' ]) && $biilp[ 'wSpacingCSS' ]) { $p['WORD-SPACING'] = $biilp[ 'wSpacingCSS' ]; } + if (isset($biilp[ 'toupper' ]) && $biilp[ 'toupper' ]) { $p['TEXT-TRANSFORM'] = 'uppercase'; } + else if (isset($biilp[ 'tolower' ]) && $biilp[ 'tolower' ]) { $p['TEXT-TRANSFORM'] = 'lowercase'; } + else if (isset($biilp[ 'capitalize' ]) && $biilp[ 'capitalize' ]) { $p['TEXT-TRANSFORM'] = 'capitalize'; } + // CSS says text-decoration is not inherited, but IE7 does?? + if (isset($biilp[ 'underline' ]) && $biilp[ 'underline' ]) { $p['TEXT-DECORATION'] = 'underline'; } + if (isset($biilp[ 'smCaps' ]) && $biilp[ 'smCaps' ]) { $p['FONT-VARIANT'] = 'small-caps'; } + + } + //=============================================== + //=============================================== +/*-- LISTS --*/ + // Set Inherited properties + if ($inherit == 'TOPLIST') { + if ($this->listCSSlvl == 1) { + $bilp = $this->mpdf->blk[$this->mpdf->blklvl]['InlineProperties']; + if (isset($bilp[ 'family' ]) && $bilp[ 'family' ]) { $p['FONT-FAMILY'] = $bilp[ 'family' ]; } + if (isset($bilp[ 'I' ]) && $bilp[ 'I' ]) { $p['FONT-STYLE'] = 'italic'; } + if (isset($bilp[ 'sizePt' ]) && $bilp[ 'sizePt' ]) { $p['FONT-SIZE'] = $bilp[ 'sizePt' ] . 'pt'; } + if (isset($bilp[ 'B' ]) && $bilp[ 'B' ]) { $p['FONT-WEIGHT'] = 'bold'; } + if (isset($bilp[ 'colorarray' ]) && $bilp[ 'colorarray' ]) { + $cor = $bilp[ 'colorarray' ]; + $p['COLOR'] = $this->mpdf->_colAtoString($cor); + } + if (isset($bilp[ 'toupper' ]) && $bilp[ 'toupper' ]) { $p['TEXT-TRANSFORM'] = 'uppercase'; } + else if (isset($bilp[ 'tolower' ]) && $bilp[ 'tolower' ]) { $p['TEXT-TRANSFORM'] = 'lowercase'; } + else if (isset($bilp[ 'capitalize' ]) && $bilp[ 'capitalize' ]) { $p['TEXT-TRANSFORM'] = 'capitalize'; } + if (isset($bilp[ 'fontkerning' ])) { + if ($bilp[ 'fontkerning' ]) { $p['FONT-KERNING'] = 'normal'; } + else { $p['FONT-KERNING'] = 'none'; } + } + if (isset($bilp[ 'lSpacingCSS' ]) && $bilp[ 'lSpacingCSS' ]) { $p['LETTER-SPACING'] = $bilp[ 'lSpacingCSS' ]; } + if (isset($bilp[ 'wSpacingCSS' ]) && $bilp[ 'wSpacingCSS' ]) { $p['WORD-SPACING'] = $bilp[ 'wSpacingCSS' ]; } + // CSS says text-decoration is not inherited, but IE7 does?? + if (isset($bilp[ 'underline' ]) && $bilp[ 'underline' ]) { $p['TEXT-DECORATION'] = 'underline'; } + if (isset($bilp[ 'smCaps' ]) && $bilp[ 'smCaps' ]) { $p['FONT-VARIANT'] = 'small-caps'; } + if ($tag=='LI') { + // Note to self - this should never work, as TOPLIST is not called when LI (see code removed in v5.3) + $this->mpdf->Error("If you see this message, please report this as a bug to the mPDF Forum."); + } + } + } +/*-- END LISTS --*/ + //=============================================== + //=============================================== + // DEFAULT for this TAG set in DefaultCSS + if (isset($this->mpdf->defaultCSS[$tag])) { + $zp = $this->fixCSS($this->mpdf->defaultCSS[$tag]); + if (is_array($zp)) { // Default overwrites Inherited + $p = array_merge($p,$zp); // !! Note other way round !! + $this->_mergeBorders($p,$zp); + } + } + //=============================================== +/*-- TABLES --*/ + // cellPadding overwrites TD/TH default but not specific CSS set on cell + if (($tag=='TD' || $tag=='TH') && isset($this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['cell_padding']) && ($this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['cell_padding'] || $this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['cell_padding']===0)) { + $p['PADDING-LEFT'] = $this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['cell_padding']; + $p['PADDING-RIGHT'] = $this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['cell_padding']; + $p['PADDING-TOP'] = $this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['cell_padding']; + $p['PADDING-BOTTOM'] = $this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['cell_padding']; + } +/*-- END TABLES --*/ + //=============================================== + // STYLESHEET TAG e.g. h1 p div table + if (isset($this->CSS[$tag]) && $this->CSS[$tag]) { + $zp = $this->CSS[$tag]; + if ($tag=='TD' || $tag=='TH') { $this->setBorderDominance($zp, 9); } // *TABLES* // *TABLES-ADVANCED-BORDERS* + if (is_array($zp)) { + $p = array_merge($p,$zp); + $this->_mergeBorders($p,$zp); + } + } + //=============================================== + // STYLESHEET CLASS e.g. .smallone{} .redletter{} + foreach($classes AS $class) { + $zp = array(); + if (isset($this->CSS['CLASS>>'.$class]) && $this->CSS['CLASS>>'.$class]) { $zp = $this->CSS['CLASS>>'.$class]; } + if ($tag=='TD' || $tag=='TH') { $this->setBorderDominance($zp, 9); } // *TABLES* // *TABLES-ADVANCED-BORDERS* + if (is_array($zp)) { + $p = array_merge($p,$zp); + $this->_mergeBorders($p,$zp); + } + } + //=============================================== +/*-- TABLES --*/ + // STYLESHEET nth-child SELECTOR e.g. tr:nth-child(odd) td:nth-child(2n+1) + if ($tag=='TR' || $tag=='TD' || $tag=='TH') { + foreach($this->CSS AS $k=>$val) { + if (preg_match('/'.$tag.'>>SELECTORNTHCHILD>>(.*)/',$k, $m)) { + $select = false; + if ($tag=='TR') { + $row = $this->mpdf->row; + $thnr = (isset($this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['is_thead']) ? count($this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['is_thead']) : 0); + $tfnr = (isset($this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['is_tfoot']) ? count($this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['is_tfoot']) : 0); + if ($this->mpdf->tabletfoot) { $row -= $thnr; } + else if (!$this->mpdf->tablethead) { $row -= ($thnr + $tfnr); } + if ($m[1]=='ODD' && ($row % 2) == 0) { $select = true; } + else if ($m[1]=='EVEN' && ($row % 2) == 1) { $select = true; } + else if (preg_match('/(\d+)N\+(\d+)/',$m[1],$a)) { + if ((($row + 1) % $a[1]) == $a[2]) { $select = true; } + } + } + else if ($tag=='TD' || $tag=='TH') { + if ($m[1]=='ODD' && ($this->mpdf->col % 2) == 0) { $select = true; } + else if ($m[1]=='EVEN' && ($this->mpdf->col % 2) == 1) { $select = true; } + else if (preg_match('/(\d+)N\+(\d+)/',$m[1],$a)) { + if ((($this->mpdf->col+1) % $a[1]) == $a[2]) { $select = true; } + } + } + if ($select) { + $zp = $this->CSS[$tag.'>>SELECTORNTHCHILD>>'.$m[1]]; + if ($tag=='TD' || $tag=='TH') { $this->setBorderDominance($zp, 9); } + if (is_array($zp)) { + $p = array_merge($p,$zp); + $this->_mergeBorders($p,$zp); + } + } + } + } + } +/*-- END TABLES --*/ + //=============================================== + // STYLESHEET ID e.g. #smallone{} #redletter{} + if (isset($attr['ID']) && isset($this->CSS['ID>>'.$attr['ID']]) && $this->CSS['ID>>'.$attr['ID']]) { + $zp = $this->CSS['ID>>'.$attr['ID']]; + if ($tag=='TD' || $tag=='TH') { $this->setBorderDominance($zp, 9); } // *TABLES* // *TABLES-ADVANCED-BORDERS* + if (is_array($zp)) { + $p = array_merge($p,$zp); + $this->_mergeBorders($p,$zp); + } + } + //=============================================== + // STYLESHEET CLASS e.g. p.smallone{} div.redletter{} + foreach($classes AS $class) { + $zp = array(); + if (isset($this->CSS[$tag.'>>CLASS>>'.$class]) && $this->CSS[$tag.'>>CLASS>>'.$class]) { $zp = $this->CSS[$tag.'>>CLASS>>'.$class]; } + if ($tag=='TD' || $tag=='TH') { $this->setBorderDominance($zp, 9); } // *TABLES* // *TABLES-ADVANCED-BORDERS* + if (is_array($zp)) { + $p = array_merge($p,$zp); + $this->_mergeBorders($p,$zp); + } + } + //=============================================== + // STYLESHEET CLASS e.g. p#smallone{} div#redletter{} + if (isset($attr['ID']) && isset($this->CSS[$tag.'>>ID>>'.$attr['ID']]) && $this->CSS[$tag.'>>ID>>'.$attr['ID']]) { + $zp = $this->CSS[$tag.'>>ID>>'.$attr['ID']]; + if ($tag=='TD' || $tag=='TH') { $this->setBorderDominance($zp, 9); } // *TABLES* // *TABLES-ADVANCED-BORDERS* + if (is_array($zp)) { + $p = array_merge($p,$zp); + $this->_mergeBorders($p,$zp); + } + } + //=============================================== + // Cascaded e.g. div.class p only works for block level + if ($inherit == 'BLOCK') { + $this->_set_mergedCSS($this->mpdf->blk[$this->mpdf->blklvl-1]['cascadeCSS'][$tag], $p); + foreach($classes AS $class) { + $this->_set_mergedCSS($this->mpdf->blk[$this->mpdf->blklvl-1]['cascadeCSS']['CLASS>>'.$class], $p); + } + $this->_set_mergedCSS($this->mpdf->blk[$this->mpdf->blklvl-1]['cascadeCSS']['ID>>'.$attr['ID']], $p); + foreach($classes AS $class) { + $this->_set_mergedCSS($this->mpdf->blk[$this->mpdf->blklvl-1]['cascadeCSS'][$tag.'>>CLASS>>'.$class], $p); + } + $this->_set_mergedCSS($this->mpdf->blk[$this->mpdf->blklvl-1]['cascadeCSS'][$tag.'>>ID>>'.$attr['ID']], $p); + } + else if ($inherit == 'INLINE') { + $this->_set_mergedCSS($this->mpdf->blk[$this->mpdf->blklvl]['cascadeCSS'][$tag], $p); + foreach($classes AS $class) { + $this->_set_mergedCSS($this->mpdf->blk[$this->mpdf->blklvl]['cascadeCSS']['CLASS>>'.$class], $p); + } + $this->_set_mergedCSS($this->mpdf->blk[$this->mpdf->blklvl]['cascadeCSS']['ID>>'.$attr['ID']], $p); + foreach($classes AS $class) { + $this->_set_mergedCSS($this->mpdf->blk[$this->mpdf->blklvl]['cascadeCSS'][$tag.'>>CLASS>>'.$class], $p); + } + $this->_set_mergedCSS($this->mpdf->blk[$this->mpdf->blklvl]['cascadeCSS'][$tag.'>>ID>>'.$attr['ID']], $p); + } +/*-- TABLES --*/ + else if ($inherit == 'TOPTABLE' || $inherit == 'TABLE') { // NB looks at $this->tablecascadeCSS-1 for cascading CSS + // false, 9 = don't check for 'depth' and do set border dominance + $this->_set_mergedCSS($this->tablecascadeCSS[$this->tbCSSlvl-1][$tag], $p, false, 9); + foreach($classes AS $class) { + $this->_set_mergedCSS($this->tablecascadeCSS[$this->tbCSSlvl-1]['CLASS>>'.$class], $p, false, 9); + } + // STYLESHEET nth-child SELECTOR e.g. tr:nth-child(odd) td:nth-child(2n+1) + if ($tag=='TR' || $tag=='TD' || $tag=='TH') { + foreach($this->tablecascadeCSS[$this->tbCSSlvl-1] AS $k=>$val) { + if (preg_match('/'.$tag.'>>SELECTORNTHCHILD>>(.*)/',$k, $m)) { + $select = false; + if ($tag=='TR') { + $row = $this->mpdf->row; + $thnr = (isset($this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['is_thead']) ? count($this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['is_thead']) : 0); + $tfnr = (isset($this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['is_tfoot']) ? count($this->mpdf->table[$this->mpdf->tableLevel][$this->mpdf->tbctr[$this->mpdf->tableLevel]]['is_tfoot']) : 0); + if ($this->mpdf->tabletfoot) { $row -= $thnr; } + else if (!$this->mpdf->tablethead) { $row -= ($thnr + $tfnr); } + if ($m[1]=='ODD' && ($row % 2) == 0) { $select = true; } + else if ($m[1]=='EVEN' && ($row % 2) == 1) { $select = true; } + else if (preg_match('/(\d+)N\+(\d+)/',$m[1],$a)) { + if ((($row + 1) % $a[1]) == $a[2]) { $select = true; } + } + } + else if ($tag=='TD' || $tag=='TH') { + if ($m[1]=='ODD' && ($this->mpdf->col % 2) == 0) { $select = true; } + else if ($m[1]=='EVEN' && ($this->mpdf->col % 2) == 1) { $select = true; } + else if (preg_match('/(\d+)N\+(\d+)/',$m[1],$a)) { + if ((($this->mpdf->col + 1) % $a[1]) == $a[2]) { $select = true; } + } + } + if ($select) { + $this->_set_mergedCSS($this->tablecascadeCSS[$this->tbCSSlvl-1][$tag.'>>SELECTORNTHCHILD>>'.$m[1]], $p, false, 9); + } + } + } + } + $this->_set_mergedCSS($this->tablecascadeCSS[$this->tbCSSlvl-1]['ID>>'.$attr['ID']], $p, false, 9); + foreach($classes AS $class) { + $this->_set_mergedCSS($this->tablecascadeCSS[$this->tbCSSlvl-1][$tag.'>>CLASS>>'.$class], $p, false, 9); + } + $this->_set_mergedCSS($this->tablecascadeCSS[$this->tbCSSlvl-1][$tag.'>>ID>>'.$attr['ID']], $p, false, 9); + } +/*-- END TABLES --*/ + //=============================================== +/*-- LISTS --*/ + else if ($inherit == 'TOPLIST' || $inherit == 'LIST') { // NB looks at $this->listcascadeCSS-1 for cascading CSS + // false = don't check for 'depth' + $this->_set_mergedCSS($this->listcascadeCSS[$this->listCSSlvl-1][$tag], $p, false); + foreach($classes AS $class) { + $this->_set_mergedCSS($this->listcascadeCSS[$this->listCSSlvl-1]['CLASS>>'.$class], $p, false); + } + $this->_set_mergedCSS($this->listcascadeCSS[$this->listCSSlvl-1]['ID>>'.$attr['ID']], $p, false); + foreach($classes AS $class) { + $this->_set_mergedCSS($this->listcascadeCSS[$this->listCSSlvl-1][$tag.'>>CLASS>>'.$class], $p, false); + } + $this->_set_mergedCSS($this->listcascadeCSS[$this->listCSSlvl-1][$tag.'>>ID>>'.$attr['ID']], $p, false); + } +/*-- END LISTS --*/ + //=============================================== + //=============================================== + // INLINE STYLE e.g. style="CSS:property" + if (isset($attr['STYLE'])) { + $zp = $this->readInlineCSS($attr['STYLE']); + if ($tag=='TD' || $tag=='TH') { $this->setBorderDominance($zp, 9); } // *TABLES* // *TABLES-ADVANCED-BORDERS* + if (is_array($zp)) { + $p = array_merge($p,$zp); + $this->_mergeBorders($p,$zp); + } + } + //=============================================== + //=============================================== + // INLINE ATTRIBUTES e.g. .. ALIGN="CENTER"> + if (isset($attr['LANG']) and $attr['LANG']!='') { + $p['LANG'] = $attr['LANG']; + } + if (isset($attr['COLOR']) and $attr['COLOR']!='') { + $p['COLOR'] = $attr['COLOR']; + } + if ($tag != 'INPUT') { + if (isset($attr['WIDTH']) and $attr['WIDTH']!='') { + $p['WIDTH'] = $attr['WIDTH']; + } + if (isset($attr['HEIGHT']) and $attr['HEIGHT']!='') { + $p['HEIGHT'] = $attr['HEIGHT']; + } + } + if ($tag == 'FONT') { + if (isset($attr['FACE'])) { + $p['FONT-FAMILY'] = $attr['FACE']; + } + if (isset($attr['SIZE']) and $attr['SIZE']!='') { + $s = ''; + if ($attr['SIZE'] === '+1') { $s = '120%'; } + else if ($attr['SIZE'] === '-1') { $s = '86%'; } + else if ($attr['SIZE'] === '1') { $s = 'XX-SMALL'; } + else if ($attr['SIZE'] == '2') { $s = 'X-SMALL'; } + else if ($attr['SIZE'] == '3') { $s = 'SMALL'; } + else if ($attr['SIZE'] == '4') { $s = 'MEDIUM'; } + else if ($attr['SIZE'] == '5') { $s = 'LARGE'; } + else if ($attr['SIZE'] == '6') { $s = 'X-LARGE'; } + else if ($attr['SIZE'] == '7') { $s = 'XX-LARGE'; } + if ($s) $p['FONT-SIZE'] = $s; + } + } + if (isset($attr['VALIGN']) and $attr['VALIGN']!='') { + $p['VERTICAL-ALIGN'] = $attr['VALIGN']; + } + if (isset($attr['VSPACE']) and $attr['VSPACE']!='') { + $p['MARGIN-TOP'] = $attr['VSPACE']; + $p['MARGIN-BOTTOM'] = $attr['VSPACE']; + } + if (isset($attr['HSPACE']) and $attr['HSPACE']!='') { + $p['MARGIN-LEFT'] = $attr['HSPACE']; + $p['MARGIN-RIGHT'] = $attr['HSPACE']; + } + //=============================================== + return $p; +} + +function PreviewBlockCSS($tag,$attr) { + // Looks ahead from current block level to a new level + $p = array(); + $zp = array(); + $oldcascadeCSS = $this->mpdf->blk[$this->mpdf->blklvl]['cascadeCSS']; + $classes = array(); + if (isset($attr['CLASS'])) { $classes = preg_split('/\s+/',$attr['CLASS']); } + //=============================================== + // DEFAULT for this TAG set in DefaultCSS + if (isset($this->mpdf->defaultCSS[$tag])) { + $zp = $this->fixCSS($this->mpdf->defaultCSS[$tag]); + if (is_array($zp)) { $p = array_merge($zp,$p); } // Inherited overwrites default + } + // STYLESHEET TAG e.g. h1 p div table + if (isset($this->CSS[$tag])) { + $zp = $this->CSS[$tag]; + if (is_array($zp)) { $p = array_merge($p,$zp); } + } + // STYLESHEET CLASS e.g. .smallone{} .redletter{} + foreach($classes AS $class) { + $zp = array(); + if (isset($this->CSS['CLASS>>'.$class])) { $zp = $this->CSS['CLASS>>'.$class]; } + if (is_array($zp)) { $p = array_merge($p,$zp); } + } + // STYLESHEET ID e.g. #smallone{} #redletter{} + if (isset($attr['ID']) && isset($this->CSS['ID>>'.$attr['ID']])) { + $zp = $this->CSS['ID>>'.$attr['ID']]; + if (is_array($zp)) { $p = array_merge($p,$zp); } + } + // STYLESHEET CLASS e.g. p.smallone{} div.redletter{} + foreach($classes AS $class) { + $zp = array(); + if (isset($this->CSS[$tag.'>>CLASS>>'.$class])) { $zp = $this->CSS[$tag.'>>CLASS>>'.$class]; } + if (is_array($zp)) { $p = array_merge($p,$zp); } + } + // STYLESHEET CLASS e.g. p#smallone{} div#redletter{} + if (isset($attr['ID']) && isset($this->CSS[$tag.'>>ID>>'.$attr['ID']])) { + $zp = $this->CSS[$tag.'>>ID>>'.$attr['ID']]; + if (is_array($zp)) { $p = array_merge($p,$zp); } + } + //=============================================== + // STYLESHEET TAG e.g. div h1 div p + + $this->_set_mergedCSS($oldcascadeCSS[$tag], $p); + // STYLESHEET CLASS e.g. .smallone{} .redletter{} + foreach($classes AS $class) { + + $this->_set_mergedCSS($oldcascadeCSS['CLASS>>'.$class], $p); + } + // STYLESHEET CLASS e.g. #smallone{} #redletter{} + if (isset($attr['ID'])) { + + $this->_set_mergedCSS($oldcascadeCSS['ID>>'.$attr['ID']], $p); + } + // STYLESHEET CLASS e.g. div.smallone{} p.redletter{} + foreach($classes AS $class) { + + $this->_set_mergedCSS($oldcascadeCSS[$tag.'>>CLASS>>'.$class], $p); + } + // STYLESHEET CLASS e.g. div#smallone{} p#redletter{} + if (isset($attr['ID'])) { + + $this->_set_mergedCSS($oldcascadeCSS[$tag.'>>ID>>'.$attr['ID']], $p); + } + //=============================================== + // INLINE STYLE e.g. style="CSS:property" + if (isset($attr['STYLE'])) { + $zp = $this->readInlineCSS($attr['STYLE']); + if (is_array($zp)) { $p = array_merge($p,$zp); } + } + //=============================================== + return $p; +} + + + + + +} // end of class + +?> \ No newline at end of file diff --git a/include/mpdf/classes/gif.php b/include/mpdf/classes/gif.php new file mode 100755 index 0000000000000000000000000000000000000000..582de0d6f49ecf5fa8743b2685ea018c934decb4 --- /dev/null +++ b/include/mpdf/classes/gif.php @@ -0,0 +1,700 @@ +<?php +/////////////////////////////////////////////////////////////////////////////////////////////////// +// 2009-12-22 Adapted for mPDF 4.2 +/////////////////////////////////////////////////////////////////////////////////////////////////// +// GIF Util - (C) 2003 Yamasoft (S/C) +// http://www.yamasoft.com +// All Rights Reserved +// This file can be freely copied, distributed, modified, updated by anyone under the only +// condition to leave the original address (Yamasoft, http://www.yamasoft.com) and this header. +/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////// +// 2009-12-22 Adapted INB +// Functions calling functionname($x, $len = 0) were not working on PHP5.1.5 as pass by reference +// All edited to $len = 0; then call function. +/////////////////////////////////////////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +class CGIFLZW +{ + var $MAX_LZW_BITS; + var $Fresh, $CodeSize, $SetCodeSize, $MaxCode, $MaxCodeSize, $FirstCode, $OldCode; + var $ClearCode, $EndCode, $Next, $Vals, $Stack, $sp, $Buf, $CurBit, $LastBit, $Done, $LastByte; + + /////////////////////////////////////////////////////////////////////////// + + // CONSTRUCTOR + function CGIFLZW() + { + $this->MAX_LZW_BITS = 12; + unSet($this->Next); + unSet($this->Vals); + unSet($this->Stack); + unSet($this->Buf); + + $this->Next = range(0, (1 << $this->MAX_LZW_BITS) - 1); + $this->Vals = range(0, (1 << $this->MAX_LZW_BITS) - 1); + $this->Stack = range(0, (1 << ($this->MAX_LZW_BITS + 1)) - 1); + $this->Buf = range(0, 279); + } + + /////////////////////////////////////////////////////////////////////////// + + function deCompress($data, &$datLen) + { + $stLen = strlen($data); + $datLen = 0; + $ret = ""; + $dp = 0; // data pointer + + // INITIALIZATION + $this->LZWCommandInit($data, $dp); + + while(($iIndex = $this->LZWCommand($data, $dp)) >= 0) { + $ret .= chr($iIndex); + } + + $datLen = $dp; + + if($iIndex != -2) { + return false; + } + + return $ret; + } + + /////////////////////////////////////////////////////////////////////////// + function LZWCommandInit(&$data, &$dp) + { + $this->SetCodeSize = ord($data[0]); + $dp += 1; + + $this->CodeSize = $this->SetCodeSize + 1; + $this->ClearCode = 1 << $this->SetCodeSize; + $this->EndCode = $this->ClearCode + 1; + $this->MaxCode = $this->ClearCode + 2; + $this->MaxCodeSize = $this->ClearCode << 1; + + $this->GetCodeInit($data, $dp); + + $this->Fresh = 1; + for($i = 0; $i < $this->ClearCode; $i++) { + $this->Next[$i] = 0; + $this->Vals[$i] = $i; + } + + for(; $i < (1 << $this->MAX_LZW_BITS); $i++) { + $this->Next[$i] = 0; + $this->Vals[$i] = 0; + } + + $this->sp = 0; + return 1; + } + + function LZWCommand(&$data, &$dp) + { + if($this->Fresh) { + $this->Fresh = 0; + do { + $this->FirstCode = $this->GetCode($data, $dp); + $this->OldCode = $this->FirstCode; + } + while($this->FirstCode == $this->ClearCode); + + return $this->FirstCode; + } + + if($this->sp > 0) { + $this->sp--; + return $this->Stack[$this->sp]; + } + + while(($Code = $this->GetCode($data, $dp)) >= 0) { + if($Code == $this->ClearCode) { + for($i = 0; $i < $this->ClearCode; $i++) { + $this->Next[$i] = 0; + $this->Vals[$i] = $i; + } + + for(; $i < (1 << $this->MAX_LZW_BITS); $i++) { + $this->Next[$i] = 0; + $this->Vals[$i] = 0; + } + + $this->CodeSize = $this->SetCodeSize + 1; + $this->MaxCodeSize = $this->ClearCode << 1; + $this->MaxCode = $this->ClearCode + 2; + $this->sp = 0; + $this->FirstCode = $this->GetCode($data, $dp); + $this->OldCode = $this->FirstCode; + + return $this->FirstCode; + } + + if($Code == $this->EndCode) { + return -2; + } + + $InCode = $Code; + if($Code >= $this->MaxCode) { + $this->Stack[$this->sp++] = $this->FirstCode; + $Code = $this->OldCode; + } + + while($Code >= $this->ClearCode) { + $this->Stack[$this->sp++] = $this->Vals[$Code]; + + if($Code == $this->Next[$Code]) // Circular table entry, big GIF Error! + return -1; + + $Code = $this->Next[$Code]; + } + + $this->FirstCode = $this->Vals[$Code]; + $this->Stack[$this->sp++] = $this->FirstCode; + + if(($Code = $this->MaxCode) < (1 << $this->MAX_LZW_BITS)) { + $this->Next[$Code] = $this->OldCode; + $this->Vals[$Code] = $this->FirstCode; + $this->MaxCode++; + + if(($this->MaxCode >= $this->MaxCodeSize) && ($this->MaxCodeSize < (1 << $this->MAX_LZW_BITS))) { + $this->MaxCodeSize *= 2; + $this->CodeSize++; + } + } + + $this->OldCode = $InCode; + if($this->sp > 0) { + $this->sp--; + return $this->Stack[$this->sp]; + } + } + + return $Code; + } + + /////////////////////////////////////////////////////////////////////////// + + function GetCodeInit(&$data, &$dp) + { + $this->CurBit = 0; + $this->LastBit = 0; + $this->Done = 0; + $this->LastByte = 2; + return 1; + } + + function GetCode(&$data, &$dp) + { + if(($this->CurBit + $this->CodeSize) >= $this->LastBit) { + if($this->Done) { + if($this->CurBit >= $this->LastBit) { + // Ran off the end of my bits + return 0; + } + return -1; + } + + $this->Buf[0] = $this->Buf[$this->LastByte - 2]; + $this->Buf[1] = $this->Buf[$this->LastByte - 1]; + + $Count = ord($data[$dp]); + $dp += 1; + + if($Count) { + for($i = 0; $i < $Count; $i++) { + $this->Buf[2 + $i] = ord($data[$dp+$i]); + } + $dp += $Count; + } + else { + $this->Done = 1; + } + + $this->LastByte = 2 + $Count; + $this->CurBit = ($this->CurBit - $this->LastBit) + 16; + $this->LastBit = (2 + $Count) << 3; + } + + $iRet = 0; + for($i = $this->CurBit, $j = 0; $j < $this->CodeSize; $i++, $j++) { + $iRet |= (($this->Buf[intval($i / 8)] & (1 << ($i % 8))) != 0) << $j; + } + + $this->CurBit += $this->CodeSize; + return $iRet; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +class CGIFCOLORTABLE +{ + var $m_nColors; + var $m_arColors; + + /////////////////////////////////////////////////////////////////////////// + + // CONSTRUCTOR + function CGIFCOLORTABLE() + { + unSet($this->m_nColors); + unSet($this->m_arColors); + } + + /////////////////////////////////////////////////////////////////////////// + + function load($lpData, $num) + { + $this->m_nColors = 0; + $this->m_arColors = array(); + + for($i = 0; $i < $num; $i++) { + $rgb = substr($lpData, $i * 3, 3); + if(strlen($rgb) < 3) { + return false; + } + + $this->m_arColors[] = (ord($rgb[2]) << 16) + (ord($rgb[1]) << 8) + ord($rgb[0]); + $this->m_nColors++; + } + + return true; + } + + /////////////////////////////////////////////////////////////////////////// + + function toString() + { + $ret = ""; + + for($i = 0; $i < $this->m_nColors; $i++) { + $ret .= + chr(($this->m_arColors[$i] & 0x000000FF)) . // R + chr(($this->m_arColors[$i] & 0x0000FF00) >> 8) . // G + chr(($this->m_arColors[$i] & 0x00FF0000) >> 16); // B + } + + return $ret; + } + + + /////////////////////////////////////////////////////////////////////////// + + function colorIndex($rgb) + { + $rgb = intval($rgb) & 0xFFFFFF; + $r1 = ($rgb & 0x0000FF); + $g1 = ($rgb & 0x00FF00) >> 8; + $b1 = ($rgb & 0xFF0000) >> 16; + $idx = -1; + + for($i = 0; $i < $this->m_nColors; $i++) { + $r2 = ($this->m_arColors[$i] & 0x000000FF); + $g2 = ($this->m_arColors[$i] & 0x0000FF00) >> 8; + $b2 = ($this->m_arColors[$i] & 0x00FF0000) >> 16; + $d = abs($r2 - $r1) + abs($g2 - $g1) + abs($b2 - $b1); + + if(($idx == -1) || ($d < $dif)) { + $idx = $i; + $dif = $d; + } + } + + return $idx; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +class CGIFFILEHEADER +{ + var $m_lpVer; + var $m_nWidth; + var $m_nHeight; + var $m_bGlobalClr; + var $m_nColorRes; + var $m_bSorted; + var $m_nTableSize; + var $m_nBgColor; + var $m_nPixelRatio; + var $m_colorTable; + + /////////////////////////////////////////////////////////////////////////// + + // CONSTRUCTOR + function CGIFFILEHEADER() + { + unSet($this->m_lpVer); + unSet($this->m_nWidth); + unSet($this->m_nHeight); + unSet($this->m_bGlobalClr); + unSet($this->m_nColorRes); + unSet($this->m_bSorted); + unSet($this->m_nTableSize); + unSet($this->m_nBgColor); + unSet($this->m_nPixelRatio); + unSet($this->m_colorTable); + } + + /////////////////////////////////////////////////////////////////////////// + + function load($lpData, &$hdrLen) + { + $hdrLen = 0; + + $this->m_lpVer = substr($lpData, 0, 6); + if(($this->m_lpVer <> "GIF87a") && ($this->m_lpVer <> "GIF89a")) { + return false; + } + + $this->m_nWidth = $this->w2i(substr($lpData, 6, 2)); + $this->m_nHeight = $this->w2i(substr($lpData, 8, 2)); + if(!$this->m_nWidth || !$this->m_nHeight) { + return false; + } + + $b = ord(substr($lpData, 10, 1)); + $this->m_bGlobalClr = ($b & 0x80) ? true : false; + $this->m_nColorRes = ($b & 0x70) >> 4; + $this->m_bSorted = ($b & 0x08) ? true : false; + $this->m_nTableSize = 2 << ($b & 0x07); + $this->m_nBgColor = ord(substr($lpData, 11, 1)); + $this->m_nPixelRatio = ord(substr($lpData, 12, 1)); + $hdrLen = 13; + + if($this->m_bGlobalClr) { + $this->m_colorTable = new CGIFCOLORTABLE(); + if(!$this->m_colorTable->load(substr($lpData, $hdrLen), $this->m_nTableSize)) { + return false; + } + $hdrLen += 3 * $this->m_nTableSize; + } + + return true; + } + + /////////////////////////////////////////////////////////////////////////// + + function w2i($str) + { + return ord(substr($str, 0, 1)) + (ord(substr($str, 1, 1)) << 8); + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +class CGIFIMAGEHEADER +{ + var $m_nLeft; + var $m_nTop; + var $m_nWidth; + var $m_nHeight; + var $m_bLocalClr; + var $m_bInterlace; + var $m_bSorted; + var $m_nTableSize; + var $m_colorTable; + + /////////////////////////////////////////////////////////////////////////// + + // CONSTRUCTOR + function CGIFIMAGEHEADER() + { + unSet($this->m_nLeft); + unSet($this->m_nTop); + unSet($this->m_nWidth); + unSet($this->m_nHeight); + unSet($this->m_bLocalClr); + unSet($this->m_bInterlace); + unSet($this->m_bSorted); + unSet($this->m_nTableSize); + unSet($this->m_colorTable); + } + + /////////////////////////////////////////////////////////////////////////// + + function load($lpData, &$hdrLen) + { + $hdrLen = 0; + + $this->m_nLeft = $this->w2i(substr($lpData, 0, 2)); + $this->m_nTop = $this->w2i(substr($lpData, 2, 2)); + $this->m_nWidth = $this->w2i(substr($lpData, 4, 2)); + $this->m_nHeight = $this->w2i(substr($lpData, 6, 2)); + + if(!$this->m_nWidth || !$this->m_nHeight) { + return false; + } + + $b = ord($lpData{8}); + $this->m_bLocalClr = ($b & 0x80) ? true : false; + $this->m_bInterlace = ($b & 0x40) ? true : false; + $this->m_bSorted = ($b & 0x20) ? true : false; + $this->m_nTableSize = 2 << ($b & 0x07); + $hdrLen = 9; + + if($this->m_bLocalClr) { + $this->m_colorTable = new CGIFCOLORTABLE(); + if(!$this->m_colorTable->load(substr($lpData, $hdrLen), $this->m_nTableSize)) { + return false; + } + $hdrLen += 3 * $this->m_nTableSize; + } + + return true; + } + + /////////////////////////////////////////////////////////////////////////// + + function w2i($str) + { + return ord(substr($str, 0, 1)) + (ord(substr($str, 1, 1)) << 8); + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +class CGIFIMAGE +{ + var $m_disp; + var $m_bUser; + var $m_bTrans; + var $m_nDelay; + var $m_nTrans; + var $m_lpComm; + var $m_gih; + var $m_data; + var $m_lzw; + + /////////////////////////////////////////////////////////////////////////// + + function CGIFIMAGE() + { + unSet($this->m_disp); + unSet($this->m_bUser); + unSet($this->m_bTrans); + unSet($this->m_nDelay); + unSet($this->m_nTrans); + unSet($this->m_lpComm); + unSet($this->m_data); + $this->m_gih = new CGIFIMAGEHEADER(); + $this->m_lzw = new CGIFLZW(); + } + + /////////////////////////////////////////////////////////////////////////// + + function load($data, &$datLen) + { + $datLen = 0; + + while(true) { + $b = ord($data[0]); + $data = substr($data, 1); + $datLen++; + + switch($b) { + case 0x21: // Extension + $len = 0; + if(!$this->skipExt($data, $len)) { + return false; + } + $datLen += $len; + break; + + case 0x2C: // Image + // LOAD HEADER & COLOR TABLE + $len = 0; + if(!$this->m_gih->load($data, $len)) { + return false; + } + $data = substr($data, $len); + $datLen += $len; + + // ALLOC BUFFER + $len = 0; + + if(!($this->m_data = $this->m_lzw->deCompress($data, $len))) { + return false; + } + + $data = substr($data, $len); + $datLen += $len; + + if($this->m_gih->m_bInterlace) { + $this->deInterlace(); + } + + return true; + + case 0x3B: // EOF + default: + return false; + } + } + return false; + } + + /////////////////////////////////////////////////////////////////////////// + + function skipExt(&$data, &$extLen) + { + $extLen = 0; + + $b = ord($data[0]); + $data = substr($data, 1); + $extLen++; + + switch($b) { + case 0xF9: // Graphic Control + $b = ord($data[1]); + $this->m_disp = ($b & 0x1C) >> 2; + $this->m_bUser = ($b & 0x02) ? true : false; + $this->m_bTrans = ($b & 0x01) ? true : false; + $this->m_nDelay = $this->w2i(substr($data, 2, 2)); + $this->m_nTrans = ord($data[4]); + break; + + case 0xFE: // Comment + $this->m_lpComm = substr($data, 1, ord($data[0])); + break; + + case 0x01: // Plain text + break; + + case 0xFF: // Application + break; + } + + // SKIP DEFAULT AS DEFS MAY CHANGE + $b = ord($data[0]); + $data = substr($data, 1); + $extLen++; + while($b > 0) { + $data = substr($data, $b); + $extLen += $b; + $b = ord($data[0]); + $data = substr($data, 1); + $extLen++; + } + return true; + } + + /////////////////////////////////////////////////////////////////////////// + + function w2i($str) + { + return ord(substr($str, 0, 1)) + (ord(substr($str, 1, 1)) << 8); + } + + /////////////////////////////////////////////////////////////////////////// + + function deInterlace() + { + $data = $this->m_data; + + for($i = 0; $i < 4; $i++) { + switch($i) { + case 0: + $s = 8; + $y = 0; + break; + + case 1: + $s = 8; + $y = 4; + break; + + case 2: + $s = 4; + $y = 2; + break; + + case 3: + $s = 2; + $y = 1; + break; + } + + for(; $y < $this->m_gih->m_nHeight; $y += $s) { + $lne = substr($this->m_data, 0, $this->m_gih->m_nWidth); + $this->m_data = substr($this->m_data, $this->m_gih->m_nWidth); + + $data = + substr($data, 0, $y * $this->m_gih->m_nWidth) . + $lne . + substr($data, ($y + 1) * $this->m_gih->m_nWidth); + } + } + + $this->m_data = $data; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +class CGIF +{ + var $m_gfh; + var $m_lpData; + var $m_img; + var $m_bLoaded; + + /////////////////////////////////////////////////////////////////////////// + + // CONSTRUCTOR + function CGIF() + { + $this->m_gfh = new CGIFFILEHEADER(); + $this->m_img = new CGIFIMAGE(); + $this->m_lpData = ""; + $this->m_bLoaded = false; + } + + /////////////////////////////////////////////////////////////////////////// + function ClearData() { + $this->m_lpData = ''; + unSet($this->m_img->m_data); + unSet($this->m_img->m_lzw->Next); + unSet($this->m_img->m_lzw->Vals); + unSet($this->m_img->m_lzw->Stack); + unSet($this->m_img->m_lzw->Buf); + } + + function loadFile(&$data, $iIndex) + { + if($iIndex < 0) { + return false; + } + $this->m_lpData = $data; + + // GET FILE HEADER + $len = 0; + if(!$this->m_gfh->load($this->m_lpData, $len)) { + return false; + } + + $this->m_lpData = substr($this->m_lpData, $len); + + do { + $imgLen = 0; + if(!$this->m_img->load($this->m_lpData, $imgLen)) { + return false; + } + $this->m_lpData = substr($this->m_lpData, $imgLen); + } + while($iIndex-- > 0); + + $this->m_bLoaded = true; + return true; + } + +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +?> \ No newline at end of file diff --git a/include/mpdf/classes/grad.php b/include/mpdf/classes/grad.php new file mode 100755 index 0000000000000000000000000000000000000000..b5db60204c705fe2650fd6b3ec0844393a0e468b --- /dev/null +++ b/include/mpdf/classes/grad.php @@ -0,0 +1,723 @@ +<?php + +class grad { + +var $mpdf = null; + +function grad(&$mpdf) { + $this->mpdf = $mpdf; +} + +// mPDF 5.3.A1 +function CoonsPatchMesh($x, $y, $w, $h, $patch_array=array(), $x_min=0, $x_max=1, $y_min=0, $y_max=1, $colspace='RGB', $return=false){ + $s=' q '; + $s.=sprintf(' %.3F %.3F %.3F %.3F re W n ', $x*_MPDFK, ($this->mpdf->h-$y)*_MPDFK, $w*_MPDFK, -$h*_MPDFK); + $s.=sprintf(' %.3F 0 0 %.3F %.3F %.3F cm ', $w*_MPDFK, $h*_MPDFK, $x*_MPDFK, ($this->mpdf->h-($y+$h))*_MPDFK); + $n = count($this->mpdf->gradients)+1; + $this->mpdf->gradients[$n]['type'] = 6; //coons patch mesh + $this->mpdf->gradients[$n]['colorspace'] = $colspace; //coons patch mesh + $bpcd=65535; //16 BitsPerCoordinate + $trans = false; + $this->mpdf->gradients[$n]['stream']=''; + for($i=0;$i<count($patch_array);$i++){ + $this->mpdf->gradients[$n]['stream'].=chr($patch_array[$i]['f']); //start with the edge flag as 8 bit + for($j=0;$j<count($patch_array[$i]['points']);$j++){ + //each point as 16 bit + if (($j % 2) == 1) { // Y coordinate (adjusted as input is From top left) + $patch_array[$i]['points'][$j]=(($patch_array[$i]['points'][$j]-$y_min)/($y_max-$y_min))*$bpcd; + $patch_array[$i]['points'][$j]=$bpcd-$patch_array[$i]['points'][$j]; + } + else { + $patch_array[$i]['points'][$j]=(($patch_array[$i]['points'][$j]-$x_min)/($x_max-$x_min))*$bpcd; + } + if($patch_array[$i]['points'][$j]<0) $patch_array[$i]['points'][$j]=0; + if($patch_array[$i]['points'][$j]>$bpcd) $patch_array[$i]['points'][$j]=$bpcd; + $this->mpdf->gradients[$n]['stream'].=chr(floor($patch_array[$i]['points'][$j]/256)); + $this->mpdf->gradients[$n]['stream'].=chr(floor($patch_array[$i]['points'][$j]%256)); + } + for($j=0;$j<count($patch_array[$i]['colors']);$j++){ + //each color component as 8 bit + if ($colspace=='RGB') { + $this->mpdf->gradients[$n]['stream'].=($patch_array[$i]['colors'][$j][1]); + $this->mpdf->gradients[$n]['stream'].=($patch_array[$i]['colors'][$j][2]); + $this->mpdf->gradients[$n]['stream'].=($patch_array[$i]['colors'][$j][3]); + if (isset($patch_array[$i]['colors'][$j][4]) && ord($patch_array[$i]['colors'][$j][4])<100) { $trans = true; } + } + else if ($colspace=='CMYK') { + $this->mpdf->gradients[$n]['stream'].=chr(ord($patch_array[$i]['colors'][$j][1])*2.55); + $this->mpdf->gradients[$n]['stream'].=chr(ord($patch_array[$i]['colors'][$j][2])*2.55); + $this->mpdf->gradients[$n]['stream'].=chr(ord($patch_array[$i]['colors'][$j][3])*2.55); + $this->mpdf->gradients[$n]['stream'].=chr(ord($patch_array[$i]['colors'][$j][4])*2.55); + if (isset($patch_array[$i]['colors'][$j][5]) && ord($patch_array[$i]['colors'][$j][5])<100) { $trans = true; } + } + else if ($colspace=='Gray') { + $this->mpdf->gradients[$n]['stream'].=($patch_array[$i]['colors'][$j][1]); + if ($patch_array[$i]['colors'][$j][2]==1) { $trans = true; } // transparency converted from rgba or cmyka() + } + } + } + // TRANSPARENCY + if ($trans) { + $this->mpdf->gradients[$n]['stream_trans']=''; + for($i=0;$i<count($patch_array);$i++){ + $this->mpdf->gradients[$n]['stream_trans'].=chr($patch_array[$i]['f']); + for($j=0;$j<count($patch_array[$i]['points']);$j++){ + //each point as 16 bit + $this->mpdf->gradients[$n]['stream_trans'].=chr(floor($patch_array[$i]['points'][$j]/256)); + $this->mpdf->gradients[$n]['stream_trans'].=chr(floor($patch_array[$i]['points'][$j]%256)); + } + for($j=0;$j<count($patch_array[$i]['colors']);$j++){ + //each color component as 8 bit // OPACITY + if ($colspace=='RGB') { + $this->mpdf->gradients[$n]['stream_trans'].=chr(intval(ord($patch_array[$i]['colors'][$j][4])*2.55)); + } + else if ($colspace=='CMYK') { + $this->mpdf->gradients[$n]['stream_trans'].=chr(intval(ord($patch_array[$i]['colors'][$j][5])*2.55)); + } + else if ($colspace=='Gray') { + $this->mpdf->gradients[$n]['stream_trans'].=chr(intval(ord($patch_array[$i]['colors'][$j][3])*2.55)); + } + } + } + $this->mpdf->gradients[$n]['trans'] = true; + $s .= ' /TGS'.$n.' gs '; + } + //paint the gradient + $s .= '/Sh'.$n.' sh'."\n"; + //restore previous Graphic State + $s .= 'Q'."\n"; + if ($return) { return $s; } + else { $this->mpdf->_out($s); } +} + + +// type = linear:2; radial: 3; +// Linear: $coords - array of the form (x1, y1, x2, y2) which defines the gradient vector (see linear_gradient_coords.jpg). +// The default value is from left to right (x1=0, y1=0, x2=1, y2=0). +// Radial: $coords - array of the form (fx, fy, cx, cy, r) where (fx, fy) is the starting point of the gradient with color1, +// (cx, cy) is the center of the circle with color2, and r is the radius of the circle (see radial_gradient_coords.jpg). +// (fx, fy) should be inside the circle, otherwise some areas will not be defined +// $col = array(R,G,B/255); or array(G/255); or array(C,M,Y,K/100) +// $stops = array('col'=>$col [, 'opacity'=>0-1] [, 'offset'=>0-1]) +function Gradient($x, $y, $w, $h, $type, $stops=array(), $colorspace='RGB', $coords='', $extend='', $return=false, $is_mask=false) { + if (strtoupper(substr($type,0,1)) == 'L') { $type = 2; } // linear + else if (strtoupper(substr($type,0,1)) == 'R') { $type = 3; } // radial + if ($colorspace != 'CMYK' && $colorspace != 'Gray') { + $colorspace = 'RGB'; + } + $bboxw = $w; + $bboxh = $h; + $usex = $x; + $usey = $y; + $usew = $bboxw; + $useh = $bboxh; + if ($type < 1) { $type = 2; } + if ($coords[0]!==false && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$coords[0],$m)) { + $tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false); + if ($tmp) { $coords[0] = $tmp/$w; } + } + if ($coords[1]!==false && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$coords[1],$m)) { + $tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false); + if ($tmp) { $coords[1] = 1-($tmp/$h); } + } + // LINEAR + if ($type == 2) { + $angle = $coords[4]; + $repeat = $coords[5]; + // ALL POINTS SET (default for custom mPDF linear gradient) - no -moz + if ($coords[0]!==false && $coords[1]!==false && $coords[2]!==false && $coords[3]!==false) { + // do nothing - coords used as they are + } + + // If both a <point> and <angle> are defined, the gradient axis starts from the point and runs along the angle. The end point is + // defined as before - in this case start points may not be in corners, and axis may not correctly fall in the right quadrant. + // NO end points (Angle defined & Start points) + else if ($angle!==false && $coords[0]!==false && $coords[1]!==false && $coords[2]===false && $coords[3]===false) { + if ($angle==0 || $angle==360) { $coords[3]=$coords[1]; if ($coords[0]==1) $coords[2]=2; else $coords[2]=1; } + else if ($angle==90) { $coords[2]=$coords[0]; $coords[3]=1; if ($coords[1]==1) $coords[3]=2; else $coords[3]=1; } + else if ($angle==180) { if ($coords[4]==0) $coords[2]=-1; else $coords[2]=0; $coords[3]=$coords[1]; } + else if ($angle==270) { $coords[2]=$coords[0]; if ($coords[1]==0) $coords[3]=-1; else $coords[3]=0; } + else { + $endx=1; $endy=1; + if ($angle <=90) { + if ($angle <=45) { $endy=tan(deg2rad($angle)); } + else { $endx=tan(deg2rad(90-$angle)); } + $b = atan2(($endy*$bboxh), ($endx*$bboxw)); + $ny = 1 - $coords[1] - (tan($b) * (1-$coords[0])); + $tx = sin($b) * cos($b) * $ny; + $ty = cos($b) * cos($b) * $ny; + $coords[2] = 1+$tx; $coords[3] = 1-$ty; + } + else if ($angle <=180) { + if ($angle <=135) { $endx=tan(deg2rad($angle-90)); } + else { $endy=tan(deg2rad(180-$angle)); } + $b = atan2(($endy*$bboxh), ($endx*$bboxw)); + $ny = 1 - $coords[1] - (tan($b) * ($coords[0])); + $tx = sin($b) * cos($b) * $ny; + $ty = cos($b) * cos($b) * $ny; + $coords[2] = -$tx; $coords[3] = 1-$ty; + } + else if ($angle <=270) { + if ($angle <=225) { $endy=tan(deg2rad($angle-180)); } + else { $endx=tan(deg2rad(270-$angle)); } + $b = atan2(($endy*$bboxh), ($endx*$bboxw)); + $ny = $coords[1] - (tan($b) * ($coords[0])); + $tx = sin($b) * cos($b) * $ny; + $ty = cos($b) * cos($b) * $ny; + $coords[2] = -$tx; $coords[3] = $ty; + } + else { + if ($angle <=315) { $endx=tan(deg2rad($angle-270)); } + else { $endy=tan(deg2rad(360-$angle)); } + $b = atan2(($endy*$bboxh), ($endx*$bboxw)); + $ny = $coords[1] - (tan($b) * (1-$coords[0])); + $tx = sin($b) * cos($b) * $ny; + $ty = cos($b) * cos($b) * $ny; + $coords[2] = 1+$tx; $coords[3] = $ty; + + } + } + } + + // -moz If the first parameter is only an <angle>, the gradient axis starts from the box's corner that would ensure the + // axis goes through the box. The axis runs along the specified angle. The end point of the axis is defined such that the + // farthest corner of the box from the starting point is perpendicular to the gradient axis at that point. + // NO end points or Start points (Angle defined) + else if ($angle!==false && $coords[0]===false && $coords[1]===false) { + if ($angle==0 || $angle==360) { $coords[0]=0; $coords[1]=0; $coords[2]=1; $coords[3]=0; } + else if ($angle==90) { $coords[0]=0; $coords[1]=0; $coords[2]=0; $coords[3]=1; } + else if ($angle==180) { $coords[0]=1; $coords[1]=0; $coords[2]=0; $coords[3]=0; } + else if ($angle==270) { $coords[0]=0; $coords[1]=1; $coords[2]=0; $coords[3]=0; } + else { + if ($angle <=90) { + $coords[0]=0; $coords[1]=0; + if ($angle <=45) { $endx=1; $endy=tan(deg2rad($angle)); } + else { $endx=tan(deg2rad(90-$angle)); $endy=1; } + } + else if ($angle <=180) { + $coords[0]=1; $coords[1]=0; + if ($angle <=135) { $endx=tan(deg2rad($angle-90)); $endy=1; } + else { $endx=1; $endy=tan(deg2rad(180-$angle)); } + } + else if ($angle <=270) { + $coords[0]=1; $coords[1]=1; + if ($angle <=225) { $endx=1; $endy=tan(deg2rad($angle-180)); } + else { $endx=tan(deg2rad(270-$angle)); $endy=1; } + } + else { + $coords[0]=0; $coords[1]=1; + if ($angle <=315) { $endx=tan(deg2rad($angle-270)); $endy=1; } + else { $endx=1; $endy=tan(deg2rad(360-$angle)); } + } + $b = atan2(($endy*$bboxh), ($endx*$bboxw)); + $h2 = $bboxh - ($bboxh * tan($b)); + $px = $bboxh + ($h2 * sin($b) * cos($b)); + $py = ($bboxh * tan($b)) + ($h2 * sin($b) * sin($b)); + $x1 = $px / $bboxh; + $y1 = $py / $bboxh; + if ($angle <=90) { $coords[2] = $x1; $coords[3] = $y1; } + else if ($angle <=180) { $coords[2] = 1-$x1; $coords[3] = $y1; } + else if ($angle <=270) { $coords[2] = 1-$x1; $coords[3] = 1-$y1; } + else { $coords[2] = $x1; $coords[3] = 1-$y1; } + } + } + // -moz If the first parameter to the gradient function is only a <point>, the gradient axis starts from the specified point, + // and ends at the point you would get if you rotated the starting point by 180 degrees about the center of the box that the + // gradient is to be applied to. + // NO angle and NO end points (Start points defined) + else if ((!isset($angle) || $angle===false) && $coords[0]!==false && $coords[1]!==false) { // should have start and end defined + $coords[2] = 1-$coords[0]; $coords[3] = 1-$coords[1]; + $angle = rad2deg(atan2($coords[3]-$coords[1],$coords[2]-$coords[0])); + if ($angle < 0) { $angle += 360; } + else if ($angle > 360) { $angle -= 360; } + if ($angle!=0 && $angle!=360 && $angle!=90 && $angle!=180 && $angle!=270) { + if ($w >= $h) { + $coords[1] *= $h/$w ; + $coords[3] *= $h/$w ; + $usew = $useh = $bboxw; + $usey -= ($w-$h); + } + else { + $coords[0] *= $w/$h ; + $coords[2] *= $w/$h ; + $usew = $useh = $bboxh; + } + } + } + + // -moz If neither a <point> or <angle> is specified, i.e. the entire function consists of only <stop> values, the gradient + // axis starts from the top of the box and runs vertically downwards, ending at the bottom of the box. + else { // default values T2B + // All values are set in parseMozGradient - so won't appear here + $coords = array(0,0,1,0); // default for original linear gradient (L2R) + } + $s = ' q'; + $s .= sprintf(' %.3F %.3F %.3F %.3F re W n', $x*_MPDFK, ($this->mpdf->h-$y)*_MPDFK, $w*_MPDFK, -$h*_MPDFK)."\n"; + $s .= sprintf(' %.3F 0 0 %.3F %.3F %.3F cm', $usew*_MPDFK, $useh*_MPDFK, $usex*_MPDFK, ($this->mpdf->h-($usey+$useh))*_MPDFK)."\n"; + } + + // RADIAL + else if ($type == 3) { + $radius = $coords[4]; + $angle = $coords[5]; // ?? no effect + $shape = $coords[6]; + $size = $coords[7]; + $repeat = $coords[8]; + // ALL POINTS AND RADIUS SET (default for custom mPDF radial gradient) - no -moz + if ($coords[0]!==false && $coords[1]!==false && $coords[2]!==false && $coords[3]!==false && $coords[4]!==false) { + // do nothing - coords used as they are + } + // If a <point> is defined + else if ($shape!==false && $size!==false) { + if ($coords[2]==false) { $coords[2] = $coords[0]; } + if ($coords[3]==false) { $coords[3] = $coords[1]; } + // ELLIPSE + if ($shape=='ellipse') { + $corner1 = sqrt(pow($coords[0],2) + pow($coords[1],2)); + $corner2 = sqrt(pow($coords[0],2) + pow((1-$coords[1]),2)); + $corner3 = sqrt(pow((1-$coords[0]),2) + pow($coords[1],2)); + $corner4 = sqrt(pow((1-$coords[0]),2) + pow((1-$coords[1]),2)); + if ($size=='closest-side') { $radius = min($coords[0], $coords[1], (1-$coords[0]), (1-$coords[1])); } + else if ($size=='closest-corner') { $radius = min($corner1, $corner2, $corner3, $corner4); } + else if ($size=='farthest-side') { $radius = max($coords[0], $coords[1], (1-$coords[0]), (1-$coords[1])); } + else { $radius = max($corner1, $corner2, $corner3, $corner4); } // farthest corner (default) + } + // CIRCLE + else if ($shape=='circle') { + if ($w >= $h) { + $coords[1] = $coords[3] = ($coords[1] * $h/$w) ; + $corner1 = sqrt(pow($coords[0],2) + pow($coords[1],2)); + $corner2 = sqrt(pow($coords[0],2) + pow((($h/$w)-$coords[1]),2)); + $corner3 = sqrt(pow((1-$coords[0]),2) + pow($coords[1],2)); + $corner4 = sqrt(pow((1-$coords[0]),2) + pow((($h/$w)-$coords[1]),2)); + if ($size=='closest-side') { $radius = min($coords[0], $coords[1], (1-$coords[0]), (($h/$w)-$coords[1])); } + else if ($size=='closest-corner') { $radius = min($corner1, $corner2, $corner3, $corner4); } + else if ($size=='farthest-side') { $radius = max($coords[0], $coords[1], (1-$coords[0]), (($h/$w)-$coords[1])); } + else if ($size=='farthest-corner') { $radius = max($corner1, $corner2, $corner3, $corner4); } // farthest corner (default) + $usew = $useh = $bboxw; + $usey -= ($w-$h); + } + else { + $coords[0] = $coords[2] = ($coords[0] * $w/$h) ; + $corner1 = sqrt(pow($coords[0],2) + pow($coords[1],2)); + $corner2 = sqrt(pow($coords[0],2) + pow((1-$coords[1]),2)); + $corner3 = sqrt(pow((($w/$h)-$coords[0]),2) + pow($coords[1],2)); + $corner4 = sqrt(pow((($w/$h)-$coords[0]),2) + pow((1-$coords[1]),2)); + if ($size=='closest-side') { $radius = min($coords[0], $coords[1], (($w/$h)-$coords[0]), (1-$coords[1])); } + else if ($size=='closest-corner') { $radius = min($corner1, $corner2, $corner3, $corner4); } + else if ($size=='farthest-side') { $radius = max($coords[0], $coords[1], (($w/$h)-$coords[0]), (1-$coords[1])); } + else if ($size=='farthest-corner') { $radius = max($corner1, $corner2, $corner3, $corner4); } // farthest corner (default) + $usew = $useh = $bboxh; + } + } + if ($radius==0) { $radius=0.001; } // to prevent error + $coords[4] = $radius; + } + + // -moz If entire function consists of only <stop> values + else { // default values + // All values are set in parseMozGradient - so won't appear here + $coords = array(0.5,0.5,0.5,0.5); // default for radial gradient (centred) + } + $s = ' q'; + $s .= sprintf(' %.3F %.3F %.3F %.3F re W n', $x*_MPDFK, ($this->mpdf->h-$y)*_MPDFK, $w*_MPDFK, -$h*_MPDFK)."\n"; + $s .= sprintf(' %.3F 0 0 %.3F %.3F %.3F cm', $usew*_MPDFK, $useh*_MPDFK, $usex*_MPDFK, ($this->mpdf->h-($usey+$useh))*_MPDFK)."\n"; + } + + $n = count($this->mpdf->gradients) + 1; + $this->mpdf->gradients[$n]['type'] = $type; + $this->mpdf->gradients[$n]['colorspace'] = $colorspace; + $trans = false; + $this->mpdf->gradients[$n]['is_mask'] = $is_mask; + if ($is_mask) { $trans = true; } + if (count($stops) == 1) { $stops[1] = $stops[0]; } + if (!isset($stops[0]['offset'])) { $stops[0]['offset'] = 0; } + if (!isset($stops[(count($stops)-1)]['offset'])) { $stops[(count($stops)-1)]['offset'] = 1; } + + // Fix stop-offsets set as absolute lengths + if ($type==2) { + $axisx = ($coords[2]-$coords[0])*$usew; + $axisy = ($coords[3]-$coords[1])*$useh; + $axis_length = sqrt(pow($axisx,2) + pow($axisy,2)); + } + else { $axis_length = $coords[4]*$usew; } // Absolute lengths are meaningless for an ellipse - Firefox uses Width as reference + + for($i=0;$i<count($stops);$i++) { + if (isset($stops[$i]['offset']) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$stops[$i]['offset'],$m)) { + $tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false); + $stops[$i]['offset'] = $tmp/$axis_length; + } + } + + + if (isset($stops[0]['offset']) && $stops[0]['offset']>0) { + $firststop = $stops[0]; + $firststop['offset'] = 0; + array_unshift($stops, $firststop); + } + if (!$repeat && isset($stops[(count($stops)-1)]['offset']) && $stops[(count($stops)-1)]['offset']<1) { + $endstop = $stops[(count($stops)-1)]; + $endstop['offset'] = 1; + $stops[] = $endstop; + } + if ($stops[0]['offset'] > $stops[(count($stops)-1)]['offset']) { + $stops[0]['offset'] = 0; + $stops[(count($stops)-1)]['offset'] = 1; + } + + for($i=0;$i<count($stops);$i++) { + // mPDF 5.3.74 + if ($colorspace == 'CMYK') { + $this->mpdf->gradients[$n]['stops'][$i]['col'] = sprintf('%.3F %.3F %.3F %.3F', (ord($stops[$i]['col']{1})/100), (ord($stops[$i]['col']{2})/100), (ord($stops[$i]['col']{3})/100), (ord($stops[$i]['col']{4})/100)); + } + else if ($colorspace == 'Gray') { + $this->mpdf->gradients[$n]['stops'][$i]['col'] = sprintf('%.3F', (ord($stops[$i]['col']{1})/255)); + } + else { + $this->mpdf->gradients[$n]['stops'][$i]['col'] = sprintf('%.3F %.3F %.3F', (ord($stops[$i]['col']{1})/255), (ord($stops[$i]['col']{2})/255), (ord($stops[$i]['col']{3})/255)); + } + if (!isset($stops[$i]['opacity'])) { $stops[$i]['opacity'] = 1; } + else if ($stops[$i]['opacity'] > 1 || $stops[$i]['opacity'] < 0) { $stops[$i]['opacity'] = 1; } + else if ($stops[$i]['opacity'] < 1) { + $trans = true; + } + $this->mpdf->gradients[$n]['stops'][$i]['opacity'] = $stops[$i]['opacity']; + // OFFSET + if ($i>0 && $i<(count($stops)-1)) { + if (!isset($stops[$i]['offset']) || (isset($stops[$i+1]['offset']) && $stops[$i]['offset']>$stops[$i+1]['offset']) || $stops[$i]['offset']<$stops[$i-1]['offset']) { + if (isset($stops[$i-1]['offset']) && isset($stops[$i+1]['offset'])) { + $stops[$i]['offset'] = ($stops[$i-1]['offset']+$stops[$i+1]['offset'])/2; + } + else { + for($j=($i+1);$j<count($stops);$j++) { + if(isset($stops[$j]['offset'])) { break; } + } + $int = ($stops[$j]['offset'] - $stops[($i-1)]['offset'])/($j-$i+1); + for($f=0;$f<($j-$i-1);$f++) { + $stops[($i+$f)]['offset'] = $stops[($i+$f-1)]['offset'] + ($int); + } + } + } + } + $this->mpdf->gradients[$n]['stops'][$i]['offset'] = $stops[$i]['offset']; + $this->mpdf->gradients[$n]['stops'][$i]['offset'] = $stops[$i]['offset']; + } + + if ($repeat) { + $ns = count($this->mpdf->gradients[$n]['stops']); + $offs = array(); + for($i=0;$i<$ns;$i++) { + $offs[$i] = $this->mpdf->gradients[$n]['stops'][$i]['offset']; + } + $gp = 0; + $inside=true; + while($inside) { + $gp++; + for($i=0;$i<$ns;$i++) { + $this->mpdf->gradients[$n]['stops'][(($ns*$gp)+$i)] = $this->mpdf->gradients[$n]['stops'][(($ns*($gp-1))+$i)]; + $tmp = $this->mpdf->gradients[$n]['stops'][(($ns*($gp-1))+($ns-1))]['offset']+$offs[$i] ; + if ($tmp < 1) { $this->mpdf->gradients[$n]['stops'][(($ns*$gp)+$i)]['offset'] = $tmp; } + else { + $this->mpdf->gradients[$n]['stops'][(($ns*$gp)+$i)]['offset'] = 1; + $inside = false; + break(2); + } + } + } + } + + if ($trans) { + $this->mpdf->gradients[$n]['trans'] = true; + $s .= ' /TGS'.$n.' gs '; + } + if (!is_array($extend) || count($extend) <1) { + $extend=array('true', 'true'); // These are supposed to be quoted - appear in PDF file as text + } + $this->mpdf->gradients[$n]['coords'] = $coords; + $this->mpdf->gradients[$n]['extend'] = $extend; + //paint the gradient + $s .= '/Sh'.$n.' sh '."\n"; + //restore previous Graphic State + $s .= ' Q '."\n"; + if ($return) { return $s; } + else { $this->mpdf->_out($s); } +} + + +function parseMozGradient($bg) { + // background[-image]: -moz-linear-gradient(left, #c7Fdde 20%, #FF0000 ); + // background[-image]: linear-gradient(left, #c7Fdde 20%, #FF0000 ); // CSS3 + if (preg_match('/repeating-/',$bg)) { $repeat = true; } + else { $repeat = false; } + if (preg_match('/linear-gradient\((.*)\)/',$bg,$m)) { + $g = array(); + $g['type'] = 2; + $g['colorspace'] = 'RGB'; + $g['extend'] = array('true','true'); + $v = trim($m[1]); + // Change commas inside e.g. rgb(x,x,x) + while(preg_match('/(\([^\)]*?),/',$v)) { $v = preg_replace('/(\([^\)]*?),/','\\1@',$v); } + // Remove spaces inside e.g. rgb(x, x, x) + while(preg_match('/(\([^\)]*?)[ ]/',$v)) { $v = preg_replace('/(\([^\)]*?)[ ]/','\\1',$v); } + $bgr = preg_split('/\s*,\s*/',$v); + for($i=0;$i<count($bgr);$i++) { $bgr[$i] = preg_replace('/@/', ',', $bgr[$i]); } + // Is first part $bgr[0] a valid point/angle? + $first = preg_split('/\s+/',trim($bgr[0])); + if (preg_match('/(left|center|right|bottom|top|deg|grad|rad)/i',$bgr[0]) && !preg_match('/(<#|rgb|rgba|hsl|hsla)/i',$bgr[0])) { + $startStops = 1; + } + else if (trim($first[(count($first)-1)]) === "0") { + $startStops = 1; + } + else { + $check = $this->mpdf->ConvertColor($first[0]); + if ($check) $startStops = 0; + else $startStops = 1; + } + // first part a valid point/angle? + if ($startStops == 1) { // default values + // [<point> || <angle>,] = [<% em px left center right bottom top> || <deg grad rad 0>,] + if (preg_match('/([\-]*[0-9\.]+)(deg|grad|rad)/i',$bgr[0],$m)) { + $angle = $m[1] + 0; + if (strtolower($m[2])=='deg') { $angle = $angle; } + else if (strtolower($m[2])=='grad') { $angle *= (360/400); } + else if (strtolower($m[2])=='rad') { $angle = rad2deg($angle); } + while($angle < 0) { $angle += 360; } + $angle = ($angle % 360); + } + else if (trim($first[(count($first)-1)]) === "0") { $angle = 0; } + if (preg_match('/left/i',$bgr[0])) { $startx = 0; } + else if (preg_match('/right/i',$bgr[0])) { $startx = 1; } + if (preg_match('/top/i',$bgr[0])) { $starty = 1; } + else if (preg_match('/bottom/i',$bgr[0])) { $starty = 0; } + // Check for %? ?% or %% + if (preg_match('/(\d+)[%]/i',$first[0],$m)) { $startx = $m[1]/100; } + else if (!isset($startx) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$first[0],$m)) { + $tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false); + if ($tmp) { $startx = $m[1]; } + } + if (isset($first[1]) && preg_match('/(\d+)[%]/i',$first[1],$m)) { $starty = 1 - ($m[1]/100); } + else if (!isset($starty) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$first[1],$m)) { + $tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false); + if ($tmp) { $starty = $m[1]; } + } + if (isset($startx) && !isset($starty)) { $starty = 0.5; } + if (!isset($startx) && isset($starty)) { $startx = 0.5; } + + } + // If neither a <point> or <angle> is specified, i.e. the entire function consists of only <stop> values, the gradient axis starts from the top of the box and runs vertically downwards, ending at the bottom of the box. + else { // default values T2B + $starty = 1; $startx = 0.5; + $endy = 0; $endx = 0.5; + } + $coords = array(); + if (!isset($startx)) { $startx = false; } + if (!isset($starty)) { $starty = false; } + if (!isset($endx)) { $endx = false; } + if (!isset($endy)) { $endy = false; } + if (!isset($angle)) { $angle = false; } + $g['coords'] = array($startx ,$starty ,$endx ,$endy, $angle, $repeat ); + $g['stops'] = array(); + for($i=$startStops;$i<count($bgr);$i++) { + $stop = array(); + // parse stops + $el = preg_split('/\s+/',trim($bgr[$i])); + // mPDF 5.3.74 + $col = $this->mpdf->ConvertColor($el[0]); + if ($col) { $stop['col'] = $col; } + else { $stop['col'] = $col = $this->mpdf->ConvertColor(255); } + if ($col{0}==1) $g['colorspace'] = 'Gray'; + else if ($col{0}==4 || $col{0}==6) $g['colorspace'] = 'CMYK'; + if ($col{0}==5) { $stop['opacity'] = ord($col{4})/100; } // transparency from rgba() + else if ($col{0}==6) { $stop['opacity'] = ord($col{5})/100; } // transparency from cmyka() + else if ($col{0}==1 && $col{2}==1) { $stop['opacity'] = ord($col{3})/100; } // transparency converted from rgba or cmyka() + + if (isset($el[1]) && preg_match('/(\d+)[%]/',$el[1],$m)) { + $stop['offset'] = $m[1]/100; + if ($stop['offset']>1) { unset($stop['offset']); } + } + else if (isset($el[1]) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$el[1],$m)) { + $tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false); + if ($tmp) { $stop['offset'] = $m[1]; } + } + $g['stops'][] = $stop; + } + if (count($g['stops'] )) { return $g; } + } + else if (preg_match('/radial-gradient\((.*)\)/',$bg,$m)) { + $g = array(); + $g['type'] = 3; + $g['colorspace'] = 'RGB'; + $g['extend'] = array('true','true'); + $v = trim($m[1]); + // Change commas inside e.g. rgb(x,x,x) + while(preg_match('/(\([^\)]*?),/',$v)) { $v = preg_replace('/(\([^\)]*?),/','\\1@',$v); } + // Remove spaces inside e.g. rgb(x, x, x) + while(preg_match('/(\([^\)]*?)[ ]/',$v)) { $v = preg_replace('/(\([^\)]*?)[ ]/','\\1',$v); } + $bgr = preg_split('/\s*,\s*/',$v); + for($i=0;$i<count($bgr);$i++) { $bgr[$i] = preg_replace('/@/', ',', $bgr[$i]); } + + // Is first part $bgr[0] a valid point/angle? + $startStops = 0; + $pos_angle = false; + $shape_size = false; + $first = preg_split('/\s+/',trim($bgr[0])); + $checkCol = $this->mpdf->ConvertColor($first[0]); + if (preg_match('/(left|center|right|bottom|top|deg|grad|rad)/i',$bgr[0]) && !preg_match('/(<#|rgb|rgba|hsl|hsla)/i',$bgr[0])) { + $startStops=1; + $pos_angle = $bgr[0]; + } + else if (trim($first[(count($first)-1)]) === "0") { + $startStops=1; + $pos_angle = $bgr[0]; + } + else if (preg_match('/(circle|ellipse|closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)/i',$bgr[0])) { + $startStops=1; + $shape_size = $bgr[0]; + } + else if (!$checkCol) { + $startStops=1; + $pos_angle = $bgr[0]; + } + if (preg_match('/(circle|ellipse|closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)/i',$bgr[1])) { + $startStops=2; + $shape_size = $bgr[1]; + } + + // If valid point/angle? + if ($pos_angle) { // default values + // [<point> || <angle>,] = [<% em px left center right bottom top> || <deg grad rad 0>,] + if (preg_match('/left/i',$pos_angle)) { $startx = 0; } + else if (preg_match('/right/i',$pos_angle)) { $startx = 1; } + if (preg_match('/top/i',$pos_angle)) { $starty = 1; } + else if (preg_match('/bottom/i',$pos_angle)) { $starty = 0; } + // Check for %? ?% or %% + if (preg_match('/(\d+)[%]/i',$first[0],$m)) { $startx = $m[1]/100; } + else if (!isset($startx) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$first[0],$m)) { + $tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false); + if ($tmp) { $startx = $m[1]; } + } + if (isset($first[1]) && preg_match('/(\d+)[%]/i',$first[1],$m)) { $starty = 1 - ($m[1]/100); } + else if (!isset($starty) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$first[1],$m)) { + $tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false); + if ($tmp) { $starty = $m[1]; } + } + +/* + // ?? Angle has no effect in radial gradient (does not exist in CSS3 spec.) + if (preg_match('/([\-]*[0-9\.]+)(deg|grad|rad)/i',$pos_angle,$m)) { + $angle = $m[1] + 0; + if (strtolower($m[2])=='deg') { $angle = $angle; } + else if (strtolower($m[2])=='grad') { $angle *= (360/400); } + else if (strtolower($m[2])=='rad') { $angle = rad2deg($angle); } + while($angle < 0) { $angle += 360; } + $angle = ($angle % 360); + } +*/ + if (!isset($starty)) { $starty = 0.5; } + if (!isset($startx)) { $startx = 0.5; } + + } + // If neither a <point> or <angle> is specified, i.e. the entire function consists of only <stop> values, the gradient axis starts from the top of the box and runs vertically downwards, ending at the bottom of the box. + else { // default values Center + $starty = 0.5; $startx = 0.5; + $endy = 0.5; $endx = 0.5; + } + + // If valid shape/size? + $shape = 'ellipse'; // default + $size = 'farthest-corner'; // default + if ($shape_size) { // default values + if (preg_match('/(circle|ellipse)/i',$shape_size, $m)) { + $shape = $m[1]; + } + if (preg_match('/(closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)/i',$shape_size, $m)) { + $size = $m[1]; + if ($size=='contain') { $size = 'closest-side'; } + else if ($size=='cover') { $size = 'farthest-corner'; } + } + } + + $coords = array(); + if (!isset($startx)) { $startx = false; } + if (!isset($starty)) { $starty = false; } + if (!isset($endx)) { $endx = false; } + if (!isset($endy)) { $endy = false; } + if (!isset($radius)) { $radius = false; } + if (!isset($angle)) { $angle = 0; } + $g['coords'] = array($startx ,$starty ,$endx ,$endy, $radius, $angle, $shape, $size, $repeat ); + + $g['stops'] = array(); + for($i=$startStops;$i<count($bgr);$i++) { + $stop = array(); + // parse stops + $el = preg_split('/\s+/',trim($bgr[$i])); + // mPDF 5.3.74 + $col = $this->mpdf->ConvertColor($el[0]); + if ($col) { $stop['col'] = $col; } + else { $stop['col'] = $col = $this->mpdf->ConvertColor(255); } + if ($col{0}==1) $g['colorspace'] = 'Gray'; + else if ($col{0}==4 || $col{0}==6) $g['colorspace'] = 'CMYK'; + if ($col{0}==5) { $stop['opacity'] = ord($col{4})/100; } // transparency from rgba() + else if ($col{0}==6) { $stop['opacity'] = ord($col{5})/100; } // transparency from cmyka() + else if ($col{0}==1 && $col{2}==1) { $stop['opacity'] = ord($col{3})/100; } // transparency converted from rgba or cmyka() + + if (isset($el[1]) && preg_match('/(\d+)[%]/',$el[1],$m)) { + $stop['offset'] = $m[1]/100; + if ($stop['offset']>1) { unset($stop['offset']); } + } + else if (isset($el[1]) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$el[1],$m)) { + $tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false); + $stop['offset'] = $el[1]; + } + $g['stops'][] = $stop; + } + if (count($g['stops'] )) { return $g; } + } + return array(); +} + +function parseBackgroundGradient($bg) { + // background-gradient: linear #00FFFF #FFFF00 0 0.5 1 0.5; or + // background-gradient: radial #00FFFF #FFFF00 0.5 0.5 1 1 1.2; + + $v = trim($bg); + $bgr = preg_split('/\s+/',$v); + $g = array(); + if (count($bgr)> 6) { + if (strtoupper(substr($bgr[0],0,1)) == 'L' && count($bgr)==7) { // linear + $g['type'] = 2; + //$coords = array(0,0,1,1 ); // 0 0 1 0 or 0 1 1 1 is L 2 R; 1,1,0,1 is R2L; 1,1,1,0 is T2B; 1,0,1,1 is B2T + // Linear: $coords - array of the form (x1, y1, x2, y2) which defines the gradient vector (see linear_gradient_coords.jpg). + // The default value is from left to right (x1=0, y1=0, x2=1, y2=0). + $g['coords'] = array($bgr[3], $bgr[4], $bgr[5], $bgr[6]); + } + else if (count($bgr)==8) { // radial + $g['type'] = 3; + // Radial: $coords - array of the form (fx, fy, cx, cy, r) where (fx, fy) is the starting point of the gradient with color1, + // (cx, cy) is the center of the circle with color2, and r is the radius of the circle (see radial_gradient_coords.jpg). + // (fx, fy) should be inside the circle, otherwise some areas will not be defined + $g['coords'] = array($bgr[3], $bgr[4], $bgr[5], $bgr[6], $bgr[7]); + } + $g['colorspace'] = 'RGB'; + // mPDF 5.3.74 + $cor = $this->mpdf->ConvertColor($bgr[1]); + if ($cor{0}==1) $g['colorspace'] = 'Gray'; + else if ($cor{0}==4 || $cor{0}==6) $g['colorspace'] = 'CMYK'; + if ($cor) { $g['col'] = $cor; } + else { $g['col'] = $this->mpdf->ConvertColor(255); } + $cor = $this->mpdf->ConvertColor($bgr[2]); + if ($cor) { $g['col2'] = $cor; } + else { $g['col2'] = $this->mpdf->ConvertColor(255); } + $g['extend'] = array('true','true'); + $g['stops'] = array(array('col'=>$g['col'], 'opacity'=>1, 'offset'=>0), array('col'=>$g['col2'], 'opacity'=>1, 'offset'=>1)); + return $g; + } + return false; +} + + + +} + +?> \ No newline at end of file diff --git a/include/mpdf/classes/indic.php b/include/mpdf/classes/indic.php new file mode 100755 index 0000000000000000000000000000000000000000..e747dedef69317c2587e09e4813cf5258388825b --- /dev/null +++ b/include/mpdf/classes/indic.php @@ -0,0 +1,433 @@ +<?php + +class indic { + +function indic() { + +} + + +function substituteIndic($earr, $lang, $font) { + global $voltdata; + + if (!isset($voltdata[$font])) { + include_once(_MPDF_PATH.'includes/'.$font.'.volt.php'); + $voltdata[$font] = $volt; + } + + foreach($earr as $eid=>$char) { + $earr[$eid] = sprintf("%04s", strtoupper(dechex($char))); + } + $vstr = "0020 ".implode(" ",$earr)." 0020"; + //============================ + // Common Indic Punctuation marks + // If NOT devanagari + if ($lang!='hi') { + $vstr = str_replace('0964','007C', $vstr); // U+0964 replace with "|" + $vstr = str_replace('0965','007C 007C', $vstr); // U+0964 replace with "|" + } + //============================ + // Tamil numeral for Zero missing Added mPDF 4.2 + if ($lang=='ta') { + $vstr = str_replace('0BE6','0030', $vstr); // U+0BEB replace with "0" + } + + //============================ + // Re-order vowels + + // DEVANAGARI vowel sign matraI[093F] before consonant + if ($lang=='hi') { + $prebasedvowels = "(093F)"; + $nukta = "093C"; + $halant = "094D"; + $vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left + $vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.' '.$nukta.'/','\\2 \\1 '.$nukta, $vstr); // before NUKTA + $vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$prebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT == VIRAMA + } + + // BENGALI vowels [09BF 09C7 09C8] + else if ($lang=='bn') { + + // Khanda Ta 09CE not in font -> replace with 09A4|09CD + $vstr = preg_replace('/09CE/','09A4 09CD 200D', $vstr); // mPDF 5.3.09 + + // BENGALI double-part vowels [09CB 09C7 09BE][09CC 09C7 09D7] + $vstr = str_replace('09CB','09C7 09BE', $vstr); // convert to 2 parts + $vstr = str_replace('09CC','09C7 09D7', $vstr); // 09C7 pre-based is then shifted below + $prebasedvowels = "(09BF|09C7|09C8)"; + $nukta = "09BC"; + $halant = "09CD"; + // mPDF 5.0.044 + $bnfullcons = "0995|0996|0997|0998|0999|099A|099B|099C|099D|099F|09A0|09A1|09A2|09A3|09A4|09A5|09A6|09A7|09A8|09AA|09AB|09AC|09AD|09AE|09AF|09B0|09B2|09B6|09B7|09B8|09B9|09DC|09DD|09DF"; + $vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left + $vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.' '.$nukta.'/','\\2 \\1 '.$nukta, $vstr); // before NUKTA + $vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$prebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT + // mPDF 5.0.044 + // .. and shifting left-based vowel further to the left in case 3 consonants together. + $vstr = preg_replace('/('.$bnfullcons.') '.$halant.' '.$prebasedvowels.'/','\\2 \\1 '.$halant, $vstr); + + // mPDF 5.0.044 + // If left-based vowel has now been shifted to left of RA/Halant (09B0/09CD) + // Convert here to above-line form (E068) as it would get missed later + // e.g. 09B0 09CD 09AD 09C7 would be changed above => + // e.g. 09C7 09B0 09CD 09AD. The 09B0 09CD should => E068 + // ??? need to add 09BF as well (09BF|09C7|09C8) + $vstr = preg_replace('/(09C7|09C8) 09B0 09CD/', '\\1 E068', $vstr); + + } + + // GUJARATI pre-based vowel [0ABF] + else if ($lang=='gu') { + $prebasedvowels = "(0ABF)"; + $nukta = "0ABC"; + $halant = "0ACD"; + $vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left + $vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.' '.$nukta.'/','\\2 \\1 '.$nukta, $vstr); // before NUKTA + $vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$prebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT + } + + // GURMUKHI/PUNJABI pre-based vowel [0ABF] + else if ($lang=='pa') { + $prebasedvowels = "(0A3F)"; + $nukta = "0A3C"; + $halant = "0A4D"; + $vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left + $vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.' '.$nukta.'/','\\2 \\1 '.$nukta, $vstr); // before NUKTA + $vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$prebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT + } + + // TAMIL pre-based vowel [0ABF] + else if ($lang=='ta') { + // Shrii (Shree) + $vstr = preg_replace('/0BB6 0BCD 0BB0 0BC0/','E04B', $vstr); + + // TAMIL double-part vowels [0BCA 0BC6 0BBE][0BCB 0BC7 0BBE][0BCC 0BC6 0BD7] + $vstr = preg_replace('/0BCA/','0BC6 0BBE', $vstr); // convert to 2 parts + $vstr = preg_replace('/0BCB/','0BC7 0BBE', $vstr); // pre-based is then shifted below + $vstr = preg_replace('/0BCC/','0BC6 0BD7', $vstr); + $prebasedvowels = "(0BC6|0BC7|0BC8)"; + // No nukta + $halant = "0BCD"; // Doesn't seem to move most in front of halanted consonants + $vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left + // ? Only for special case KSS (already moved to left of 0BB7) + $vstr = preg_replace('/0B95 '.$halant.' '.$prebasedvowels.' 0BB7/','\\1 0B95 '.$halant.' 0BB7', $vstr); + } + + // ORIYA + else if ($lang=='or') { + // ORIYA double-part vowels [] + $vstr = str_replace('0B48','0B47 0B56', $vstr); // 2-part Vowel + $vstr = str_replace('0B4B','0B47 0B3E', $vstr); // 2-part Vowel + $vstr = str_replace('0B4C','0B47 0B57', $vstr); // 2-part Vowel + $orprebasedvowels = "(0B47)"; + // No nukta + $halant = "0B4D"; + $vstr = preg_replace('/([A-F0-9]{4}) '.$orprebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left + $vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$orprebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT + $vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$orprebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT + } + + // MALAYALAM + else if ($lang=='ml') { + // Chillus - old forms - remove ZWNJ after + // This font Volt rules recognises e.g. "Na Halant(Virama)" as ChilluN + $vstr = preg_replace('/(0D23 0D4D|0D28 0D4D|0D30 0D4D|0D32 0D4D|0D33 0D4D) 200D/','\\1', $vstr); + // See Chillus in Unicode [http://en.wikipedia.org/wiki/Malayalam_script] + $vstr = str_replace('0D7A','0D23 0D4D', $vstr); // [mlymChilluNn] + $vstr = str_replace('0D7B','0D28 0D4D', $vstr); // [mlymChilluN] + $vstr = str_replace('0D7C','0D30 0D4D', $vstr); // [mlymChilluR] + $vstr = str_replace('0D7D','0D32 0D4D', $vstr); // [mlymChilluL] + $vstr = str_replace('0D7E','0D33 0D4D', $vstr); // [mlymChilluLl] +/* + // Chillus - 0D7A-0D7E not in font directly, but as E005-E009 + $vstr = preg_replace('/0D23 0D4D 200D/','0D7A', $vstr); + $vstr = preg_replace('/0D28 0D4D 200D/','0D7B', $vstr); + $vstr = preg_replace('/0D30 0D4D 200D/','0D7C', $vstr); + $vstr = preg_replace('/0D32 0D4D 200D/','0D7D', $vstr); + $vstr = preg_replace('/0D33 0D4D 200D/','0D7E', $vstr); + + $vstr = preg_replace('/0D7F/','E004', $vstr); // [mlymChilluK] + $vstr = preg_replace('/0D7A/','E005', $vstr); // [mlymChilluNn] + $vstr = preg_replace('/0D7B/','E006', $vstr); // [mlymChilluN] + $vstr = preg_replace('/0D7C/','E007', $vstr); // [mlymChilluR] + $vstr = preg_replace('/0D7D/','E008', $vstr); // [mlymChilluL] + $vstr = preg_replace('/0D7E/','E009', $vstr); // [mlymChilluLl] +*/ + + // MALAYALAM double-part vowels [] + $vstr = str_replace('0D4A','0D46 0D3E', $vstr); // 2-part Vowel + $vstr = str_replace('0D4B','0D47 0D3E', $vstr); // 2-part Vowel + $vstr = str_replace('0D4C','0D46 0D57', $vstr); // 2-part Vowel + $mlprebasedvowels = "(0D46|0D47|0D48)"; + // No nukta + $halant = "0D4D"; + $vstr = preg_replace('/([A-F0-9]{4}) '.$mlprebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left + $vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$mlprebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT + } + + // TELUGU + else if ($lang=='te') { + // TELUGU double-part vowels [0C48 -> 0C46 0C56] + $vstr = str_replace('0C48','0C46 0C56', $vstr); // 2-part Vowel + $prebasedvowels = "(0C46)"; + $abvvowels = "(0C3E|0C3F|0C40|0C46|0C47|0C4A|0C4B|0C4C|0C55)"; + // No nukta + $halant = "0C4D"; + $tefullforms = "0C15|0C17|0C18|0C1A|0C1B|0C1C|0C1D|0C20|0C21|0C22|0C24|0C25|0C26|0C27|0C28|0C2A|0C2B|0C2D|0C2E|0C2F|0C30|0C33|0C35|0C36|0C37|0C38|0C39|E028|E029|E02A|E02B|E078|E07A|E07B"; + $vstr = preg_replace('/('.$tefullforms .') '.$halant.' ('.$tefullforms .') '.$abvvowels .'/','\\1 \\3 '.$halant.' \\2', $vstr); // before HALANT + } + + + // KANNADA + else if ($lang=='kn') { + // KANNADA double-part vowels [0CC8 -> 0CC6 0CD6] + $vstr = str_replace('0CC0','0CBF 0CD5', $vstr); // 2-part Vowel + $vstr = str_replace('0CC7','0CC6 0CD5', $vstr); // 2-part Vowel + $vstr = str_replace('0CC8','0CC6 0CD6', $vstr); // 2-part Vowel AI - no glyph for single + $vstr = str_replace('0CCA','0CC6 0CC2', $vstr); // 2-part Vowel + $vstr = str_replace('0CCB','0CC6 0CC2 0CD5', $vstr); // 2-part Vowel + $prebasedvowels = "(0CBF|0CC6)"; + $halant = "0CCD"; + } + + + //============================ + + // SPECIALS + + // DEVANAGARI Ra Halant Ra + if ($lang=='hi') { + $vstr = str_replace('0930 094D 0930','E05D 0930', $vstr); // Ra Halant Ra => halfRa FullRa + } + + // GUJARATI + if ($lang=='gu') { + $vstr = str_replace('0AB0 0AC2','E02E', $vstr); // Ra VowelUu => SpecialForm RaUu + } + + // TELUGU Ra Halant <Consonant> Halant => halfRa Halant<Consonant> Halant + if ($lang=='te') { + $vstr = preg_replace('/0C30 0C4D ([A-F0-9]{4}) 0C4D/','E021 0C4D \\1 0C4D', $vstr); + } + + // KANNADA + // Reph at end of word becomes E0CC instead of E00B + if ($lang=='kn') { + $vstr = str_replace('0CB0 0CCD 0020','E0CC 0020', $vstr); // mPDF 5.3.87 + } + + + //============================ + // MAIN BIT FROM VOLT RULES + foreach($voltdata[$font] AS $rid=>$reps) { +//echo $rid . ': ' . $vstr.'<br />'; + $vstr = preg_replace('/'.$reps['match'].'/',$reps['replace'], $vstr); + } +//echo $vstr.'<br />'; exit; + + + //============================ + + // SPECIALS + + // KANNADA + // <Base> <BelowBase1> [<BelowBase2> ] MatraI -> <Base/MatraI ligature> <Belowbase1> etc + if ($lang=='kn') { + $matraI = "0CBF"; + $knbase = preg_split('/\|/', "0C95|0C96|0C97|0C98|0C9A|0C9B|0C9C|0C9D|0CA0|0CA1|0CA2|0CA3|0CA4|0CA5|0CA6|0CA7|0CA8|0CAA|0CAB|0CAC|0CAD|0CAE|0CAF|0CB0|0CB2|0CB3|0CB5|0CB6|0CB7|0CB8|0CB9|E0A3|E07D|E07E"); + $knmatraIligature = preg_split('/\|/', "E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A4|E0A1|E0A2"); + $belowbase1 = "E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081"; + $belowbase2 = "E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081"; + for ($i=0; $i<count($knbase);$i++) { + $vstr = preg_replace('/'.$knbase[$i].' ('.$belowbase1.') ('.$belowbase2.') '.$matraI.'/', $knmatraIligature[$i].' \\1 \\2', $vstr); + $vstr = preg_replace('/'.$knbase[$i].' ('.$belowbase1.') '.$matraI.'/', $knmatraIligature[$i].' \\1', $vstr); + } + } + + // KANNADA + // [KanTtaFull] [matraI] => [KanTtaPartial] [matraI] + if ($lang=='kn') { + $vstr = preg_replace('/0C9F '.$matraI.'/', 'E015 '.$matraI, $vstr); + } + + // ORIYA + if ($lang=='or') { + // SpecialCase Ra[0B30] Halant still left before [oryaFullNnNna] => E00F + $vstr = preg_replace('/0B30 '.$halant.' E00F/','E00F E069', $vstr); // convert to Reph + } + + //============================ + // SHIFT REPH + + // DEVANAGARI Shift Reph [E015] + if ($lang=='hi') { + // FIRSTLY - halfRa = E05D - Change this to Reph [E015] + $himatchhalfforms = "E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E0D3|E0D4|E0D5|E0D6|E0D7|E0D8|E0D9|E0DA|E0DB|E0DC|E0DD|E0DE|E0DF|E0E0|E0E1|E0E2|E0E3|E0E4|E0E5|E0E6|E0E7|E0E8|E0E9|E0EA|E0EB|E0EC|E0ED|E0EE|E0EF|E0F0|E0F1|E0F2|E0F3|E0F4|E0F5|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145"; + $himatchfullforms = "0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029|0958|0959|095A|E02A|E02B|E02C|E02D|095B|E02E|E02F|E030|E031|095C|095D|E032|E033|E034|E035|E036|0929|E037|095E|E038|E039|E03A|095F|0931|E03B|0934|E03C|E03D|E03E|E03F|E040|E041|E042|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF|E0B0|E0B1|E0B2|E0B3|E0B4|E0B5|E0B6|E0B7|E0B8|E0B9|E0BA|E0BB|E0BC|E0BD|E0BE|E0BF|E0C0|E0C1|E0C2|E0C3|E0C4|E0C5|E0C6|E0C7|E0C8|E0C9|E0CA|E0CB|E0CC|E0CD|E0CE|E0CF|E0D0|E0D1|E0D2|E11E|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E129|E12A|E12B|E12C|E12D|E12E|E12F|E130|E131|E132|E133"; + $vstr = preg_replace('/E05D ('.$himatchhalfforms.'|'.$himatchfullforms.')/', 'E015 \\1', $vstr); + + // Reph = E015 - Shift Right to just after end of syllable + // FullAllForms + HalfAllForms + 093E matraA + while(preg_match('/E015 ('.$himatchhalfforms.')/', $vstr)) { + $vstr = preg_replace('/E015 ('.$himatchhalfforms.')/', '\\1 E015', $vstr); + } + $vstr = preg_replace('/E015 ('.$himatchfullforms.')/', '\\1 E015', $vstr); + + // Now shift it beyond post-based vowels // ??? Need to add others e.g. 0949,094A,094B,094C + presentation forms like E198 + $vstr = str_replace('E015 093E', '093E E015', $vstr); + $vstr = preg_replace('/E015 (0940|E194|E195|E196|E197|E198)/', '\\1 E014', $vstr); // (Small) reph [E014] to Right of matraI + $vstr = str_replace('E015 0947', '0947 E014', $vstr); // (Small) reph [E014] to Right of matraI + } + + // BENGALI Shift Reph [E068] + else if ($lang=='bn') { + $bnfullconjuncts = "E002|E003|E004|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF|E0B0|E0B1|E0B2|E0B3|E0B4|E0B5|E0B6|E0B7|E0B8|E0B9|E0BA|E0BB|E0BC|E0BD|E0BE|E0BF|E0C0|E0C1|E0C2|E0C3|E0C4|E0C5|E0C6|E0C7|E0C8|E0C9|E0CA|E0CB|E0CC|E0CD|E0CE|E0CF|E0D0|E0D1|E0D2|E0D3|E0D4|E0D5|E0D6|E0D7|E0D8|E0D9|E0DA|E0DB|E0DC|E0DD|E0DE|E0DF|E0E0|E0E1|E0E2|E0E3|E0E4|E0E5|E0E6|E0E7|E0E8|E0E9|E0EA|E0EB|E0EC|E0ED|E0EE|E0EF|E0F0|E0F1|E0F2|E0F3|E0F4|E0F5|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E129|E12A|E12B|E12C|E12D|E12E|E12F|E130|E131|E132|E133|E134|E135|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E|E15F|E160|E161|E162|E163|E164|E165|E166|E167|E168|E169|E16A|E16B|E16C|E16D|E16E|E16F|E170|E171|E172|E173|E174|E175|E176|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E183|E184|E185|E186|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E18F|E190|E191|E192|E193|E194|E195|E196|E197|E198|E199|E19A"; + // $bnfullcons - set above; + $vstr = preg_replace('/E068 ('.$bnfullconjuncts.'|'.$bnfullcons.')/', '\\1 E068', $vstr); + // ? Need to shift it beyond post-base vowels 09BE, 09C0, 09D7 haven't found so can't test?? + $vstr = preg_replace('/E068 (09BE|09C0|09D7)/', '\\1 E068', $vstr); + } + + // GUJARATI Shift Reph [E032] + else if ($lang=='gu') { + $gufullforms = "0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5"; + $vstr = preg_replace('/E032 ('.$gufullforms.')/', '\\1 E032', $vstr); + // Now shift it beyond post-based vowels // ??? Need to add others e.g. 0949,094A,094B,094C + presentation forms like E198 + // ? Need to shift it beyond post-base vowels 0ABE, 0AC0 haven't found so can't test?? + $vstr = preg_replace('/E032 (0ABE|0AC0)/', '\\1 E032', $vstr); + } + + + // TELUGU Shift Reph to LEFT [E046|E069|E077] [TelRaSmallOne] => E046 [TelRaSmallTwo] => E069 [TelRaSmallThree] => E077 + else if ($lang=='te') { + // tefullforms defined earlier + $tepartialforms = "E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E07C|E07D|E07E"; + $matraligs = "E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF"; + $tevowels = "0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C" + ."|0C41|0C42|0C43|0C44"; // post matras + $vstr = preg_replace('/('.$tevowels.') (E046|E069|E077)/', '\\2 \\1', $vstr); + while(preg_match('/('.$tepartialforms.') (E046|E069|E077)/', $vstr)) { + $vstr = preg_replace('/('.$tepartialforms.') (E046|E069|E077)/', '\\2 \\1', $vstr); + } + $vstr = preg_replace('/('.$tefullforms .'|'.$matraligs.') (E046|E069|E077)/', '\\2 \\1', $vstr); + } + + + // KANNADA Shift Reph to RIGHT [E00B] + else if ($lang=='kn') { + $knfullforms = "0C95|0C96|0C97|0C98|0C99|0C9A|0C9B|0C9C|0C9D|0C9E|0C9F|0CA0|0CA1|0CA2|0CA3|0CA4|0CA5|0CA6|0CA7|0CA8|0CAA|0CAB|0CAC|0CAD|0CAE|0CAF|0CB0|0CB1|0CB2|0CB3|0CB5|0CB6|0CB7|0CB8|0CB9|E07D|E07E|E0A3"; + $knpartialforms = "E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|0C9E|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E07F"; + while(preg_match('/E00B ('.$knpartialforms.')/', $vstr)) { + $vstr = preg_replace('/E00B ('.$knpartialforms.')/', '\\1 E00B', $vstr); + } + // mPDF 5.3.47 Also move Reph to right of matraIligatures + $knfullforms .= "|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A4|E0A1|E0A2"; + $vstr = preg_replace('/E00B ('.$knfullforms.')/', '\\1 E00B', $vstr); + + // ? Need to shift it beyond base or below-base forms - haven't found so can't test?? + // mPDF 5.3.87 + // E004 added to list (which is a transformed version of 0CBE) + $knvowels = "0CBE|0CC0|0CC1|0CC2|0CC3|0CC4|0CC7|0CC8|0CCA|0CCB|0CD5|0CD6|E004"; + $vstr = preg_replace('/E00B ('.$knvowels.')/', '\\1 E00B', $vstr); + } + + + // ORIYA Shift Reph to RIGHT [E069|E06A|E06B|E06C] + else if ($lang=='or') { + $orrephs = "E069|E06A|E06B|E06C"; + $orfullforms = "0B15|0B16|0B17|0B18|0B19|0B1A|0B1B|0B1C|0B1D|0B1E|0B1F|0B20|0B21|0B22|0B23|0B24|0B25|0B26|0B27|0B28|0B29|0B2A|0B2B|0B2C|0B2D|0B2E|0B2F|0B30|0B31|0B32|0B33|0B34|0B35|0B36|0B37|0B38|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037"; + // E123 - E147 FullHalant forms ? add to FullForms + $orpartialforms = "E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF|E0B0|E0B1|E0B2|E0B3|E0B4|E0B5|E0B6|E0B7|E0B8|E0B9|E0BA|E0BB|E0BC|E0BD|E0BE|E0BF|E0C0|E0C1|E0C2|E0C3|E0C4|E0C5|E0C6|E0C7|E0C8|E0C9|E0CA|E0CB|E0CC|E0CD|E0CE|E0CF|E0D0|E0D1|E0D2|E0D3|E0D4|E0D5|E0D6|E0D7|E0D8|E0D9|E0DA|E0DB|E0DC|E0DD|E0DE|E0DF|E0E0|E0E1|E0E2|E0E3|E0E4|E0E5|E0E6|E0E7|E0E8|E0E9|E0EA|E0EB|E0EC|E0ED|E0EE|E0EF|E0F0|E0F1|E0F2|E0F3|E0F4|E0F5"; + + // Combined MatraIReph[E06D] split [0B3F & E069] to allow reph to be shifted forwards + $vstr = preg_replace('/('.$orfullforms.') E06D ('.$orfullforms.') 0B3E/', '\\1 0B3F E069 \\2 0B3E', $vstr); + + + while(preg_match('/('.$orrephs.') ('.$orpartialforms.')/', $vstr)) { + $vstr = preg_replace('/('.$orrephs.') ('.$orpartialforms.')/', '\\2 \\1', $vstr); + } + $vstr = preg_replace('/('.$orrephs.') ('.$orfullforms.')/', '\\2 \\1', $vstr); + + + // Combine Reph and MatraI + $vstr = str_replace('E069 0B3F', 'E06D', $vstr); // Reph and MatraI -> MatraIReph + $vstr = str_replace('E06A 0B3F', 'E06E', $vstr); // Reph and MatraI -> MatraIReph + $vstr = str_replace('E06B 0B3F', 'E06F', $vstr); // Reph and MatraI -> MatraIReph + } + + + // MALAYALAM Shift Reph to LEFT [E00E] (mlylmRaVattu) + else if ($lang=='ml') { + $halant = "0D4D"; + $vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' 0D30/','E00E \\1', $vstr); // 0D30 = Ra + $vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$mlprebasedvowels .' 0D30/','\\2 E00E \\1', $vstr); // 0D30 = Ra + + $mlfullforms = "0D15|0D16|0D17|0D18|0D19|0D1A|0D1B|0D1C|0D1D|0D1E|0D1F|0D20|0D21|0D22|0D23|0D24|0D25|0D26|0D27|0D28|0D2A|0D2B|0D2C|0D2D|0D2E|0D2F|0D30|0D31|0D32|0D33|0D34|0D35|0D36|0D37|0D38|0D39" + ."|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D"; + // = FullConsonants + FullConjuncts + + // = Add Chillu characters // mPDF 5.0.024 + $mlfullforms .= "|E004|E005|E006|E007|E008|E009"; + while(preg_match('/('.$mlfullforms.') E00E/', $vstr)) + $vstr = preg_replace('/('.$mlfullforms.') E00E/', 'E00E \\1', $vstr); + } + + //============================ + + // SHIFT post-based vowels to Left of SmallForms (NOT to left of full forms) + + // TELUGU Shift + if ($lang=='te') { + // NB $tevowels defined above + // NB $tefullforms defined above + $tebelowbase1 = "E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E"; //'Small1KaToHa' + $tebelowbase2 = "E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071"; // 'Small2KaToHa' + $vstr = preg_replace('/('.$tebelowbase2.') ('.$tevowels.')/', '\\2 \\1', $vstr); + $vstr = preg_replace('/('.$tebelowbase1.') ('.$tevowels.')/', '\\2 \\1', $vstr); + } + + + // KANNADA Shift + else if ($lang=='kn') { + $knvowels = "0CBE|0CC0|0CC1|0CC2|0CC3|0CC4|0CC7|0CC8|0CCA|0CCB|0CD5|0CD6" + // mPDF 5.3.87 Shouldn't swop E082 and E047 (belowbase1) below + // E082 is a matraIligature + // ."|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB" + ."|E004|E007|E008|E009|E00A"; + + + // NB $knvowels defined above + // NB $fullforms defined above + // $belowbase1/2 defined above + $vstr = preg_replace('/('.$belowbase2.') ('.$knvowels.')/', '\\2 \\1', $vstr); + // mPDF 5.3.87 + $vstr = preg_replace('/('.$belowbase1.') ('.$knvowels.')/', '\\2 \\1', $vstr); + + //$vstr = preg_replace('/('.$fullforms.') ('.$knvowels.')/', '\\2 \\1', $vstr); + } + + //============================ + // Clear unwanted ZWJ, ZWNJ + // MALAYALAM + if ($lang=='ml') { + $vstr = preg_replace('/(200C|200D) /','', $vstr); + } + + //============================ + // END & PUT IT BACK TOGETHER + $vstr = preg_replace('/^0020 (.*) 0020$/', '\\1', $vstr); + + $varr = explode(" ",$vstr); + $e = ''; + foreach($varr AS $v) { + $e.=code2utf(hexdec($v)); + } + //============================ + + return $e; +} + + +} + +?> \ No newline at end of file diff --git a/include/mpdf/classes/ttfontsuni.php b/include/mpdf/classes/ttfontsuni.php new file mode 100755 index 0000000000000000000000000000000000000000..f639b005b38e802e6c6ff1531bf3d12e84af2c0f --- /dev/null +++ b/include/mpdf/classes/ttfontsuni.php @@ -0,0 +1,2065 @@ +<?php + +/******************************************************************************* +* TTFontFile class * +* * +* Version: 2.01 * +* Date: 2012-02-25 * +* Author: Ian Back <ianb@bpm1.com> * +* License: LGPL * +* Copyright (c) Ian Back, 2010 * +* This class is based on The ReportLab Open Source PDF library * +* written in Python - http://www.reportlab.com/software/opensource/ * +* together with ideas from the OpenOffice source code and others. * +* This header must be retained in any redistribution or * +* modification of the file. * +* * +*******************************************************************************/ + +// Define the value used in the "head" table of a created TTF file +// 0x74727565 "true" for Mac +// 0x00010000 for Windows +// Either seems to work for a font embedded in a PDF file +// when read by Adobe Reader on a Windows PC(!) +if (!defined('_TTF_MAC_HEADER')) define("_TTF_MAC_HEADER", false); + +// Recalculate correct metadata/profiles when making subset fonts (not SIP/SMP) +// e.g. xMin, xMax, maxNContours +if (!defined('_RECALC_PROFILE')) define("_RECALC_PROFILE", false); + +// TrueType Font Glyph operators +define("GF_WORDS",(1 << 0)); +define("GF_SCALE",(1 << 3)); +define("GF_MORE",(1 << 5)); +define("GF_XYSCALE",(1 << 6)); +define("GF_TWOBYTWO",(1 << 7)); + + + +class TTFontFile { + +var $unAGlyphs; // mPDF 5.4.05 +var $panose; +var $maxUni; +var $sFamilyClass; +var $sFamilySubClass; +var $sipset; +var $smpset; +var $_pos; +var $numTables; +var $searchRange; +var $entrySelector; +var $rangeShift; +var $tables; +var $otables; +var $filename; +var $fh; +var $glyphPos; +var $charToGlyph; +var $ascent; +var $descent; +var $name; +var $familyName; +var $styleName; +var $fullName; +var $uniqueFontID; +var $unitsPerEm; +var $bbox; +var $capHeight; +var $stemV; +var $italicAngle; +var $flags; +var $underlinePosition; +var $underlineThickness; +var $charWidths; +var $defaultWidth; +var $maxStrLenRead; +var $numTTCFonts; +var $TTCFonts; +var $maxUniChar; +var $kerninfo; + + function TTFontFile() { + $this->maxStrLenRead = 200000; // Maximum size of glyf table to read in as string (otherwise reads each glyph from file) + } + + + function getMetrics($file, $TTCfontID=0, $debug=false, $BMPonly=false, $kerninfo=false, $unAGlyphs=false) { // mPDF 5.4.05 + $this->unAGlyphs = $unAGlyphs; // mPDF 5.4.05 + $this->filename = $file; + $this->fh = fopen($file,'rb') or die('Can\'t open file ' . $file); + $this->_pos = 0; + $this->charWidths = ''; + $this->glyphPos = array(); + $this->charToGlyph = array(); + $this->tables = array(); + $this->otables = array(); + $this->kerninfo = array(); + $this->ascent = 0; + $this->descent = 0; + $this->numTTCFonts = 0; + $this->TTCFonts = array(); + $this->version = $version = $this->read_ulong(); + $this->panose = array(); + if ($version==0x4F54544F) + die("Postscript outlines are not supported"); + if ($version==0x74746366 && !$TTCfontID) + die("ERROR - You must define the TTCfontID for a TrueType Collection in config_fonts.php (". $file.")"); + if (!in_array($version, array(0x00010000,0x74727565)) && !$TTCfontID) + die("Not a TrueType font: version=".$version); + if ($TTCfontID > 0) { + $this->version = $version = $this->read_ulong(); // TTC Header version now + if (!in_array($version, array(0x00010000,0x00020000))) + die("ERROR - Error parsing TrueType Collection: version=".$version." - " . $file); + $this->numTTCFonts = $this->read_ulong(); + for ($i=1; $i<=$this->numTTCFonts; $i++) { + $this->TTCFonts[$i]['offset'] = $this->read_ulong(); + } + $this->seek($this->TTCFonts[$TTCfontID]['offset']); + $this->version = $version = $this->read_ulong(); // TTFont version again now + } + $this->readTableDirectory($debug); + $this->extractInfo($debug, $BMPonly, $kerninfo); + fclose($this->fh); + } + + + function readTableDirectory($debug=false) { + $this->numTables = $this->read_ushort(); + $this->searchRange = $this->read_ushort(); + $this->entrySelector = $this->read_ushort(); + $this->rangeShift = $this->read_ushort(); + $this->tables = array(); + for ($i=0;$i<$this->numTables;$i++) { + $record = array(); + $record['tag'] = $this->read_tag(); + $record['checksum'] = array($this->read_ushort(),$this->read_ushort()); + $record['offset'] = $this->read_ulong(); + $record['length'] = $this->read_ulong(); + $this->tables[$record['tag']] = $record; + } + if ($debug) $this->checksumTables(); + } + + function checksumTables() { + // Check the checksums for all tables + foreach($this->tables AS $t) { + if ($t['length'] > 0 && $t['length'] < $this->maxStrLenRead) { // 1.02 + $table = $this->get_chunk($t['offset'], $t['length']); + $checksum = $this->calcChecksum($table); + if ($t['tag'] == 'head') { + $up = unpack('n*', substr($table,8,4)); + $adjustment[0] = $up[1]; + $adjustment[1] = $up[2]; + $checksum = $this->sub32($checksum, $adjustment); + } + $xchecksum = $t['checksum']; + if ($xchecksum != $checksum) + die(sprintf('TTF file "%s": invalid checksum %s table: %s (expected %s)', $this->filename,dechex($checksum[0]).dechex($checksum[1]),$t['tag'],dechex($xchecksum[0]).dechex($xchecksum[1]))); + } + } + } + + function sub32($x, $y) { + $xlo = $x[1]; + $xhi = $x[0]; + $ylo = $y[1]; + $yhi = $y[0]; + if ($ylo > $xlo) { $xlo += 1 << 16; $yhi += 1; } + $reslo = $xlo-$ylo; + if ($yhi > $xhi) { $xhi += 1 << 16; } + $reshi = $xhi-$yhi; + $reshi = $reshi & 0xFFFF; + return array($reshi, $reslo); + } + + function calcChecksum($data) { + if (strlen($data) % 4) { $data .= str_repeat("\0",(4-(strlen($data) % 4))); } + $len = strlen($data); + $hi=0x0000; + $lo=0x0000; + for($i=0;$i<$len;$i+=4) { + $hi += (ord($data[$i])<<8) + ord($data[$i+1]); + $lo += (ord($data[$i+2])<<8) + ord($data[$i+3]); + $hi += ($lo >> 16) & 0xFFFF; + $lo = $lo & 0xFFFF; + } + return array($hi, $lo); + } + + function get_table_pos($tag) { + $offset = $this->tables[$tag]['offset']; + $length = $this->tables[$tag]['length']; + return array($offset, $length); + } + + function seek($pos) { + $this->_pos = $pos; + fseek($this->fh,$this->_pos); + } + + function skip($delta) { + $this->_pos = $this->_pos + $delta; + fseek($this->fh,$delta,SEEK_CUR); + } + + function seek_table($tag, $offset_in_table = 0) { + $tpos = $this->get_table_pos($tag); + $this->_pos = $tpos[0] + $offset_in_table; + fseek($this->fh, $this->_pos); + return $this->_pos; + } + + function read_tag() { + $this->_pos += 4; + return fread($this->fh,4); + } + + function read_short() { + $this->_pos += 2; + $s = fread($this->fh,2); + $a = (ord($s[0])<<8) + ord($s[1]); + if ($a & (1 << 15) ) { + $a = ($a - (1 << 16)); + } + return $a; + } + + function unpack_short($s) { + $a = (ord($s[0])<<8) + ord($s[1]); + if ($a & (1 << 15) ) { + $a = ($a - (1 << 16)); + } + return $a; + } + + function read_ushort() { + $this->_pos += 2; + $s = fread($this->fh,2); + return (ord($s[0])<<8) + ord($s[1]); + } + + function read_ulong() { + $this->_pos += 4; + $s = fread($this->fh,4); + // if large uInt32 as an integer, PHP converts it to -ve + return (ord($s[0])*16777216) + (ord($s[1])<<16) + (ord($s[2])<<8) + ord($s[3]); // 16777216 = 1<<24 + } + + function get_ushort($pos) { + fseek($this->fh,$pos); + $s = fread($this->fh,2); + return (ord($s[0])<<8) + ord($s[1]); + } + + function get_ulong($pos) { + fseek($this->fh,$pos); + $s = fread($this->fh,4); + // iF large uInt32 as an integer, PHP converts it to -ve + return (ord($s[0])*16777216) + (ord($s[1])<<16) + (ord($s[2])<<8) + ord($s[3]); // 16777216 = 1<<24 + } + + function pack_short($val) { + if ($val<0) { + $val = abs($val); + $val = ~$val; + $val += 1; + } + return pack("n",$val); + } + + function splice($stream, $offset, $value) { + return substr($stream,0,$offset) . $value . substr($stream,$offset+strlen($value)); + } + + function _set_ushort($stream, $offset, $value) { + $up = pack("n", $value); + return $this->splice($stream, $offset, $up); + } + + function _set_short($stream, $offset, $val) { + if ($val<0) { + $val = abs($val); + $val = ~$val; + $val += 1; + } + $up = pack("n",$val); + return $this->splice($stream, $offset, $up); + } + + function get_chunk($pos, $length) { + fseek($this->fh,$pos); + if ($length <1) { return ''; } + return (fread($this->fh,$length)); + } + + function get_table($tag) { + list($pos, $length) = $this->get_table_pos($tag); + if ($length == 0) { return ''; } + fseek($this->fh,$pos); + return (fread($this->fh,$length)); + } + + function add($tag, $data) { + if ($tag == 'head') { + $data = $this->splice($data, 8, "\0\0\0\0"); + } + $this->otables[$tag] = $data; + } + + + +///////////////////////////////////////////////////////////////////////////////////////// + function getCTG($file, $TTCfontID=0, $debug=false, $unAGlyphs=false) { // mPDF 5.4.05 + $this->unAGlyphs = $unAGlyphs; // mPDF 5.4.05 + $this->filename = $file; + $this->fh = fopen($file,'rb') or die('Can\'t open file ' . $file); + $this->_pos = 0; + $this->charWidths = ''; + $this->glyphPos = array(); + $this->charToGlyph = array(); + $this->tables = array(); + $this->numTTCFonts = 0; + $this->TTCFonts = array(); + $this->skip(4); + if ($TTCfontID > 0) { + $this->version = $version = $this->read_ulong(); // TTC Header version now + if (!in_array($version, array(0x00010000,0x00020000))) + die("ERROR - Error parsing TrueType Collection: version=".$version." - " . $file); + $this->numTTCFonts = $this->read_ulong(); + for ($i=1; $i<=$this->numTTCFonts; $i++) { + $this->TTCFonts[$i]['offset'] = $this->read_ulong(); + } + $this->seek($this->TTCFonts[$TTCfontID]['offset']); + $this->version = $version = $this->read_ulong(); // TTFont version again now + } + $this->readTableDirectory($debug); + + + // cmap - Character to glyph index mapping table + $cmap_offset = $this->seek_table("cmap"); + $this->skip(2); + $cmapTableCount = $this->read_ushort(); + $unicode_cmap_offset = 0; + for ($i=0;$i<$cmapTableCount;$i++) { + $platformID = $this->read_ushort(); + $encodingID = $this->read_ushort(); + $offset = $this->read_ulong(); + $save_pos = $this->_pos; + if ($platformID == 3 && $encodingID == 1) { // Microsoft, Unicode + $format = $this->get_ushort($cmap_offset + $offset); + if ($format == 4) { + $unicode_cmap_offset = $cmap_offset + $offset; + break; + } + } + else if ($platformID == 0) { // Unicode -- assume all encodings are compatible + $format = $this->get_ushort($cmap_offset + $offset); + if ($format == 4) { + $unicode_cmap_offset = $cmap_offset + $offset; + break; + } + } + $this->seek($save_pos ); + } + + $glyphToChar = array(); + $charToGlyph = array(); + $this->getCMAP4($unicode_cmap_offset, $glyphToChar, $charToGlyph ); + + fclose($this->fh); + return ($charToGlyph); + } + +///////////////////////////////////////////////////////////////////////////////////////// + function getTTCFonts($file) { + $this->filename = $file; + $this->fh = fopen($file,'rb'); + if (!$this->fh) { return ('ERROR - Can\'t open file ' . $file); } + $this->numTTCFonts = 0; + $this->TTCFonts = array(); + $this->version = $version = $this->read_ulong(); + if ($version==0x74746366) { + $this->version = $version = $this->read_ulong(); // TTC Header version now + if (!in_array($version, array(0x00010000,0x00020000))) + return("ERROR - Error parsing TrueType Collection: version=".$version." - " . $file); + } + else { + return("ERROR - Not a TrueType Collection: version=".$version." - " . $file); + } + $this->numTTCFonts = $this->read_ulong(); + for ($i=1; $i<=$this->numTTCFonts; $i++) { + $this->TTCFonts[$i]['offset'] = $this->read_ulong(); + } + } + + + +///////////////////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////////////////// + + function extractInfo($debug=false, $BMPonly=false, $kerninfo=false) { + $this->panose = array(); + $this->sFamilyClass = 0; + $this->sFamilySubClass = 0; + /////////////////////////////////// + // name - Naming table + /////////////////////////////////// + $name_offset = $this->seek_table("name"); + $format = $this->read_ushort(); + if ($format != 0 && $format != 1) + die("Unknown name table format ".$format); + $numRecords = $this->read_ushort(); + $string_data_offset = $name_offset + $this->read_ushort(); + $names = array(1=>'',2=>'',3=>'',4=>'',6=>''); + $K = array_keys($names); + $nameCount = count($names); + for ($i=0;$i<$numRecords; $i++) { + $platformId = $this->read_ushort(); + $encodingId = $this->read_ushort(); + $languageId = $this->read_ushort(); + $nameId = $this->read_ushort(); + $length = $this->read_ushort(); + $offset = $this->read_ushort(); + if (!in_array($nameId,$K)) continue; + $N = ''; + if ($platformId == 3 && $encodingId == 1 && $languageId == 0x409) { // Microsoft, Unicode, US English, PS Name + $opos = $this->_pos; + $this->seek($string_data_offset + $offset); + if ($length % 2 != 0) + die("PostScript name is UTF-16BE string of odd length"); + $length /= 2; + $N = ''; + while ($length > 0) { + $char = $this->read_ushort(); + $N .= (chr($char)); + $length -= 1; + } + $this->_pos = $opos; + $this->seek($opos); + } + else if ($platformId == 1 && $encodingId == 0 && $languageId == 0) { // Macintosh, Roman, English, PS Name + $opos = $this->_pos; + $N = $this->get_chunk($string_data_offset + $offset, $length); + $this->_pos = $opos; + $this->seek($opos); + } + if ($N && $names[$nameId]=='') { + $names[$nameId] = $N; + $nameCount -= 1; + if ($nameCount==0) break; + } + } + if ($names[6]) + $psName = $names[6]; + else if ($names[4]) + $psName = preg_replace('/ /','-',$names[4]); + else if ($names[1]) + $psName = preg_replace('/ /','-',$names[1]); + else + $psName = ''; + if (!$psName) + die("Could not find PostScript font name: ".$this->filename); + if ($debug) { + for ($i=0;$i<count($psName);$i++) { + $c = $psName[$i]; + $oc = ord($c); + if ($oc>126 || strpos(' [](){}<>/%',$c)!==false) + die("psName=".$psName." contains invalid character ".$c." ie U+".ord(c)); + } + } + $this->name = $psName; + if ($names[1]) { $this->familyName = $names[1]; } else { $this->familyName = $psName; } + if ($names[2]) { $this->styleName = $names[2]; } else { $this->styleName = 'Regular'; } + if ($names[4]) { $this->fullName = $names[4]; } else { $this->fullName = $psName; } + if ($names[3]) { $this->uniqueFontID = $names[3]; } else { $this->uniqueFontID = $psName; } + + if ($names[6]) { $this->fullName = $names[6]; } + + /////////////////////////////////// + // head - Font header table + /////////////////////////////////// + $this->seek_table("head"); + if ($debug) { + $ver_maj = $this->read_ushort(); + $ver_min = $this->read_ushort(); + if ($ver_maj != 1) + die('Unknown head table version '. $ver_maj .'.'. $ver_min); + $this->fontRevision = $this->read_ushort() . $this->read_ushort(); + + $this->skip(4); + $magic = $this->read_ulong(); + if ($magic != 0x5F0F3CF5) + die('Invalid head table magic ' .$magic); + $this->skip(2); + } + else { + $this->skip(18); + } + $this->unitsPerEm = $unitsPerEm = $this->read_ushort(); + $scale = 1000 / $unitsPerEm; + $this->skip(16); + $xMin = $this->read_short(); + $yMin = $this->read_short(); + $xMax = $this->read_short(); + $yMax = $this->read_short(); + $this->bbox = array(($xMin*$scale), ($yMin*$scale), ($xMax*$scale), ($yMax*$scale)); + $this->skip(3*2); + $indexToLocFormat = $this->read_ushort(); + $glyphDataFormat = $this->read_ushort(); + if ($glyphDataFormat != 0) + die('Unknown glyph data format '.$glyphDataFormat); + + /////////////////////////////////// + // hhea metrics table + /////////////////////////////////// + // ttf2t1 seems to use this value rather than the one in OS/2 - so put in for compatibility + if (isset($this->tables["hhea"])) { + $this->seek_table("hhea"); + $this->skip(4); + $hheaAscender = $this->read_short(); + $hheaDescender = $this->read_short(); + $this->ascent = ($hheaAscender *$scale); + $this->descent = ($hheaDescender *$scale); + } + + /////////////////////////////////// + // OS/2 - OS/2 and Windows metrics table + /////////////////////////////////// + if (isset($this->tables["OS/2"])) { + $this->seek_table("OS/2"); + $version = $this->read_ushort(); + $this->skip(2); + $usWeightClass = $this->read_ushort(); + $this->skip(2); + $fsType = $this->read_ushort(); + if ($fsType == 0x0002 || ($fsType & 0x0300) != 0) { + global $overrideTTFFontRestriction; + if (!$overrideTTFFontRestriction) die('ERROR - Font file '.$this->filename.' cannot be embedded due to copyright restrictions.'); + $this->restrictedUse = true; + } + $this->skip(20); + $sF = $this->read_short(); + $this->sFamilyClass = ($sF >> 8); + $this->sFamilySubClass = ($sF & 0xFF); + $this->_pos += 10; //PANOSE = 10 byte length + $panose = fread($this->fh,10); + $this->panose = array(); + for ($p=0;$p<strlen($panose);$p++) { $this->panose[] = ord($panose[$p]); } + $this->skip(26); + $sTypoAscender = $this->read_short(); + $sTypoDescender = $this->read_short(); + if (!$this->ascent) $this->ascent = ($sTypoAscender*$scale); + if (!$this->descent) $this->descent = ($sTypoDescender*$scale); + if ($version > 1) { + $this->skip(16); + $sCapHeight = $this->read_short(); + $this->capHeight = ($sCapHeight*$scale); + } + else { + $this->capHeight = $this->ascent; + } + } + else { + $usWeightClass = 500; + if (!$this->ascent) $this->ascent = ($yMax*$scale); + if (!$this->descent) $this->descent = ($yMin*$scale); + $this->capHeight = $this->ascent; + } + $this->stemV = 50 + intval(pow(($usWeightClass / 65.0),2)); + + /////////////////////////////////// + // post - PostScript table + /////////////////////////////////// + $this->seek_table("post"); + if ($debug) { + $ver_maj = $this->read_ushort(); + $ver_min = $this->read_ushort(); + if ($ver_maj <1 || $ver_maj >4) + die('Unknown post table version '.$ver_maj); + } + else { + $this->skip(4); + } + $this->italicAngle = $this->read_short() + $this->read_ushort() / 65536.0; + $this->underlinePosition = $this->read_short() * $scale; + $this->underlineThickness = $this->read_short() * $scale; + $isFixedPitch = $this->read_ulong(); + + $this->flags = 4; + + if ($this->italicAngle!= 0) + $this->flags = $this->flags | 64; + if ($usWeightClass >= 600) + $this->flags = $this->flags | 262144; + if ($isFixedPitch) + $this->flags = $this->flags | 1; + + /////////////////////////////////// + // hhea - Horizontal header table + /////////////////////////////////// + $this->seek_table("hhea"); + if ($debug) { + $ver_maj = $this->read_ushort(); + $ver_min = $this->read_ushort(); + if ($ver_maj != 1) + die('Unknown hhea table version '.$ver_maj); + $this->skip(28); + } + else { + $this->skip(32); + } + $metricDataFormat = $this->read_ushort(); + if ($metricDataFormat != 0) + die('Unknown horizontal metric data format '.$metricDataFormat); + $numberOfHMetrics = $this->read_ushort(); + if ($numberOfHMetrics == 0) + die('Number of horizontal metrics is 0'); + + /////////////////////////////////// + // maxp - Maximum profile table + /////////////////////////////////// + $this->seek_table("maxp"); + if ($debug) { + $ver_maj = $this->read_ushort(); + $ver_min = $this->read_ushort(); + if ($ver_maj != 1) + die('Unknown maxp table version '.$ver_maj); + } + else { + $this->skip(4); + } + $numGlyphs = $this->read_ushort(); + + + /////////////////////////////////// + // cmap - Character to glyph index mapping table + /////////////////////////////////// + $cmap_offset = $this->seek_table("cmap"); + $this->skip(2); + $cmapTableCount = $this->read_ushort(); + $unicode_cmap_offset = 0; + for ($i=0;$i<$cmapTableCount;$i++) { + $platformID = $this->read_ushort(); + $encodingID = $this->read_ushort(); + $offset = $this->read_ulong(); + $save_pos = $this->_pos; + if (($platformID == 3 && $encodingID == 1) || $platformID == 0) { // Microsoft, Unicode + $format = $this->get_ushort($cmap_offset + $offset); + if ($format == 4) { + if (!$unicode_cmap_offset) $unicode_cmap_offset = $cmap_offset + $offset; + if ($BMPonly) break; + } + } + // Microsoft, Unicode Format 12 table HKCS + else if ((($platformID == 3 && $encodingID == 10) || $platformID == 0) && !$BMPonly) { + $format = $this->get_ushort($cmap_offset + $offset); + if ($format == 12) { + $unicode_cmap_offset = $cmap_offset + $offset; + break; + } + } + $this->seek($save_pos ); + } + if (!$unicode_cmap_offset) + die('Font ('.$this->filename .') does not have cmap for Unicode (platform 3, encoding 1, format 4, or platform 0, any encoding, format 4)'); + + + $sipset = false; + $smpset = false; + // Format 12 CMAP does characters above Unicode BMP i.e. some HKCS characters U+20000 and above + if ($format == 12 && !$BMPonly) { + $this->maxUniChar = 0; + $this->seek($unicode_cmap_offset + 4); + $length = $this->read_ulong(); + $limit = $unicode_cmap_offset + $length; + $this->skip(4); + + $nGroups = $this->read_ulong(); + + $glyphToChar = array(); + $charToGlyph = array(); + for($i=0; $i<$nGroups ; $i++) { + $startCharCode = $this->read_ulong(); + $endCharCode = $this->read_ulong(); + $startGlyphCode = $this->read_ulong(); + if (($endCharCode > 0x20000 && $endCharCode < 0x2A6DF) || ($endCharCode > 0x2F800 && $endCharCode < 0x2FA1F)) { + $sipset = true; + } + else if ($endCharCode > 0x10000 && $endCharCode < 0x1FFFF) { + $smpset = true; + } + $offset = 0; + for ($unichar=$startCharCode;$unichar<=$endCharCode;$unichar++) { + $glyph = $startGlyphCode + $offset ; + $offset++; + $charToGlyph[$unichar] = $glyph; + if ($unichar < 196608) { $this->maxUniChar = max($unichar,$this->maxUniChar); } + $glyphToChar[$glyph][] = $unichar; + } + } + } + else { + + $glyphToChar = array(); + $charToGlyph = array(); + $this->getCMAP4($unicode_cmap_offset, $glyphToChar, $charToGlyph ); + + } + $this->sipset = $sipset ; + $this->smpset = $smpset ; + + /////////////////////////////////// + // hmtx - Horizontal metrics table + /////////////////////////////////// + $this->getHMTX($numberOfHMetrics, $numGlyphs, $glyphToChar, $scale); + + /////////////////////////////////// + // kern - Kerning pair table + /////////////////////////////////// + if ($kerninfo) { + // Recognises old form of Kerning table - as required by Windows - Format 0 only + $kern_offset = $this->seek_table("kern"); + $version = $this->read_ushort(); + $nTables = $this->read_ushort(); + // subtable header + $sversion = $this->read_ushort(); + $slength = $this->read_ushort(); + $scoverage = $this->read_ushort(); + $format = $scoverage >> 8; + if ($kern_offset && $version==0 && $format==0) { + // Format 0 + $nPairs = $this->read_ushort(); + $this->skip(6); + for ($i=0; $i<$nPairs; $i++) { + $left = $this->read_ushort(); + $right = $this->read_ushort(); + $val = $this->read_short(); + if (count($glyphToChar[$left])==1 && count($glyphToChar[$right])==1) { + if ($left != 32 && $right != 32) { + $this->kerninfo[$glyphToChar[$left][0]][$glyphToChar[$right][0]] = intval($val*$scale); + } + } + } + } + } + } + + +///////////////////////////////////////////////////////////////////////////////////////// + + + function makeSubset($file, &$subset, $TTCfontID=0, $debug=false, $unAGlyphs=false) { // mPDF 5.4.05 + $this->unAGlyphs = $unAGlyphs; // mPDF 5.4.05 + $this->filename = $file; + $this->fh = fopen($file ,'rb') or die('Can\'t open file ' . $file); + $this->_pos = 0; + $this->charWidths = ''; + $this->glyphPos = array(); + $this->charToGlyph = array(); + $this->tables = array(); + $this->otables = array(); + $this->ascent = 0; + $this->descent = 0; + $this->numTTCFonts = 0; + $this->TTCFonts = array(); + $this->skip(4); + $this->maxUni = 0; + if ($TTCfontID > 0) { + $this->version = $version = $this->read_ulong(); // TTC Header version now + if (!in_array($version, array(0x00010000,0x00020000))) + die("ERROR - Error parsing TrueType Collection: version=".$version." - " . $file); + $this->numTTCFonts = $this->read_ulong(); + for ($i=1; $i<=$this->numTTCFonts; $i++) { + $this->TTCFonts[$i]['offset'] = $this->read_ulong(); + } + $this->seek($this->TTCFonts[$TTCfontID]['offset']); + $this->version = $version = $this->read_ulong(); // TTFont version again now + } + $this->readTableDirectory($debug); + + /////////////////////////////////// + // head - Font header table + /////////////////////////////////// + $this->seek_table("head"); + $this->skip(50); + $indexToLocFormat = $this->read_ushort(); + $glyphDataFormat = $this->read_ushort(); + + /////////////////////////////////// + // hhea - Horizontal header table + /////////////////////////////////// + $this->seek_table("hhea"); + $this->skip(32); + $metricDataFormat = $this->read_ushort(); + $orignHmetrics = $numberOfHMetrics = $this->read_ushort(); + + /////////////////////////////////// + // maxp - Maximum profile table + /////////////////////////////////// + $this->seek_table("maxp"); + $this->skip(4); + $numGlyphs = $this->read_ushort(); + + + /////////////////////////////////// + // cmap - Character to glyph index mapping table + /////////////////////////////////// + $cmap_offset = $this->seek_table("cmap"); + $this->skip(2); + $cmapTableCount = $this->read_ushort(); + $unicode_cmap_offset = 0; + for ($i=0;$i<$cmapTableCount;$i++) { + $platformID = $this->read_ushort(); + $encodingID = $this->read_ushort(); + $offset = $this->read_ulong(); + $save_pos = $this->_pos; + if (($platformID == 3 && $encodingID == 1) || $platformID == 0) { // Microsoft, Unicode + $format = $this->get_ushort($cmap_offset + $offset); + if ($format == 4) { + $unicode_cmap_offset = $cmap_offset + $offset; + break; + } + } + $this->seek($save_pos ); + } + + if (!$unicode_cmap_offset) + die('Font ('.$this->filename .') does not have Unicode cmap (platform 3, encoding 1, format 4, or platform 0 [any encoding] format 4)'); + + + $glyphToChar = array(); + $charToGlyph = array(); + $this->getCMAP4($unicode_cmap_offset, $glyphToChar, $charToGlyph ); + + $this->charToGlyph = $charToGlyph; + + + /////////////////////////////////// + // hmtx - Horizontal metrics table + /////////////////////////////////// + $scale = 1; // not used + $this->getHMTX($numberOfHMetrics, $numGlyphs, $glyphToChar, $scale); + + /////////////////////////////////// + // loca - Index to location + /////////////////////////////////// + $this->getLOCA($indexToLocFormat, $numGlyphs); + + $subsetglyphs = array(0=>0, 1=>1, 2=>2); + $subsetCharToGlyph = array(); + foreach($subset AS $code) { + if (isset($this->charToGlyph[$code])) { + $subsetglyphs[$this->charToGlyph[$code]] = $code; // Old Glyph ID => Unicode + $subsetCharToGlyph[$code] = $this->charToGlyph[$code]; // Unicode to old GlyphID + + } + $this->maxUni = max($this->maxUni, $code); + } + + list($start,$dummy) = $this->get_table_pos('glyf'); + + $glyphSet = array(); + ksort($subsetglyphs); + $n = 0; + $fsLastCharIndex = 0; // maximum Unicode index (character code) in this font, according to the cmap subtable for platform ID 3 and platform- specific encoding ID 0 or 1. + foreach($subsetglyphs AS $originalGlyphIdx => $uni) { + $fsLastCharIndex = max($fsLastCharIndex , $uni); + $glyphSet[$originalGlyphIdx] = $n; // old glyphID to new glyphID + $n++; + } + + ksort($subsetCharToGlyph); + foreach($subsetCharToGlyph AS $uni => $originalGlyphIdx) { + $codeToGlyph[$uni] = $glyphSet[$originalGlyphIdx] ; + } + $this->codeToGlyph = $codeToGlyph; + + ksort($subsetglyphs); + foreach($subsetglyphs AS $originalGlyphIdx => $uni) { + $this->getGlyphs($originalGlyphIdx, $start, $glyphSet, $subsetglyphs); + } + + $numGlyphs = $numberOfHMetrics = count($subsetglyphs ); + + /////////////////////////////////// + // name - table copied from the original + /////////////////////////////////// + $this->add('name', $this->get_table('name')); + + /////////////////////////////////// + //tables copied from the original + /////////////////////////////////// + $tags = array ('cvt ', 'fpgm', 'prep', 'gasp'); + foreach($tags AS $tag) { + if (isset($this->tables[$tag])) { $this->add($tag, $this->get_table($tag)); } + } + + /////////////////////////////////// + // post - PostScript + /////////////////////////////////// + if (isset($this->tables['post'])) { + $opost = $this->get_table('post'); + $post = "\x00\x03\x00\x00" . substr($opost,4,12) . "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; + $this->add('post', $post); + } + + /////////////////////////////////// + // Sort CID2GID map into segments of contiguous codes + /////////////////////////////////// + ksort($codeToGlyph); + unset($codeToGlyph[0]); + //unset($codeToGlyph[65535]); + $rangeid = 0; + $range = array(); + $prevcid = -2; + $prevglidx = -1; + // for each character + foreach ($codeToGlyph as $cid => $glidx) { + if ($cid == ($prevcid + 1) && $glidx == ($prevglidx + 1)) { + $range[$rangeid][] = $glidx; + } else { + // new range + $rangeid = $cid; + $range[$rangeid] = array(); + $range[$rangeid][] = $glidx; + } + $prevcid = $cid; + $prevglidx = $glidx; + } + + + + /////////////////////////////////// + // CMap table + /////////////////////////////////// + // cmap - Character to glyph mapping + $segCount = count($range) + 1; // + 1 Last segment has missing character 0xFFFF + $searchRange = 1; + $entrySelector = 0; + while ($searchRange * 2 <= $segCount ) { + $searchRange = $searchRange * 2; + $entrySelector = $entrySelector + 1; + } + $searchRange = $searchRange * 2; + $rangeShift = $segCount * 2 - $searchRange; + $length = 16 + (8*$segCount ) + ($numGlyphs+1); + $cmap = array(0, 3, // Index : version, number of encoding subtables + 0, 0, // Encoding Subtable : platform (UNI=0), encoding 0 + 0, 28, // Encoding Subtable : offset (hi,lo) + 0, 3, // Encoding Subtable : platform (UNI=0), encoding 3 + 0, 28, // Encoding Subtable : offset (hi,lo) + 3, 1, // Encoding Subtable : platform (MS=3), encoding 1 + 0, 28, // Encoding Subtable : offset (hi,lo) + 4, $length, 0, // Format 4 Mapping subtable: format, length, language + $segCount*2, + $searchRange, + $entrySelector, + $rangeShift); + + // endCode(s) + foreach($range AS $start=>$subrange) { + $endCode = $start + (count($subrange)-1); + $cmap[] = $endCode; // endCode(s) + } + $cmap[] = 0xFFFF; // endCode of last Segment + $cmap[] = 0; // reservedPad + + // startCode(s) + foreach($range AS $start=>$subrange) { + $cmap[] = $start; // startCode(s) + } + $cmap[] = 0xFFFF; // startCode of last Segment + // idDelta(s) + foreach($range AS $start=>$subrange) { + $idDelta = -($start-$subrange[0]); + $n += count($subrange); + $cmap[] = $idDelta; // idDelta(s) + } + $cmap[] = 1; // idDelta of last Segment + // idRangeOffset(s) + foreach($range AS $subrange) { + $cmap[] = 0; // idRangeOffset[segCount] Offset in bytes to glyph indexArray, or 0 + + } + $cmap[] = 0; // idRangeOffset of last Segment + foreach($range AS $subrange) { + foreach($subrange AS $glidx) { + $cmap[] = $glidx; + } + } + $cmap[] = 0; // Mapping for last character + $cmapstr = ''; + foreach($cmap AS $cm) { $cmapstr .= pack("n",$cm); } + $this->add('cmap', $cmapstr); + + + /////////////////////////////////// + // glyf - Glyph data + /////////////////////////////////// + list($glyfOffset,$glyfLength) = $this->get_table_pos('glyf'); + if ($glyfLength < $this->maxStrLenRead) { + $glyphData = $this->get_table('glyf'); + } + + $offsets = array(); + $glyf = ''; + $pos = 0; + $hmtxstr = ''; + $xMinT = 0; + $yMinT = 0; + $xMaxT = 0; + $yMaxT = 0; + $advanceWidthMax = 0; + $minLeftSideBearing = 0; + $minRightSideBearing = 0; + $xMaxExtent = 0; + $maxPoints = 0; // points in non-compound glyph + $maxContours = 0; // contours in non-compound glyph + $maxComponentPoints = 0; // points in compound glyph + $maxComponentContours = 0; // contours in compound glyph + $maxComponentElements = 0; // number of glyphs referenced at top level + $maxComponentDepth = 0; // levels of recursion, set to 0 if font has only simple glyphs + $this->glyphdata = array(); + + foreach($subsetglyphs AS $originalGlyphIdx => $uni) { + // hmtx - Horizontal Metrics + $hm = $this->getHMetric($orignHmetrics, $originalGlyphIdx); + $hmtxstr .= $hm; + + $offsets[] = $pos; + $glyphPos = $this->glyphPos[$originalGlyphIdx]; + $glyphLen = $this->glyphPos[$originalGlyphIdx + 1] - $glyphPos; + if ($glyfLength < $this->maxStrLenRead) { + $data = substr($glyphData,$glyphPos,$glyphLen); + } + else { + if ($glyphLen > 0) $data = $this->get_chunk($glyfOffset+$glyphPos,$glyphLen); + else $data = ''; + } + + if ($glyphLen > 0) { + if (_RECALC_PROFILE) { + $xMin = $this->unpack_short(substr($data,2,2)); + $yMin = $this->unpack_short(substr($data,4,2)); + $xMax = $this->unpack_short(substr($data,6,2)); + $yMax = $this->unpack_short(substr($data,8,2)); + $xMinT = min($xMinT,$xMin); + $yMinT = min($yMinT,$yMin); + $xMaxT = max($xMaxT,$xMax); + $yMaxT = max($yMaxT,$yMax); + $aw = $this->unpack_short(substr($hm,0,2)); + $lsb = $this->unpack_short(substr($hm,2,2)); + $advanceWidthMax = max($advanceWidthMax,$aw); + $minLeftSideBearing = min($minLeftSideBearing,$lsb); + $minRightSideBearing = min($minRightSideBearing,($aw - $lsb - ($xMax - $xMin))); + $xMaxExtent = max($xMaxExtent,($lsb + ($xMax - $xMin))); + } + $up = unpack("n", substr($data,0,2)); + } + if ($glyphLen > 2 && ($up[1] & (1 << 15)) ) { // If number of contours <= -1 i.e. composiste glyph + $pos_in_glyph = 10; + $flags = GF_MORE; + $nComponentElements = 0; + while ($flags & GF_MORE) { + $nComponentElements += 1; // number of glyphs referenced at top level + $up = unpack("n", substr($data,$pos_in_glyph,2)); + $flags = $up[1]; + $up = unpack("n", substr($data,$pos_in_glyph+2,2)); + $glyphIdx = $up[1]; + $this->glyphdata[$originalGlyphIdx]['compGlyphs'][] = $glyphIdx; + $data = $this->_set_ushort($data, $pos_in_glyph + 2, $glyphSet[$glyphIdx]); + $pos_in_glyph += 4; + if ($flags & GF_WORDS) { $pos_in_glyph += 4; } + else { $pos_in_glyph += 2; } + if ($flags & GF_SCALE) { $pos_in_glyph += 2; } + else if ($flags & GF_XYSCALE) { $pos_in_glyph += 4; } + else if ($flags & GF_TWOBYTWO) { $pos_in_glyph += 8; } + } + $maxComponentElements = max($maxComponentElements, $nComponentElements); + } + // Simple Glyph + else if (_RECALC_PROFILE && $glyphLen > 2 && $up[1] < (1 << 15) && $up[1] > 0) { // Number of contours > 0 simple glyph + $nContours = $up[1]; + $this->glyphdata[$originalGlyphIdx]['nContours'] = $nContours; + $maxContours = max($maxContours, $nContours); + + // Count number of points in simple glyph + $pos_in_glyph = 10 + ($nContours * 2) - 2; // Last endContourPoint + $up = unpack("n", substr($data,$pos_in_glyph,2)); + $points = $up[1]+1; + $this->glyphdata[$originalGlyphIdx]['nPoints'] = $points; + $maxPoints = max($maxPoints, $points); + } + + $glyf .= $data; + $pos += $glyphLen; + if ($pos % 4 != 0) { + $padding = 4 - ($pos % 4); + $glyf .= str_repeat("\0",$padding); + $pos += $padding; + } + } + + if (_RECALC_PROFILE) { + foreach($this->glyphdata AS $originalGlyphIdx => $val) { + $maxdepth = $depth = -1; + $points = 0; + $contours = 0; + $this->getGlyphData($originalGlyphIdx, $maxdepth, $depth, $points, $contours) ; + $maxComponentDepth = max($maxComponentDepth , $maxdepth); + $maxComponentPoints = max($maxComponentPoints , $points); + $maxComponentContours = max($maxComponentContours , $contours); + } + } + + + $offsets[] = $pos; + $this->add('glyf', $glyf); + + /////////////////////////////////// + // hmtx - Horizontal Metrics + /////////////////////////////////// + $this->add('hmtx', $hmtxstr); + + + /////////////////////////////////// + // loca - Index to location + /////////////////////////////////// + $locastr = ''; + if ((($pos + 1) >> 1) > 0xFFFF) { + $indexToLocFormat = 1; // long format + foreach($offsets AS $offset) { $locastr .= pack("N",$offset); } + } + else { + $indexToLocFormat = 0; // short format + foreach($offsets AS $offset) { $locastr .= pack("n",($offset/2)); } + } + $this->add('loca', $locastr); + + /////////////////////////////////// + // head - Font header + /////////////////////////////////// + $head = $this->get_table('head'); + $head = $this->_set_ushort($head, 50, $indexToLocFormat); + if (_RECALC_PROFILE) { + $head = $this->_set_short($head, 36, $xMinT); // for all glyph bounding boxes + $head = $this->_set_short($head, 38, $yMinT); // for all glyph bounding boxes + $head = $this->_set_short($head, 40, $xMaxT); // for all glyph bounding boxes + $head = $this->_set_short($head, 42, $yMaxT); // for all glyph bounding boxes + $head[17] = chr($head[17] & ~(1 << 4)); // Unset Bit 4 (as hdmx/LTSH tables not included) + } + $this->add('head', $head); + + + /////////////////////////////////// + // hhea - Horizontal Header + /////////////////////////////////// + $hhea = $this->get_table('hhea'); + $hhea = $this->_set_ushort($hhea, 34, $numberOfHMetrics); + if (_RECALC_PROFILE) { + $hhea = $this->_set_ushort($hhea, 10, $advanceWidthMax); + $hhea = $this->_set_short($hhea, 12, $minLeftSideBearing); + $hhea = $this->_set_short($hhea, 14, $minRightSideBearing); + $hhea = $this->_set_short($hhea, 16, $xMaxExtent); + } + $this->add('hhea', $hhea); + + /////////////////////////////////// + // maxp - Maximum Profile + /////////////////////////////////// + $maxp = $this->get_table('maxp'); + $maxp = $this->_set_ushort($maxp, 4, $numGlyphs); + if (_RECALC_PROFILE) { + $maxp = $this->_set_ushort($maxp, 6, $maxPoints); // points in non-compound glyph + $maxp = $this->_set_ushort($maxp, 8, $maxContours); // contours in non-compound glyph + $maxp = $this->_set_ushort($maxp, 10, $maxComponentPoints); // points in compound glyph + $maxp = $this->_set_ushort($maxp, 12, $maxComponentContours); // contours in compound glyph + $maxp = $this->_set_ushort($maxp, 28, $maxComponentElements); // number of glyphs referenced at top level + $maxp = $this->_set_ushort($maxp, 30, $maxComponentDepth); // levels of recursion, set to 0 if font has only simple glyphs + } + $this->add('maxp', $maxp); + + + /////////////////////////////////// + // OS/2 - OS/2 + /////////////////////////////////// + if (isset($this->tables['OS/2'])) { + $os2_offset = $this->seek_table("OS/2"); + if (_RECALC_PROFILE) { + $fsSelection = $this->get_ushort($os2_offset+62); + $fsSelection = ($fsSelection & ~(1 << 6)); // 2-byte bit field containing information concerning the nature of the font patterns + // bit#0 = Italic; bit#5=Bold + // Match name table's font subfamily string + // Clear bit#6 used for 'Regular' and optional + } + + // NB Currently this method never subsets characters above BMP + // Could set nonBMP bit according to $this->maxUni + $nonBMP = $this->get_ushort($os2_offset+46); + $nonBMP = ($nonBMP & ~(1 << 9)); // Unset Bit 57 (indicates non-BMP) - for interactive forms + + $os2 = $this->get_table('OS/2'); + if (_RECALC_PROFILE) { + $os2 = $this->_set_ushort($os2, 62, $fsSelection); + $os2 = $this->_set_ushort($os2, 66, $fsLastCharIndex); + $os2 = $this->_set_ushort($os2, 42, 0x0000); // ulCharRange (ulUnicodeRange) bits 24-31 | 16-23 + $os2 = $this->_set_ushort($os2, 44, 0x0000); // ulCharRange (Unicode ranges) bits 8-15 | 0-7 + $os2 = $this->_set_ushort($os2, 46, $nonBMP); // ulCharRange (Unicode ranges) bits 56-63 | 48-55 + $os2 = $this->_set_ushort($os2, 48, 0x0000); // ulCharRange (Unicode ranges) bits 40-47 | 32-39 + $os2 = $this->_set_ushort($os2, 50, 0x0000); // ulCharRange (Unicode ranges) bits 88-95 | 80-87 + $os2 = $this->_set_ushort($os2, 52, 0x0000); // ulCharRange (Unicode ranges) bits 72-79 | 64-71 + $os2 = $this->_set_ushort($os2, 54, 0x0000); // ulCharRange (Unicode ranges) bits 120-127 | 112-119 + $os2 = $this->_set_ushort($os2, 56, 0x0000); // ulCharRange (Unicode ranges) bits 104-111 | 96-103 + } + $os2 = $this->_set_ushort($os2, 46, $nonBMP); // Unset Bit 57 (indicates non-BMP) - for interactive forms + + $this->add('OS/2', $os2 ); + } + + fclose($this->fh); + // Put the TTF file together + $stm = ''; + $this->endTTFile($stm); + //file_put_contents('testfont.ttf', $stm); exit; + return $stm ; + } + +//================================================================================ + + // Also does SMP + function makeSubsetSIP($file, &$subset, $TTCfontID=0, $debug=false) { + $this->fh = fopen($file ,'rb') or die('Can\'t open file ' . $file); + $this->filename = $file; + $this->_pos = 0; + $this->unAGlyphs = false; // mPDF 5.4.05 + $this->charWidths = ''; + $this->glyphPos = array(); + $this->charToGlyph = array(); + $this->tables = array(); + $this->otables = array(); + $this->ascent = 0; + $this->descent = 0; + $this->numTTCFonts = 0; + $this->TTCFonts = array(); + $this->skip(4); + if ($TTCfontID > 0) { + $this->version = $version = $this->read_ulong(); // TTC Header version now + if (!in_array($version, array(0x00010000,0x00020000))) + die("ERROR - Error parsing TrueType Collection: version=".$version." - " . $file); + $this->numTTCFonts = $this->read_ulong(); + for ($i=1; $i<=$this->numTTCFonts; $i++) { + $this->TTCFonts[$i]['offset'] = $this->read_ulong(); + } + $this->seek($this->TTCFonts[$TTCfontID]['offset']); + $this->version = $version = $this->read_ulong(); // TTFont version again now + } + $this->readTableDirectory($debug); + + + + /////////////////////////////////// + // head - Font header table + /////////////////////////////////// + $this->seek_table("head"); + $this->skip(50); + $indexToLocFormat = $this->read_ushort(); + $glyphDataFormat = $this->read_ushort(); + + /////////////////////////////////// + // hhea - Horizontal header table + /////////////////////////////////// + $this->seek_table("hhea"); + $this->skip(32); + $metricDataFormat = $this->read_ushort(); + $orignHmetrics = $numberOfHMetrics = $this->read_ushort(); + + /////////////////////////////////// + // maxp - Maximum profile table + /////////////////////////////////// + $this->seek_table("maxp"); + $this->skip(4); + $numGlyphs = $this->read_ushort(); + + + /////////////////////////////////// + // cmap - Character to glyph index mapping table + /////////////////////////////////// + + $cmap_offset = $this->seek_table("cmap"); + $this->skip(2); + $cmapTableCount = $this->read_ushort(); + $unicode_cmap_offset = 0; + for ($i=0;$i<$cmapTableCount;$i++) { + $platformID = $this->read_ushort(); + $encodingID = $this->read_ushort(); + $offset = $this->read_ulong(); + $save_pos = $this->_pos; + if (($platformID == 3 && $encodingID == 10) || $platformID == 0) { // Microsoft, Unicode Format 12 table HKCS + $format = $this->get_ushort($cmap_offset + $offset); + if ($format == 12) { + $unicode_cmap_offset = $cmap_offset + $offset; + break; + } + } + $this->seek($save_pos ); + } + + if (!$unicode_cmap_offset) + die('Font does not have cmap for Unicode (platform 3, encoding 1, format 4, or platform 0, any encoding, format 4)'); + // Format 12 CMAP does characters above Unicode BMP i.e. some HKCS characters U+20000 and above + if ($format == 12) { + $this->maxUniChar = 0; + $this->seek($unicode_cmap_offset + 4); + $length = $this->read_ulong(); + $limit = $unicode_cmap_offset + $length; + $this->skip(4); + + $nGroups = $this->read_ulong(); + + $glyphToChar = array(); + $charToGlyph = array(); + for($i=0; $i<$nGroups ; $i++) { + $startCharCode = $this->read_ulong(); + $endCharCode = $this->read_ulong(); + $startGlyphCode = $this->read_ulong(); + $offset = 0; + for ($unichar=$startCharCode;$unichar<=$endCharCode;$unichar++) { + $glyph = $startGlyphCode + $offset ; + $offset++; + $charToGlyph[$unichar] = $glyph; + if ($unichar < 196608) { $this->maxUniChar = max($unichar,$this->maxUniChar); } + $glyphToChar[$glyph][] = $unichar; + } + } + } + else + die('Font does not have cmap for Unicode (format 12)'); + + + /////////////////////////////////// + // hmtx - Horizontal metrics table + /////////////////////////////////// + $scale = 1; // not used here + $this->getHMTX($numberOfHMetrics, $numGlyphs, $glyphToChar, $scale); + + /////////////////////////////////// + // loca - Index to location + /////////////////////////////////// + $this->getLOCA($indexToLocFormat, $numGlyphs); + + /////////////////////////////////////////////////////////////////// + + $glyphMap = array(0=>0); + $glyphSet = array(0=>0); + $codeToGlyph = array(); + // Set a substitute if ASCII characters do not have glyphs + if (isset($charToGlyph[0x3F])) { $subs = $charToGlyph[0x3F]; } // Question mark + else { $subs = $charToGlyph[32]; } + foreach($subset AS $code) { + if (isset($charToGlyph[$code])) + $originalGlyphIdx = $charToGlyph[$code]; + else if ($code<128) { + $originalGlyphIdx = $subs; + } + else { $originalGlyphIdx = 0; } + if (!isset($glyphSet[$originalGlyphIdx])) { + $glyphSet[$originalGlyphIdx] = count($glyphMap); + $glyphMap[] = $originalGlyphIdx; + } + $codeToGlyph[$code] = $glyphSet[$originalGlyphIdx]; + } + + list($start,$dummy) = $this->get_table_pos('glyf'); + + $n = 0; + while ($n < count($glyphMap)) { + $originalGlyphIdx = $glyphMap[$n]; + $glyphPos = $this->glyphPos[$originalGlyphIdx]; + $glyphLen = $this->glyphPos[$originalGlyphIdx + 1] - $glyphPos; + $n += 1; + if (!$glyphLen) continue; + $this->seek($start + $glyphPos); + $numberOfContours = $this->read_short(); + if ($numberOfContours < 0) { + $this->skip(8); + $flags = GF_MORE; + while ($flags & GF_MORE) { + $flags = $this->read_ushort(); + $glyphIdx = $this->read_ushort(); + if (!isset($glyphSet[$glyphIdx])) { + $glyphSet[$glyphIdx] = count($glyphMap); + $glyphMap[] = $glyphIdx; + } + if ($flags & GF_WORDS) + $this->skip(4); + else + $this->skip(2); + if ($flags & GF_SCALE) + $this->skip(2); + else if ($flags & GF_XYSCALE) + $this->skip(4); + else if ($flags & GF_TWOBYTWO) + $this->skip(8); + } + } + } + + $numGlyphs = $n = count($glyphMap); + $numberOfHMetrics = $n; + + /////////////////////////////////// + // name + /////////////////////////////////// + // Needs to have a name entry in 3,0 (e.g. symbol) - original font will be 3,1 (i.e. Unicode) + $name = $this->get_table('name'); + $name_offset = $this->seek_table("name"); + $format = $this->read_ushort(); + $numRecords = $this->read_ushort(); + $string_data_offset = $name_offset + $this->read_ushort(); + for ($i=0;$i<$numRecords; $i++) { + $platformId = $this->read_ushort(); + $encodingId = $this->read_ushort(); + if ($platformId == 3 && $encodingId == 1) { + $pos = 6 + ($i * 12) + 2; + $name = $this->_set_ushort($name, $pos, 0x00); // Change encoding to 3,0 rather than 3,1 + } + $this->skip(8); + } + $this->add('name', $name); + + /////////////////////////////////// + // OS/2 + /////////////////////////////////// + if (isset($this->tables['OS/2'])) { + $os2 = $this->get_table('OS/2'); + $os2 = $this->_set_ushort($os2, 42, 0x00); // ulCharRange (Unicode ranges) + $os2 = $this->_set_ushort($os2, 44, 0x00); // ulCharRange (Unicode ranges) + $os2 = $this->_set_ushort($os2, 46, 0x00); // ulCharRange (Unicode ranges) + $os2 = $this->_set_ushort($os2, 48, 0x00); // ulCharRange (Unicode ranges) + + $os2 = $this->_set_ushort($os2, 50, 0x00); // ulCharRange (Unicode ranges) + $os2 = $this->_set_ushort($os2, 52, 0x00); // ulCharRange (Unicode ranges) + $os2 = $this->_set_ushort($os2, 54, 0x00); // ulCharRange (Unicode ranges) + $os2 = $this->_set_ushort($os2, 56, 0x00); // ulCharRange (Unicode ranges) + // Set Symbol character only in ulCodePageRange + $os2 = $this->_set_ushort($os2, 78, 0x8000); // ulCodePageRange = Bit #31 Symbol **** 78 = Bit 16-31 + $os2 = $this->_set_ushort($os2, 80, 0x0000); // ulCodePageRange = Bit #31 Symbol **** 80 = Bit 0-15 + $os2 = $this->_set_ushort($os2, 82, 0x0000); // ulCodePageRange = Bit #32- Symbol **** 82 = Bits 48-63 + $os2 = $this->_set_ushort($os2, 84, 0x0000); // ulCodePageRange = Bit #32- Symbol **** 84 = Bits 32-47 + + $os2 = $this->_set_ushort($os2, 64, 0x01); // FirstCharIndex + $os2 = $this->_set_ushort($os2, 66, count($subset)); // LastCharIndex + // Set PANOSE first bit to 5 for Symbol + $os2 = $this->splice($os2, 32, chr(5).chr(0).chr(1).chr(0).chr(1).chr(0).chr(0).chr(0).chr(0).chr(0)); + $this->add('OS/2', $os2 ); + } + + + /////////////////////////////////// + //tables copied from the original + /////////////////////////////////// + $tags = array ('cvt ', 'fpgm', 'prep', 'gasp'); + foreach($tags AS $tag) { // 1.02 + if (isset($this->tables[$tag])) { $this->add($tag, $this->get_table($tag)); } + } + + /////////////////////////////////// + // post - PostScript + /////////////////////////////////// + if (isset($this->tables['post'])) { + $opost = $this->get_table('post'); + $post = "\x00\x03\x00\x00" . substr($opost,4,12) . "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; + } + $this->add('post', $post); + + /////////////////////////////////// + // hhea - Horizontal Header + /////////////////////////////////// + $hhea = $this->get_table('hhea'); + $hhea = $this->_set_ushort($hhea, 34, $numberOfHMetrics); + $this->add('hhea', $hhea); + + /////////////////////////////////// + // maxp - Maximum Profile + /////////////////////////////////// + $maxp = $this->get_table('maxp'); + $maxp = $this->_set_ushort($maxp, 4, $numGlyphs); + $this->add('maxp', $maxp); + + + /////////////////////////////////// + // CMap table Formats [1,0,]6 and [3,0,]4 + /////////////////////////////////// + /////////////////////////////////// + // Sort CID2GID map into segments of contiguous codes + /////////////////////////////////// + $rangeid = 0; + $range = array(); + $prevcid = -2; + $prevglidx = -1; + // for each character + foreach ($subset as $cid => $code) { + $glidx = $codeToGlyph[$code]; + if ($cid == ($prevcid + 1) && $glidx == ($prevglidx + 1)) { + $range[$rangeid][] = $glidx; + } else { + // new range + $rangeid = $cid; + $range[$rangeid] = array(); + $range[$rangeid][] = $glidx; + } + $prevcid = $cid; + $prevglidx = $glidx; + } + // cmap - Character to glyph mapping + $segCount = count($range) + 1; // + 1 Last segment has missing character 0xFFFF + $searchRange = 1; + $entrySelector = 0; + while ($searchRange * 2 <= $segCount ) { + $searchRange = $searchRange * 2; + $entrySelector = $entrySelector + 1; + } + $searchRange = $searchRange * 2; + $rangeShift = $segCount * 2 - $searchRange; + $length = 16 + (8*$segCount ) + ($numGlyphs+1); + $cmap = array( + 4, $length, 0, // Format 4 Mapping subtable: format, length, language + $segCount*2, + $searchRange, + $entrySelector, + $rangeShift); + + // endCode(s) + foreach($range AS $start=>$subrange) { + $endCode = $start + (count($subrange)-1); + $cmap[] = $endCode; // endCode(s) + } + $cmap[] = 0xFFFF; // endCode of last Segment + $cmap[] = 0; // reservedPad + + // startCode(s) + foreach($range AS $start=>$subrange) { + $cmap[] = $start; // startCode(s) + } + $cmap[] = 0xFFFF; // startCode of last Segment + // idDelta(s) + foreach($range AS $start=>$subrange) { + $idDelta = -($start-$subrange[0]); + $n += count($subrange); + $cmap[] = $idDelta; // idDelta(s) + } + $cmap[] = 1; // idDelta of last Segment + // idRangeOffset(s) + foreach($range AS $subrange) { + $cmap[] = 0; // idRangeOffset[segCount] Offset in bytes to glyph indexArray, or 0 + + } + $cmap[] = 0; // idRangeOffset of last Segment + foreach($range AS $subrange) { + foreach($subrange AS $glidx) { + $cmap[] = $glidx; + } + } + $cmap[] = 0; // Mapping for last character + $cmapstr4 = ''; + foreach($cmap AS $cm) { $cmapstr4 .= pack("n",$cm); } + + /////////////////////////////////// + // cmap - Character to glyph mapping + /////////////////////////////////// + $entryCount = count($subset); + $length = 10 + $entryCount * 2; + + $off = 20 + $length; + $hoff = $off >> 16; + $loff = $off & 0xFFFF; + + $cmap = array(0, 2, // Index : version, number of subtables + 1, 0, // Subtable : platform, encoding + 0, 20, // offset (hi,lo) + 3, 0, // Subtable : platform, encoding + $hoff, $loff, // offset (hi,lo) + 6, $length, // Format 6 Mapping table: format, length + 0, 1, // language, First char code + $entryCount + ); + $cmapstr = ''; + foreach($subset AS $code) { $cmap[] = $codeToGlyph[$code]; } + foreach($cmap AS $cm) { $cmapstr .= pack("n",$cm); } + $cmapstr .= $cmapstr4; + $this->add('cmap', $cmapstr); + + /////////////////////////////////// + // hmtx - Horizontal Metrics + /////////////////////////////////// + $hmtxstr = ''; + for($n=0;$n<$numGlyphs;$n++) { + $originalGlyphIdx = $glyphMap[$n]; + $hm = $this->getHMetric($orignHmetrics, $originalGlyphIdx); + $hmtxstr .= $hm; + } + $this->add('hmtx', $hmtxstr); + + /////////////////////////////////// + // glyf - Glyph data + /////////////////////////////////// + list($glyfOffset,$glyfLength) = $this->get_table_pos('glyf'); + if ($glyfLength < $this->maxStrLenRead) { + $glyphData = $this->get_table('glyf'); + } + + $offsets = array(); + $glyf = ''; + $pos = 0; + for ($n=0;$n<$numGlyphs;$n++) { + $offsets[] = $pos; + $originalGlyphIdx = $glyphMap[$n]; + $glyphPos = $this->glyphPos[$originalGlyphIdx]; + $glyphLen = $this->glyphPos[$originalGlyphIdx + 1] - $glyphPos; + if ($glyfLength < $this->maxStrLenRead) { + $data = substr($glyphData,$glyphPos,$glyphLen); + } + else { + if ($glyphLen > 0) $data = $this->get_chunk($glyfOffset+$glyphPos,$glyphLen); + else $data = ''; + } + if ($glyphLen > 0) $up = unpack("n", substr($data,0,2)); + if ($glyphLen > 2 && ($up[1] & (1 << 15)) ) { + $pos_in_glyph = 10; + $flags = GF_MORE; + while ($flags & GF_MORE) { + $up = unpack("n", substr($data,$pos_in_glyph,2)); + $flags = $up[1]; + $up = unpack("n", substr($data,$pos_in_glyph+2,2)); + $glyphIdx = $up[1]; + $data = $this->_set_ushort($data, $pos_in_glyph + 2, $glyphSet[$glyphIdx]); + $pos_in_glyph += 4; + if ($flags & GF_WORDS) { $pos_in_glyph += 4; } + else { $pos_in_glyph += 2; } + if ($flags & GF_SCALE) { $pos_in_glyph += 2; } + else if ($flags & GF_XYSCALE) { $pos_in_glyph += 4; } + else if ($flags & GF_TWOBYTWO) { $pos_in_glyph += 8; } + } + } + $glyf .= $data; + $pos += $glyphLen; + if ($pos % 4 != 0) { + $padding = 4 - ($pos % 4); + $glyf .= str_repeat("\0",$padding); + $pos += $padding; + } + } + $offsets[] = $pos; + $this->add('glyf', $glyf); + + /////////////////////////////////// + // loca - Index to location + /////////////////////////////////// + $locastr = ''; + if ((($pos + 1) >> 1) > 0xFFFF) { + $indexToLocFormat = 1; // long format + foreach($offsets AS $offset) { $locastr .= pack("N",$offset); } + } + else { + $indexToLocFormat = 0; // short format + foreach($offsets AS $offset) { $locastr .= pack("n",($offset/2)); } + } + $this->add('loca', $locastr); + + /////////////////////////////////// + // head - Font header + /////////////////////////////////// + $head = $this->get_table('head'); + $head = $this->_set_ushort($head, 50, $indexToLocFormat); + $this->add('head', $head); + + fclose($this->fh); + + // Put the TTF file together + $stm = ''; + $this->endTTFile($stm); + //file_put_contents('testfont.ttf', $stm); exit; + return $stm ; + } + + ////////////////////////////////////////////////////////////////////////////////// + // Recursively get composite glyph data + function getGlyphData($originalGlyphIdx, &$maxdepth, &$depth, &$points, &$contours) { + $depth++; + $maxdepth = max($maxdepth, $depth); + if (count($this->glyphdata[$originalGlyphIdx]['compGlyphs'])) { + foreach($this->glyphdata[$originalGlyphIdx]['compGlyphs'] AS $glyphIdx) { + $this->getGlyphData($glyphIdx, $maxdepth, $depth, $points, $contours); + } + } + else if (($this->glyphdata[$originalGlyphIdx]['nContours'] > 0) && $depth > 0) { // simple + $contours += $this->glyphdata[$originalGlyphIdx]['nContours']; + $points += $this->glyphdata[$originalGlyphIdx]['nPoints']; + } + $depth--; + } + + + ////////////////////////////////////////////////////////////////////////////////// + // Recursively get composite glyphs + function getGlyphs($originalGlyphIdx, &$start, &$glyphSet, &$subsetglyphs) { + $glyphPos = $this->glyphPos[$originalGlyphIdx]; + $glyphLen = $this->glyphPos[$originalGlyphIdx + 1] - $glyphPos; + if (!$glyphLen) { + return; + } + $this->seek($start + $glyphPos); + $numberOfContours = $this->read_short(); + if ($numberOfContours < 0) { + $this->skip(8); + $flags = GF_MORE; + while ($flags & GF_MORE) { + $flags = $this->read_ushort(); + $glyphIdx = $this->read_ushort(); + if (!isset($glyphSet[$glyphIdx])) { + $glyphSet[$glyphIdx] = count($subsetglyphs); // old glyphID to new glyphID + $subsetglyphs[$glyphIdx] = true; + } + $savepos = ftell($this->fh); + $this->getGlyphs($glyphIdx, $start, $glyphSet, $subsetglyphs); + $this->seek($savepos); + if ($flags & GF_WORDS) + $this->skip(4); + else + $this->skip(2); + if ($flags & GF_SCALE) + $this->skip(2); + else if ($flags & GF_XYSCALE) + $this->skip(4); + else if ($flags & GF_TWOBYTWO) + $this->skip(8); + } + } + } + + ////////////////////////////////////////////////////////////////////////////////// + + function getHMTX($numberOfHMetrics, $numGlyphs, &$glyphToChar, $scale) { + $start = $this->seek_table("hmtx"); + $aw = 0; + $this->charWidths = str_pad('', 256*256*2, "\x00"); + if ($this->maxUniChar > 65536) { $this->charWidths .= str_pad('', 256*256*2, "\x00"); } // Plane 1 SMP + if ($this->maxUniChar > 131072) { $this->charWidths .= str_pad('', 256*256*2, "\x00"); } // Plane 2 SMP + $nCharWidths = 0; + if (($numberOfHMetrics*4) < $this->maxStrLenRead) { + $data = $this->get_chunk($start,($numberOfHMetrics*4)); + $arr = unpack("n*", $data); + } + else { $this->seek($start); } + for( $glyph=0; $glyph<$numberOfHMetrics; $glyph++) { + if (($numberOfHMetrics*4) < $this->maxStrLenRead) { + $aw = $arr[($glyph*2)+1]; + } + else { + $aw = $this->read_ushort(); + $lsb = $this->read_ushort(); + } + if (isset($glyphToChar[$glyph]) || $glyph == 0) { + + if ($aw >= (1 << 15) ) { $aw = 0; } // 1.03 Some (arabic) fonts have -ve values for width + // although should be unsigned value - comes out as e.g. 65108 (intended -50) + if ($glyph == 0) { + $this->defaultWidth = $scale*$aw; + continue; + } + foreach($glyphToChar[$glyph] AS $char) { + //$this->charWidths[$char] = intval(round($scale*$aw)); + if ($char != 0 && $char != 65535) { + $w = intval(round($scale*$aw)); + if ($w == 0) { $w = 65535; } + if ($char < 196608) { + $this->charWidths[$char*2] = chr($w >> 8); + $this->charWidths[$char*2 + 1] = chr($w & 0xFF); + $nCharWidths++; + } + } + } + } + } + $data = $this->get_chunk(($start+$numberOfHMetrics*4),($numGlyphs*2)); + $arr = unpack("n*", $data); + $diff = $numGlyphs-$numberOfHMetrics; + $w = intval(round($scale*$aw)); + if ($w == 0) { $w = 65535; } + for( $pos=0; $pos<$diff; $pos++) { + $glyph = $pos + $numberOfHMetrics; + if (isset($glyphToChar[$glyph])) { + foreach($glyphToChar[$glyph] AS $char) { + if ($char != 0 && $char != 65535) { + if ($char < 196608) { + $this->charWidths[$char*2] = chr($w >> 8); + $this->charWidths[$char*2 + 1] = chr($w & 0xFF); + $nCharWidths++; + } + } + } + } + } + // NB 65535 is a set width of 0 + // First bytes define number of chars in font + $this->charWidths[0] = chr($nCharWidths >> 8); + $this->charWidths[1] = chr($nCharWidths & 0xFF); + } + + function getHMetric($numberOfHMetrics, $gid) { + $start = $this->seek_table("hmtx"); + if ($gid < $numberOfHMetrics) { + $this->seek($start+($gid*4)); + $hm = fread($this->fh,4); + } + else { + $this->seek($start+(($numberOfHMetrics-1)*4)); + $hm = fread($this->fh,2); + $this->seek($start+($numberOfHMetrics*2)+($gid*2)); + $hm .= fread($this->fh,2); + } + return $hm; + } + + function getLOCA($indexToLocFormat, $numGlyphs) { + $start = $this->seek_table('loca'); + $this->glyphPos = array(); + if ($indexToLocFormat == 0) { + $data = $this->get_chunk($start,($numGlyphs*2)+2); + $arr = unpack("n*", $data); + for ($n=0; $n<=$numGlyphs; $n++) { + $this->glyphPos[] = ($arr[$n+1] * 2); + } + } + else if ($indexToLocFormat == 1) { + $data = $this->get_chunk($start,($numGlyphs*4)+4); + $arr = unpack("N*", $data); + for ($n=0; $n<=$numGlyphs; $n++) { + $this->glyphPos[] = ($arr[$n+1]); + } + } + else + die('Unknown location table format '.$indexToLocFormat); + } + + + // CMAP Format 4 + function getCMAP4($unicode_cmap_offset, &$glyphToChar, &$charToGlyph ) { + $this->maxUniChar = 0; + $this->seek($unicode_cmap_offset + 2); + $length = $this->read_ushort(); + $limit = $unicode_cmap_offset + $length; + $this->skip(2); + + $segCount = $this->read_ushort() / 2; + $this->skip(6); + $endCount = array(); + for($i=0; $i<$segCount; $i++) { $endCount[] = $this->read_ushort(); } + $this->skip(2); + $startCount = array(); + for($i=0; $i<$segCount; $i++) { $startCount[] = $this->read_ushort(); } + $idDelta = array(); + for($i=0; $i<$segCount; $i++) { $idDelta[] = $this->read_short(); } // ???? was unsigned short + $idRangeOffset_start = $this->_pos; + $idRangeOffset = array(); + for($i=0; $i<$segCount; $i++) { $idRangeOffset[] = $this->read_ushort(); } + + for ($n=0;$n<$segCount;$n++) { + $endpoint = ($endCount[$n] + 1); + for ($unichar=$startCount[$n];$unichar<$endpoint;$unichar++) { + if ($idRangeOffset[$n] == 0) + $glyph = ($unichar + $idDelta[$n]) & 0xFFFF; + else { + $offset = ($unichar - $startCount[$n]) * 2 + $idRangeOffset[$n]; + $offset = $idRangeOffset_start + 2 * $n + $offset; + if ($offset >= $limit) + $glyph = 0; + else { + $glyph = $this->get_ushort($offset); + if ($glyph != 0) + $glyph = ($glyph + $idDelta[$n]) & 0xFFFF; + } + } + $charToGlyph[$unichar] = $glyph; + if ($unichar < 196608) { $this->maxUniChar = max($unichar,$this->maxUniChar); } + $glyphToChar[$glyph][] = $unichar; + } + } + + // mPDF 5.4.05 + if ($this->unAGlyphs) { + if (isset($this->tables['post'])) { + $this->seek_table("post"); + $formata = $this->read_ushort(); + $formatb = $this->read_ushort(); + // Only works on Format 2.0 + if ($formata != 2 || $formatb != 0) { die("Cannot set unAGlyphs for this font (".$file."). POST table must be in Format 2."); } + $this->skip(28); + $nGlyfs = $this->read_ushort(); + $glyphNameIndex = array(); + for ($i=0; $i<$nGlyfs; $i++) { + $glyphNameIndex[($this->read_ushort())] = $i; + } + + $opost = $this->get_table('post'); + $ptr = 34+($nGlyfs*2); + for ($i=0; $i<$nGlyfs; $i++) { + $len = ord(substr($opost,$ptr,1)); + $ptr++; + $name = substr($opost,$ptr,$len); + $gid = $glyphNameIndex[$i+258]; + // Select uni0600.xxx(x) - uni06FF.xxx(x) + if (preg_match('/^uni(06[0-9a-f]{2})\.(fina|medi|init|fin|med|ini)$/i',$name,$m)) { + if (!isset($glyphToChar[$gid]) || (isset($glyphToChar[$gid]) && is_array($glyphToChar[$gid]) && count($glyphToChar[$gid])==1 && $glyphToChar[$gid][0]>57343 && $glyphToChar[$gid][0]<63489)) { // if set in PUA private use area E000-F8FF, or NOT Unicode mapped + $uni = hexdec($m[1]); + $form = strtoupper(substr($m[2],0,1)); + // Assign new PUA Unicode between F500 - F7FF + $bit = $uni & 0xFF; + if ($form == 'I') { $bit += 0xF600; } + else if ($form == 'M') { $bit += 0xF700; } + else { $bit += 0xF500; } + // ADD TO CMAP + $glyphToChar[$gid][] = $bit; + $charToGlyph[$bit] = $gid; + } + } + // LAM with ALEF ligatures (Mandatory ligatures) + else if (preg_match('/^uni064406(22|23|25|27)(\.fina|\.fin){0,1}$/i',$name,$m)) { + if ($m[1]=='22') { + if ($m[2]) { $uni = hexdec('FEF6'); } else { $uni = hexdec('FEF5'); } + } + else if ($m[1]=='23') { + if ($m[2]) { $uni = hexdec('FEF8'); } else { $uni = hexdec('FEF7'); } + } + else if ($m[1]=='25') { + if ($m[2]) { $uni = hexdec('FEFA'); } else { $uni = hexdec('FEF9'); } + } + else if ($m[1]=='27') { + if ($m[2]) { $uni = hexdec('FEFC'); } else { $uni = hexdec('FEFB'); } + } + if (!isset($glyphToChar[$gid]) || (isset($glyphToChar[$gid]) && is_array($glyphToChar[$gid]) && count($glyphToChar[$gid])==1 && $glyphToChar[$gid][0]>57343 && $glyphToChar[$gid][0]<63489)) { // if set in PUA private use area E000-F8FF, or NOT Unicode mapped + // ADD TO CMAP + $glyphToChar[$gid][] = $uni; + $charToGlyph[$uni] = $gid; + } + } + $ptr += $len; + } + } + } + + } + + + // Put the TTF file together + function endTTFile(&$stm) { + $stm = ''; + $numTables = count($this->otables); + $searchRange = 1; + $entrySelector = 0; + while ($searchRange * 2 <= $numTables) { + $searchRange = $searchRange * 2; + $entrySelector = $entrySelector + 1; + } + $searchRange = $searchRange * 16; + $rangeShift = $numTables * 16 - $searchRange; + + // Header + if (_TTF_MAC_HEADER) { + $stm .= (pack("Nnnnn", 0x74727565, $numTables, $searchRange, $entrySelector, $rangeShift)); // Mac + } + else { + $stm .= (pack("Nnnnn", 0x00010000 , $numTables, $searchRange, $entrySelector, $rangeShift)); // Windows + } + + // Table directory + $tables = $this->otables; + ksort ($tables); + $offset = 12 + $numTables * 16; + foreach ($tables AS $tag=>$data) { + if ($tag == 'head') { $head_start = $offset; } + $stm .= $tag; + $checksum = $this->calcChecksum($data); + $stm .= pack("nn", $checksum[0],$checksum[1]); + $stm .= pack("NN", $offset, strlen($data)); + $paddedLength = (strlen($data)+3)&~3; + $offset = $offset + $paddedLength; + } + + // Table data + foreach ($tables AS $tag=>$data) { + $data .= "\0\0\0"; + $stm .= substr($data,0,(strlen($data)&~3)); + } + + $checksum = $this->calcChecksum($stm); + $checksum = $this->sub32(array(0xB1B0,0xAFBA), $checksum); + $chk = pack("nn", $checksum[0],$checksum[1]); + $stm = $this->splice($stm,($head_start + 8),$chk); + return $stm ; + } + + + function repackageTTF($file, $TTCfontID=0, $debug=false, $unAGlyphs=false) { // mPDF 5.4.05 + $this->unAGlyphs = $unAGlyphs; // mPDF 5.4.05 + $this->filename = $file; + $this->fh = fopen($file ,'rb') or die('Can\'t open file ' . $file); + $this->_pos = 0; + $this->charWidths = ''; + $this->glyphPos = array(); + $this->charToGlyph = array(); + $this->tables = array(); + $this->otables = array(); + $this->ascent = 0; + $this->descent = 0; + $this->numTTCFonts = 0; + $this->TTCFonts = array(); + $this->skip(4); + $this->maxUni = 0; + if ($TTCfontID > 0) { + $this->version = $version = $this->read_ulong(); // TTC Header version now + if (!in_array($version, array(0x00010000,0x00020000))) + die("ERROR - Error parsing TrueType Collection: version=".$version." - " . $file); + $this->numTTCFonts = $this->read_ulong(); + for ($i=1; $i<=$this->numTTCFonts; $i++) { + $this->TTCFonts[$i]['offset'] = $this->read_ulong(); + } + $this->seek($this->TTCFonts[$TTCfontID]['offset']); + $this->version = $version = $this->read_ulong(); // TTFont version again now + } + $this->readTableDirectory($debug); + $tags = array ('OS/2', 'cmap', 'glyf', 'head', 'hhea', 'hmtx', 'loca', 'maxp', 'name', 'post', 'cvt ', 'fpgm', 'gasp', 'prep'); +/* +Tables which require glyphIndex +hdmx +kern +LTSH + +Tables which do NOT require glyphIndex +VDMX + +GDEF +GPOS +GSUB +JSTF + +DSIG +PCLT - not recommended +*/ + + foreach($tags AS $tag) { + if (isset($this->tables[$tag])) { $this->add($tag, $this->get_table($tag)); } + } + fclose($this->fh); + $stm = ''; + $this->endTTFile($stm); + return $stm ; + } + + +} + + +?> \ No newline at end of file diff --git a/include/mpdf/classes/wmf.php b/include/mpdf/classes/wmf.php new file mode 100755 index 0000000000000000000000000000000000000000..e5f5e3c1b985f047e4b0eed0bacdfd7c94735af3 --- /dev/null +++ b/include/mpdf/classes/wmf.php @@ -0,0 +1,236 @@ +<?php + +class wmf { + +var $mpdf = null; +var $gdiObjectArray; + +function wmf(&$mpdf) { + $this->mpdf = $mpdf; +} + + +function _getWMFimage($data) { + $k = _MPDFK; + + $this->gdiObjectArray = array(); + $a=unpack('stest',"\1\0"); + if ($a['test']!=1) + return array(0, 'Error parsing WMF image - Big-endian architecture not supported'); + // check for Aldus placeable metafile header + $key = unpack('Lmagic', substr($data, 0, 4)); + $p = 18; // WMF header + if ($key['magic'] == (int)0x9AC6CDD7) { $p +=22; } // Aldus header + // define some state variables + $wo=null; // window origin + $we=null; // window extent + $polyFillMode = 0; + $nullPen = false; + $nullBrush = false; + $endRecord = false; + $wmfdata = ''; + while ($p < strlen($data) && !$endRecord) { + $recordInfo = unpack('Lsize/Sfunc', substr($data, $p, 6)); $p += 6; + // size of record given in WORDs (= 2 bytes) + $size = $recordInfo['size']; + // func is number of GDI function + $func = $recordInfo['func']; + if ($size > 3) { + $parms = substr($data, $p, 2*($size-3)); $p += 2*($size-3); + } + switch ($func) { + case 0x020b: // SetWindowOrg + // do not allow window origin to be changed + // after drawing has begun + if (!$wmfdata) + $wo = array_reverse(unpack('s2', $parms)); + break; + case 0x020c: // SetWindowExt + // do not allow window extent to be changed + // after drawing has begun + if (!$wmfdata) + $we = array_reverse(unpack('s2', $parms)); + break; + case 0x02fc: // CreateBrushIndirect + $brush = unpack('sstyle/Cr/Cg/Cb/Ca/Shatch', $parms); + $brush['type'] = 'B'; + $this->_AddGDIObject($brush); + break; + case 0x02fa: // CreatePenIndirect + $pen = unpack('Sstyle/swidth/sdummy/Cr/Cg/Cb/Ca', $parms); + // convert width from twips to user unit + $pen['width'] /= (20 * $k); + $pen['type'] = 'P'; + $this->_AddGDIObject($pen); + break; + + // MUST create other GDI objects even if we don't handle them + case 0x06fe: // CreateBitmap + case 0x02fd: // CreateBitmapIndirect + case 0x00f8: // CreateBrush + case 0x02fb: // CreateFontIndirect + case 0x00f7: // CreatePalette + case 0x01f9: // CreatePatternBrush + case 0x06ff: // CreateRegion + case 0x0142: // DibCreatePatternBrush + $dummyObject = array('type'=>'D'); + $this->_AddGDIObject($dummyObject); + break; + case 0x0106: // SetPolyFillMode + $polyFillMode = unpack('smode', $parms); + $polyFillMode = $polyFillMode['mode']; + break; + case 0x01f0: // DeleteObject + $idx = unpack('Sidx', $parms); + $idx = $idx['idx']; + $this->_DeleteGDIObject($idx); + break; + case 0x012d: // SelectObject + $idx = unpack('Sidx', $parms); + $idx = $idx['idx']; + $obj = $this->_GetGDIObject($idx); + switch ($obj['type']) { + case 'B': + $nullBrush = false; + if ($obj['style'] == 1) { $nullBrush = true; } + else { + $wmfdata .= $this->mpdf->SetFColor($this->mpdf->ConvertColor('rgb('.$obj['r'].','.$obj['g'].','.$obj['b'].')'), true)."\n"; + } + break; + case 'P': + $nullPen = false; + $dashArray = array(); + // dash parameters are custom + switch ($obj['style']) { + case 0: // PS_SOLID + break; + case 1: // PS_DASH + $dashArray = array(3,1); + break; + case 2: // PS_DOT + $dashArray = array(0.5,0.5); + break; + case 3: // PS_DASHDOT + $dashArray = array(2,1,0.5,1); + break; + case 4: // PS_DASHDOTDOT + $dashArray = array(2,1,0.5,1,0.5,1); + break; + case 5: // PS_NULL + $nullPen = true; + break; + } + if (!$nullPen) { + $wmfdata .= $this->mpdf->SetDColor($this->mpdf->ConvertColor('rgb('.$obj['r'].','.$obj['g'].','.$obj['b'].')'), true)."\n"; + $wmfdata .= sprintf("%.3F w\n",$obj['width']*$k); + } + if (!empty($dashArray)) { + $s = '['; + for ($i=0; $i<count($dashArray);$i++) { + $s .= $dashArray[$i] * $k; + if ($i != count($dashArray)-1) { $s .= ' '; } + } + $s .= '] 0 d'; + $wmfdata .= $s."\n"; + } + break; + } + break; + case 0x0325: // Polyline + case 0x0324: // Polygon + $coords = unpack('s'.($size-3), $parms); + $numpoints = $coords[1]; + for ($i = $numpoints; $i > 0; $i--) { + $px = $coords[2*$i]; + $py = $coords[2*$i+1]; + + if ($i < $numpoints) { $wmfdata .= $this->_LineTo($px, $py); } + else { $wmfdata .= $this->_MoveTo($px, $py); } + } + if ($func == 0x0325) { $op = 's'; } + else if ($func == 0x0324) { + if ($nullPen) { + if ($nullBrush) { $op = 'n'; } // no op + else { $op = 'f'; } // fill + } + else { + if ($nullBrush) { $op = 's'; } // stroke + else { $op = 'b'; } // stroke and fill + } + if ($polyFillMode==1 && ($op=='b' || $op=='f')) { $op .= '*'; } // use even-odd fill rule + } + $wmfdata .= $op."\n"; + break; + case 0x0538: // PolyPolygon + $coords = unpack('s'.($size-3), $parms); + $numpolygons = $coords[1]; + $adjustment = $numpolygons; + for ($j = 1; $j <= $numpolygons; $j++) { + $numpoints = $coords[$j + 1]; + for ($i = $numpoints; $i > 0; $i--) { + $px = $coords[2*$i + $adjustment]; + $py = $coords[2*$i+1 + $adjustment]; + if ($i == $numpoints) { $wmfdata .= $this->_MoveTo($px, $py); } + else { $wmfdata .= $this->_LineTo($px, $py); } + } + $adjustment += $numpoints * 2; + } + + if ($nullPen) { + if ($nullBrush) { $op = 'n'; } // no op + else { $op = 'f'; } // fill + } + else { + if ($nullBrush) { $op = 's'; } // stroke + else { $op = 'b'; } // stroke and fill + } + if ($polyFillMode==1 && ($op=='b' || $op=='f')) { $op .= '*'; } // use even-odd fill rule + $wmfdata .= $op."\n"; + break; + case 0x0000: + $endRecord = true; + break; + } + } + + + return array(1,$wmfdata,$wo,$we); +} + + +function _MoveTo($x, $y) { + return "$x $y m\n"; +} + +// a line must have been started using _MoveTo() first +function _LineTo($x, $y) { + return "$x $y l\n"; +} + +function _AddGDIObject($obj) { + // find next available slot + $idx = 0; + if (!empty($this->gdiObjectArray)) { + $empty = false; + $i = 0; + while (!$empty) { + $empty = !isset($this->gdiObjectArray[$i]); + $i++; + } + $idx = $i-1; + } + $this->gdiObjectArray[$idx] = $obj; +} + +function _GetGDIObject($idx) { + return $this->gdiObjectArray[$idx]; +} + +function _DeleteGDIObject($idx) { + unset($this->gdiObjectArray[$idx]); +} + + +} + +?> \ No newline at end of file diff --git a/include/mpdf/compress.php b/include/mpdf/compress.php new file mode 100755 index 0000000000000000000000000000000000000000..785bf6a205f0b1ed29c5514ed041c3222e5a1363 --- /dev/null +++ b/include/mpdf/compress.php @@ -0,0 +1,172 @@ +<?php + +$excl = array( 'HTML-CSS', 'DIRECTW', 'TABLES', 'LISTS', 'IMAGES-CORE', +'IMAGES-BMP', 'IMAGES-WMF', 'TABLES-ADVANCED-BORDERS', 'HTMLHEADERS-FOOTERS', 'COLUMNS', 'TOC', 'INDEX', 'BOOKMARKS', 'BARCODES', 'FORMS', 'WATERMARK', 'CJK-FONTS', 'RTL', 'INDIC', 'ANNOTATIONS', 'BACKGROUNDS', 'CSS-FLOAT', 'CSS-IMAGE-FLOAT', 'CSS-POSITION', 'CSS-PAGE', 'BORDER-RADIUS', 'HYPHENATION', 'ENCRYPTION', 'IMPORTS', 'PROGRESS-BAR'); + + + // *DIRECTW* = Write, WriteText, WriteCell, Text, Shaded_box, AutosizeText + // IMAGES-CORE = [PNG, GIF, and JPG] NB background-images and watermark images + + // Excluding 'HTML-CSS' will also exclude: 'TABLES', 'LISTS', 'TABLES-ADVANCED-BORDERS', 'HTMLHEADERS-FOOTERS', 'FORMS', 'BACKGROUNDS', 'CSS-FLOAT', 'CSS-IMAGE-FLOAT', 'CSS-POSITION', 'CSS-PAGE', 'BORDER-RADIUS' + +// Text is marked in mpdf_source.php with e.g. : +/*-- TABLES-ADVANCED-BORDERS --*/ +/*-- END TABLES-ADVANCED-BORDERS --*/ + // *TABLES-ADVANCED-BORDERS* + + +if (!isset($_POST['generate']) || $_POST['generate']!='generate') { + + +if (!file_exists('mpdf_source.php')) { + die("ERROR - Could not find mpdf_source.php file in current directory. Please rename mpdf.php as mpdf_source.php"); +} + + + + +echo '<html> +<head> +<script language=javascript> +checked=false; +function checkedAll (frm1) { + var aa= document.getElementById("frm1"); + if (checked == false) + { + checked = true + } + else + { + checked = false + } + for (var i =0; i < aa.elements.length; i++) + { + aa.elements[i].checked = checked; + } + } +</script> +</head> +<body> +<p><span style="color:red; font-weight: bold;">WARNING</span>: This utility will OVERWRITE mpdf.php file in the current directory.</p> +<p>Select the functions you wish to INCLUDE in your mpdf.php program. When you click generate, a new mpdf.php file will be written to the current directory.</p> +<div><b>Notes</b> +<ul> +<li>HTML-CSS is required for many of the other functions to work including: Tables, Lists, Backgrounds, Forms, Border-radius and all other CSS</li> +<li>DIRECTW includes the functions to Write directly to the PDF file e.g. Write, WriteText, WriteCell, Text, Shaded_box, AutosizeText</li> +<li>You must include either HTML-CSS or DIRECTW</li> +<li>JPG, PNG and JPG images are supported with IMAGES-CORE</li> +<li>For WMF Images, you must include both IMAGES-CORE and IMAGES-WMF</li> +<li>IMAGES-CORE are required for BACKGROUNDS (IMAGES) or WATERMARKS to work</li> +</ul> +</div> +<input type="checkbox" name="checkall" onclick="checkedAll(frm1);"> <i>Select/Unselect All</i><br /><br /> + +<form id="frm1" action="compress.php" method="POST"> +'; +foreach($excl AS $k=>$ex) { + echo '<input type="checkbox" value="1" name="inc['.$ex.']"'; + if ($k==0 || ($k > 1 && $k < 5)) { + echo ' checked="checked"'; + } + echo ' /> '.$ex.'<br />'; +} + +echo '<br /> +<input type="submit" name="generate" value="generate" /> +</form> +</body> +</html>'; +exit; +} + +$inc = $_POST['inc']; +if (is_array($inc) && count($inc)>0 ) { + foreach($inc AS $i=>$v) { + $key = array_search($i, $excl); + unset($excl[$key]); + } +} + +if (!defined('PHP_VERSION_ID')) { + $version = explode('.', PHP_VERSION); + define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2])); +} +if (PHP_VERSION_ID < 50300) { $mqr = @get_magic_quotes_runtime(); } + else { $mqr=0; } +if ($mqr) { set_magic_quotes_runtime(0); } + +$l = file('mpdf_source.php'); +if (!count($l)) { die("ERROR - Could not find mpdf_source.php file in current directory"); } +$exclflags = array(); +$x = ''; + + // Excluding 'HTML-CSS' will also exclude: 'TABLES', 'LISTS', 'TABLES-ADVANCED-BORDERS', 'HTMLHEADERS-FOOTERS', 'FORMS', 'BACKGROUNDS', 'CSS-FLOAT', 'CSS-IMAGE-FLOAT', 'CSS-POSITION', 'CSS-PAGE', 'BORDER-RADIUS' +if ($excl[0]=='HTML-CSS') { + $excl[] = 'TABLES'; + $excl[] = 'LISTS'; + $excl[] = 'TABLES-ADVANCED-BORDERS'; + $excl[] = 'HTMLHEADERS-FOOTERS'; + $excl[] = 'FORMS'; + $excl[] = 'BACKGROUNDS'; + $excl[] = 'CSS-FLOAT'; + $excl[] = 'CSS-IMAGE-FLOAT'; + $excl[] = 'CSS-POSITION'; + $excl[] = 'CSS-PAGE'; + $excl[] = 'BORDER-RADIUS'; +} +$excl = array_unique($excl); + +foreach($l AS $k=>$ln) { + $exclude = false; + // *XXXXX* + preg_match_all("/\/\/ \*([A-Za-z\-]+)\*/", $ln, $m); + foreach($m[1] AS $mm) { + if (in_array($mm, $excl)) { + $exclude = true; + } + } + /*-- XXXXX --*/ + preg_match_all("/\/\*-- ([A-Za-z\-]+) --\*\//", $ln, $m); + foreach($m[1] AS $mm) { + if (in_array($mm, $excl)) { + $exclflags[$mm] = true; + } + $exclude = true; + } + $exclflags = array_unique($exclflags); + /*-- END XXXX --*/ + preg_match_all("/\/\*-- END ([A-Za-z\-]+) --\*\//", $ln, $m); + foreach($m[1] AS $mm) { + if (in_array($mm, $excl)) { + unset($exclflags[$mm]); + } + $exclude = true; + } + if (count($exclflags)==0 && !$exclude) { + $x .= $ln; + } +} +// mPDF 5.0 +if (function_exists('file_put_contents')) { + $check = file_put_contents('mpdf.php', $x); +} +else { + $f=fopen('mpdf.php', 'w'); + $check = fwrite($f, $x); + fclose($f); +} +if (!$check) { die("ERROR - Could not write to mpdf.php file. Are permissions correctly set?"); } +echo '<p><b>mPDF file generated successfully!</b></p>'; +echo '<div>mPDF file size '.number_format((strlen($x)/1024)).' kB</div>'; + +unset($l); +unset($x); + +include('mpdf.php'); +$mpdf = new mPDF(); + +echo '<div>Memory usage on loading mPDF class '.number_format((memory_get_usage(true)/(1024*1024)),2).' MB</div>'; + +exit; + +?> \ No newline at end of file diff --git a/include/mpdf/config.php b/include/mpdf/config.php new file mode 100755 index 0000000000000000000000000000000000000000..55c64b648720b27311818dee1b3944a3bf401a6e --- /dev/null +++ b/include/mpdf/config.php @@ -0,0 +1,576 @@ +<?php + +// mPDF 5.7 +// Specify whether to automatically generate bookmarks or ToC entries from h1 - h6 tags +$this->h2bookmarks = array(); +$this->h2toc = array(); +/* Define arrays with e.g. the tag=>ToC-level +Remember bookmark and ToC levels start at 0 +(does not work inside tables) +Only the default ToC will be used if > 1 ToCs are defined for the document +H1 - H6 must be uppercase +$this->h2toc = array('H1'=>0, 'H2'=>1, 'H3'=>2); +$this->h2bookmarks = array('H1'=>0, 'H2'=>1, 'H3'=>2); +*/ + +// mPDF 5.7 +// Text-align on decimal marks +// Allowed characters for alignment on decimal marks. Additional codes must start with D +// Non-ASCII characters should be in utf-8 encoding +// DM - middot U+00B7 +// DA - arabic decimal mark U+066B +$this->decimal_align = array('DP'=>'.', 'DC'=>',', 'DM'=>"\xc2\xb7", 'DA'=>"\xd9\xab", 'DD'=>'-'); + +// PAGING +$this->mirrorMargins = 0; +$this->restoreBlockPagebreaks = false; +$this->forcePortraitMargins = false; +$this->displayDefaultOrientation = false; +$this->printers_info = false; // Adds date and page info for printer when using @page and "marks:crop;" +$this->bleedMargin = 5; +$this->crossMarkMargin = 5; // Distance of cross mark from margin in mm +$this->cropMarkMargin = 8; // Distance of crop mark from margin in mm +$this->cropMarkLength = 18; // Default length in mm of crop line +$this->nonPrintMargin = 8; // Non-printable border at edge of paper sheet in mm +// mPDF 5.5 +// Avoid just the border/background-color of the end of a block being moved on to next page +$this->margBuffer = 2; // Allows an (empty) end of block to extend beyond the bottom margin by this amount (mm) + + +// PAGE NUMBERING +$this->pagenumPrefix; +$this->pagenumSuffix; +$this->nbpgPrefix; +$this->nbpgSuffix; + + +// FONTS, LANGUAGES & CHARACTER SETS +// Set maximum size of TTF font file to allow non-subsets - in kB +// Used to avoid e.g. Arial Unicode MS (perhaps used for substitutions) to ever be fully embedded +// NB Free serif is 1.5MB, most files are <= 600kB (most 200-400KB) +$this->maxTTFFilesize = 2000; + +// this value determines whether to subset or not +// 0 - 100 = percent characters +// i.e. if ==40, mPDF will embed whole font if >40% characters in that font +// or embed subset if <40% characters +// 0 will force whole file to be embedded (NO subsetting) +// 100 will force always to subset +// This value is overridden if you set new mPDF('s) +// and/or Can set at runtime +$this->percentSubset = 30; + +$this->useAdobeCJK = false; // Uses Adobe CJK fonts for CJK languages + // default TRUE; only set false if you have defined some available fonts that support CJK + // If true this will not stop use of other CJK fonts if specified by font-family: + // and vice versa i.e. only dictates behaviour when specified by lang="" incl. AutoFont() + +// When embedding full TTF font files, remakes the font file using only core tables +// May improve function with some PostScript printers (GhostScript/GSView) +// Does not work with TTC font collections +// Slightly smaller file; increased processing time +$this->repackageTTF = false; + +// Allows automatic character set conversion if "charset=xxx" detected in html header (WriteHTML() ) +$this->allow_charset_conversion = true; +$this->biDirectional=false; // automatically determine BIDI text in LTR page +$this->autoFontGroupSize = 2; // 1: individual words are spanned; 2: words+; 3: as big chunks as possible. +$this->useLang = true; // Default changed in mPDF 4.0 + +$this->useSubstitutions = false; // Substitute missing characters in UTF-8(multibyte) documents - from other fonts +$this->falseBoldWeight = 5; // Weight for bold text when using an artificial (outline) bold; value 0 (off) - 10 (rec. max) + +// CONFIGURATION +$this->allow_output_buffering = false; + +$this->enableImports = false; // Adding mPDFI functions + +$this->collapseBlockMargins = true; // Allows top and bottom margins to collapse between block elements +$this->progressBar = 0; // Shows progress-bars whilst generating file 0 off, 1 simple, 2 advanced +$this->progbar_heading = 'mPDF file progress'; +$this->progbar_altHTML = ''; // Should include <html> and <body> but NOT end tags + // Can incude <head> and link to stylesheet etc. + // e.g. '<html><body><p><img src="loading.gif" /> Creating PDF file. Please wait...</p>'; + +$this->dpi = 96; // To interpret "px" pixel values in HTML/CSS (see img_dpi below) + +// Automatically correct for tags where HTML specifies optional end tags e.g. P,LI,DD,TD +// If you are confident input html is valid XHTML, turning this off may make it more reliable(?) +$this->allow_html_optional_endtags = false; + +$this->ignore_invalid_utf8 = false; +$this->text_input_as_HTML = false; // Converts all entities in Text inputs to UTF-8 before encoding +$this->useGraphs = false; + + +// When writing a block element with position:fixed and overflow:auto, mPDF scales it down to fit in the space +// by repeatedly rewriting it and making adjustments. These values give the adjustments used, depending how far out +// the previous guess was. The lower the number, the quicker it will finish, but the less accurate the fit may be. +// FPR1 is for coarse adjustments, and FPR4 for fine adjustments when it is getting closer. +$this->incrementFPR1 = 10; // i.e. will alter by 1/[10]th of width and try again until within closer limits +$this->incrementFPR2 = 20; +$this->incrementFPR3 = 30; +$this->incrementFPR4 = 50; // i.e. will alter by 1/[50]th of width and try again when it nearly fits + + +// COLORSPACE +// 1 - allow GRAYSCALE only [convert CMYK/RGB->gray] +// 2 - allow RGB / SPOT COLOR / Grayscale [convert CMYK->RGB] +// 3 - allow CMYK / SPOT COLOR / Grayscale [convert RGB->CMYK] +$this->restrictColorSpace = 0; + +// PDFX/1-a Compliant files +$this->PDFX = false; // true=Forces compliance with PDFX-1a spec + // Cannot be used with $this->restrictColorSpace (i.e. no RGB) +$this->PDFXauto = false; // Overrides warnings making changes when possible to force PDFX1-a compliance + + +// PDFA1-b Compliant files +$this->PDFA = false; // true=Forces compliance with PDFA-1b spec + // Can use with $this->restrictColorSpace=3 (for a CMYK file) + // Any other settings, uses RGB profile +$this->PDFAauto = false; // Overrides warnings making changes when possible to force PDFA1-b compliance +$this->ICCProfile = ''; // Colour profile OutputIntent + // sRGB_IEC61966-2-1 (=default if blank and PDFA), or other added .icc profile + // Must be CMYK for PDFX, or appropriate type for PDFA(RGB or CMYK) + + + +// DEBUGGING & DEVELOPERS +$this->showStats = false; +$this->debug = false; +$this->debugfonts = false; // Checks and reports on errors when parsing TTF files - adds significantly to processing time +$this->showImageErrors = false; +$this->table_error_report = false; // Die and report error if table is too wide to contain whole words +$this->table_error_report_param = ''; // Parameter which can be passed to show in error report i.e. chapter number being processed// + + +// ANNOTATIONS +$this->title2annots = false; +$this->annotSize = 0.5; // default mm for Adobe annotations - nominal +$this->annotMargin; // default position for Annotations +$this->annotOpacity = 0.5; // default opacity for Annotations + +// BOOKMARKS +$this->anchor2Bookmark = 0; // makes <a name=""> into a bookmark as well as internal link target; 1 = just name; 2 = name (p.34) +// Set an optional array to specify appearance of Bookmarks (by level) +// Default values are Black and normal style +/* + Example: +$this->bookmarkStyles = array( + 0 => array('color'=> array(0,64,128), 'style'=>'B'), + 1 => array('color'=> array(128,0,0), 'style'=>''), + 2 => array('color'=> array(0,128,0), 'style'=>'I'), +); +*/ +$this->bookmarkStyles = array(); + + +// CSS & STYLES +$this->CSSselectMedia='print'; // screen, print, or any other CSS @media type (not "all") + + +// PAGE HEADERS & FOOTERS +$this->forcePortraitHeaders = false; +// Values used if simple FOOTER/HEADER given i.e. not array +$this->defaultheaderfontsize = 8; // pt +$this->defaultheaderfontstyle = 'BI'; // '', or 'B' or 'I' or 'BI' +$this->defaultheaderline = 1; // 1 or 0 - line under the header +$this->defaultfooterfontsize = 8; // pt +$this->defaultfooterfontstyle = 'BI'; // '', or 'B' or 'I' or 'BI' +$this->defaultfooterline = 1; // 1 or 0 - line over the footer +$this->header_line_spacing = 0.25; // spacing between bottom of header and line (if present) - function of fontsize +$this->footer_line_spacing = 0.25; // spacing between bottom of header and line (if present) - function of fontsize +// If 'pad' margin-top sets fixed distance in mm (padding) between bottom of header and top of text. +// If 'stretch' margin-top sets a minimum distance in mm between top of page and top of text, which expands if header is too large to fit. +$this->setAutoTopMargin = false; +$this->setAutoBottomMargin = false; +$this->autoMarginPadding = 2; // distance in mm used as padding if 'stretch' mode is used + + + +// TABLES +$this->simpleTables = false; // Forces all cells to have same border, background etc. Improves performance +$this->packTableData = false; // Reduce memory usage processing tables (but with increased processing time) +// Using disk to cache table data can reduce memory usage dramatically, but at a cost of increased +// executon time and disk access (read and write) +$this->cacheTables = false; + +$this->ignore_table_percents = false; +$this->ignore_table_widths = false; +$this->keep_table_proportions = false; // If table width set > page width, force resizing but keep relative sizes + // Also forces respect of cell widths set by % +$this->shrink_tables_to_fit = 1.4; // automatically reduce fontsize in table if words would have to split ( not in CJK) + // 0 or false to disable; value (if set) gives maximum factor to reduce fontsize + +$this->tableMinSizePriority = false; // If page-break-inside:avoid but cannot fit on full page without + // exceeding autosize; setting this value to true will force respsect for + // autosize, and disable the page-break-inside:avoid + +$this->use_kwt = false; // "Keep-with-table" +$this->iterationCounter = false; // Set to TRUE to use table Head iteration counter +$this->splitTableBorderWidth = 0; // Use table border (using this width in mm) when table breaks across pages + // Recommended to use small value e.g. 0.01 + + +// IMAGES +$this->img_dpi = 96; // Default dpi to output images if size not defined + // See also above "dpi" + +// TEXT SPACING & JUSTIFICATION +$this->useKerning = false; // true to use kerning +$this->justifyB4br = false; // In justified text, <BR> does not cause the preceding text to be justified in browsers + // Change to true to force justification (as in MS Word) + +$this->tabSpaces = 8; // Number of spaces to replace for a TAB in <pre> sections + // Notepad uses 6, HTML specification recommends 8 +$this->jSWord = 0.4; // Proportion (/1) of space (when justifying margins) to allocate to Word vs. Character +$this->jSmaxChar = 2; // Maximum spacing to allocate to character spacing. (0 = no maximum) + +$this->jSmaxCharLast = 1; // Maximum character spacing allowed (carried over) when finishing a last line +$this->jSmaxWordLast = 2; // Maximum word spacing allowed (carried over) when finishing a last line +$this->normalLineheight = 1.33; // Value used for line-height when CSS specified as 'normal' (default) + +// Small Caps +$this->smCapsScale = 0.75; // Factor of 1 to scale capital letters +$this->smCapsStretch = 110; // % to stretch small caps horizontally (i.e. 100 = no stretch) + +// CJK Line-breaking +$this->allowCJKorphans = true; // FALSE=always wrap to next line; TRUE=squeeze or overflow +$this->allowCJKoverflow = false; // FALSE=squeeze; TRUE=overflow (only some characters, and disabled in tables) +$this->CJKforceend = false; // Forces overflowng punctuation to hang outside right margin mPDF 5.6.40 + +// HYPHENATION +$this->SHYlang = "en"; // Should be one of: 'en','de','es','fi','fr','it','nl','pl','ru','sv' +$this->SHYleftmin = 2; +$this->SHYrightmin = 2; +$this->SHYcharmin = 2; +$this->SHYcharmax = 10; + +// COLUMNS +$this->keepColumns = false; // Set to go to the second column only when the first is full of text etc. +$this->max_colH_correction = 1.15; // Maximum ratio to adjust column height when justifying - too large a value can give ugly results +$this->ColGap=5; + + +// LISTS +$this->list_align_style = 'R'; // Determines alignment of numbers in numbered lists +$this->list_indent_first_level = 0; // 1/0 yex/no to indent first level of list +$this->list_number_suffix = '.'; // Content to follow a numbered list marker e.g. '.' gives 1. or IV.; ')' gives 1) or a) + +// ACTIVE FORMS +$this->useActiveForms = false; + +// WATERMARKS +$this->watermarkImgBehind = false; +$this->showWatermarkText = 0; +$this->showWatermarkImage = 0; +$this->watermarkText = ''; +$this->watermarkImage = ''; +$this->watermark_font = ''; +$this->watermarkTextAlpha = 0.2; +$this->watermarkImageAlpha = 0.2; +$this->watermarkImgAlphaBlend = 'Normal'; + // Accepts any PDF spec. value: Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, + // HardLight, SoftLight, Difference, Exclusion + // "Multiply" works well for watermark image on top + +// BORDERS +$this->autoPadding = false; // Automatically increases padding in block elements when border-radius set - if required + + +////////////////////////////////////////////// + +// Default values if no style sheet offered (cf. http://www.w3.org/TR/CSS21/sample.html) +$this->defaultCSS = array( + 'BODY' => array( + 'FONT-FAMILY' => 'serif', + 'FONT-SIZE' => '11pt', + 'TEXT-INDENT' => '0pt', + 'LINE-HEIGHT' => 'normal', + 'MARGIN-COLLAPSE' => 'collapse', /* Custom property to collapse top/bottom margins at top/bottom of page - ignored in tables/lists */ + 'HYPHENS' => 'manual', /* mPDF 5.6.08 */ + ), + 'P' => array( + 'MARGIN' => '1.12em 0', + ), + 'H1' => array( + 'FONT-SIZE' => '2em', + 'FONT-WEIGHT' => 'bold', + 'MARGIN' => '0.67em 0', + 'PAGE-BREAK-AFTER' => 'avoid', + ), + 'H2' => array( + 'FONT-SIZE' => '1.5em', + 'FONT-WEIGHT' => 'bold', + 'MARGIN' => '0.75em 0', + 'PAGE-BREAK-AFTER' => 'avoid', + ), + 'H3' => array( + 'FONT-SIZE' => '1.17em', + 'FONT-WEIGHT' => 'bold', + 'MARGIN' => '0.83em 0', + 'PAGE-BREAK-AFTER' => 'avoid', + ), + 'H4' => array( + 'FONT-WEIGHT' => 'bold', + 'MARGIN' => '1.12em 0', + 'PAGE-BREAK-AFTER' => 'avoid', + ), + 'H5' => array( + 'FONT-SIZE' => '0.83em', + 'FONT-WEIGHT' => 'bold', + 'MARGIN' => '1.5em 0', + 'PAGE-BREAK-AFTER' => 'avoid', + ), + 'H6' => array( + 'FONT-SIZE' => '0.75em', + 'FONT-WEIGHT' => 'bold', + 'MARGIN' => '1.67em 0', + 'PAGE-BREAK-AFTER' => 'avoid', + ), + 'HR' => array( + 'COLOR' => '#888888', + 'TEXT-ALIGN' => 'center', + 'WIDTH' => '100%', + 'HEIGHT' => '0.2mm', + 'MARGIN-TOP' => '0.83em', + 'MARGIN-BOTTOM' => '0.83em', + ), + 'PRE' => array( + 'MARGIN' => '0.83em 0', + 'FONT-FAMILY' => 'monospace', + ), + 'S' => array( + 'TEXT-DECORATION' => 'line-through', + ), + 'STRIKE' => array( + 'TEXT-DECORATION' => 'line-through', + ), + 'DEL' => array( + 'TEXT-DECORATION' => 'line-through', + ), + 'SUB' => array( + 'VERTICAL-ALIGN' => 'sub', + 'FONT-SIZE' => '55%', /* Recommended 0.83em */ + ), + 'SUP' => array( + 'VERTICAL-ALIGN' => 'super', + 'FONT-SIZE' => '55%', /* Recommended 0.83em */ + ), + 'U' => array( + 'TEXT-DECORATION' => 'underline', + ), + 'INS' => array( + 'TEXT-DECORATION' => 'underline', + ), + 'B' => array( + 'FONT-WEIGHT' => 'bold', + ), + 'STRONG' => array( + 'FONT-WEIGHT' => 'bold', + ), + 'I' => array( + 'FONT-STYLE' => 'italic', + ), + 'CITE' => array( + 'FONT-STYLE' => 'italic', + ), + 'Q' => array( + 'FONT-STYLE' => 'italic', + ), + 'EM' => array( + 'FONT-STYLE' => 'italic', + ), + 'VAR' => array( + 'FONT-STYLE' => 'italic', + ), + 'SAMP' => array( + 'FONT-FAMILY' => 'monospace', + ), + 'CODE' => array( + 'FONT-FAMILY' => 'monospace', + ), + 'KBD' => array( + 'FONT-FAMILY' => 'monospace', + ), + 'TT' => array( + 'FONT-FAMILY' => 'monospace', + ), + 'SMALL' => array( + 'FONT-SIZE' => '83%', + ), + 'BIG' => array( + 'FONT-SIZE' => '117%', + ), + 'ACRONYM' => array( + 'FONT-SIZE' => '77%', + 'FONT-WEIGHT' => 'bold', + ), + 'ADDRESS' => array( + 'FONT-STYLE' => 'italic', + ), + 'BLOCKQUOTE' => array( + 'MARGIN-LEFT' => '40px', + 'MARGIN-RIGHT' => '40px', + 'MARGIN-TOP' => '1.12em', + 'MARGIN-BOTTOM' => '1.12em', + ), + 'A' => array( + 'COLOR' => '#0000FF', + 'TEXT-DECORATION' => 'underline', + ), + 'UL' => array( + 'MARGIN' => '0.83em 0', /* only applied to top-level of nested lists */ + 'TEXT-INDENT' => '1.3em', /* Custom effect - list indent */ + ), + 'OL' => array( + 'MARGIN' => '0.83em 0', /* only applied to top-level of nested lists */ + 'TEXT-INDENT' => '1.3em', /* Custom effect - list indent */ + ), + 'DL' => array( + 'MARGIN' => '1.67em 0', + ), + 'DT' => array( + ), + 'DD' => array( + 'PADDING-LEFT' => '40px', + ), + 'TABLE' => array( + 'MARGIN' => '0', + 'BORDER-COLLAPSE' => 'separate', + 'BORDER-SPACING' => '2px', + 'EMPTY-CELLS' => 'show', + 'LINE-HEIGHT' => '1.2', + 'VERTICAL-ALIGN' => 'middle', + ), + 'THEAD' => array( + ), + 'TFOOT' => array( + ), + 'TH' => array( + 'FONT-WEIGHT' => 'bold', + 'TEXT-ALIGN' => 'center', + 'PADDING-LEFT' => '0.1em', + 'PADDING-RIGHT' => '0.1em', + 'PADDING-TOP' => '0.1em', + 'PADDING-BOTTOM' => '0.1em', + ), + 'TD' => array( + 'PADDING-LEFT' => '0.1em', + 'PADDING-RIGHT' => '0.1em', + 'PADDING-TOP' => '0.1em', + 'PADDING-BOTTOM' => '0.1em', + ), + 'CAPTION' => array( + 'TEXT-ALIGN' => 'center', + ), + 'IMG' => array( + 'MARGIN' => '0', + 'VERTICAL-ALIGN' => 'baseline', + ), + 'INPUT' => array( + 'FONT-FAMILY' => 'sans-serif', + 'VERTICAL-ALIGN' => 'middle', + 'FONT-SIZE' => '0.9em', + ), + 'SELECT' => array( + 'FONT-FAMILY' => 'sans-serif', + 'FONT-SIZE' => '0.9em', + 'VERTICAL-ALIGN' => 'middle', + ), + 'TEXTAREA' => array( + 'FONT-FAMILY' => 'monospace', + 'FONT-SIZE' => '0.9em', + 'VERTICAL-ALIGN' => 'text-bottom', + ), + 'MARK' => array( /* mPDF 5.5.09 */ + 'BACKGROUND-COLOR' => 'yellow', + ), +); + + +////////////////////////////////////////////////// +// VALUES ONLY LIKELY TO BE CHANGED BY DEVELOPERS +////////////////////////////////////////////////// +$this->pdf_version = '1.4'; + +// Hyphenation +$this->SHYlanguages = array('en','de','es','fi','fr','it','nl','pl','ru','sv'); // existing defined patterns + +$this->default_lineheight_correction=1.2; // Value 1 sets lineheight=fontsize height; + // Value used if line-height not set by CSS (usuallly is) + +$this->fontsizes = array('XX-SMALL'=>0.7, 'X-SMALL'=>0.77, 'SMALL'=>0.86, 'MEDIUM'=>1, 'LARGE'=>1.2, 'X-LARGE'=>1.5, 'XX-LARGE'=>2); + +// CHARACTER PATTERN MATCHES TO DETECT LANGUAGES + // pattern used to detect RTL characters -> force RTL + $this->pregRTLchars = "\x{0590}-\x{06FF}\x{0700}-\x{083E}\x{FB00}-\x{FDFD}\x{FE70}-\x{FEFF}"; + + // CJK Chars which require changing and are distinctive of specific charset + $this->pregUHCchars = "\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}"; + $this->pregSJISchars = "\x{3040}-\x{309F}\x{30A0}-\x{30FF}\x{3190}-\x{319F}\x{31F0}-\x{31FF}"; + + // Chars which distinguish CJK but not between different + $this->pregCJKchars = "\x{1100}-\x{11FF}\x{2E80}-\x{A4CF}\x{A800}-\x{D7AF}\x{F900}-\x{FAFF}\x{FE30}-\x{FE6F}\x{FF00}-\x{FFEF}\x{20000}-\x{2FA1F}"; + + // For CJK Line-breaking + //Leading characters - Not allowed at end of line + $this->CJKleading = "\$\(\*\[\{\x{00a3}\x{00a5}\x{00ab}\x{00b7}\x{2018}\x{201c}\x{2035}\x{3005}\x{3007}\x{3008}\x{300a}\x{300c}\x{300e}\x{3010}\x{3014}\x{3016}\x{3018}\x{301d}\x{fe34}\x{fe57}\x{fe59}\x{fe5b}\x{ff04}\x{ff08}\x{ff0e}\x{ff3b}\x{ff5b}\x{ff5f}\x{ffe1}\x{ffe5}\x{ffe6}"; + // Following characters - Not allowed at start + $this->CJKfollowing = "!%\),\.:;>\?\]\}\x{00a2}\x{00a8}\x{00b0}\x{00b7}\x{00bb}\x{02c7}\x{02c9}\x{2010}\x{2013}-\x{2016}\x{2019}\x{201d}-\x{201f}\x{2020}-\x{2022}\x{2025}\x{2027}\x{203a}\x{203c}\x{2047}-\x{2049}\x{2103}\x{2236}\x{2574}\x{3001}-\x{3003}\x{3005}\x{3006}\x{3009}\x{300b}\x{300d}\x{300f}\x{3011}\x{3015}\x{3017}\x{3019}\x{301c}\x{301e}\x{301f}\x{303b}\x{3041}\x{3043}\x{3045}\x{3047}\x{3049}\x{3063}\x{3083}\x{3085}\x{3087}\x{308e}\x{3095}\x{3096}\x{30a0}\x{30a1}\x{30a3}\x{30a5}\x{30a7}\x{30a9}\x{30c3}\x{30e3}\x{30e5}\x{30e7}\x{30ee}\x{30f5}\x{30f6}\x{30fb}-\x{30fe}\x{31f0}-\x{31ff}\x{fe30}-\x{fe33}\x{fe50}-\x{fe56}\x{fe58}\x{fe5a}\x{fe5c}\x{ff01}\x{ff02}\x{ff05}\x{ff07}\x{ff09}\x{ff0c}\x{ff0e}\x{ff1a}\x{ff1b}\x{ff1f}\x{ff3d}\x{ff40}\x{ff5c}-\x{ff5e}\x{ff60}\x{ff64}"; + // Characters which are allowed to overflow the right margin + $this->CJKoverflow = "\.,\x{ff61}\x{ff64}\x{3001}\x{3002}\x{ff0c}\x{ff0e}"; + + + + // ASCII Chars which shouldn't break string + // Use for very specific words + $this->pregASCIIchars1 = "\x{0021}-\x{002E}\x{0030}-\x{003B}?"; // no [SPACE] + // Use for words+ + $this->pregASCIIchars2 = "\x{0020}-\x{002E}\x{0030}-\x{003B}?"; // [SPACE] punctuation and 0-9 + // Use for chunks > words + $this->pregASCIIchars3 = "\x{0000}-\x{002E}\x{0030}-\x{003B}\x{003F}-\x{007E}"; // all except <> + // Vietnamese - specific + $this->pregVIETchars = "\x{01A0}\x{01A1}\x{01AF}\x{01B0}\x{1EA0}-\x{1EF1}"; + // Vietnamese - Chars which shouldn't break string + $this->pregVIETPluschars = "\x{0000}-\x{003B}\x{003F}-\x{00FF}\x{0300}-\x{036F}\x{0102}\x{0103}\x{0110}\x{0111}\x{0128}\x{0129}\x{0168}\x{0169}\x{1EF1}-\x{1EF9}"; // omits < > + + // Arabic + $this->pregARABICchars = "\x{0600}-\x{06FF}\x{0750}-\x{077F}\x{FB50}-\x{FDFD}\x{FE70}-\x{FEFF}"; + // Characters of Urdu, Pashto, Sindhi (but NOT arabic or persian/farsi) [not covered by DejavuSans font] + $this->pregNonARABICchars = "\x{0671}-\x{067D}\x{067F}-\x{0685}\x{0687}-\x{0697}\x{0699}-\x{06A8}\x{06AA}-\x{06AE}\x{06B0}-\x{06CB}\x{06CD}-\x{06D3}"; + + $this->pregHEBchars = "\x{0590}-\x{05FF}\x{FB00}-\x{FB49}"; // Hebrew + + // INDIC + $this->pregHIchars = "\x{0900}-\x{0963}\x{0966}-\x{097F}"; // Devanagari (Hindi) minus the common indic punctuation 0964,0965 + $this->pregBNchars = "\x{0980}-\x{09FF}"; // Bengali + $this->pregPAchars = "\x{0A00}-\x{0A7F}"; // Gurmukhi (Punjabi) + $this->pregGUchars = "\x{0A80}-\x{0AFF}"; // Gujarati + $this->pregORchars = "\x{0B00}-\x{0B7F}"; // Oriya + $this->pregTAchars = "\x{0B80}-\x{0BFF}"; // Tamil + $this->pregTEchars = "\x{0C00}-\x{0C7F}"; // Telugu + $this->pregKNchars = "\x{0C80}-\x{0CFF}"; // Kannada + $this->pregMLchars = "\x{0D00}-\x{0D7F}"; // Malayalam + $this->pregSHchars = "\x{0D80}-\x{0DFF}"; // Sinhala + + $this->pregINDextra = "\x{200B}-\x{200D}\x{0964}\x{0965}\x{0020}-\x{0022}\x{0024}-\x{002E}\x{003A}-\x{003F}\x{005B}-\x{0060}\x{007B}-\x{007E}\x{00A0}"; + // 200B-D=Zero-width joiners; 0964,0965=Generic Indic punctuation; NBSP & general punctuation (excludes # and / so can use in autoFont() ) + +$this->allowedCSStags = 'DIV|P|H1|H2|H3|H4|H5|H6|FORM|IMG|A|BODY|TABLE|HR|THEAD|TFOOT|TBODY|TH|TR|TD|UL|OL|LI|PRE|BLOCKQUOTE|ADDRESS|DL|DT|DD'; +$this->allowedCSStags .= '|ARTICLE|ASIDE|FIGURE|FIGCAPTION|FOOTER|HEADER|HGROUP|NAV|SECTION|MARK|DETAILS|SUMMARY|METER|PROGRESS|TIME'; // mPDF 5.5.09 +$this->allowedCSStags .= '|SPAN|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|STRIKE|S|U|DEL|INS|Q|FONT'; +$this->allowedCSStags .= '|SELECT|INPUT|TEXTAREA|CAPTION|FIELDSET|LEGEND'; // mPDF 5.4.18 +$this->allowedCSStags .= '|TEXTCIRCLE|DOTTAB'; // mPDF 5.5.23 // mPDF 5.6.33 + +$this->outerblocktags = array('DIV','FORM','CENTER','DL','FIELDSET','ARTICLE','ASIDE','FIGURE','FIGCAPTION', 'FOOTER','HEADER','HGROUP','NAV','SECTION','DETAILS','SUMMARY'); // mPDF 5.5.09 // mPDF 5.5.22 +$this->innerblocktags = array('P','BLOCKQUOTE','ADDRESS','PRE','H1','H2','H3','H4','H5','H6','DT','DD','CAPTION'); + + +// OSTICKET CUSTOM ------------------------------- +// Don't process alpha channels of PNG images +$this->png_alpha_use_white_matte = true; + + +?> diff --git a/include/mpdf/config_cp.php b/include/mpdf/config_cp.php new file mode 100755 index 0000000000000000000000000000000000000000..d854e5b673261af387e5389832ce5bec1374ae71 --- /dev/null +++ b/include/mpdf/config_cp.php @@ -0,0 +1,153 @@ +<?php + + +function GetLangOpts($llcc, $adobeCJK) { + if (strlen($llcc) == 5) { + $lang = substr(strtolower($llcc),0,2); + $country = substr(strtoupper($llcc),3,2); + } + else { $lang = strtolower($llcc); $country = ''; } + $unifonts = ""; + $coreSuitable = false; + + switch($lang){ + CASE "en": + CASE "ca": + CASE "cy": + CASE "da": + CASE "de": + CASE "es": + CASE "eu": + CASE "fr": + CASE "ga": + CASE "fi": + CASE "is": + CASE "it": + CASE "nl": + CASE "no": + CASE "pt": + CASE "sv": + // Edit this value to define how mPDF behaves when using new mPDF('-x') + // If set to TRUE, mPDF will use Adobe core fonts only when it recognises the languages above + $coreSuitable = true; break; + + + + // RTL Languages + CASE "he": + CASE "yi": + $unifonts = "dejavusans,dejavusansB,dejavusansI,dejavusansBI"; break; + + // Arabic + CASE "ar": + $unifonts = "xbriyaz,xbriyazB,xbriyazI,xbriyazBI,xbzar,xbzarB,xbzarI,xbzarBI"; break; + CASE "fa": + $unifonts = "xbriyaz,xbriyazB,xbriyazI,xbriyazBI,xbzar,xbzarB,xbzarI,xbzarBI"; break; + CASE "ps": + $unifonts = "xbriyaz,xbriyazB,xbriyazI,xbriyazBI,xbzar,xbzarB,xbzarI,xbzarBI"; break; + CASE "ur": + $unifonts = "xbriyaz,xbriyazB,xbriyazI,xbriyazBI,xbzar,xbzarB,xbzarI,xbzarBI"; break; + + // Sindhi (can be Arabic or Devanagari) + CASE "sd": + if ($country == "IN") { $unifonts = "ind_hi_1_001"; } + // else if ($country == "PK") { $unifonts = ""; } + // else { $unifonts = ""; } + break; + + + // INDIC + // Assamese + CASE "as": $unifonts = "ind_bn_1_001"; break; + // Bengali + CASE "bn": $unifonts = "ind_bn_1_001"; break; + // Gujarati + CASE "gu": $unifonts = "ind_gu_1_001"; break; + // Hindi (Devanagari) + CASE "hi": $unifonts = "ind_hi_1_001"; break; + // Kannada + CASE "kn": $unifonts = "ind_kn_1_001"; break; + // Kashmiri + CASE "ks": $unifonts = "ind_hi_1_001"; break; + // Malayalam + CASE "ml": $unifonts = "ind_ml_1_001"; break; + // Nepali (Devanagari) + CASE "ne": $unifonts = "ind_hi_1_001"; break; + // Oriya + CASE "or": $unifonts = "ind_or_1_001"; break; + // Punjabi (Gurmukhi) + CASE "pa": $unifonts = "ind_pa_1_001"; break; + // Tamil + CASE "ta": $unifonts = "ind_ta_1_001"; break; + // Telegu + CASE "te": $unifonts = "ind_te_1_001"; break; + + // THAI + CASE "th": $unifonts = "garuda,garudaB,garudaI,garudaBI,norasi,norasiB,norasiI,norasiBI"; break; + + // VIETNAMESE + CASE "vi": + $unifonts = "dejavusanscondensed,dejavusanscondensedB,dejavusanscondensedI,dejavusanscondensedBI,dejavusans,dejavusansB,dejavusansI,dejavusansBI"; break; + + // CJK Langauges + CASE "ja": + if ($adobeCJK) { + $unifonts = "sjis,sjisB,sjisI,sjisBI"; + } +/* Uncomment these lines if CJK fonts available */ +// else { +// $unifonts = "sun-exta,sun-extb,hannoma,hannomb"; +// } + break; + + CASE "ko": + if ($adobeCJK) { + $unifonts = "uhc,uhcB,uhcI,uhcBI"; + } +/* Uncomment these lines if CJK fonts available */ +// else { +// $unifonts = "unbatang_0613"; +// } + break; + + CASE "zh": + if ($country == "HK" || $country == "TW") { + if ($adobeCJK) { + $unifonts = "big5,big5B,big5I,big5BI"; + } +/* Uncomment these lines if CJK fonts available */ +// else { +// $unifonts = "sun-exta,sun-extb,hannoma,hannomb"; +// } + } + else if ($country == "CN") { + if ($adobeCJK) { + $unifonts = "gb,gbB,gbI,gbBI"; + } +/* Uncomment these lines if CJK fonts available */ +// else { +// $unifonts = "sun-exta,sun-extb,hannoma,hannomb"; +// } + } + else { + if ($adobeCJK) { + $unifonts = "gb,gbB,gbI,gbBI"; + } +/* Uncomment these lines if CJK fonts available */ +// else { +// $unifonts = "sun-exta,sun-extb,hannoma,hannomb"; +// } + } + break; + + } + + + $unifonts_arr = array(); + if ($unifonts) { + $unifonts_arr = preg_split('/\s*,\s*/',$unifonts); + } + return array($coreSuitable ,$unifonts_arr); +} + +?> \ No newline at end of file diff --git a/include/mpdf/config_fonts.php b/include/mpdf/config_fonts.php new file mode 100755 index 0000000000000000000000000000000000000000..ab6c8a7247299b92484904e755c0ce1635e2987f --- /dev/null +++ b/include/mpdf/config_fonts.php @@ -0,0 +1,304 @@ +<?php + + +// Optionally define a folder which contains TTF fonts +// mPDF will look here before looking in the usual _MPDF_TTFONTPATH +// Useful if you already have a folder for your fonts +// e.g. on Windows: define("_MPDF_SYSTEM_TTFONTS", 'C:/Windows/Fonts/'); +// Leave undefined if not required + +// define("_MPDF_SYSTEM_TTFONTS", ''); + + +// Optionally set font(s) (names as defined below in $this->fontdata) to use for missing characters +// when using useSubstitutions. Use a font with wide coverage - dejavusanscondensed is a good start +// only works using subsets (otherwise would add very large file) +// doesn't do Indic or arabic +// More than 1 font can be specified but each will add to the processing time of the script + +$this->backupSubsFont = array('dejavusanscondensed'); + + +// Optionally set a font (name as defined below in $this->fontdata) to use for CJK characters +// in Plane 2 Unicode (> U+20000) when using useSubstitutions. +// Use a font like hannomb or sun-extb if available +// only works using subsets (otherwise would add very large file) +// Leave undefined or blank if not not required + +// $this->backupSIPFont = 'sun-extb'; + + +/* +This array defines translations from font-family in CSS or HTML +to the internal font-family name used in mPDF. +Can include as many as want, regardless of which fonts are installed. +By default mPDF will take a CSS/HTML font-family and remove spaces +and change to lowercase e.g. "Arial Unicode MS" will be recognised as +"arialunicodems" +You only need to define additional translations. +You can also use it to define specific substitutions e.g. +'frutiger55roman' => 'arial' +Generic substitutions (i.e. to a sans-serif or serif font) are set +by including the font-family in $this->sans_fonts below +To aid backwards compatability some are included: +*/ +$this->fonttrans = array( + 'helvetica' => 'arial', + 'times' => 'timesnewroman', + 'courier' => 'couriernew', + 'trebuchet' => 'trebuchetms', + 'comic' => 'comicsansms', + 'franklin' => 'franklingothicbook', + 'albertus' => 'albertusmedium', + 'arialuni' => 'arialunicodems', + 'zn_hannom_a' => 'hannoma', + 'ocr-b' => 'ocrb', + 'ocr-b10bt' => 'ocrb', + + +); + +/* +This array lists the file names of the TrueType .ttf or .otf font files +for each variant of the (internal mPDF) font-family name. +['R'] = Regular (Normal), others are Bold, Italic, and Bold-Italic +Each entry must contain an ['R'] entry, but others are optional. +Only the font (files) entered here will be available to use in mPDF. +Put preferred default first in order. +This will be used if a named font cannot be found in any of +$this->sans_fonts, $this->serif_fonts or $this->mono_fonts + +['indic'] = true; for special mPDF fonts containing Indic characters +['sip-ext'] = 'hannomb'; name a related font file containing SIP characters + +If a .ttc TrueType collection file is referenced, the number of the font +within the collection is required. Fonts in the collection are numbered +starting at 1, as they appear in the .ttc file e.g. + "cambria" => array( + 'R' => "cambria.ttc", + 'B' => "cambriab.ttf", + 'I' => "cambriai.ttf", + 'BI' => "cambriaz.ttf", + 'TTCfontID' => array( + 'R' => 1, + ), + ), + "cambriamath" => array( + 'R' => "cambria.ttc", + 'TTCfontID' => array( + 'R' => 2, + ), + ), +*/ + +$this->fontdata = array( + "dejavusanscondensed" => array( + 'R' => "DejaVuSansCondensed.ttf", + 'B' => "DejaVuSansCondensed-Bold.ttf", + 'I' => "DejaVuSansCondensed-Oblique.ttf", + 'BI' => "DejaVuSansCondensed-BoldOblique.ttf", + ), + "dejavusans" => array( + 'R' => "DejaVuSans.ttf", + 'B' => "DejaVuSans-Bold.ttf", + 'I' => "DejaVuSans-Oblique.ttf", + 'BI' => "DejaVuSans-BoldOblique.ttf", + ), + "dejavuserif" => array( + 'R' => "DejaVuSerif.ttf", + 'B' => "DejaVuSerif-Bold.ttf", + 'I' => "DejaVuSerif-Italic.ttf", + 'BI' => "DejaVuSerif-BoldItalic.ttf", + ), + "dejavuserifcondensed" => array( + 'R' => "DejaVuSerifCondensed.ttf", + 'B' => "DejaVuSerifCondensed-Bold.ttf", + 'I' => "DejaVuSerifCondensed-Italic.ttf", + 'BI' => "DejaVuSerifCondensed-BoldItalic.ttf", + ), + "dejavusansmono" => array( + 'R' => "DejaVuSansMono.ttf", + 'B' => "DejaVuSansMono-Bold.ttf", + 'I' => "DejaVuSansMono-Oblique.ttf", + 'BI' => "DejaVuSansMono-BoldOblique.ttf", + ), + + +/* OCR-B font for Barcodes */ + "ocrb" => array( + 'R' => "ocrb10.ttf", + ), + +/* Thai fonts */ + "garuda" => array( + 'R' => "Garuda.ttf", + 'B' => "Garuda-Bold.ttf", + 'I' => "Garuda-Oblique.ttf", + 'BI' => "Garuda-BoldOblique.ttf", + ), + "norasi" => array( + 'R' => "Norasi.ttf", + 'B' => "Norasi-Bold.ttf", + 'I' => "Norasi-Oblique.ttf", + 'BI' => "Norasi-BoldOblique.ttf", + ), + + +/* Indic fonts */ + "ind_bn_1_001" => array( + 'R' => "ind_bn_1_001.ttf", + 'indic' => true, + ), + "ind_hi_1_001" => array( + 'R' => "ind_hi_1_001.ttf", + 'indic' => true, + ), + "ind_ml_1_001" => array( + 'R' => "ind_ml_1_001.ttf", + 'indic' => true, + ), + "ind_kn_1_001" => array( + 'R' => "ind_kn_1_001.ttf", + 'indic' => true, + ), + "ind_gu_1_001" => array( + 'R' => "ind_gu_1_001.ttf", + 'indic' => true, + ), + "ind_or_1_001" => array( + 'R' => "ind_or_1_001.ttf", + 'indic' => true, + ), + "ind_ta_1_001" => array( + 'R' => "ind_ta_1_001.ttf", + 'indic' => true, + ), + "ind_te_1_001" => array( + 'R' => "ind_te_1_001.ttf", + 'indic' => true, + ), + "ind_pa_1_001" => array( + 'R' => "ind_pa_1_001.ttf", + 'indic' => true, + ), + + +/* XW Zar Arabic fonts */ + "xbriyaz" => array( + 'R' => "XB Riyaz.ttf", + 'B' => "XB RiyazBd.ttf", + 'I' => "XB RiyazIt.ttf", + 'BI' => "XB RiyazBdIt.ttf", + 'unAGlyphs' => true, + ), + "xbzar" => array( + 'R' => "XB Zar.ttf", + 'B' => "XB Zar Bd.ttf", + 'I' => "XB Zar It.ttf", + 'BI' => "XB Zar BdIt.ttf", + 'unAGlyphs' => true, + ), + + + + +/* Examples of some CJK fonts */ +/* + "unbatang_0613" => array( + 'R' => "UnBatang_0613.ttf", + ), + "sun-exta" => array( + 'R' => "Sun-ExtA.ttf", + 'sip-ext' => 'sun-extb', + ), + "sun-extb" => array( + 'R' => "Sun-ExtB.ttf", + ), + "hannoma" => array( + 'R' => "HAN NOM A.ttf", + 'sip-ext' => 'hannomb', + ), + "hannomb" => array( + 'R' => "HAN NOM B.ttf", + ), + + + 'mingliu' => array ( + 'R' => 'mingliu.ttc', + 'TTCfontID' => array ( + 'R' => 1, + ), + 'sip-ext' => 'mingliu-extb', + ), + 'pmingliu' => array ( + 'R' => 'mingliu.ttc', + 'TTCfontID' => array ( + 'R' => 2, + ), + 'sip-ext' => 'pmingliu-extb', + ), + 'mingliu_hkscs' => array ( + 'R' => 'mingliu.ttc', + 'TTCfontID' => array ( + 'R' => 3, + ), + 'sip-ext' => 'mingliu_hkscs-extb', + ), + 'mingliu-extb' => array ( + 'R' => 'mingliub.ttc', + 'TTCfontID' => array ( + 'R' => 1, + ), + ), + 'pmingliu-extb' => array ( + 'R' => 'mingliub.ttc', + 'TTCfontID' => array ( + 'R' => 2, + ), + ), + 'mingliu_hkscs-extb' => array ( + 'R' => 'mingliub.ttc', + 'TTCfontID' => array ( + 'R' => 3, + ), + ), +*/ + +); + + +// Add fonts to this array if they contain characters in the SIP or SMP Unicode planes +// but you do not require them. This allows a more efficient form of subsetting to be used. +$this->BMPonly = array( + "dejavusanscondensed", + "dejavusans", + "dejavuserifcondensed", + "dejavuserif", + "dejavusansmono", + ); + +// These next 3 arrays do two things: +// 1. If a font referred to in HTML/CSS is not available to mPDF, these arrays will determine whether +// a serif/sans-serif or monospace font is substituted +// 2. The first font in each array will be the font which is substituted in circumstances as above +// (Otherwise the order is irrelevant) +// Use the mPDF font-family names i.e. lowercase and no spaces (after any translations in $fonttrans) +// Always include "sans-serif", "serif" and "monospace" etc. +$this->sans_fonts = array('dejavusanscondensed','dejavusans','freesans','liberationsans','sans','sans-serif','cursive','fantasy', + 'arial','helvetica','verdana','geneva','lucida','arialnarrow','arialblack','arialunicodems', + 'franklin','franklingothicbook','tahoma','garuda','calibri','trebuchet','lucidagrande','microsoftsansserif', + 'trebuchetms','lucidasansunicode','franklingothicmedium','albertusmedium','xbriyaz','albasuper','quillscript' + +); + +$this->serif_fonts = array('dejavuserifcondensed','dejavuserif','freeserif','liberationserif','serif', + 'timesnewroman','times','centuryschoolbookl','palatinolinotype','centurygothic', + 'bookmanoldstyle','bookantiqua','cyberbit','cambria', + 'norasi','charis','palatino','constantia','georgia','albertus','xbzar','algerian','garamond', +); + +$this->mono_fonts = array('dejavusansmono','freemono','liberationmono','courier', 'mono','monospace','ocrb','ocr-b','lucidaconsole', + 'couriernew','monotypecorsiva' +); + +?> \ No newline at end of file diff --git a/include/mpdf/font/ccourier.php b/include/mpdf/font/ccourier.php new file mode 100755 index 0000000000000000000000000000000000000000..9f8b85e80559f7a2378877c308a9264b0ce50b6d --- /dev/null +++ b/include/mpdf/font/ccourier.php @@ -0,0 +1,9 @@ +<?php +for($i=0;$i<=255;$i++) + $cw[chr($i)]=600; + +$desc=array('Ascent'=>629,'Descent'=>-157,'CapHeight'=>562,'FontBBox'=>'[-23 -250 715 805]'); +$up=-100; +$ut=50; + +?> diff --git a/include/mpdf/font/ccourierb.php b/include/mpdf/font/ccourierb.php new file mode 100755 index 0000000000000000000000000000000000000000..4a0e61e5493c91fe7ac3dbbb23fd4726df688b84 --- /dev/null +++ b/include/mpdf/font/ccourierb.php @@ -0,0 +1,9 @@ +<?php +for($i=0;$i<=255;$i++) + $cw[chr($i)]=600; +$desc=array('Ascent'=>629,'Descent'=>-157,'CapHeight'=>562,'FontBBox'=>'[-113 -250 749 801]'); +$up=-100; +$ut=50; + + +?> diff --git a/include/mpdf/font/ccourierbi.php b/include/mpdf/font/ccourierbi.php new file mode 100755 index 0000000000000000000000000000000000000000..8797ca5454224dff39355da7a8bd3a54d3933b19 --- /dev/null +++ b/include/mpdf/font/ccourierbi.php @@ -0,0 +1,9 @@ +<?php +for($i=0;$i<=255;$i++) + $cw[chr($i)]=600; +$desc=array('Ascent'=>629,'Descent'=>-157,'CapHeight'=>562,'FontBBox'=>'[-57 -250 869 801]'); +$up=-100; +$ut=50; + + +?> diff --git a/include/mpdf/font/ccourieri.php b/include/mpdf/font/ccourieri.php new file mode 100755 index 0000000000000000000000000000000000000000..fd2a769855600e7e911e405e8bca3d93fd2eef9d --- /dev/null +++ b/include/mpdf/font/ccourieri.php @@ -0,0 +1,9 @@ +<?php +for($i=0;$i<=255;$i++) + $cw[chr($i)]=600; +$desc=array('Ascent'=>629,'Descent'=>-157,'CapHeight'=>562,'FontBBox'=>'[-27 -250 849 805]'); +$up=-100; +$ut=50; + + +?> diff --git a/include/fpdf/font/helvetica.php b/include/mpdf/font/chelvetica.php similarity index 62% rename from include/fpdf/font/helvetica.php rename to include/mpdf/font/chelvetica.php index ca94cdf21ab299eff088953feb86104aeaa91bae..c99facc2c23e8c13854c4a0a3d2c5429db231a7b 100755 --- a/include/fpdf/font/helvetica.php +++ b/include/mpdf/font/chelvetica.php @@ -1,5 +1,5 @@ <?php -$fpdf_charwidths['helvetica']=array( +$cw=array( chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, @@ -12,4 +12,9 @@ $fpdf_charwidths['helvetica']=array( chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); -?> + +$desc=array('Ascent'=>718,'Descent'=>-207,'CapHeight'=>718,'FontBBox'=>'[-166 -225 1000 931]'); +$up=-100; +$ut=50; +$kerninfo=array ( chr(49)=> array ( chr(49)=> -74, ), chr(65)=> array ( chr(84)=> -74, chr(86)=> -74, chr(87)=> -37, chr(89)=> -74, chr(118)=> -18, chr(119)=> -18, chr(121)=> -18, chr(146)=> -74, ), chr(70)=> array ( chr(44)=> -110, chr(46)=> -110, chr(65)=> -55, ), chr(76)=> array ( chr(84)=> -74, chr(86)=> -74, chr(87)=> -74, chr(89)=> -74, chr(121)=> -37, chr(146)=> -55, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(82)=> array ( chr(84)=> -18, chr(86)=> -18, chr(87)=> -18, chr(89)=> -18, ), chr(84)=> array ( chr(44)=> -110, chr(46)=> -110, chr(58)=> -110, chr(65)=> -74, chr(79)=> -18, chr(97)=> -110, chr(99)=> -110, chr(101)=> -110, chr(105)=> -37, chr(111)=> -110, chr(114)=> -37, chr(115)=> -110, chr(117)=> -37, chr(119)=> -55, chr(121)=> -55, ), chr(86)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -37, chr(65)=> -74, chr(97)=> -74, chr(101)=> -55, chr(105)=> -18, chr(111)=> -55, chr(114)=> -37, chr(117)=> -37, chr(121)=> -37, ), chr(87)=> array ( chr(44)=> -55, chr(46)=> -55, chr(58)=> -18, chr(65)=> -37, chr(97)=> -37, chr(101)=> -18, chr(105)=> 0, chr(111)=> -18, chr(114)=> -18, chr(117)=> -18, chr(121)=> -8, ), chr(89)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -55, chr(65)=> -74, chr(97)=> -74, chr(101)=> -91, chr(105)=> -37, chr(111)=> -91, chr(112)=> -74, chr(113)=> -91, chr(117)=> -55, chr(118)=> -55, ), chr(102)=> array ( chr(102)=> -18, chr(146)=> 18, ), chr(114)=> array ( chr(44)=> -55, chr(46)=> -55, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(119)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(121)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(145)=> array ( chr(145)=> -18, ), chr(146)=> array ( chr(115)=> -18, chr(146)=> -18, ), ); +?> \ No newline at end of file diff --git a/include/fpdf/font/helveticab.php b/include/mpdf/font/chelveticab.php similarity index 62% rename from include/fpdf/font/helveticab.php rename to include/mpdf/font/chelveticab.php index 276cfa8cb8c14554fd5d9179a38f137dc06a174c..73d9dc850d5e0d4656c277f914afb6aa303c6bb1 100755 --- a/include/fpdf/font/helveticab.php +++ b/include/mpdf/font/chelveticab.php @@ -1,5 +1,5 @@ <?php -$fpdf_charwidths['helveticaB']=array( +$cw=array( chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, @@ -12,4 +12,10 @@ $fpdf_charwidths['helveticaB']=array( chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); -?> + +$desc=array('Ascent'=>718,'Descent'=>-207,'CapHeight'=>718,'FontBBox'=>'[-170 -228 1003 962]'); +$up=-100; +$ut=50; +$kerninfo=array ( chr(49)=> array ( chr(49)=> -55, ), chr(65)=> array ( chr(84)=> -74, chr(86)=> -74, chr(87)=> -55, chr(89)=> -91, chr(118)=> -37, chr(119)=> -18, chr(121)=> -37, chr(146)=> -55, ), chr(70)=> array ( chr(44)=> -110, chr(46)=> -110, chr(65)=> -55, ), chr(76)=> array ( chr(84)=> -74, chr(86)=> -74, chr(87)=> -55, chr(89)=> -91, chr(121)=> -37, chr(146)=> -55, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(82)=> array ( chr(86)=> -18, chr(87)=> -18, chr(89)=> -37, ), chr(84)=> array ( chr(44)=> -110, chr(46)=> -110, chr(58)=> -110, chr(65)=> -74, chr(79)=> -18, chr(97)=> -74, chr(99)=> -74, chr(101)=> -74, chr(105)=> -18, chr(111)=> -74, chr(114)=> -55, chr(115)=> -74, chr(117)=> -74, chr(119)=> -74, chr(121)=> -74, ), chr(86)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -55, chr(65)=> -74, chr(97)=> -55, chr(101)=> -55, chr(105)=> -18, chr(111)=> -74, chr(114)=> -55, chr(117)=> -37, chr(121)=> -37, ), chr(87)=> array ( chr(44)=> -55, chr(46)=> -55, chr(58)=> -18, chr(65)=> -55, chr(97)=> -37, chr(101)=> -18, chr(105)=> -8, chr(111)=> -18, chr(114)=> -18, chr(117)=> -18, chr(121)=> -18, ), chr(89)=> array ( chr(44)=> -110, chr(46)=> -110, chr(58)=> -74, chr(65)=> -91, chr(97)=> -55, chr(101)=> -55, chr(105)=> -37, chr(111)=> -74, chr(112)=> -55, chr(113)=> -74, chr(117)=> -55, chr(118)=> -55, ), chr(102)=> array ( chr(146)=> 18, ), chr(114)=> array ( chr(44)=> -55, chr(46)=> -55, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(119)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(121)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(145)=> array ( chr(145)=> -37, ), chr(146)=> array ( chr(115)=> -37, chr(146)=> -37, ), ); + +?> \ No newline at end of file diff --git a/include/fpdf/font/helveticabi.php b/include/mpdf/font/chelveticabi.php similarity index 62% rename from include/fpdf/font/helveticabi.php rename to include/mpdf/font/chelveticabi.php index 8d2177432542b3908e37b90a768e7b4905c175db..b6837f070edae022c10050bb82bcc4a55470edef 100755 --- a/include/fpdf/font/helveticabi.php +++ b/include/mpdf/font/chelveticabi.php @@ -1,5 +1,5 @@ <?php -$fpdf_charwidths['helveticaBI']=array( +$cw=array( chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, @@ -12,4 +12,10 @@ $fpdf_charwidths['helveticaBI']=array( chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); -?> + +$desc=array('Ascent'=>718,'Descent'=>-207,'CapHeight'=>718,'FontBBox'=>'[-174 -228 1114 962]'); +$up=-100; +$ut=50; +$kerninfo=array ( chr(49)=> array ( chr(49)=> -74, ), chr(65)=> array ( chr(84)=> -74, chr(86)=> -74, chr(87)=> -55, chr(89)=> -74, chr(146)=> -55, ), chr(70)=> array ( chr(44)=> -110, chr(46)=> -110, chr(65)=> -55, ), chr(76)=> array ( chr(84)=> -74, chr(86)=> -55, chr(87)=> -55, chr(89)=> -74, chr(146)=> -74, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(82)=> array ( chr(84)=> -18, chr(87)=> -18, chr(89)=> -18, ), chr(84)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -74, chr(65)=> -74, chr(79)=> -18, chr(97)=> -37, chr(99)=> -37, chr(101)=> -37, chr(105)=> -18, chr(111)=> -37, chr(114)=> -18, chr(115)=> -37, chr(117)=> -18, chr(119)=> -37, chr(121)=> -37, ), chr(86)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -37, chr(65)=> -74, chr(97)=> -37, chr(101)=> -37, chr(105)=> -37, chr(111)=> -37, chr(114)=> -18, chr(117)=> -18, chr(121)=> -18, ), chr(87)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -37, chr(65)=> -55, chr(97)=> -18, chr(101)=> -18, chr(105)=> -8, chr(111)=> -18, chr(114)=> -18, chr(117)=> -18, chr(121)=> -18, ), chr(89)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -55, chr(65)=> -74, chr(97)=> -37, chr(101)=> -37, chr(105)=> -37, chr(111)=> -37, chr(112)=> -37, chr(113)=> -37, chr(117)=> -37, chr(118)=> -37, ), chr(102)=> array ( chr(102)=> -18, chr(146)=> 18, ), chr(114)=> array ( chr(44)=> -55, chr(46)=> -55, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(119)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(121)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(145)=> array ( chr(145)=> -37, ), chr(146)=> array ( chr(115)=> -18, chr(116)=> 18, chr(146)=> -37, ), ); + +?> \ No newline at end of file diff --git a/include/fpdf/font/helveticai.php b/include/mpdf/font/chelveticai.php similarity index 63% rename from include/fpdf/font/helveticai.php rename to include/mpdf/font/chelveticai.php index 88bf4371bd458b7fada28136c4324be14c9ea930..e4fdf28158c1aa46c4dab53897c825c36670b826 100755 --- a/include/fpdf/font/helveticai.php +++ b/include/mpdf/font/chelveticai.php @@ -1,5 +1,5 @@ <?php -$fpdf_charwidths['helveticaI']=array( +$cw=array( chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, @@ -12,4 +12,10 @@ $fpdf_charwidths['helveticaI']=array( chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); -?> + +$desc=array('Ascent'=>718,'Descent'=>-207,'CapHeight'=>718,'FontBBox'=>'[-170 -225 1116 931]'); +$up=-100; +$ut=50; +$kerninfo=array ( chr(49)=> array ( chr(49)=> -74, ), chr(65)=> array ( chr(84)=> -74, chr(86)=> -55, chr(87)=> -18, chr(89)=> -74, chr(118)=> -18, chr(119)=> -18, chr(121)=> -8, chr(146)=> -37, ), chr(70)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(76)=> array ( chr(84)=> -74, chr(86)=> -55, chr(87)=> -37, chr(89)=> -91, chr(121)=> -18, chr(146)=> -55, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(82)=> array ( chr(84)=> -18, chr(86)=> -18, chr(87)=> -18, chr(89)=> -37, ), chr(84)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -74, chr(65)=> -74, chr(79)=> -18, chr(97)=> -91, chr(99)=> -91, chr(101)=> -91, chr(105)=> -8, chr(111)=> -91, chr(114)=> -74, chr(115)=> -91, chr(117)=> -74, chr(119)=> -74, chr(121)=> -74, ), chr(86)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -18, chr(65)=> -55, chr(97)=> -37, chr(101)=> -37, chr(105)=> -18, chr(111)=> -37, chr(114)=> -18, chr(117)=> -18, chr(121)=> -18, ), chr(87)=> array ( chr(44)=> -37, chr(46)=> -37, chr(65)=> -18, chr(97)=> -18, chr(101)=> -18, chr(105)=> -8, ), chr(89)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -37, chr(65)=> -55, chr(97)=> -74, chr(101)=> -55, chr(105)=> -18, chr(111)=> -55, chr(112)=> -55, chr(113)=> -55, chr(117)=> -37, chr(118)=> -37, ), chr(102)=> array ( chr(146)=> 37, ), chr(114)=> array ( chr(44)=> -55, chr(46)=> -37, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(119)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(121)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(145)=> array ( chr(145)=> -37, ), chr(146)=> array ( chr(115)=> -18, chr(146)=> -37, ), ); + +?> \ No newline at end of file diff --git a/include/fpdf/font/symbol.php b/include/mpdf/font/csymbol.php similarity index 96% rename from include/fpdf/font/symbol.php rename to include/mpdf/font/csymbol.php index 43b50e4511f32eb8b3e5b2a5796cd5212f7e6c79..771052a77375e0ed18e495d612e1b3327d07daec 100755 --- a/include/fpdf/font/symbol.php +++ b/include/mpdf/font/csymbol.php @@ -1,5 +1,5 @@ <?php -$fpdf_charwidths['symbol']=array( +$cw=array( chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549, ','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722, @@ -12,4 +12,10 @@ $fpdf_charwidths['symbol']=array( chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042, chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329, chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0); -?> + +$desc=array('FontBBox'=>'[-180 -293 1090 1010]'); +$up=-100; +$ut=50; + + +?> \ No newline at end of file diff --git a/include/fpdf/font/times.php b/include/mpdf/font/ctimes.php similarity index 61% rename from include/fpdf/font/times.php rename to include/mpdf/font/ctimes.php index 837c706e08d966b1109bc6a7709bd4364a96b037..76f28d872ec7c37049a94b9d3ce08af9db414534 100755 --- a/include/fpdf/font/times.php +++ b/include/mpdf/font/ctimes.php @@ -1,5 +1,5 @@ <?php -$fpdf_charwidths['times']=array( +$cw=array( chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564, ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722, @@ -12,4 +12,10 @@ $fpdf_charwidths['times']=array( chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500); -?> + +$desc=array('Ascent'=>683,'Descent'=>-217,'CapHeight'=>662,'FontBBox'=>'[-168 -218 1000 898]'); +$up=-100; +$ut=50; +$kerninfo=array ( chr(49)=> array ( chr(49)=> -37, ), chr(65)=> array ( chr(84)=> -110, chr(86)=> -128, chr(87)=> -80, chr(89)=> -91, chr(118)=> -74, chr(119)=> -91, chr(121)=> -91, chr(146)=> -110, ), chr(70)=> array ( chr(44)=> -80, chr(46)=> -80, chr(65)=> -74, ), chr(76)=> array ( chr(84)=> -91, chr(86)=> -91, chr(87)=> -74, chr(89)=> -100, chr(121)=> -55, chr(146)=> -91, ), chr(80)=> array ( chr(44)=> -110, chr(46)=> -110, chr(65)=> -91, ), chr(82)=> array ( chr(84)=> -60, chr(86)=> -80, chr(87)=> -55, chr(89)=> -55, chr(121)=> -40, ), chr(84)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -49, chr(65)=> -80, chr(79)=> -18, chr(97)=> -69, chr(99)=> -69, chr(101)=> -69, chr(105)=> -35, chr(111)=> -69, chr(114)=> -35, chr(115)=> -69, chr(117)=> -35, chr(119)=> -69, chr(121)=> -69, ), chr(86)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -74, chr(65)=> -128, chr(97)=> -110, chr(101)=> -110, chr(105)=> -60, chr(111)=> -128, chr(114)=> -60, chr(117)=> -60, chr(121)=> -110, ), chr(87)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -37, chr(65)=> -110, chr(97)=> -80, chr(101)=> -80, chr(105)=> -40, chr(111)=> -80, chr(114)=> -40, chr(117)=> -40, chr(121)=> -60, ), chr(89)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -91, chr(65)=> -110, chr(97)=> -100, chr(101)=> -100, chr(105)=> -55, chr(111)=> -100, chr(112)=> -91, chr(113)=> -110, chr(117)=> -110, chr(118)=> -100, ), chr(102)=> array ( chr(102)=> -18, chr(146)=> 55, ), chr(114)=> array ( chr(44)=> -40, chr(46)=> -55, chr(103)=> -18, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -64, chr(46)=> -64, ), chr(119)=> array ( chr(44)=> -64, chr(46)=> -64, ), chr(121)=> array ( chr(44)=> -64, chr(46)=> -64, ), chr(145)=> array ( chr(145)=> -74, ), chr(146)=> array ( chr(115)=> -55, chr(116)=> -18, chr(146)=> -74, ), ); + +?> \ No newline at end of file diff --git a/include/fpdf/font/timesb.php b/include/mpdf/font/ctimesb.php similarity index 59% rename from include/fpdf/font/timesb.php rename to include/mpdf/font/ctimesb.php index 09cff86ac4a8c4ac25ce3bf8eadfb65f0ba39d78..ca4d2b10572e04c43a7713687d0f594bab88feaf 100755 --- a/include/fpdf/font/timesb.php +++ b/include/mpdf/font/ctimesb.php @@ -1,5 +1,5 @@ <?php -$fpdf_charwidths['timesB']=array( +$cw=array( chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722, @@ -12,4 +12,10 @@ $fpdf_charwidths['timesB']=array( chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); -?> + +$desc=array('Ascent'=>683,'Descent'=>-217,'CapHeight'=>676,'FontBBox'=>'[-168 -218 1000 935]'); +$up=-100; +$ut=50; +$kerninfo=array ( chr(49)=> array ( chr(49)=> -55, ), chr(65)=> array ( chr(84)=> -74, chr(86)=> -128, chr(87)=> -110, chr(89)=> -91, chr(118)=> -74, chr(119)=> -74, chr(121)=> -74, chr(146)=> -74, ), chr(70)=> array ( chr(44)=> -91, chr(46)=> -91, chr(65)=> -74, ), chr(76)=> array ( chr(84)=> -91, chr(86)=> -91, chr(87)=> -91, chr(89)=> -91, chr(121)=> -55, chr(146)=> -91, ), chr(80)=> array ( chr(44)=> -91, chr(46)=> -91, chr(65)=> -74, ), chr(82)=> array ( chr(84)=> -35, chr(86)=> -35, chr(87)=> -35, chr(89)=> -35, chr(121)=> -35, ), chr(84)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -74, chr(65)=> -74, chr(79)=> -18, chr(97)=> -91, chr(99)=> -91, chr(101)=> -91, chr(105)=> -18, chr(111)=> -91, chr(114)=> -74, chr(115)=> -91, chr(117)=> -91, chr(119)=> -74, chr(121)=> -74, ), chr(86)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -91, chr(65)=> -128, chr(79)=> -20, chr(97)=> -91, chr(101)=> -91, chr(105)=> -37, chr(111)=> -91, chr(114)=> -74, chr(117)=> -91, chr(121)=> -91, ), chr(87)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -55, chr(65)=> -110, chr(97)=> -55, chr(101)=> -55, chr(105)=> -18, chr(111)=> -55, chr(114)=> -18, chr(117)=> -18, chr(121)=> -37, ), chr(89)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -91, chr(65)=> -91, chr(97)=> -110, chr(101)=> -110, chr(105)=> -37, chr(111)=> -110, chr(112)=> -91, chr(113)=> -110, chr(117)=> -91, chr(118)=> -110, ), chr(102)=> array ( chr(102)=> 0, chr(146)=> 55, ), chr(114)=> array ( chr(44)=> -91, chr(46)=> -91, chr(99)=> -18, chr(101)=> -18, chr(104)=> 0, chr(111)=> -18, chr(113)=> -18, chr(116)=> 0, chr(119)=> 0, chr(120)=> 0, chr(121)=> 0, chr(122)=> 0, chr(146)=> 18, ), chr(118)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(119)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(121)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(145)=> array ( chr(145)=> -74, ), chr(146)=> array ( chr(115)=> -37, chr(146)=> -74, ), ); + +?> \ No newline at end of file diff --git a/include/fpdf/font/timesbi.php b/include/mpdf/font/ctimesbi.php similarity index 61% rename from include/fpdf/font/timesbi.php rename to include/mpdf/font/ctimesbi.php index b4e38d763b5b780228ae0141b66fe58b88a9ac47..c7c7fc2e63155ce27855677e0990c23bcd50039a 100755 --- a/include/fpdf/font/timesbi.php +++ b/include/mpdf/font/ctimesbi.php @@ -1,5 +1,5 @@ <?php -$fpdf_charwidths['timesBI']=array( +$cw=array( chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667, @@ -12,4 +12,10 @@ $fpdf_charwidths['timesBI']=array( chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444); -?> + +$desc=array('Ascent'=>683,'Descent'=>-217,'CapHeight'=>669,'FontBBox'=>'[-200 -218 996 921]'); +$up=-100; +$ut=50; +$kerninfo=array ( chr(49)=> array ( chr(49)=> -55, ), chr(65)=> array ( chr(84)=> -55, chr(86)=> -74, chr(87)=> -91, chr(89)=> -55, chr(118)=> -74, chr(119)=> -74, chr(121)=> -74, chr(146)=> -74, ), chr(70)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -91, ), chr(76)=> array ( chr(84)=> -18, chr(86)=> -37, chr(87)=> -37, chr(89)=> -37, chr(121)=> -37, chr(146)=> -55, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(82)=> array ( chr(86)=> -18, chr(87)=> -18, chr(89)=> -18, chr(121)=> -18, ), chr(84)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -74, chr(65)=> -55, chr(79)=> -18, chr(97)=> -91, chr(99)=> -91, chr(101)=> -91, chr(105)=> -37, chr(111)=> -91, chr(114)=> -37, chr(115)=> -91, chr(117)=> -37, chr(119)=> -37, chr(121)=> -37, ), chr(86)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -74, chr(65)=> -74, chr(97)=> -110, chr(101)=> -110, chr(105)=> -55, chr(111)=> -110, chr(114)=> -55, chr(117)=> -55, chr(121)=> -74, ), chr(87)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -55, chr(65)=> -74, chr(97)=> -74, chr(101)=> -74, chr(105)=> -37, chr(111)=> -74, chr(114)=> -74, chr(117)=> -55, chr(121)=> -55, ), chr(89)=> array ( chr(44)=> -91, chr(46)=> -74, chr(58)=> -91, chr(65)=> -74, chr(97)=> -91, chr(101)=> -110, chr(105)=> -55, chr(111)=> -110, chr(112)=> -74, chr(113)=> -110, chr(117)=> -91, chr(118)=> -91, ), chr(102)=> array ( chr(102)=> -18, chr(146)=> 55, ), chr(114)=> array ( chr(44)=> -55, chr(46)=> -55, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(119)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(121)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(145)=> array ( chr(145)=> -74, ), chr(146)=> array ( chr(115)=> -74, chr(116)=> -37, chr(146)=> -74, ), ); + +?> \ No newline at end of file diff --git a/include/fpdf/font/timesi.php b/include/mpdf/font/ctimesi.php similarity index 59% rename from include/fpdf/font/timesi.php rename to include/mpdf/font/ctimesi.php index 0ba2b7773d84511a1e5d4b3b82d6d697e43d9a7c..2b959c821de6b210ac721a5b6194f70fb20fd0b8 100755 --- a/include/fpdf/font/timesi.php +++ b/include/mpdf/font/ctimesi.php @@ -1,5 +1,5 @@ <?php -$fpdf_charwidths['timesI']=array( +$cw=array( chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675, ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611, @@ -12,4 +12,10 @@ $fpdf_charwidths['timesI']=array( chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444); -?> + +$desc=array('Ascent'=>683,'Descent'=>-217,'CapHeight'=>653,'FontBBox'=>'[-169 -217 1010 883]'); +$up=-100; +$ut=50; +$kerninfo=array ( chr(49)=> array ( chr(49)=> -74, ), chr(65)=> array ( chr(84)=> -37, chr(86)=> -49, chr(87)=> -37, chr(89)=> -55, chr(118)=> -55, chr(119)=> -55, chr(121)=> -55, chr(146)=> -37, ), chr(70)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -128, ), chr(76)=> array ( chr(84)=> -20, chr(86)=> -37, chr(87)=> -37, chr(89)=> -20, chr(121)=> -29, chr(146)=> -37, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -128, ), chr(82)=> array ( chr(84)=> 0, chr(86)=> -18, chr(87)=> -18, chr(89)=> -18, chr(121)=> -18, ), chr(84)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -55, chr(65)=> -74, chr(79)=> -18, chr(97)=> -91, chr(99)=> -91, chr(101)=> -91, chr(105)=> -55, chr(111)=> -91, chr(114)=> -55, chr(115)=> -91, chr(117)=> -55, chr(119)=> -74, chr(121)=> -74, ), chr(86)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -64, chr(65)=> -74, chr(79)=> -29, chr(97)=> -110, chr(101)=> -110, chr(105)=> -74, chr(111)=> -110, chr(114)=> -74, chr(117)=> -74, chr(121)=> -91, ), chr(87)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -64, chr(65)=> -69, chr(97)=> -91, chr(101)=> -91, chr(105)=> -55, chr(111)=> -91, chr(114)=> -55, chr(117)=> -55, chr(121)=> -91, ), chr(89)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -64, chr(65)=> -69, chr(97)=> -91, chr(101)=> -91, chr(105)=> -74, chr(111)=> -91, chr(112)=> -91, chr(113)=> -110, chr(117)=> -91, chr(118)=> -91, ), chr(102)=> array ( chr(146)=> 91, ), chr(114)=> array ( chr(44)=> -110, chr(46)=> -110, chr(99)=> -37, chr(100)=> -37, chr(101)=> -37, chr(103)=> -37, chr(104)=> -18, chr(111)=> -37, chr(113)=> -37, chr(114)=> 0, chr(116)=> 0, chr(117)=> 0, chr(118)=> 0, chr(119)=> 0, chr(120)=> 0, chr(121)=> 0, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(119)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(121)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(145)=> array ( chr(145)=> -110, ), chr(146)=> array ( chr(115)=> -128, chr(116)=> -110, chr(146)=> -110, ), ); + +?> \ No newline at end of file diff --git a/include/fpdf/font/zapfdingbats.php b/include/mpdf/font/czapfdingbats.php similarity index 96% rename from include/fpdf/font/zapfdingbats.php rename to include/mpdf/font/czapfdingbats.php index 1f926a8c3f01ac8ad19d61e7e84cfceb5d4db727..099d34b4e2caec0be1f0fe5271b1bbc4eecf60a0 100755 --- a/include/fpdf/font/zapfdingbats.php +++ b/include/mpdf/font/czapfdingbats.php @@ -1,5 +1,5 @@ <?php -$fpdf_charwidths['zapfdingbats']=array( +$cw=array( chr(0)=>0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0, chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939, ','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692, @@ -12,4 +12,10 @@ $fpdf_charwidths['zapfdingbats']=array( chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918, chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874, chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0); -?> + +$desc=array('FontBBox'=>'[-1 -143 981 820]'); +$up=-100; +$ut=50; + + +?> \ No newline at end of file diff --git a/include/mpdf/includes/CJKdata.php b/include/mpdf/includes/CJKdata.php new file mode 100755 index 0000000000000000000000000000000000000000..15f34d31c69bdb19dfeed0e2669d512c9e0804ea --- /dev/null +++ b/include/mpdf/includes/CJKdata.php @@ -0,0 +1,101 @@ +<?php +// mPDF 2.5 + +// BIG 5 +$cw = array( + 32 => 250, 33 => 250, 34 => 408, 35 => 668, 36 => 490, 37 => 875, 38 => 698, 39 => 250, 40 => 240, 41 => 240, + 42 => 417, 43 => 667, 44 => 250, 45 => 313, 46 => 250, 47 => 520, 48 => 500, 49 => 500, 50 => 500, 51 => 500, + 52 => 500, 53 => 500, 54 => 500, 55 => 500, 56 => 500, 57 => 500, 58 => 250, 59 => 250, 60 => 667, 61 => 667, + 62 => 667, 63 => 396, 64 => 921, 65 => 677, 66 => 615, 67 => 719, 68 => 760, 69 => 625, 70 => 552, 71 => 771, + 72 => 802, 73 => 354, 74 => 354, 75 => 781, 76 => 604, 77 => 927, 78 => 750, 79 => 823, 80 => 563, 81 => 823, + 82 => 729, 83 => 542, 84 => 698, 85 => 771, 86 => 729, 87 => 948, 88 => 771, 89 => 677, 90 => 635, 91 => 344, + 92 => 520, 93 => 344, 94 => 469, 95 => 500, 96 => 250, 97 => 469, 98 => 521, 99 => 427, 100 => 521, 101 => 438, + 102 => 271, 103 => 469, 104 => 531, 105 => 250, 106 => 250, 107 => 458, 108 => 240, 109 => 802, 110 => 531, 111 => 500, + 112 => 521, 113 => 521, 114 => 365, 115 => 333, 116 => 292, 117 => 521, 118 => 458, 119 => 677, 120 => 479, 121 => 458, + 122 => 427, 123 => 480, 124 => 496, 125 => 480, 126 => 667, + 17601 => 500, +); +$this->Big5_widths=$cw; + + +// GB +$cw = array( + 32 => 207, 33 => 270, 34 => 342, 35 => 467, 36 => 462, 37 => 797, 38 => 710, 39 => 239, 40 => 374, 41 => 374, + 42 => 423, 43 => 605, 44 => 238, 45 => 375, 46 => 238, 47 => 334, 48 => 462, 49 => 462, 50 => 462, 51 => 462, + 52 => 462, 53 => 462, 54 => 462, 55 => 462, 56 => 462, 57 => 462, 58 => 238, 59 => 238, 60 => 605, 61 => 605, + 62 => 605, 63 => 344, 64 => 748, 65 => 684, 66 => 560, 67 => 695, 68 => 739, 69 => 563, 70 => 511, 71 => 729, + 72 => 793, 73 => 318, 74 => 312, 75 => 666, 76 => 526, 77 => 896, 78 => 758, 79 => 772, 80 => 544, 81 => 772, + 82 => 628, 83 => 465, 84 => 607, 85 => 753, 86 => 711, 87 => 972, 88 => 647, 89 => 620, 90 => 607, 91 => 374, + 92 => 333, 93 => 374, 94 => 606, 95 => 500, 96 => 239, 97 => 417, 98 => 503, 99 => 427, 100 => 529, 101 => 415, + 102 => 264, 103 => 444, 104 => 518, 105 => 241, 106 => 230, 107 => 495, 108 => 228, 109 => 793, 110 => 527, 111 => 524, + 112 => 524, 113 => 504, 114 => 338, 115 => 336, 116 => 277, 117 => 517, 118 => 450, 119 => 652, 120 => 466, 121 => 452, + 122 => 407, 123 => 370, 124 => 258, 125 => 370, 126 => 605, +); +$this->GB_widths=$cw; + +// Japanese +$cw = array( + 32 => 278, 33 => 299, 34 => 353, 35 => 614, 36 => 614, 37 => 721, 38 => 735, 39 => 216, 40 => 323, 41 => 323, + 42 => 449, 43 => 529, 44 => 219, 45 => 306, 46 => 219, 47 => 453, 48 => 614, 49 => 614, 50 => 614, 51 => 614, + 52 => 614, 53 => 614, 54 => 614, 55 => 614, 56 => 614, 57 => 614, 58 => 219, 59 => 219, 60 => 529, 61 => 529, + 62 => 529, 63 => 486, 64 => 744, 65 => 646, 66 => 604, 67 => 617, 68 => 681, 69 => 567, 70 => 537, 71 => 647, + 72 => 738, 73 => 320, 74 => 433, 75 => 637, 76 => 566, 77 => 904, 78 => 710, 79 => 716, 80 => 605, 81 => 716, + 82 => 623, 83 => 517, 84 => 601, 85 => 690, 86 => 668, 87 => 990, 88 => 681, 89 => 634, 90 => 578, 91 => 316, + 92 => 614, 93 => 316, 94 => 529, 95 => 500, 96 => 387, 97 => 509, 98 => 566, 99 => 478, 100 => 565, 101 => 503, + 102 => 337, 103 => 549, 104 => 580, 105 => 275, 106 => 266, 107 => 544, 108 => 276, 109 => 854, 110 => 579, 111 => 550, + 112 => 578, 113 => 566, 114 => 410, 115 => 444, 116 => 340, 117 => 575, 118 => 512, 119 => 760, 120 => 503, 121 => 529, + 122 => 453, 123 => 326, 124 => 380, 125 => 326, 126 => 387, 127 => 216, 128 => 453, 129 => 216, 130 => 380, 131 => 529, + 132 => 299, 133 => 614, 134 => 614, 135 => 265, 136 => 614, 137 => 475, 138 => 614, 139 => 353, 140 => 451, 141 => 291, + 142 => 291, 143 => 588, 144 => 589, 145 => 500, 146 => 476, 147 => 476, 148 => 219, 149 => 494, 150 => 452, 151 => 216, + 152 => 353, 153 => 353, 154 => 451, 156 => 1075, 157 => 486, 158 => 387, 159 => 387, 160 => 387, 161 => 387, + 162 => 387, 163 => 387, 164 => 387, 165 => 387, 166 => 387, 167 => 387, 168 => 387, 170 => 880, 171 => 448, + 172 => 566, 173 => 716, 174 => 903, 175 => 460, 176 => 805, 177 => 275, 178 => 276, 179 => 550, 180 => 886, 181 => 582, + 182 => 529, 183 => 738, 184 => 529, 185 => 738, 186 => 357, 187 => 529, 188 => 406, 189 => 406, 190 => 575, 191 => 406, + 192 => 934, 193 => 934, 194 => 934, 195 => 646, 196 => 646, 197 => 646, 198 => 646, 199 => 646, 200 => 646, 201 => 617, + 202 => 567, 203 => 567, 204 => 567, 205 => 567, 206 => 320, 207 => 320, 208 => 320, 209 => 320, 210 => 681, 211 => 710, + 212 => 716, 213 => 716, 214 => 716, 215 => 716, 216 => 716, 217 => 529, 218 => 690, 219 => 690, 220 => 690, 221 => 690, + 222 => 634, 223 => 605, 224 => 509, 225 => 509, 226 => 509, 227 => 509, 228 => 509, 229 => 509, 230 => 478, 231 => 503, + 232 => 503, 233 => 503, 234 => 503, 235 => 275, 236 => 275, 237 => 275, 238 => 275, 239 => 550, 240 => 579, 241 => 550, + 242 => 550, 243 => 550, 244 => 550, 245 => 550, 246 => 529, 247 => 575, 248 => 575, 249 => 575, 250 => 575, 251 => 529, + 252 => 578, 253 => 529, 254 => 517, 255 => 634, 256 => 578, 257 => 445, 258 => 444, 259 => 842, 260 => 453, 261 => 614, +); + + +$_cr = array( + array(231, 632, 500), // half-width + array(8718, 8718, 500), + array(9738, 9757, 250), // quarter-width + array(9758, 9778, 333), // third-width + array(12063, 12087, 500), +); +foreach($_cr as $_r) { + for($i = $_r[0]; $i <= $_r[1]; $i++) { + $cw[$i+31] = $_r[2]; + } +} +$this->SJIS_widths=$cw; + +// Korean +$cw = array( + 32 => 333, 33 => 416, 34 => 416, 35 => 833, 36 => 625, 37 => 916, 38 => 833, 39 => 250, 40 => 500, 41 => 500, + 42 => 500, 43 => 833, 44 => 291, 45 => 450, 46 => 291, 47 => 375, 48 => 625, 49 => 625, 50 => 625, 51 => 625, + 52 => 625, 53 => 625, 54 => 625, 55 => 625, 56 => 625, 57 => 625, 58 => 333, 59 => 333, 60 => 833, 61 => 833, + 62 => 916, 63 => 500, 64 => 1000, 65 => 791, 66 => 708, 67 => 708, 68 => 750, 69 => 708, 70 => 666, 71 => 750, + 72 => 791, 73 => 375, 74 => 500, 75 => 791, 76 => 666, 77 => 916, 78 => 791, 79 => 750, 80 => 666, 81 => 750, + 82 => 708, 83 => 666, 84 => 791, 85 => 791, 86 => 750, 87 => 1000, 88 => 708, 89 => 708, 90 => 666, 91 => 500, + 92 => 375, 93 => 500, 94 => 500, 95 => 500, 96 => 333, 97 => 541, 98 => 583, 99 => 541, 100 => 583, 101 => 583, + 102 => 375, 103 => 583, 104 => 583, 105 => 291, 106 => 333, 107 => 583, 108 => 291, 109 => 875, 110 => 583, 111 => 583, + 112 => 583, 113 => 583, 114 => 458, 115 => 541, 116 => 375, 117 => 583, 118 => 583, 119 => 833, 120 => 625, 121 => 625, + 122 => 500, 123 => 583, 124 => 583, 125 => 583, 126 => 750, +); +$_cr = array( + array(8094, 8190, 500) +); +foreach($_cr as $_r) { + for($i = $_r[0]; $i <= $_r[1]; $i++) { + $cw[$i+31] = $_r[2]; + } +} +$this->UHC_widths=$cw; + +?> \ No newline at end of file diff --git a/include/mpdf/includes/functions.php b/include/mpdf/includes/functions.php new file mode 100755 index 0000000000000000000000000000000000000000..91e75da4a8ef1ad076f9c56055d22009e62ad275 --- /dev/null +++ b/include/mpdf/includes/functions.php @@ -0,0 +1,126 @@ +<?php + +// mPDF 5.6.23 +function array_insert(&$array, $value, $offset) { + if (is_array($array)) { + $array = array_values($array); + $offset = intval($offset); + if ($offset < 0 || $offset >= count($array)) { array_push($array, $value); } + else if ($offset == 0) { array_unshift($array, $value); } + else { + $temp = array_slice($array, 0, $offset); + array_push($temp, $value); + $array = array_slice($array, $offset); + $array = array_merge($temp, $array); + } + } + else { $array = array($value); } + return count($array); +} + +function urlencode_part($url) { // mPDF 5.6.02 + if (!preg_match('/^[a-z]+:\/\//i',$url)) { return $url; } + $file=$url; + $query=''; + if (preg_match('/[?]/',$url)) { + $bits = preg_split('/[?]/',$url,2); + $file=$bits[0]; + $query='?'.$bits[1]; + } + $file = str_replace(array(" ","!","$","&","'","(",")","*","+",",",";","="),array("%20","%21","%24","%26","%27","%28","%29","%2A","%2B","%2C","%3B","%3D"),$file); + return $file.$query; +} + + +function _strspn($str1, $str2, $start=null, $length=null) { + $numargs = func_num_args(); + if ($numargs == 2) { + return strspn($str1, $str2); + } + else if ($numargs == 3) { + return strspn($str1, $str2, $start); + } + else { + return strspn($str1, $str2, $start, $length); + } +} + + +function _strcspn($str1, $str2, $start=null, $length=null) { + $numargs = func_num_args(); + if ($numargs == 2) { + return strcspn($str1, $str2); + } + else if ($numargs == 3) { + return strcspn($str1, $str2, $start); + } + else { + return strcspn($str1, $str2, $start, $length); + } +} + +function _fgets (&$h, $force=false) { + $startpos = ftell($h); + $s = fgets($h, 1024); + if ($force && preg_match("/^([^\r\n]*[\r\n]{1,2})(.)/",trim($s), $ns)) { + $s = $ns[1]; + fseek($h,$startpos+strlen($s)); + } + return $s; +} + + +// For PHP4 compatability +if(!function_exists('str_ireplace')) { + function str_ireplace($search,$replace,$subject) { + $search = preg_quote($search, "/"); + return preg_replace("/".$search."/i", $replace, $subject); + } +} +if(!function_exists('htmlspecialchars_decode')) { + function htmlspecialchars_decode ($str) { + return strtr($str, array_flip(get_html_translation_table(HTML_SPECIALCHARS))); + } +} + +function PreparePreText($text,$ff='//FF//') { + $text = htmlspecialchars($text); + if ($ff) { $text = str_replace($ff,'</pre><formfeed /><pre>',$text); } + return ('<pre>'.$text.'</pre>'); +} + +if(!function_exists('strcode2utf')){ + function strcode2utf($str,$lo=true) { + //converts all the &#nnn; and &#xhhh; in a string to Unicode + if ($lo) { $lo = 1; } else { $lo = 0; } + $str = preg_replace('/\&\#([0-9]+)\;/me', "code2utf('\\1',{$lo})",$str); + $str = preg_replace('/\&\#x([0-9a-fA-F]+)\;/me', "codeHex2utf('\\1',{$lo})",$str); + return $str; + } +} + +if(!function_exists('code2utf')){ + function code2utf($num,$lo=true){ + //Returns the utf string corresponding to the unicode value + if ($num<128) { + if ($lo) return chr($num); + else return '&#'.$num.';'; + } + if ($num<2048) return chr(($num>>6)+192).chr(($num&63)+128); + if ($num<65536) return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128); + if ($num<2097152) return chr(($num>>18)+240).chr((($num>>12)&63)+128).chr((($num>>6)&63)+128) .chr(($num&63)+128); + return '?'; + } +} + + +if(!function_exists('codeHex2utf')){ + function codeHex2utf($hex,$lo=true){ + $num = hexdec($hex); + if (($num<128) && !$lo) return '&#x'.$hex.';'; + return code2utf($num,$lo); + } +} + + +?> \ No newline at end of file diff --git a/include/mpdf/includes/ind_bn_1_001.volt.php b/include/mpdf/includes/ind_bn_1_001.volt.php new file mode 100755 index 0000000000000000000000000000000000000000..a1031c28ac453bdb937e5d67172029009ef3b481 --- /dev/null +++ b/include/mpdf/includes/ind_bn_1_001.volt.php @@ -0,0 +1,3164 @@ +<?php + $volt = array ( + 0 => + array ( + 'match' => '0995 09CD 09B7', + 'replace' => 'E002', + ), + 1 => + array ( + 'match' => '099C 09CD 099E', + 'replace' => 'E003', + ), + 2 => + array ( + 'match' => '09CD 200D', + 'replace' => '007E', + ), + 3 => + array ( + 'match' => '09CD 200C', + 'replace' => '200C', + ), + 4 => + array ( + 'match' => '200D 09CD', + 'replace' => '00D0', + ), + 5 => + array ( + 'match' => '((0995|0996|0997|0998|0999|099A|099B|099C|099D|099E|099F|09A0|09A1|09A2|09A3|09A4|09A5|09A6|09A7|09A8|09AA|09AB|09AC|09AD|09AE|09AF|09B0|09B2|09B6|09B7|09B8|09B9)) 09CD 09B0', + 'replace' => '\\1 E1CD', + ), + 6 => + array ( + 'match' => '((0995|0996|0997|0998|0999|099A|099B|099C|099D|099E|099F|09A0|09A1|09A2|09A3|09A4|09A5|09A6|09A7|09A8|09AA|09AB|09AC|09AD|09AE|09AF|09B0|09B2|09B6|09B7|09B8|09B9)) 09B0 09CD', + 'replace' => '\\1 E068', + ), + 7 => + array ( + 'match' => '((09BE|09C0|09C1|09C2|09C3|09C4|09CB|09CC|09D7|09BC)) 09CD 09B0', + 'replace' => '\\1 E1CD', + ), + 8 => + array ( + 'match' => '((09BE|09C0|09C1|09C2|09C3|09C4|09CB|09CC|09D7|09BC)) 09B0 09CD', + 'replace' => '\\1 E068', + ), + 9 => + array ( + 'match' => '(0020) 09CD 09B0', + 'replace' => '\\1 E1CD', + ), + 10 => + array ( + 'match' => '(0020) 09B0 09CD', + 'replace' => '\\1 E068', + ), + 11 => + array ( + 'match' => '(25CC) 09CD 09B0', + 'replace' => '\\1 E1CD', + ), + 12 => + array ( + 'match' => '(25CC) 09B0 09CD', + 'replace' => '\\1 E068', + ), + 13 => + array ( + 'match' => '((09B0|E042|E043|E044|E048|E049|E04E|E04F|E050|E051|E052|E053|E054|E056|E057|E058|E059|E05B|E05C|E05D|E05E|E062|E063|E064|E065|E0A8|E0BC|E0EF|E0FD|E101|E11C|E11E|E14F|E151|E152|E164|E17D|E18E|E190)) 09C1', + 'replace' => '\\1 E03C', + ), + 14 => + array ( + 'match' => '((09B0|E042|E043|E044|E048|E049|E04E|E04F|E050|E051|E052|E053|E054|E056|E057|E058|E059|E05B|E05C|E05D|E05E|E062|E063|E064|E065|E0A8|E0BC|E0EF|E0FD|E101|E11C|E11E|E14F|E151|E152|E164|E17D|E18E|E190)) 09C2', + 'replace' => '\\1 E03E', + ), + 15 => + array ( + 'match' => '((E045|E046|E047|E04A|E04B|E04C|E04D|E05F|E060|E061|E07C|E07D|E0B1|E0E8|E0E9|E11A|E11B|E163|E17B|E18D)) 09C1', + 'replace' => '\\1 E03D', + ), + 16 => + array ( + 'match' => 'E068 0981', + 'replace' => 'E069', + ), + 17 => + array ( + 'match' => '0995 09CD 0995', + 'replace' => 'E06A', + ), + 18 => + array ( + 'match' => '0995 09CD 0996', + 'replace' => 'E06B', + ), + 19 => + array ( + 'match' => '0995 09CD 099A', + 'replace' => 'E06C', + ), + 20 => + array ( + 'match' => '0995 09CD 099B', + 'replace' => 'E06D', + ), + 21 => + array ( + 'match' => '0995 09CD 099F', + 'replace' => 'E06E', + ), + 22 => + array ( + 'match' => '0995 09CD 09A0', + 'replace' => 'E06F', + ), + 23 => + array ( + 'match' => '0995 09CD 09A3', + 'replace' => 'E070', + ), + 24 => + array ( + 'match' => '0995 09CD 09A4', + 'replace' => 'E071', + ), + 25 => + array ( + 'match' => '0995 09CD 09A5', + 'replace' => 'E072', + ), + 26 => + array ( + 'match' => '0995 09CD 09A8', + 'replace' => 'E073', + ), + 27 => + array ( + 'match' => '0995 09CD 09AA', + 'replace' => 'E074', + ), + 28 => + array ( + 'match' => '0995 09CD 09AB', + 'replace' => 'E075', + ), + 29 => + array ( + 'match' => '0995 09CD 09AE', + 'replace' => 'E076', + ), + 30 => + array ( + 'match' => '0995 09CD 09B2', + 'replace' => 'E077', + ), + 31 => + array ( + 'match' => '0995 09CD 09AC', + 'replace' => 'E078', + ), + 32 => + array ( + 'match' => '0995 09CD 09B6', + 'replace' => 'E079', + ), + 33 => + array ( + 'match' => '0995 09CD 09B8', + 'replace' => 'E07A', + ), + 34 => + array ( + 'match' => '0996 09CD 0996', + 'replace' => 'E083', + ), + 35 => + array ( + 'match' => '0996 09CD 09A4', + 'replace' => 'E084', + ), + 36 => + array ( + 'match' => '0996 09CD 09A8', + 'replace' => 'E085', + ), + 37 => + array ( + 'match' => '0996 09CD 09AE', + 'replace' => 'E086', + ), + 38 => + array ( + 'match' => '0996 09CD 09AC', + 'replace' => 'E087', + ), + 39 => + array ( + 'match' => '0997 09CD 0997', + 'replace' => 'E088', + ), + 40 => + array ( + 'match' => '0997 09CD 0998', + 'replace' => 'E089', + ), + 41 => + array ( + 'match' => '0997 09CD 099C', + 'replace' => 'E08A', + ), + 42 => + array ( + 'match' => '0997 09CD 099D', + 'replace' => 'E08B', + ), + 43 => + array ( + 'match' => '0997 09CD 09A1', + 'replace' => 'E08C', + ), + 44 => + array ( + 'match' => '0997 09CD 09A2', + 'replace' => 'E08D', + ), + 45 => + array ( + 'match' => '0997 09CD 09A3', + 'replace' => 'E08E', + ), + 46 => + array ( + 'match' => '0997 09CD 09A6', + 'replace' => 'E08F', + ), + 47 => + array ( + 'match' => '0997 09CD 09A7', + 'replace' => 'E090', + ), + 48 => + array ( + 'match' => '0997 09CD 09A8', + 'replace' => 'E091', + ), + 49 => + array ( + 'match' => '0997 09CD 09AB', + 'replace' => 'E092', + ), + 50 => + array ( + 'match' => '0997 09CD 09AC', + 'replace' => 'E093', + ), + 51 => + array ( + 'match' => '0997 09CD 09AD', + 'replace' => 'E094', + ), + 52 => + array ( + 'match' => '0997 09CD 09AE', + 'replace' => 'E095', + ), + 53 => + array ( + 'match' => '0997 09CD 09B2', + 'replace' => 'E096', + ), + 54 => + array ( + 'match' => '0998 09CD 09A8', + 'replace' => 'E099', + ), + 55 => + array ( + 'match' => '0998 09CD 09AE', + 'replace' => 'E09A', + ), + 56 => + array ( + 'match' => '0998 09CD 09AC', + 'replace' => 'E09B', + ), + 57 => + array ( + 'match' => '0999 09CD 0995', + 'replace' => 'E09C', + ), + 58 => + array ( + 'match' => '0999 09CD 0996', + 'replace' => 'E09D', + ), + 59 => + array ( + 'match' => '0999 09CD 0997', + 'replace' => 'E09E', + ), + 60 => + array ( + 'match' => '0999 09CD 0998', + 'replace' => 'E09F', + ), + 61 => + array ( + 'match' => '0999 09CD 09A8', + 'replace' => 'E0A0', + ), + 62 => + array ( + 'match' => '0999 09CD 09AD', + 'replace' => 'E0A1', + ), + 63 => + array ( + 'match' => '0999 09CD 09AE', + 'replace' => 'E0A2', + ), + 64 => + array ( + 'match' => '0999 09CD 09AC', + 'replace' => 'E0A3', + ), + 65 => + array ( + 'match' => '0999 09CD 09B6', + 'replace' => 'E0A4', + ), + 66 => + array ( + 'match' => '0999 09CD 09B7', + 'replace' => 'E0A5', + ), + 67 => + array ( + 'match' => '0999 09CD 09B9', + 'replace' => 'E0A6', + ), + 68 => + array ( + 'match' => '099A 09CD 099A', + 'replace' => 'E0AC', + ), + 69 => + array ( + 'match' => '099A 09CD 099B', + 'replace' => 'E0AD', + ), + 70 => + array ( + 'match' => '099A 09CD 099E', + 'replace' => 'E0AE', + ), + 71 => + array ( + 'match' => '099A 09CD 09AE', + 'replace' => 'E0AF', + ), + 72 => + array ( + 'match' => '099A 09CD 09AC', + 'replace' => 'E0B0', + ), + 73 => + array ( + 'match' => '099B 09CD 099B', + 'replace' => 'E0B4', + ), + 74 => + array ( + 'match' => '099B 09CD 09B2', + 'replace' => 'E0B5', + ), + 75 => + array ( + 'match' => '099B 09CD 09AC', + 'replace' => 'E0B6', + ), + 76 => + array ( + 'match' => '099C 09CD 099C', + 'replace' => 'E0B7', + ), + 77 => + array ( + 'match' => '099C 09CD 099D', + 'replace' => 'E0B8', + ), + 78 => + array ( + 'match' => '099C 09CD 09A6', + 'replace' => 'E0B9', + ), + 79 => + array ( + 'match' => '099C 09CD 09AC', + 'replace' => 'E0BA', + ), + 80 => + array ( + 'match' => '099C 09CD 09AE', + 'replace' => 'E0BB', + ), + 81 => + array ( + 'match' => '099D 09CD 099D', + 'replace' => 'E0BE', + ), + 82 => + array ( + 'match' => '099D 09CD 09AE', + 'replace' => 'E0BF', + ), + 83 => + array ( + 'match' => '099D 09CD 09AC', + 'replace' => 'E0C0', + ), + 84 => + array ( + 'match' => '099E 09CD 099A', + 'replace' => 'E0C1', + ), + 85 => + array ( + 'match' => '099E 09CD 099B', + 'replace' => 'E0C2', + ), + 86 => + array ( + 'match' => '099E 09CD 099C', + 'replace' => 'E0C3', + ), + 87 => + array ( + 'match' => '099E 09CD 099D', + 'replace' => 'E0C4', + ), + 88 => + array ( + 'match' => '099E 09CD 09B6', + 'replace' => 'E0C5', + ), + 89 => + array ( + 'match' => '099F 09CD 0995', + 'replace' => 'E0C6', + ), + 90 => + array ( + 'match' => '099F 09CD 0996', + 'replace' => 'E0C7', + ), + 91 => + array ( + 'match' => '099F 09CD 099A', + 'replace' => 'E0C8', + ), + 92 => + array ( + 'match' => '099F 09CD 099B', + 'replace' => 'E0C9', + ), + 93 => + array ( + 'match' => '099F 09CD 099F', + 'replace' => 'E0CA', + ), + 94 => + array ( + 'match' => '099F 09CD 09A0', + 'replace' => 'E0CB', + ), + 95 => + array ( + 'match' => '099F 09CD 09A4', + 'replace' => 'E0CC', + ), + 96 => + array ( + 'match' => '099F 09CD 09A5', + 'replace' => 'E0CD', + ), + 97 => + array ( + 'match' => '099F 09CD 09AA', + 'replace' => 'E0CE', + ), + 98 => + array ( + 'match' => '099F 09CD 09AB', + 'replace' => 'E0CF', + ), + 99 => + array ( + 'match' => '099F 09CD 09AC', + 'replace' => 'E0D0', + ), + 100 => + array ( + 'match' => '099F 09CD 09AE', + 'replace' => 'E0D1', + ), + 101 => + array ( + 'match' => '099F 09CD 09B6', + 'replace' => 'E0D2', + ), + 102 => + array ( + 'match' => '099F 09CD 09B7', + 'replace' => 'E0D3', + ), + 103 => + array ( + 'match' => '099F 09CD 09B8', + 'replace' => 'E0D4', + ), + 104 => + array ( + 'match' => '09A0 09CD 09A0', + 'replace' => 'E0D5', + ), + 105 => + array ( + 'match' => '09A0 09CD 09A3', + 'replace' => 'E0D6', + ), + 106 => + array ( + 'match' => '09A0 09CD 09AC', + 'replace' => 'E0D7', + ), + 107 => + array ( + 'match' => '09A1 09CD 0997', + 'replace' => 'E0D8', + ), + 108 => + array ( + 'match' => '09A1 09CD 09A1', + 'replace' => 'E0D9', + ), + 109 => + array ( + 'match' => '09A1 09CD 09A2', + 'replace' => 'E0DA', + ), + 110 => + array ( + 'match' => '09A1 09CD 09AE', + 'replace' => 'E0DB', + ), + 111 => + array ( + 'match' => '09A1 09CD 09AC', + 'replace' => 'E0DC', + ), + 112 => + array ( + 'match' => '09A2 09CD 09A2', + 'replace' => 'E0DD', + ), + 113 => + array ( + 'match' => '09A2 09CD 09A3', + 'replace' => 'E0DE', + ), + 114 => + array ( + 'match' => '09A2 09CD 09AC', + 'replace' => 'E0DF', + ), + 115 => + array ( + 'match' => '09A3 09CD 099F', + 'replace' => 'E0E0', + ), + 116 => + array ( + 'match' => '09A3 09CD 09A0', + 'replace' => 'E0E1', + ), + 117 => + array ( + 'match' => '09A3 09CD 09A1', + 'replace' => 'E0E2', + ), + 118 => + array ( + 'match' => '09A3 09CD 09A2', + 'replace' => 'E0E3', + ), + 119 => + array ( + 'match' => '09A3 09CD 09A3', + 'replace' => 'E0E4', + ), + 120 => + array ( + 'match' => '09A3 09CD 09AE', + 'replace' => 'E0E5', + ), + 121 => + array ( + 'match' => '09A3 09CD 09AC', + 'replace' => 'E0E6', + ), + 122 => + array ( + 'match' => '09A3 09CD 09B8', + 'replace' => 'E0E7', + ), + 123 => + array ( + 'match' => '09A4 09CD 09A4', + 'replace' => 'E0EA', + ), + 124 => + array ( + 'match' => '09A4 09CD 09A5', + 'replace' => 'E0EB', + ), + 125 => + array ( + 'match' => '09A4 09CD 09A8', + 'replace' => 'E0EC', + ), + 126 => + array ( + 'match' => '09A4 09CD 09AE', + 'replace' => 'E0ED', + ), + 127 => + array ( + 'match' => '09A4 09CD 09AC', + 'replace' => 'E0EE', + ), + 128 => + array ( + 'match' => '09A5 09CD 09A5', + 'replace' => 'E0F1', + ), + 129 => + array ( + 'match' => '09A5 09CD 09A8', + 'replace' => 'E0F2', + ), + 130 => + array ( + 'match' => '09A5 09CD 09AC', + 'replace' => 'E0F3', + ), + 131 => + array ( + 'match' => '09A6 09CD 0997', + 'replace' => 'E0F4', + ), + 132 => + array ( + 'match' => '09A6 09CD 0998', + 'replace' => 'E0F5', + ), + 133 => + array ( + 'match' => '09A6 09CD 09A6', + 'replace' => 'E0F6', + ), + 134 => + array ( + 'match' => '09A6 09CD 09A7', + 'replace' => 'E0F7', + ), + 135 => + array ( + 'match' => '09A6 09CD 09A8', + 'replace' => 'E0F8', + ), + 136 => + array ( + 'match' => '09A6 09CD 09AC', + 'replace' => 'E0F9', + ), + 137 => + array ( + 'match' => '09A6 09CD 09AE', + 'replace' => 'E0FB', + ), + 138 => + array ( + 'match' => '09A6 09CD 09AF', + 'replace' => 'E0FC', + ), + 139 => + array ( + 'match' => '09A7 09CD 09A7', + 'replace' => 'E102', + ), + 140 => + array ( + 'match' => '09A7 09CD 09A8', + 'replace' => 'E103', + ), + 141 => + array ( + 'match' => '09A7 09CD 09AE', + 'replace' => 'E104', + ), + 142 => + array ( + 'match' => '09A7 09CD 09AC', + 'replace' => 'E105', + ), + 143 => + array ( + 'match' => '09A8 09CD 0995', + 'replace' => 'E106', + ), + 144 => + array ( + 'match' => '09A8 09CD 0997', + 'replace' => 'E107', + ), + 145 => + array ( + 'match' => '09A8 09CD 099A', + 'replace' => 'E108', + ), + 146 => + array ( + 'match' => '09A8 09CD 099C', + 'replace' => 'E109', + ), + 147 => + array ( + 'match' => '09A8 09CD 099F', + 'replace' => 'E10A', + ), + 148 => + array ( + 'match' => '09A8 09CD 09A0', + 'replace' => 'E10B', + ), + 149 => + array ( + 'match' => '09A8 09CD 09A1', + 'replace' => 'E10C', + ), + 150 => + array ( + 'match' => '09A8 09CD 09A4', + 'replace' => 'E10D', + ), + 151 => + array ( + 'match' => '09A8 09CD 09A5', + 'replace' => 'E10E', + ), + 152 => + array ( + 'match' => '09A8 09CD 09A6', + 'replace' => 'E10F', + ), + 153 => + array ( + 'match' => '09A8 09CD 09A7', + 'replace' => 'E110', + ), + 154 => + array ( + 'match' => '09A8 09CD 09A8', + 'replace' => 'E111', + ), + 155 => + array ( + 'match' => '09A8 09CD 09AB', + 'replace' => 'E112', + ), + 156 => + array ( + 'match' => '09A8 09CD 09AD', + 'replace' => 'E113', + ), + 157 => + array ( + 'match' => '09A8 09CD 09AE', + 'replace' => 'E114', + ), + 158 => + array ( + 'match' => '09A8 09CD 09AF', + 'replace' => 'E115', + ), + 159 => + array ( + 'match' => '09A8 09CD 09AC', + 'replace' => 'E116', + ), + 160 => + array ( + 'match' => '09A8 09CD 09B6', + 'replace' => 'E117', + ), + 161 => + array ( + 'match' => '09A8 09CD 09B7', + 'replace' => 'E118', + ), + 162 => + array ( + 'match' => '09A8 09CD 09B8', + 'replace' => 'E119', + ), + 163 => + array ( + 'match' => '09AA 09CD 0995', + 'replace' => 'E122', + ), + 164 => + array ( + 'match' => '09AA 09CD 0996', + 'replace' => 'E123', + ), + 165 => + array ( + 'match' => '09AA 09CD 099A', + 'replace' => 'E124', + ), + 166 => + array ( + 'match' => '09AA 09CD 099B', + 'replace' => 'E125', + ), + 167 => + array ( + 'match' => '09AA 09CD 099F', + 'replace' => 'E126', + ), + 168 => + array ( + 'match' => '09AA 09CD 09A0', + 'replace' => 'E127', + ), + 169 => + array ( + 'match' => '09AA 09CD 09A4', + 'replace' => 'E128', + ), + 170 => + array ( + 'match' => '09AA 09CD 09A8', + 'replace' => 'E129', + ), + 171 => + array ( + 'match' => '09AA 09CD 09AA', + 'replace' => 'E12A', + ), + 172 => + array ( + 'match' => '09AA 09CD 09AB', + 'replace' => 'E12B', + ), + 173 => + array ( + 'match' => '09AA 09CD 09AE', + 'replace' => 'E12C', + ), + 174 => + array ( + 'match' => '09AA 09CD 09B2', + 'replace' => 'E12D', + ), + 175 => + array ( + 'match' => '09AA 09CD 09AC', + 'replace' => 'E12E', + ), + 176 => + array ( + 'match' => '09AA 09CD 09B6', + 'replace' => 'E12F', + ), + 177 => + array ( + 'match' => '09AA 09CD 09B7', + 'replace' => 'E130', + ), + 178 => + array ( + 'match' => '09AA 09CD 09B8', + 'replace' => 'E131', + ), + 179 => + array ( + 'match' => '09AB 09CD 099F', + 'replace' => 'E132', + ), + 180 => + array ( + 'match' => '09AB 09CD 09A4', + 'replace' => 'E133', + ), + 181 => + array ( + 'match' => '09AB 09CD 09AA', + 'replace' => 'E134', + ), + 182 => + array ( + 'match' => '09AB 09CD 09AB', + 'replace' => 'E135', + ), + 183 => + array ( + 'match' => '09AB 09CD 09B2', + 'replace' => 'E136', + ), + 184 => + array ( + 'match' => '09AC 09CD 099C', + 'replace' => 'E137', + ), + 185 => + array ( + 'match' => '09AC 09CD 099D', + 'replace' => 'E138', + ), + 186 => + array ( + 'match' => '09AC 09CD 09A1', + 'replace' => 'E139', + ), + 187 => + array ( + 'match' => '09AC 09CD 09A2', + 'replace' => 'E13A', + ), + 188 => + array ( + 'match' => '09AC 09CD 09A6', + 'replace' => 'E13B', + ), + 189 => + array ( + 'match' => '09AC 09CD 09A7', + 'replace' => 'E13C', + ), + 190 => + array ( + 'match' => '09AC 09CD 09A8', + 'replace' => 'E13D', + ), + 191 => + array ( + 'match' => '09AC 09CD 09B2', + 'replace' => 'E13E', + ), + 192 => + array ( + 'match' => '09AC 09CD 09AC', + 'replace' => 'E13F', + ), + 193 => + array ( + 'match' => '09AD 09CD 09A3', + 'replace' => 'E141', + ), + 194 => + array ( + 'match' => '09AD 09CD 09A8', + 'replace' => 'E142', + ), + 195 => + array ( + 'match' => '09AD 09CD 09AD', + 'replace' => 'E143', + ), + 196 => + array ( + 'match' => '09AD 09CD 09AE', + 'replace' => 'E144', + ), + 197 => + array ( + 'match' => '09AD 09CD 09B2', + 'replace' => 'E145', + ), + 198 => + array ( + 'match' => '09AD 09CD 09AC', + 'replace' => 'E146', + ), + 199 => + array ( + 'match' => '09AE 09CD 09A3', + 'replace' => 'E147', + ), + 200 => + array ( + 'match' => '09AE 09CD 09A8', + 'replace' => 'E148', + ), + 201 => + array ( + 'match' => '09AE 09CD 09AA', + 'replace' => 'E149', + ), + 202 => + array ( + 'match' => '09AE 09CD 09AB', + 'replace' => 'E14A', + ), + 203 => + array ( + 'match' => '09AE 09CD 09AC', + 'replace' => 'E14B', + ), + 204 => + array ( + 'match' => '09AE 09CD 09AD', + 'replace' => 'E14C', + ), + 205 => + array ( + 'match' => '09AE 09CD 09AE', + 'replace' => 'E14D', + ), + 206 => + array ( + 'match' => '09AE 09CD 09B2', + 'replace' => 'E14E', + ), + 207 => + array ( + 'match' => '09B2 09CD 0995', + 'replace' => 'E153', + ), + 208 => + array ( + 'match' => '09B2 09CD 0996', + 'replace' => 'E154', + ), + 209 => + array ( + 'match' => '09B2 09CD 0997', + 'replace' => 'E155', + ), + 210 => + array ( + 'match' => '09B2 09CD 099A', + 'replace' => 'E156', + ), + 211 => + array ( + 'match' => '09B2 09CD 099C', + 'replace' => 'E157', + ), + 212 => + array ( + 'match' => '09B2 09CD 099F', + 'replace' => 'E158', + ), + 213 => + array ( + 'match' => '09B2 09CD 09A1', + 'replace' => 'E159', + ), + 214 => + array ( + 'match' => '09B2 09CD 09A6', + 'replace' => 'E15A', + ), + 215 => + array ( + 'match' => '09B2 09CD 09AA', + 'replace' => 'E15B', + ), + 216 => + array ( + 'match' => '09B2 09CD 09AB', + 'replace' => 'E15C', + ), + 217 => + array ( + 'match' => '09B2 09CD 09AC', + 'replace' => 'E15D', + ), + 218 => + array ( + 'match' => '09B2 09CD 09AE', + 'replace' => 'E15E', + ), + 219 => + array ( + 'match' => '09B2 09CD 09B2', + 'replace' => 'E15F', + ), + 220 => + array ( + 'match' => '09B2 09CD 09B6', + 'replace' => 'E160', + ), + 221 => + array ( + 'match' => '09B2 09CD 09B8', + 'replace' => 'E161', + ), + 222 => + array ( + 'match' => '09B2 09CD 09B9', + 'replace' => 'E162', + ), + 223 => + array ( + 'match' => '09B6 09CD 0995', + 'replace' => 'E166', + ), + 224 => + array ( + 'match' => '09B6 09CD 099A', + 'replace' => 'E167', + ), + 225 => + array ( + 'match' => '09B6 09CD 099B', + 'replace' => 'E168', + ), + 226 => + array ( + 'match' => '09B6 09CD 09A4', + 'replace' => 'E169', + ), + 227 => + array ( + 'match' => '09B6 09CD 09A8', + 'replace' => 'E16A', + ), + 228 => + array ( + 'match' => '09B6 09CD 09AA', + 'replace' => 'E16B', + ), + 229 => + array ( + 'match' => '09B6 09CD 09AE', + 'replace' => 'E16C', + ), + 230 => + array ( + 'match' => '09B6 09CD 09AF', + 'replace' => 'E16D', + ), + 231 => + array ( + 'match' => '09B6 09CD 09B2', + 'replace' => 'E16E', + ), + 232 => + array ( + 'match' => '09B6 09CD 09AC', + 'replace' => 'E16F', + ), + 233 => + array ( + 'match' => '09B6 09CD 09B6', + 'replace' => 'E170', + ), + 234 => + array ( + 'match' => '09B7 09CD 0995', + 'replace' => 'E171', + ), + 235 => + array ( + 'match' => '09B7 09CD 099F', + 'replace' => 'E172', + ), + 236 => + array ( + 'match' => '09B7 09CD 09A0', + 'replace' => 'E173', + ), + 237 => + array ( + 'match' => '09B7 09CD 09A3', + 'replace' => 'E174', + ), + 238 => + array ( + 'match' => '09B7 09CD 09AA', + 'replace' => 'E175', + ), + 239 => + array ( + 'match' => '09B7 09CD 09AB', + 'replace' => 'E176', + ), + 240 => + array ( + 'match' => '09B7 09CD 09AE', + 'replace' => 'E177', + ), + 241 => + array ( + 'match' => '09B7 09CD 09AF', + 'replace' => 'E178', + ), + 242 => + array ( + 'match' => '09B7 09CD 09AC', + 'replace' => 'E179', + ), + 243 => + array ( + 'match' => '09B8 09CD 0995', + 'replace' => 'E17E', + ), + 244 => + array ( + 'match' => '09B8 09CD 0996', + 'replace' => 'E17F', + ), + 245 => + array ( + 'match' => '09B8 09CD 099C', + 'replace' => 'E180', + ), + 246 => + array ( + 'match' => '09B8 09CD 099F', + 'replace' => 'E181', + ), + 247 => + array ( + 'match' => '09B8 09CD 09A4', + 'replace' => 'E182', + ), + 248 => + array ( + 'match' => '09B8 09CD 09A5', + 'replace' => 'E183', + ), + 249 => + array ( + 'match' => '09B8 09CD 09A8', + 'replace' => 'E184', + ), + 250 => + array ( + 'match' => '09B8 09CD 09AA', + 'replace' => 'E185', + ), + 251 => + array ( + 'match' => '09B8 09CD 09AB', + 'replace' => 'E186', + ), + 252 => + array ( + 'match' => '09B8 09CD 09AE', + 'replace' => 'E187', + ), + 253 => + array ( + 'match' => '09B8 09CD 09AF', + 'replace' => 'E188', + ), + 254 => + array ( + 'match' => '09B8 09CD 09B2', + 'replace' => 'E189', + ), + 255 => + array ( + 'match' => '09B8 09CD 09AC', + 'replace' => 'E18A', + ), + 256 => + array ( + 'match' => '09B8 09CD 09B8', + 'replace' => 'E18B', + ), + 257 => + array ( + 'match' => '09B9 09CD 09A3', + 'replace' => 'E192', + ), + 258 => + array ( + 'match' => '09B9 09CD 09A8', + 'replace' => 'E193', + ), + 259 => + array ( + 'match' => '09B9 09CD 09AE', + 'replace' => 'E194', + ), + 260 => + array ( + 'match' => '09B9 09CD 09AF', + 'replace' => 'E195', + ), + 261 => + array ( + 'match' => '09B9 09CD 09B2', + 'replace' => 'E196', + ), + 262 => + array ( + 'match' => '09B9 09CD 09AC', + 'replace' => 'E197', + ), + 263 => + array ( + 'match' => '09DC 09CD 0997', + 'replace' => 'E198', + ), + 264 => + array ( + 'match' => '09DC 09CD 099C', + 'replace' => 'E199', + ), + 265 => + array ( + 'match' => '09DC 09CD 09A7', + 'replace' => 'E19A', + ), + 266 => + array ( + 'match' => '0995 E1CD', + 'replace' => 'E041', + ), + 267 => + array ( + 'match' => '0996 E1CD', + 'replace' => 'E042', + ), + 268 => + array ( + 'match' => '0997 E1CD', + 'replace' => 'E043', + ), + 269 => + array ( + 'match' => '0998 E1CD', + 'replace' => 'E044', + ), + 270 => + array ( + 'match' => '0999 E1CD', + 'replace' => 'E045', + ), + 271 => + array ( + 'match' => '099A E1CD', + 'replace' => 'E046', + ), + 272 => + array ( + 'match' => '099B E1CD', + 'replace' => 'E047', + ), + 273 => + array ( + 'match' => '099C E1CD', + 'replace' => 'E048', + ), + 274 => + array ( + 'match' => '099D E1CD', + 'replace' => 'E049', + ), + 275 => + array ( + 'match' => '099F E1CD', + 'replace' => 'E04A', + ), + 276 => + array ( + 'match' => '09A0 E1CD', + 'replace' => 'E04B', + ), + 277 => + array ( + 'match' => '09A1 E1CD', + 'replace' => 'E04C', + ), + 278 => + array ( + 'match' => '09A2 E1CD', + 'replace' => 'E04D', + ), + 279 => + array ( + 'match' => '09A3 E1CD', + 'replace' => 'E04E', + ), + 280 => + array ( + 'match' => '09A4 E1CD', + 'replace' => 'E04F', + ), + 281 => + array ( + 'match' => '09A5 E1CD', + 'replace' => 'E050', + ), + 282 => + array ( + 'match' => '09A6 E1CD', + 'replace' => 'E051', + ), + 283 => + array ( + 'match' => '09A7 E1CD', + 'replace' => 'E052', + ), + 284 => + array ( + 'match' => '09A8 E1CD', + 'replace' => 'E053', + ), + 285 => + array ( + 'match' => '09AA E1CD', + 'replace' => 'E054', + ), + 286 => + array ( + 'match' => '09AB E1CD', + 'replace' => 'E055', + ), + 287 => + array ( + 'match' => '09AC E1CD', + 'replace' => 'E056', + ), + 288 => + array ( + 'match' => '09AD E1CD', + 'replace' => 'E057', + ), + 289 => + array ( + 'match' => '09AE E1CD', + 'replace' => 'E058', + ), + 290 => + array ( + 'match' => '09AF E1CD', + 'replace' => 'E059', + ), + 291 => + array ( + 'match' => '09B0 E1CD', + 'replace' => 'E05A', + ), + 292 => + array ( + 'match' => '09B2 E1CD', + 'replace' => 'E05B', + ), + 293 => + array ( + 'match' => '09B6 E1CD', + 'replace' => 'E05C', + ), + 294 => + array ( + 'match' => '09B7 E1CD', + 'replace' => 'E05D', + ), + 295 => + array ( + 'match' => '09B8 E1CD', + 'replace' => 'E05E', + ), + 296 => + array ( + 'match' => '09B9 E1CD', + 'replace' => 'E05F', + ), + 297 => + array ( + 'match' => '09DC E1CD', + 'replace' => 'E060', + ), + 298 => + array ( + 'match' => '09DD E1CD', + 'replace' => 'E061', + ), + 299 => + array ( + 'match' => '09DF E1CD', + 'replace' => 'E062', + ), + 300 => + array ( + 'match' => '00D0 09B0', + 'replace' => 'E1CD', + ), + 301 => + array ( + 'match' => 'E06A E1CD', + 'replace' => 'E07B', + ), + 302 => + array ( + 'match' => 'E06E E1CD', + 'replace' => 'E07C', + ), + 303 => + array ( + 'match' => 'E071 E1CD', + 'replace' => 'E07D', + ), + 304 => + array ( + 'match' => 'E071 09CD 09AC', + 'replace' => 'E07E', + ), + 305 => + array ( + 'match' => 'E002 09CD 09A3', + 'replace' => 'E07F', + ), + 306 => + array ( + 'match' => 'E002 09CD 09AE', + 'replace' => 'E080', + ), + 307 => + array ( + 'match' => 'E002 E1CD', + 'replace' => 'E081', + ), + 308 => + array ( + 'match' => 'E002 09CD 09AC', + 'replace' => 'E082', + ), + 309 => + array ( + 'match' => 'E090 E1CD', + 'replace' => 'E097', + ), + 310 => + array ( + 'match' => 'E090 09CD 09AC', + 'replace' => 'E098', + ), + 311 => + array ( + 'match' => 'E09C E1CD', + 'replace' => 'E0A7', + ), + 312 => + array ( + 'match' => 'E09F E1CD', + 'replace' => 'E0A8', + ), + 313 => + array ( + 'match' => '0999 09CD E002', + 'replace' => 'E0A9', + ), + 314 => + array ( + 'match' => 'E0AD E1CD', + 'replace' => 'E0B1', + ), + 315 => + array ( + 'match' => 'E0AD 09CD 09B2', + 'replace' => 'E0B2', + ), + 316 => + array ( + 'match' => 'E0AD 09CD 09AC', + 'replace' => 'E0B3', + ), + 317 => + array ( + 'match' => 'E0B7 E1CD', + 'replace' => 'E0BC', + ), + 318 => + array ( + 'match' => 'E0B7 09CD 09AC', + 'replace' => 'E0BD', + ), + 319 => + array ( + 'match' => 'E0E0 E1CD', + 'replace' => 'E0E8', + ), + 320 => + array ( + 'match' => 'E0E2 E1CD', + 'replace' => 'E0E9', + ), + 321 => + array ( + 'match' => 'E0EA E1CD', + 'replace' => 'E0EF', + ), + 322 => + array ( + 'match' => 'E0EA 09CD 09AC', + 'replace' => 'E0F0', + ), + 323 => + array ( + 'match' => 'E0F6 E1CD', + 'replace' => 'E0FD', + ), + 324 => + array ( + 'match' => 'E0F6 09CD 09AC', + 'replace' => 'E0FE', + ), + 325 => + array ( + 'match' => 'E0F7 E1CD', + 'replace' => 'E0FF', + ), + 326 => + array ( + 'match' => 'E0F7 09CD 09AC', + 'replace' => 'E100', + ), + 327 => + array ( + 'match' => 'E0FA E1CD', + 'replace' => 'E101', + ), + 328 => + array ( + 'match' => 'E10A E1CD', + 'replace' => 'E11A', + ), + 329 => + array ( + 'match' => 'E10C E1CD', + 'replace' => 'E11B', + ), + 330 => + array ( + 'match' => 'E10D E1CD', + 'replace' => 'E11C', + ), + 331 => + array ( + 'match' => 'E10D 09CD 09AC', + 'replace' => 'E11D', + ), + 332 => + array ( + 'match' => 'E10F E1CD', + 'replace' => 'E11E', + ), + 333 => + array ( + 'match' => 'E10F 09CD 09AC', + 'replace' => 'E11F', + ), + 334 => + array ( + 'match' => 'E110 E1CD', + 'replace' => 'E120', + ), + 335 => + array ( + 'match' => 'E110 09CD 09AC', + 'replace' => 'E121', + ), + 336 => + array ( + 'match' => 'E13C 09CD 09AC', + 'replace' => 'E140', + ), + 337 => + array ( + 'match' => 'E149 E1CD', + 'replace' => 'E14F', + ), + 338 => + array ( + 'match' => 'E14A E1CD', + 'replace' => 'E150', + ), + 339 => + array ( + 'match' => 'E14B E1CD', + 'replace' => 'E151', + ), + 340 => + array ( + 'match' => 'E14C E1CD', + 'replace' => 'E152', + ), + 341 => + array ( + 'match' => 'E158 E1CD', + 'replace' => 'E163', + ), + 342 => + array ( + 'match' => 'E15B E1CD', + 'replace' => 'E164', + ), + 343 => + array ( + 'match' => 'E161 09CD 099F', + 'replace' => 'E165', + ), + 344 => + array ( + 'match' => 'E171 E1CD', + 'replace' => 'E17A', + ), + 345 => + array ( + 'match' => 'E172 E1CD', + 'replace' => 'E17B', + ), + 346 => + array ( + 'match' => 'E172 09CD 09AC', + 'replace' => 'E17C', + ), + 347 => + array ( + 'match' => 'E175 E1CD', + 'replace' => 'E17D', + ), + 348 => + array ( + 'match' => 'E17E E1CD', + 'replace' => 'E18C', + ), + 349 => + array ( + 'match' => 'E181 E1CD', + 'replace' => 'E18D', + ), + 350 => + array ( + 'match' => 'E182 E1CD', + 'replace' => 'E18E', + ), + 351 => + array ( + 'match' => 'E182 09CD 09AC', + 'replace' => 'E18F', + ), + 352 => + array ( + 'match' => 'E185 E1CD', + 'replace' => 'E190', + ), + 353 => + array ( + 'match' => 'E185 09CD 09B2', + 'replace' => 'E191', + ), + 354 => + array ( + 'match' => '((0995|0996|0997|0998|0999|099A|099B|099C|099D|099F|09A0|09A1|09A2|09A3|09A4|09A5|09A6|09A7|09A8|09AA|09AB|09AC|09AD|09AE|09AF|09B0|09B2|09B6|09B7|09B8|09B9|09DC|09DD|09DF)) 09CD 09AF', + 'replace' => '\\1 E067', + ), + 355 => + array ( + 'match' => '((E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062)) 09CD 09AF', + 'replace' => '\\1 E067', + ), + 356 => + array ( + 'match' => '((E002|E003|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E079|E07A|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E086|E089|E08A|E08B|E08C|E08D|E08F|E090|E092|E095|E097|E098|E09A|E09B|E09D|E09F|E0A2|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF|E0B1|E0B2|E0B3|E0B4|E0B7|E0B8|E0B9|E0BB|E0BC|E0BD|E0BE|E0BF|E0C5|E0C6|E0C7|E0C8|E0C9|E0CB|E0CC|E0CD|E0CE|E0CF|E0D2|E0D3|E0D5|E0D6|E0D8|E0D9|E0DA|E0DB|E0E0|E0E1|E0E3|E0E5|E0E7|E0E8|E0ED|E0F1|E0F5|E0F6|E0FB|E0FC|E0FD|E0FE|E102|E104|E105|E106|E108|E109|E10A|E10B|E10C|E10F|E110|E112|E114|E115|E117|E118|E119|E11A|E11B|E11E|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E12B|E12C|E130|E131|E132|E133|E134|E135|E136|E137|E139|E13A|E13B|E13F|E144|E149|E14A|E14D|E14F|E150|E153|E154|E156|E157|E158|E159|E15A|E15C|E161|E162|E163|E165|E166|E167|E168|E16C|E16D|E174|E175|E176|E177|E178|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E185|E186|E187|E188|E18B|E18C|E18D|E190|E191|E193|E194|E195|E198|E199|E19A|0995|0999|099A|099B|099E|09A1|09A2|09A4|09AB|09AD|09B9|E002|E003|E06A|E073|E074|E077|E078|E07B|E07D|E07E|E07F|E081|E082|E084|E08A|E08C|E08D|E090|E092|E094|E097|E098|E09C|E0A0|E0A1|E0A6|E0A7|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0B1|E0B2|E0B3|E0B4|E0B5|E0B6|E0C1|E0C2|E0C3|E0C4|E0C6|E0C8|E0C9|E0CC|E0CF|E0D9|E0DA|E0DC|E0DD|E0DF|E0E2|E0E3|E0E9|E0EA|E0F0|E108|E109|E10C|E10D|E10E|E110|E112|E113|E11B|E120|E121|E122|E124|E125|E128|E12B|E133|E134|E135|E136|E137|E139|E13A|E13C|E140|E143|E14A|E14C|E153|E156|E157|E159|E15C|E162|E166|E167|E168|E169|E171|E174|E176|E17A|E17E|E180|E182|E183|E18C|E192|E193|E194|E195|E196|E197|09A6|E08F|E0B9|E0F4|E0F6|E0F7|E0F8|E0F9|E0FA|E0FD|E0DC|E0FF|E100|E101|E10F|E11E|E11F|E13B|E15A|099F|09A0|E06E|E06F|E07C|E0CA|E0CB|E0D0|E0D1|E0D4|E0D5|E0D7|E0E0|E0E1|E0E8|E10A|E10B|E11A|E126|E127|E132|E158|E163|E165|E172|E173|E17B|E17C|E181|E18D)) 09CD 09AF', + 'replace' => '\\1 E067', + ), + 357 => + array ( + 'match' => '(200C) 09CD 09AF', + 'replace' => '\\1 E067', + ), + 358 => + array ( + 'match' => 'E0A9 E1CD', + 'replace' => 'E0AA', + ), + 359 => + array ( + 'match' => 'E0A9 E1CD', + 'replace' => 'E0AB', + ), + 360 => + array ( + 'match' => '(09BF (0995|0996|0997|0998|0999|099A|099B|099C|099D|099F|09A0|09A1|09A2|09A3|09A4|09A5|09A6|09A7|09A8|09AA|09AB|09AC|09AD|09AE|09AF|09B0|09B2|09B6|09B7|09B8|09B9|09DC|09DD|09DF)) 09CD', + 'replace' => '\\1 09CD 09BF', + ), + 361 => + array ( + 'match' => '(09BF (0995|0996|0997|0998|0999|099A|099B|099C|099D|099F|09A0|09A1|09A2|09A3|09A4|09A5|09A6|09A7|09A8|09AA|09AB|09AC|09AD|09AE|09AF|09B0|09B2|09B6|09B7|09B8|09B9|09DC|09DD|09DF)) 007E', + 'replace' => '\\1 007E 09BF', + ), + 362 => + array ( + 'match' => '(09C7 (0995|0996|0997|0998|0999|099A|099B|099C|099D|099F|09A0|09A1|09A2|09A3|09A4|09A5|09A6|09A7|09A8|09AA|09AB|09AC|09AD|09AE|09AF|09B0|09B2|09B6|09B7|09B8|09B9|09DC|09DD|09DF)) 09CD', + 'replace' => '\\1 09CD 09C7', + ), + 363 => + array ( + 'match' => '(09C7 (0995|0996|0997|0998|0999|099A|099B|099C|099D|099F|09A0|09A1|09A2|09A3|09A4|09A5|09A6|09A7|09A8|09AA|09AB|09AC|09AD|09AE|09AF|09B0|09B2|09B6|09B7|09B8|09B9|09DC|09DD|09DF)) 007E', + 'replace' => '\\1 007E 09C7', + ), + 364 => + array ( + 'match' => '(09C8 (0995|0996|0997|0998|0999|099A|099B|099C|099D|099F|09A0|09A1|09A2|09A3|09A4|09A5|09A6|09A7|09A8|09AA|09AB|09AC|09AD|09AE|09AF|09B0|09B2|09B6|09B7|09B8|09B9|09DC|09DD|09DF)) 09CD', + 'replace' => '\\1 09CD 09C8', + ), + 365 => + array ( + 'match' => '(09C8 (0995|0996|0997|0998|0999|099A|099B|099C|099D|099F|09A0|09A1|09A2|09A3|09A4|09A5|09A6|09A7|09A8|09AA|09AB|09AC|09AD|09AE|09AF|09B0|09B2|09B6|09B7|09B8|09B9|09DC|09DD|09DF)) 007E', + 'replace' => '\\1 007E 09C8', + ), + 366 => + array ( + 'match' => '09BF 0995 (09CD (09BF|09C7|09C8))', + 'replace' => '0995 \\1', + ), + 367 => + array ( + 'match' => '09BF 0996 (09CD (09BF|09C7|09C8))', + 'replace' => '0996 \\1', + ), + 368 => + array ( + 'match' => '09BF 0997 (09CD (09BF|09C7|09C8))', + 'replace' => '0997 \\1', + ), + 369 => + array ( + 'match' => '09BF 0998 (09CD (09BF|09C7|09C8))', + 'replace' => '0998 \\1', + ), + 370 => + array ( + 'match' => '09BF 0999 (09CD (09BF|09C7|09C8))', + 'replace' => '0999 \\1', + ), + 371 => + array ( + 'match' => '09BF 099A (09CD (09BF|09C7|09C8))', + 'replace' => '099A \\1', + ), + 372 => + array ( + 'match' => '09BF 099B (09CD (09BF|09C7|09C8))', + 'replace' => '099B \\1', + ), + 373 => + array ( + 'match' => '09BF 099C (09CD (09BF|09C7|09C8))', + 'replace' => '099C \\1', + ), + 374 => + array ( + 'match' => '09BF 099D (09CD (09BF|09C7|09C8))', + 'replace' => '099D \\1', + ), + 375 => + array ( + 'match' => '09BF 099F (09CD (09BF|09C7|09C8))', + 'replace' => '099F \\1', + ), + 376 => + array ( + 'match' => '09BF 09A0 (09CD (09BF|09C7|09C8))', + 'replace' => '09A0 \\1', + ), + 377 => + array ( + 'match' => '09BF 09A1 (09CD (09BF|09C7|09C8))', + 'replace' => '09A1 \\1', + ), + 378 => + array ( + 'match' => '09BF 09A2 (09CD (09BF|09C7|09C8))', + 'replace' => '09A2 \\1', + ), + 379 => + array ( + 'match' => '09BF 09A3 (09CD (09BF|09C7|09C8))', + 'replace' => '09A3 \\1', + ), + 380 => + array ( + 'match' => '09BF 09A4 (09CD (09BF|09C7|09C8))', + 'replace' => '09A4 \\1', + ), + 381 => + array ( + 'match' => '09BF 09A5 (09CD (09BF|09C7|09C8))', + 'replace' => '09A5 \\1', + ), + 382 => + array ( + 'match' => '09BF 09A6 (09CD (09BF|09C7|09C8))', + 'replace' => '09A6 \\1', + ), + 383 => + array ( + 'match' => '09BF 09A7 (09CD (09BF|09C7|09C8))', + 'replace' => '09A7 \\1', + ), + 384 => + array ( + 'match' => '09BF 09A8 (09CD (09BF|09C7|09C8))', + 'replace' => '09A8 \\1', + ), + 385 => + array ( + 'match' => '09BF 09AA (09CD (09BF|09C7|09C8))', + 'replace' => '09AA \\1', + ), + 386 => + array ( + 'match' => '09BF 09AB (09CD (09BF|09C7|09C8))', + 'replace' => '09AB \\1', + ), + 387 => + array ( + 'match' => '09BF 09AC (09CD (09BF|09C7|09C8))', + 'replace' => '09AC \\1', + ), + 388 => + array ( + 'match' => '09BF 09AD (09CD (09BF|09C7|09C8))', + 'replace' => '09AD \\1', + ), + 389 => + array ( + 'match' => '09BF 09AE (09CD (09BF|09C7|09C8))', + 'replace' => '09AE \\1', + ), + 390 => + array ( + 'match' => '09BF 09AF (09CD (09BF|09C7|09C8))', + 'replace' => '09AF \\1', + ), + 391 => + array ( + 'match' => '09BF 09B0 (09CD (09BF|09C7|09C8))', + 'replace' => '09B0 \\1', + ), + 392 => + array ( + 'match' => '09BF 09B2 (09CD (09BF|09C7|09C8))', + 'replace' => '09B2 \\1', + ), + 393 => + array ( + 'match' => '09BF 09B6 (09CD (09BF|09C7|09C8))', + 'replace' => '09B6 \\1', + ), + 394 => + array ( + 'match' => '09BF 09B7 (09CD (09BF|09C7|09C8))', + 'replace' => '09B7 \\1', + ), + 395 => + array ( + 'match' => '09BF 09B8 (09CD (09BF|09C7|09C8))', + 'replace' => '09B8 \\1', + ), + 396 => + array ( + 'match' => '09BF 09B9 (09CD (09BF|09C7|09C8))', + 'replace' => '09B9 \\1', + ), + 397 => + array ( + 'match' => '09BF 09DC (09CD (09BF|09C7|09C8))', + 'replace' => '09DC \\1', + ), + 398 => + array ( + 'match' => '09BF 09DD (09CD (09BF|09C7|09C8))', + 'replace' => '09DD \\1', + ), + 399 => + array ( + 'match' => '09BF 09DF (09CD (09BF|09C7|09C8))', + 'replace' => '09DF \\1', + ), + 400 => + array ( + 'match' => '09C7 0995 (09CD (09BF|09C7|09C8))', + 'replace' => '0995 \\1', + ), + 401 => + array ( + 'match' => '09C7 0996 (09CD (09BF|09C7|09C8))', + 'replace' => '0996 \\1', + ), + 402 => + array ( + 'match' => '09C7 0997 (09CD (09BF|09C7|09C8))', + 'replace' => '0997 \\1', + ), + 403 => + array ( + 'match' => '09C7 0998 (09CD (09BF|09C7|09C8))', + 'replace' => '0998 \\1', + ), + 404 => + array ( + 'match' => '09C7 0999 (09CD (09BF|09C7|09C8))', + 'replace' => '0999 \\1', + ), + 405 => + array ( + 'match' => '09C7 099A (09CD (09BF|09C7|09C8))', + 'replace' => '099A \\1', + ), + 406 => + array ( + 'match' => '09C7 099B (09CD (09BF|09C7|09C8))', + 'replace' => '099B \\1', + ), + 407 => + array ( + 'match' => '09C7 099C (09CD (09BF|09C7|09C8))', + 'replace' => '099C \\1', + ), + 408 => + array ( + 'match' => '09C7 099D (09CD (09BF|09C7|09C8))', + 'replace' => '099D \\1', + ), + 409 => + array ( + 'match' => '09C7 099F (09CD (09BF|09C7|09C8))', + 'replace' => '099F \\1', + ), + 410 => + array ( + 'match' => '09C7 09A0 (09CD (09BF|09C7|09C8))', + 'replace' => '09A0 \\1', + ), + 411 => + array ( + 'match' => '09C7 09A1 (09CD (09BF|09C7|09C8))', + 'replace' => '09A1 \\1', + ), + 412 => + array ( + 'match' => '09C7 09A2 (09CD (09BF|09C7|09C8))', + 'replace' => '09A2 \\1', + ), + 413 => + array ( + 'match' => '09C7 09A3 (09CD (09BF|09C7|09C8))', + 'replace' => '09A3 \\1', + ), + 414 => + array ( + 'match' => '09C7 09A4 (09CD (09BF|09C7|09C8))', + 'replace' => '09A4 \\1', + ), + 415 => + array ( + 'match' => '09C7 09A5 (09CD (09BF|09C7|09C8))', + 'replace' => '09A5 \\1', + ), + 416 => + array ( + 'match' => '09C7 09A6 (09CD (09BF|09C7|09C8))', + 'replace' => '09A6 \\1', + ), + 417 => + array ( + 'match' => '09C7 09A7 (09CD (09BF|09C7|09C8))', + 'replace' => '09A7 \\1', + ), + 418 => + array ( + 'match' => '09C7 09A8 (09CD (09BF|09C7|09C8))', + 'replace' => '09A8 \\1', + ), + 419 => + array ( + 'match' => '09C7 09AA (09CD (09BF|09C7|09C8))', + 'replace' => '09AA \\1', + ), + 420 => + array ( + 'match' => '09C7 09AB (09CD (09BF|09C7|09C8))', + 'replace' => '09AB \\1', + ), + 421 => + array ( + 'match' => '09C7 09AC (09CD (09BF|09C7|09C8))', + 'replace' => '09AC \\1', + ), + 422 => + array ( + 'match' => '09C7 09AD (09CD (09BF|09C7|09C8))', + 'replace' => '09AD \\1', + ), + 423 => + array ( + 'match' => '09C7 09AE (09CD (09BF|09C7|09C8))', + 'replace' => '09AE \\1', + ), + 424 => + array ( + 'match' => '09C7 09AF (09CD (09BF|09C7|09C8))', + 'replace' => '09AF \\1', + ), + 425 => + array ( + 'match' => '09C7 09B0 (09CD (09BF|09C7|09C8))', + 'replace' => '09B0 \\1', + ), + 426 => + array ( + 'match' => '09C7 09B2 (09CD (09BF|09C7|09C8))', + 'replace' => '09B2 \\1', + ), + 427 => + array ( + 'match' => '09C7 09B6 (09CD (09BF|09C7|09C8))', + 'replace' => '09B6 \\1', + ), + 428 => + array ( + 'match' => '09C7 09B7 (09CD (09BF|09C7|09C8))', + 'replace' => '09B7 \\1', + ), + 429 => + array ( + 'match' => '09C7 09B8 (09CD (09BF|09C7|09C8))', + 'replace' => '09B8 \\1', + ), + 430 => + array ( + 'match' => '09C7 09B9 (09CD (09BF|09C7|09C8))', + 'replace' => '09B9 \\1', + ), + 431 => + array ( + 'match' => '09C7 09DC (09CD (09BF|09C7|09C8))', + 'replace' => '09DC \\1', + ), + 432 => + array ( + 'match' => '09C7 09DD (09CD (09BF|09C7|09C8))', + 'replace' => '09DD \\1', + ), + 433 => + array ( + 'match' => '09C7 09DF (09CD (09BF|09C7|09C8))', + 'replace' => '09DF \\1', + ), + 434 => + array ( + 'match' => '09C8 0995 (09CD (09BF|09C7|09C8))', + 'replace' => '0995 \\1', + ), + 435 => + array ( + 'match' => '09C8 0996 (09CD (09BF|09C7|09C8))', + 'replace' => '0996 \\1', + ), + 436 => + array ( + 'match' => '09C8 0997 (09CD (09BF|09C7|09C8))', + 'replace' => '0997 \\1', + ), + 437 => + array ( + 'match' => '09C8 0998 (09CD (09BF|09C7|09C8))', + 'replace' => '0998 \\1', + ), + 438 => + array ( + 'match' => '09C8 0999 (09CD (09BF|09C7|09C8))', + 'replace' => '0999 \\1', + ), + 439 => + array ( + 'match' => '09C8 099A (09CD (09BF|09C7|09C8))', + 'replace' => '099A \\1', + ), + 440 => + array ( + 'match' => '09C8 099B (09CD (09BF|09C7|09C8))', + 'replace' => '099B \\1', + ), + 441 => + array ( + 'match' => '09C8 099C (09CD (09BF|09C7|09C8))', + 'replace' => '099C \\1', + ), + 442 => + array ( + 'match' => '09C8 099D (09CD (09BF|09C7|09C8))', + 'replace' => '099D \\1', + ), + 443 => + array ( + 'match' => '09C8 099F (09CD (09BF|09C7|09C8))', + 'replace' => '099F \\1', + ), + 444 => + array ( + 'match' => '09C8 09A0 (09CD (09BF|09C7|09C8))', + 'replace' => '09A0 \\1', + ), + 445 => + array ( + 'match' => '09C8 09A1 (09CD (09BF|09C7|09C8))', + 'replace' => '09A1 \\1', + ), + 446 => + array ( + 'match' => '09C8 09A2 (09CD (09BF|09C7|09C8))', + 'replace' => '09A2 \\1', + ), + 447 => + array ( + 'match' => '09C8 09A3 (09CD (09BF|09C7|09C8))', + 'replace' => '09A3 \\1', + ), + 448 => + array ( + 'match' => '09C8 09A4 (09CD (09BF|09C7|09C8))', + 'replace' => '09A4 \\1', + ), + 449 => + array ( + 'match' => '09C8 09A5 (09CD (09BF|09C7|09C8))', + 'replace' => '09A5 \\1', + ), + 450 => + array ( + 'match' => '09C8 09A6 (09CD (09BF|09C7|09C8))', + 'replace' => '09A6 \\1', + ), + 451 => + array ( + 'match' => '09C8 09A7 (09CD (09BF|09C7|09C8))', + 'replace' => '09A7 \\1', + ), + 452 => + array ( + 'match' => '09C8 09A8 (09CD (09BF|09C7|09C8))', + 'replace' => '09A8 \\1', + ), + 453 => + array ( + 'match' => '09C8 09AA (09CD (09BF|09C7|09C8))', + 'replace' => '09AA \\1', + ), + 454 => + array ( + 'match' => '09C8 09AB (09CD (09BF|09C7|09C8))', + 'replace' => '09AB \\1', + ), + 455 => + array ( + 'match' => '09C8 09AC (09CD (09BF|09C7|09C8))', + 'replace' => '09AC \\1', + ), + 456 => + array ( + 'match' => '09C8 09AD (09CD (09BF|09C7|09C8))', + 'replace' => '09AD \\1', + ), + 457 => + array ( + 'match' => '09C8 09AE (09CD (09BF|09C7|09C8))', + 'replace' => '09AE \\1', + ), + 458 => + array ( + 'match' => '09C8 09AF (09CD (09BF|09C7|09C8))', + 'replace' => '09AF \\1', + ), + 459 => + array ( + 'match' => '09C8 09B0 (09CD (09BF|09C7|09C8))', + 'replace' => '09B0 \\1', + ), + 460 => + array ( + 'match' => '09C8 09B2 (09CD (09BF|09C7|09C8))', + 'replace' => '09B2 \\1', + ), + 461 => + array ( + 'match' => '09C8 09B6 (09CD (09BF|09C7|09C8))', + 'replace' => '09B6 \\1', + ), + 462 => + array ( + 'match' => '09C8 09B7 (09CD (09BF|09C7|09C8))', + 'replace' => '09B7 \\1', + ), + 463 => + array ( + 'match' => '09C8 09B8 (09CD (09BF|09C7|09C8))', + 'replace' => '09B8 \\1', + ), + 464 => + array ( + 'match' => '09C8 09B9 (09CD (09BF|09C7|09C8))', + 'replace' => '09B9 \\1', + ), + 465 => + array ( + 'match' => '09C8 09DC (09CD (09BF|09C7|09C8))', + 'replace' => '09DC \\1', + ), + 466 => + array ( + 'match' => '09C8 09DD (09CD (09BF|09C7|09C8))', + 'replace' => '09DD \\1', + ), + 467 => + array ( + 'match' => '09C8 09DF (09CD (09BF|09C7|09C8))', + 'replace' => '09DF \\1', + ), + 468 => + array ( + 'match' => '09BF 0995 (007E (09BF|09C7|09C8))', + 'replace' => '0995 \\1', + ), + 469 => + array ( + 'match' => '09BF 0996 (007E (09BF|09C7|09C8))', + 'replace' => '0996 \\1', + ), + 470 => + array ( + 'match' => '09BF 0997 (007E (09BF|09C7|09C8))', + 'replace' => '0997 \\1', + ), + 471 => + array ( + 'match' => '09BF 0998 (007E (09BF|09C7|09C8))', + 'replace' => '0998 \\1', + ), + 472 => + array ( + 'match' => '09BF 0999 (007E (09BF|09C7|09C8))', + 'replace' => '0999 \\1', + ), + 473 => + array ( + 'match' => '09BF 099A (007E (09BF|09C7|09C8))', + 'replace' => '099A \\1', + ), + 474 => + array ( + 'match' => '09BF 099B (007E (09BF|09C7|09C8))', + 'replace' => '099B \\1', + ), + 475 => + array ( + 'match' => '09BF 099C (007E (09BF|09C7|09C8))', + 'replace' => '099C \\1', + ), + 476 => + array ( + 'match' => '09BF 099D (007E (09BF|09C7|09C8))', + 'replace' => '099D \\1', + ), + 477 => + array ( + 'match' => '09BF 099F (007E (09BF|09C7|09C8))', + 'replace' => '099F \\1', + ), + 478 => + array ( + 'match' => '09BF 09A0 (007E (09BF|09C7|09C8))', + 'replace' => '09A0 \\1', + ), + 479 => + array ( + 'match' => '09BF 09A1 (007E (09BF|09C7|09C8))', + 'replace' => '09A1 \\1', + ), + 480 => + array ( + 'match' => '09BF 09A2 (007E (09BF|09C7|09C8))', + 'replace' => '09A2 \\1', + ), + 481 => + array ( + 'match' => '09BF 09A3 (007E (09BF|09C7|09C8))', + 'replace' => '09A3 \\1', + ), + 482 => + array ( + 'match' => '09BF 09A4 (007E (09BF|09C7|09C8))', + 'replace' => '09A4 \\1', + ), + 483 => + array ( + 'match' => '09BF 09A5 (007E (09BF|09C7|09C8))', + 'replace' => '09A5 \\1', + ), + 484 => + array ( + 'match' => '09BF 09A6 (007E (09BF|09C7|09C8))', + 'replace' => '09A6 \\1', + ), + 485 => + array ( + 'match' => '09BF 09A7 (007E (09BF|09C7|09C8))', + 'replace' => '09A7 \\1', + ), + 486 => + array ( + 'match' => '09BF 09A8 (007E (09BF|09C7|09C8))', + 'replace' => '09A8 \\1', + ), + 487 => + array ( + 'match' => '09BF 09AA (007E (09BF|09C7|09C8))', + 'replace' => '09AA \\1', + ), + 488 => + array ( + 'match' => '09BF 09AB (007E (09BF|09C7|09C8))', + 'replace' => '09AB \\1', + ), + 489 => + array ( + 'match' => '09BF 09AC (007E (09BF|09C7|09C8))', + 'replace' => '09AC \\1', + ), + 490 => + array ( + 'match' => '09BF 09AD (007E (09BF|09C7|09C8))', + 'replace' => '09AD \\1', + ), + 491 => + array ( + 'match' => '09BF 09AE (007E (09BF|09C7|09C8))', + 'replace' => '09AE \\1', + ), + 492 => + array ( + 'match' => '09BF 09AF (007E (09BF|09C7|09C8))', + 'replace' => '09AF \\1', + ), + 493 => + array ( + 'match' => '09BF 09B0 (007E (09BF|09C7|09C8))', + 'replace' => '09B0 \\1', + ), + 494 => + array ( + 'match' => '09BF 09B2 (007E (09BF|09C7|09C8))', + 'replace' => '09B2 \\1', + ), + 495 => + array ( + 'match' => '09BF 09B6 (007E (09BF|09C7|09C8))', + 'replace' => '09B6 \\1', + ), + 496 => + array ( + 'match' => '09BF 09B7 (007E (09BF|09C7|09C8))', + 'replace' => '09B7 \\1', + ), + 497 => + array ( + 'match' => '09BF 09B8 (007E (09BF|09C7|09C8))', + 'replace' => '09B8 \\1', + ), + 498 => + array ( + 'match' => '09BF 09B9 (007E (09BF|09C7|09C8))', + 'replace' => '09B9 \\1', + ), + 499 => + array ( + 'match' => '09BF 09DC (007E (09BF|09C7|09C8))', + 'replace' => '09DC \\1', + ), + 500 => + array ( + 'match' => '09BF 09DD (007E (09BF|09C7|09C8))', + 'replace' => '09DD \\1', + ), + 501 => + array ( + 'match' => '09BF 09DF (007E (09BF|09C7|09C8))', + 'replace' => '09DF \\1', + ), + 502 => + array ( + 'match' => '09C7 0995 (007E (09BF|09C7|09C8))', + 'replace' => '0995 \\1', + ), + 503 => + array ( + 'match' => '09C7 0996 (007E (09BF|09C7|09C8))', + 'replace' => '0996 \\1', + ), + 504 => + array ( + 'match' => '09C7 0997 (007E (09BF|09C7|09C8))', + 'replace' => '0997 \\1', + ), + 505 => + array ( + 'match' => '09C7 0998 (007E (09BF|09C7|09C8))', + 'replace' => '0998 \\1', + ), + 506 => + array ( + 'match' => '09C7 0999 (007E (09BF|09C7|09C8))', + 'replace' => '0999 \\1', + ), + 507 => + array ( + 'match' => '09C7 099A (007E (09BF|09C7|09C8))', + 'replace' => '099A \\1', + ), + 508 => + array ( + 'match' => '09C7 099B (007E (09BF|09C7|09C8))', + 'replace' => '099B \\1', + ), + 509 => + array ( + 'match' => '09C7 099C (007E (09BF|09C7|09C8))', + 'replace' => '099C \\1', + ), + 510 => + array ( + 'match' => '09C7 099D (007E (09BF|09C7|09C8))', + 'replace' => '099D \\1', + ), + 511 => + array ( + 'match' => '09C7 099F (007E (09BF|09C7|09C8))', + 'replace' => '099F \\1', + ), + 512 => + array ( + 'match' => '09C7 09A0 (007E (09BF|09C7|09C8))', + 'replace' => '09A0 \\1', + ), + 513 => + array ( + 'match' => '09C7 09A1 (007E (09BF|09C7|09C8))', + 'replace' => '09A1 \\1', + ), + 514 => + array ( + 'match' => '09C7 09A2 (007E (09BF|09C7|09C8))', + 'replace' => '09A2 \\1', + ), + 515 => + array ( + 'match' => '09C7 09A3 (007E (09BF|09C7|09C8))', + 'replace' => '09A3 \\1', + ), + 516 => + array ( + 'match' => '09C7 09A4 (007E (09BF|09C7|09C8))', + 'replace' => '09A4 \\1', + ), + 517 => + array ( + 'match' => '09C7 09A5 (007E (09BF|09C7|09C8))', + 'replace' => '09A5 \\1', + ), + 518 => + array ( + 'match' => '09C7 09A6 (007E (09BF|09C7|09C8))', + 'replace' => '09A6 \\1', + ), + 519 => + array ( + 'match' => '09C7 09A7 (007E (09BF|09C7|09C8))', + 'replace' => '09A7 \\1', + ), + 520 => + array ( + 'match' => '09C7 09A8 (007E (09BF|09C7|09C8))', + 'replace' => '09A8 \\1', + ), + 521 => + array ( + 'match' => '09C7 09AA (007E (09BF|09C7|09C8))', + 'replace' => '09AA \\1', + ), + 522 => + array ( + 'match' => '09C7 09AB (007E (09BF|09C7|09C8))', + 'replace' => '09AB \\1', + ), + 523 => + array ( + 'match' => '09C7 09AC (007E (09BF|09C7|09C8))', + 'replace' => '09AC \\1', + ), + 524 => + array ( + 'match' => '09C7 09AD (007E (09BF|09C7|09C8))', + 'replace' => '09AD \\1', + ), + 525 => + array ( + 'match' => '09C7 09AE (007E (09BF|09C7|09C8))', + 'replace' => '09AE \\1', + ), + 526 => + array ( + 'match' => '09C7 09AF (007E (09BF|09C7|09C8))', + 'replace' => '09AF \\1', + ), + 527 => + array ( + 'match' => '09C7 09B0 (007E (09BF|09C7|09C8))', + 'replace' => '09B0 \\1', + ), + 528 => + array ( + 'match' => '09C7 09B2 (007E (09BF|09C7|09C8))', + 'replace' => '09B2 \\1', + ), + 529 => + array ( + 'match' => '09C7 09B6 (007E (09BF|09C7|09C8))', + 'replace' => '09B6 \\1', + ), + 530 => + array ( + 'match' => '09C7 09B7 (007E (09BF|09C7|09C8))', + 'replace' => '09B7 \\1', + ), + 531 => + array ( + 'match' => '09C7 09B8 (007E (09BF|09C7|09C8))', + 'replace' => '09B8 \\1', + ), + 532 => + array ( + 'match' => '09C7 09B9 (007E (09BF|09C7|09C8))', + 'replace' => '09B9 \\1', + ), + 533 => + array ( + 'match' => '09C7 09DC (007E (09BF|09C7|09C8))', + 'replace' => '09DC \\1', + ), + 534 => + array ( + 'match' => '09C7 09DD (007E (09BF|09C7|09C8))', + 'replace' => '09DD \\1', + ), + 535 => + array ( + 'match' => '09C7 09DF (007E (09BF|09C7|09C8))', + 'replace' => '09DF \\1', + ), + 536 => + array ( + 'match' => '09C8 0995 (007E (09BF|09C7|09C8))', + 'replace' => '0995 \\1', + ), + 537 => + array ( + 'match' => '09C8 0996 (007E (09BF|09C7|09C8))', + 'replace' => '0996 \\1', + ), + 538 => + array ( + 'match' => '09C8 0997 (007E (09BF|09C7|09C8))', + 'replace' => '0997 \\1', + ), + 539 => + array ( + 'match' => '09C8 0998 (007E (09BF|09C7|09C8))', + 'replace' => '0998 \\1', + ), + 540 => + array ( + 'match' => '09C8 0999 (007E (09BF|09C7|09C8))', + 'replace' => '0999 \\1', + ), + 541 => + array ( + 'match' => '09C8 099A (007E (09BF|09C7|09C8))', + 'replace' => '099A \\1', + ), + 542 => + array ( + 'match' => '09C8 099B (007E (09BF|09C7|09C8))', + 'replace' => '099B \\1', + ), + 543 => + array ( + 'match' => '09C8 099C (007E (09BF|09C7|09C8))', + 'replace' => '099C \\1', + ), + 544 => + array ( + 'match' => '09C8 099D (007E (09BF|09C7|09C8))', + 'replace' => '099D \\1', + ), + 545 => + array ( + 'match' => '09C8 099F (007E (09BF|09C7|09C8))', + 'replace' => '099F \\1', + ), + 546 => + array ( + 'match' => '09C8 09A0 (007E (09BF|09C7|09C8))', + 'replace' => '09A0 \\1', + ), + 547 => + array ( + 'match' => '09C8 09A1 (007E (09BF|09C7|09C8))', + 'replace' => '09A1 \\1', + ), + 548 => + array ( + 'match' => '09C8 09A2 (007E (09BF|09C7|09C8))', + 'replace' => '09A2 \\1', + ), + 549 => + array ( + 'match' => '09C8 09A3 (007E (09BF|09C7|09C8))', + 'replace' => '09A3 \\1', + ), + 550 => + array ( + 'match' => '09C8 09A4 (007E (09BF|09C7|09C8))', + 'replace' => '09A4 \\1', + ), + 551 => + array ( + 'match' => '09C8 09A5 (007E (09BF|09C7|09C8))', + 'replace' => '09A5 \\1', + ), + 552 => + array ( + 'match' => '09C8 09A6 (007E (09BF|09C7|09C8))', + 'replace' => '09A6 \\1', + ), + 553 => + array ( + 'match' => '09C8 09A7 (007E (09BF|09C7|09C8))', + 'replace' => '09A7 \\1', + ), + 554 => + array ( + 'match' => '09C8 09A8 (007E (09BF|09C7|09C8))', + 'replace' => '09A8 \\1', + ), + 555 => + array ( + 'match' => '09C8 09AA (007E (09BF|09C7|09C8))', + 'replace' => '09AA \\1', + ), + 556 => + array ( + 'match' => '09C8 09AB (007E (09BF|09C7|09C8))', + 'replace' => '09AB \\1', + ), + 557 => + array ( + 'match' => '09C8 09AC (007E (09BF|09C7|09C8))', + 'replace' => '09AC \\1', + ), + 558 => + array ( + 'match' => '09C8 09AD (007E (09BF|09C7|09C8))', + 'replace' => '09AD \\1', + ), + 559 => + array ( + 'match' => '09C8 09AE (007E (09BF|09C7|09C8))', + 'replace' => '09AE \\1', + ), + 560 => + array ( + 'match' => '09C8 09AF (007E (09BF|09C7|09C8))', + 'replace' => '09AF \\1', + ), + 561 => + array ( + 'match' => '09C8 09B0 (007E (09BF|09C7|09C8))', + 'replace' => '09B0 \\1', + ), + 562 => + array ( + 'match' => '09C8 09B2 (007E (09BF|09C7|09C8))', + 'replace' => '09B2 \\1', + ), + 563 => + array ( + 'match' => '09C8 09B6 (007E (09BF|09C7|09C8))', + 'replace' => '09B6 \\1', + ), + 564 => + array ( + 'match' => '09C8 09B7 (007E (09BF|09C7|09C8))', + 'replace' => '09B7 \\1', + ), + 565 => + array ( + 'match' => '09C8 09B8 (007E (09BF|09C7|09C8))', + 'replace' => '09B8 \\1', + ), + 566 => + array ( + 'match' => '09C8 09B9 (007E (09BF|09C7|09C8))', + 'replace' => '09B9 \\1', + ), + 567 => + array ( + 'match' => '09C8 09DC (007E (09BF|09C7|09C8))', + 'replace' => '09DC \\1', + ), + 568 => + array ( + 'match' => '09C8 09DD (007E (09BF|09C7|09C8))', + 'replace' => '09DD \\1', + ), + 569 => + array ( + 'match' => '09C8 09DF (007E (09BF|09C7|09C8))', + 'replace' => '09DF \\1', + ), + 570 => + array ( + 'match' => '09A4 09CD', + 'replace' => 'E066', + ), + 571 => + array ( + 'match' => '09A4 007E', + 'replace' => 'E066', + ), + 572 => + array ( + 'match' => 'E066 200D', + 'replace' => 'E066', + ), + 573 => + array ( + 'match' => '09BF 200D', + 'replace' => '09BF', + ), + 574 => + array ( + 'match' => '09C7 200D', + 'replace' => '09C7', + ), + 575 => + array ( + 'match' => '09C8 200D', + 'replace' => '09C8', + ), + 576 => + array ( + 'match' => '007E', + 'replace' => '09CD', + ), + 577 => + array ( + 'match' => '200C', + 'replace' => '09CD', + ), + 578 => + array ( + 'match' => '00D0', + 'replace' => '09CD', + ), + 579 => + array ( + 'match' => '0997 09C1', + 'replace' => 'E00A', + ), + 580 => + array ( + 'match' => '09DC 09C1', + 'replace' => 'E012', + ), + 581 => + array ( + 'match' => '09DC 09C2', + 'replace' => 'E013', + ), + 582 => + array ( + 'match' => '09DC 09C3', + 'replace' => 'E014', + ), + 583 => + array ( + 'match' => '09DC 09C4', + 'replace' => 'E015', + ), + 584 => + array ( + 'match' => '09DD 09C1', + 'replace' => 'E016', + ), + 585 => + array ( + 'match' => '09DD 09C2', + 'replace' => 'E017', + ), + 586 => + array ( + 'match' => '09DD 09C3', + 'replace' => 'E018', + ), + 587 => + array ( + 'match' => '09DD 09C4', + 'replace' => 'E019', + ), + 588 => + array ( + 'match' => '09B6 09C1', + 'replace' => 'E00F', + ), + 589 => + array ( + 'match' => '09B9 09C1', + 'replace' => 'E010', + ), + 590 => + array ( + 'match' => '09B9 09C3', + 'replace' => 'E011', + ), + 591 => + array ( + 'match' => 'E084 09C1', + 'replace' => 'E19B', + ), + 592 => + array ( + 'match' => 'E0F4 09C1', + 'replace' => 'E19C', + ), + 593 => + array ( + 'match' => 'E10D 09C1', + 'replace' => 'E19D', + ), + 594 => + array ( + 'match' => 'E128 09C1', + 'replace' => 'E19E', + ), + 595 => + array ( + 'match' => 'E133 09C1', + 'replace' => 'E19F', + ), + 596 => + array ( + 'match' => 'E155 09C1', + 'replace' => 'E1A0', + ), + 597 => + array ( + 'match' => 'E169 09C1', + 'replace' => 'E1A1', + ), + 598 => + array ( + 'match' => 'E182 09C1', + 'replace' => 'E1A2', + ), + 599 => + array ( + 'match' => '09BF ((E002|E003|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E079|E07A|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E086|E089|E08A|E08B|E08C|E08D|E08F|E090|E092|E095|E097|E098|E09A|E09B|E09D|E09F|E0A2|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF|E0B1|E0B2|E0B3|E0B4|E0B7|E0B8|E0B9|E0BB|E0BC|E0BD|E0BE|E0BF|E0C5|E0C6|E0C7|E0C8|E0C9|E0CB|E0CC|E0CD|E0CE|E0CF|E0D2|E0D3|E0D5|E0D6|E0D8|E0D9|E0DA|E0DB|E0E0|E0E1|E0E3|E0E5|E0E7|E0E8|E0ED|E0F1|E0F5|E0F6|E0FB|E0FC|E0FD|E0FE|E102|E104|E105|E106|E108|E109|E10A|E10B|E10C|E10F|E110|E112|E114|E115|E117|E118|E119|E11A|E11B|E11E|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E12B|E12C|E130|E131|E132|E133|E134|E135|E136|E137|E139|E13A|E13B|E13F|E144|E149|E14A|E14D|E14F|E150|E153|E154|E156|E157|E158|E159|E15A|E15C|E161|E162|E163|E165|E166|E167|E168|E16C|E16D|E174|E175|E176|E177|E178|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E185|E186|E187|E188|E18B|E18C|E18D|E190|E191|E193|E194|E195|E198|E199|E19A))', + 'replace' => 'E01C \\1', + ), + 600 => + array ( + 'match' => '((0995|0999|099A|099B|099F|09A0|09A1|09A2|09A4|09AB|09AD|09B9)) 09BE', + 'replace' => '\\1 E01A', + ), + 601 => + array ( + 'match' => '((0995|0999|099A|099B|099F|09A0|09A1|09A2|09A4|09AB|09AD|09B9)) 09D7', + 'replace' => '\\1 E03F', + ), + 602 => + array ( + 'match' => '((09A6)) 09BE', + 'replace' => '\\1 E01B', + ), + 603 => + array ( + 'match' => '((09A6)) 09D7', + 'replace' => '\\1 E040', + ), + 604 => + array ( + 'match' => '09C0 0981', + 'replace' => 'E1B4', + ), + 605 => + array ( + 'match' => '09D7 0981', + 'replace' => 'E1B5', + ), + 606 => + array ( + 'match' => 'E01D 0981', + 'replace' => 'E1B6', + ), + 607 => + array ( + 'match' => 'E01E 0981', + 'replace' => 'E1B7', + ), + 608 => + array ( + 'match' => 'E01F 0981', + 'replace' => 'E1B8', + ), + 609 => + array ( + 'match' => 'E03F 0981', + 'replace' => 'E1B9', + ), + 610 => + array ( + 'match' => 'E040 0981', + 'replace' => 'E1BA', + ), + 611 => + array ( + 'match' => '09C0 E069', + 'replace' => 'E1BB', + ), + 612 => + array ( + 'match' => '09D7 E069', + 'replace' => 'E1BC', + ), + 613 => + array ( + 'match' => 'E01D E069', + 'replace' => 'E1BD', + ), + 614 => + array ( + 'match' => 'E01E E069', + 'replace' => 'E1BE', + ), + 615 => + array ( + 'match' => 'E01F E069', + 'replace' => 'E1BF', + ), + 616 => + array ( + 'match' => 'E03F E069', + 'replace' => 'E1C0', + ), + 617 => + array ( + 'match' => 'E040 E069', + 'replace' => 'E1C1', + ), + 618 => + array ( + 'match' => '0987 0981', + 'replace' => 'E1C2', + ), + 619 => + array ( + 'match' => '0988 0981', + 'replace' => 'E1C3', + ), + 620 => + array ( + 'match' => '098A 0981', + 'replace' => 'E1C4', + ), + 621 => + array ( + 'match' => '0990 0981', + 'replace' => 'E1C5', + ), + 622 => + array ( + 'match' => '0994 0981', + 'replace' => 'E1C6', + ), + 623 => + array ( + 'match' => '099F 0981', + 'replace' => 'E1C7', + ), + 624 => + array ( + 'match' => '09A0 0981', + 'replace' => 'E1C8', + ), + 625 => + array ( + 'match' => '099F E068', + 'replace' => 'E1C9', + ), + 626 => + array ( + 'match' => '09A0 E068', + 'replace' => 'E1CA', + ), + 627 => + array ( + 'match' => '099F E069', + 'replace' => 'E1CB', + ), + 628 => + array ( + 'match' => '09A0 E069', + 'replace' => 'E1CC', + ), + 629 => + array ( + 'match' => '((0995|0999|099A|099B|099E|09A1|09A2|09A4|09AB|09AD|09B9|E002|E003|E06A|E073|E074|E077|E078|E07B|E07D|E07E|E07F|E081|E082|E084|E08A|E08C|E08D|E090|E092|E094|E097|E098|E09C|E0A0|E0A1|E0A6|E0A7|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0B1|E0B2|E0B3|E0B4|E0B5|E0B6|E0C1|E0C2|E0C3|E0C4|E0C6|E0C8|E0C9|E0CC|E0CF|E0D9|E0DA|E0DC|E0DD|E0DF|E0E2|E0E3|E0E9|E0EA|E0F0|E108|E109|E10C|E10D|E10E|E110|E112|E113|E11B|E120|E121|E122|E124|E125|E128|E12B|E133|E134|E135|E136|E137|E139|E13A|E13C|E140|E143|E14A|E14C|E153|E156|E157|E159|E15C|E162|E166|E167|E168|E169|E171|E174|E176|E17A|E17E|E180|E182|E183|E18C|E192|E193|E194|E195|E196|E197)) 09C0', + 'replace' => '\\1 E01D', + ), + 630 => + array ( + 'match' => '((09A6|E08F|E0B9|E0F4|E0F6|E0F7|E0F8|E0F9|E0FA|E0FD|E0DC|E0FF|E100|E101|E10F|E11E|E11F|E13B|E15A)) 09C0', + 'replace' => '\\1 E01E', + ), + 631 => + array ( + 'match' => '((099F|09A0|E06E|E06F|E07C|E0CA|E0CB|E0D0|E0D1|E0D4|E0D5|E0D7|E0E0|E0E1|E0E8|E10A|E10B|E11A|E126|E127|E132|E158|E163|E165|E172|E173|E17B|E17C|E181|E18D)) 09C0', + 'replace' => '\\1 E01F', + ), +); +?> \ No newline at end of file diff --git a/include/mpdf/includes/ind_gu_1_001.volt.php b/include/mpdf/includes/ind_gu_1_001.volt.php new file mode 100755 index 0000000000000000000000000000000000000000..ee52a978da1219d6e3f6275874453c9117e5738c --- /dev/null +++ b/include/mpdf/includes/ind_gu_1_001.volt.php @@ -0,0 +1,3314 @@ +<?php + $volt = array ( + 0 => + array ( + 'match' => '0A95 0ACD 0AB7', + 'replace' => 'E002', + ), + 1 => + array ( + 'match' => '0A9C 0ACD 0A9E', + 'replace' => 'E003', + ), + 2 => + array ( + 'match' => '0ACD 200C', + 'replace' => 'E163', + ), + 3 => + array ( + 'match' => '0A95 0ABC', + 'replace' => 'E004', + ), + 4 => + array ( + 'match' => '0A96 0ABC', + 'replace' => 'E005', + ), + 5 => + array ( + 'match' => '0A97 0ABC', + 'replace' => 'E006', + ), + 6 => + array ( + 'match' => '0A98 0ABC', + 'replace' => 'E007', + ), + 7 => + array ( + 'match' => '0A99 0ABC', + 'replace' => 'E008', + ), + 8 => + array ( + 'match' => '0A9A 0ABC', + 'replace' => 'E009', + ), + 9 => + array ( + 'match' => '0A9B 0ABC', + 'replace' => 'E00A', + ), + 10 => + array ( + 'match' => '0A9C 0ABC', + 'replace' => 'E00B', + ), + 11 => + array ( + 'match' => '0A9D 0ABC', + 'replace' => 'E00C', + ), + 12 => + array ( + 'match' => '0A9E 0ABC', + 'replace' => 'E00D', + ), + 13 => + array ( + 'match' => '0A9F 0ABC', + 'replace' => 'E00E', + ), + 14 => + array ( + 'match' => '0AA0 0ABC', + 'replace' => 'E00F', + ), + 15 => + array ( + 'match' => '0AA1 0ABC', + 'replace' => 'E010', + ), + 16 => + array ( + 'match' => '0AA2 0ABC', + 'replace' => 'E011', + ), + 17 => + array ( + 'match' => '0AA3 0ABC', + 'replace' => 'E012', + ), + 18 => + array ( + 'match' => '0AA4 0ABC', + 'replace' => 'E013', + ), + 19 => + array ( + 'match' => '0AA5 0ABC', + 'replace' => 'E014', + ), + 20 => + array ( + 'match' => '0AA6 0ABC', + 'replace' => 'E015', + ), + 21 => + array ( + 'match' => '0AA7 0ABC', + 'replace' => 'E016', + ), + 22 => + array ( + 'match' => '0AA8 0ABC', + 'replace' => 'E017', + ), + 23 => + array ( + 'match' => '0AAA 0ABC', + 'replace' => 'E018', + ), + 24 => + array ( + 'match' => '0AAB 0ABC', + 'replace' => 'E019', + ), + 25 => + array ( + 'match' => '0AAC 0ABC', + 'replace' => 'E01A', + ), + 26 => + array ( + 'match' => '0AAD 0ABC', + 'replace' => 'E01B', + ), + 27 => + array ( + 'match' => '0AAE 0ABC', + 'replace' => 'E01C', + ), + 28 => + array ( + 'match' => '0AAF 0ABC', + 'replace' => 'E01D', + ), + 29 => + array ( + 'match' => '0AB0 0ABC', + 'replace' => 'E01E', + ), + 30 => + array ( + 'match' => '0AB2 0ABC', + 'replace' => 'E01F', + ), + 31 => + array ( + 'match' => '0AB3 0ABC', + 'replace' => 'E020', + ), + 32 => + array ( + 'match' => '0AB5 0ABC', + 'replace' => 'E021', + ), + 33 => + array ( + 'match' => '0AB6 0ABC', + 'replace' => 'E022', + ), + 34 => + array ( + 'match' => '0AB7 0ABC', + 'replace' => 'E023', + ), + 35 => + array ( + 'match' => '0AB8 0ABC', + 'replace' => 'E024', + ), + 36 => + array ( + 'match' => '0AB9 0ABC', + 'replace' => 'E025', + ), + 37 => + array ( + 'match' => 'E002 0ABC', + 'replace' => 'E026', + ), + 38 => + array ( + 'match' => 'E003 0ABC', + 'replace' => 'E027', + ), + 39 => + array ( + 'match' => '((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E)) 0ACD 0AB0', + 'replace' => '\\1 E05D', + ), + 40 => + array ( + 'match' => '(25CC) 0ACD 0AB0', + 'replace' => '\\1 E05D', + ), + 41 => + array ( + 'match' => '(200D) 0ACD 0AB0', + 'replace' => '\\1 E05D', + ), + 42 => + array ( + 'match' => '(0020) 0ACD 0AB0', + 'replace' => '\\1 E05D', + ), + 43 => + array ( + 'match' => '((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E)) 0AB0 0ACD', + 'replace' => '\\1 E032', + ), + 44 => + array ( + 'match' => '((0ABE|0AC0|0AC1|0AC2|0AC3|0AC4|0AC5|0AC7|0AC8|0AC9|0ACB|0ACC)) 0AB0 0ACD', + 'replace' => '\\1 E032', + ), + 45 => + array ( + 'match' => '(E05D) 0AB0 0ACD', + 'replace' => '\\1 E032', + ), + 46 => + array ( + 'match' => '(25CC) 0AB0 0ACD', + 'replace' => '\\1 E032', + ), + 47 => + array ( + 'match' => '0A95 E05D', + 'replace' => 'E05E', + ), + 48 => + array ( + 'match' => '0A96 E05D', + 'replace' => 'E05F', + ), + 49 => + array ( + 'match' => '0A97 E05D', + 'replace' => 'E060', + ), + 50 => + array ( + 'match' => '0A98 E05D', + 'replace' => 'E061', + ), + 51 => + array ( + 'match' => '0A99 E05D', + 'replace' => 'E062', + ), + 52 => + array ( + 'match' => '0A9A E05D', + 'replace' => 'E063', + ), + 53 => + array ( + 'match' => '0A9B E05D', + 'replace' => 'E064', + ), + 54 => + array ( + 'match' => '0A9C E05D', + 'replace' => 'E065', + ), + 55 => + array ( + 'match' => '0A9D E05D', + 'replace' => 'E066', + ), + 56 => + array ( + 'match' => '0A9E E05D', + 'replace' => 'E067', + ), + 57 => + array ( + 'match' => '0A9F E05D', + 'replace' => 'E068', + ), + 58 => + array ( + 'match' => '0AA0 E05D', + 'replace' => 'E069', + ), + 59 => + array ( + 'match' => '0AA1 E05D', + 'replace' => 'E06A', + ), + 60 => + array ( + 'match' => '0AA2 E05D', + 'replace' => 'E06B', + ), + 61 => + array ( + 'match' => '0AA3 E05D', + 'replace' => 'E06C', + ), + 62 => + array ( + 'match' => '0AA4 E05D', + 'replace' => 'E06D', + ), + 63 => + array ( + 'match' => '0AA5 E05D', + 'replace' => 'E06E', + ), + 64 => + array ( + 'match' => '0AA6 E05D', + 'replace' => 'E06F', + ), + 65 => + array ( + 'match' => '0AA7 E05D', + 'replace' => 'E070', + ), + 66 => + array ( + 'match' => '0AA8 E05D', + 'replace' => 'E071', + ), + 67 => + array ( + 'match' => '0AAA E05D', + 'replace' => 'E072', + ), + 68 => + array ( + 'match' => '0AAB E05D', + 'replace' => 'E073', + ), + 69 => + array ( + 'match' => '0AAC E05D', + 'replace' => 'E074', + ), + 70 => + array ( + 'match' => '0AAD E05D', + 'replace' => 'E075', + ), + 71 => + array ( + 'match' => '0AAE E05D', + 'replace' => 'E076', + ), + 72 => + array ( + 'match' => '0AAF E05D', + 'replace' => 'E077', + ), + 73 => + array ( + 'match' => '0AB0 E05D', + 'replace' => 'E078', + ), + 74 => + array ( + 'match' => '0AB2 E05D', + 'replace' => 'E079', + ), + 75 => + array ( + 'match' => '0AB3 E05D', + 'replace' => 'E07A', + ), + 76 => + array ( + 'match' => '0AB5 E05D', + 'replace' => 'E07B', + ), + 77 => + array ( + 'match' => '0AB6 E05D', + 'replace' => 'E07C', + ), + 78 => + array ( + 'match' => '0AB7 E05D', + 'replace' => 'E07D', + ), + 79 => + array ( + 'match' => '0AB8 E05D', + 'replace' => 'E07E', + ), + 80 => + array ( + 'match' => '0AB9 E05D', + 'replace' => 'E07F', + ), + 81 => + array ( + 'match' => 'E002 E05D', + 'replace' => 'E080', + ), + 82 => + array ( + 'match' => 'E003 E05D', + 'replace' => 'E081', + ), + 83 => + array ( + 'match' => 'E004 E05D', + 'replace' => 'E082', + ), + 84 => + array ( + 'match' => 'E005 E05D', + 'replace' => 'E083', + ), + 85 => + array ( + 'match' => 'E006 E05D', + 'replace' => 'E084', + ), + 86 => + array ( + 'match' => 'E007 E05D', + 'replace' => 'E085', + ), + 87 => + array ( + 'match' => 'E008 E05D', + 'replace' => 'E086', + ), + 88 => + array ( + 'match' => 'E009 E05D', + 'replace' => 'E087', + ), + 89 => + array ( + 'match' => 'E00A E05D', + 'replace' => 'E088', + ), + 90 => + array ( + 'match' => 'E00B E05D', + 'replace' => 'E089', + ), + 91 => + array ( + 'match' => 'E00C E05D', + 'replace' => 'E08A', + ), + 92 => + array ( + 'match' => 'E00D E05D', + 'replace' => 'E08B', + ), + 93 => + array ( + 'match' => 'E00E E05D', + 'replace' => 'E08C', + ), + 94 => + array ( + 'match' => 'E00F E05D', + 'replace' => 'E08D', + ), + 95 => + array ( + 'match' => 'E010 E05D', + 'replace' => 'E08E', + ), + 96 => + array ( + 'match' => 'E011 E05D', + 'replace' => 'E08F', + ), + 97 => + array ( + 'match' => 'E012 E05D', + 'replace' => 'E090', + ), + 98 => + array ( + 'match' => 'E013 E05D', + 'replace' => 'E091', + ), + 99 => + array ( + 'match' => 'E014 E05D', + 'replace' => 'E092', + ), + 100 => + array ( + 'match' => 'E015 E05D', + 'replace' => 'E093', + ), + 101 => + array ( + 'match' => 'E016 E05D', + 'replace' => 'E094', + ), + 102 => + array ( + 'match' => 'E017 E05D', + 'replace' => 'E095', + ), + 103 => + array ( + 'match' => 'E018 E05D', + 'replace' => 'E096', + ), + 104 => + array ( + 'match' => 'E019 E05D', + 'replace' => 'E097', + ), + 105 => + array ( + 'match' => 'E01A E05D', + 'replace' => 'E098', + ), + 106 => + array ( + 'match' => 'E01B E05D', + 'replace' => 'E099', + ), + 107 => + array ( + 'match' => 'E01C E05D', + 'replace' => 'E09A', + ), + 108 => + array ( + 'match' => 'E01D E05D', + 'replace' => 'E09B', + ), + 109 => + array ( + 'match' => 'E01E E05D', + 'replace' => 'E09C', + ), + 110 => + array ( + 'match' => 'E01F E05D', + 'replace' => 'E09D', + ), + 111 => + array ( + 'match' => 'E020 E05D', + 'replace' => 'E09E', + ), + 112 => + array ( + 'match' => 'E021 E05D', + 'replace' => 'E09F', + ), + 113 => + array ( + 'match' => 'E022 E05D', + 'replace' => 'E0A0', + ), + 114 => + array ( + 'match' => 'E023 E05D', + 'replace' => 'E0A1', + ), + 115 => + array ( + 'match' => 'E024 E05D', + 'replace' => 'E0A2', + ), + 116 => + array ( + 'match' => 'E025 E05D', + 'replace' => 'E0A3', + ), + 117 => + array ( + 'match' => 'E026 E05D', + 'replace' => 'E0A4', + ), + 118 => + array ( + 'match' => 'E027 E05D', + 'replace' => 'E0A5', + ), + 119 => + array ( + 'match' => '0A95 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0A6 \\1', + ), + 120 => + array ( + 'match' => '0A96 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0A7 \\1', + ), + 121 => + array ( + 'match' => '0A97 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0A8 \\1', + ), + 122 => + array ( + 'match' => '0A98 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0A9 \\1', + ), + 123 => + array ( + 'match' => '0A99 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0AA \\1', + ), + 124 => + array ( + 'match' => '0A9A 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0AB \\1', + ), + 125 => + array ( + 'match' => '0A9B 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0AC \\1', + ), + 126 => + array ( + 'match' => '0A9C 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0AD \\1', + ), + 127 => + array ( + 'match' => '0A9D 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0AE \\1', + ), + 128 => + array ( + 'match' => '0A9E 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0AF \\1', + ), + 129 => + array ( + 'match' => '0A9F 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0B0 \\1', + ), + 130 => + array ( + 'match' => '0AA0 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0B1 \\1', + ), + 131 => + array ( + 'match' => '0AA1 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0B2 \\1', + ), + 132 => + array ( + 'match' => '0AA2 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0B3 \\1', + ), + 133 => + array ( + 'match' => '0AA3 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0B4 \\1', + ), + 134 => + array ( + 'match' => '0AA4 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0B5 \\1', + ), + 135 => + array ( + 'match' => '0AA5 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0B6 \\1', + ), + 136 => + array ( + 'match' => '0AA6 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0B7 \\1', + ), + 137 => + array ( + 'match' => '0AA7 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0B8 \\1', + ), + 138 => + array ( + 'match' => '0AA8 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0B9 \\1', + ), + 139 => + array ( + 'match' => '0AAA 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0BA \\1', + ), + 140 => + array ( + 'match' => '0AAB 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0BB \\1', + ), + 141 => + array ( + 'match' => '0AAC 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0BC \\1', + ), + 142 => + array ( + 'match' => '0AAD 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0BD \\1', + ), + 143 => + array ( + 'match' => '0AAE 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0BE \\1', + ), + 144 => + array ( + 'match' => '0AAF 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0BF \\1', + ), + 145 => + array ( + 'match' => '0AB0 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0C0 \\1', + ), + 146 => + array ( + 'match' => '0AB2 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0C1 \\1', + ), + 147 => + array ( + 'match' => '0AB3 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0C2 \\1', + ), + 148 => + array ( + 'match' => '0AB5 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0C3 \\1', + ), + 149 => + array ( + 'match' => '0AB6 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0C4 \\1', + ), + 150 => + array ( + 'match' => '0AB7 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0C5 \\1', + ), + 151 => + array ( + 'match' => '0AB8 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0C6 \\1', + ), + 152 => + array ( + 'match' => '0AB9 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0C7 \\1', + ), + 153 => + array ( + 'match' => 'E002 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0C8 \\1', + ), + 154 => + array ( + 'match' => 'E003 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0C9 \\1', + ), + 155 => + array ( + 'match' => 'E004 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0CA \\1', + ), + 156 => + array ( + 'match' => 'E005 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0CB \\1', + ), + 157 => + array ( + 'match' => 'E006 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0CC \\1', + ), + 158 => + array ( + 'match' => 'E007 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0CD \\1', + ), + 159 => + array ( + 'match' => 'E008 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0CE \\1', + ), + 160 => + array ( + 'match' => 'E009 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0CF \\1', + ), + 161 => + array ( + 'match' => 'E00A 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0D0 \\1', + ), + 162 => + array ( + 'match' => 'E00B 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0D1 \\1', + ), + 163 => + array ( + 'match' => 'E00C 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0D2 \\1', + ), + 164 => + array ( + 'match' => 'E00D 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0D3 \\1', + ), + 165 => + array ( + 'match' => 'E00E 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0D4 \\1', + ), + 166 => + array ( + 'match' => 'E00F 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0D5 \\1', + ), + 167 => + array ( + 'match' => 'E010 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0D6 \\1', + ), + 168 => + array ( + 'match' => 'E011 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0D7 \\1', + ), + 169 => + array ( + 'match' => 'E012 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0D8 \\1', + ), + 170 => + array ( + 'match' => 'E013 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0D9 \\1', + ), + 171 => + array ( + 'match' => 'E014 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0DA \\1', + ), + 172 => + array ( + 'match' => 'E015 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0DB \\1', + ), + 173 => + array ( + 'match' => 'E016 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0DC \\1', + ), + 174 => + array ( + 'match' => 'E017 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0DD \\1', + ), + 175 => + array ( + 'match' => 'E018 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0DE \\1', + ), + 176 => + array ( + 'match' => 'E019 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0DF \\1', + ), + 177 => + array ( + 'match' => 'E01A 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0E0 \\1', + ), + 178 => + array ( + 'match' => 'E01B 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0E1 \\1', + ), + 179 => + array ( + 'match' => 'E01C 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0E2 \\1', + ), + 180 => + array ( + 'match' => 'E01D 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0E3 \\1', + ), + 181 => + array ( + 'match' => 'E01E 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0E4 \\1', + ), + 182 => + array ( + 'match' => 'E01F 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0E5 \\1', + ), + 183 => + array ( + 'match' => 'E020 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0E6 \\1', + ), + 184 => + array ( + 'match' => 'E021 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0E7 \\1', + ), + 185 => + array ( + 'match' => 'E022 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0E8 \\1', + ), + 186 => + array ( + 'match' => 'E023 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0E9 \\1', + ), + 187 => + array ( + 'match' => 'E024 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0EA \\1', + ), + 188 => + array ( + 'match' => 'E025 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0EB \\1', + ), + 189 => + array ( + 'match' => 'E026 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0EC \\1', + ), + 190 => + array ( + 'match' => 'E027 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0ED \\1', + ), + 191 => + array ( + 'match' => 'E05E 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0EE \\1', + ), + 192 => + array ( + 'match' => 'E05F 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0EF \\1', + ), + 193 => + array ( + 'match' => 'E060 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0F0 \\1', + ), + 194 => + array ( + 'match' => 'E061 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0F1 \\1', + ), + 195 => + array ( + 'match' => 'E062 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0F2 \\1', + ), + 196 => + array ( + 'match' => 'E063 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0F3 \\1', + ), + 197 => + array ( + 'match' => 'E064 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0F4 \\1', + ), + 198 => + array ( + 'match' => 'E065 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0F5 \\1', + ), + 199 => + array ( + 'match' => 'E066 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0F6 \\1', + ), + 200 => + array ( + 'match' => 'E067 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0F7 \\1', + ), + 201 => + array ( + 'match' => 'E068 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0F8 \\1', + ), + 202 => + array ( + 'match' => 'E069 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0F9 \\1', + ), + 203 => + array ( + 'match' => 'E06A 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0FA \\1', + ), + 204 => + array ( + 'match' => 'E06B 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0FB \\1', + ), + 205 => + array ( + 'match' => 'E06C 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0FC \\1', + ), + 206 => + array ( + 'match' => 'E06D 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0FD \\1', + ), + 207 => + array ( + 'match' => 'E06E 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0FE \\1', + ), + 208 => + array ( + 'match' => 'E06F 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E0FF \\1', + ), + 209 => + array ( + 'match' => 'E070 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E100 \\1', + ), + 210 => + array ( + 'match' => 'E071 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E101 \\1', + ), + 211 => + array ( + 'match' => 'E072 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E102 \\1', + ), + 212 => + array ( + 'match' => 'E073 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E103 \\1', + ), + 213 => + array ( + 'match' => 'E074 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E104 \\1', + ), + 214 => + array ( + 'match' => 'E075 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E105 \\1', + ), + 215 => + array ( + 'match' => 'E076 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E106 \\1', + ), + 216 => + array ( + 'match' => 'E077 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E107 \\1', + ), + 217 => + array ( + 'match' => 'E078 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E108 \\1', + ), + 218 => + array ( + 'match' => 'E079 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E109 \\1', + ), + 219 => + array ( + 'match' => 'E07A 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E10A \\1', + ), + 220 => + array ( + 'match' => 'E07B 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E10B \\1', + ), + 221 => + array ( + 'match' => 'E07C 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E10C \\1', + ), + 222 => + array ( + 'match' => 'E07D 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E10D \\1', + ), + 223 => + array ( + 'match' => 'E07E 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E10E \\1', + ), + 224 => + array ( + 'match' => 'E07F 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E10F \\1', + ), + 225 => + array ( + 'match' => 'E080 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E110 \\1', + ), + 226 => + array ( + 'match' => 'E081 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E111 \\1', + ), + 227 => + array ( + 'match' => 'E082 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E112 \\1', + ), + 228 => + array ( + 'match' => 'E083 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E113 \\1', + ), + 229 => + array ( + 'match' => 'E084 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E114 \\1', + ), + 230 => + array ( + 'match' => 'E085 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E115 \\1', + ), + 231 => + array ( + 'match' => 'E086 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E116 \\1', + ), + 232 => + array ( + 'match' => 'E087 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E117 \\1', + ), + 233 => + array ( + 'match' => 'E088 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E118 \\1', + ), + 234 => + array ( + 'match' => 'E089 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E119 \\1', + ), + 235 => + array ( + 'match' => 'E08A 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E11A \\1', + ), + 236 => + array ( + 'match' => 'E08B 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E11B \\1', + ), + 237 => + array ( + 'match' => 'E08C 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E11C \\1', + ), + 238 => + array ( + 'match' => 'E08D 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E11D \\1', + ), + 239 => + array ( + 'match' => 'E08E 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E11E \\1', + ), + 240 => + array ( + 'match' => 'E08F 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E11F \\1', + ), + 241 => + array ( + 'match' => 'E090 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E120 \\1', + ), + 242 => + array ( + 'match' => 'E091 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E121 \\1', + ), + 243 => + array ( + 'match' => 'E092 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E122 \\1', + ), + 244 => + array ( + 'match' => 'E093 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E123 \\1', + ), + 245 => + array ( + 'match' => 'E094 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E124 \\1', + ), + 246 => + array ( + 'match' => 'E095 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E125 \\1', + ), + 247 => + array ( + 'match' => 'E096 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E126 \\1', + ), + 248 => + array ( + 'match' => 'E097 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E127 \\1', + ), + 249 => + array ( + 'match' => 'E098 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E128 \\1', + ), + 250 => + array ( + 'match' => 'E099 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E129 \\1', + ), + 251 => + array ( + 'match' => 'E09A 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E12A \\1', + ), + 252 => + array ( + 'match' => 'E09B 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E12B \\1', + ), + 253 => + array ( + 'match' => 'E09C 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E12C \\1', + ), + 254 => + array ( + 'match' => 'E09D 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E12D \\1', + ), + 255 => + array ( + 'match' => 'E09E 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E12E \\1', + ), + 256 => + array ( + 'match' => 'E09F 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E12F \\1', + ), + 257 => + array ( + 'match' => 'E0A0 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E130 \\1', + ), + 258 => + array ( + 'match' => 'E0A1 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E131 \\1', + ), + 259 => + array ( + 'match' => 'E0A2 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E132 \\1', + ), + 260 => + array ( + 'match' => 'E0A3 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E133 \\1', + ), + 261 => + array ( + 'match' => 'E0A4 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E134 \\1', + ), + 262 => + array ( + 'match' => 'E0A5 0ACD ((0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E))', + 'replace' => 'E135 \\1', + ), + 263 => + array ( + 'match' => '0A95 0ACD (200D)', + 'replace' => 'E0A6 \\1', + ), + 264 => + array ( + 'match' => '0A96 0ACD (200D)', + 'replace' => 'E0A7 \\1', + ), + 265 => + array ( + 'match' => '0A97 0ACD (200D)', + 'replace' => 'E0A8 \\1', + ), + 266 => + array ( + 'match' => '0A98 0ACD (200D)', + 'replace' => 'E0A9 \\1', + ), + 267 => + array ( + 'match' => '0A99 0ACD (200D)', + 'replace' => 'E0AA \\1', + ), + 268 => + array ( + 'match' => '0A9A 0ACD (200D)', + 'replace' => 'E0AB \\1', + ), + 269 => + array ( + 'match' => '0A9B 0ACD (200D)', + 'replace' => 'E0AC \\1', + ), + 270 => + array ( + 'match' => '0A9C 0ACD (200D)', + 'replace' => 'E0AD \\1', + ), + 271 => + array ( + 'match' => '0A9D 0ACD (200D)', + 'replace' => 'E0AE \\1', + ), + 272 => + array ( + 'match' => '0A9E 0ACD (200D)', + 'replace' => 'E0AF \\1', + ), + 273 => + array ( + 'match' => '0A9F 0ACD (200D)', + 'replace' => 'E0B0 \\1', + ), + 274 => + array ( + 'match' => '0AA0 0ACD (200D)', + 'replace' => 'E0B1 \\1', + ), + 275 => + array ( + 'match' => '0AA1 0ACD (200D)', + 'replace' => 'E0B2 \\1', + ), + 276 => + array ( + 'match' => '0AA2 0ACD (200D)', + 'replace' => 'E0B3 \\1', + ), + 277 => + array ( + 'match' => '0AA3 0ACD (200D)', + 'replace' => 'E0B4 \\1', + ), + 278 => + array ( + 'match' => '0AA4 0ACD (200D)', + 'replace' => 'E0B5 \\1', + ), + 279 => + array ( + 'match' => '0AA5 0ACD (200D)', + 'replace' => 'E0B6 \\1', + ), + 280 => + array ( + 'match' => '0AA6 0ACD (200D)', + 'replace' => 'E0B7 \\1', + ), + 281 => + array ( + 'match' => '0AA7 0ACD (200D)', + 'replace' => 'E0B8 \\1', + ), + 282 => + array ( + 'match' => '0AA8 0ACD (200D)', + 'replace' => 'E0B9 \\1', + ), + 283 => + array ( + 'match' => '0AAA 0ACD (200D)', + 'replace' => 'E0BA \\1', + ), + 284 => + array ( + 'match' => '0AAB 0ACD (200D)', + 'replace' => 'E0BB \\1', + ), + 285 => + array ( + 'match' => '0AAC 0ACD (200D)', + 'replace' => 'E0BC \\1', + ), + 286 => + array ( + 'match' => '0AAD 0ACD (200D)', + 'replace' => 'E0BD \\1', + ), + 287 => + array ( + 'match' => '0AAE 0ACD (200D)', + 'replace' => 'E0BE \\1', + ), + 288 => + array ( + 'match' => '0AAF 0ACD (200D)', + 'replace' => 'E0BF \\1', + ), + 289 => + array ( + 'match' => '0AB0 0ACD (200D)', + 'replace' => 'E0C0 \\1', + ), + 290 => + array ( + 'match' => '0AB2 0ACD (200D)', + 'replace' => 'E0C1 \\1', + ), + 291 => + array ( + 'match' => '0AB3 0ACD (200D)', + 'replace' => 'E0C2 \\1', + ), + 292 => + array ( + 'match' => '0AB5 0ACD (200D)', + 'replace' => 'E0C3 \\1', + ), + 293 => + array ( + 'match' => '0AB6 0ACD (200D)', + 'replace' => 'E0C4 \\1', + ), + 294 => + array ( + 'match' => '0AB7 0ACD (200D)', + 'replace' => 'E0C5 \\1', + ), + 295 => + array ( + 'match' => '0AB8 0ACD (200D)', + 'replace' => 'E0C6 \\1', + ), + 296 => + array ( + 'match' => '0AB9 0ACD (200D)', + 'replace' => 'E0C7 \\1', + ), + 297 => + array ( + 'match' => 'E002 0ACD (200D)', + 'replace' => 'E0C8 \\1', + ), + 298 => + array ( + 'match' => 'E003 0ACD (200D)', + 'replace' => 'E0C9 \\1', + ), + 299 => + array ( + 'match' => 'E004 0ACD (200D)', + 'replace' => 'E0CA \\1', + ), + 300 => + array ( + 'match' => 'E005 0ACD (200D)', + 'replace' => 'E0CB \\1', + ), + 301 => + array ( + 'match' => 'E006 0ACD (200D)', + 'replace' => 'E0CC \\1', + ), + 302 => + array ( + 'match' => 'E007 0ACD (200D)', + 'replace' => 'E0CD \\1', + ), + 303 => + array ( + 'match' => 'E008 0ACD (200D)', + 'replace' => 'E0CE \\1', + ), + 304 => + array ( + 'match' => 'E009 0ACD (200D)', + 'replace' => 'E0CF \\1', + ), + 305 => + array ( + 'match' => 'E00A 0ACD (200D)', + 'replace' => 'E0D0 \\1', + ), + 306 => + array ( + 'match' => 'E00B 0ACD (200D)', + 'replace' => 'E0D1 \\1', + ), + 307 => + array ( + 'match' => 'E00C 0ACD (200D)', + 'replace' => 'E0D2 \\1', + ), + 308 => + array ( + 'match' => 'E00D 0ACD (200D)', + 'replace' => 'E0D3 \\1', + ), + 309 => + array ( + 'match' => 'E00E 0ACD (200D)', + 'replace' => 'E0D4 \\1', + ), + 310 => + array ( + 'match' => 'E00F 0ACD (200D)', + 'replace' => 'E0D5 \\1', + ), + 311 => + array ( + 'match' => 'E010 0ACD (200D)', + 'replace' => 'E0D6 \\1', + ), + 312 => + array ( + 'match' => 'E011 0ACD (200D)', + 'replace' => 'E0D7 \\1', + ), + 313 => + array ( + 'match' => 'E012 0ACD (200D)', + 'replace' => 'E0D8 \\1', + ), + 314 => + array ( + 'match' => 'E013 0ACD (200D)', + 'replace' => 'E0D9 \\1', + ), + 315 => + array ( + 'match' => 'E014 0ACD (200D)', + 'replace' => 'E0DA \\1', + ), + 316 => + array ( + 'match' => 'E015 0ACD (200D)', + 'replace' => 'E0DB \\1', + ), + 317 => + array ( + 'match' => 'E016 0ACD (200D)', + 'replace' => 'E0DC \\1', + ), + 318 => + array ( + 'match' => 'E017 0ACD (200D)', + 'replace' => 'E0DD \\1', + ), + 319 => + array ( + 'match' => 'E018 0ACD (200D)', + 'replace' => 'E0DE \\1', + ), + 320 => + array ( + 'match' => 'E019 0ACD (200D)', + 'replace' => 'E0DF \\1', + ), + 321 => + array ( + 'match' => 'E01A 0ACD (200D)', + 'replace' => 'E0E0 \\1', + ), + 322 => + array ( + 'match' => 'E01B 0ACD (200D)', + 'replace' => 'E0E1 \\1', + ), + 323 => + array ( + 'match' => 'E01C 0ACD (200D)', + 'replace' => 'E0E2 \\1', + ), + 324 => + array ( + 'match' => 'E01D 0ACD (200D)', + 'replace' => 'E0E3 \\1', + ), + 325 => + array ( + 'match' => 'E01E 0ACD (200D)', + 'replace' => 'E0E4 \\1', + ), + 326 => + array ( + 'match' => 'E01F 0ACD (200D)', + 'replace' => 'E0E5 \\1', + ), + 327 => + array ( + 'match' => 'E020 0ACD (200D)', + 'replace' => 'E0E6 \\1', + ), + 328 => + array ( + 'match' => 'E021 0ACD (200D)', + 'replace' => 'E0E7 \\1', + ), + 329 => + array ( + 'match' => 'E022 0ACD (200D)', + 'replace' => 'E0E8 \\1', + ), + 330 => + array ( + 'match' => 'E023 0ACD (200D)', + 'replace' => 'E0E9 \\1', + ), + 331 => + array ( + 'match' => 'E024 0ACD (200D)', + 'replace' => 'E0EA \\1', + ), + 332 => + array ( + 'match' => 'E025 0ACD (200D)', + 'replace' => 'E0EB \\1', + ), + 333 => + array ( + 'match' => 'E026 0ACD (200D)', + 'replace' => 'E0EC \\1', + ), + 334 => + array ( + 'match' => 'E027 0ACD (200D)', + 'replace' => 'E0ED \\1', + ), + 335 => + array ( + 'match' => 'E05E 0ACD (200D)', + 'replace' => 'E0EE \\1', + ), + 336 => + array ( + 'match' => 'E05F 0ACD (200D)', + 'replace' => 'E0EF \\1', + ), + 337 => + array ( + 'match' => 'E060 0ACD (200D)', + 'replace' => 'E0F0 \\1', + ), + 338 => + array ( + 'match' => 'E061 0ACD (200D)', + 'replace' => 'E0F1 \\1', + ), + 339 => + array ( + 'match' => 'E062 0ACD (200D)', + 'replace' => 'E0F2 \\1', + ), + 340 => + array ( + 'match' => 'E063 0ACD (200D)', + 'replace' => 'E0F3 \\1', + ), + 341 => + array ( + 'match' => 'E064 0ACD (200D)', + 'replace' => 'E0F4 \\1', + ), + 342 => + array ( + 'match' => 'E065 0ACD (200D)', + 'replace' => 'E0F5 \\1', + ), + 343 => + array ( + 'match' => 'E066 0ACD (200D)', + 'replace' => 'E0F6 \\1', + ), + 344 => + array ( + 'match' => 'E067 0ACD (200D)', + 'replace' => 'E0F7 \\1', + ), + 345 => + array ( + 'match' => 'E068 0ACD (200D)', + 'replace' => 'E0F8 \\1', + ), + 346 => + array ( + 'match' => 'E069 0ACD (200D)', + 'replace' => 'E0F9 \\1', + ), + 347 => + array ( + 'match' => 'E06A 0ACD (200D)', + 'replace' => 'E0FA \\1', + ), + 348 => + array ( + 'match' => 'E06B 0ACD (200D)', + 'replace' => 'E0FB \\1', + ), + 349 => + array ( + 'match' => 'E06C 0ACD (200D)', + 'replace' => 'E0FC \\1', + ), + 350 => + array ( + 'match' => 'E06D 0ACD (200D)', + 'replace' => 'E0FD \\1', + ), + 351 => + array ( + 'match' => 'E06E 0ACD (200D)', + 'replace' => 'E0FE \\1', + ), + 352 => + array ( + 'match' => 'E06F 0ACD (200D)', + 'replace' => 'E0FF \\1', + ), + 353 => + array ( + 'match' => 'E070 0ACD (200D)', + 'replace' => 'E100 \\1', + ), + 354 => + array ( + 'match' => 'E071 0ACD (200D)', + 'replace' => 'E101 \\1', + ), + 355 => + array ( + 'match' => 'E072 0ACD (200D)', + 'replace' => 'E102 \\1', + ), + 356 => + array ( + 'match' => 'E073 0ACD (200D)', + 'replace' => 'E103 \\1', + ), + 357 => + array ( + 'match' => 'E074 0ACD (200D)', + 'replace' => 'E104 \\1', + ), + 358 => + array ( + 'match' => 'E075 0ACD (200D)', + 'replace' => 'E105 \\1', + ), + 359 => + array ( + 'match' => 'E076 0ACD (200D)', + 'replace' => 'E106 \\1', + ), + 360 => + array ( + 'match' => 'E077 0ACD (200D)', + 'replace' => 'E107 \\1', + ), + 361 => + array ( + 'match' => 'E078 0ACD (200D)', + 'replace' => 'E108 \\1', + ), + 362 => + array ( + 'match' => 'E079 0ACD (200D)', + 'replace' => 'E109 \\1', + ), + 363 => + array ( + 'match' => 'E07A 0ACD (200D)', + 'replace' => 'E10A \\1', + ), + 364 => + array ( + 'match' => 'E07B 0ACD (200D)', + 'replace' => 'E10B \\1', + ), + 365 => + array ( + 'match' => 'E07C 0ACD (200D)', + 'replace' => 'E10C \\1', + ), + 366 => + array ( + 'match' => 'E07D 0ACD (200D)', + 'replace' => 'E10D \\1', + ), + 367 => + array ( + 'match' => 'E07E 0ACD (200D)', + 'replace' => 'E10E \\1', + ), + 368 => + array ( + 'match' => 'E07F 0ACD (200D)', + 'replace' => 'E10F \\1', + ), + 369 => + array ( + 'match' => 'E080 0ACD (200D)', + 'replace' => 'E110 \\1', + ), + 370 => + array ( + 'match' => 'E081 0ACD (200D)', + 'replace' => 'E111 \\1', + ), + 371 => + array ( + 'match' => 'E082 0ACD (200D)', + 'replace' => 'E112 \\1', + ), + 372 => + array ( + 'match' => 'E083 0ACD (200D)', + 'replace' => 'E113 \\1', + ), + 373 => + array ( + 'match' => 'E084 0ACD (200D)', + 'replace' => 'E114 \\1', + ), + 374 => + array ( + 'match' => 'E085 0ACD (200D)', + 'replace' => 'E115 \\1', + ), + 375 => + array ( + 'match' => 'E086 0ACD (200D)', + 'replace' => 'E116 \\1', + ), + 376 => + array ( + 'match' => 'E087 0ACD (200D)', + 'replace' => 'E117 \\1', + ), + 377 => + array ( + 'match' => 'E088 0ACD (200D)', + 'replace' => 'E118 \\1', + ), + 378 => + array ( + 'match' => 'E089 0ACD (200D)', + 'replace' => 'E119 \\1', + ), + 379 => + array ( + 'match' => 'E08A 0ACD (200D)', + 'replace' => 'E11A \\1', + ), + 380 => + array ( + 'match' => 'E08B 0ACD (200D)', + 'replace' => 'E11B \\1', + ), + 381 => + array ( + 'match' => 'E08C 0ACD (200D)', + 'replace' => 'E11C \\1', + ), + 382 => + array ( + 'match' => 'E08D 0ACD (200D)', + 'replace' => 'E11D \\1', + ), + 383 => + array ( + 'match' => 'E08E 0ACD (200D)', + 'replace' => 'E11E \\1', + ), + 384 => + array ( + 'match' => 'E08F 0ACD (200D)', + 'replace' => 'E11F \\1', + ), + 385 => + array ( + 'match' => 'E090 0ACD (200D)', + 'replace' => 'E120 \\1', + ), + 386 => + array ( + 'match' => 'E091 0ACD (200D)', + 'replace' => 'E121 \\1', + ), + 387 => + array ( + 'match' => 'E092 0ACD (200D)', + 'replace' => 'E122 \\1', + ), + 388 => + array ( + 'match' => 'E093 0ACD (200D)', + 'replace' => 'E123 \\1', + ), + 389 => + array ( + 'match' => 'E094 0ACD (200D)', + 'replace' => 'E124 \\1', + ), + 390 => + array ( + 'match' => 'E095 0ACD (200D)', + 'replace' => 'E125 \\1', + ), + 391 => + array ( + 'match' => 'E096 0ACD (200D)', + 'replace' => 'E126 \\1', + ), + 392 => + array ( + 'match' => 'E097 0ACD (200D)', + 'replace' => 'E127 \\1', + ), + 393 => + array ( + 'match' => 'E098 0ACD (200D)', + 'replace' => 'E128 \\1', + ), + 394 => + array ( + 'match' => 'E099 0ACD (200D)', + 'replace' => 'E129 \\1', + ), + 395 => + array ( + 'match' => 'E09A 0ACD (200D)', + 'replace' => 'E12A \\1', + ), + 396 => + array ( + 'match' => 'E09B 0ACD (200D)', + 'replace' => 'E12B \\1', + ), + 397 => + array ( + 'match' => 'E09C 0ACD (200D)', + 'replace' => 'E12C \\1', + ), + 398 => + array ( + 'match' => 'E09D 0ACD (200D)', + 'replace' => 'E12D \\1', + ), + 399 => + array ( + 'match' => 'E09E 0ACD (200D)', + 'replace' => 'E12E \\1', + ), + 400 => + array ( + 'match' => 'E09F 0ACD (200D)', + 'replace' => 'E12F \\1', + ), + 401 => + array ( + 'match' => 'E0A0 0ACD (200D)', + 'replace' => 'E130 \\1', + ), + 402 => + array ( + 'match' => 'E0A1 0ACD (200D)', + 'replace' => 'E131 \\1', + ), + 403 => + array ( + 'match' => 'E0A2 0ACD (200D)', + 'replace' => 'E132 \\1', + ), + 404 => + array ( + 'match' => 'E0A3 0ACD (200D)', + 'replace' => 'E133 \\1', + ), + 405 => + array ( + 'match' => 'E0A4 0ACD (200D)', + 'replace' => 'E134 \\1', + ), + 406 => + array ( + 'match' => 'E0A5 0ACD (200D)', + 'replace' => 'E135 \\1', + ), + 407 => + array ( + 'match' => 'E0A6 E0A6', + 'replace' => 'E221', + ), + 408 => + array ( + 'match' => 'E0B7 E0A8', + 'replace' => 'E223', + ), + 409 => + array ( + 'match' => 'E0C6 E0B5', + 'replace' => 'E222', + ), + 410 => + array ( + 'match' => 'E0AA 0A95', + 'replace' => 'E136', + ), + 411 => + array ( + 'match' => 'E0AA 0A96', + 'replace' => 'E137', + ), + 412 => + array ( + 'match' => 'E0AA 0A97', + 'replace' => 'E138', + ), + 413 => + array ( + 'match' => 'E0AA 0A98', + 'replace' => 'E139', + ), + 414 => + array ( + 'match' => 'E0AA 0AAE', + 'replace' => 'E13A', + ), + 415 => + array ( + 'match' => 'E0AA 0AB5', + 'replace' => 'E13B', + ), + 416 => + array ( + 'match' => 'E0AA E002', + 'replace' => 'E13C', + ), + 417 => + array ( + 'match' => 'E0AC 0AB5', + 'replace' => 'E13D', + ), + 418 => + array ( + 'match' => 'E0B0 0A9F', + 'replace' => 'E13E', + ), + 419 => + array ( + 'match' => 'E0B0 0AA0', + 'replace' => 'E13F', + ), + 420 => + array ( + 'match' => 'E0B1 0AA0', + 'replace' => 'E140', + ), + 421 => + array ( + 'match' => 'E0B2 0AA1', + 'replace' => 'E141', + ), + 422 => + array ( + 'match' => 'E0B2 0AA2', + 'replace' => 'E142', + ), + 423 => + array ( + 'match' => 'E0B3 0AA2', + 'replace' => 'E143', + ), + 424 => + array ( + 'match' => 'E0B7 0A97', + 'replace' => 'E145', + ), + 425 => + array ( + 'match' => 'E0B7 E060', + 'replace' => 'E146', + ), + 426 => + array ( + 'match' => 'E0B7 0A98', + 'replace' => 'E147', + ), + 427 => + array ( + 'match' => 'E0B7 0AA8', + 'replace' => 'E148', + ), + 428 => + array ( + 'match' => 'E0B7 0AA7', + 'replace' => 'E149', + ), + 429 => + array ( + 'match' => 'E0B7 0AB5', + 'replace' => 'E14A', + ), + 430 => + array ( + 'match' => 'E0B7 0AAC', + 'replace' => 'E14B', + ), + 431 => + array ( + 'match' => 'E0B7 0AAE', + 'replace' => 'E14C', + ), + 432 => + array ( + 'match' => 'E0B7 0AB2', + 'replace' => 'E14D', + ), + 433 => + array ( + 'match' => 'E0B7 0AA6', + 'replace' => 'E14E', + ), + 434 => + array ( + 'match' => 'E0C7 0AA8', + 'replace' => 'E14F', + ), + 435 => + array ( + 'match' => 'E0C7 0AA3', + 'replace' => 'E150', + ), + 436 => + array ( + 'match' => 'E0C7 0AAF', + 'replace' => 'E151', + ), + 437 => + array ( + 'match' => 'E0C7 0AB2', + 'replace' => 'E152', + ), + 438 => + array ( + 'match' => 'E0C7 0AB5', + 'replace' => 'E153', + ), + 439 => + array ( + 'match' => 'E0C7 0AAE', + 'replace' => 'E154', + ), + 440 => + array ( + 'match' => 'E0AF 0A9A', + 'replace' => 'E155', + ), + 441 => + array ( + 'match' => 'E0AF 0A9C', + 'replace' => 'E156', + ), + 442 => + array ( + 'match' => 'E0B9 0AA8', + 'replace' => 'E157', + ), + 443 => + array ( + 'match' => 'E0C4 0AA8', + 'replace' => 'E158', + ), + 444 => + array ( + 'match' => 'E0C4 0AB5', + 'replace' => 'E159', + ), + 445 => + array ( + 'match' => 'E0C4 0A9A', + 'replace' => 'E15A', + ), + 446 => + array ( + 'match' => 'E0B5 0AA4', + 'replace' => 'E15B', + ), + 447 => + array ( + 'match' => 'E0C6 E06D', + 'replace' => 'E15C', + ), + 448 => + array ( + 'match' => 'E0B7 0AAF', + 'replace' => 'E15D', + ), + 449 => + array ( + 'match' => 'E0FF 0AAF', + 'replace' => 'E15E', + ), + 450 => + array ( + 'match' => 'E0A6 0A95', + 'replace' => 'E21F', + ), + 451 => + array ( + 'match' => 'E0A6 E05E', + 'replace' => 'E220', + ), + 452 => + array ( + 'match' => 'E163', + 'replace' => '0ACD', + ), + 453 => + array ( + 'match' => 'E0A6 200D', + 'replace' => 'E0A6', + ), + 454 => + array ( + 'match' => 'E0A7 200D', + 'replace' => 'E0A7', + ), + 455 => + array ( + 'match' => 'E0A8 200D', + 'replace' => 'E0A8', + ), + 456 => + array ( + 'match' => 'E0A9 200D', + 'replace' => 'E0A9', + ), + 457 => + array ( + 'match' => 'E0AA 200D', + 'replace' => 'E0AA', + ), + 458 => + array ( + 'match' => 'E0AB 200D', + 'replace' => 'E0AB', + ), + 459 => + array ( + 'match' => 'E0AC 200D', + 'replace' => 'E0AC', + ), + 460 => + array ( + 'match' => 'E0AD 200D', + 'replace' => 'E0AD', + ), + 461 => + array ( + 'match' => 'E0AE 200D', + 'replace' => 'E0AE', + ), + 462 => + array ( + 'match' => 'E0AF 200D', + 'replace' => 'E0AF', + ), + 463 => + array ( + 'match' => 'E0B0 200D', + 'replace' => 'E0B0', + ), + 464 => + array ( + 'match' => 'E0B1 200D', + 'replace' => 'E0B1', + ), + 465 => + array ( + 'match' => 'E0B2 200D', + 'replace' => 'E0B2', + ), + 466 => + array ( + 'match' => 'E0B3 200D', + 'replace' => 'E0B3', + ), + 467 => + array ( + 'match' => 'E0B4 200D', + 'replace' => 'E0B4', + ), + 468 => + array ( + 'match' => 'E0B5 200D', + 'replace' => 'E0B5', + ), + 469 => + array ( + 'match' => 'E0B6 200D', + 'replace' => 'E0B6', + ), + 470 => + array ( + 'match' => 'E0B7 200D', + 'replace' => 'E0B7', + ), + 471 => + array ( + 'match' => 'E0B8 200D', + 'replace' => 'E0B8', + ), + 472 => + array ( + 'match' => 'E0B9 200D', + 'replace' => 'E0B9', + ), + 473 => + array ( + 'match' => 'E0BA 200D', + 'replace' => 'E0BA', + ), + 474 => + array ( + 'match' => 'E0BB 200D', + 'replace' => 'E0BB', + ), + 475 => + array ( + 'match' => 'E0BC 200D', + 'replace' => 'E0BC', + ), + 476 => + array ( + 'match' => 'E0BD 200D', + 'replace' => 'E0BD', + ), + 477 => + array ( + 'match' => 'E0BE 200D', + 'replace' => 'E0BE', + ), + 478 => + array ( + 'match' => 'E0BF 200D', + 'replace' => 'E0BF', + ), + 479 => + array ( + 'match' => 'E0C0 200D', + 'replace' => 'E0C0', + ), + 480 => + array ( + 'match' => 'E0C1 200D', + 'replace' => 'E0C1', + ), + 481 => + array ( + 'match' => 'E0C2 200D', + 'replace' => 'E0C2', + ), + 482 => + array ( + 'match' => 'E0C3 200D', + 'replace' => 'E0C3', + ), + 483 => + array ( + 'match' => 'E0C4 200D', + 'replace' => 'E0C4', + ), + 484 => + array ( + 'match' => 'E0C5 200D', + 'replace' => 'E0C5', + ), + 485 => + array ( + 'match' => 'E0C6 200D', + 'replace' => 'E0C6', + ), + 486 => + array ( + 'match' => 'E0C7 200D', + 'replace' => 'E0C7', + ), + 487 => + array ( + 'match' => 'E0C8 200D', + 'replace' => 'E0C8', + ), + 488 => + array ( + 'match' => 'E0C9 200D', + 'replace' => 'E0C9', + ), + 489 => + array ( + 'match' => 'E0CA 200D', + 'replace' => 'E0CA', + ), + 490 => + array ( + 'match' => 'E0CB 200D', + 'replace' => 'E0CB', + ), + 491 => + array ( + 'match' => 'E0CC 200D', + 'replace' => 'E0CC', + ), + 492 => + array ( + 'match' => 'E0CD 200D', + 'replace' => 'E0CD', + ), + 493 => + array ( + 'match' => 'E0CE 200D', + 'replace' => 'E0CE', + ), + 494 => + array ( + 'match' => 'E0CF 200D', + 'replace' => 'E0CF', + ), + 495 => + array ( + 'match' => 'E0D0 200D', + 'replace' => 'E0D0', + ), + 496 => + array ( + 'match' => 'E0D1 200D', + 'replace' => 'E0D1', + ), + 497 => + array ( + 'match' => 'E0D2 200D', + 'replace' => 'E0D2', + ), + 498 => + array ( + 'match' => 'E0D3 200D', + 'replace' => 'E0D3', + ), + 499 => + array ( + 'match' => 'E0D4 200D', + 'replace' => 'E0D4', + ), + 500 => + array ( + 'match' => 'E0D5 200D', + 'replace' => 'E0D5', + ), + 501 => + array ( + 'match' => 'E0D6 200D', + 'replace' => 'E0D6', + ), + 502 => + array ( + 'match' => 'E0D7 200D', + 'replace' => 'E0D7', + ), + 503 => + array ( + 'match' => 'E0D8 200D', + 'replace' => 'E0D8', + ), + 504 => + array ( + 'match' => 'E0D9 200D', + 'replace' => 'E0D9', + ), + 505 => + array ( + 'match' => 'E0DA 200D', + 'replace' => 'E0DA', + ), + 506 => + array ( + 'match' => 'E0DB 200D', + 'replace' => 'E0DB', + ), + 507 => + array ( + 'match' => 'E0DC 200D', + 'replace' => 'E0DC', + ), + 508 => + array ( + 'match' => 'E0DD 200D', + 'replace' => 'E0DD', + ), + 509 => + array ( + 'match' => 'E0DE 200D', + 'replace' => 'E0DE', + ), + 510 => + array ( + 'match' => 'E0DF 200D', + 'replace' => 'E0DF', + ), + 511 => + array ( + 'match' => 'E0E0 200D', + 'replace' => 'E0E0', + ), + 512 => + array ( + 'match' => 'E0E1 200D', + 'replace' => 'E0E1', + ), + 513 => + array ( + 'match' => 'E0E2 200D', + 'replace' => 'E0E2', + ), + 514 => + array ( + 'match' => 'E0E3 200D', + 'replace' => 'E0E3', + ), + 515 => + array ( + 'match' => 'E0E4 200D', + 'replace' => 'E0E4', + ), + 516 => + array ( + 'match' => 'E0E5 200D', + 'replace' => 'E0E5', + ), + 517 => + array ( + 'match' => 'E0E6 200D', + 'replace' => 'E0E6', + ), + 518 => + array ( + 'match' => 'E0E7 200D', + 'replace' => 'E0E7', + ), + 519 => + array ( + 'match' => 'E0E8 200D', + 'replace' => 'E0E8', + ), + 520 => + array ( + 'match' => 'E0E9 200D', + 'replace' => 'E0E9', + ), + 521 => + array ( + 'match' => 'E0EA 200D', + 'replace' => 'E0EA', + ), + 522 => + array ( + 'match' => 'E0EB 200D', + 'replace' => 'E0EB', + ), + 523 => + array ( + 'match' => 'E0EC 200D', + 'replace' => 'E0EC', + ), + 524 => + array ( + 'match' => 'E0ED 200D', + 'replace' => 'E0ED', + ), + 525 => + array ( + 'match' => 'E0EE 200D', + 'replace' => 'E0EE', + ), + 526 => + array ( + 'match' => 'E0EF 200D', + 'replace' => 'E0EF', + ), + 527 => + array ( + 'match' => 'E0F0 200D', + 'replace' => 'E0F0', + ), + 528 => + array ( + 'match' => 'E0F1 200D', + 'replace' => 'E0F1', + ), + 529 => + array ( + 'match' => 'E0F2 200D', + 'replace' => 'E0F2', + ), + 530 => + array ( + 'match' => 'E0F3 200D', + 'replace' => 'E0F3', + ), + 531 => + array ( + 'match' => 'E0F4 200D', + 'replace' => 'E0F4', + ), + 532 => + array ( + 'match' => 'E0F5 200D', + 'replace' => 'E0F5', + ), + 533 => + array ( + 'match' => 'E0F6 200D', + 'replace' => 'E0F6', + ), + 534 => + array ( + 'match' => 'E0F7 200D', + 'replace' => 'E0F7', + ), + 535 => + array ( + 'match' => 'E0F8 200D', + 'replace' => 'E0F8', + ), + 536 => + array ( + 'match' => 'E0F9 200D', + 'replace' => 'E0F9', + ), + 537 => + array ( + 'match' => 'E0FA 200D', + 'replace' => 'E0FA', + ), + 538 => + array ( + 'match' => 'E0FB 200D', + 'replace' => 'E0FB', + ), + 539 => + array ( + 'match' => 'E0FC 200D', + 'replace' => 'E0FC', + ), + 540 => + array ( + 'match' => 'E0FD 200D', + 'replace' => 'E0FD', + ), + 541 => + array ( + 'match' => 'E0FE 200D', + 'replace' => 'E0FE', + ), + 542 => + array ( + 'match' => 'E0FF 200D', + 'replace' => 'E0FF', + ), + 543 => + array ( + 'match' => 'E100 200D', + 'replace' => 'E100', + ), + 544 => + array ( + 'match' => 'E101 200D', + 'replace' => 'E101', + ), + 545 => + array ( + 'match' => 'E102 200D', + 'replace' => 'E102', + ), + 546 => + array ( + 'match' => 'E103 200D', + 'replace' => 'E103', + ), + 547 => + array ( + 'match' => 'E104 200D', + 'replace' => 'E104', + ), + 548 => + array ( + 'match' => 'E105 200D', + 'replace' => 'E105', + ), + 549 => + array ( + 'match' => 'E106 200D', + 'replace' => 'E106', + ), + 550 => + array ( + 'match' => 'E107 200D', + 'replace' => 'E107', + ), + 551 => + array ( + 'match' => 'E108 200D', + 'replace' => 'E108', + ), + 552 => + array ( + 'match' => 'E109 200D', + 'replace' => 'E109', + ), + 553 => + array ( + 'match' => 'E10A 200D', + 'replace' => 'E10A', + ), + 554 => + array ( + 'match' => 'E10B 200D', + 'replace' => 'E10B', + ), + 555 => + array ( + 'match' => 'E10C 200D', + 'replace' => 'E10C', + ), + 556 => + array ( + 'match' => 'E10D 200D', + 'replace' => 'E10D', + ), + 557 => + array ( + 'match' => 'E10E 200D', + 'replace' => 'E10E', + ), + 558 => + array ( + 'match' => 'E10F 200D', + 'replace' => 'E10F', + ), + 559 => + array ( + 'match' => 'E110 200D', + 'replace' => 'E110', + ), + 560 => + array ( + 'match' => 'E111 200D', + 'replace' => 'E111', + ), + 561 => + array ( + 'match' => 'E112 200D', + 'replace' => 'E112', + ), + 562 => + array ( + 'match' => 'E113 200D', + 'replace' => 'E113', + ), + 563 => + array ( + 'match' => 'E114 200D', + 'replace' => 'E114', + ), + 564 => + array ( + 'match' => 'E115 200D', + 'replace' => 'E115', + ), + 565 => + array ( + 'match' => 'E116 200D', + 'replace' => 'E116', + ), + 566 => + array ( + 'match' => 'E117 200D', + 'replace' => 'E117', + ), + 567 => + array ( + 'match' => 'E118 200D', + 'replace' => 'E118', + ), + 568 => + array ( + 'match' => 'E119 200D', + 'replace' => 'E119', + ), + 569 => + array ( + 'match' => 'E11A 200D', + 'replace' => 'E11A', + ), + 570 => + array ( + 'match' => 'E11B 200D', + 'replace' => 'E11B', + ), + 571 => + array ( + 'match' => 'E11C 200D', + 'replace' => 'E11C', + ), + 572 => + array ( + 'match' => 'E11D 200D', + 'replace' => 'E11D', + ), + 573 => + array ( + 'match' => 'E11E 200D', + 'replace' => 'E11E', + ), + 574 => + array ( + 'match' => 'E11F 200D', + 'replace' => 'E11F', + ), + 575 => + array ( + 'match' => 'E120 200D', + 'replace' => 'E120', + ), + 576 => + array ( + 'match' => 'E121 200D', + 'replace' => 'E121', + ), + 577 => + array ( + 'match' => 'E122 200D', + 'replace' => 'E122', + ), + 578 => + array ( + 'match' => 'E123 200D', + 'replace' => 'E123', + ), + 579 => + array ( + 'match' => 'E124 200D', + 'replace' => 'E124', + ), + 580 => + array ( + 'match' => 'E125 200D', + 'replace' => 'E125', + ), + 581 => + array ( + 'match' => 'E126 200D', + 'replace' => 'E126', + ), + 582 => + array ( + 'match' => 'E127 200D', + 'replace' => 'E127', + ), + 583 => + array ( + 'match' => 'E128 200D', + 'replace' => 'E128', + ), + 584 => + array ( + 'match' => 'E129 200D', + 'replace' => 'E129', + ), + 585 => + array ( + 'match' => 'E12A 200D', + 'replace' => 'E12A', + ), + 586 => + array ( + 'match' => 'E12B 200D', + 'replace' => 'E12B', + ), + 587 => + array ( + 'match' => 'E12C 200D', + 'replace' => 'E12C', + ), + 588 => + array ( + 'match' => 'E12D 200D', + 'replace' => 'E12D', + ), + 589 => + array ( + 'match' => 'E12E 200D', + 'replace' => 'E12E', + ), + 590 => + array ( + 'match' => 'E12F 200D', + 'replace' => 'E12F', + ), + 591 => + array ( + 'match' => 'E130 200D', + 'replace' => 'E130', + ), + 592 => + array ( + 'match' => 'E131 200D', + 'replace' => 'E131', + ), + 593 => + array ( + 'match' => 'E132 200D', + 'replace' => 'E132', + ), + 594 => + array ( + 'match' => 'E133 200D', + 'replace' => 'E133', + ), + 595 => + array ( + 'match' => 'E134 200D', + 'replace' => 'E134', + ), + 596 => + array ( + 'match' => 'E135 200D', + 'replace' => 'E135', + ), + 597 => + array ( + 'match' => '200D 0ACD', + 'replace' => '0ACD', + ), + 598 => + array ( + 'match' => '200D E05D', + 'replace' => 'E05D', + ), + 599 => + array ( + 'match' => '0A9C 0ABE', + 'replace' => 'E21B', + ), + 600 => + array ( + 'match' => '0A9C 0AC9', + 'replace' => 'E21C', + ), + 601 => + array ( + 'match' => '0A9C 0ACB', + 'replace' => 'E21D', + ), + 602 => + array ( + 'match' => '0A9C 0ACC', + 'replace' => 'E21E', + ), + 603 => + array ( + 'match' => '0ABF ((0A95|0A99|0AA1|0AA6|0AAB|0AB0|0AB9|E004|E008|E010|E015|E019|E01E|E025|E05E|E062|E06A|E06F|E073|E078|E07F|E082|E086|E08E|E093|E097|E09C|E0A3|E136|E137|E138|E139|E13A|E13B|E13C|E141|E142|E144|E145|E146|E148|E14A|E14B|E14E))', + 'replace' => 'E038 \\1', + ), + 604 => + array ( + 'match' => '0ABF ((0A9F|0AA0|0AA2|0A9C|E00E|E00F|E011|E00B|E068|E069|E06B|E065|E08C|E08D|E08F|E089|E14F|E150|E151|E152|E153|E154))', + 'replace' => 'E03A \\1', + ), + 605 => + array ( + 'match' => '0ABF ((0A96|0AA3|0AAC|0AAD|0AB3|E002|E003|E005|E012|E01A|E01B|E020|E026|E027|E05F|E06C|E074|E075|E07A|E080|E081|E083|E090|E098|E099|E09E|E0A4|E0A5|E15E))', + 'replace' => 'E039 \\1', + ), + 606 => + array ( + 'match' => '0ABF ((E13D))', + 'replace' => 'E03B \\1', + ), + 607 => + array ( + 'match' => '0ABF ((E13E|E13F|E140|E143))', + 'replace' => 'E03C \\1', + ), + 608 => + array ( + 'match' => '0ABF ((E15C))', + 'replace' => 'E03D \\1', + ), + 609 => + array ( + 'match' => '0ABF ((E0A7|E0BC|E0BD|E0C8|E0C9|E0C2) (0A97|0A98|0AAF|0A9B|0A9D|0A9E|0AA4|0AA5|0AA7|0AA8|0AAA|0AAE|0AAF|0AB2|0AB5|0AB6|0AB7|0AB8))', + 'replace' => 'E25C \\1', + ), + 610 => + array ( + 'match' => '0ABF ((E0A7|E0BC|E0BD|E0C8|E0C9|E0C2) (0A96|0AA3|0AAC|0AAD|0AB3|E002|E003))', + 'replace' => 'E25C \\1', + ), + 611 => + array ( + 'match' => '0ABF ((E0AB|E0B6|E0BA|E0BE|E0BF|E0C1|E0C3|E0C5|E0C6|E0A9|E0B8|E0AD|E0AF|E0B0|E0B3) (0A96|0AA3|0AAC|0AAD|0AB3|E002|E003))', + 'replace' => 'E25C \\1', + ), + 612 => + array ( + 'match' => '0ABF ((E0AC|E0AE) (0A97|0A98|0AAF|0A9B|0A9D|0A9E|0AA4|0AA5|0AA7|0AA8|0AAA|0AAE|0AAF|0AB2|0AB5|0AB6|0AB7|0AB8))', + 'replace' => 'E25C \\1', + ), + 613 => + array ( + 'match' => '0ABF ((E0AC|E0AE) (0A96|0AA3|0AAC|0AAD|0AB3|E002|E003))', + 'replace' => 'E25C \\1', + ), + 614 => + array ( + 'match' => '0ABF ((E0B4|E0B5|E0B9) (0A96|0AA3|0AAC|0AAD|0AB3|E002|E003))', + 'replace' => 'E25C \\1', + ), + 615 => + array ( + 'match' => '0ABF ((E0B1) (0A96|0AA3|0AAC|0AAD|0AB3|E002|E003))', + 'replace' => 'E25C \\1', + ), + 616 => + array ( + 'match' => '0ABF ((E0A6|E0A8|E0AA|E0B2|E0B7|E0BB|E0C4|E0C7) (0A9C|0A9F|0AA0|0AA2))', + 'replace' => 'E25D \\1', + ), + 617 => + array ( + 'match' => '0ABF ((E0AB|E0B6|E0BA|E0BE|E0BF|E0C1|E0C3|E0C5|E0C6|E0A9|E0B8|E0AD|E0AF|E0B0|E0B3) (0A95|0A99|0AA1|0AA6|0AAB|0AB9))', + 'replace' => 'E25D \\1', + ), + 618 => + array ( + 'match' => '0ABF ((E0AB|E0B6|E0BA|E0BE|E0BF|E0C1|E0C3|E0C5|E0C6|E0A9|E0B8|E0AD|E0AF|E0B0|E0B3) (0A9C|0A9F|0AA0|0AA2))', + 'replace' => 'E25D \\1', + ), + 619 => + array ( + 'match' => '0ABF ((E0B4|E0B5|E0B9) (0A95|0A99|0AA1|0AA6|0AAB|0AB9))', + 'replace' => 'E25D \\1', + ), + 620 => + array ( + 'match' => '0ABF ((E0B1) (0A95|0A99|0AA1|0AA6|0AAB|0AB9))', + 'replace' => 'E25D \\1', + ), + 621 => + array ( + 'match' => '0AB9 0AC3', + 'replace' => 'E02F', + ), + 622 => + array ( + 'match' => '0AB0 0AC1', + 'replace' => 'E15F', + ), + 623 => + array ( + 'match' => '0AC0 E032', + 'replace' => 'E043', + ), + 624 => + array ( + 'match' => '0AC7 E032', + 'replace' => 'E04D', + ), + 625 => + array ( + 'match' => '0AC8 E032', + 'replace' => 'E051', + ), + 626 => + array ( + 'match' => '0ACB E032', + 'replace' => 'E055', + ), + 627 => + array ( + 'match' => '0ACC E032', + 'replace' => 'E059', + ), + 628 => + array ( + 'match' => '0A87 0A82', + 'replace' => 'E160', + ), + 629 => + array ( + 'match' => '0A89 0A82', + 'replace' => 'E161', + ), + 630 => + array ( + 'match' => '0A8A 0A82', + 'replace' => 'E162', + ), + 631 => + array ( + 'match' => 'E032 0A81', + 'replace' => 'E034', + ), + 632 => + array ( + 'match' => 'E032 0A82', + 'replace' => 'E033', + ), + 633 => + array ( + 'match' => '0AC7 0A82', + 'replace' => 'E04C', + ), + 634 => + array ( + 'match' => '0AC8 0A82', + 'replace' => 'E050', + ), + 635 => + array ( + 'match' => '0AC0 0A82', + 'replace' => 'E040', + ), + 636 => + array ( + 'match' => '0ACB 0A82', + 'replace' => 'E054', + ), + 637 => + array ( + 'match' => '0ACC 0A82', + 'replace' => 'E058', + ), + 638 => + array ( + 'match' => 'E04D 0A82', + 'replace' => 'E04E', + ), + 639 => + array ( + 'match' => 'E051 0A82', + 'replace' => 'E052', + ), + 640 => + array ( + 'match' => 'E043 0A82', + 'replace' => 'E046', + ), + 641 => + array ( + 'match' => 'E055 0A82', + 'replace' => 'E056', + ), + 642 => + array ( + 'match' => 'E059 0A82', + 'replace' => 'E05A', + ), + 643 => + array ( + 'match' => 'E04D 0A81', + 'replace' => 'E04F', + ), + 644 => + array ( + 'match' => 'E051 0A81', + 'replace' => 'E053', + ), + 645 => + array ( + 'match' => 'E043 0A81', + 'replace' => 'E049', + ), + 646 => + array ( + 'match' => 'E055 0A81', + 'replace' => 'E057', + ), + 647 => + array ( + 'match' => 'E059 0A81', + 'replace' => 'E05B', + ), + 648 => + array ( + 'match' => '((0A8D|0A8F|0A90|0A91|0A93|0A94|0AC0|E03E|E03F|0AC5|0AC7|0AC8|0AC9|0ACB|0ACC)) 0A81', + 'replace' => '\\1 E031', + ), + 649 => + array ( + 'match' => '((0A95|0A99|0AA1|0AA6|0AAB|0AB9|E004|E008|E010|E015|E019|E025|E05E|E062|E06A|E06F|E073|E07F|E082|E086|E08E|E093|E097|E0A3|E136|E137|E138|E139|E13A|E13B|E13C|E141|E142)) 0AC0', + 'replace' => '\\1 E03E', + ), + 650 => + array ( + 'match' => '((0A95|0A99|0AA1|0AA6|0AAB|0AB9|E004|E008|E010|E015|E019|E025|E05E|E062|E06A|E06F|E073|E07F|E082|E086|E08E|E093|E097|E0A3|E136|E137|E138|E139|E13A|E13B|E13C|E141|E142)) E040', + 'replace' => '\\1 E041', + ), + 651 => + array ( + 'match' => '((0A95|0A99|0AA1|0AA6|0AAB|0AB9|E004|E008|E010|E015|E019|E025|E05E|E062|E06A|E06F|E073|E07F|E082|E086|E08E|E093|E097|E0A3|E136|E137|E138|E139|E13A|E13B|E13C|E141|E142)) E046', + 'replace' => '\\1 E047', + ), + 652 => + array ( + 'match' => '((0A95|0A99|0AA1|0AA6|0AAB|0AB9|E004|E008|E010|E015|E019|E025|E05E|E062|E06A|E06F|E073|E07F|E082|E086|E08E|E093|E097|E0A3|E136|E137|E138|E139|E13A|E13B|E13C|E141|E142)) E049', + 'replace' => '\\1 E04A', + ), + 653 => + array ( + 'match' => '((0A9F|0AA0|0AA2|0A9B|0AB0|E00E|E00F|E011|E00A|E01E|E068|E069|E06B|E064|E078|E08C|E08D|E08F|E088|E09C)) 0AC0', + 'replace' => '\\1 E03F', + ), + 654 => + array ( + 'match' => '((0A9F|0AA0|0AA2|0A9B|0AB0|E00E|E00F|E011|E00A|E01E|E068|E069|E06B|E064|E078|E08C|E08D|E08F|E088|E09C)) E040', + 'replace' => '\\1 E042', + ), + 655 => + array ( + 'match' => '((0A9F|0AA0|0AA2|0A9B|0AB0|E00E|E00F|E011|E00A|E01E|E068|E069|E06B|E064|E078|E08C|E08D|E08F|E088|E09C)) E046', + 'replace' => '\\1 E048', + ), + 656 => + array ( + 'match' => '((0A9F|0AA0|0AA2|0A9B|0AB0|E00E|E00F|E011|E00A|E01E|E068|E069|E06B|E064|E078|E08C|E08D|E08F|E088|E09C)) E049', + 'replace' => '\\1 E04B', + ), + 657 => + array ( + 'match' => '0A9C 0AC0', + 'replace' => 'E028', + ), + 658 => + array ( + 'match' => '0AB3 0AC0', + 'replace' => 'E02A', + ), + 659 => + array ( + 'match' => '0AB3 E043', + 'replace' => 'E02B', + ), + 660 => + array ( + 'match' => '0AB3 E046', + 'replace' => 'E02C', + ), + 661 => + array ( + 'match' => '0AB3 E049', + 'replace' => 'E02D', + ), +); +?> \ No newline at end of file diff --git a/include/mpdf/includes/ind_hi_1_001.volt.php b/include/mpdf/includes/ind_hi_1_001.volt.php new file mode 100755 index 0000000000000000000000000000000000000000..e8b6d5758385230f64cbcc23789a604329efbfab --- /dev/null +++ b/include/mpdf/includes/ind_hi_1_001.volt.php @@ -0,0 +1,4169 @@ +<?php + $volt = array ( + 0 => + array ( + 'match' => '0915 094D 0937', + 'replace' => 'E028', + ), + 1 => + array ( + 'match' => '091C 094D 091E', + 'replace' => 'E029', + ), + 2 => + array ( + 'match' => '0926 094D 092F', + 'replace' => 'E128', + ), + 3 => + array ( + 'match' => '094D (200D)', + 'replace' => 'E00E \\1', + ), + 4 => + array ( + 'match' => '094D ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029))', + 'replace' => 'E00E \\1', + ), + 5 => + array ( + 'match' => '094D (25CC)', + 'replace' => 'E00E \\1', + ), + 6 => + array ( + 'match' => '094D 200C', + 'replace' => 'E00C', + ), + 7 => + array ( + 'match' => '((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029|0958|0959|095A|E02A|E02B|E02C|E02D|095B|E02E|E02F|E030|E031|095C|095D|E032|E033|E034|E035|E036|0929|E037|095E|E038|E039|E03A|095F|0931|E03B|0934|E03C|E03D|E03E|E03F|E040|E041|E042|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF|E0B0|E0B1|E0B2|E0B3|E0B4|E0B5|E0B6|E0B7|E0B8|E0B9|E0BA|E0BB|E0BC|E0BD|E0BE|E0BF|E0C0|E0C1|E0C2|E0C3|E0C4|E0C5|E0C6|E0C7|E0C8|E0C9|E0CA|E0CB|E0CC|E0CD|E0CE|E0CF|E0D0|E0D1|E0D2|E11E|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E129|E12A|E12B|E12C|E12D|E12E|E12F|E130|E131|E132|E133)) E00E 0930', + 'replace' => '\\1 E013', + ), + 8 => + array ( + 'match' => '(093C) E00E 0930', + 'replace' => '\\1 E013', + ), + 9 => + array ( + 'match' => '(200D) E00E 0930', + 'replace' => '\\1 E013', + ), + 10 => + array ( + 'match' => '(25CC) E00E 0930', + 'replace' => '\\1 E013', + ), + 11 => + array ( + 'match' => '(0020) E00E 0930', + 'replace' => '\\1 E013', + ), + 12 => + array ( + 'match' => '((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029|0958|0959|095A|E02A|E02B|E02C|E02D|095B|E02E|E02F|E030|E031|095C|095D|E032|E033|E034|E035|E036|0929|E037|095E|E038|E039|E03A|095F|0931|E03B|0934|E03C|E03D|E03E|E03F|E040|E041|E042|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF|E0B0|E0B1|E0B2|E0B3|E0B4|E0B5|E0B6|E0B7|E0B8|E0B9|E0BA|E0BB|E0BC|E0BD|E0BE|E0BF|E0C0|E0C1|E0C2|E0C3|E0C4|E0C5|E0C6|E0C7|E0C8|E0C9|E0CA|E0CB|E0CC|E0CD|E0CE|E0CF|E0D0|E0D1|E0D2|E11E|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E129|E12A|E12B|E12C|E12D|E12E|E12F|E130|E131|E132|E133)) 0930 094D', + 'replace' => '\\1 E015', + ), + 13 => + array ( + 'match' => '((E013|E015|0941|0942|0943|0962|093E|0940|0949|094A|094B|094C|0945|0946|0947|0948|0901)) 0930 094D', + 'replace' => '\\1 E015', + ), + 14 => + array ( + 'match' => '(093C) 0930 094D', + 'replace' => '\\1 E015', + ), + 15 => + array ( + 'match' => '(25CC) 0930 094D', + 'replace' => '\\1 E015', + ), + 16 => + array ( + 'match' => '(E128) 0930 094D', + 'replace' => '\\1 E015', + ), + 17 => + array ( + 'match' => '0915 093C', + 'replace' => '0958', + ), + 18 => + array ( + 'match' => '0916 093C', + 'replace' => '0959', + ), + 19 => + array ( + 'match' => '0917 093C', + 'replace' => '095A', + ), + 20 => + array ( + 'match' => '0918 093C', + 'replace' => 'E02A', + ), + 21 => + array ( + 'match' => '0919 093C', + 'replace' => 'E02B', + ), + 22 => + array ( + 'match' => '091A 093C', + 'replace' => 'E02C', + ), + 23 => + array ( + 'match' => '091B 093C', + 'replace' => 'E02D', + ), + 24 => + array ( + 'match' => '091C 093C', + 'replace' => '095B', + ), + 25 => + array ( + 'match' => '091D 093C', + 'replace' => 'E02E', + ), + 26 => + array ( + 'match' => '091E 093C', + 'replace' => 'E02F', + ), + 27 => + array ( + 'match' => '091F 093C', + 'replace' => 'E030', + ), + 28 => + array ( + 'match' => '0920 093C', + 'replace' => 'E031', + ), + 29 => + array ( + 'match' => '0921 093C', + 'replace' => '095C', + ), + 30 => + array ( + 'match' => '0922 093C', + 'replace' => '095D', + ), + 31 => + array ( + 'match' => '0923 093C', + 'replace' => 'E032', + ), + 32 => + array ( + 'match' => '0924 093C', + 'replace' => 'E033', + ), + 33 => + array ( + 'match' => '0925 093C', + 'replace' => 'E034', + ), + 34 => + array ( + 'match' => '0926 093C', + 'replace' => 'E035', + ), + 35 => + array ( + 'match' => '0927 093C', + 'replace' => 'E036', + ), + 36 => + array ( + 'match' => '0928 093C', + 'replace' => '0929', + ), + 37 => + array ( + 'match' => '092A 093C', + 'replace' => 'E037', + ), + 38 => + array ( + 'match' => '092B 093C', + 'replace' => '095E', + ), + 39 => + array ( + 'match' => '092C 093C', + 'replace' => 'E038', + ), + 40 => + array ( + 'match' => '092D 093C', + 'replace' => 'E039', + ), + 41 => + array ( + 'match' => '092E 093C', + 'replace' => 'E03A', + ), + 42 => + array ( + 'match' => '092F 093C', + 'replace' => '095F', + ), + 43 => + array ( + 'match' => '0930 093C', + 'replace' => '0931', + ), + 44 => + array ( + 'match' => '0932 093C', + 'replace' => 'E03B', + ), + 45 => + array ( + 'match' => '0933 093C', + 'replace' => '0934', + ), + 46 => + array ( + 'match' => '0935 093C', + 'replace' => 'E03C', + ), + 47 => + array ( + 'match' => '0936 093C', + 'replace' => 'E03D', + ), + 48 => + array ( + 'match' => '0937 093C', + 'replace' => 'E03E', + ), + 49 => + array ( + 'match' => '0938 093C', + 'replace' => 'E03F', + ), + 50 => + array ( + 'match' => '0939 093C', + 'replace' => 'E040', + ), + 51 => + array ( + 'match' => 'E028 093C', + 'replace' => 'E041', + ), + 52 => + array ( + 'match' => 'E029 093C', + 'replace' => 'E042', + ), + 53 => + array ( + 'match' => '0915 E013', + 'replace' => 'E08B', + ), + 54 => + array ( + 'match' => '0916 E013', + 'replace' => 'E08C', + ), + 55 => + array ( + 'match' => '0917 E013', + 'replace' => 'E08D', + ), + 56 => + array ( + 'match' => '0918 E013', + 'replace' => 'E08E', + ), + 57 => + array ( + 'match' => '0919 E013', + 'replace' => 'E08F', + ), + 58 => + array ( + 'match' => '091A E013', + 'replace' => 'E090', + ), + 59 => + array ( + 'match' => '091B E013', + 'replace' => 'E091', + ), + 60 => + array ( + 'match' => '091C E013', + 'replace' => 'E092', + ), + 61 => + array ( + 'match' => '091D E013', + 'replace' => 'E093', + ), + 62 => + array ( + 'match' => '091E E013', + 'replace' => 'E094', + ), + 63 => + array ( + 'match' => '091F E013', + 'replace' => 'E095', + ), + 64 => + array ( + 'match' => '0920 E013', + 'replace' => 'E096', + ), + 65 => + array ( + 'match' => '0921 E013', + 'replace' => 'E097', + ), + 66 => + array ( + 'match' => '0922 E013', + 'replace' => 'E098', + ), + 67 => + array ( + 'match' => '0923 E013', + 'replace' => 'E099', + ), + 68 => + array ( + 'match' => '0924 E013', + 'replace' => 'E09A', + ), + 69 => + array ( + 'match' => '0925 E013', + 'replace' => 'E09B', + ), + 70 => + array ( + 'match' => '0926 E013', + 'replace' => 'E09C', + ), + 71 => + array ( + 'match' => '0927 E013', + 'replace' => 'E09D', + ), + 72 => + array ( + 'match' => '0928 E013', + 'replace' => 'E09E', + ), + 73 => + array ( + 'match' => '092A E013', + 'replace' => 'E09F', + ), + 74 => + array ( + 'match' => '092B E013', + 'replace' => 'E0A0', + ), + 75 => + array ( + 'match' => '092C E013', + 'replace' => 'E0A1', + ), + 76 => + array ( + 'match' => '092D E013', + 'replace' => 'E0A2', + ), + 77 => + array ( + 'match' => '092E E013', + 'replace' => 'E0A3', + ), + 78 => + array ( + 'match' => '092F E013', + 'replace' => 'E0A4', + ), + 79 => + array ( + 'match' => '0930 E013', + 'replace' => 'E0A5', + ), + 80 => + array ( + 'match' => '0932 E013', + 'replace' => 'E0A6', + ), + 81 => + array ( + 'match' => '0933 E013', + 'replace' => 'E0A7', + ), + 82 => + array ( + 'match' => '0935 E013', + 'replace' => 'E0A8', + ), + 83 => + array ( + 'match' => '0936 E013', + 'replace' => 'E0A9', + ), + 84 => + array ( + 'match' => '0937 E013', + 'replace' => 'E0AA', + ), + 85 => + array ( + 'match' => '0938 E013', + 'replace' => 'E0AB', + ), + 86 => + array ( + 'match' => '0939 E013', + 'replace' => 'E0AC', + ), + 87 => + array ( + 'match' => 'E028 E013', + 'replace' => 'E0AD', + ), + 88 => + array ( + 'match' => 'E029 E013', + 'replace' => 'E0AE', + ), + 89 => + array ( + 'match' => '0958 E013', + 'replace' => 'E0AF', + ), + 90 => + array ( + 'match' => '0959 E013', + 'replace' => 'E0B0', + ), + 91 => + array ( + 'match' => '095A E013', + 'replace' => 'E0B1', + ), + 92 => + array ( + 'match' => 'E02A E013', + 'replace' => 'E0B2', + ), + 93 => + array ( + 'match' => 'E02B E013', + 'replace' => 'E0B3', + ), + 94 => + array ( + 'match' => 'E02C E013', + 'replace' => 'E0B4', + ), + 95 => + array ( + 'match' => 'E02D E013', + 'replace' => 'E0B5', + ), + 96 => + array ( + 'match' => '095B E013', + 'replace' => 'E0B6', + ), + 97 => + array ( + 'match' => 'E02E E013', + 'replace' => 'E0B7', + ), + 98 => + array ( + 'match' => 'E02F E013', + 'replace' => 'E0B8', + ), + 99 => + array ( + 'match' => 'E030 E013', + 'replace' => 'E0B9', + ), + 100 => + array ( + 'match' => 'E031 E013', + 'replace' => 'E0BA', + ), + 101 => + array ( + 'match' => '095C E013', + 'replace' => 'E0BB', + ), + 102 => + array ( + 'match' => '095D E013', + 'replace' => 'E0BC', + ), + 103 => + array ( + 'match' => 'E032 E013', + 'replace' => 'E0BD', + ), + 104 => + array ( + 'match' => 'E033 E013', + 'replace' => 'E0BE', + ), + 105 => + array ( + 'match' => 'E034 E013', + 'replace' => 'E0BF', + ), + 106 => + array ( + 'match' => 'E035 E013', + 'replace' => 'E0C0', + ), + 107 => + array ( + 'match' => 'E036 E013', + 'replace' => 'E0C1', + ), + 108 => + array ( + 'match' => '0929 E013', + 'replace' => 'E0C2', + ), + 109 => + array ( + 'match' => 'E037 E013', + 'replace' => 'E0C3', + ), + 110 => + array ( + 'match' => '095E E013', + 'replace' => 'E0C4', + ), + 111 => + array ( + 'match' => 'E038 E013', + 'replace' => 'E0C5', + ), + 112 => + array ( + 'match' => 'E039 E013', + 'replace' => 'E0C6', + ), + 113 => + array ( + 'match' => 'E03A E013', + 'replace' => 'E0C7', + ), + 114 => + array ( + 'match' => '095F E013', + 'replace' => 'E0C8', + ), + 115 => + array ( + 'match' => '0931 E013', + 'replace' => 'E0C9', + ), + 116 => + array ( + 'match' => 'E03B E013', + 'replace' => 'E0CA', + ), + 117 => + array ( + 'match' => '0934 E013', + 'replace' => 'E0CB', + ), + 118 => + array ( + 'match' => 'E03C E013', + 'replace' => 'E0CC', + ), + 119 => + array ( + 'match' => 'E03D E013', + 'replace' => 'E0CD', + ), + 120 => + array ( + 'match' => 'E03E E013', + 'replace' => 'E0CE', + ), + 121 => + array ( + 'match' => 'E03F E013', + 'replace' => 'E0CF', + ), + 122 => + array ( + 'match' => 'E040 E013', + 'replace' => 'E0D0', + ), + 123 => + array ( + 'match' => 'E041 E013', + 'replace' => 'E0D1', + ), + 124 => + array ( + 'match' => 'E042 E013', + 'replace' => 'E0D2', + ), + 125 => + array ( + 'match' => 'E028 E013', + 'replace' => 'E0AD', + ), + 126 => + array ( + 'match' => 'E029 E013', + 'replace' => 'E0AE', + ), + 127 => + array ( + 'match' => '0915 E00E', + 'replace' => 'E043', + ), + 128 => + array ( + 'match' => '0916 E00E', + 'replace' => 'E044', + ), + 129 => + array ( + 'match' => '0917 E00E', + 'replace' => 'E045', + ), + 130 => + array ( + 'match' => '0918 E00E', + 'replace' => 'E046', + ), + 131 => + array ( + 'match' => '0919 E00E', + 'replace' => 'E047', + ), + 132 => + array ( + 'match' => '091A E00E', + 'replace' => 'E048', + ), + 133 => + array ( + 'match' => '091B E00E', + 'replace' => 'E049', + ), + 134 => + array ( + 'match' => '091C E00E', + 'replace' => 'E04A', + ), + 135 => + array ( + 'match' => '091D E00E', + 'replace' => 'E04B', + ), + 136 => + array ( + 'match' => '091E E00E', + 'replace' => 'E04C', + ), + 137 => + array ( + 'match' => '091F E00E', + 'replace' => 'E04D', + ), + 138 => + array ( + 'match' => '0920 E00E', + 'replace' => 'E04E', + ), + 139 => + array ( + 'match' => '0921 E00E', + 'replace' => 'E04F', + ), + 140 => + array ( + 'match' => '0922 E00E', + 'replace' => 'E050', + ), + 141 => + array ( + 'match' => '0923 E00E', + 'replace' => 'E051', + ), + 142 => + array ( + 'match' => '0924 E00E', + 'replace' => 'E052', + ), + 143 => + array ( + 'match' => '0925 E00E', + 'replace' => 'E053', + ), + 144 => + array ( + 'match' => '0926 E00E', + 'replace' => 'E054', + ), + 145 => + array ( + 'match' => '0927 E00E', + 'replace' => 'E055', + ), + 146 => + array ( + 'match' => '0928 E00E', + 'replace' => 'E056', + ), + 147 => + array ( + 'match' => '092A E00E', + 'replace' => 'E057', + ), + 148 => + array ( + 'match' => '092B E00E', + 'replace' => 'E058', + ), + 149 => + array ( + 'match' => '092C E00E', + 'replace' => 'E059', + ), + 150 => + array ( + 'match' => '092D E00E', + 'replace' => 'E05A', + ), + 151 => + array ( + 'match' => '092E E00E', + 'replace' => 'E05B', + ), + 152 => + array ( + 'match' => '092F E00E', + 'replace' => 'E05C', + ), + 153 => + array ( + 'match' => '0930 E00E', + 'replace' => 'E05D', + ), + 154 => + array ( + 'match' => '0932 E00E', + 'replace' => 'E05E', + ), + 155 => + array ( + 'match' => '0933 E00E', + 'replace' => 'E05F', + ), + 156 => + array ( + 'match' => '0935 E00E', + 'replace' => 'E060', + ), + 157 => + array ( + 'match' => '0936 E00E', + 'replace' => 'E061', + ), + 158 => + array ( + 'match' => '0937 E00E', + 'replace' => 'E062', + ), + 159 => + array ( + 'match' => '0938 E00E', + 'replace' => 'E063', + ), + 160 => + array ( + 'match' => '0939 E00E', + 'replace' => 'E064', + ), + 161 => + array ( + 'match' => 'E028 E00E', + 'replace' => 'E065', + ), + 162 => + array ( + 'match' => 'E029 E00E', + 'replace' => 'E066', + ), + 163 => + array ( + 'match' => 'E08B E00E', + 'replace' => 'E0D3', + ), + 164 => + array ( + 'match' => 'E08C E00E', + 'replace' => 'E0D4', + ), + 165 => + array ( + 'match' => 'E08D E00E', + 'replace' => 'E0D5', + ), + 166 => + array ( + 'match' => 'E08E E00E', + 'replace' => 'E0D6', + ), + 167 => + array ( + 'match' => 'E08F E00E', + 'replace' => 'E0D7', + ), + 168 => + array ( + 'match' => 'E090 E00E', + 'replace' => 'E0D8', + ), + 169 => + array ( + 'match' => 'E091 E00E', + 'replace' => 'E0D9', + ), + 170 => + array ( + 'match' => 'E092 E00E', + 'replace' => 'E0DA', + ), + 171 => + array ( + 'match' => 'E093 E00E', + 'replace' => 'E0DB', + ), + 172 => + array ( + 'match' => 'E094 E00E', + 'replace' => 'E0DC', + ), + 173 => + array ( + 'match' => 'E095 E00E', + 'replace' => 'E0DD', + ), + 174 => + array ( + 'match' => 'E096 E00E', + 'replace' => 'E0DE', + ), + 175 => + array ( + 'match' => 'E097 E00E', + 'replace' => 'E0DF', + ), + 176 => + array ( + 'match' => 'E098 E00E', + 'replace' => 'E0E0', + ), + 177 => + array ( + 'match' => 'E099 E00E', + 'replace' => 'E0E1', + ), + 178 => + array ( + 'match' => 'E09A E00E', + 'replace' => 'E0E2', + ), + 179 => + array ( + 'match' => 'E09B E00E', + 'replace' => 'E0E3', + ), + 180 => + array ( + 'match' => 'E09C E00E', + 'replace' => 'E0E4', + ), + 181 => + array ( + 'match' => 'E09D E00E', + 'replace' => 'E0E5', + ), + 182 => + array ( + 'match' => 'E09E E00E', + 'replace' => 'E0E6', + ), + 183 => + array ( + 'match' => 'E09F E00E', + 'replace' => 'E0E7', + ), + 184 => + array ( + 'match' => 'E0A0 E00E', + 'replace' => 'E0E8', + ), + 185 => + array ( + 'match' => 'E0A1 E00E', + 'replace' => 'E0E9', + ), + 186 => + array ( + 'match' => 'E0A2 E00E', + 'replace' => 'E0EA', + ), + 187 => + array ( + 'match' => 'E0A3 E00E', + 'replace' => 'E0EB', + ), + 188 => + array ( + 'match' => 'E0A4 E00E', + 'replace' => 'E0EC', + ), + 189 => + array ( + 'match' => 'E0A5 E00E', + 'replace' => 'E0ED', + ), + 190 => + array ( + 'match' => 'E0A6 E00E', + 'replace' => 'E0EE', + ), + 191 => + array ( + 'match' => 'E0A7 E00E', + 'replace' => 'E0EF', + ), + 192 => + array ( + 'match' => 'E0A8 E00E', + 'replace' => 'E0F0', + ), + 193 => + array ( + 'match' => 'E0A9 E00E', + 'replace' => 'E0F1', + ), + 194 => + array ( + 'match' => 'E0AA E00E', + 'replace' => 'E0F2', + ), + 195 => + array ( + 'match' => 'E0AB E00E', + 'replace' => 'E0F3', + ), + 196 => + array ( + 'match' => 'E0AC E00E', + 'replace' => 'E0F4', + ), + 197 => + array ( + 'match' => 'E0AD E00E', + 'replace' => 'E0F5', + ), + 198 => + array ( + 'match' => 'E0AE E00E', + 'replace' => 'E0F6', + ), + 199 => + array ( + 'match' => 'E0AF E00E', + 'replace' => 'E0F7', + ), + 200 => + array ( + 'match' => 'E0B0 E00E', + 'replace' => 'E0F8', + ), + 201 => + array ( + 'match' => 'E0B1 E00E', + 'replace' => 'E0F9', + ), + 202 => + array ( + 'match' => 'E0B2 E00E', + 'replace' => 'E0FA', + ), + 203 => + array ( + 'match' => 'E0B3 E00E', + 'replace' => 'E0FB', + ), + 204 => + array ( + 'match' => 'E0B4 E00E', + 'replace' => 'E0FC', + ), + 205 => + array ( + 'match' => 'E0B5 E00E', + 'replace' => 'E0FD', + ), + 206 => + array ( + 'match' => 'E0B6 E00E', + 'replace' => 'E0FE', + ), + 207 => + array ( + 'match' => 'E0B7 E00E', + 'replace' => 'E0FF', + ), + 208 => + array ( + 'match' => 'E0B8 E00E', + 'replace' => 'E100', + ), + 209 => + array ( + 'match' => 'E0B9 E00E', + 'replace' => 'E101', + ), + 210 => + array ( + 'match' => 'E0BA E00E', + 'replace' => 'E102', + ), + 211 => + array ( + 'match' => 'E0BB E00E', + 'replace' => 'E103', + ), + 212 => + array ( + 'match' => 'E0BC E00E', + 'replace' => 'E104', + ), + 213 => + array ( + 'match' => 'E0BD E00E', + 'replace' => 'E105', + ), + 214 => + array ( + 'match' => 'E0BE E00E', + 'replace' => 'E106', + ), + 215 => + array ( + 'match' => 'E0BF E00E', + 'replace' => 'E107', + ), + 216 => + array ( + 'match' => 'E0C0 E00E', + 'replace' => 'E108', + ), + 217 => + array ( + 'match' => 'E0C1 E00E', + 'replace' => 'E109', + ), + 218 => + array ( + 'match' => 'E0C2 E00E', + 'replace' => 'E10A', + ), + 219 => + array ( + 'match' => 'E0C3 E00E', + 'replace' => 'E10B', + ), + 220 => + array ( + 'match' => 'E0C4 E00E', + 'replace' => 'E10C', + ), + 221 => + array ( + 'match' => 'E0C5 E00E', + 'replace' => 'E10D', + ), + 222 => + array ( + 'match' => 'E0C6 E00E', + 'replace' => 'E10E', + ), + 223 => + array ( + 'match' => 'E0C7 E00E', + 'replace' => 'E10F', + ), + 224 => + array ( + 'match' => 'E0C8 E00E', + 'replace' => 'E110', + ), + 225 => + array ( + 'match' => 'E0C9 E00E', + 'replace' => 'E111', + ), + 226 => + array ( + 'match' => 'E0CA E00E', + 'replace' => 'E112', + ), + 227 => + array ( + 'match' => 'E0CB E00E', + 'replace' => 'E113', + ), + 228 => + array ( + 'match' => 'E0CC E00E', + 'replace' => 'E114', + ), + 229 => + array ( + 'match' => 'E0CD E00E', + 'replace' => 'E115', + ), + 230 => + array ( + 'match' => 'E0CE E00E', + 'replace' => 'E116', + ), + 231 => + array ( + 'match' => 'E0CF E00E', + 'replace' => 'E117', + ), + 232 => + array ( + 'match' => 'E0D0 E00E', + 'replace' => 'E118', + ), + 233 => + array ( + 'match' => 'E0D1 E00E', + 'replace' => 'E119', + ), + 234 => + array ( + 'match' => 'E0D2 E00E', + 'replace' => 'E11A', + ), + 235 => + array ( + 'match' => '0958 E00E', + 'replace' => 'E067', + ), + 236 => + array ( + 'match' => '0959 E00E', + 'replace' => 'E068', + ), + 237 => + array ( + 'match' => '095A E00E', + 'replace' => 'E069', + ), + 238 => + array ( + 'match' => 'E02A E00E', + 'replace' => 'E06A', + ), + 239 => + array ( + 'match' => 'E02B E00E', + 'replace' => 'E06B', + ), + 240 => + array ( + 'match' => 'E02C E00E', + 'replace' => 'E06C', + ), + 241 => + array ( + 'match' => 'E02D E00E', + 'replace' => 'E06D', + ), + 242 => + array ( + 'match' => '095B E00E', + 'replace' => 'E06E', + ), + 243 => + array ( + 'match' => 'E02E E00E', + 'replace' => 'E06F', + ), + 244 => + array ( + 'match' => 'E02F E00E', + 'replace' => 'E070', + ), + 245 => + array ( + 'match' => 'E030 E00E', + 'replace' => 'E071', + ), + 246 => + array ( + 'match' => 'E031 E00E', + 'replace' => 'E072', + ), + 247 => + array ( + 'match' => '095C E00E', + 'replace' => 'E073', + ), + 248 => + array ( + 'match' => '095D E00E', + 'replace' => 'E074', + ), + 249 => + array ( + 'match' => 'E032 E00E', + 'replace' => 'E075', + ), + 250 => + array ( + 'match' => 'E033 E00E', + 'replace' => 'E076', + ), + 251 => + array ( + 'match' => 'E034 E00E', + 'replace' => 'E077', + ), + 252 => + array ( + 'match' => 'E035 E00E', + 'replace' => 'E078', + ), + 253 => + array ( + 'match' => 'E036 E00E', + 'replace' => 'E079', + ), + 254 => + array ( + 'match' => '0929 E00E', + 'replace' => 'E07A', + ), + 255 => + array ( + 'match' => 'E037 E00E', + 'replace' => 'E07B', + ), + 256 => + array ( + 'match' => '095E E00E', + 'replace' => 'E07C', + ), + 257 => + array ( + 'match' => 'E038 E00E', + 'replace' => 'E07D', + ), + 258 => + array ( + 'match' => 'E039 E00E', + 'replace' => 'E07E', + ), + 259 => + array ( + 'match' => 'E03A E00E', + 'replace' => 'E07F', + ), + 260 => + array ( + 'match' => '095F E00E', + 'replace' => 'E080', + ), + 261 => + array ( + 'match' => '0931 E00E', + 'replace' => 'E081', + ), + 262 => + array ( + 'match' => 'E03B E00E', + 'replace' => 'E082', + ), + 263 => + array ( + 'match' => '0934 E00E', + 'replace' => 'E083', + ), + 264 => + array ( + 'match' => 'E03C E00E', + 'replace' => 'E084', + ), + 265 => + array ( + 'match' => 'E03D E00E', + 'replace' => 'E085', + ), + 266 => + array ( + 'match' => 'E03E E00E', + 'replace' => 'E086', + ), + 267 => + array ( + 'match' => 'E03F E00E', + 'replace' => 'E087', + ), + 268 => + array ( + 'match' => 'E040 E00E', + 'replace' => 'E088', + ), + 269 => + array ( + 'match' => 'E041 E00E', + 'replace' => 'E089', + ), + 270 => + array ( + 'match' => 'E042 E00E', + 'replace' => 'E08A', + ), + 271 => + array ( + 'match' => 'E043 0924', + 'replace' => 'E11B', + ), + 272 => + array ( + 'match' => 'E044 0928', + 'replace' => 'E11C', + ), + 273 => + array ( + 'match' => 'E047 092E', + 'replace' => 'E11D', + ), + 274 => + array ( + 'match' => 'E052 0924', + 'replace' => 'E11E', + ), + 275 => + array ( + 'match' => 'E052 0928', + 'replace' => 'E11F', + ), + 276 => + array ( + 'match' => 'E054 0917', + 'replace' => 'E120', + ), + 277 => + array ( + 'match' => 'E054 0918', + 'replace' => 'E121', + ), + 278 => + array ( + 'match' => 'E054 0926', + 'replace' => 'E122', + ), + 279 => + array ( + 'match' => 'E054 0927', + 'replace' => 'E123', + ), + 280 => + array ( + 'match' => 'E054 0928', + 'replace' => 'E124', + ), + 281 => + array ( + 'match' => 'E054 092C', + 'replace' => 'E125', + ), + 282 => + array ( + 'match' => 'E054 092D', + 'replace' => 'E126', + ), + 283 => + array ( + 'match' => 'E054 E05C 092D', + 'replace' => 'E127', + ), + 284 => + array ( + 'match' => 'E054 092F', + 'replace' => 'E128', + ), + 285 => + array ( + 'match' => 'E054 0935', + 'replace' => 'E129', + ), + 286 => + array ( + 'match' => 'E057 0924', + 'replace' => 'E12A', + ), + 287 => + array ( + 'match' => 'E061 0928', + 'replace' => 'E12B', + ), + 288 => + array ( + 'match' => 'E061 091A', + 'replace' => 'E12C', + ), + 289 => + array ( + 'match' => 'E061 0932', + 'replace' => 'E12D', + ), + 290 => + array ( + 'match' => 'E061 0935', + 'replace' => 'E12E', + ), + 291 => + array ( + 'match' => 'E062 091F', + 'replace' => 'E12F', + ), + 292 => + array ( + 'match' => 'E062 0920', + 'replace' => 'E130', + ), + 293 => + array ( + 'match' => 'E062 E095', + 'replace' => 'E131', + ), + 294 => + array ( + 'match' => 'E062 E096', + 'replace' => 'E132', + ), + 295 => + array ( + 'match' => 'E063 E09A', + 'replace' => 'E133', + ), + 296 => + array ( + 'match' => 'E064 0928', + 'replace' => 'E134', + ), + 297 => + array ( + 'match' => 'E064 092E', + 'replace' => 'E135', + ), + 298 => + array ( + 'match' => 'E064 092F', + 'replace' => 'E136', + ), + 299 => + array ( + 'match' => 'E064 0923', + 'replace' => 'E137', + ), + 300 => + array ( + 'match' => 'E064 0932', + 'replace' => 'E138', + ), + 301 => + array ( + 'match' => 'E064 0935', + 'replace' => 'E139', + ), + 302 => + array ( + 'match' => 'E044 E056', + 'replace' => 'E13B', + ), + 303 => + array ( + 'match' => 'E052 E052', + 'replace' => 'E13D', + ), + 304 => + array ( + 'match' => 'E052 E056', + 'replace' => 'E13E', + ), + 305 => + array ( + 'match' => 'E054 E05B', + 'replace' => 'E13F', + ), + 306 => + array ( + 'match' => 'E057 E052', + 'replace' => 'E140', + ), + 307 => + array ( + 'match' => 'E061 E056', + 'replace' => 'E141', + ), + 308 => + array ( + 'match' => 'E061 E048', + 'replace' => 'E142', + ), + 309 => + array ( + 'match' => 'E061 E05E', + 'replace' => 'E143', + ), + 310 => + array ( + 'match' => 'E061 E060', + 'replace' => 'E144', + ), + 311 => + array ( + 'match' => 'E063 E0E2', + 'replace' => 'E145', + ), + 312 => + array ( + 'match' => 'E047 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E047 E015 \\1', + ), + 313 => + array ( + 'match' => 'E04D ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E04D E015 \\1', + ), + 314 => + array ( + 'match' => 'E04E ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E04E E015 \\1', + ), + 315 => + array ( + 'match' => 'E04F ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E04F E015 \\1', + ), + 316 => + array ( + 'match' => 'E050 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E050 E015 \\1', + ), + 317 => + array ( + 'match' => 'E054 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E054 E015 \\1', + ), + 318 => + array ( + 'match' => 'E06B ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E06B E015 \\1', + ), + 319 => + array ( + 'match' => 'E071 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E071 E015 \\1', + ), + 320 => + array ( + 'match' => 'E072 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E072 E015 \\1', + ), + 321 => + array ( + 'match' => 'E073 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E073 E015 \\1', + ), + 322 => + array ( + 'match' => 'E074 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E074 E015 \\1', + ), + 323 => + array ( + 'match' => 'E078 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E078 E015 \\1', + ), + 324 => + array ( + 'match' => 'E0FB ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E0FB E015 \\1', + ), + 325 => + array ( + 'match' => 'E101 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E101 E015 \\1', + ), + 326 => + array ( + 'match' => 'E102 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E102 E015 \\1', + ), + 327 => + array ( + 'match' => 'E103 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E103 E015 \\1', + ), + 328 => + array ( + 'match' => 'E104 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E104 E015 \\1', + ), + 329 => + array ( + 'match' => 'E108 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) E015)', + 'replace' => 'E108 E015 \\1', + ), + 330 => + array ( + 'match' => 'E047 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E047 E015 \\1', + ), + 331 => + array ( + 'match' => 'E04D ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E04D E015 \\1', + ), + 332 => + array ( + 'match' => 'E04E ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E04E E015 \\1', + ), + 333 => + array ( + 'match' => 'E04F ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E04F E015 \\1', + ), + 334 => + array ( + 'match' => 'E050 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E050 E015 \\1', + ), + 335 => + array ( + 'match' => 'E054 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E054 E015 \\1', + ), + 336 => + array ( + 'match' => 'E06B ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E06B E015 \\1', + ), + 337 => + array ( + 'match' => 'E071 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E071 E015 \\1', + ), + 338 => + array ( + 'match' => 'E072 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E072 E015 \\1', + ), + 339 => + array ( + 'match' => 'E073 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E073 E015 \\1', + ), + 340 => + array ( + 'match' => 'E074 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E074 E015 \\1', + ), + 341 => + array ( + 'match' => 'E078 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E078 E015 \\1', + ), + 342 => + array ( + 'match' => 'E0FB ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E0FB E015 \\1', + ), + 343 => + array ( + 'match' => 'E101 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E101 E015 \\1', + ), + 344 => + array ( + 'match' => 'E102 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E102 E015 \\1', + ), + 345 => + array ( + 'match' => 'E103 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E103 E015 \\1', + ), + 346 => + array ( + 'match' => 'E104 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E104 E015 \\1', + ), + 347 => + array ( + 'match' => 'E108 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951) E015)', + 'replace' => 'E108 E015 \\1', + ), + 348 => + array ( + 'match' => 'E047 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E047 E015 \\1', + ), + 349 => + array ( + 'match' => 'E04D ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E04D E015 \\1', + ), + 350 => + array ( + 'match' => 'E04E ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E04E E015 \\1', + ), + 351 => + array ( + 'match' => 'E04F ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E04F E015 \\1', + ), + 352 => + array ( + 'match' => 'E050 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E050 E015 \\1', + ), + 353 => + array ( + 'match' => 'E054 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E054 E015 \\1', + ), + 354 => + array ( + 'match' => 'E06B ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E06B E015 \\1', + ), + 355 => + array ( + 'match' => 'E071 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E071 E015 \\1', + ), + 356 => + array ( + 'match' => 'E072 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E072 E015 \\1', + ), + 357 => + array ( + 'match' => 'E073 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E073 E015 \\1', + ), + 358 => + array ( + 'match' => 'E074 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E074 E015 \\1', + ), + 359 => + array ( + 'match' => 'E078 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E078 E015 \\1', + ), + 360 => + array ( + 'match' => 'E0FB ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E0FB E015 \\1', + ), + 361 => + array ( + 'match' => 'E101 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E101 E015 \\1', + ), + 362 => + array ( + 'match' => 'E102 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E102 E015 \\1', + ), + 363 => + array ( + 'match' => 'E103 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E103 E015 \\1', + ), + 364 => + array ( + 'match' => 'E104 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E104 E015 \\1', + ), + 365 => + array ( + 'match' => 'E108 ((0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029) (0941|0942|0943|0944|0952|E013) E015)', + 'replace' => 'E108 E015 \\1', + ), + 366 => + array ( + 'match' => '200D E00E', + 'replace' => '094D', + ), + 367 => + array ( + 'match' => 'E00C', + 'replace' => '094D', + ), + 368 => + array ( + 'match' => 'E00E', + 'replace' => '094D', + ), + 369 => + array ( + 'match' => 'E043 200D', + 'replace' => 'E043', + ), + 370 => + array ( + 'match' => 'E044 200D', + 'replace' => 'E044', + ), + 371 => + array ( + 'match' => 'E045 200D', + 'replace' => 'E045', + ), + 372 => + array ( + 'match' => 'E046 200D', + 'replace' => 'E046', + ), + 373 => + array ( + 'match' => 'E047 200D', + 'replace' => 'E047', + ), + 374 => + array ( + 'match' => 'E048 200D', + 'replace' => 'E048', + ), + 375 => + array ( + 'match' => 'E049 200D', + 'replace' => 'E049', + ), + 376 => + array ( + 'match' => 'E04A 200D', + 'replace' => 'E04A', + ), + 377 => + array ( + 'match' => 'E04B 200D', + 'replace' => 'E04B', + ), + 378 => + array ( + 'match' => 'E04C 200D', + 'replace' => 'E04C', + ), + 379 => + array ( + 'match' => 'E04D 200D', + 'replace' => 'E04D', + ), + 380 => + array ( + 'match' => 'E04E 200D', + 'replace' => 'E04E', + ), + 381 => + array ( + 'match' => 'E04F 200D', + 'replace' => 'E04F', + ), + 382 => + array ( + 'match' => 'E050 200D', + 'replace' => 'E050', + ), + 383 => + array ( + 'match' => 'E051 200D', + 'replace' => 'E051', + ), + 384 => + array ( + 'match' => 'E052 200D', + 'replace' => 'E052', + ), + 385 => + array ( + 'match' => 'E053 200D', + 'replace' => 'E053', + ), + 386 => + array ( + 'match' => 'E054 200D', + 'replace' => 'E054', + ), + 387 => + array ( + 'match' => 'E055 200D', + 'replace' => 'E055', + ), + 388 => + array ( + 'match' => 'E056 200D', + 'replace' => 'E056', + ), + 389 => + array ( + 'match' => 'E057 200D', + 'replace' => 'E057', + ), + 390 => + array ( + 'match' => 'E058 200D', + 'replace' => 'E058', + ), + 391 => + array ( + 'match' => 'E059 200D', + 'replace' => 'E059', + ), + 392 => + array ( + 'match' => 'E05A 200D', + 'replace' => 'E05A', + ), + 393 => + array ( + 'match' => 'E05B 200D', + 'replace' => 'E05B', + ), + 394 => + array ( + 'match' => 'E05C 200D', + 'replace' => 'E05C', + ), + 395 => + array ( + 'match' => 'E05D 200D', + 'replace' => 'E05D', + ), + 396 => + array ( + 'match' => 'E05E 200D', + 'replace' => 'E05E', + ), + 397 => + array ( + 'match' => 'E05F 200D', + 'replace' => 'E05F', + ), + 398 => + array ( + 'match' => 'E060 200D', + 'replace' => 'E060', + ), + 399 => + array ( + 'match' => 'E061 200D', + 'replace' => 'E061', + ), + 400 => + array ( + 'match' => 'E062 200D', + 'replace' => 'E062', + ), + 401 => + array ( + 'match' => 'E063 200D', + 'replace' => 'E063', + ), + 402 => + array ( + 'match' => 'E064 200D', + 'replace' => 'E064', + ), + 403 => + array ( + 'match' => 'E065 200D', + 'replace' => 'E065', + ), + 404 => + array ( + 'match' => 'E066 200D', + 'replace' => 'E066', + ), + 405 => + array ( + 'match' => 'E067 200D', + 'replace' => 'E067', + ), + 406 => + array ( + 'match' => 'E068 200D', + 'replace' => 'E068', + ), + 407 => + array ( + 'match' => 'E069 200D', + 'replace' => 'E069', + ), + 408 => + array ( + 'match' => 'E06A 200D', + 'replace' => 'E06A', + ), + 409 => + array ( + 'match' => 'E06B 200D', + 'replace' => 'E06B', + ), + 410 => + array ( + 'match' => 'E06C 200D', + 'replace' => 'E06C', + ), + 411 => + array ( + 'match' => 'E06D 200D', + 'replace' => 'E06D', + ), + 412 => + array ( + 'match' => 'E06E 200D', + 'replace' => 'E06E', + ), + 413 => + array ( + 'match' => 'E06F 200D', + 'replace' => 'E06F', + ), + 414 => + array ( + 'match' => 'E070 200D', + 'replace' => 'E070', + ), + 415 => + array ( + 'match' => 'E071 200D', + 'replace' => 'E071', + ), + 416 => + array ( + 'match' => 'E072 200D', + 'replace' => 'E072', + ), + 417 => + array ( + 'match' => 'E073 200D', + 'replace' => 'E073', + ), + 418 => + array ( + 'match' => 'E074 200D', + 'replace' => 'E074', + ), + 419 => + array ( + 'match' => 'E075 200D', + 'replace' => 'E075', + ), + 420 => + array ( + 'match' => 'E076 200D', + 'replace' => 'E076', + ), + 421 => + array ( + 'match' => 'E077 200D', + 'replace' => 'E077', + ), + 422 => + array ( + 'match' => 'E078 200D', + 'replace' => 'E078', + ), + 423 => + array ( + 'match' => 'E079 200D', + 'replace' => 'E079', + ), + 424 => + array ( + 'match' => 'E07A 200D', + 'replace' => 'E07A', + ), + 425 => + array ( + 'match' => 'E07B 200D', + 'replace' => 'E07B', + ), + 426 => + array ( + 'match' => 'E07C 200D', + 'replace' => 'E07C', + ), + 427 => + array ( + 'match' => 'E07D 200D', + 'replace' => 'E07D', + ), + 428 => + array ( + 'match' => 'E07E 200D', + 'replace' => 'E07E', + ), + 429 => + array ( + 'match' => 'E07F 200D', + 'replace' => 'E07F', + ), + 430 => + array ( + 'match' => 'E080 200D', + 'replace' => 'E080', + ), + 431 => + array ( + 'match' => 'E081 200D', + 'replace' => 'E081', + ), + 432 => + array ( + 'match' => 'E082 200D', + 'replace' => 'E082', + ), + 433 => + array ( + 'match' => 'E083 200D', + 'replace' => 'E083', + ), + 434 => + array ( + 'match' => 'E084 200D', + 'replace' => 'E084', + ), + 435 => + array ( + 'match' => 'E085 200D', + 'replace' => 'E085', + ), + 436 => + array ( + 'match' => 'E086 200D', + 'replace' => 'E086', + ), + 437 => + array ( + 'match' => 'E087 200D', + 'replace' => 'E087', + ), + 438 => + array ( + 'match' => 'E088 200D', + 'replace' => 'E088', + ), + 439 => + array ( + 'match' => 'E089 200D', + 'replace' => 'E089', + ), + 440 => + array ( + 'match' => 'E08A 200D', + 'replace' => 'E08A', + ), + 441 => + array ( + 'match' => 'E0D3 200D', + 'replace' => 'E0D3', + ), + 442 => + array ( + 'match' => 'E0D4 200D', + 'replace' => 'E0D4', + ), + 443 => + array ( + 'match' => 'E0D5 200D', + 'replace' => 'E0D5', + ), + 444 => + array ( + 'match' => 'E0D6 200D', + 'replace' => 'E0D6', + ), + 445 => + array ( + 'match' => 'E0D7 200D', + 'replace' => 'E0D7', + ), + 446 => + array ( + 'match' => 'E0D8 200D', + 'replace' => 'E0D8', + ), + 447 => + array ( + 'match' => 'E0D9 200D', + 'replace' => 'E0D9', + ), + 448 => + array ( + 'match' => 'E0DA 200D', + 'replace' => 'E0DA', + ), + 449 => + array ( + 'match' => 'E0DB 200D', + 'replace' => 'E0DB', + ), + 450 => + array ( + 'match' => 'E0DC 200D', + 'replace' => 'E0DC', + ), + 451 => + array ( + 'match' => 'E0DD 200D', + 'replace' => 'E0DD', + ), + 452 => + array ( + 'match' => 'E0DE 200D', + 'replace' => 'E0DE', + ), + 453 => + array ( + 'match' => 'E0DF 200D', + 'replace' => 'E0DF', + ), + 454 => + array ( + 'match' => 'E0E0 200D', + 'replace' => 'E0E0', + ), + 455 => + array ( + 'match' => 'E0E1 200D', + 'replace' => 'E0E1', + ), + 456 => + array ( + 'match' => 'E0E2 200D', + 'replace' => 'E0E2', + ), + 457 => + array ( + 'match' => 'E0E3 200D', + 'replace' => 'E0E3', + ), + 458 => + array ( + 'match' => 'E0E4 200D', + 'replace' => 'E0E4', + ), + 459 => + array ( + 'match' => 'E0E5 200D', + 'replace' => 'E0E5', + ), + 460 => + array ( + 'match' => 'E0E6 200D', + 'replace' => 'E0E6', + ), + 461 => + array ( + 'match' => 'E0E7 200D', + 'replace' => 'E0E7', + ), + 462 => + array ( + 'match' => 'E0E8 200D', + 'replace' => 'E0E8', + ), + 463 => + array ( + 'match' => 'E0E9 200D', + 'replace' => 'E0E9', + ), + 464 => + array ( + 'match' => 'E0EA 200D', + 'replace' => 'E0EA', + ), + 465 => + array ( + 'match' => 'E0EB 200D', + 'replace' => 'E0EB', + ), + 466 => + array ( + 'match' => 'E0EC 200D', + 'replace' => 'E0EC', + ), + 467 => + array ( + 'match' => 'E0ED 200D', + 'replace' => 'E0ED', + ), + 468 => + array ( + 'match' => 'E0EE 200D', + 'replace' => 'E0EE', + ), + 469 => + array ( + 'match' => 'E0EF 200D', + 'replace' => 'E0EF', + ), + 470 => + array ( + 'match' => 'E0F0 200D', + 'replace' => 'E0F0', + ), + 471 => + array ( + 'match' => 'E0F1 200D', + 'replace' => 'E0F1', + ), + 472 => + array ( + 'match' => 'E0F2 200D', + 'replace' => 'E0F2', + ), + 473 => + array ( + 'match' => 'E0F3 200D', + 'replace' => 'E0F3', + ), + 474 => + array ( + 'match' => 'E0F4 200D', + 'replace' => 'E0F4', + ), + 475 => + array ( + 'match' => 'E0F5 200D', + 'replace' => 'E0F5', + ), + 476 => + array ( + 'match' => 'E0F6 200D', + 'replace' => 'E0F6', + ), + 477 => + array ( + 'match' => 'E0F7 200D', + 'replace' => 'E0F7', + ), + 478 => + array ( + 'match' => 'E0F8 200D', + 'replace' => 'E0F8', + ), + 479 => + array ( + 'match' => 'E0F9 200D', + 'replace' => 'E0F9', + ), + 480 => + array ( + 'match' => 'E0FA 200D', + 'replace' => 'E0FA', + ), + 481 => + array ( + 'match' => 'E0FB 200D', + 'replace' => 'E0FB', + ), + 482 => + array ( + 'match' => 'E0FC 200D', + 'replace' => 'E0FC', + ), + 483 => + array ( + 'match' => 'E0FD 200D', + 'replace' => 'E0FD', + ), + 484 => + array ( + 'match' => 'E0FE 200D', + 'replace' => 'E0FE', + ), + 485 => + array ( + 'match' => 'E0FF 200D', + 'replace' => 'E0FF', + ), + 486 => + array ( + 'match' => 'E100 200D', + 'replace' => 'E100', + ), + 487 => + array ( + 'match' => 'E101 200D', + 'replace' => 'E101', + ), + 488 => + array ( + 'match' => 'E102 200D', + 'replace' => 'E102', + ), + 489 => + array ( + 'match' => 'E103 200D', + 'replace' => 'E103', + ), + 490 => + array ( + 'match' => 'E104 200D', + 'replace' => 'E104', + ), + 491 => + array ( + 'match' => 'E105 200D', + 'replace' => 'E105', + ), + 492 => + array ( + 'match' => 'E106 200D', + 'replace' => 'E106', + ), + 493 => + array ( + 'match' => 'E107 200D', + 'replace' => 'E107', + ), + 494 => + array ( + 'match' => 'E108 200D', + 'replace' => 'E108', + ), + 495 => + array ( + 'match' => 'E109 200D', + 'replace' => 'E109', + ), + 496 => + array ( + 'match' => 'E10A 200D', + 'replace' => 'E10A', + ), + 497 => + array ( + 'match' => 'E10B 200D', + 'replace' => 'E10B', + ), + 498 => + array ( + 'match' => 'E10C 200D', + 'replace' => 'E10C', + ), + 499 => + array ( + 'match' => 'E10D 200D', + 'replace' => 'E10D', + ), + 500 => + array ( + 'match' => 'E10E 200D', + 'replace' => 'E10E', + ), + 501 => + array ( + 'match' => 'E10F 200D', + 'replace' => 'E10F', + ), + 502 => + array ( + 'match' => 'E110 200D', + 'replace' => 'E110', + ), + 503 => + array ( + 'match' => 'E111 200D', + 'replace' => 'E111', + ), + 504 => + array ( + 'match' => 'E112 200D', + 'replace' => 'E112', + ), + 505 => + array ( + 'match' => 'E113 200D', + 'replace' => 'E113', + ), + 506 => + array ( + 'match' => 'E114 200D', + 'replace' => 'E114', + ), + 507 => + array ( + 'match' => 'E115 200D', + 'replace' => 'E115', + ), + 508 => + array ( + 'match' => 'E116 200D', + 'replace' => 'E116', + ), + 509 => + array ( + 'match' => 'E117 200D', + 'replace' => 'E117', + ), + 510 => + array ( + 'match' => 'E118 200D', + 'replace' => 'E118', + ), + 511 => + array ( + 'match' => 'E119 200D', + 'replace' => 'E119', + ), + 512 => + array ( + 'match' => 'E11A 200D', + 'replace' => 'E11A', + ), + 513 => + array ( + 'match' => 'E13D 200D', + 'replace' => 'E13D', + ), + 514 => + array ( + 'match' => 'E13E 200D', + 'replace' => 'E13E', + ), + 515 => + array ( + 'match' => 'E13F 200D', + 'replace' => 'E13F', + ), + 516 => + array ( + 'match' => 'E140 200D', + 'replace' => 'E140', + ), + 517 => + array ( + 'match' => 'E141 200D', + 'replace' => 'E141', + ), + 518 => + array ( + 'match' => 'E142 200D', + 'replace' => 'E142', + ), + 519 => + array ( + 'match' => 'E143 200D', + 'replace' => 'E143', + ), + 520 => + array ( + 'match' => 'E144 200D', + 'replace' => 'E144', + ), + 521 => + array ( + 'match' => 'E145 200D', + 'replace' => 'E145', + ), + 522 => + array ( + 'match' => '200D E013', + 'replace' => 'E013', + ), + 523 => + array ( + 'match' => '200D', + 'replace' => '200B', + ), + 524 => + array ( + 'match' => '200C', + 'replace' => '200B', + ), + 525 => + array ( + 'match' => '(093F) E047', + 'replace' => '\\1 E047 093F', + ), + 526 => + array ( + 'match' => '(093F) E04D', + 'replace' => '\\1 E04D 093F', + ), + 527 => + array ( + 'match' => '(093F) E04E', + 'replace' => '\\1 E04E 093F', + ), + 528 => + array ( + 'match' => '(093F) E04F', + 'replace' => '\\1 E04F 093F', + ), + 529 => + array ( + 'match' => '(093F) E050', + 'replace' => '\\1 E050 093F', + ), + 530 => + array ( + 'match' => '(093F) E054', + 'replace' => '\\1 E054 093F', + ), + 531 => + array ( + 'match' => '(093F) E06B', + 'replace' => '\\1 E06B 093F', + ), + 532 => + array ( + 'match' => '(093F) E071', + 'replace' => '\\1 E071 093F', + ), + 533 => + array ( + 'match' => '(093F) E072', + 'replace' => '\\1 E072 093F', + ), + 534 => + array ( + 'match' => '(093F) E073', + 'replace' => '\\1 E073 093F', + ), + 535 => + array ( + 'match' => '(093F) E074', + 'replace' => '\\1 E074 093F', + ), + 536 => + array ( + 'match' => '(093F) E078', + 'replace' => '\\1 E078 093F', + ), + 537 => + array ( + 'match' => '(093F) E0FB', + 'replace' => '\\1 E0FB 093F', + ), + 538 => + array ( + 'match' => '(093F) E101', + 'replace' => '\\1 E101 093F', + ), + 539 => + array ( + 'match' => '(093F) E102', + 'replace' => '\\1 E102 093F', + ), + 540 => + array ( + 'match' => '(093F) E103', + 'replace' => '\\1 E103 093F', + ), + 541 => + array ( + 'match' => '(093F) E104', + 'replace' => '\\1 E104 093F', + ), + 542 => + array ( + 'match' => '(093F) E108', + 'replace' => '\\1 E108 093F', + ), + 543 => + array ( + 'match' => '093F E047 (093F)', + 'replace' => 'E047 \\1', + ), + 544 => + array ( + 'match' => '093F E04D (093F)', + 'replace' => 'E04D \\1', + ), + 545 => + array ( + 'match' => '093F E04E (093F)', + 'replace' => 'E04E \\1', + ), + 546 => + array ( + 'match' => '093F E04F (093F)', + 'replace' => 'E04F \\1', + ), + 547 => + array ( + 'match' => '093F E050 (093F)', + 'replace' => 'E050 \\1', + ), + 548 => + array ( + 'match' => '093F E054 (093F)', + 'replace' => 'E054 \\1', + ), + 549 => + array ( + 'match' => '093F E06B (093F)', + 'replace' => 'E06B \\1', + ), + 550 => + array ( + 'match' => '093F E071 (093F)', + 'replace' => 'E071 \\1', + ), + 551 => + array ( + 'match' => '093F E072 (093F)', + 'replace' => 'E072 \\1', + ), + 552 => + array ( + 'match' => '093F E073 (093F)', + 'replace' => 'E073 \\1', + ), + 553 => + array ( + 'match' => '093F E074 (093F)', + 'replace' => 'E074 \\1', + ), + 554 => + array ( + 'match' => '093F E078 (093F)', + 'replace' => 'E078 \\1', + ), + 555 => + array ( + 'match' => '093F E0FB (093F)', + 'replace' => 'E0FB \\1', + ), + 556 => + array ( + 'match' => '093F E101 (093F)', + 'replace' => 'E101 \\1', + ), + 557 => + array ( + 'match' => '093F E102 (093F)', + 'replace' => 'E102 \\1', + ), + 558 => + array ( + 'match' => '093F E103 (093F)', + 'replace' => 'E103 \\1', + ), + 559 => + array ( + 'match' => '093F E104 (093F)', + 'replace' => 'E104 \\1', + ), + 560 => + array ( + 'match' => '093F E108 (093F)', + 'replace' => 'E108 \\1', + ), + 561 => + array ( + 'match' => '(E015) 0915 E015', + 'replace' => '\\1 0915', + ), + 562 => + array ( + 'match' => '(E015) 0916 E015', + 'replace' => '\\1 0916', + ), + 563 => + array ( + 'match' => '(E015) 0917 E015', + 'replace' => '\\1 0917', + ), + 564 => + array ( + 'match' => '(E015) 0918 E015', + 'replace' => '\\1 0918', + ), + 565 => + array ( + 'match' => '(E015) 0919 E015', + 'replace' => '\\1 0919', + ), + 566 => + array ( + 'match' => '(E015) 091A E015', + 'replace' => '\\1 091A', + ), + 567 => + array ( + 'match' => '(E015) 091B E015', + 'replace' => '\\1 091B', + ), + 568 => + array ( + 'match' => '(E015) 091C E015', + 'replace' => '\\1 091C', + ), + 569 => + array ( + 'match' => '(E015) 091D E015', + 'replace' => '\\1 091D', + ), + 570 => + array ( + 'match' => '(E015) 091E E015', + 'replace' => '\\1 091E', + ), + 571 => + array ( + 'match' => '(E015) 091F E015', + 'replace' => '\\1 091F', + ), + 572 => + array ( + 'match' => '(E015) 0920 E015', + 'replace' => '\\1 0920', + ), + 573 => + array ( + 'match' => '(E015) 0921 E015', + 'replace' => '\\1 0921', + ), + 574 => + array ( + 'match' => '(E015) 0922 E015', + 'replace' => '\\1 0922', + ), + 575 => + array ( + 'match' => '(E015) 0923 E015', + 'replace' => '\\1 0923', + ), + 576 => + array ( + 'match' => '(E015) 0924 E015', + 'replace' => '\\1 0924', + ), + 577 => + array ( + 'match' => '(E015) 0925 E015', + 'replace' => '\\1 0925', + ), + 578 => + array ( + 'match' => '(E015) 0926 E015', + 'replace' => '\\1 0926', + ), + 579 => + array ( + 'match' => '(E015) 0927 E015', + 'replace' => '\\1 0927', + ), + 580 => + array ( + 'match' => '(E015) 0928 E015', + 'replace' => '\\1 0928', + ), + 581 => + array ( + 'match' => '(E015) 092A E015', + 'replace' => '\\1 092A', + ), + 582 => + array ( + 'match' => '(E015) 092B E015', + 'replace' => '\\1 092B', + ), + 583 => + array ( + 'match' => '(E015) 092C E015', + 'replace' => '\\1 092C', + ), + 584 => + array ( + 'match' => '(E015) 092D E015', + 'replace' => '\\1 092D', + ), + 585 => + array ( + 'match' => '(E015) 092E E015', + 'replace' => '\\1 092E', + ), + 586 => + array ( + 'match' => '(E015) 092F E015', + 'replace' => '\\1 092F', + ), + 587 => + array ( + 'match' => '(E015) 0930 E015', + 'replace' => '\\1 0930', + ), + 588 => + array ( + 'match' => '(E015) 0932 E015', + 'replace' => '\\1 0932', + ), + 589 => + array ( + 'match' => '(E015) 0933 E015', + 'replace' => '\\1 0933', + ), + 590 => + array ( + 'match' => '(E015) 0935 E015', + 'replace' => '\\1 0935', + ), + 591 => + array ( + 'match' => '(E015) 0936 E015', + 'replace' => '\\1 0936', + ), + 592 => + array ( + 'match' => '(E015) 0937 E015', + 'replace' => '\\1 0937', + ), + 593 => + array ( + 'match' => '(E015) 0938 E015', + 'replace' => '\\1 0938', + ), + 594 => + array ( + 'match' => '(E015) 0939 E015', + 'replace' => '\\1 0939', + ), + 595 => + array ( + 'match' => '(E015) E028 E015', + 'replace' => '\\1 E028', + ), + 596 => + array ( + 'match' => '(E015) E029 E015', + 'replace' => '\\1 E029', + ), + 597 => + array ( + 'match' => '(E015) E015 E015', + 'replace' => '\\1 E015', + ), + 598 => + array ( + 'match' => '(E015) 0947 E015', + 'replace' => '\\1 0947', + ), + 599 => + array ( + 'match' => '(E015) E1A8 E015', + 'replace' => '\\1 E1A8', + ), + 600 => + array ( + 'match' => '(E015) E1A7 E015', + 'replace' => '\\1 E1A7', + ), + 601 => + array ( + 'match' => '(E015) E199 E015', + 'replace' => '\\1 E199', + ), + 602 => + array ( + 'match' => '(E015) E1B2 E015', + 'replace' => '\\1 E1B2', + ), + 603 => + array ( + 'match' => '(E015) E1B1 E015', + 'replace' => '\\1 E1B1', + ), + 604 => + array ( + 'match' => '(E015) 0946 E015', + 'replace' => '\\1 0946', + ), + 605 => + array ( + 'match' => '(E015) E202 E015', + 'replace' => '\\1 E202', + ), + 606 => + array ( + 'match' => '(E015) E201 E015', + 'replace' => '\\1 E201', + ), + 607 => + array ( + 'match' => '(E015) E1A3 E015', + 'replace' => '\\1 E1A3', + ), + 608 => + array ( + 'match' => '(E015) E1C6 E015', + 'replace' => '\\1 E1C6', + ), + 609 => + array ( + 'match' => '(E015) E1C5 E015', + 'replace' => '\\1 E1C5', + ), + 610 => + array ( + 'match' => '(E015) 0945 E015', + 'replace' => '\\1 0945', + ), + 611 => + array ( + 'match' => '(E015) E200 E015', + 'replace' => '\\1 E200', + ), + 612 => + array ( + 'match' => '(E015) E1FF E015', + 'replace' => '\\1 E1FF', + ), + 613 => + array ( + 'match' => '(E015) 0948 E015', + 'replace' => '\\1 0948', + ), + 614 => + array ( + 'match' => '(E015) E1AA E015', + 'replace' => '\\1 E1AA', + ), + 615 => + array ( + 'match' => '(E015) E1A9 E015', + 'replace' => '\\1 E1A9', + ), + 616 => + array ( + 'match' => '(E015) E19A E015', + 'replace' => '\\1 E19A', + ), + 617 => + array ( + 'match' => '(E015) E1B4 E015', + 'replace' => '\\1 E1B4', + ), + 618 => + array ( + 'match' => '(E015) E1B3 E015', + 'replace' => '\\1 E1B3', + ), + 619 => + array ( + 'match' => '(E015) 0902 E015', + 'replace' => '\\1 0902', + ), + 620 => + array ( + 'match' => '(E015) E00F E015', + 'replace' => '\\1 E00F', + ), + 621 => + array ( + 'match' => '(E015) 0901 E015', + 'replace' => '\\1 0901', + ), + 622 => + array ( + 'match' => '(E015) 0953 E015', + 'replace' => '\\1 0953', + ), + 623 => + array ( + 'match' => '(E015) 0954 E015', + 'replace' => '\\1 0954', + ), + 624 => + array ( + 'match' => '(E015) 0951 E015', + 'replace' => '\\1 0951', + ), + 625 => + array ( + 'match' => '(E015) 0941 E015', + 'replace' => '\\1 0941', + ), + 626 => + array ( + 'match' => '(E015) 0942 E015', + 'replace' => '\\1 0942', + ), + 627 => + array ( + 'match' => '(E015) 0943 E015', + 'replace' => '\\1 0943', + ), + 628 => + array ( + 'match' => '(E015) 0944 E015', + 'replace' => '\\1 0944', + ), + 629 => + array ( + 'match' => '(E015) 0952 E015', + 'replace' => '\\1 0952', + ), + 630 => + array ( + 'match' => '(E015) E013 E015', + 'replace' => '\\1 E013', + ), + 631 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0915 E015', + 'replace' => '\\1 0915', + ), + 632 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0916 E015', + 'replace' => '\\1 0916', + ), + 633 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0917 E015', + 'replace' => '\\1 0917', + ), + 634 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0918 E015', + 'replace' => '\\1 0918', + ), + 635 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0919 E015', + 'replace' => '\\1 0919', + ), + 636 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 091A E015', + 'replace' => '\\1 091A', + ), + 637 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 091B E015', + 'replace' => '\\1 091B', + ), + 638 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 091C E015', + 'replace' => '\\1 091C', + ), + 639 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 091D E015', + 'replace' => '\\1 091D', + ), + 640 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 091E E015', + 'replace' => '\\1 091E', + ), + 641 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 091F E015', + 'replace' => '\\1 091F', + ), + 642 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0920 E015', + 'replace' => '\\1 0920', + ), + 643 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0921 E015', + 'replace' => '\\1 0921', + ), + 644 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0922 E015', + 'replace' => '\\1 0922', + ), + 645 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0923 E015', + 'replace' => '\\1 0923', + ), + 646 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0924 E015', + 'replace' => '\\1 0924', + ), + 647 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0925 E015', + 'replace' => '\\1 0925', + ), + 648 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0926 E015', + 'replace' => '\\1 0926', + ), + 649 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0927 E015', + 'replace' => '\\1 0927', + ), + 650 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0928 E015', + 'replace' => '\\1 0928', + ), + 651 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 092A E015', + 'replace' => '\\1 092A', + ), + 652 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 092B E015', + 'replace' => '\\1 092B', + ), + 653 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 092C E015', + 'replace' => '\\1 092C', + ), + 654 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 092D E015', + 'replace' => '\\1 092D', + ), + 655 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 092E E015', + 'replace' => '\\1 092E', + ), + 656 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 092F E015', + 'replace' => '\\1 092F', + ), + 657 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0930 E015', + 'replace' => '\\1 0930', + ), + 658 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0932 E015', + 'replace' => '\\1 0932', + ), + 659 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0933 E015', + 'replace' => '\\1 0933', + ), + 660 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0935 E015', + 'replace' => '\\1 0935', + ), + 661 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0936 E015', + 'replace' => '\\1 0936', + ), + 662 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0937 E015', + 'replace' => '\\1 0937', + ), + 663 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0938 E015', + 'replace' => '\\1 0938', + ), + 664 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0939 E015', + 'replace' => '\\1 0939', + ), + 665 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E028 E015', + 'replace' => '\\1 E028', + ), + 666 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E029 E015', + 'replace' => '\\1 E029', + ), + 667 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E015 E015', + 'replace' => '\\1 E015', + ), + 668 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0947 E015', + 'replace' => '\\1 0947', + ), + 669 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E1A8 E015', + 'replace' => '\\1 E1A8', + ), + 670 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E1A7 E015', + 'replace' => '\\1 E1A7', + ), + 671 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E199 E015', + 'replace' => '\\1 E199', + ), + 672 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E1B2 E015', + 'replace' => '\\1 E1B2', + ), + 673 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E1B1 E015', + 'replace' => '\\1 E1B1', + ), + 674 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0946 E015', + 'replace' => '\\1 0946', + ), + 675 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E202 E015', + 'replace' => '\\1 E202', + ), + 676 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E201 E015', + 'replace' => '\\1 E201', + ), + 677 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E1A3 E015', + 'replace' => '\\1 E1A3', + ), + 678 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E1C6 E015', + 'replace' => '\\1 E1C6', + ), + 679 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E1C5 E015', + 'replace' => '\\1 E1C5', + ), + 680 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0945 E015', + 'replace' => '\\1 0945', + ), + 681 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E200 E015', + 'replace' => '\\1 E200', + ), + 682 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E1FF E015', + 'replace' => '\\1 E1FF', + ), + 683 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0948 E015', + 'replace' => '\\1 0948', + ), + 684 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E1AA E015', + 'replace' => '\\1 E1AA', + ), + 685 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E1A9 E015', + 'replace' => '\\1 E1A9', + ), + 686 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E19A E015', + 'replace' => '\\1 E19A', + ), + 687 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E1B4 E015', + 'replace' => '\\1 E1B4', + ), + 688 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E1B3 E015', + 'replace' => '\\1 E1B3', + ), + 689 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0902 E015', + 'replace' => '\\1 0902', + ), + 690 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E00F E015', + 'replace' => '\\1 E00F', + ), + 691 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0901 E015', + 'replace' => '\\1 0901', + ), + 692 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0953 E015', + 'replace' => '\\1 0953', + ), + 693 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0954 E015', + 'replace' => '\\1 0954', + ), + 694 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0951 E015', + 'replace' => '\\1 0951', + ), + 695 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0941 E015', + 'replace' => '\\1 0941', + ), + 696 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0942 E015', + 'replace' => '\\1 0942', + ), + 697 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0943 E015', + 'replace' => '\\1 0943', + ), + 698 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0944 E015', + 'replace' => '\\1 0944', + ), + 699 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) 0952 E015', + 'replace' => '\\1 0952', + ), + 700 => + array ( + 'match' => '(E015 (0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029)) E013 E015', + 'replace' => '\\1 E013', + ), + 701 => + array ( + 'match' => '(093F) E015', + 'replace' => '\\1 E015 093F', + ), + 702 => + array ( + 'match' => '093F E015', + 'replace' => 'E015', + ), + 703 => + array ( + 'match' => '0915 0962', + 'replace' => 'E153', + ), + 704 => + array ( + 'match' => '0915 0963', + 'replace' => 'E154', + ), + 705 => + array ( + 'match' => 'E08F 0941', + 'replace' => 'E155', + ), + 706 => + array ( + 'match' => 'E08F 0942', + 'replace' => 'E156', + ), + 707 => + array ( + 'match' => 'E08F 0943', + 'replace' => 'E157', + ), + 708 => + array ( + 'match' => 'E08F 0944', + 'replace' => 'E158', + ), + 709 => + array ( + 'match' => 'E091 0941', + 'replace' => 'E159', + ), + 710 => + array ( + 'match' => 'E091 0942', + 'replace' => 'E15A', + ), + 711 => + array ( + 'match' => 'E091 0943', + 'replace' => 'E15B', + ), + 712 => + array ( + 'match' => 'E091 0944', + 'replace' => 'E15C', + ), + 713 => + array ( + 'match' => 'E095 0941', + 'replace' => 'E15D', + ), + 714 => + array ( + 'match' => 'E095 0942', + 'replace' => 'E15E', + ), + 715 => + array ( + 'match' => 'E095 0943', + 'replace' => 'E15F', + ), + 716 => + array ( + 'match' => 'E095 0944', + 'replace' => 'E160', + ), + 717 => + array ( + 'match' => 'E096 0941', + 'replace' => 'E161', + ), + 718 => + array ( + 'match' => 'E096 0942', + 'replace' => 'E162', + ), + 719 => + array ( + 'match' => 'E096 0943', + 'replace' => 'E163', + ), + 720 => + array ( + 'match' => 'E096 0944', + 'replace' => 'E164', + ), + 721 => + array ( + 'match' => 'E097 0941', + 'replace' => 'E165', + ), + 722 => + array ( + 'match' => 'E097 0942', + 'replace' => 'E166', + ), + 723 => + array ( + 'match' => 'E097 0943', + 'replace' => 'E167', + ), + 724 => + array ( + 'match' => 'E097 0944', + 'replace' => 'E168', + ), + 725 => + array ( + 'match' => 'E098 0941', + 'replace' => 'E169', + ), + 726 => + array ( + 'match' => 'E098 0942', + 'replace' => 'E16A', + ), + 727 => + array ( + 'match' => 'E098 0943', + 'replace' => 'E16B', + ), + 728 => + array ( + 'match' => 'E098 0944', + 'replace' => 'E16C', + ), + 729 => + array ( + 'match' => '0926 0943', + 'replace' => 'E16D', + ), + 730 => + array ( + 'match' => '092A 0962', + 'replace' => 'E16E', + ), + 731 => + array ( + 'match' => '092A 0963', + 'replace' => 'E16F', + ), + 732 => + array ( + 'match' => '0939 0943', + 'replace' => 'E172', + ), + 733 => + array ( + 'match' => '0939 0944', + 'replace' => 'E173', + ), + 734 => + array ( + 'match' => 'E0B3 0941', + 'replace' => 'E174', + ), + 735 => + array ( + 'match' => 'E0B3 0942', + 'replace' => 'E175', + ), + 736 => + array ( + 'match' => 'E0B3 0943', + 'replace' => 'E176', + ), + 737 => + array ( + 'match' => 'E0B3 0944', + 'replace' => 'E177', + ), + 738 => + array ( + 'match' => 'E0B5 0941', + 'replace' => 'E178', + ), + 739 => + array ( + 'match' => 'E0B5 0942', + 'replace' => 'E179', + ), + 740 => + array ( + 'match' => 'E0B5 0943', + 'replace' => 'E17A', + ), + 741 => + array ( + 'match' => 'E0B5 0944', + 'replace' => 'E17B', + ), + 742 => + array ( + 'match' => 'E0B9 0941', + 'replace' => 'E17C', + ), + 743 => + array ( + 'match' => 'E0B9 0942', + 'replace' => 'E17D', + ), + 744 => + array ( + 'match' => 'E0B9 0943', + 'replace' => 'E17E', + ), + 745 => + array ( + 'match' => 'E0B9 0944', + 'replace' => 'E17F', + ), + 746 => + array ( + 'match' => 'E0BA 0941', + 'replace' => 'E180', + ), + 747 => + array ( + 'match' => 'E0BA 0942', + 'replace' => 'E181', + ), + 748 => + array ( + 'match' => 'E0BA 0943', + 'replace' => 'E182', + ), + 749 => + array ( + 'match' => 'E0BA 0944', + 'replace' => 'E183', + ), + 750 => + array ( + 'match' => 'E0BB 0941', + 'replace' => 'E184', + ), + 751 => + array ( + 'match' => 'E0BB 0942', + 'replace' => 'E185', + ), + 752 => + array ( + 'match' => 'E0BB 0943', + 'replace' => 'E186', + ), + 753 => + array ( + 'match' => 'E0BB 0944', + 'replace' => 'E187', + ), + 754 => + array ( + 'match' => 'E0BC 0941', + 'replace' => 'E188', + ), + 755 => + array ( + 'match' => 'E0BC 0942', + 'replace' => 'E189', + ), + 756 => + array ( + 'match' => 'E0BC 0943', + 'replace' => 'E18A', + ), + 757 => + array ( + 'match' => 'E0BC 0944', + 'replace' => 'E18B', + ), + 758 => + array ( + 'match' => 'E131 0941', + 'replace' => 'E18C', + ), + 759 => + array ( + 'match' => 'E131 0942', + 'replace' => 'E18D', + ), + 760 => + array ( + 'match' => 'E131 0943', + 'replace' => 'E18E', + ), + 761 => + array ( + 'match' => 'E131 0944', + 'replace' => 'E18F', + ), + 762 => + array ( + 'match' => 'E132 0941', + 'replace' => 'E190', + ), + 763 => + array ( + 'match' => 'E132 0942', + 'replace' => 'E191', + ), + 764 => + array ( + 'match' => 'E132 0943', + 'replace' => 'E192', + ), + 765 => + array ( + 'match' => 'E132 0944', + 'replace' => 'E193', + ), + 766 => + array ( + 'match' => '((0930|0931|E0A5|E0C9)) 0941', + 'replace' => '\\1 E170', + ), + 767 => + array ( + 'match' => '((0930|0931|E0A5|E0C9)) 0942', + 'replace' => '\\1 E171', + ), + 768 => + array ( + 'match' => '0947 E015', + 'replace' => 'E199', + ), + 769 => + array ( + 'match' => '0948 E015', + 'replace' => 'E19A', + ), + 770 => + array ( + 'match' => '0940 E015', + 'replace' => 'E19B', + ), + 771 => + array ( + 'match' => 'E194 E015', + 'replace' => 'E19C', + ), + 772 => + array ( + 'match' => 'E195 E015', + 'replace' => 'E19D', + ), + 773 => + array ( + 'match' => 'E196 E015', + 'replace' => 'E19E', + ), + 774 => + array ( + 'match' => 'E197 E015', + 'replace' => 'E19F', + ), + 775 => + array ( + 'match' => 'E198 E015', + 'replace' => 'E1A0', + ), + 776 => + array ( + 'match' => '094B E015', + 'replace' => 'E1A1', + ), + 777 => + array ( + 'match' => '094C E015', + 'replace' => 'E1A2', + ), + 778 => + array ( + 'match' => '0946 E015', + 'replace' => 'E1A3', + ), + 779 => + array ( + 'match' => '094A E015', + 'replace' => 'E1A4', + ), + 780 => + array ( + 'match' => '0908 0901', + 'replace' => 'E1A5', + ), + 781 => + array ( + 'match' => '0908 0902', + 'replace' => 'E1A6', + ), + 782 => + array ( + 'match' => 'E12F 0901', + 'replace' => 'E1C9', + ), + 783 => + array ( + 'match' => 'E130 0901', + 'replace' => 'E1CA', + ), + 784 => + array ( + 'match' => '0945 0901', + 'replace' => 'E200', + ), + 785 => + array ( + 'match' => '0946 0901', + 'replace' => 'E202', + ), + 786 => + array ( + 'match' => '0947 0901', + 'replace' => 'E1A7', + ), + 787 => + array ( + 'match' => '0948 0901', + 'replace' => 'E1A9', + ), + 788 => + array ( + 'match' => '094B 0901', + 'replace' => 'E1AB', + ), + 789 => + array ( + 'match' => '094C 0901', + 'replace' => 'E1AD', + ), + 790 => + array ( + 'match' => '0945 0902', + 'replace' => 'E1FF', + ), + 791 => + array ( + 'match' => '0946 0902', + 'replace' => 'E201', + ), + 792 => + array ( + 'match' => '0947 0902', + 'replace' => 'E1A8', + ), + 793 => + array ( + 'match' => '0948 0902', + 'replace' => 'E1AA', + ), + 794 => + array ( + 'match' => '094B 0902', + 'replace' => 'E1AC', + ), + 795 => + array ( + 'match' => '094C 0902', + 'replace' => 'E1AE', + ), + 796 => + array ( + 'match' => 'E015 0902 0901', + 'replace' => 'E1B0 E1AF', + ), + 797 => + array ( + 'match' => 'E199 0902 0901', + 'replace' => 'E1B2 E1B1', + ), + 798 => + array ( + 'match' => 'E19A 0902 0901', + 'replace' => 'E1B4 E1B3', + ), + 799 => + array ( + 'match' => 'E1A1 0902 0901', + 'replace' => 'E1C2 E1C1', + ), + 800 => + array ( + 'match' => 'E1A3 0902 0901', + 'replace' => 'E1C6 E1C5', + ), + 801 => + array ( + 'match' => 'E1A4 0902 0901', + 'replace' => 'E1C8 E1C7', + ), + 802 => + array ( + 'match' => 'E1A2 0902 0901', + 'replace' => 'E1C4 E1C3', + ), + 803 => + array ( + 'match' => 'E19B 0901', + 'replace' => 'E1B5', + ), + 804 => + array ( + 'match' => 'E19C 0901', + 'replace' => 'E1B6', + ), + 805 => + array ( + 'match' => 'E19D 0901', + 'replace' => 'E1B7', + ), + 806 => + array ( + 'match' => 'E19E 0901', + 'replace' => 'E1B8', + ), + 807 => + array ( + 'match' => 'E19F 0901', + 'replace' => 'E1B9', + ), + 808 => + array ( + 'match' => 'E1A0 0901', + 'replace' => 'E1BA', + ), + 809 => + array ( + 'match' => 'E19B 0902', + 'replace' => 'E1BB', + ), + 810 => + array ( + 'match' => 'E19C 0902', + 'replace' => 'E1BC', + ), + 811 => + array ( + 'match' => 'E19D 0902', + 'replace' => 'E1BD', + ), + 812 => + array ( + 'match' => 'E19E 0902', + 'replace' => 'E1BE', + ), + 813 => + array ( + 'match' => 'E19F 0902', + 'replace' => 'E1BF', + ), + 814 => + array ( + 'match' => 'E1A0 0902', + 'replace' => 'E1C0', + ), + 815 => + array ( + 'match' => '((0908|E01B|090D|090E|E01F|0910|E021|0914|E025|E016|E017|0940|E194|E195|E196|E197|E198|E19B|E19C|E19D|E19E|E19F|E1A0|0949|094A|E1A4|094B|E1A1|094C|E1A2|E015|0947|E1A8|E1A7|E199|E1B2|E1B1|0946|E202|E201|E1A3|E1C6|E1C5|0945|E200|E1FF|0948|E1AA|E1A9|E19A|E1B4|E1B3|0902|E00F|0901|0953|0954|0951)) 0901', + 'replace' => '\\1 E00F', + ), + 816 => + array ( + 'match' => '093F ((0930|0931))', + 'replace' => 'E14B \\1', + ), + 817 => + array ( + 'match' => '093F ((0915|0958|E08B|E0AF|0919|E02B|E08F|E0B3|091F|E030|E095|E0B9|0920|E031|E096|E0BA|0921|095C|E097|E0BB|0922|095D|E098|E0BC|0926|E035|E09C|E0C0|092B|095E|E0A0|E0C4|0939|E040|E0AC|E0D0|E120|E122|E124|E125|E129|E134|E139))', + 'replace' => 'E14C \\1', + ), + 818 => + array ( + 'match' => '093F ((0924|E033|E09A|E0BE|092A|E037|E09F|E0C3|092C|E038|E0A1|E0C5|0935|E03C|E0A8|E0CC|0937|E03E|E0AA|E0CE|E11B|E11E|E121|E123|E126|E12F|E130|E131|E132|E137|E138))', + 'replace' => 'E14D \\1', + ), + 819 => + array ( + 'match' => '093F ((0917|095A|E08D|E0B1|0918|E02A|E08E|E0B2|091A|E02C|E090|E0B4|091B|E02D|E091|E0B5|091E|E02F|E094|E0B8|0925|E034|0927|E036|E09D|E0C1|0928|0929|E09E|E0C2|092D|E039|E0A2|E0C6|092E|E03A|E0A3|E0C7|092F|095F|E0A4|E0C8|0932|E03B|E0A6|E0CA|0933|0934|E0A7|E0CB|0936|E03D|E0A9|E0CD|0938|E03F|E0AB|E0CF|E127|E128|E12A|E135|E136))', + 'replace' => 'E14E \\1', + ), + 820 => + array ( + 'match' => '((0940|094A|094B|094C|0946|0947|0948)) E015', + 'replace' => '\\1 E014', + ), + 821 => + array ( + 'match' => '((0919|E02B|E08F|E0B3|091F|E030|E095|E0B9|0922|095D|E098|E0BC|0926|E035|E09C|E0C0|0930|0931|0932|E03B|E0A6|E0CA|0939|E040|E0AC|E0D0)) 0940', + 'replace' => '\\1 E194', + ), + 822 => + array ( + 'match' => '((0919|E02B|E08F|E0B3|091F|E030|E095|E0B9|0922|095D|E098|E0BC|0926|E035|E09C|E0C0|0930|0931|0932|E03B|E0A6|E0CA|0939|E040|E0AC|E0D0)) E19B', + 'replace' => '\\1 E19C', + ), + 823 => + array ( + 'match' => '((0919|E02B|E08F|E0B3|091F|E030|E095|E0B9|0922|095D|E098|E0BC|0926|E035|E09C|E0C0|0930|0931|0932|E03B|E0A6|E0CA|0939|E040|E0AC|E0D0)) E1B5', + 'replace' => '\\1 E1B6', + ), + 824 => + array ( + 'match' => '((0919|E02B|E08F|E0B3|091F|E030|E095|E0B9|0922|095D|E098|E0BC|0926|E035|E09C|E0C0|0930|0931|0932|E03B|E0A6|E0CA|0939|E040|E0AC|E0D0)) E1BB', + 'replace' => '\\1 E1BC', + ), + 825 => + array ( + 'match' => '((091B|E02D|E091|E0B5|0920|E031|E096|E0BA)) 0940', + 'replace' => '\\1 E195', + ), + 826 => + array ( + 'match' => '((091B|E02D|E091|E0B5|0920|E031|E096|E0BA)) E19B', + 'replace' => '\\1 E19D', + ), + 827 => + array ( + 'match' => '((091B|E02D|E091|E0B5|0920|E031|E096|E0BA)) E1B5', + 'replace' => '\\1 E1B7', + ), + 828 => + array ( + 'match' => '((091B|E02D|E091|E0B5|0920|E031|E096|E0BA)) E1BB', + 'replace' => '\\1 E1BD', + ), + 829 => + array ( + 'match' => '((0915|0958|E08B|E0AF|092B|095E|E0A0|E0C4)) 0940', + 'replace' => '\\1 E198', + ), + 830 => + array ( + 'match' => '((0915|0958|E08B|E0AF|092B|095E|E0A0|E0C4)) E19B', + 'replace' => '\\1 E1A0', + ), + 831 => + array ( + 'match' => '((0915|0958|E08B|E0AF|092B|095E|E0A0|E0C4)) E1B5', + 'replace' => '\\1 E1BA', + ), + 832 => + array ( + 'match' => '((0915|0958|E08B|E0AF|092B|095E|E0A0|E0C4)) E1BB', + 'replace' => '\\1 E1C0', + ), +); +?> \ No newline at end of file diff --git a/include/mpdf/includes/ind_kn_1_001.volt.php b/include/mpdf/includes/ind_kn_1_001.volt.php new file mode 100755 index 0000000000000000000000000000000000000000..2e2589b201522415f23d2f1bc8b976f7128ea44a --- /dev/null +++ b/include/mpdf/includes/ind_kn_1_001.volt.php @@ -0,0 +1,2994 @@ +<?php + $volt = array ( + 0 => + array ( + 'match' => '0CCD 200C', + 'replace' => 'E0AD', + ), + 1 => + array ( + 'match' => '200D 0CCD', + 'replace' => 'E0AC', + ), + 2 => + array ( + 'match' => '0CC6 0CC2', + 'replace' => '0CCA', + ), + 3 => + array ( + 'match' => '0C95 0CCD 0CB7', + 'replace' => 'E07D', + ), + 4 => + array ( + 'match' => '0C9C 0CCD 0C9E', + 'replace' => 'E07E', + ), + 5 => + array ( + 'match' => '0CB0 0CCD', + 'replace' => 'E00B', + ), + 6 => + array ( + 'match' => '((0C95|0C96|0C97|0C98|0C99|0C9A|0C9B|0C9C|0C9D|0C9E|0C9F|0CA0|0CA1|0CA2|0CA3|0CA4|0CA5|0CA6|0CA7|0CA8|0CAA|0CAB|0CAC|0CAD|0CAE|0CAF|0CB0|0CB1|0CB2|0CB3|0CB5|0CB6|0CB7|0CB8|0CB9|E07D|E07E|E0A3)) 0CCD', + 'replace' => '\\1 E0AC', + ), + 7 => + array ( + 'match' => '((0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) 0CCD', + 'replace' => '\\1 E0AC', + ), + 8 => + array ( + 'match' => '(0CBC) 0CCD', + 'replace' => '\\1 E0AC', + ), + 9 => + array ( + 'match' => '(0020) 0CCD', + 'replace' => '\\1 E0AC', + ), + 10 => + array ( + 'match' => '(25CC) 0CCD', + 'replace' => '\\1 E0AC', + ), + 11 => + array ( + 'match' => '0C95 0CBC', + 'replace' => 'E0E6', + ), + 12 => + array ( + 'match' => '0C96 0CBC', + 'replace' => 'E0E7', + ), + 13 => + array ( + 'match' => '0C97 0CBC', + 'replace' => 'E172', + ), + 14 => + array ( + 'match' => '0C98 0CBC', + 'replace' => 'E173', + ), + 15 => + array ( + 'match' => '0C99 0CBC', + 'replace' => 'E174', + ), + 16 => + array ( + 'match' => '0C9A 0CBC', + 'replace' => 'E175', + ), + 17 => + array ( + 'match' => '0C9B 0CBC', + 'replace' => 'E176', + ), + 18 => + array ( + 'match' => '0C9C 0CBC', + 'replace' => 'E0E8', + ), + 19 => + array ( + 'match' => '0C9D 0CBC', + 'replace' => 'E0E9', + ), + 20 => + array ( + 'match' => '0C9E 0CBC', + 'replace' => 'E177', + ), + 21 => + array ( + 'match' => '0C9F 0CBC', + 'replace' => 'E178', + ), + 22 => + array ( + 'match' => '0CA0 0CBC', + 'replace' => 'E179', + ), + 23 => + array ( + 'match' => '0CA1 0CBC', + 'replace' => 'E17A', + ), + 24 => + array ( + 'match' => '0CA2 0CBC', + 'replace' => 'E17B', + ), + 25 => + array ( + 'match' => '0CA3 0CBC', + 'replace' => 'E17C', + ), + 26 => + array ( + 'match' => '0CA4 0CBC', + 'replace' => 'E17D', + ), + 27 => + array ( + 'match' => '0CA5 0CBC', + 'replace' => 'E17E', + ), + 28 => + array ( + 'match' => '0CA6 0CBC', + 'replace' => 'E17F', + ), + 29 => + array ( + 'match' => '0CA7 0CBC', + 'replace' => 'E180', + ), + 30 => + array ( + 'match' => '0CA8 0CBC', + 'replace' => 'E181', + ), + 31 => + array ( + 'match' => '0CAA 0CBC', + 'replace' => 'E182', + ), + 32 => + array ( + 'match' => '0CAB 0CBC', + 'replace' => 'E0EA', + ), + 33 => + array ( + 'match' => '0CAC 0CBC', + 'replace' => 'E183', + ), + 34 => + array ( + 'match' => '0CAD 0CBC', + 'replace' => 'E184', + ), + 35 => + array ( + 'match' => '0CAE 0CBC', + 'replace' => 'E185', + ), + 36 => + array ( + 'match' => '0CAF 0CBC', + 'replace' => 'E186', + ), + 37 => + array ( + 'match' => '0CB0 0CBC', + 'replace' => 'E0EB', + ), + 38 => + array ( + 'match' => '0CB1 0CBC', + 'replace' => 'E187', + ), + 39 => + array ( + 'match' => '0CB2 0CBC', + 'replace' => 'E188', + ), + 40 => + array ( + 'match' => '0CB3 0CBC', + 'replace' => 'E189', + ), + 41 => + array ( + 'match' => '0CB5 0CBC', + 'replace' => 'E18A', + ), + 42 => + array ( + 'match' => '0CB6 0CBC', + 'replace' => 'E18B', + ), + 43 => + array ( + 'match' => '0CB7 0CBC', + 'replace' => 'E18C', + ), + 44 => + array ( + 'match' => '0CB8 0CBC', + 'replace' => 'E18D', + ), + 45 => + array ( + 'match' => '0CB9 0CBC', + 'replace' => 'E18E', + ), + 46 => + array ( + 'match' => 'E07D 0CBC', + 'replace' => 'E117', + ), + 47 => + array ( + 'match' => 'E07E 0CBC', + 'replace' => 'E118', + ), + 48 => + array ( + 'match' => 'E0A3 0CBC', + 'replace' => 'E136', + ), + 49 => + array ( + 'match' => 'E0AC 0C95', + 'replace' => 'E02E', + ), + 50 => + array ( + 'match' => 'E0AC 0C96', + 'replace' => 'E02F', + ), + 51 => + array ( + 'match' => 'E0AC 0C97', + 'replace' => 'E030', + ), + 52 => + array ( + 'match' => 'E0AC 0C98', + 'replace' => 'E031', + ), + 53 => + array ( + 'match' => 'E0AC 0C99', + 'replace' => 'E032', + ), + 54 => + array ( + 'match' => 'E0AC 0C9A', + 'replace' => 'E033', + ), + 55 => + array ( + 'match' => 'E0AC 0C9B', + 'replace' => 'E034', + ), + 56 => + array ( + 'match' => 'E0AC 0C9C', + 'replace' => 'E035', + ), + 57 => + array ( + 'match' => 'E0AC 0C9D', + 'replace' => 'E036', + ), + 58 => + array ( + 'match' => 'E0AC 0C9E', + 'replace' => 'E037', + ), + 59 => + array ( + 'match' => 'E0AC 0C9F', + 'replace' => 'E038', + ), + 60 => + array ( + 'match' => 'E0AC 0CA0', + 'replace' => 'E039', + ), + 61 => + array ( + 'match' => 'E0AC 0CA1', + 'replace' => 'E03A', + ), + 62 => + array ( + 'match' => 'E0AC 0CA2', + 'replace' => 'E03B', + ), + 63 => + array ( + 'match' => 'E0AC 0CA3', + 'replace' => 'E03C', + ), + 64 => + array ( + 'match' => 'E0AC 0CA4', + 'replace' => 'E03D', + ), + 65 => + array ( + 'match' => 'E0AC 0CA5', + 'replace' => 'E03E', + ), + 66 => + array ( + 'match' => 'E0AC 0CA6', + 'replace' => 'E03F', + ), + 67 => + array ( + 'match' => 'E0AC 0CA7', + 'replace' => 'E040', + ), + 68 => + array ( + 'match' => 'E0AC 0CA8', + 'replace' => 'E041', + ), + 69 => + array ( + 'match' => 'E0AC 0CAA', + 'replace' => 'E042', + ), + 70 => + array ( + 'match' => 'E0AC 0CAB', + 'replace' => 'E043', + ), + 71 => + array ( + 'match' => 'E0AC 0CAC', + 'replace' => 'E044', + ), + 72 => + array ( + 'match' => 'E0AC 0CAD', + 'replace' => 'E045', + ), + 73 => + array ( + 'match' => 'E0AC 0CAE', + 'replace' => 'E046', + ), + 74 => + array ( + 'match' => 'E0AC 0CAF', + 'replace' => 'E047', + ), + 75 => + array ( + 'match' => 'E0AC 0CB0', + 'replace' => 'E048', + ), + 76 => + array ( + 'match' => 'E0AC 0CB1', + 'replace' => 'E049', + ), + 77 => + array ( + 'match' => 'E0AC 0CB2', + 'replace' => 'E04A', + ), + 78 => + array ( + 'match' => 'E0AC 0CB3', + 'replace' => 'E04B', + ), + 79 => + array ( + 'match' => 'E0AC 0CB5', + 'replace' => 'E04C', + ), + 80 => + array ( + 'match' => 'E0AC 0CB6', + 'replace' => 'E04D', + ), + 81 => + array ( + 'match' => 'E0AC 0CB7', + 'replace' => 'E04E', + ), + 82 => + array ( + 'match' => 'E0AC 0CB8', + 'replace' => 'E04F', + ), + 83 => + array ( + 'match' => 'E0AC 0CB9', + 'replace' => 'E050', + ), + 84 => + array ( + 'match' => 'E0AC E07D', + 'replace' => 'E081', + ), + 85 => + array ( + 'match' => 'E07D E03C', + 'replace' => 'E0A3', + ), + 86 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E02E', + 'replace' => '\\1 E052', + ), + 87 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E02F', + 'replace' => '\\1 E053', + ), + 88 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E030', + 'replace' => '\\1 E054', + ), + 89 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E031', + 'replace' => '\\1 E055', + ), + 90 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E032', + 'replace' => '\\1 E056', + ), + 91 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E033', + 'replace' => '\\1 E057', + ), + 92 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E034', + 'replace' => '\\1 E058', + ), + 93 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E035', + 'replace' => '\\1 E059', + ), + 94 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E036', + 'replace' => '\\1 E05A', + ), + 95 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E037', + 'replace' => '\\1 E05B', + ), + 96 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E038', + 'replace' => '\\1 E05C', + ), + 97 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E039', + 'replace' => '\\1 E05D', + ), + 98 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E03A', + 'replace' => '\\1 E05E', + ), + 99 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E03B', + 'replace' => '\\1 E05F', + ), + 100 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E03C', + 'replace' => '\\1 E060', + ), + 101 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E03D', + 'replace' => '\\1 E061', + ), + 102 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E03E', + 'replace' => '\\1 E062', + ), + 103 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E03F', + 'replace' => '\\1 E063', + ), + 104 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E040', + 'replace' => '\\1 E064', + ), + 105 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E041', + 'replace' => '\\1 E065', + ), + 106 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E042', + 'replace' => '\\1 E066', + ), + 107 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E043', + 'replace' => '\\1 E067', + ), + 108 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E044', + 'replace' => '\\1 E068', + ), + 109 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E045', + 'replace' => '\\1 E069', + ), + 110 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E046', + 'replace' => '\\1 E06A', + ), + 111 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E047', + 'replace' => '\\1 E06B', + ), + 112 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E048', + 'replace' => '\\1 E06C', + ), + 113 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E049', + 'replace' => '\\1 E06D', + ), + 114 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E04A', + 'replace' => '\\1 E06E', + ), + 115 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E04B', + 'replace' => '\\1 E06F', + ), + 116 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E04C', + 'replace' => '\\1 E070', + ), + 117 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E04D', + 'replace' => '\\1 E071', + ), + 118 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E04E', + 'replace' => '\\1 E072', + ), + 119 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E04F', + 'replace' => '\\1 E073', + ), + 120 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E050', + 'replace' => '\\1 E074', + ), + 121 => + array ( + 'match' => '((E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081)) E081', + 'replace' => '\\1 E081', + ), + 122 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E02E', + 'replace' => '\\1 E052', + ), + 123 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E02F', + 'replace' => '\\1 E053', + ), + 124 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E030', + 'replace' => '\\1 E054', + ), + 125 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E031', + 'replace' => '\\1 E055', + ), + 126 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E032', + 'replace' => '\\1 E056', + ), + 127 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E033', + 'replace' => '\\1 E057', + ), + 128 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E034', + 'replace' => '\\1 E058', + ), + 129 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E035', + 'replace' => '\\1 E059', + ), + 130 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E036', + 'replace' => '\\1 E05A', + ), + 131 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E037', + 'replace' => '\\1 E05B', + ), + 132 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E038', + 'replace' => '\\1 E05C', + ), + 133 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E039', + 'replace' => '\\1 E05D', + ), + 134 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E03A', + 'replace' => '\\1 E05E', + ), + 135 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E03B', + 'replace' => '\\1 E05F', + ), + 136 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E03C', + 'replace' => '\\1 E060', + ), + 137 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E03D', + 'replace' => '\\1 E061', + ), + 138 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E03E', + 'replace' => '\\1 E062', + ), + 139 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E03F', + 'replace' => '\\1 E063', + ), + 140 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E040', + 'replace' => '\\1 E064', + ), + 141 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E041', + 'replace' => '\\1 E065', + ), + 142 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E042', + 'replace' => '\\1 E066', + ), + 143 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E043', + 'replace' => '\\1 E067', + ), + 144 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E044', + 'replace' => '\\1 E068', + ), + 145 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E045', + 'replace' => '\\1 E069', + ), + 146 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E046', + 'replace' => '\\1 E06A', + ), + 147 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E047', + 'replace' => '\\1 E06B', + ), + 148 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E048', + 'replace' => '\\1 E06C', + ), + 149 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E049', + 'replace' => '\\1 E06D', + ), + 150 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E04A', + 'replace' => '\\1 E06E', + ), + 151 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E04B', + 'replace' => '\\1 E06F', + ), + 152 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E04C', + 'replace' => '\\1 E070', + ), + 153 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E04D', + 'replace' => '\\1 E071', + ), + 154 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E04E', + 'replace' => '\\1 E072', + ), + 155 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E04F', + 'replace' => '\\1 E073', + ), + 156 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E050', + 'replace' => '\\1 E074', + ), + 157 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E081', + 'replace' => '\\1 E081', + ), + 158 => + array ( + 'match' => '(E07D) E02E', + 'replace' => '\\1 E052', + ), + 159 => + array ( + 'match' => '(E07D) E02F', + 'replace' => '\\1 E053', + ), + 160 => + array ( + 'match' => '(E07D) E030', + 'replace' => '\\1 E054', + ), + 161 => + array ( + 'match' => '(E07D) E031', + 'replace' => '\\1 E055', + ), + 162 => + array ( + 'match' => '(E07D) E032', + 'replace' => '\\1 E056', + ), + 163 => + array ( + 'match' => '(E07D) E033', + 'replace' => '\\1 E057', + ), + 164 => + array ( + 'match' => '(E07D) E034', + 'replace' => '\\1 E058', + ), + 165 => + array ( + 'match' => '(E07D) E035', + 'replace' => '\\1 E059', + ), + 166 => + array ( + 'match' => '(E07D) E036', + 'replace' => '\\1 E05A', + ), + 167 => + array ( + 'match' => '(E07D) E037', + 'replace' => '\\1 E05B', + ), + 168 => + array ( + 'match' => '(E07D) E038', + 'replace' => '\\1 E05C', + ), + 169 => + array ( + 'match' => '(E07D) E039', + 'replace' => '\\1 E05D', + ), + 170 => + array ( + 'match' => '(E07D) E03A', + 'replace' => '\\1 E05E', + ), + 171 => + array ( + 'match' => '(E07D) E03B', + 'replace' => '\\1 E05F', + ), + 172 => + array ( + 'match' => '(E07D) E03C', + 'replace' => '\\1 E060', + ), + 173 => + array ( + 'match' => '(E07D) E03D', + 'replace' => '\\1 E061', + ), + 174 => + array ( + 'match' => '(E07D) E03E', + 'replace' => '\\1 E062', + ), + 175 => + array ( + 'match' => '(E07D) E03F', + 'replace' => '\\1 E063', + ), + 176 => + array ( + 'match' => '(E07D) E040', + 'replace' => '\\1 E064', + ), + 177 => + array ( + 'match' => '(E07D) E041', + 'replace' => '\\1 E065', + ), + 178 => + array ( + 'match' => '(E07D) E042', + 'replace' => '\\1 E066', + ), + 179 => + array ( + 'match' => '(E07D) E043', + 'replace' => '\\1 E067', + ), + 180 => + array ( + 'match' => '(E07D) E044', + 'replace' => '\\1 E068', + ), + 181 => + array ( + 'match' => '(E07D) E045', + 'replace' => '\\1 E069', + ), + 182 => + array ( + 'match' => '(E07D) E046', + 'replace' => '\\1 E06A', + ), + 183 => + array ( + 'match' => '(E07D) E047', + 'replace' => '\\1 E06B', + ), + 184 => + array ( + 'match' => '(E07D) E048', + 'replace' => '\\1 E06C', + ), + 185 => + array ( + 'match' => '(E07D) E049', + 'replace' => '\\1 E06D', + ), + 186 => + array ( + 'match' => '(E07D) E04A', + 'replace' => '\\1 E06E', + ), + 187 => + array ( + 'match' => '(E07D) E04B', + 'replace' => '\\1 E06F', + ), + 188 => + array ( + 'match' => '(E07D) E04C', + 'replace' => '\\1 E070', + ), + 189 => + array ( + 'match' => '(E07D) E04D', + 'replace' => '\\1 E071', + ), + 190 => + array ( + 'match' => '(E07D) E04E', + 'replace' => '\\1 E072', + ), + 191 => + array ( + 'match' => '(E07D) E04F', + 'replace' => '\\1 E073', + ), + 192 => + array ( + 'match' => '(E07D) E050', + 'replace' => '\\1 E074', + ), + 193 => + array ( + 'match' => '(E07D) E081', + 'replace' => '\\1 E081', + ), + 194 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E02E', + 'replace' => '\\1 E052', + ), + 195 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E02F', + 'replace' => '\\1 E053', + ), + 196 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E030', + 'replace' => '\\1 E054', + ), + 197 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E031', + 'replace' => '\\1 E055', + ), + 198 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E032', + 'replace' => '\\1 E056', + ), + 199 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E033', + 'replace' => '\\1 E057', + ), + 200 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E034', + 'replace' => '\\1 E058', + ), + 201 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E035', + 'replace' => '\\1 E059', + ), + 202 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E036', + 'replace' => '\\1 E05A', + ), + 203 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E037', + 'replace' => '\\1 E05B', + ), + 204 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E038', + 'replace' => '\\1 E05C', + ), + 205 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E039', + 'replace' => '\\1 E05D', + ), + 206 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E03A', + 'replace' => '\\1 E05E', + ), + 207 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E03B', + 'replace' => '\\1 E05F', + ), + 208 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E03C', + 'replace' => '\\1 E060', + ), + 209 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E03D', + 'replace' => '\\1 E061', + ), + 210 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E03E', + 'replace' => '\\1 E062', + ), + 211 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E03F', + 'replace' => '\\1 E063', + ), + 212 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E040', + 'replace' => '\\1 E064', + ), + 213 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E041', + 'replace' => '\\1 E065', + ), + 214 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E042', + 'replace' => '\\1 E066', + ), + 215 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E043', + 'replace' => '\\1 E067', + ), + 216 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E044', + 'replace' => '\\1 E068', + ), + 217 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E045', + 'replace' => '\\1 E069', + ), + 218 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E046', + 'replace' => '\\1 E06A', + ), + 219 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E047', + 'replace' => '\\1 E06B', + ), + 220 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E048', + 'replace' => '\\1 E06C', + ), + 221 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E049', + 'replace' => '\\1 E06D', + ), + 222 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E04A', + 'replace' => '\\1 E06E', + ), + 223 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E04B', + 'replace' => '\\1 E06F', + ), + 224 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E04C', + 'replace' => '\\1 E070', + ), + 225 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E04D', + 'replace' => '\\1 E071', + ), + 226 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E04E', + 'replace' => '\\1 E072', + ), + 227 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E04F', + 'replace' => '\\1 E073', + ), + 228 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E050', + 'replace' => '\\1 E074', + ), + 229 => + array ( + 'match' => '(E07D (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E081', + 'replace' => '\\1 E081', + ), + 230 => + array ( + 'match' => '(E07E) E02E', + 'replace' => '\\1 E052', + ), + 231 => + array ( + 'match' => '(E07E) E02F', + 'replace' => '\\1 E053', + ), + 232 => + array ( + 'match' => '(E07E) E030', + 'replace' => '\\1 E054', + ), + 233 => + array ( + 'match' => '(E07E) E031', + 'replace' => '\\1 E055', + ), + 234 => + array ( + 'match' => '(E07E) E032', + 'replace' => '\\1 E056', + ), + 235 => + array ( + 'match' => '(E07E) E033', + 'replace' => '\\1 E057', + ), + 236 => + array ( + 'match' => '(E07E) E034', + 'replace' => '\\1 E058', + ), + 237 => + array ( + 'match' => '(E07E) E035', + 'replace' => '\\1 E059', + ), + 238 => + array ( + 'match' => '(E07E) E036', + 'replace' => '\\1 E05A', + ), + 239 => + array ( + 'match' => '(E07E) E037', + 'replace' => '\\1 E05B', + ), + 240 => + array ( + 'match' => '(E07E) E038', + 'replace' => '\\1 E05C', + ), + 241 => + array ( + 'match' => '(E07E) E039', + 'replace' => '\\1 E05D', + ), + 242 => + array ( + 'match' => '(E07E) E03A', + 'replace' => '\\1 E05E', + ), + 243 => + array ( + 'match' => '(E07E) E03B', + 'replace' => '\\1 E05F', + ), + 244 => + array ( + 'match' => '(E07E) E03C', + 'replace' => '\\1 E060', + ), + 245 => + array ( + 'match' => '(E07E) E03D', + 'replace' => '\\1 E061', + ), + 246 => + array ( + 'match' => '(E07E) E03E', + 'replace' => '\\1 E062', + ), + 247 => + array ( + 'match' => '(E07E) E03F', + 'replace' => '\\1 E063', + ), + 248 => + array ( + 'match' => '(E07E) E040', + 'replace' => '\\1 E064', + ), + 249 => + array ( + 'match' => '(E07E) E041', + 'replace' => '\\1 E065', + ), + 250 => + array ( + 'match' => '(E07E) E042', + 'replace' => '\\1 E066', + ), + 251 => + array ( + 'match' => '(E07E) E043', + 'replace' => '\\1 E067', + ), + 252 => + array ( + 'match' => '(E07E) E044', + 'replace' => '\\1 E068', + ), + 253 => + array ( + 'match' => '(E07E) E045', + 'replace' => '\\1 E069', + ), + 254 => + array ( + 'match' => '(E07E) E046', + 'replace' => '\\1 E06A', + ), + 255 => + array ( + 'match' => '(E07E) E047', + 'replace' => '\\1 E06B', + ), + 256 => + array ( + 'match' => '(E07E) E048', + 'replace' => '\\1 E06C', + ), + 257 => + array ( + 'match' => '(E07E) E049', + 'replace' => '\\1 E06D', + ), + 258 => + array ( + 'match' => '(E07E) E04A', + 'replace' => '\\1 E06E', + ), + 259 => + array ( + 'match' => '(E07E) E04B', + 'replace' => '\\1 E06F', + ), + 260 => + array ( + 'match' => '(E07E) E04C', + 'replace' => '\\1 E070', + ), + 261 => + array ( + 'match' => '(E07E) E04D', + 'replace' => '\\1 E071', + ), + 262 => + array ( + 'match' => '(E07E) E04E', + 'replace' => '\\1 E072', + ), + 263 => + array ( + 'match' => '(E07E) E04F', + 'replace' => '\\1 E073', + ), + 264 => + array ( + 'match' => '(E07E) E050', + 'replace' => '\\1 E074', + ), + 265 => + array ( + 'match' => '(E07E) E081', + 'replace' => '\\1 E081', + ), + 266 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E02E', + 'replace' => '\\1 E052', + ), + 267 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E02F', + 'replace' => '\\1 E053', + ), + 268 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E030', + 'replace' => '\\1 E054', + ), + 269 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E031', + 'replace' => '\\1 E055', + ), + 270 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E032', + 'replace' => '\\1 E056', + ), + 271 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E033', + 'replace' => '\\1 E057', + ), + 272 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E034', + 'replace' => '\\1 E058', + ), + 273 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E035', + 'replace' => '\\1 E059', + ), + 274 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E036', + 'replace' => '\\1 E05A', + ), + 275 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E037', + 'replace' => '\\1 E05B', + ), + 276 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E038', + 'replace' => '\\1 E05C', + ), + 277 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E039', + 'replace' => '\\1 E05D', + ), + 278 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E03A', + 'replace' => '\\1 E05E', + ), + 279 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E03B', + 'replace' => '\\1 E05F', + ), + 280 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E03C', + 'replace' => '\\1 E060', + ), + 281 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E03D', + 'replace' => '\\1 E061', + ), + 282 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E03E', + 'replace' => '\\1 E062', + ), + 283 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E03F', + 'replace' => '\\1 E063', + ), + 284 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E040', + 'replace' => '\\1 E064', + ), + 285 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E041', + 'replace' => '\\1 E065', + ), + 286 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E042', + 'replace' => '\\1 E066', + ), + 287 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E043', + 'replace' => '\\1 E067', + ), + 288 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E044', + 'replace' => '\\1 E068', + ), + 289 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E045', + 'replace' => '\\1 E069', + ), + 290 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E046', + 'replace' => '\\1 E06A', + ), + 291 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E047', + 'replace' => '\\1 E06B', + ), + 292 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E048', + 'replace' => '\\1 E06C', + ), + 293 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E049', + 'replace' => '\\1 E06D', + ), + 294 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E04A', + 'replace' => '\\1 E06E', + ), + 295 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E04B', + 'replace' => '\\1 E06F', + ), + 296 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E04C', + 'replace' => '\\1 E070', + ), + 297 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E04D', + 'replace' => '\\1 E071', + ), + 298 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E04E', + 'replace' => '\\1 E072', + ), + 299 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E04F', + 'replace' => '\\1 E073', + ), + 300 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E050', + 'replace' => '\\1 E074', + ), + 301 => + array ( + 'match' => '(E07E (0CBE|0CBF|0CC6|0CC1|0CC2|0CCC|0CCA)) E081', + 'replace' => '\\1 E081', + ), + 302 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E03D', + 'replace' => '\\1 E076', + ), + 303 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E041', + 'replace' => '\\1 E077', + ), + 304 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E046', + 'replace' => '\\1 E078', + ), + 305 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E047', + 'replace' => '\\1 E079', + ), + 306 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E048', + 'replace' => '\\1 E07A', + ), + 307 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E04A', + 'replace' => '\\1 E07B', + ), + 308 => + array ( + 'match' => '((E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081)) E04E', + 'replace' => '\\1 E07C', + ), + 309 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E030', + 'replace' => '\\1 E104', + ), + 310 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E032', + 'replace' => '\\1 E105', + ), + 311 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E034', + 'replace' => '\\1 E106', + ), + 312 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E035', + 'replace' => '\\1 E107', + ), + 313 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E036', + 'replace' => '\\1 E108', + ), + 314 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E037', + 'replace' => '\\1 E109', + ), + 315 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E039', + 'replace' => '\\1 E10A', + ), + 316 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E03A', + 'replace' => '\\1 E10B', + ), + 317 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E03B', + 'replace' => '\\1 E10C', + ), + 318 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E03C', + 'replace' => '\\1 E10D', + ), + 319 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E03E', + 'replace' => '\\1 E10E', + ), + 320 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E03F', + 'replace' => '\\1 E10F', + ), + 321 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E040', + 'replace' => '\\1 E110', + ), + 322 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E049', + 'replace' => '\\1 E111', + ), + 323 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E04A', + 'replace' => '\\1 E112', + ), + 324 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E04C', + 'replace' => '\\1 E113', + ), + 325 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E04E', + 'replace' => '\\1 E114', + ), + 326 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E050', + 'replace' => '\\1 E115', + ), + 327 => + array ( + 'match' => '((E0E6|E0E7|E172|E173|E174|E175|E176|E0E8|E0E9|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E0EA|E183|E184|E185|E186|E0EB|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E0F2|E0F3|E11B|E11C|E11D|E11E|E0F4|E0F5|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E0F9|E129|E12A|E12B|E12C|E0FD|E12D|E12E|E12F|E130|E131|E132|E133)) E051', + 'replace' => '\\1 E116', + ), + 328 => + array ( + 'match' => '((0CAA|0CAB|0CB5|E182|E0EA|E18A)) 0CC1', + 'replace' => '\\1 E007', + ), + 329 => + array ( + 'match' => '((0CAA|0CAB|0CB5|E182|E0EA|E18A)) 0CC2', + 'replace' => '\\1 E009', + ), + 330 => + array ( + 'match' => '((0CB3|E189)) 0CC1', + 'replace' => '\\1 E008', + ), + 331 => + array ( + 'match' => '((0CB3|E189)) 0CC2', + 'replace' => '\\1 E00A', + ), + 332 => + array ( + 'match' => '0C98 0CC1', + 'replace' => 'E0A5', + ), + 333 => + array ( + 'match' => '0C98 0CC6', + 'replace' => 'E0A6', + ), + 334 => + array ( + 'match' => '0C98 0CCA', + 'replace' => 'E0A7', + ), + 335 => + array ( + 'match' => '0C98 0CCB', + 'replace' => 'E0A8', + ), + 336 => + array ( + 'match' => '0C99 0CC6', + 'replace' => 'E0A9', + ), + 337 => + array ( + 'match' => '0C99 0CCA', + 'replace' => 'E0AA', + ), + 338 => + array ( + 'match' => '0C99 0CCB', + 'replace' => 'E0AB', + ), + 339 => + array ( + 'match' => '0C9E 0CC1', + 'replace' => 'E0D8', + ), + 340 => + array ( + 'match' => '0C9E 0CC2', + 'replace' => 'E0D9', + ), + 341 => + array ( + 'match' => '0C9E 0CC6', + 'replace' => 'E0DA', + ), + 342 => + array ( + 'match' => '0C9E 0CCA', + 'replace' => 'E0DB', + ), + 343 => + array ( + 'match' => '0CB1 0CC6', + 'replace' => 'E0AC', + ), + 344 => + array ( + 'match' => '0CB1 0CCA', + 'replace' => 'E0AD', + ), + 345 => + array ( + 'match' => '0CB1 0CCB', + 'replace' => 'E0AE', + ), + 346 => + array ( + 'match' => '0CAA 0CCA', + 'replace' => 'E0AF', + ), + 347 => + array ( + 'match' => '0CAB 0CCA', + 'replace' => 'E0B0', + ), + 348 => + array ( + 'match' => '0CB5 0CCA', + 'replace' => 'E0B1', + ), + 349 => + array ( + 'match' => '0C9D 0CC6', + 'replace' => 'E0DD', + ), + 350 => + array ( + 'match' => '0C9D 0CCA', + 'replace' => 'E0DE', + ), + 351 => + array ( + 'match' => '0C9D 0CCB', + 'replace' => 'E0DF', + ), + 352 => + array ( + 'match' => '0CAE 0CC6', + 'replace' => 'E0E0', + ), + 353 => + array ( + 'match' => '0CAE 0CCA', + 'replace' => 'E0E1', + ), + 354 => + array ( + 'match' => '0CAE 0CCB', + 'replace' => 'E0E2', + ), + 355 => + array ( + 'match' => '0CAF 0CC6', + 'replace' => 'E0E3', + ), + 356 => + array ( + 'match' => '0CAF 0CCA', + 'replace' => 'E0E4', + ), + 357 => + array ( + 'match' => '0CAF 0CCB', + 'replace' => 'E0E5', + ), + 358 => + array ( + 'match' => '0CB3 0CCA', + 'replace' => 'E0DC', + ), + 359 => + array ( + 'match' => 'E173 0CC1', + 'replace' => 'E138', + ), + 360 => + array ( + 'match' => 'E173 0CC6', + 'replace' => 'E139', + ), + 361 => + array ( + 'match' => 'E173 0CCA', + 'replace' => 'E13A', + ), + 362 => + array ( + 'match' => 'E174 0CC6', + 'replace' => 'E13C', + ), + 363 => + array ( + 'match' => 'E174 0CCA', + 'replace' => 'E13D', + ), + 364 => + array ( + 'match' => 'E187 0CC6', + 'replace' => 'E13F', + ), + 365 => + array ( + 'match' => 'E187 0CCA', + 'replace' => 'E140', + ), + 366 => + array ( + 'match' => 'E182 0CCA', + 'replace' => 'E142', + ), + 367 => + array ( + 'match' => 'E0EA 0CCA', + 'replace' => 'E0FC', + ), + 368 => + array ( + 'match' => 'E18A 0CCA', + 'replace' => 'E143', + ), + 369 => + array ( + 'match' => 'E177 0CC1', + 'replace' => 'E164', + ), + 370 => + array ( + 'match' => 'E177 0CC2', + 'replace' => 'E165', + ), + 371 => + array ( + 'match' => 'E177 0CC6', + 'replace' => 'E166', + ), + 372 => + array ( + 'match' => 'E177 0CCA', + 'replace' => 'E167', + ), + 373 => + array ( + 'match' => 'E189 0CCA', + 'replace' => 'E168', + ), + 374 => + array ( + 'match' => 'E0E9 0CC6', + 'replace' => 'E0F6', + ), + 375 => + array ( + 'match' => 'E0E9 0CCA', + 'replace' => 'E0F8', + ), + 376 => + array ( + 'match' => 'E185 0CC6', + 'replace' => 'E16C', + ), + 377 => + array ( + 'match' => 'E185 0CCA', + 'replace' => 'E16D', + ), + 378 => + array ( + 'match' => 'E186 0CC6', + 'replace' => 'E16F', + ), + 379 => + array ( + 'match' => 'E186 0CCA', + 'replace' => 'E170', + ), + 380 => + array ( + 'match' => '0C95 0CBF', + 'replace' => 'E082', + ), + 381 => + array ( + 'match' => '0C96 0CBF', + 'replace' => 'E083', + ), + 382 => + array ( + 'match' => '0C97 0CBF', + 'replace' => 'E084', + ), + 383 => + array ( + 'match' => '0C98 0CBF', + 'replace' => 'E085', + ), + 384 => + array ( + 'match' => '0C9A 0CBF', + 'replace' => 'E086', + ), + 385 => + array ( + 'match' => '0C9B 0CBF', + 'replace' => 'E087', + ), + 386 => + array ( + 'match' => '0C9C 0CBF', + 'replace' => 'E088', + ), + 387 => + array ( + 'match' => '0C9D 0CBF', + 'replace' => 'E089', + ), + 388 => + array ( + 'match' => '0CA0 0CBF', + 'replace' => 'E08A', + ), + 389 => + array ( + 'match' => '0CA1 0CBF', + 'replace' => 'E08B', + ), + 390 => + array ( + 'match' => '0CA2 0CBF', + 'replace' => 'E08C', + ), + 391 => + array ( + 'match' => '0CA3 0CBF', + 'replace' => 'E08D', + ), + 392 => + array ( + 'match' => '0CA4 0CBF', + 'replace' => 'E08E', + ), + 393 => + array ( + 'match' => '0CA5 0CBF', + 'replace' => 'E08F', + ), + 394 => + array ( + 'match' => '0CA6 0CBF', + 'replace' => 'E090', + ), + 395 => + array ( + 'match' => '0CA7 0CBF', + 'replace' => 'E091', + ), + 396 => + array ( + 'match' => '0CA8 0CBF', + 'replace' => 'E092', + ), + 397 => + array ( + 'match' => '0CAA 0CBF', + 'replace' => 'E093', + ), + 398 => + array ( + 'match' => '0CAB 0CBF', + 'replace' => 'E094', + ), + 399 => + array ( + 'match' => '0CAC 0CBF', + 'replace' => 'E095', + ), + 400 => + array ( + 'match' => '0CAD 0CBF', + 'replace' => 'E096', + ), + 401 => + array ( + 'match' => '0CAE 0CBF', + 'replace' => 'E097', + ), + 402 => + array ( + 'match' => '0CAF 0CBF', + 'replace' => 'E098', + ), + 403 => + array ( + 'match' => '0CB0 0CBF', + 'replace' => 'E099', + ), + 404 => + array ( + 'match' => '0CB2 0CBF', + 'replace' => 'E09A', + ), + 405 => + array ( + 'match' => '0CB3 0CBF', + 'replace' => 'E09B', + ), + 406 => + array ( + 'match' => '0CB5 0CBF', + 'replace' => 'E09C', + ), + 407 => + array ( + 'match' => '0CB6 0CBF', + 'replace' => 'E09D', + ), + 408 => + array ( + 'match' => '0CB7 0CBF', + 'replace' => 'E09E', + ), + 409 => + array ( + 'match' => '0CB8 0CBF', + 'replace' => 'E09F', + ), + 410 => + array ( + 'match' => '0CB9 0CBF', + 'replace' => 'E0A0', + ), + 411 => + array ( + 'match' => 'E07D 0CBF', + 'replace' => 'E0A1', + ), + 412 => + array ( + 'match' => 'E07E 0CBF', + 'replace' => 'E0A2', + ), + 413 => + array ( + 'match' => 'E0E6 0CBF', + 'replace' => 'E0F2', + ), + 414 => + array ( + 'match' => 'E0E7 0CBF', + 'replace' => 'E0F3', + ), + 415 => + array ( + 'match' => 'E172 0CBF', + 'replace' => 'E11B', + ), + 416 => + array ( + 'match' => 'E173 0CBF', + 'replace' => 'E11C', + ), + 417 => + array ( + 'match' => 'E175 0CBF', + 'replace' => 'E11D', + ), + 418 => + array ( + 'match' => 'E176 0CBF', + 'replace' => 'E11E', + ), + 419 => + array ( + 'match' => 'E0E8 0CBF', + 'replace' => 'E0F4', + ), + 420 => + array ( + 'match' => 'E0E9 0CBF', + 'replace' => 'E0F5', + ), + 421 => + array ( + 'match' => 'E179 0CBF', + 'replace' => 'E11F', + ), + 422 => + array ( + 'match' => 'E17A 0CBF', + 'replace' => 'E120', + ), + 423 => + array ( + 'match' => 'E17B 0CBF', + 'replace' => 'E121', + ), + 424 => + array ( + 'match' => 'E17C 0CBF', + 'replace' => 'E122', + ), + 425 => + array ( + 'match' => 'E17D 0CBF', + 'replace' => 'E123', + ), + 426 => + array ( + 'match' => 'E17E 0CBF', + 'replace' => 'E124', + ), + 427 => + array ( + 'match' => 'E17F 0CBF', + 'replace' => 'E125', + ), + 428 => + array ( + 'match' => 'E180 0CBF', + 'replace' => 'E126', + ), + 429 => + array ( + 'match' => 'E181 0CBF', + 'replace' => 'E127', + ), + 430 => + array ( + 'match' => 'E182 0CBF', + 'replace' => 'E128', + ), + 431 => + array ( + 'match' => 'E0EA 0CBF', + 'replace' => 'E0F9', + ), + 432 => + array ( + 'match' => 'E183 0CBF', + 'replace' => 'E129', + ), + 433 => + array ( + 'match' => 'E184 0CBF', + 'replace' => 'E12A', + ), + 434 => + array ( + 'match' => 'E185 0CBF', + 'replace' => 'E12B', + ), + 435 => + array ( + 'match' => 'E186 0CBF', + 'replace' => 'E12C', + ), + 436 => + array ( + 'match' => 'E0EB 0CBF', + 'replace' => 'E0FD', + ), + 437 => + array ( + 'match' => 'E188 0CBF', + 'replace' => 'E12D', + ), + 438 => + array ( + 'match' => 'E189 0CBF', + 'replace' => 'E12E', + ), + 439 => + array ( + 'match' => 'E18A 0CBF', + 'replace' => 'E12F', + ), + 440 => + array ( + 'match' => 'E18B 0CBF', + 'replace' => 'E130', + ), + 441 => + array ( + 'match' => 'E18C 0CBF', + 'replace' => 'E131', + ), + 442 => + array ( + 'match' => 'E18D 0CBF', + 'replace' => 'E132', + ), + 443 => + array ( + 'match' => 'E18E 0CBF', + 'replace' => 'E133', + ), + 444 => + array ( + 'match' => 'E117 0CBF', + 'replace' => 'E134', + ), + 445 => + array ( + 'match' => 'E118 0CBF', + 'replace' => 'E135', + ), + 446 => + array ( + 'match' => 'E136 0CBF', + 'replace' => 'E137', + ), + 447 => + array ( + 'match' => 'E0AD', + 'replace' => '0CCD', + ), + 448 => + array ( + 'match' => 'E0AC', + 'replace' => '0CCD', + ), + 449 => + array ( + 'match' => '0C95 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E00C \\1', + ), + 450 => + array ( + 'match' => '0C96 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E00D \\1', + ), + 451 => + array ( + 'match' => '0C97 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E00E \\1', + ), + 452 => + array ( + 'match' => '0C98 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E00F \\1', + ), + 453 => + array ( + 'match' => '0C99 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E010 \\1', + ), + 454 => + array ( + 'match' => '0C9A ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E011 \\1', + ), + 455 => + array ( + 'match' => '0C9B ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E012 \\1', + ), + 456 => + array ( + 'match' => '0C9C ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E013 \\1', + ), + 457 => + array ( + 'match' => '0C9D ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E014 \\1', + ), + 458 => + array ( + 'match' => '0C9F ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E015 \\1', + ), + 459 => + array ( + 'match' => '0CA0 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E016 \\1', + ), + 460 => + array ( + 'match' => '0CA1 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E017 \\1', + ), + 461 => + array ( + 'match' => '0CA2 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E018 \\1', + ), + 462 => + array ( + 'match' => '0CA3 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E019 \\1', + ), + 463 => + array ( + 'match' => '0CA4 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E01A \\1', + ), + 464 => + array ( + 'match' => '0CA5 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E01B \\1', + ), + 465 => + array ( + 'match' => '0CA6 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E01C \\1', + ), + 466 => + array ( + 'match' => '0CA7 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E01D \\1', + ), + 467 => + array ( + 'match' => '0CA8 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E01E \\1', + ), + 468 => + array ( + 'match' => '0CAA ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E01F \\1', + ), + 469 => + array ( + 'match' => '0CAB ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E020 \\1', + ), + 470 => + array ( + 'match' => '0CAC ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E021 \\1', + ), + 471 => + array ( + 'match' => '0CAD ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E022 \\1', + ), + 472 => + array ( + 'match' => '0CAE ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E023 \\1', + ), + 473 => + array ( + 'match' => '0CAF ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E024 \\1', + ), + 474 => + array ( + 'match' => '0CB0 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E025 \\1', + ), + 475 => + array ( + 'match' => '0CB1 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E026 \\1', + ), + 476 => + array ( + 'match' => '0CB2 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E027 \\1', + ), + 477 => + array ( + 'match' => '0CB3 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E028 \\1', + ), + 478 => + array ( + 'match' => '0CB5 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E029 \\1', + ), + 479 => + array ( + 'match' => '0CB6 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E02A \\1', + ), + 480 => + array ( + 'match' => '0CB7 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E02B \\1', + ), + 481 => + array ( + 'match' => '0CB8 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E02C \\1', + ), + 482 => + array ( + 'match' => '0CB9 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E02D \\1', + ), + 483 => + array ( + 'match' => 'E07D ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E07F \\1', + ), + 484 => + array ( + 'match' => 'E07E ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E080 \\1', + ), + 485 => + array ( + 'match' => 'E0E6 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E0EC \\1', + ), + 486 => + array ( + 'match' => 'E0E7 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E0ED \\1', + ), + 487 => + array ( + 'match' => 'E172 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E18F \\1', + ), + 488 => + array ( + 'match' => 'E173 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E190 \\1', + ), + 489 => + array ( + 'match' => 'E174 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E191 \\1', + ), + 490 => + array ( + 'match' => 'E175 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E192 \\1', + ), + 491 => + array ( + 'match' => 'E176 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E193 \\1', + ), + 492 => + array ( + 'match' => 'E0E8 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E0EE \\1', + ), + 493 => + array ( + 'match' => 'E0E9 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E0EF \\1', + ), + 494 => + array ( + 'match' => 'E178 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E194 \\1', + ), + 495 => + array ( + 'match' => 'E179 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E195 \\1', + ), + 496 => + array ( + 'match' => 'E17A ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E196 \\1', + ), + 497 => + array ( + 'match' => 'E17B ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E197 \\1', + ), + 498 => + array ( + 'match' => 'E17C ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E198 \\1', + ), + 499 => + array ( + 'match' => 'E17D ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E199 \\1', + ), + 500 => + array ( + 'match' => 'E17E ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E19A \\1', + ), + 501 => + array ( + 'match' => 'E17F ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E19B \\1', + ), + 502 => + array ( + 'match' => 'E180 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E19C \\1', + ), + 503 => + array ( + 'match' => 'E181 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E19D \\1', + ), + 504 => + array ( + 'match' => 'E182 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E19E \\1', + ), + 505 => + array ( + 'match' => 'E0EA ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E0F0 \\1', + ), + 506 => + array ( + 'match' => 'E183 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E19F \\1', + ), + 507 => + array ( + 'match' => 'E184 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E1A0 \\1', + ), + 508 => + array ( + 'match' => 'E185 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E1A1 \\1', + ), + 509 => + array ( + 'match' => 'E186 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E1A2 \\1', + ), + 510 => + array ( + 'match' => 'E0EB ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E0F1 \\1', + ), + 511 => + array ( + 'match' => 'E187 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E1A3 \\1', + ), + 512 => + array ( + 'match' => 'E188 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E1A4 \\1', + ), + 513 => + array ( + 'match' => 'E189 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E1A5 \\1', + ), + 514 => + array ( + 'match' => 'E18A ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E1A6 \\1', + ), + 515 => + array ( + 'match' => 'E18B ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E1A7 \\1', + ), + 516 => + array ( + 'match' => 'E18C ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E1A8 \\1', + ), + 517 => + array ( + 'match' => 'E18D ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E1A9 \\1', + ), + 518 => + array ( + 'match' => 'E18E ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E1AA \\1', + ), + 519 => + array ( + 'match' => 'E117 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E119 \\1', + ), + 520 => + array ( + 'match' => 'E118 ((0CBE|0CC6|0CC7|E003|0CCA|0CCB|0CCC))', + 'replace' => 'E11A \\1', + ), + 521 => + array ( + 'match' => '0C95 (0CCD)', + 'replace' => 'E00C \\1', + ), + 522 => + array ( + 'match' => '0C96 (0CCD)', + 'replace' => 'E00D \\1', + ), + 523 => + array ( + 'match' => '0C97 (0CCD)', + 'replace' => 'E00E \\1', + ), + 524 => + array ( + 'match' => '0C98 (0CCD)', + 'replace' => 'E00F \\1', + ), + 525 => + array ( + 'match' => '0C99 (0CCD)', + 'replace' => 'E010 \\1', + ), + 526 => + array ( + 'match' => '0C9A (0CCD)', + 'replace' => 'E011 \\1', + ), + 527 => + array ( + 'match' => '0C9B (0CCD)', + 'replace' => 'E012 \\1', + ), + 528 => + array ( + 'match' => '0C9C (0CCD)', + 'replace' => 'E013 \\1', + ), + 529 => + array ( + 'match' => '0C9D (0CCD)', + 'replace' => 'E014 \\1', + ), + 530 => + array ( + 'match' => '0C9F (0CCD)', + 'replace' => 'E015 \\1', + ), + 531 => + array ( + 'match' => '0CA0 (0CCD)', + 'replace' => 'E016 \\1', + ), + 532 => + array ( + 'match' => '0CA1 (0CCD)', + 'replace' => 'E017 \\1', + ), + 533 => + array ( + 'match' => '0CA2 (0CCD)', + 'replace' => 'E018 \\1', + ), + 534 => + array ( + 'match' => '0CA3 (0CCD)', + 'replace' => 'E019 \\1', + ), + 535 => + array ( + 'match' => '0CA4 (0CCD)', + 'replace' => 'E01A \\1', + ), + 536 => + array ( + 'match' => '0CA5 (0CCD)', + 'replace' => 'E01B \\1', + ), + 537 => + array ( + 'match' => '0CA6 (0CCD)', + 'replace' => 'E01C \\1', + ), + 538 => + array ( + 'match' => '0CA7 (0CCD)', + 'replace' => 'E01D \\1', + ), + 539 => + array ( + 'match' => '0CA8 (0CCD)', + 'replace' => 'E01E \\1', + ), + 540 => + array ( + 'match' => '0CAA (0CCD)', + 'replace' => 'E01F \\1', + ), + 541 => + array ( + 'match' => '0CAB (0CCD)', + 'replace' => 'E020 \\1', + ), + 542 => + array ( + 'match' => '0CAC (0CCD)', + 'replace' => 'E021 \\1', + ), + 543 => + array ( + 'match' => '0CAD (0CCD)', + 'replace' => 'E022 \\1', + ), + 544 => + array ( + 'match' => '0CAE (0CCD)', + 'replace' => 'E023 \\1', + ), + 545 => + array ( + 'match' => '0CAF (0CCD)', + 'replace' => 'E024 \\1', + ), + 546 => + array ( + 'match' => '0CB0 (0CCD)', + 'replace' => 'E025 \\1', + ), + 547 => + array ( + 'match' => '0CB1 (0CCD)', + 'replace' => 'E026 \\1', + ), + 548 => + array ( + 'match' => '0CB2 (0CCD)', + 'replace' => 'E027 \\1', + ), + 549 => + array ( + 'match' => '0CB3 (0CCD)', + 'replace' => 'E028 \\1', + ), + 550 => + array ( + 'match' => '0CB5 (0CCD)', + 'replace' => 'E029 \\1', + ), + 551 => + array ( + 'match' => '0CB6 (0CCD)', + 'replace' => 'E02A \\1', + ), + 552 => + array ( + 'match' => '0CB7 (0CCD)', + 'replace' => 'E02B \\1', + ), + 553 => + array ( + 'match' => '0CB8 (0CCD)', + 'replace' => 'E02C \\1', + ), + 554 => + array ( + 'match' => '0CB9 (0CCD)', + 'replace' => 'E02D \\1', + ), + 555 => + array ( + 'match' => 'E07D (0CCD)', + 'replace' => 'E07F \\1', + ), + 556 => + array ( + 'match' => 'E07E (0CCD)', + 'replace' => 'E080 \\1', + ), + 557 => + array ( + 'match' => 'E0E6 (0CCD)', + 'replace' => 'E0EC \\1', + ), + 558 => + array ( + 'match' => 'E0E7 (0CCD)', + 'replace' => 'E0ED \\1', + ), + 559 => + array ( + 'match' => 'E172 (0CCD)', + 'replace' => 'E18F \\1', + ), + 560 => + array ( + 'match' => 'E173 (0CCD)', + 'replace' => 'E190 \\1', + ), + 561 => + array ( + 'match' => 'E174 (0CCD)', + 'replace' => 'E191 \\1', + ), + 562 => + array ( + 'match' => 'E175 (0CCD)', + 'replace' => 'E192 \\1', + ), + 563 => + array ( + 'match' => 'E176 (0CCD)', + 'replace' => 'E193 \\1', + ), + 564 => + array ( + 'match' => 'E0E8 (0CCD)', + 'replace' => 'E0EE \\1', + ), + 565 => + array ( + 'match' => 'E0E9 (0CCD)', + 'replace' => 'E0EF \\1', + ), + 566 => + array ( + 'match' => 'E178 (0CCD)', + 'replace' => 'E194 \\1', + ), + 567 => + array ( + 'match' => 'E179 (0CCD)', + 'replace' => 'E195 \\1', + ), + 568 => + array ( + 'match' => 'E17A (0CCD)', + 'replace' => 'E196 \\1', + ), + 569 => + array ( + 'match' => 'E17B (0CCD)', + 'replace' => 'E197 \\1', + ), + 570 => + array ( + 'match' => 'E17C (0CCD)', + 'replace' => 'E198 \\1', + ), + 571 => + array ( + 'match' => 'E17D (0CCD)', + 'replace' => 'E199 \\1', + ), + 572 => + array ( + 'match' => 'E17E (0CCD)', + 'replace' => 'E19A \\1', + ), + 573 => + array ( + 'match' => 'E17F (0CCD)', + 'replace' => 'E19B \\1', + ), + 574 => + array ( + 'match' => 'E180 (0CCD)', + 'replace' => 'E19C \\1', + ), + 575 => + array ( + 'match' => 'E181 (0CCD)', + 'replace' => 'E19D \\1', + ), + 576 => + array ( + 'match' => 'E182 (0CCD)', + 'replace' => 'E19E \\1', + ), + 577 => + array ( + 'match' => 'E0EA (0CCD)', + 'replace' => 'E0F0 \\1', + ), + 578 => + array ( + 'match' => 'E183 (0CCD)', + 'replace' => 'E19F \\1', + ), + 579 => + array ( + 'match' => 'E184 (0CCD)', + 'replace' => 'E1A0 \\1', + ), + 580 => + array ( + 'match' => 'E185 (0CCD)', + 'replace' => 'E1A1 \\1', + ), + 581 => + array ( + 'match' => 'E186 (0CCD)', + 'replace' => 'E1A2 \\1', + ), + 582 => + array ( + 'match' => 'E0EB (0CCD)', + 'replace' => 'E0F1 \\1', + ), + 583 => + array ( + 'match' => 'E187 (0CCD)', + 'replace' => 'E1A3 \\1', + ), + 584 => + array ( + 'match' => 'E188 (0CCD)', + 'replace' => 'E1A4 \\1', + ), + 585 => + array ( + 'match' => 'E189 (0CCD)', + 'replace' => 'E1A5 \\1', + ), + 586 => + array ( + 'match' => 'E18A (0CCD)', + 'replace' => 'E1A6 \\1', + ), + 587 => + array ( + 'match' => 'E18B (0CCD)', + 'replace' => 'E1A7 \\1', + ), + 588 => + array ( + 'match' => 'E18C (0CCD)', + 'replace' => 'E1A8 \\1', + ), + 589 => + array ( + 'match' => 'E18D (0CCD)', + 'replace' => 'E1A9 \\1', + ), + 590 => + array ( + 'match' => 'E18E (0CCD)', + 'replace' => 'E1AA \\1', + ), + 591 => + array ( + 'match' => 'E117 (0CCD)', + 'replace' => 'E119 \\1', + ), + 592 => + array ( + 'match' => 'E118 (0CCD)', + 'replace' => 'E11A \\1', + ), + 593 => + array ( + 'match' => '0C98 (0CBE)', + 'replace' => 'E00F \\1', + ), + 594 => + array ( + 'match' => '0CB1 (0CBE)', + 'replace' => 'E026 \\1', + ), + 595 => + array ( + 'match' => 'E173 (0CBE)', + 'replace' => 'E190 \\1', + ), + 596 => + array ( + 'match' => 'E187 (0CBE)', + 'replace' => 'E1A3 \\1', + ), + 597 => + array ( + 'match' => '((E00F|0C9E|E026|E190|E177|E1A3)) 0CBE', + 'replace' => '\\1 E004', + ), +); +?> \ No newline at end of file diff --git a/include/mpdf/includes/ind_ml_1_001.volt.php b/include/mpdf/includes/ind_ml_1_001.volt.php new file mode 100755 index 0000000000000000000000000000000000000000..6d5f911ec5ec53f69dd8d2c8a2eb929d7d1adcfa --- /dev/null +++ b/include/mpdf/includes/ind_ml_1_001.volt.php @@ -0,0 +1,1769 @@ +<?php + $volt = array ( + 0 => + array ( + 'match' => '0D4D 200D', + 'replace' => '007E', + ), + 1 => + array ( + 'match' => '0D4D 200C', + 'replace' => '2018', + ), + 2 => + array ( + 'match' => '200D 0D4D', + 'replace' => '2019', + ), + 3 => + array ( + 'match' => '0D15 0D4D 0D37', + 'replace' => 'E010', + ), + 4 => + array ( + 'match' => '0D1C 0D4D 0D1E', + 'replace' => 'E011', + ), + 5 => + array ( + 'match' => '0D1A 0D4D 0D1A', + 'replace' => 'E03E', + ), + 6 => + array ( + 'match' => '0D2C 0D4D 0D2C', + 'replace' => 'E04B', + ), + 7 => + array ( + 'match' => '0D24 0D4D 0D24', + 'replace' => 'E023', + ), + 8 => + array ( + 'match' => '0D28 0D4D 0D28', + 'replace' => 'E02A', + ), + 9 => + array ( + 'match' => '0D23 0D4D 0D23', + 'replace' => 'E043', + ), + 10 => + array ( + 'match' => '0D2E 0D4D 0D2E', + 'replace' => 'E030', + ), + 11 => + array ( + 'match' => '0D33 0D4D 0D33', + 'replace' => 'E036', + ), + 12 => + array ( + 'match' => '0D32 0D4D 0D32', + 'replace' => 'E05D', + ), + 13 => + array ( + 'match' => '0D26 0D4D 0D26', + 'replace' => 'E015', + ), + 14 => + array ( + 'match' => '0D1F 0D4D 0D1F', + 'replace' => 'E014', + ), + 15 => + array ( + 'match' => '0D1C 0D4D 0D1C', + 'replace' => 'E01B', + ), + 16 => + array ( + 'match' => '0D2A 0D4D 0D2A', + 'replace' => 'E046', + ), + 17 => + array ( + 'match' => '0D17 0D4D 0D17', + 'replace' => 'E03B', + ), + 18 => + array ( + 'match' => '0D15 0D4D 0D15', + 'replace' => 'E012', + ), + 19 => + array ( + 'match' => '0D31 0D4D 0D31', + 'replace' => 'E05C', + ), + 20 => + array ( + 'match' => '0D19 0D4D 0D15', + 'replace' => 'E013', + ), + 21 => + array ( + 'match' => '0D19 0D4D 0D19', + 'replace' => 'E016', + ), + 22 => + array ( + 'match' => '0D15 0D4D 0D24', + 'replace' => 'E017', + ), + 23 => + array ( + 'match' => '0D17 0D4D 0D2E', + 'replace' => 'E018', + ), + 24 => + array ( + 'match' => '0D17 0D4D E029', + 'replace' => 'E019', + ), + 25 => + array ( + 'match' => '0D17 0D4D 0D28', + 'replace' => 'E01A', + ), + 26 => + array ( + 'match' => '0D1E 0D4D 0D1C', + 'replace' => 'E01C', + ), + 27 => + array ( + 'match' => '0D1E 0D4D 0D1E', + 'replace' => 'E01D', + ), + 28 => + array ( + 'match' => '0D1E 0D4D 0D1A', + 'replace' => 'E01E', + ), + 29 => + array ( + 'match' => '0D1E 0D4D 0D1B', + 'replace' => 'E01F', + ), + 30 => + array ( + 'match' => '0D23 0D4D 0D2E', + 'replace' => 'E020', + ), + 31 => + array ( + 'match' => '0D23 0D4D 0D21', + 'replace' => 'E021', + ), + 32 => + array ( + 'match' => '0D23 0D4D 0D1F', + 'replace' => 'E022', + ), + 33 => + array ( + 'match' => '0D24 0D4D 0D38', + 'replace' => 'E024', + ), + 34 => + array ( + 'match' => '0D24 0D4D 0D25', + 'replace' => 'E025', + ), + 35 => + array ( + 'match' => '0D24 0D4D 0D2E', + 'replace' => 'E026', + ), + 36 => + array ( + 'match' => '0D24 0D4D 0D2D', + 'replace' => 'E027', + ), + 37 => + array ( + 'match' => '0D24 0D4D 0D28', + 'replace' => 'E028', + ), + 38 => + array ( + 'match' => '0D26 0D4D 0D27', + 'replace' => 'E029', + ), + 39 => + array ( + 'match' => '0D28 0D4D 0D26', + 'replace' => 'E02B', + ), + 40 => + array ( + 'match' => '0D28 0D4D 0D24', + 'replace' => 'E02C', + ), + 41 => + array ( + 'match' => '0D28 0D4D 0D27', + 'replace' => 'E02D', + ), + 42 => + array ( + 'match' => '0D28 0D4D 0D2A', + 'replace' => 'E031', + ), + 43 => + array ( + 'match' => '0D28 0D4D 0D2E', + 'replace' => 'E02E', + ), + 44 => + array ( + 'match' => '0D28 0D4D 0D25', + 'replace' => 'E02F', + ), + 45 => + array ( + 'match' => '0D2E 0D4D 0D2A', + 'replace' => 'E031', + ), + 46 => + array ( + 'match' => '0D36 0D4D 0D1A', + 'replace' => 'E032', + ), + 47 => + array ( + 'match' => '0D38 0D4D 0D25', + 'replace' => 'E033', + ), + 48 => + array ( + 'match' => '0D39 0D4D 0D28', + 'replace' => 'E034', + ), + 49 => + array ( + 'match' => '0D39 0D4D 0D2E', + 'replace' => 'E035', + ), + 50 => + array ( + 'match' => '0D15 0D4D 0D32', + 'replace' => 'E037', + ), + 51 => + array ( + 'match' => '0D15 0D4D 0D33', + 'replace' => 'E037', + ), + 52 => + array ( + 'match' => '0D15 0D4D 0D38', + 'replace' => 'E038', + ), + 53 => + array ( + 'match' => '0D15 0D4D 0D1F', + 'replace' => 'E039', + ), + 54 => + array ( + 'match' => '0D18 0D4D 0D28', + 'replace' => 'E03A', + ), + 55 => + array ( + 'match' => '0D17 0D4D 0D32', + 'replace' => 'E03C', + ), + 56 => + array ( + 'match' => '0D17 0D4D 0D33', + 'replace' => 'E03C', + ), + 57 => + array ( + 'match' => '0D1A 0D4D 0D1B', + 'replace' => 'E03F', + ), + 58 => + array ( + 'match' => '0D21 0D4D 0D21', + 'replace' => 'E040', + ), + 59 => + array ( + 'match' => '0D21 0D4D 0D22', + 'replace' => 'E041', + ), + 60 => + array ( + 'match' => '0D21 0D4D 0D1C', + 'replace' => 'E042', + ), + 61 => + array ( + 'match' => '0D23 0D4D 0D20', + 'replace' => 'E044', + ), + 62 => + array ( + 'match' => '0D24 0D4D 0D32', + 'replace' => 'E045', + ), + 63 => + array ( + 'match' => '0D2A 0D4D 0D28', + 'replace' => 'E047', + ), + 64 => + array ( + 'match' => '0D2A 0D4D 0D32', + 'replace' => 'E048', + ), + 65 => + array ( + 'match' => '0D2A 0D4D 0D33', + 'replace' => 'E048', + ), + 66 => + array ( + 'match' => '0D2A 0D4D 0D38', + 'replace' => 'E049', + ), + 67 => + array ( + 'match' => '0D2A 0D4D 0D24', + 'replace' => 'E04A', + ), + 68 => + array ( + 'match' => '0D2C 0D4D 0D32', + 'replace' => 'E04C', + ), + 69 => + array ( + 'match' => '0D2C 0D4D 0D33', + 'replace' => 'E04C', + ), + 70 => + array ( + 'match' => '0D2C 0D4D 0D26', + 'replace' => 'E04D', + ), + 71 => + array ( + 'match' => '0D2C 0D4D 0D27', + 'replace' => 'E04E', + ), + 72 => + array ( + 'match' => '0D2C 0D4D 0D15', + 'replace' => 'E04F', + ), + 73 => + array ( + 'match' => '0D2B 0D4D 0D32', + 'replace' => 'E050', + ), + 74 => + array ( + 'match' => '0D2B 0D4D 0D33', + 'replace' => 'E050', + ), + 75 => + array ( + 'match' => '0D2B 0D4D 0D15', + 'replace' => 'E051', + ), + 76 => + array ( + 'match' => '0D2B 0D4D 0D24', + 'replace' => 'E052', + ), + 77 => + array ( + 'match' => '0D2E 0D4D 0D32', + 'replace' => 'E053', + ), + 78 => + array ( + 'match' => '0D2E 0D4D 0D33', + 'replace' => 'E053', + ), + 79 => + array ( + 'match' => '0D2E 0D4D 0D28', + 'replace' => 'E054', + ), + 80 => + array ( + 'match' => '0D2F 0D4D 0D2F', + 'replace' => 'E055', + ), + 81 => + array ( + 'match' => '0D2F 0D4D 0D2E', + 'replace' => 'E056', + ), + 82 => + array ( + 'match' => '0D2F 0D4D 0D2A', + 'replace' => 'E057', + ), + 83 => + array ( + 'match' => '0D2F 0D4D 0D15', + 'replace' => 'E058', + ), + 84 => + array ( + 'match' => '0D2F 0D4D 0D24', + 'replace' => 'E05A', + ), + 85 => + array ( + 'match' => '0D32 0D4D 0D32', + 'replace' => 'E05D', + ), + 86 => + array ( + 'match' => '0D32 0D4D 0D2A', + 'replace' => 'E05E', + ), + 87 => + array ( + 'match' => '0D32 0D4D 0D15', + 'replace' => 'E05F', + ), + 88 => + array ( + 'match' => '0D32 0D4D 0D2E', + 'replace' => 'E060', + ), + 89 => + array ( + 'match' => '0D35 0D4D 0D35', + 'replace' => 'E061', + ), + 90 => + array ( + 'match' => '0D35 0D4D 0D32', + 'replace' => 'E062', + ), + 91 => + array ( + 'match' => '0D35 0D4D 0D33', + 'replace' => 'E062', + ), + 92 => + array ( + 'match' => '0D36 0D4D 0D36', + 'replace' => 'E063', + ), + 93 => + array ( + 'match' => '0D36 0D4D 0D32', + 'replace' => 'E064', + ), + 94 => + array ( + 'match' => '0D36 0D4D 0D33', + 'replace' => 'E064', + ), + 95 => + array ( + 'match' => '0D36 0D4D 0D28', + 'replace' => 'E065', + ), + 96 => + array ( + 'match' => '0D36 0D4D 0D2E', + 'replace' => 'E066', + ), + 97 => + array ( + 'match' => '0D37 0D4D 0D2A', + 'replace' => 'E067', + ), + 98 => + array ( + 'match' => '0D37 0D4D 0D15', + 'replace' => 'E068', + ), + 99 => + array ( + 'match' => '0D37 0D4D 0D23', + 'replace' => 'E069', + ), + 100 => + array ( + 'match' => '0D37 0D4D 0D1F', + 'replace' => 'E06A', + ), + 101 => + array ( + 'match' => '0D37 0D4D 0D2E', + 'replace' => 'E06B', + ), + 102 => + array ( + 'match' => '0D37 0D4D E05C', + 'replace' => 'E06C', + ), + 103 => + array ( + 'match' => '0D37 0D4D 0D2B', + 'replace' => 'E06D', + ), + 104 => + array ( + 'match' => '0D37 0D4D 0D20', + 'replace' => 'E06E', + ), + 105 => + array ( + 'match' => '0D37 0D4D 0D24', + 'replace' => 'E06F', + ), + 106 => + array ( + 'match' => '0D38 0D4D 0D38', + 'replace' => 'E070', + ), + 107 => + array ( + 'match' => '0D38 0D4D 0D32', + 'replace' => 'E071', + ), + 108 => + array ( + 'match' => '0D38 0D4D 0D33', + 'replace' => 'E071', + ), + 109 => + array ( + 'match' => '0D38 0D4D E05C', + 'replace' => 'E072', + ), + 110 => + array ( + 'match' => '0D38 0D4D 0D2A', + 'replace' => 'E073', + ), + 111 => + array ( + 'match' => '0D38 0D4D 0D24', + 'replace' => 'E074', + ), + 112 => + array ( + 'match' => '0D38 0D4D 0D15', + 'replace' => 'E075', + ), + 113 => + array ( + 'match' => '0D38 0D4D 0D28', + 'replace' => 'E076', + ), + 114 => + array ( + 'match' => '0D38 0D4D 0D2E', + 'replace' => 'E077', + ), + 115 => + array ( + 'match' => '0D39 0D4D 0D32', + 'replace' => 'E078', + ), + 116 => + array ( + 'match' => '0D39 0D4D 0D33', + 'replace' => 'E078', + ), + 117 => + array ( + 'match' => '0D34 0D4D 0D24', + 'replace' => 'E079', + ), + 118 => + array ( + 'match' => '0D34 0D4D 0D15', + 'replace' => 'E07A', + ), + 119 => + array ( + 'match' => '0D34 0D4D 0D2E', + 'replace' => 'E07C', + ), + 120 => + array ( + 'match' => 'E006 0D4D 0D31', + 'replace' => 'E07D', + ), + 121 => + array ( + 'match' => '0D28 0D4D 0D30', + 'replace' => 'E07D', + ), + 122 => + array ( + 'match' => '0D28 0D4D 0D31', + 'replace' => 'E07D', + ), + 123 => + array ( + 'match' => '0D34 0D4D E023', + 'replace' => 'E07B', + ), + 124 => + array ( + 'match' => '0D2F 0D4D E023', + 'replace' => 'E05B', + ), + 125 => + array ( + 'match' => '0D2F 0D4D E012', + 'replace' => 'E059', + ), + 126 => + array ( + 'match' => 'E010 0D4D 0D2E', + 'replace' => 'E03D', + ), + 127 => + array ( + 'match' => '2019 0D31', + 'replace' => 'E00E', + ), + 128 => + array ( + 'match' => '2019 0D31', + 'replace' => 'E00E', + ), + 129 => + array ( + 'match' => '2019 0D2F', + 'replace' => 'E00D', + ), + 130 => + array ( + 'match' => '2019 0D35', + 'replace' => 'E00F', + ), + 131 => + array ( + 'match' => '0D4D 0D31 ((0D15|0D16|0D17|0D18|0D19|0D1A|0D1B|0D1C|0D1D|0D1E|0D1F|0D20|0D21|0D22|0D23|0D24|0D25|0D26|0D27|0D28|0D2A|0D2B|0D2C|0D2D|0D2E|0D2F|0D30|0D31|0D32|0D33|0D34|0D35|0D36|0D37|0D38|0D39))', + 'replace' => 'E00E \\1', + ), + 132 => + array ( + 'match' => '0D4D 0D30 ((0D15|0D16|0D17|0D18|0D19|0D1A|0D1B|0D1C|0D1D|0D1E|0D1F|0D20|0D21|0D22|0D23|0D24|0D25|0D26|0D27|0D28|0D2A|0D2B|0D2C|0D2D|0D2E|0D2F|0D30|0D31|0D32|0D33|0D34|0D35|0D36|0D37|0D38|0D39))', + 'replace' => 'E00E \\1', + ), + 133 => + array ( + 'match' => '0D4D 0D31 ((E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D))', + 'replace' => 'E00E \\1', + ), + 134 => + array ( + 'match' => '0D4D 0D30 ((E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D))', + 'replace' => 'E00E \\1', + ), + 135 => + array ( + 'match' => '0D4D 0D31 ((0020|25CC))', + 'replace' => 'E00E \\1', + ), + 136 => + array ( + 'match' => '0D4D 0D30 ((0020|25CC))', + 'replace' => 'E00E \\1', + ), + 137 => + array ( + 'match' => '((0D15|0D16|0D17|0D18|0D19|0D1A|0D1B|0D1C|0D1D|0D1E|0D1F|0D20|0D21|0D22|0D23|0D24|0D25|0D26|0D27|0D28|0D2A|0D2B|0D2C|0D2D|0D2E|0D2F|0D30|0D31|0D32|0D33|0D34|0D35|0D36|0D37|0D38|0D39)) 0D4D 0D2F', + 'replace' => '\\1 E00D', + ), + 138 => + array ( + 'match' => '((0D15|0D16|0D17|0D18|0D19|0D1A|0D1B|0D1C|0D1D|0D1E|0D1F|0D20|0D21|0D22|0D23|0D24|0D25|0D26|0D27|0D28|0D2A|0D2B|0D2C|0D2D|0D2E|0D2F|0D30|0D31|0D32|0D33|0D34|0D35|0D36|0D37|0D38|0D39)) 2018 0D2F', + 'replace' => '\\1 E00D', + ), + 139 => + array ( + 'match' => '((E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D)) 0D4D 0D2F', + 'replace' => '\\1 E00D', + ), + 140 => + array ( + 'match' => '((E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D)) 2018 0D2F', + 'replace' => '\\1 E00D', + ), + 141 => + array ( + 'match' => '((0020|25CC)) 0D4D 0D2F', + 'replace' => '\\1 E00D', + ), + 142 => + array ( + 'match' => '((0020|25CC)) 2018 0D2F', + 'replace' => '\\1 E00D', + ), + 143 => + array ( + 'match' => '((0D15|0D16|0D17|0D18|0D19|0D1A|0D1B|0D1C|0D1D|0D1E|0D1F|0D20|0D21|0D22|0D23|0D24|0D25|0D26|0D27|0D28|0D2A|0D2B|0D2C|0D2D|0D2E|0D2F|0D30|0D31|0D32|0D33|0D34|0D35|0D36|0D37|0D38|0D39)) 0D4D 0D35', + 'replace' => '\\1 E00F', + ), + 144 => + array ( + 'match' => '((0D15|0D16|0D17|0D18|0D19|0D1A|0D1B|0D1C|0D1D|0D1E|0D1F|0D20|0D21|0D22|0D23|0D24|0D25|0D26|0D27|0D28|0D2A|0D2B|0D2C|0D2D|0D2E|0D2F|0D30|0D31|0D32|0D33|0D34|0D35|0D36|0D37|0D38|0D39)) 2018 0D35', + 'replace' => '\\1 E00F', + ), + 145 => + array ( + 'match' => '((E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D)) 0D4D 0D35', + 'replace' => '\\1 E00F', + ), + 146 => + array ( + 'match' => '((E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D)) 2018 0D35', + 'replace' => '\\1 E00F', + ), + 147 => + array ( + 'match' => '((0020|25CC)) 0D4D 0D35', + 'replace' => '\\1 E00F', + ), + 148 => + array ( + 'match' => '((0020|25CC)) 2018 0D35', + 'replace' => '\\1 E00F', + ), + 149 => + array ( + 'match' => '0D28 0D4D', + 'replace' => 'E006', + ), + 150 => + array ( + 'match' => '0D28 007E', + 'replace' => 'E006', + ), + 151 => + array ( + 'match' => '0D23 0D4D', + 'replace' => 'E005', + ), + 152 => + array ( + 'match' => '0D23 007E', + 'replace' => 'E005', + ), + 153 => + array ( + 'match' => '0D32 0D4D', + 'replace' => 'E008', + ), + 154 => + array ( + 'match' => '0D32 007E', + 'replace' => 'E008', + ), + 155 => + array ( + 'match' => '0D33 0D4D', + 'replace' => 'E009', + ), + 156 => + array ( + 'match' => '0D33 007E', + 'replace' => 'E009', + ), + 157 => + array ( + 'match' => '0D31 0D4D', + 'replace' => 'E007', + ), + 158 => + array ( + 'match' => '0D31 007E', + 'replace' => 'E007', + ), + 159 => + array ( + 'match' => '0D30 0D4D', + 'replace' => 'E007', + ), + 160 => + array ( + 'match' => '0D30 007E', + 'replace' => 'E007', + ), + 161 => + array ( + 'match' => '(E00E) E005', + 'replace' => '\\1 E005 E00E', + ), + 162 => + array ( + 'match' => '(E00E) E006', + 'replace' => '\\1 E006 E00E', + ), + 163 => + array ( + 'match' => '(E00E) E007', + 'replace' => '\\1 E007 E00E', + ), + 164 => + array ( + 'match' => '(E00E) E008', + 'replace' => '\\1 E008 E00E', + ), + 165 => + array ( + 'match' => '(E00E) E009', + 'replace' => '\\1 E009 E00E', + ), + 166 => + array ( + 'match' => 'E00E E005 (E00E)', + 'replace' => 'E005 \\1', + ), + 167 => + array ( + 'match' => 'E00E E006 (E00E)', + 'replace' => 'E006 \\1', + ), + 168 => + array ( + 'match' => 'E00E E007 (E00E)', + 'replace' => 'E007 \\1', + ), + 169 => + array ( + 'match' => 'E00E E008 (E00E)', + 'replace' => 'E008 \\1', + ), + 170 => + array ( + 'match' => 'E00E E009 (E00E)', + 'replace' => 'E009 \\1', + ), + 171 => + array ( + 'match' => '(E00E (0D15|0D16|0D17|0D18|0D19|0D1A|0D1B|0D1C|0D1D|0D1E|0D1F|0D20|0D21|0D22|0D23|0D24|0D25|0D26|0D27|0D28|0D2A|0D2B|0D2C|0D2D|0D2E|0D2F|0D30|0D31|0D32|0D33|0D34|0D35|0D36|0D37|0D38|0D39)) 0D4D ((0D15|0D16|0D17|0D18|0D19|0D1A|0D1B|0D1C|0D1D|0D1E|0D1F|0D20|0D21|0D22|0D23|0D24|0D25|0D26|0D27|0D28|0D2A|0D2B|0D2C|0D2D|0D2E|0D2F|0D30|0D31|0D32|0D33|0D34|0D35|0D36|0D37|0D38|0D39))', + 'replace' => '\\1 0D4D E00E \\3', + ), + 172 => + array ( + 'match' => 'E00E 0D15 (0D4D E00E)', + 'replace' => '0D15 \\1', + ), + 173 => + array ( + 'match' => 'E00E 0D16 (0D4D E00E)', + 'replace' => '0D16 \\1', + ), + 174 => + array ( + 'match' => 'E00E 0D17 (0D4D E00E)', + 'replace' => '0D17 \\1', + ), + 175 => + array ( + 'match' => 'E00E 0D18 (0D4D E00E)', + 'replace' => '0D18 \\1', + ), + 176 => + array ( + 'match' => 'E00E 0D19 (0D4D E00E)', + 'replace' => '0D19 \\1', + ), + 177 => + array ( + 'match' => 'E00E 0D1A (0D4D E00E)', + 'replace' => '0D1A \\1', + ), + 178 => + array ( + 'match' => 'E00E 0D1B (0D4D E00E)', + 'replace' => '0D1B \\1', + ), + 179 => + array ( + 'match' => 'E00E 0D1C (0D4D E00E)', + 'replace' => '0D1C \\1', + ), + 180 => + array ( + 'match' => 'E00E 0D1D (0D4D E00E)', + 'replace' => '0D1D \\1', + ), + 181 => + array ( + 'match' => 'E00E 0D1E (0D4D E00E)', + 'replace' => '0D1E \\1', + ), + 182 => + array ( + 'match' => 'E00E 0D1F (0D4D E00E)', + 'replace' => '0D1F \\1', + ), + 183 => + array ( + 'match' => 'E00E 0D20 (0D4D E00E)', + 'replace' => '0D20 \\1', + ), + 184 => + array ( + 'match' => 'E00E 0D21 (0D4D E00E)', + 'replace' => '0D21 \\1', + ), + 185 => + array ( + 'match' => 'E00E 0D22 (0D4D E00E)', + 'replace' => '0D22 \\1', + ), + 186 => + array ( + 'match' => 'E00E 0D23 (0D4D E00E)', + 'replace' => '0D23 \\1', + ), + 187 => + array ( + 'match' => 'E00E 0D24 (0D4D E00E)', + 'replace' => '0D24 \\1', + ), + 188 => + array ( + 'match' => 'E00E 0D25 (0D4D E00E)', + 'replace' => '0D25 \\1', + ), + 189 => + array ( + 'match' => 'E00E 0D26 (0D4D E00E)', + 'replace' => '0D26 \\1', + ), + 190 => + array ( + 'match' => 'E00E 0D27 (0D4D E00E)', + 'replace' => '0D27 \\1', + ), + 191 => + array ( + 'match' => 'E00E 0D28 (0D4D E00E)', + 'replace' => '0D28 \\1', + ), + 192 => + array ( + 'match' => 'E00E 0D2A (0D4D E00E)', + 'replace' => '0D2A \\1', + ), + 193 => + array ( + 'match' => 'E00E 0D2B (0D4D E00E)', + 'replace' => '0D2B \\1', + ), + 194 => + array ( + 'match' => 'E00E 0D2C (0D4D E00E)', + 'replace' => '0D2C \\1', + ), + 195 => + array ( + 'match' => 'E00E 0D2D (0D4D E00E)', + 'replace' => '0D2D \\1', + ), + 196 => + array ( + 'match' => 'E00E 0D2E (0D4D E00E)', + 'replace' => '0D2E \\1', + ), + 197 => + array ( + 'match' => 'E00E 0D2F (0D4D E00E)', + 'replace' => '0D2F \\1', + ), + 198 => + array ( + 'match' => 'E00E 0D30 (0D4D E00E)', + 'replace' => '0D30 \\1', + ), + 199 => + array ( + 'match' => 'E00E 0D31 (0D4D E00E)', + 'replace' => '0D31 \\1', + ), + 200 => + array ( + 'match' => 'E00E 0D32 (0D4D E00E)', + 'replace' => '0D32 \\1', + ), + 201 => + array ( + 'match' => 'E00E 0D33 (0D4D E00E)', + 'replace' => '0D33 \\1', + ), + 202 => + array ( + 'match' => 'E00E 0D34 (0D4D E00E)', + 'replace' => '0D34 \\1', + ), + 203 => + array ( + 'match' => 'E00E 0D35 (0D4D E00E)', + 'replace' => '0D35 \\1', + ), + 204 => + array ( + 'match' => 'E00E 0D36 (0D4D E00E)', + 'replace' => '0D36 \\1', + ), + 205 => + array ( + 'match' => 'E00E 0D37 (0D4D E00E)', + 'replace' => '0D37 \\1', + ), + 206 => + array ( + 'match' => 'E00E 0D38 (0D4D E00E)', + 'replace' => '0D38 \\1', + ), + 207 => + array ( + 'match' => 'E00E 0D39 (0D4D E00E)', + 'replace' => '0D39 \\1', + ), + 208 => + array ( + 'match' => '(0D46) E005', + 'replace' => '\\1 E005 0D46', + ), + 209 => + array ( + 'match' => '(0D46) E006', + 'replace' => '\\1 E006 0D46', + ), + 210 => + array ( + 'match' => '(0D46) E007', + 'replace' => '\\1 E007 0D46', + ), + 211 => + array ( + 'match' => '(0D46) E008', + 'replace' => '\\1 E008 0D46', + ), + 212 => + array ( + 'match' => '(0D46) E009', + 'replace' => '\\1 E009 0D46', + ), + 213 => + array ( + 'match' => '(0D47) E005', + 'replace' => '\\1 E005 0D47', + ), + 214 => + array ( + 'match' => '(0D47) E006', + 'replace' => '\\1 E006 0D47', + ), + 215 => + array ( + 'match' => '(0D47) E007', + 'replace' => '\\1 E007 0D47', + ), + 216 => + array ( + 'match' => '(0D47) E008', + 'replace' => '\\1 E008 0D47', + ), + 217 => + array ( + 'match' => '(0D47) E009', + 'replace' => '\\1 E009 0D47', + ), + 218 => + array ( + 'match' => '(0D48) E005', + 'replace' => '\\1 E005 0D48', + ), + 219 => + array ( + 'match' => '(0D48) E006', + 'replace' => '\\1 E006 0D48', + ), + 220 => + array ( + 'match' => '(0D48) E007', + 'replace' => '\\1 E007 0D48', + ), + 221 => + array ( + 'match' => '(0D48) E008', + 'replace' => '\\1 E008 0D48', + ), + 222 => + array ( + 'match' => '(0D48) E009', + 'replace' => '\\1 E009 0D48', + ), + 223 => + array ( + 'match' => '0D46 E005', + 'replace' => 'E005', + ), + 224 => + array ( + 'match' => '0D46 E006', + 'replace' => 'E006', + ), + 225 => + array ( + 'match' => '0D46 E007', + 'replace' => 'E007', + ), + 226 => + array ( + 'match' => '0D46 E008', + 'replace' => 'E008', + ), + 227 => + array ( + 'match' => '0D46 E009', + 'replace' => 'E009', + ), + 228 => + array ( + 'match' => '0D47 E005', + 'replace' => 'E005', + ), + 229 => + array ( + 'match' => '0D47 E006', + 'replace' => 'E006', + ), + 230 => + array ( + 'match' => '0D47 E007', + 'replace' => 'E007', + ), + 231 => + array ( + 'match' => '0D47 E008', + 'replace' => 'E008', + ), + 232 => + array ( + 'match' => '0D47 E009', + 'replace' => 'E009', + ), + 233 => + array ( + 'match' => '0D48 E005', + 'replace' => 'E005', + ), + 234 => + array ( + 'match' => '0D48 E006', + 'replace' => 'E006', + ), + 235 => + array ( + 'match' => '0D48 E007', + 'replace' => 'E007', + ), + 236 => + array ( + 'match' => '0D48 E008', + 'replace' => 'E008', + ), + 237 => + array ( + 'match' => '0D48 E009', + 'replace' => 'E009', + ), + 238 => + array ( + 'match' => '(0D46 (0D15|0D16|0D17|0D18|0D19|0D1A|0D1B|0D1C|0D1D|0D1E|0D1F|0D20|0D21|0D22|0D23|0D24|0D25|0D26|0D27|0D28|0D2A|0D2B|0D2C|0D2D|0D2E|0D2F|0D30|0D31|0D32|0D33|0D34|0D35|0D36|0D37|0D38|0D39)) 0D4D', + 'replace' => '\\1 0D4D 0D46', + ), + 239 => + array ( + 'match' => '(0D47 (0D15|0D16|0D17|0D18|0D19|0D1A|0D1B|0D1C|0D1D|0D1E|0D1F|0D20|0D21|0D22|0D23|0D24|0D25|0D26|0D27|0D28|0D2A|0D2B|0D2C|0D2D|0D2E|0D2F|0D30|0D31|0D32|0D33|0D34|0D35|0D36|0D37|0D38|0D39)) 0D4D', + 'replace' => '\\1 0D4D 0D47', + ), + 240 => + array ( + 'match' => '(0D48 (0D15|0D16|0D17|0D18|0D19|0D1A|0D1B|0D1C|0D1D|0D1E|0D1F|0D20|0D21|0D22|0D23|0D24|0D25|0D26|0D27|0D28|0D2A|0D2B|0D2C|0D2D|0D2E|0D2F|0D30|0D31|0D32|0D33|0D34|0D35|0D36|0D37|0D38|0D39)) 0D4D', + 'replace' => '\\1 0D4D 0D48', + ), + 241 => + array ( + 'match' => '0D46 0D15 (0D4D)', + 'replace' => '0D15 \\1', + ), + 242 => + array ( + 'match' => '0D46 0D16 (0D4D)', + 'replace' => '0D16 \\1', + ), + 243 => + array ( + 'match' => '0D46 0D17 (0D4D)', + 'replace' => '0D17 \\1', + ), + 244 => + array ( + 'match' => '0D46 0D18 (0D4D)', + 'replace' => '0D18 \\1', + ), + 245 => + array ( + 'match' => '0D46 0D19 (0D4D)', + 'replace' => '0D19 \\1', + ), + 246 => + array ( + 'match' => '0D46 0D1A (0D4D)', + 'replace' => '0D1A \\1', + ), + 247 => + array ( + 'match' => '0D46 0D1B (0D4D)', + 'replace' => '0D1B \\1', + ), + 248 => + array ( + 'match' => '0D46 0D1C (0D4D)', + 'replace' => '0D1C \\1', + ), + 249 => + array ( + 'match' => '0D46 0D1D (0D4D)', + 'replace' => '0D1D \\1', + ), + 250 => + array ( + 'match' => '0D46 0D1E (0D4D)', + 'replace' => '0D1E \\1', + ), + 251 => + array ( + 'match' => '0D46 0D1F (0D4D)', + 'replace' => '0D1F \\1', + ), + 252 => + array ( + 'match' => '0D46 0D20 (0D4D)', + 'replace' => '0D20 \\1', + ), + 253 => + array ( + 'match' => '0D46 0D21 (0D4D)', + 'replace' => '0D21 \\1', + ), + 254 => + array ( + 'match' => '0D46 0D22 (0D4D)', + 'replace' => '0D22 \\1', + ), + 255 => + array ( + 'match' => '0D46 0D23 (0D4D)', + 'replace' => '0D23 \\1', + ), + 256 => + array ( + 'match' => '0D46 0D24 (0D4D)', + 'replace' => '0D24 \\1', + ), + 257 => + array ( + 'match' => '0D46 0D25 (0D4D)', + 'replace' => '0D25 \\1', + ), + 258 => + array ( + 'match' => '0D46 0D26 (0D4D)', + 'replace' => '0D26 \\1', + ), + 259 => + array ( + 'match' => '0D46 0D27 (0D4D)', + 'replace' => '0D27 \\1', + ), + 260 => + array ( + 'match' => '0D46 0D28 (0D4D)', + 'replace' => '0D28 \\1', + ), + 261 => + array ( + 'match' => '0D46 0D2A (0D4D)', + 'replace' => '0D2A \\1', + ), + 262 => + array ( + 'match' => '0D46 0D2B (0D4D)', + 'replace' => '0D2B \\1', + ), + 263 => + array ( + 'match' => '0D46 0D2C (0D4D)', + 'replace' => '0D2C \\1', + ), + 264 => + array ( + 'match' => '0D46 0D2D (0D4D)', + 'replace' => '0D2D \\1', + ), + 265 => + array ( + 'match' => '0D46 0D2E (0D4D)', + 'replace' => '0D2E \\1', + ), + 266 => + array ( + 'match' => '0D46 0D2F (0D4D)', + 'replace' => '0D2F \\1', + ), + 267 => + array ( + 'match' => '0D46 0D30 (0D4D)', + 'replace' => '0D30 \\1', + ), + 268 => + array ( + 'match' => '0D46 0D31 (0D4D)', + 'replace' => '0D31 \\1', + ), + 269 => + array ( + 'match' => '0D46 0D32 (0D4D)', + 'replace' => '0D32 \\1', + ), + 270 => + array ( + 'match' => '0D46 0D33 (0D4D)', + 'replace' => '0D33 \\1', + ), + 271 => + array ( + 'match' => '0D46 0D34 (0D4D)', + 'replace' => '0D34 \\1', + ), + 272 => + array ( + 'match' => '0D46 0D35 (0D4D)', + 'replace' => '0D35 \\1', + ), + 273 => + array ( + 'match' => '0D46 0D36 (0D4D)', + 'replace' => '0D36 \\1', + ), + 274 => + array ( + 'match' => '0D46 0D37 (0D4D)', + 'replace' => '0D37 \\1', + ), + 275 => + array ( + 'match' => '0D46 0D38 (0D4D)', + 'replace' => '0D38 \\1', + ), + 276 => + array ( + 'match' => '0D46 0D39 (0D4D)', + 'replace' => '0D39 \\1', + ), + 277 => + array ( + 'match' => '0D47 0D15 (0D4D)', + 'replace' => '0D15 \\1', + ), + 278 => + array ( + 'match' => '0D47 0D16 (0D4D)', + 'replace' => '0D16 \\1', + ), + 279 => + array ( + 'match' => '0D47 0D17 (0D4D)', + 'replace' => '0D17 \\1', + ), + 280 => + array ( + 'match' => '0D47 0D18 (0D4D)', + 'replace' => '0D18 \\1', + ), + 281 => + array ( + 'match' => '0D47 0D19 (0D4D)', + 'replace' => '0D19 \\1', + ), + 282 => + array ( + 'match' => '0D47 0D1A (0D4D)', + 'replace' => '0D1A \\1', + ), + 283 => + array ( + 'match' => '0D47 0D1B (0D4D)', + 'replace' => '0D1B \\1', + ), + 284 => + array ( + 'match' => '0D47 0D1C (0D4D)', + 'replace' => '0D1C \\1', + ), + 285 => + array ( + 'match' => '0D47 0D1D (0D4D)', + 'replace' => '0D1D \\1', + ), + 286 => + array ( + 'match' => '0D47 0D1E (0D4D)', + 'replace' => '0D1E \\1', + ), + 287 => + array ( + 'match' => '0D47 0D1F (0D4D)', + 'replace' => '0D1F \\1', + ), + 288 => + array ( + 'match' => '0D47 0D20 (0D4D)', + 'replace' => '0D20 \\1', + ), + 289 => + array ( + 'match' => '0D47 0D21 (0D4D)', + 'replace' => '0D21 \\1', + ), + 290 => + array ( + 'match' => '0D47 0D22 (0D4D)', + 'replace' => '0D22 \\1', + ), + 291 => + array ( + 'match' => '0D47 0D23 (0D4D)', + 'replace' => '0D23 \\1', + ), + 292 => + array ( + 'match' => '0D47 0D24 (0D4D)', + 'replace' => '0D24 \\1', + ), + 293 => + array ( + 'match' => '0D47 0D25 (0D4D)', + 'replace' => '0D25 \\1', + ), + 294 => + array ( + 'match' => '0D47 0D26 (0D4D)', + 'replace' => '0D26 \\1', + ), + 295 => + array ( + 'match' => '0D47 0D27 (0D4D)', + 'replace' => '0D27 \\1', + ), + 296 => + array ( + 'match' => '0D47 0D28 (0D4D)', + 'replace' => '0D28 \\1', + ), + 297 => + array ( + 'match' => '0D47 0D2A (0D4D)', + 'replace' => '0D2A \\1', + ), + 298 => + array ( + 'match' => '0D47 0D2B (0D4D)', + 'replace' => '0D2B \\1', + ), + 299 => + array ( + 'match' => '0D47 0D2C (0D4D)', + 'replace' => '0D2C \\1', + ), + 300 => + array ( + 'match' => '0D47 0D2D (0D4D)', + 'replace' => '0D2D \\1', + ), + 301 => + array ( + 'match' => '0D47 0D2E (0D4D)', + 'replace' => '0D2E \\1', + ), + 302 => + array ( + 'match' => '0D47 0D2F (0D4D)', + 'replace' => '0D2F \\1', + ), + 303 => + array ( + 'match' => '0D47 0D30 (0D4D)', + 'replace' => '0D30 \\1', + ), + 304 => + array ( + 'match' => '0D47 0D31 (0D4D)', + 'replace' => '0D31 \\1', + ), + 305 => + array ( + 'match' => '0D47 0D32 (0D4D)', + 'replace' => '0D32 \\1', + ), + 306 => + array ( + 'match' => '0D47 0D33 (0D4D)', + 'replace' => '0D33 \\1', + ), + 307 => + array ( + 'match' => '0D47 0D34 (0D4D)', + 'replace' => '0D34 \\1', + ), + 308 => + array ( + 'match' => '0D47 0D35 (0D4D)', + 'replace' => '0D35 \\1', + ), + 309 => + array ( + 'match' => '0D47 0D36 (0D4D)', + 'replace' => '0D36 \\1', + ), + 310 => + array ( + 'match' => '0D47 0D37 (0D4D)', + 'replace' => '0D37 \\1', + ), + 311 => + array ( + 'match' => '0D47 0D38 (0D4D)', + 'replace' => '0D38 \\1', + ), + 312 => + array ( + 'match' => '0D47 0D39 (0D4D)', + 'replace' => '0D39 \\1', + ), + 313 => + array ( + 'match' => '0D48 0D15 (0D4D)', + 'replace' => '0D15 \\1', + ), + 314 => + array ( + 'match' => '0D48 0D16 (0D4D)', + 'replace' => '0D16 \\1', + ), + 315 => + array ( + 'match' => '0D48 0D17 (0D4D)', + 'replace' => '0D17 \\1', + ), + 316 => + array ( + 'match' => '0D48 0D18 (0D4D)', + 'replace' => '0D18 \\1', + ), + 317 => + array ( + 'match' => '0D48 0D19 (0D4D)', + 'replace' => '0D19 \\1', + ), + 318 => + array ( + 'match' => '0D48 0D1A (0D4D)', + 'replace' => '0D1A \\1', + ), + 319 => + array ( + 'match' => '0D48 0D1B (0D4D)', + 'replace' => '0D1B \\1', + ), + 320 => + array ( + 'match' => '0D48 0D1C (0D4D)', + 'replace' => '0D1C \\1', + ), + 321 => + array ( + 'match' => '0D48 0D1D (0D4D)', + 'replace' => '0D1D \\1', + ), + 322 => + array ( + 'match' => '0D48 0D1E (0D4D)', + 'replace' => '0D1E \\1', + ), + 323 => + array ( + 'match' => '0D48 0D1F (0D4D)', + 'replace' => '0D1F \\1', + ), + 324 => + array ( + 'match' => '0D48 0D20 (0D4D)', + 'replace' => '0D20 \\1', + ), + 325 => + array ( + 'match' => '0D48 0D21 (0D4D)', + 'replace' => '0D21 \\1', + ), + 326 => + array ( + 'match' => '0D48 0D22 (0D4D)', + 'replace' => '0D22 \\1', + ), + 327 => + array ( + 'match' => '0D48 0D23 (0D4D)', + 'replace' => '0D23 \\1', + ), + 328 => + array ( + 'match' => '0D48 0D24 (0D4D)', + 'replace' => '0D24 \\1', + ), + 329 => + array ( + 'match' => '0D48 0D25 (0D4D)', + 'replace' => '0D25 \\1', + ), + 330 => + array ( + 'match' => '0D48 0D26 (0D4D)', + 'replace' => '0D26 \\1', + ), + 331 => + array ( + 'match' => '0D48 0D27 (0D4D)', + 'replace' => '0D27 \\1', + ), + 332 => + array ( + 'match' => '0D48 0D28 (0D4D)', + 'replace' => '0D28 \\1', + ), + 333 => + array ( + 'match' => '0D48 0D2A (0D4D)', + 'replace' => '0D2A \\1', + ), + 334 => + array ( + 'match' => '0D48 0D2B (0D4D)', + 'replace' => '0D2B \\1', + ), + 335 => + array ( + 'match' => '0D48 0D2C (0D4D)', + 'replace' => '0D2C \\1', + ), + 336 => + array ( + 'match' => '0D48 0D2D (0D4D)', + 'replace' => '0D2D \\1', + ), + 337 => + array ( + 'match' => '0D48 0D2E (0D4D)', + 'replace' => '0D2E \\1', + ), + 338 => + array ( + 'match' => '0D48 0D2F (0D4D)', + 'replace' => '0D2F \\1', + ), + 339 => + array ( + 'match' => '0D48 0D30 (0D4D)', + 'replace' => '0D30 \\1', + ), + 340 => + array ( + 'match' => '0D48 0D31 (0D4D)', + 'replace' => '0D31 \\1', + ), + 341 => + array ( + 'match' => '0D48 0D32 (0D4D)', + 'replace' => '0D32 \\1', + ), + 342 => + array ( + 'match' => '0D48 0D33 (0D4D)', + 'replace' => '0D33 \\1', + ), + 343 => + array ( + 'match' => '0D48 0D34 (0D4D)', + 'replace' => '0D34 \\1', + ), + 344 => + array ( + 'match' => '0D48 0D35 (0D4D)', + 'replace' => '0D35 \\1', + ), + 345 => + array ( + 'match' => '0D48 0D36 (0D4D)', + 'replace' => '0D36 \\1', + ), + 346 => + array ( + 'match' => '0D48 0D37 (0D4D)', + 'replace' => '0D37 \\1', + ), + 347 => + array ( + 'match' => '0D48 0D38 (0D4D)', + 'replace' => '0D38 \\1', + ), + 348 => + array ( + 'match' => '0D48 0D39 (0D4D)', + 'replace' => '0D39 \\1', + ), + 349 => + array ( + 'match' => '0D41 0D4D', + 'replace' => 'E003', + ), + 350 => + array ( + 'match' => '007E', + 'replace' => '0D4D', + ), + 351 => + array ( + 'match' => '2018', + 'replace' => '0D4D', + ), + 352 => + array ( + 'match' => '2019', + 'replace' => '0D4D', + ), +); +?> \ No newline at end of file diff --git a/include/mpdf/includes/ind_or_1_001.volt.php b/include/mpdf/includes/ind_or_1_001.volt.php new file mode 100755 index 0000000000000000000000000000000000000000..b3c2769b20966d9fcbf0f9a4a2ed5ace1186cec0 --- /dev/null +++ b/include/mpdf/includes/ind_or_1_001.volt.php @@ -0,0 +1,2149 @@ +<?php + $volt = array ( + 0 => + array ( + 'match' => '0B4D 200C', + 'replace' => '2018', + ), + 1 => + array ( + 'match' => '0B15 0B4D 0B37', + 'replace' => 'E003', + ), + 2 => + array ( + 'match' => '0B1C 0B4D 0B1E', + 'replace' => 'E004', + ), + 3 => + array ( + 'match' => '((0B15|0B16|0B17|0B18|0B19|0B1A|0B1B|0B1C|0B1D|0B1E|0B1F|0B20|0B21|0B22|0B23|0B24|0B25|0B26|0B27|0B28|0B2A|0B2B|0B2C|0B2D|0B2E|0B2F|0B30|0B32|0B33|0B35|0B36|0B37|0B38|0B39|0B71|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) 0B30 0B4D', + 'replace' => '\\1 E069', + ), + 4 => + array ( + 'match' => '((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C)) 0B30 0B4D', + 'replace' => '\\1 E069', + ), + 5 => + array ( + 'match' => '((0B3E|0B40|E044|0B57|E068|E074|E08B|E08F)) 0B30 0B4D', + 'replace' => '\\1 E069', + ), + 6 => + array ( + 'match' => '(0B3C) 0B30 0B4D', + 'replace' => '\\1 E069', + ), + 7 => + array ( + 'match' => '(25CC) 0B30 0B4D', + 'replace' => '\\1 E069', + ), + 8 => + array ( + 'match' => '((0B15|0B19|0B1A|0B1B|0B1C|0B1D|0B1E|0B20|0B21|0B22|0B24|0B26|0B28|0B2C|0B2D|0B32|0B33|0B35|0B39|25CC)) E069', + 'replace' => '\\1 E06B', + ), + 9 => + array ( + 'match' => '((0B15|0B19|0B1A|0B1B|0B1C|0B1D|0B1E|0B20|0B21|0B22|0B24|0B26|0B28|0B2C|0B2D|0B32|0B33|0B35|0B39|25CC) 0B3C) E069', + 'replace' => '\\1 E06B', + ), + 10 => + array ( + 'match' => '0B38 0B4D 0B24 0B4D 0B30', + 'replace' => 'E01B', + ), + 11 => + array ( + 'match' => '0B28 0B4D 0B24 0B4D 0B30', + 'replace' => 'E01D', + ), + 12 => + array ( + 'match' => '0B28 0B4D 0B24 0B4D 0B30', + 'replace' => 'E01C', + ), + 13 => + array ( + 'match' => '0B56 E069', + 'replace' => 'E070', + ), + 14 => + array ( + 'match' => '0B57 E069', + 'replace' => 'E074', + ), + 15 => + array ( + 'match' => '0B3F E069', + 'replace' => 'E06D', + ), + 16 => + array ( + 'match' => '0B40 E069', + 'replace' => 'E14D', + ), + 17 => + array ( + 'match' => '0B24 0B4D 0B17 0B4D 0B27', + 'replace' => 'E036', + ), + 18 => + array ( + 'match' => '0B24 0B4D 0B38 0B4D 0B28', + 'replace' => 'E030', + ), + 19 => + array ( + 'match' => '0B19 0B4D 0B15', + 'replace' => 'E005', + ), + 20 => + array ( + 'match' => '0B19 0B4D 0B16', + 'replace' => 'E006', + ), + 21 => + array ( + 'match' => '0B19 0B4D 0B17', + 'replace' => 'E007', + ), + 22 => + array ( + 'match' => '0B19 0B4D 0B18', + 'replace' => 'E008', + ), + 23 => + array ( + 'match' => '0B1A 0B4D 0B1A', + 'replace' => 'E009', + ), + 24 => + array ( + 'match' => '0B1F 0B4D 0B1F', + 'replace' => 'E00A', + ), + 25 => + array ( + 'match' => '0B24 0B4D 0B24', + 'replace' => 'E00B', + ), + 26 => + array ( + 'match' => '0B26 0B4D 0B27', + 'replace' => 'E00C', + ), + 27 => + array ( + 'match' => '0B26 0B4D 0B26', + 'replace' => 'E00D', + ), + 28 => + array ( + 'match' => '0B23 0B4D 0B23', + 'replace' => 'E00F', + ), + 29 => + array ( + 'match' => '0B1E 0B4D 0B1A', + 'replace' => 'E011', + ), + 30 => + array ( + 'match' => '0B1E 0B4D 0B1D', + 'replace' => 'E012', + ), + 31 => + array ( + 'match' => '0B1E 0B4D 0B1C', + 'replace' => 'E013', + ), + 32 => + array ( + 'match' => '0B26 0B4D 0B2D', + 'replace' => 'E014', + ), + 33 => + array ( + 'match' => '0B27 0B4D 0B27', + 'replace' => 'E015', + ), + 34 => + array ( + 'match' => '0B2C 0B4D 0B26', + 'replace' => 'E016', + ), + 35 => + array ( + 'match' => '0B28 0B4D 0B26', + 'replace' => 'E017', + ), + 36 => + array ( + 'match' => '0B28 0B4D 0B27', + 'replace' => 'E018', + ), + 37 => + array ( + 'match' => '0B2E 0B4D 0B2B', + 'replace' => 'E019', + ), + 38 => + array ( + 'match' => '0B2E 0B4D 0B2A', + 'replace' => 'E01A', + ), + 39 => + array ( + 'match' => '0B37 0B4D 0B23', + 'replace' => 'E010', + ), + 40 => + array ( + 'match' => '0B39 0B4D 0B28', + 'replace' => 'E01E', + ), + 41 => + array ( + 'match' => '0B39 0B4D 0B35', + 'replace' => 'E01F', + ), + 42 => + array ( + 'match' => '0B39 0B4D 0B2E', + 'replace' => 'E020', + ), + 43 => + array ( + 'match' => '0B1A 0B4D 0B1B', + 'replace' => 'E021', + ), + 44 => + array ( + 'match' => '0B1E 0B4D 0B1B', + 'replace' => 'E023', + ), + 45 => + array ( + 'match' => '0B2E 0B4D 0B2D', + 'replace' => 'E024', + ), + 46 => + array ( + 'match' => '0B28 0B4D 0B24', + 'replace' => 'E025', + ), + 47 => + array ( + 'match' => '0B38 0B4D 0B24', + 'replace' => 'E026', + ), + 48 => + array ( + 'match' => '0B2A 0B4D 0B24', + 'replace' => 'E027', + ), + 49 => + array ( + 'match' => '0B15 0B4D 0B24', + 'replace' => 'E028', + ), + 50 => + array ( + 'match' => '0B23 0B4D 0B21', + 'replace' => 'E029', + ), + 51 => + array ( + 'match' => '0B24 0B4D 0B15', + 'replace' => 'E02A', + ), + 52 => + array ( + 'match' => '0B24 0B4D 0B38', + 'replace' => 'E02B', + ), + 53 => + array ( + 'match' => '0B24 0B4D 0B2A', + 'replace' => 'E02C', + ), + 54 => + array ( + 'match' => '0B23 0B4D 0B22', + 'replace' => 'E031', + ), + 55 => + array ( + 'match' => '0B36 0B4D 0B1B', + 'replace' => 'E032', + ), + 56 => + array ( + 'match' => '0B24 0B4D 0B28', + 'replace' => 'E033', + ), + 57 => + array ( + 'match' => '0B24 0B4D 0B2E', + 'replace' => 'E034', + ), + 58 => + array ( + 'match' => '0B17 0B4D 0B27', + 'replace' => 'E035', + ), + 59 => + array ( + 'match' => '0B24 0B4D 0B2B', + 'replace' => 'E037', + ), + 60 => + array ( + 'match' => '0B2E 0B4D 0B2E', + 'replace' => 'E14A', + ), + 61 => + array ( + 'match' => '0B21 0B3C', + 'replace' => '0B5C', + ), + 62 => + array ( + 'match' => '0B22 0B3C', + 'replace' => '0B5D', + ), + 63 => + array ( + 'match' => '((0B15|0B16|0B17|0B18|0B19|0B1A|0B1B|0B1C|0B1D|0B1E|0B1F|0B20|0B21|0B22|0B23|0B24|0B25|0B26|0B27|0B28|0B2A|0B2B|0B2C|0B2D|0B2E|0B2F|0B30|0B32|0B33|0B35|0B36|0B37|0B38|0B39|0B71|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) 0B4D', + 'replace' => '\\1 2019', + ), + 64 => + array ( + 'match' => '((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C)) 0B4D', + 'replace' => '\\1 2019', + ), + 65 => + array ( + 'match' => '(E069) 0B4D', + 'replace' => '\\1 2019', + ), + 66 => + array ( + 'match' => '((0B41|E045|0B42|0B43|E053|E056|E059|0B3C)) 0B4D', + 'replace' => '\\1 2019', + ), + 67 => + array ( + 'match' => '(200D) 0B4D', + 'replace' => '\\1 2019', + ), + 68 => + array ( + 'match' => '(25CC) 0B4D', + 'replace' => '\\1 2019', + ), + 69 => + array ( + 'match' => '(0020) 0B4D', + 'replace' => '\\1 2019', + ), + 70 => + array ( + 'match' => '200D 2019', + 'replace' => '2019', + ), + 71 => + array ( + 'match' => '2019 0B30', + 'replace' => 'E075', + ), + 72 => + array ( + 'match' => '2019 0B5F', + 'replace' => 'E077', + ), + 73 => + array ( + 'match' => '2019 0B35', + 'replace' => 'E078', + ), + 74 => + array ( + 'match' => '2019 0B32', + 'replace' => 'E110', + ), + 75 => + array ( + 'match' => '2019 0B33', + 'replace' => 'E111', + ), + 76 => + array ( + 'match' => '2019 0B2E', + 'replace' => 'E11C', + ), + 77 => + array ( + 'match' => '2019 0B15', + 'replace' => 'E0F6', + ), + 78 => + array ( + 'match' => '2019 0B16', + 'replace' => 'E0F7', + ), + 79 => + array ( + 'match' => '2019 0B17', + 'replace' => 'E0F8', + ), + 80 => + array ( + 'match' => '2019 0B18', + 'replace' => 'E0F9', + ), + 81 => + array ( + 'match' => '2019 0B19', + 'replace' => 'E0FA', + ), + 82 => + array ( + 'match' => '2019 0B1A', + 'replace' => 'E0FB', + ), + 83 => + array ( + 'match' => '2019 0B1B', + 'replace' => 'E0FC', + ), + 84 => + array ( + 'match' => '2019 0B1C', + 'replace' => 'E0FD', + ), + 85 => + array ( + 'match' => '2019 0B1D', + 'replace' => 'E0FE', + ), + 86 => + array ( + 'match' => '2019 0B1E', + 'replace' => 'E0FF', + ), + 87 => + array ( + 'match' => '2019 0B1F', + 'replace' => 'E100', + ), + 88 => + array ( + 'match' => '2019 0B20', + 'replace' => 'E101', + ), + 89 => + array ( + 'match' => '2019 0B21', + 'replace' => 'E102', + ), + 90 => + array ( + 'match' => '2019 0B22', + 'replace' => 'E103', + ), + 91 => + array ( + 'match' => '2019 0B23', + 'replace' => 'E104', + ), + 92 => + array ( + 'match' => '2019 0B24', + 'replace' => 'E105', + ), + 93 => + array ( + 'match' => '2019 0B25', + 'replace' => 'E106', + ), + 94 => + array ( + 'match' => '2019 0B26', + 'replace' => 'E107', + ), + 95 => + array ( + 'match' => '2019 0B27', + 'replace' => 'E108', + ), + 96 => + array ( + 'match' => '2019 0B28', + 'replace' => 'E109', + ), + 97 => + array ( + 'match' => '2019 0B2A', + 'replace' => 'E10A', + ), + 98 => + array ( + 'match' => '2019 0B2B', + 'replace' => 'E10B', + ), + 99 => + array ( + 'match' => '2019 0B2C', + 'replace' => 'E10C', + ), + 100 => + array ( + 'match' => '2019 0B2D', + 'replace' => 'E10D', + ), + 101 => + array ( + 'match' => '2019 0B2E', + 'replace' => 'E10E', + ), + 102 => + array ( + 'match' => '2019 0B2F', + 'replace' => 'E10F', + ), + 103 => + array ( + 'match' => '2019 0B32', + 'replace' => 'E110', + ), + 104 => + array ( + 'match' => '2019 0B33', + 'replace' => 'E111', + ), + 105 => + array ( + 'match' => '2019 0B35', + 'replace' => 'E112', + ), + 106 => + array ( + 'match' => '2019 0B36', + 'replace' => 'E113', + ), + 107 => + array ( + 'match' => '2019 0B37', + 'replace' => 'E114', + ), + 108 => + array ( + 'match' => '2019 0B38', + 'replace' => 'E115', + ), + 109 => + array ( + 'match' => '2019 0B39', + 'replace' => 'E116', + ), + 110 => + array ( + 'match' => '2019 E003', + 'replace' => 'E119', + ), + 111 => + array ( + 'match' => '2019 E004', + 'replace' => 'E11A', + ), + 112 => + array ( + 'match' => '2019 0B35', + 'replace' => 'E078', + ), + 113 => + array ( + 'match' => '2019 0B71', + 'replace' => 'E078', + ), + 114 => + array ( + 'match' => '0B15 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E090 \\1', + ), + 115 => + array ( + 'match' => '0B16 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E091 \\1', + ), + 116 => + array ( + 'match' => '0B17 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E092 \\1', + ), + 117 => + array ( + 'match' => '0B18 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E093 \\1', + ), + 118 => + array ( + 'match' => '0B19 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E094 \\1', + ), + 119 => + array ( + 'match' => '0B1A ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E095 \\1', + ), + 120 => + array ( + 'match' => '0B1B ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E096 \\1', + ), + 121 => + array ( + 'match' => '0B1C ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E097 \\1', + ), + 122 => + array ( + 'match' => '0B1D ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E098 \\1', + ), + 123 => + array ( + 'match' => '0B1E ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E099 \\1', + ), + 124 => + array ( + 'match' => '0B1F ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09A \\1', + ), + 125 => + array ( + 'match' => '0B20 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09B \\1', + ), + 126 => + array ( + 'match' => '0B21 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09C \\1', + ), + 127 => + array ( + 'match' => '0B22 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09D \\1', + ), + 128 => + array ( + 'match' => '0B23 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09E \\1', + ), + 129 => + array ( + 'match' => '0B24 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09F \\1', + ), + 130 => + array ( + 'match' => '0B25 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A0 \\1', + ), + 131 => + array ( + 'match' => '0B26 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A1 \\1', + ), + 132 => + array ( + 'match' => '0B27 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A2 \\1', + ), + 133 => + array ( + 'match' => '0B28 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A3 \\1', + ), + 134 => + array ( + 'match' => '0B2A ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A4 \\1', + ), + 135 => + array ( + 'match' => '0B2B ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A5 \\1', + ), + 136 => + array ( + 'match' => '0B2C ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A6 \\1', + ), + 137 => + array ( + 'match' => '0B2D ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A7 \\1', + ), + 138 => + array ( + 'match' => '0B2E ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A8 \\1', + ), + 139 => + array ( + 'match' => '0B2F ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A9 \\1', + ), + 140 => + array ( + 'match' => '0B32 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AA \\1', + ), + 141 => + array ( + 'match' => '0B33 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AB \\1', + ), + 142 => + array ( + 'match' => '0B35 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AC \\1', + ), + 143 => + array ( + 'match' => '0B36 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AD \\1', + ), + 144 => + array ( + 'match' => '0B37 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AE \\1', + ), + 145 => + array ( + 'match' => '0B38 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AF \\1', + ), + 146 => + array ( + 'match' => '0B39 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0B0 \\1', + ), + 147 => + array ( + 'match' => 'E003 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0B1 \\1', + ), + 148 => + array ( + 'match' => 'E004 ((E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0B2 \\1', + ), + 149 => + array ( + 'match' => '0B15 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E090 \\1', + ), + 150 => + array ( + 'match' => '0B16 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E091 \\1', + ), + 151 => + array ( + 'match' => '0B17 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E092 \\1', + ), + 152 => + array ( + 'match' => '0B18 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E093 \\1', + ), + 153 => + array ( + 'match' => '0B19 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E094 \\1', + ), + 154 => + array ( + 'match' => '0B1A ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E095 \\1', + ), + 155 => + array ( + 'match' => '0B1B ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E096 \\1', + ), + 156 => + array ( + 'match' => '0B1C ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E097 \\1', + ), + 157 => + array ( + 'match' => '0B1D ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E098 \\1', + ), + 158 => + array ( + 'match' => '0B1E ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E099 \\1', + ), + 159 => + array ( + 'match' => '0B1F ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09A \\1', + ), + 160 => + array ( + 'match' => '0B20 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09B \\1', + ), + 161 => + array ( + 'match' => '0B21 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09C \\1', + ), + 162 => + array ( + 'match' => '0B22 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09D \\1', + ), + 163 => + array ( + 'match' => '0B23 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09E \\1', + ), + 164 => + array ( + 'match' => '0B24 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09F \\1', + ), + 165 => + array ( + 'match' => '0B25 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A0 \\1', + ), + 166 => + array ( + 'match' => '0B26 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A1 \\1', + ), + 167 => + array ( + 'match' => '0B27 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A2 \\1', + ), + 168 => + array ( + 'match' => '0B28 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A3 \\1', + ), + 169 => + array ( + 'match' => '0B2A ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A4 \\1', + ), + 170 => + array ( + 'match' => '0B2B ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A5 \\1', + ), + 171 => + array ( + 'match' => '0B2C ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A6 \\1', + ), + 172 => + array ( + 'match' => '0B2D ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A7 \\1', + ), + 173 => + array ( + 'match' => '0B2E ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A8 \\1', + ), + 174 => + array ( + 'match' => '0B2F ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A9 \\1', + ), + 175 => + array ( + 'match' => '0B32 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AA \\1', + ), + 176 => + array ( + 'match' => '0B33 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AB \\1', + ), + 177 => + array ( + 'match' => '0B35 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AC \\1', + ), + 178 => + array ( + 'match' => '0B36 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AD \\1', + ), + 179 => + array ( + 'match' => '0B37 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AE \\1', + ), + 180 => + array ( + 'match' => '0B38 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AF \\1', + ), + 181 => + array ( + 'match' => '0B39 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0B0 \\1', + ), + 182 => + array ( + 'match' => 'E003 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0B1 \\1', + ), + 183 => + array ( + 'match' => 'E004 ((0B01|0B3F|0B56|E06B|E041|E064|E06D|E070|E089|E08C) (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0B2 \\1', + ), + 184 => + array ( + 'match' => '0B15 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E090 \\1', + ), + 185 => + array ( + 'match' => '0B16 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E091 \\1', + ), + 186 => + array ( + 'match' => '0B17 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E092 \\1', + ), + 187 => + array ( + 'match' => '0B18 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E093 \\1', + ), + 188 => + array ( + 'match' => '0B19 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E094 \\1', + ), + 189 => + array ( + 'match' => '0B1A (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E095 \\1', + ), + 190 => + array ( + 'match' => '0B1B (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E096 \\1', + ), + 191 => + array ( + 'match' => '0B1C (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E097 \\1', + ), + 192 => + array ( + 'match' => '0B1D (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E098 \\1', + ), + 193 => + array ( + 'match' => '0B1E (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E099 \\1', + ), + 194 => + array ( + 'match' => '0B1F (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09A \\1', + ), + 195 => + array ( + 'match' => '0B20 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09B \\1', + ), + 196 => + array ( + 'match' => '0B21 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09C \\1', + ), + 197 => + array ( + 'match' => '0B22 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09D \\1', + ), + 198 => + array ( + 'match' => '0B23 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09E \\1', + ), + 199 => + array ( + 'match' => '0B24 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09F \\1', + ), + 200 => + array ( + 'match' => '0B25 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A0 \\1', + ), + 201 => + array ( + 'match' => '0B26 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A1 \\1', + ), + 202 => + array ( + 'match' => '0B27 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A2 \\1', + ), + 203 => + array ( + 'match' => '0B28 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A3 \\1', + ), + 204 => + array ( + 'match' => '0B2A (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A4 \\1', + ), + 205 => + array ( + 'match' => '0B2B (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A5 \\1', + ), + 206 => + array ( + 'match' => '0B2C (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A6 \\1', + ), + 207 => + array ( + 'match' => '0B2D (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A7 \\1', + ), + 208 => + array ( + 'match' => '0B2E (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A8 \\1', + ), + 209 => + array ( + 'match' => '0B2F (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A9 \\1', + ), + 210 => + array ( + 'match' => '0B32 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AA \\1', + ), + 211 => + array ( + 'match' => '0B33 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AB \\1', + ), + 212 => + array ( + 'match' => '0B35 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AC \\1', + ), + 213 => + array ( + 'match' => '0B36 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AD \\1', + ), + 214 => + array ( + 'match' => '0B37 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AE \\1', + ), + 215 => + array ( + 'match' => '0B38 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AF \\1', + ), + 216 => + array ( + 'match' => '0B39 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0B0 \\1', + ), + 217 => + array ( + 'match' => 'E003 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0B1 \\1', + ), + 218 => + array ( + 'match' => 'E004 (0B3C (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0B2 \\1', + ), + 219 => + array ( + 'match' => '0B15 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E090 \\1', + ), + 220 => + array ( + 'match' => '0B16 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E091 \\1', + ), + 221 => + array ( + 'match' => '0B17 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E092 \\1', + ), + 222 => + array ( + 'match' => '0B18 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E093 \\1', + ), + 223 => + array ( + 'match' => '0B19 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E094 \\1', + ), + 224 => + array ( + 'match' => '0B1A (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E095 \\1', + ), + 225 => + array ( + 'match' => '0B1B (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E096 \\1', + ), + 226 => + array ( + 'match' => '0B1C (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E097 \\1', + ), + 227 => + array ( + 'match' => '0B1D (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E098 \\1', + ), + 228 => + array ( + 'match' => '0B1E (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E099 \\1', + ), + 229 => + array ( + 'match' => '0B1F (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09A \\1', + ), + 230 => + array ( + 'match' => '0B20 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09B \\1', + ), + 231 => + array ( + 'match' => '0B21 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09C \\1', + ), + 232 => + array ( + 'match' => '0B22 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09D \\1', + ), + 233 => + array ( + 'match' => '0B23 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09E \\1', + ), + 234 => + array ( + 'match' => '0B24 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E09F \\1', + ), + 235 => + array ( + 'match' => '0B25 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A0 \\1', + ), + 236 => + array ( + 'match' => '0B26 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A1 \\1', + ), + 237 => + array ( + 'match' => '0B27 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A2 \\1', + ), + 238 => + array ( + 'match' => '0B28 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A3 \\1', + ), + 239 => + array ( + 'match' => '0B2A (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A4 \\1', + ), + 240 => + array ( + 'match' => '0B2B (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A5 \\1', + ), + 241 => + array ( + 'match' => '0B2C (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A6 \\1', + ), + 242 => + array ( + 'match' => '0B2D (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A7 \\1', + ), + 243 => + array ( + 'match' => '0B2E (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A8 \\1', + ), + 244 => + array ( + 'match' => '0B2F (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0A9 \\1', + ), + 245 => + array ( + 'match' => '0B32 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AA \\1', + ), + 246 => + array ( + 'match' => '0B33 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AB \\1', + ), + 247 => + array ( + 'match' => '0B35 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AC \\1', + ), + 248 => + array ( + 'match' => '0B36 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AD \\1', + ), + 249 => + array ( + 'match' => '0B37 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AE \\1', + ), + 250 => + array ( + 'match' => '0B38 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0AF \\1', + ), + 251 => + array ( + 'match' => '0B39 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0B0 \\1', + ), + 252 => + array ( + 'match' => 'E003 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0B1 \\1', + ), + 253 => + array ( + 'match' => 'E004 (E069 (E07B|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E11B|E11C))', + 'replace' => 'E0B2 \\1', + ), + 254 => + array ( + 'match' => '0B25 0B3F', + 'replace' => 'E02D', + ), + 255 => + array ( + 'match' => '0B27 0B3F', + 'replace' => 'E02E', + ), + 256 => + array ( + 'match' => '0B16 0B3F', + 'replace' => 'E02F', + ), + 257 => + array ( + 'match' => '(0B3C) 0B4D', + 'replace' => '\\1 E063', + ), + 258 => + array ( + 'match' => '(0B3C) E075', + 'replace' => '\\1 E076', + ), + 259 => + array ( + 'match' => '2018', + 'replace' => '0B4D', + ), + 260 => + array ( + 'match' => '2019', + 'replace' => '0B4D', + ), + 261 => + array ( + 'match' => '((0B16|0B17|0B18|0B1F|0B23|0B25|0B27|0B2A|0B2B|0B2E|0B2F|0B37|0B38)) 0B01', + 'replace' => '\\1 E039', + ), + 262 => + array ( + 'match' => '((E003|E006|E007|E008|E019|E01A|E00F|E010|E015|E01B|E024|E026|E027|E029|E14A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E034|E035|E036|E037)) 0B01', + 'replace' => '\\1 E039', + ), + 263 => + array ( + 'match' => '0B3F 0B01', + 'replace' => 'E041', + ), + 264 => + array ( + 'match' => 'E03F 0B01', + 'replace' => 'E041', + ), + 265 => + array ( + 'match' => 'E040 0B01', + 'replace' => 'E042', + ), + 266 => + array ( + 'match' => '0B40 0B01', + 'replace' => 'E044', + ), + 267 => + array ( + 'match' => '0B57 0B01', + 'replace' => 'E068', + ), + 268 => + array ( + 'match' => '0B56 0B01', + 'replace' => 'E064', + ), + 269 => + array ( + 'match' => 'E05D 0B01', + 'replace' => 'E064', + ), + 270 => + array ( + 'match' => 'E05E 0B01', + 'replace' => 'E065', + ), + 271 => + array ( + 'match' => 'E05F 0B01', + 'replace' => 'E066', + ), + 272 => + array ( + 'match' => 'E060 0B01', + 'replace' => 'E067', + ), + 273 => + array ( + 'match' => 'E06D 0B01', + 'replace' => 'E089', + ), + 274 => + array ( + 'match' => 'E06E 0B01', + 'replace' => 'E08A', + ), + 275 => + array ( + 'match' => 'E070 0B01', + 'replace' => 'E08C', + ), + 276 => + array ( + 'match' => 'E071 0B01', + 'replace' => 'E08D', + ), + 277 => + array ( + 'match' => 'E072 0B01', + 'replace' => 'E08E', + ), + 278 => + array ( + 'match' => 'E074 0B01', + 'replace' => 'E08F', + ), + 279 => + array ( + 'match' => '((E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E07B|E084)) 0B3C', + 'replace' => '\\1 E03C', + ), + 280 => + array ( + 'match' => '((E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E07B|E084)) 0B41', + 'replace' => '\\1 E048', + ), + 281 => + array ( + 'match' => '((E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E07B|E084)) 0B42', + 'replace' => '\\1 E04B', + ), + 282 => + array ( + 'match' => '((E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E07B|E084)) 0B43', + 'replace' => '\\1 E04F', + ), + 283 => + array ( + 'match' => '((E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E07B|E084)) E053', + 'replace' => '\\1 E054', + ), + 284 => + array ( + 'match' => '((E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E07B|E084)) E056', + 'replace' => '\\1 E057', + ), + 285 => + array ( + 'match' => '((E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E07B|E084)) E059', + 'replace' => '\\1 E05A', + ), + 286 => + array ( + 'match' => '((E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E07B|E084)) 0B4D', + 'replace' => '\\1 E062', + ), + 287 => + array ( + 'match' => '((E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E07B|E084)) E075', + 'replace' => '\\1 E076', + ), + 288 => + array ( + 'match' => '((E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E07B|E084)) E07B', + 'replace' => '\\1 E07C', + ), + 289 => + array ( + 'match' => '((E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E07B|E084)) E07D', + 'replace' => '\\1 E07F', + ), + 290 => + array ( + 'match' => '((E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E07B|E084)) E082', + 'replace' => '\\1 E083', + ), + 291 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) 0B3C', + 'replace' => '\\1 E03C', + ), + 292 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) 0B41', + 'replace' => '\\1 E048', + ), + 293 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) 0B42', + 'replace' => '\\1 E04B', + ), + 294 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) 0B43', + 'replace' => '\\1 E04F', + ), + 295 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) E053', + 'replace' => '\\1 E054', + ), + 296 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) E056', + 'replace' => '\\1 E057', + ), + 297 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) E059', + 'replace' => '\\1 E05A', + ), + 298 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) 0B4D', + 'replace' => '\\1 E062', + ), + 299 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) E075', + 'replace' => '\\1 E076', + ), + 300 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) E07B', + 'replace' => '\\1 E07C', + ), + 301 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) E07D', + 'replace' => '\\1 E07F', + ), + 302 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) E082', + 'replace' => '\\1 E083', + ), + 303 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069) 0B3C', + 'replace' => '\\1 E03C', + ), + 304 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069) 0B41', + 'replace' => '\\1 E048', + ), + 305 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069) 0B42', + 'replace' => '\\1 E04B', + ), + 306 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069) 0B43', + 'replace' => '\\1 E04F', + ), + 307 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069) E053', + 'replace' => '\\1 E054', + ), + 308 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069) E056', + 'replace' => '\\1 E057', + ), + 309 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069) E059', + 'replace' => '\\1 E05A', + ), + 310 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069) 0B4D', + 'replace' => '\\1 E062', + ), + 311 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069) E075', + 'replace' => '\\1 E076', + ), + 312 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069) E07B', + 'replace' => '\\1 E07C', + ), + 313 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069) E07D', + 'replace' => '\\1 E07F', + ), + 314 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069) E082', + 'replace' => '\\1 E083', + ), + 315 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069 0B01) 0B3C', + 'replace' => '\\1 E03C', + ), + 316 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069 0B01) 0B41', + 'replace' => '\\1 E048', + ), + 317 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069 0B01) 0B42', + 'replace' => '\\1 E04B', + ), + 318 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069 0B01) 0B43', + 'replace' => '\\1 E04F', + ), + 319 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069 0B01) E053', + 'replace' => '\\1 E054', + ), + 320 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069 0B01) E056', + 'replace' => '\\1 E057', + ), + 321 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069 0B01) E059', + 'replace' => '\\1 E05A', + ), + 322 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069 0B01) 0B4D', + 'replace' => '\\1 E062', + ), + 323 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069 0B01) E075', + 'replace' => '\\1 E076', + ), + 324 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069 0B01) E07B', + 'replace' => '\\1 E07C', + ), + 325 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069 0B01) E07D', + 'replace' => '\\1 E07F', + ), + 326 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037) E069 0B01) E082', + 'replace' => '\\1 E083', + ), + 327 => + array ( + 'match' => '(E02B) 0B3C', + 'replace' => '\\1 E03C', + ), + 328 => + array ( + 'match' => '(E02B) 0B41', + 'replace' => '\\1 E048', + ), + 329 => + array ( + 'match' => '(E02B) 0B42', + 'replace' => '\\1 E04B', + ), + 330 => + array ( + 'match' => '(E02B) 0B43', + 'replace' => '\\1 E04F', + ), + 331 => + array ( + 'match' => '(E02B) E053', + 'replace' => '\\1 E054', + ), + 332 => + array ( + 'match' => '(E02B) E056', + 'replace' => '\\1 E057', + ), + 333 => + array ( + 'match' => '(E02B) E059', + 'replace' => '\\1 E05A', + ), + 334 => + array ( + 'match' => '(E02B) 0B4D', + 'replace' => '\\1 E062', + ), + 335 => + array ( + 'match' => '(E02B) E075', + 'replace' => '\\1 E076', + ), + 336 => + array ( + 'match' => '(E02B) E07B', + 'replace' => '\\1 E07C', + ), + 337 => + array ( + 'match' => '(E02B) E07D', + 'replace' => '\\1 E07F', + ), + 338 => + array ( + 'match' => '(E02B) E082', + 'replace' => '\\1 E083', + ), + 339 => + array ( + 'match' => '(E02C) 0B3C', + 'replace' => '\\1 E03C', + ), + 340 => + array ( + 'match' => '(E02C) 0B41', + 'replace' => '\\1 E048', + ), + 341 => + array ( + 'match' => '(E02C) 0B42', + 'replace' => '\\1 E04B', + ), + 342 => + array ( + 'match' => '(E02C) 0B43', + 'replace' => '\\1 E04F', + ), + 343 => + array ( + 'match' => '(E02C) E053', + 'replace' => '\\1 E054', + ), + 344 => + array ( + 'match' => '(E02C) E056', + 'replace' => '\\1 E057', + ), + 345 => + array ( + 'match' => '(E02C) E059', + 'replace' => '\\1 E05A', + ), + 346 => + array ( + 'match' => '(E02C) 0B4D', + 'replace' => '\\1 E062', + ), + 347 => + array ( + 'match' => '(E02C) E075', + 'replace' => '\\1 E076', + ), + 348 => + array ( + 'match' => '(E02C) E07B', + 'replace' => '\\1 E07C', + ), + 349 => + array ( + 'match' => '(E02C) E07D', + 'replace' => '\\1 E07F', + ), + 350 => + array ( + 'match' => '(E02C) E082', + 'replace' => '\\1 E083', + ), + 351 => + array ( + 'match' => '(E06B) 0B3C', + 'replace' => '\\1 E03C', + ), + 352 => + array ( + 'match' => '(E06B) 0B41', + 'replace' => '\\1 E048', + ), + 353 => + array ( + 'match' => '(E06B) 0B42', + 'replace' => '\\1 E04B', + ), + 354 => + array ( + 'match' => '(E06B) 0B43', + 'replace' => '\\1 E04F', + ), + 355 => + array ( + 'match' => '(E06B) E053', + 'replace' => '\\1 E054', + ), + 356 => + array ( + 'match' => '(E06B) E056', + 'replace' => '\\1 E057', + ), + 357 => + array ( + 'match' => '(E06B) E059', + 'replace' => '\\1 E05A', + ), + 358 => + array ( + 'match' => '(E06B) 0B4D', + 'replace' => '\\1 E062', + ), + 359 => + array ( + 'match' => '(E06B) E075', + 'replace' => '\\1 E076', + ), + 360 => + array ( + 'match' => '(E06B) E07B', + 'replace' => '\\1 E07C', + ), + 361 => + array ( + 'match' => '(E06B) E07D', + 'replace' => '\\1 E07F', + ), + 362 => + array ( + 'match' => '(E06B) E082', + 'replace' => '\\1 E083', + ), + 363 => + array ( + 'match' => '(0B3C) 0B3C', + 'replace' => '\\1 E03C', + ), + 364 => + array ( + 'match' => '(0B3C) 0B41', + 'replace' => '\\1 E048', + ), + 365 => + array ( + 'match' => '(0B3C) 0B42', + 'replace' => '\\1 E04B', + ), + 366 => + array ( + 'match' => '(0B3C) 0B43', + 'replace' => '\\1 E04F', + ), + 367 => + array ( + 'match' => '(0B3C) E053', + 'replace' => '\\1 E054', + ), + 368 => + array ( + 'match' => '(0B3C) E056', + 'replace' => '\\1 E057', + ), + 369 => + array ( + 'match' => '(0B3C) E059', + 'replace' => '\\1 E05A', + ), + 370 => + array ( + 'match' => '(0B3C) 0B4D', + 'replace' => '\\1 E062', + ), + 371 => + array ( + 'match' => '(0B3C) E075', + 'replace' => '\\1 E076', + ), + 372 => + array ( + 'match' => '(0B3C) E07B', + 'replace' => '\\1 E07C', + ), + 373 => + array ( + 'match' => '(0B3C) E07D', + 'replace' => '\\1 E07F', + ), + 374 => + array ( + 'match' => '(0B3C) E082', + 'replace' => '\\1 E083', + ), + 375 => + array ( + 'match' => '(E075) 0B3C', + 'replace' => '\\1 E03C', + ), + 376 => + array ( + 'match' => '(E075) 0B41', + 'replace' => '\\1 E048', + ), + 377 => + array ( + 'match' => '(E075) 0B42', + 'replace' => '\\1 E04B', + ), + 378 => + array ( + 'match' => '(E075) 0B43', + 'replace' => '\\1 E04F', + ), + 379 => + array ( + 'match' => '(E075) E053', + 'replace' => '\\1 E054', + ), + 380 => + array ( + 'match' => '(E075) E056', + 'replace' => '\\1 E057', + ), + 381 => + array ( + 'match' => '(E075) E059', + 'replace' => '\\1 E05A', + ), + 382 => + array ( + 'match' => '(E075) 0B4D', + 'replace' => '\\1 E062', + ), + 383 => + array ( + 'match' => '(E075) E075', + 'replace' => '\\1 E076', + ), + 384 => + array ( + 'match' => '(E075) E07B', + 'replace' => '\\1 E07C', + ), + 385 => + array ( + 'match' => '(E075) E07D', + 'replace' => '\\1 E07F', + ), + 386 => + array ( + 'match' => '(E075) E082', + 'replace' => '\\1 E083', + ), + 387 => + array ( + 'match' => '(E075) 0B41', + 'replace' => '\\1 E048', + ), + 388 => + array ( + 'match' => '(E075) 0B42', + 'replace' => '\\1 E04B', + ), + 389 => + array ( + 'match' => '(E075) 0B43', + 'replace' => '\\1 E04F', + ), + 390 => + array ( + 'match' => '(E075) E053', + 'replace' => '\\1 E054', + ), + 391 => + array ( + 'match' => '(E075) E056', + 'replace' => '\\1 E057', + ), + 392 => + array ( + 'match' => '(E075) E059', + 'replace' => '\\1 E05A', + ), + 393 => + array ( + 'match' => 'E14D 0B01', + 'replace' => 'E08B', + ), + 394 => + array ( + 'match' => 'E14D E038', + 'replace' => 'E08B', + ), + 395 => + array ( + 'match' => 'E14D E039', + 'replace' => 'E08B', + ), + 396 => + array ( + 'match' => 'E14D E149', + 'replace' => 'E08B', + ), + 397 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) E0FD', + 'replace' => '\\1 E11E', + ), + 398 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) E109', + 'replace' => '\\1 E121', + ), + 399 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) E110', + 'replace' => '\\1 E11F', + ), + 400 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) E111', + 'replace' => '\\1 E120', + ), + 401 => + array ( + 'match' => '((E00E|E00F|E010|E011|E012|E013|E01B|E01C|E01E|E01F|E020|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037)) E11C', + 'replace' => '\\1 E122', + ), + 402 => + array ( + 'match' => '(E076) 0B41', + 'replace' => '\\1 E048', + ), + 403 => + array ( + 'match' => '(E076) 0B42', + 'replace' => '\\1 E04B', + ), + 404 => + array ( + 'match' => '(E076) 0B43', + 'replace' => '\\1 E04F', + ), + 405 => + array ( + 'match' => '(E076) E053', + 'replace' => '\\1 E054', + ), + 406 => + array ( + 'match' => '(E076) E056', + 'replace' => '\\1 E057', + ), + 407 => + array ( + 'match' => '(E076) E059', + 'replace' => '\\1 E05A', + ), + 408 => + array ( + 'match' => '(E076) 0B4D', + 'replace' => '\\1 E062', + ), + 409 => + array ( + 'match' => '(E090) E10E', + 'replace' => '\\1 E11C', + ), + 410 => + array ( + 'match' => '(E0B1) E10E', + 'replace' => '\\1 E11C', + ), + 411 => + array ( + 'match' => '(E09F) E10E', + 'replace' => '\\1 E11C', + ), + 412 => + array ( + 'match' => '(E092) E10E', + 'replace' => '\\1 E11C', + ), + 413 => + array ( + 'match' => '(E0A8) E10E', + 'replace' => '\\1 E11C', + ), + 414 => + array ( + 'match' => '(E0A3) E106', + 'replace' => '\\1 E0FC', + ), + 415 => + array ( + 'match' => '(E0AF) E106', + 'replace' => '\\1 E0FC', + ), + 416 => + array ( + 'match' => '((0B16|0B17|0B18|0B1F|0B23|0B25|0B27|0B2A|0B2B|0B2E|0B2F|0B37|0B38)) 0B01', + 'replace' => '\\1 E039', + ), + 417 => + array ( + 'match' => '(0B10) 0B01', + 'replace' => '\\1 E149', + ), + 418 => + array ( + 'match' => '(0B14) 0B01', + 'replace' => '\\1 E149', + ), + 419 => + array ( + 'match' => '(E069) 0B01', + 'replace' => '\\1 E149', + ), + 420 => + array ( + 'match' => '(E06A) 0B01', + 'replace' => '\\1 E149', + ), + 421 => + array ( + 'match' => '(E06B) 0B01', + 'replace' => '\\1 E149', + ), + 422 => + array ( + 'match' => '(E06C) 0B01', + 'replace' => '\\1 E149', + ), + 423 => + array ( + 'match' => '0B21 0B4D (E035)', + 'replace' => 'E12F \\1', + ), + 424 => + array ( + 'match' => ' (E035)', + 'replace' => ' \\1', + ), + 425 => + array ( + 'match' => ' (E035)', + 'replace' => ' \\1', + ), + 426 => + array ( + 'match' => ' (E035)', + 'replace' => ' \\1', + ), + 427 => + array ( + 'match' => ' (E035)', + 'replace' => ' \\1', + ), + 428 => + array ( + 'match' => ' (E035)', + 'replace' => ' \\1', + ), +); +?> \ No newline at end of file diff --git a/include/mpdf/includes/ind_pa_1_001.volt.php b/include/mpdf/includes/ind_pa_1_001.volt.php new file mode 100755 index 0000000000000000000000000000000000000000..8404deb9f3b4aac89e79eb0afdefbdbe36a126ce --- /dev/null +++ b/include/mpdf/includes/ind_pa_1_001.volt.php @@ -0,0 +1,1444 @@ +<?php + $volt = array ( + 0 => + array ( + 'match' => '0A4D 200C', + 'replace' => 'E055', + ), + 1 => + array ( + 'match' => '0A4D 200D', + 'replace' => 'E057', + ), + 2 => + array ( + 'match' => '((0A15|0A16|0A17|0A18|0A19|0A1A|0A1B|0A1C|0A1D|0A1E|0A1F|0A20|0A21|0A22|0A23|0A24|0A25|0A26|0A27|0A28|0A2A|0A2B|0A2C|0A2D|0A2E|0A2F|0A30|0A32|0A33|0A35|0A36|0A38|0A39|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|0A59|0A5A|0A5B|0A5C|0A5E)) 0A4D', + 'replace' => '\\1 E056', + ), + 3 => + array ( + 'match' => '(200D) 0A4D', + 'replace' => '\\1 E056', + ), + 4 => + array ( + 'match' => '(0020) 0A4D', + 'replace' => '\\1 E056', + ), + 5 => + array ( + 'match' => '(25CC) 0A4D', + 'replace' => '\\1 E056', + ), + 6 => + array ( + 'match' => '200D E056', + 'replace' => 'E056', + ), + 7 => + array ( + 'match' => '0A05 0A3C', + 'replace' => 'E02A', + ), + 8 => + array ( + 'match' => '0A06 0A3C', + 'replace' => 'E02B', + ), + 9 => + array ( + 'match' => '0A07 0A3C', + 'replace' => 'E02C', + ), + 10 => + array ( + 'match' => '0A08 0A3C', + 'replace' => 'E02D', + ), + 11 => + array ( + 'match' => '0A09 0A3C', + 'replace' => 'E02E', + ), + 12 => + array ( + 'match' => '0A0A 0A3C', + 'replace' => 'E02F', + ), + 13 => + array ( + 'match' => '0A0F 0A3C', + 'replace' => 'E030', + ), + 14 => + array ( + 'match' => '0A10 0A3C', + 'replace' => 'E031', + ), + 15 => + array ( + 'match' => '0A13 0A3C', + 'replace' => 'E032', + ), + 16 => + array ( + 'match' => '0A14 0A3C', + 'replace' => 'E033', + ), + 17 => + array ( + 'match' => '0A15 0A3C', + 'replace' => 'E034', + ), + 18 => + array ( + 'match' => '0A16 0A3C', + 'replace' => 'E035', + ), + 19 => + array ( + 'match' => '0A17 0A3C', + 'replace' => 'E036', + ), + 20 => + array ( + 'match' => '0A18 0A3C', + 'replace' => 'E037', + ), + 21 => + array ( + 'match' => '0A19 0A3C', + 'replace' => 'E038', + ), + 22 => + array ( + 'match' => '0A1A 0A3C', + 'replace' => 'E039', + ), + 23 => + array ( + 'match' => '0A1B 0A3C', + 'replace' => 'E03A', + ), + 24 => + array ( + 'match' => '0A1C 0A3C', + 'replace' => 'E03B', + ), + 25 => + array ( + 'match' => '0A1D 0A3C', + 'replace' => 'E03C', + ), + 26 => + array ( + 'match' => '0A1E 0A3C', + 'replace' => 'E03D', + ), + 27 => + array ( + 'match' => '0A1F 0A3C', + 'replace' => 'E03E', + ), + 28 => + array ( + 'match' => '0A20 0A3C', + 'replace' => 'E03F', + ), + 29 => + array ( + 'match' => '0A21 0A3C', + 'replace' => 'E040', + ), + 30 => + array ( + 'match' => '0A22 0A3C', + 'replace' => 'E041', + ), + 31 => + array ( + 'match' => '0A23 0A3C', + 'replace' => 'E042', + ), + 32 => + array ( + 'match' => '0A24 0A3C', + 'replace' => 'E043', + ), + 33 => + array ( + 'match' => '0A25 0A3C', + 'replace' => 'E044', + ), + 34 => + array ( + 'match' => '0A26 0A3C', + 'replace' => 'E045', + ), + 35 => + array ( + 'match' => '0A27 0A3C', + 'replace' => 'E046', + ), + 36 => + array ( + 'match' => '0A28 0A3C', + 'replace' => 'E047', + ), + 37 => + array ( + 'match' => '0A2A 0A3C', + 'replace' => 'E048', + ), + 38 => + array ( + 'match' => '0A2B 0A3C', + 'replace' => 'E049', + ), + 39 => + array ( + 'match' => '0A2C 0A3C', + 'replace' => 'E04A', + ), + 40 => + array ( + 'match' => '0A2D 0A3C', + 'replace' => 'E04B', + ), + 41 => + array ( + 'match' => '0A2E 0A3C', + 'replace' => 'E04C', + ), + 42 => + array ( + 'match' => '0A2F 0A3C', + 'replace' => 'E04D', + ), + 43 => + array ( + 'match' => '0A30 0A3C', + 'replace' => 'E04E', + ), + 44 => + array ( + 'match' => '0A32 0A3C', + 'replace' => 'E04F', + ), + 45 => + array ( + 'match' => '0A33 0A3C', + 'replace' => 'E050', + ), + 46 => + array ( + 'match' => '0A35 0A3C', + 'replace' => 'E051', + ), + 47 => + array ( + 'match' => '0A36 0A3C', + 'replace' => 'E052', + ), + 48 => + array ( + 'match' => '0A38 0A3C', + 'replace' => 'E053', + ), + 49 => + array ( + 'match' => '0A39 0A3C', + 'replace' => 'E054', + ), + 50 => + array ( + 'match' => 'E056 0A15', + 'replace' => 'E07B', + ), + 51 => + array ( + 'match' => 'E056 0A16', + 'replace' => 'E07C', + ), + 52 => + array ( + 'match' => 'E056 0A17', + 'replace' => 'E07D', + ), + 53 => + array ( + 'match' => 'E056 0A18', + 'replace' => 'E07E', + ), + 54 => + array ( + 'match' => 'E056 0A19', + 'replace' => 'E07F', + ), + 55 => + array ( + 'match' => 'E056 0A1A', + 'replace' => 'E080', + ), + 56 => + array ( + 'match' => 'E056 0A1B', + 'replace' => 'E081', + ), + 57 => + array ( + 'match' => 'E056 0A1C', + 'replace' => 'E082', + ), + 58 => + array ( + 'match' => 'E056 0A1D', + 'replace' => 'E083', + ), + 59 => + array ( + 'match' => 'E056 0A1E', + 'replace' => 'E084', + ), + 60 => + array ( + 'match' => 'E056 0A1F', + 'replace' => 'E085', + ), + 61 => + array ( + 'match' => 'E056 0A20', + 'replace' => 'E086', + ), + 62 => + array ( + 'match' => 'E056 0A21', + 'replace' => 'E087', + ), + 63 => + array ( + 'match' => 'E056 0A22', + 'replace' => 'E088', + ), + 64 => + array ( + 'match' => 'E056 0A23', + 'replace' => 'E089', + ), + 65 => + array ( + 'match' => 'E056 0A24', + 'replace' => 'E08A', + ), + 66 => + array ( + 'match' => 'E056 0A25', + 'replace' => 'E08B', + ), + 67 => + array ( + 'match' => 'E056 0A26', + 'replace' => 'E08C', + ), + 68 => + array ( + 'match' => 'E056 0A27', + 'replace' => 'E08D', + ), + 69 => + array ( + 'match' => 'E056 0A28', + 'replace' => 'E08E', + ), + 70 => + array ( + 'match' => 'E056 0A2A', + 'replace' => 'E08F', + ), + 71 => + array ( + 'match' => 'E056 0A2B', + 'replace' => 'E090', + ), + 72 => + array ( + 'match' => 'E056 0A2C', + 'replace' => 'E091', + ), + 73 => + array ( + 'match' => 'E056 0A2D', + 'replace' => 'E092', + ), + 74 => + array ( + 'match' => 'E056 0A2E', + 'replace' => 'E093', + ), + 75 => + array ( + 'match' => 'E056 0A2F', + 'replace' => 'E094', + ), + 76 => + array ( + 'match' => 'E056 0A30', + 'replace' => 'E095', + ), + 77 => + array ( + 'match' => 'E056 0A32', + 'replace' => 'E096', + ), + 78 => + array ( + 'match' => 'E056 0A35', + 'replace' => 'E097', + ), + 79 => + array ( + 'match' => 'E056 0A36', + 'replace' => 'E098', + ), + 80 => + array ( + 'match' => 'E056 0A38', + 'replace' => 'E099', + ), + 81 => + array ( + 'match' => 'E056 0A39', + 'replace' => 'E09A', + ), + 82 => + array ( + 'match' => 'E056 0A59', + 'replace' => 'E09B', + ), + 83 => + array ( + 'match' => 'E056 0A5A', + 'replace' => 'E09C', + ), + 84 => + array ( + 'match' => 'E056 0A5B', + 'replace' => 'E09D', + ), + 85 => + array ( + 'match' => 'E056 0A5C', + 'replace' => 'E09E', + ), + 86 => + array ( + 'match' => 'E056 0A5E', + 'replace' => 'E09F', + ), + 87 => + array ( + 'match' => 'E056 0A33', + 'replace' => 'E0BB', + ), + 88 => + array ( + 'match' => 'E07B ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A15 \\1', + ), + 89 => + array ( + 'match' => 'E07C ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A16 \\1', + ), + 90 => + array ( + 'match' => 'E07D ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A17 \\1', + ), + 91 => + array ( + 'match' => 'E07E ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A18 \\1', + ), + 92 => + array ( + 'match' => 'E07F ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A19 \\1', + ), + 93 => + array ( + 'match' => 'E080 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A1A \\1', + ), + 94 => + array ( + 'match' => 'E081 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A1B \\1', + ), + 95 => + array ( + 'match' => 'E082 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A1C \\1', + ), + 96 => + array ( + 'match' => 'E083 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A1D \\1', + ), + 97 => + array ( + 'match' => 'E084 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A1E \\1', + ), + 98 => + array ( + 'match' => 'E085 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A1F \\1', + ), + 99 => + array ( + 'match' => 'E086 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A20 \\1', + ), + 100 => + array ( + 'match' => 'E087 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A21 \\1', + ), + 101 => + array ( + 'match' => 'E088 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A22 \\1', + ), + 102 => + array ( + 'match' => 'E089 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A23 \\1', + ), + 103 => + array ( + 'match' => 'E08A ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A24 \\1', + ), + 104 => + array ( + 'match' => 'E08B ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A25 \\1', + ), + 105 => + array ( + 'match' => 'E08C ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A26 \\1', + ), + 106 => + array ( + 'match' => 'E08D ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A27 \\1', + ), + 107 => + array ( + 'match' => 'E08E ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A28 \\1', + ), + 108 => + array ( + 'match' => 'E08F ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A2A \\1', + ), + 109 => + array ( + 'match' => 'E090 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A2B \\1', + ), + 110 => + array ( + 'match' => 'E091 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A2C \\1', + ), + 111 => + array ( + 'match' => 'E092 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A2D \\1', + ), + 112 => + array ( + 'match' => 'E093 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A2E \\1', + ), + 113 => + array ( + 'match' => 'E094 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A2F \\1', + ), + 114 => + array ( + 'match' => 'E095 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A30 \\1', + ), + 115 => + array ( + 'match' => 'E096 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A32 \\1', + ), + 116 => + array ( + 'match' => 'E097 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A35 \\1', + ), + 117 => + array ( + 'match' => 'E098 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A36 \\1', + ), + 118 => + array ( + 'match' => 'E099 ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A38 \\1', + ), + 119 => + array ( + 'match' => 'E09A ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A39 \\1', + ), + 120 => + array ( + 'match' => 'E09B ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A59 \\1', + ), + 121 => + array ( + 'match' => 'E09C ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A5A \\1', + ), + 122 => + array ( + 'match' => 'E09D ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A5B \\1', + ), + 123 => + array ( + 'match' => 'E09E ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A5C \\1', + ), + 124 => + array ( + 'match' => 'E09F ((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F))', + 'replace' => '0A4D 0A5E \\1', + ), + 125 => + array ( + 'match' => '(0A3F (0A15|0A16|0A17|0A18|0A19|0A1A|0A1B|0A1C|0A1D|0A1E|0A1F|0A20|0A21|0A22|0A23|0A24|0A25|0A26|0A27|0A28|0A2A|0A2B|0A2C|0A2D|0A2E|0A2F|0A30|0A32|0A33|0A35|0A36|0A38|0A39|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|0A59|0A5A|0A5B|0A5C|0A5E)) 0A4D', + 'replace' => '\\1 0A4D 0A3F', + ), + 126 => + array ( + 'match' => '0A3F 0A15 (0A4D 0A3F)', + 'replace' => '0A15 \\1', + ), + 127 => + array ( + 'match' => '0A3F 0A16 (0A4D 0A3F)', + 'replace' => '0A16 \\1', + ), + 128 => + array ( + 'match' => '0A3F 0A17 (0A4D 0A3F)', + 'replace' => '0A17 \\1', + ), + 129 => + array ( + 'match' => '0A3F 0A18 (0A4D 0A3F)', + 'replace' => '0A18 \\1', + ), + 130 => + array ( + 'match' => '0A3F 0A19 (0A4D 0A3F)', + 'replace' => '0A19 \\1', + ), + 131 => + array ( + 'match' => '0A3F 0A1A (0A4D 0A3F)', + 'replace' => '0A1A \\1', + ), + 132 => + array ( + 'match' => '0A3F 0A1B (0A4D 0A3F)', + 'replace' => '0A1B \\1', + ), + 133 => + array ( + 'match' => '0A3F 0A1C (0A4D 0A3F)', + 'replace' => '0A1C \\1', + ), + 134 => + array ( + 'match' => '0A3F 0A1D (0A4D 0A3F)', + 'replace' => '0A1D \\1', + ), + 135 => + array ( + 'match' => '0A3F 0A1E (0A4D 0A3F)', + 'replace' => '0A1E \\1', + ), + 136 => + array ( + 'match' => '0A3F 0A1F (0A4D 0A3F)', + 'replace' => '0A1F \\1', + ), + 137 => + array ( + 'match' => '0A3F 0A20 (0A4D 0A3F)', + 'replace' => '0A20 \\1', + ), + 138 => + array ( + 'match' => '0A3F 0A21 (0A4D 0A3F)', + 'replace' => '0A21 \\1', + ), + 139 => + array ( + 'match' => '0A3F 0A22 (0A4D 0A3F)', + 'replace' => '0A22 \\1', + ), + 140 => + array ( + 'match' => '0A3F 0A23 (0A4D 0A3F)', + 'replace' => '0A23 \\1', + ), + 141 => + array ( + 'match' => '0A3F 0A24 (0A4D 0A3F)', + 'replace' => '0A24 \\1', + ), + 142 => + array ( + 'match' => '0A3F 0A25 (0A4D 0A3F)', + 'replace' => '0A25 \\1', + ), + 143 => + array ( + 'match' => '0A3F 0A26 (0A4D 0A3F)', + 'replace' => '0A26 \\1', + ), + 144 => + array ( + 'match' => '0A3F 0A27 (0A4D 0A3F)', + 'replace' => '0A27 \\1', + ), + 145 => + array ( + 'match' => '0A3F 0A28 (0A4D 0A3F)', + 'replace' => '0A28 \\1', + ), + 146 => + array ( + 'match' => '0A3F 0A2A (0A4D 0A3F)', + 'replace' => '0A2A \\1', + ), + 147 => + array ( + 'match' => '0A3F 0A2B (0A4D 0A3F)', + 'replace' => '0A2B \\1', + ), + 148 => + array ( + 'match' => '0A3F 0A2C (0A4D 0A3F)', + 'replace' => '0A2C \\1', + ), + 149 => + array ( + 'match' => '0A3F 0A2D (0A4D 0A3F)', + 'replace' => '0A2D \\1', + ), + 150 => + array ( + 'match' => '0A3F 0A2E (0A4D 0A3F)', + 'replace' => '0A2E \\1', + ), + 151 => + array ( + 'match' => '0A3F 0A2F (0A4D 0A3F)', + 'replace' => '0A2F \\1', + ), + 152 => + array ( + 'match' => '0A3F 0A30 (0A4D 0A3F)', + 'replace' => '0A30 \\1', + ), + 153 => + array ( + 'match' => '0A3F 0A32 (0A4D 0A3F)', + 'replace' => '0A32 \\1', + ), + 154 => + array ( + 'match' => '0A3F 0A33 (0A4D 0A3F)', + 'replace' => '0A33 \\1', + ), + 155 => + array ( + 'match' => '0A3F 0A35 (0A4D 0A3F)', + 'replace' => '0A35 \\1', + ), + 156 => + array ( + 'match' => '0A3F 0A36 (0A4D 0A3F)', + 'replace' => '0A36 \\1', + ), + 157 => + array ( + 'match' => '0A3F 0A38 (0A4D 0A3F)', + 'replace' => '0A38 \\1', + ), + 158 => + array ( + 'match' => '0A3F 0A39 (0A4D 0A3F)', + 'replace' => '0A39 \\1', + ), + 159 => + array ( + 'match' => '0A3F E034 (0A4D 0A3F)', + 'replace' => 'E034 \\1', + ), + 160 => + array ( + 'match' => '0A3F E035 (0A4D 0A3F)', + 'replace' => 'E035 \\1', + ), + 161 => + array ( + 'match' => '0A3F E036 (0A4D 0A3F)', + 'replace' => 'E036 \\1', + ), + 162 => + array ( + 'match' => '0A3F E037 (0A4D 0A3F)', + 'replace' => 'E037 \\1', + ), + 163 => + array ( + 'match' => '0A3F E038 (0A4D 0A3F)', + 'replace' => 'E038 \\1', + ), + 164 => + array ( + 'match' => '0A3F E039 (0A4D 0A3F)', + 'replace' => 'E039 \\1', + ), + 165 => + array ( + 'match' => '0A3F E03A (0A4D 0A3F)', + 'replace' => 'E03A \\1', + ), + 166 => + array ( + 'match' => '0A3F E03B (0A4D 0A3F)', + 'replace' => 'E03B \\1', + ), + 167 => + array ( + 'match' => '0A3F E03C (0A4D 0A3F)', + 'replace' => 'E03C \\1', + ), + 168 => + array ( + 'match' => '0A3F E03D (0A4D 0A3F)', + 'replace' => 'E03D \\1', + ), + 169 => + array ( + 'match' => '0A3F E03E (0A4D 0A3F)', + 'replace' => 'E03E \\1', + ), + 170 => + array ( + 'match' => '0A3F E03F (0A4D 0A3F)', + 'replace' => 'E03F \\1', + ), + 171 => + array ( + 'match' => '0A3F E040 (0A4D 0A3F)', + 'replace' => 'E040 \\1', + ), + 172 => + array ( + 'match' => '0A3F E041 (0A4D 0A3F)', + 'replace' => 'E041 \\1', + ), + 173 => + array ( + 'match' => '0A3F E042 (0A4D 0A3F)', + 'replace' => 'E042 \\1', + ), + 174 => + array ( + 'match' => '0A3F E043 (0A4D 0A3F)', + 'replace' => 'E043 \\1', + ), + 175 => + array ( + 'match' => '0A3F E044 (0A4D 0A3F)', + 'replace' => 'E044 \\1', + ), + 176 => + array ( + 'match' => '0A3F E045 (0A4D 0A3F)', + 'replace' => 'E045 \\1', + ), + 177 => + array ( + 'match' => '0A3F E046 (0A4D 0A3F)', + 'replace' => 'E046 \\1', + ), + 178 => + array ( + 'match' => '0A3F E047 (0A4D 0A3F)', + 'replace' => 'E047 \\1', + ), + 179 => + array ( + 'match' => '0A3F E048 (0A4D 0A3F)', + 'replace' => 'E048 \\1', + ), + 180 => + array ( + 'match' => '0A3F E049 (0A4D 0A3F)', + 'replace' => 'E049 \\1', + ), + 181 => + array ( + 'match' => '0A3F E04A (0A4D 0A3F)', + 'replace' => 'E04A \\1', + ), + 182 => + array ( + 'match' => '0A3F E04B (0A4D 0A3F)', + 'replace' => 'E04B \\1', + ), + 183 => + array ( + 'match' => '0A3F E04C (0A4D 0A3F)', + 'replace' => 'E04C \\1', + ), + 184 => + array ( + 'match' => '0A3F E04D (0A4D 0A3F)', + 'replace' => 'E04D \\1', + ), + 185 => + array ( + 'match' => '0A3F E04E (0A4D 0A3F)', + 'replace' => 'E04E \\1', + ), + 186 => + array ( + 'match' => '0A3F E04F (0A4D 0A3F)', + 'replace' => 'E04F \\1', + ), + 187 => + array ( + 'match' => '0A3F E050 (0A4D 0A3F)', + 'replace' => 'E050 \\1', + ), + 188 => + array ( + 'match' => '0A3F E051 (0A4D 0A3F)', + 'replace' => 'E051 \\1', + ), + 189 => + array ( + 'match' => '0A3F E052 (0A4D 0A3F)', + 'replace' => 'E052 \\1', + ), + 190 => + array ( + 'match' => '0A3F E053 (0A4D 0A3F)', + 'replace' => 'E053 \\1', + ), + 191 => + array ( + 'match' => '0A3F E054 (0A4D 0A3F)', + 'replace' => 'E054 \\1', + ), + 192 => + array ( + 'match' => '0A3F 0A59 (0A4D 0A3F)', + 'replace' => '0A59 \\1', + ), + 193 => + array ( + 'match' => '0A3F 0A5A (0A4D 0A3F)', + 'replace' => '0A5A \\1', + ), + 194 => + array ( + 'match' => '0A3F 0A5B (0A4D 0A3F)', + 'replace' => '0A5B \\1', + ), + 195 => + array ( + 'match' => '0A3F 0A5C (0A4D 0A3F)', + 'replace' => '0A5C \\1', + ), + 196 => + array ( + 'match' => '0A3F 0A5E (0A4D 0A3F)', + 'replace' => '0A5E \\1', + ), + 197 => + array ( + 'match' => 'E055', + 'replace' => '0A4D', + ), + 198 => + array ( + 'match' => 'E056', + 'replace' => '0A4D', + ), + 199 => + array ( + 'match' => 'E057', + 'replace' => '0A4D', + ), + 200 => + array ( + 'match' => '0A15 0A4D', + 'replace' => 'E004', + ), + 201 => + array ( + 'match' => '0A16 0A4D', + 'replace' => 'E005', + ), + 202 => + array ( + 'match' => '0A17 0A4D', + 'replace' => 'E006', + ), + 203 => + array ( + 'match' => '0A18 0A4D', + 'replace' => 'E007', + ), + 204 => + array ( + 'match' => '0A19 0A4D', + 'replace' => 'E008', + ), + 205 => + array ( + 'match' => '0A1A 0A4D', + 'replace' => 'E009', + ), + 206 => + array ( + 'match' => '0A1B 0A4D', + 'replace' => 'E00A', + ), + 207 => + array ( + 'match' => '0A1C 0A4D', + 'replace' => 'E00B', + ), + 208 => + array ( + 'match' => '0A1D 0A4D', + 'replace' => 'E00C', + ), + 209 => + array ( + 'match' => '0A1E 0A4D', + 'replace' => 'E00D', + ), + 210 => + array ( + 'match' => '0A1F 0A4D', + 'replace' => 'E00E', + ), + 211 => + array ( + 'match' => '0A20 0A4D', + 'replace' => 'E00F', + ), + 212 => + array ( + 'match' => '0A21 0A4D', + 'replace' => 'E010', + ), + 213 => + array ( + 'match' => '0A22 0A4D', + 'replace' => 'E011', + ), + 214 => + array ( + 'match' => '0A23 0A4D', + 'replace' => 'E012', + ), + 215 => + array ( + 'match' => '0A24 0A4D', + 'replace' => 'E013', + ), + 216 => + array ( + 'match' => '0A25 0A4D', + 'replace' => 'E014', + ), + 217 => + array ( + 'match' => '0A26 0A4D', + 'replace' => 'E015', + ), + 218 => + array ( + 'match' => '0A27 0A4D', + 'replace' => 'E016', + ), + 219 => + array ( + 'match' => '0A28 0A4D', + 'replace' => 'E017', + ), + 220 => + array ( + 'match' => '0A2A 0A4D', + 'replace' => 'E018', + ), + 221 => + array ( + 'match' => '0A2B 0A4D', + 'replace' => 'E019', + ), + 222 => + array ( + 'match' => '0A2C 0A4D', + 'replace' => 'E01A', + ), + 223 => + array ( + 'match' => '0A2D 0A4D', + 'replace' => 'E01B', + ), + 224 => + array ( + 'match' => '0A2E 0A4D', + 'replace' => 'E01C', + ), + 225 => + array ( + 'match' => '0A2F 0A4D', + 'replace' => 'E01D', + ), + 226 => + array ( + 'match' => '0A30 0A4D', + 'replace' => 'E01E', + ), + 227 => + array ( + 'match' => '0A32 0A4D', + 'replace' => 'E01F', + ), + 228 => + array ( + 'match' => '0A33 0A4D', + 'replace' => 'E020', + ), + 229 => + array ( + 'match' => '0A35 0A4D', + 'replace' => 'E021', + ), + 230 => + array ( + 'match' => '0A36 0A4D', + 'replace' => 'E022', + ), + 231 => + array ( + 'match' => '0A38 0A4D', + 'replace' => 'E023', + ), + 232 => + array ( + 'match' => '0A39 0A4D', + 'replace' => 'E024', + ), + 233 => + array ( + 'match' => '0A59 0A4D', + 'replace' => 'E025', + ), + 234 => + array ( + 'match' => '0A5A 0A4D', + 'replace' => 'E026', + ), + 235 => + array ( + 'match' => '0A5B 0A4D', + 'replace' => 'E027', + ), + 236 => + array ( + 'match' => '0A5C 0A4D', + 'replace' => 'E028', + ), + 237 => + array ( + 'match' => '0A5E 0A4D', + 'replace' => 'E029', + ), + 238 => + array ( + 'match' => '((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0BB)) 0A41', + 'replace' => '\\1 E002', + ), + 239 => + array ( + 'match' => '((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0BB)) 0A42', + 'replace' => '\\1 E003', + ), + 240 => + array ( + 'match' => '0A2F 0A4D', + 'replace' => 'E0A0', + ), + 241 => + array ( + 'match' => '0A09 0A02', + 'replace' => 'E0A1', + ), + 242 => + array ( + 'match' => '0A09 0A70', + 'replace' => 'E0A1', + ), + 243 => + array ( + 'match' => '0A0A 0A02', + 'replace' => 'E0A2', + ), + 244 => + array ( + 'match' => '0A0A 0A70', + 'replace' => 'E0A2', + ), + 245 => + array ( + 'match' => '0A13 0A02', + 'replace' => 'E0A3', + ), + 246 => + array ( + 'match' => '0A13 0A70', + 'replace' => 'E0A3', + ), + 247 => + array ( + 'match' => '0A05 0A02', + 'replace' => 'E0B4', + ), + 248 => + array ( + 'match' => '0A05 0A70', + 'replace' => 'E0B4', + ), + 249 => + array ( + 'match' => '0A06 0A02', + 'replace' => 'E0B5', + ), + 250 => + array ( + 'match' => '0A06 0A70', + 'replace' => 'E0B5', + ), + 251 => + array ( + 'match' => '0A07 0A02', + 'replace' => 'E0B6', + ), + 252 => + array ( + 'match' => '0A07 0A70', + 'replace' => 'E0B6', + ), + 253 => + array ( + 'match' => '0A08 0A02', + 'replace' => 'E0B7', + ), + 254 => + array ( + 'match' => '0A08 0A70', + 'replace' => 'E0B7', + ), + 255 => + array ( + 'match' => '0A0F 0A02', + 'replace' => 'E0B8', + ), + 256 => + array ( + 'match' => '0A0F 0A70', + 'replace' => 'E0B8', + ), + 257 => + array ( + 'match' => '0A10 0A02', + 'replace' => 'E0B9', + ), + 258 => + array ( + 'match' => '0A10 0A70', + 'replace' => 'E0B9', + ), + 259 => + array ( + 'match' => '0A14 0A02', + 'replace' => 'E0BA', + ), + 260 => + array ( + 'match' => '0A14 0A70', + 'replace' => 'E0BA', + ), + 261 => + array ( + 'match' => '((0A15|0A16|0A17|0A18|0A19|0A1A|0A1B|0A1C|0A1D|0A1E|0A1F|0A20|0A21|0A22|0A23|0A24|0A25|0A26|0A27|0A28|0A2A|0A2B|0A2C|0A2D|0A2E|0A2F|0A30|0A32|0A33|0A35|0A36|0A38|0A39|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|0A59|0A5A|0A5B|0A5C|0A5E)) 0A02', + 'replace' => '\\1 0A70', + ), + 262 => + array ( + 'match' => '((E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E02A|E02C)) 0A02', + 'replace' => '\\1 0A70', + ), + 263 => + array ( + 'match' => '((E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0BB)) 0A02', + 'replace' => '\\1 0A70', + ), + 264 => + array ( + 'match' => '(0A41) 0A02', + 'replace' => '\\1 0A70', + ), + 265 => + array ( + 'match' => '(0A42) 0A02', + 'replace' => '\\1 0A70', + ), + 266 => + array ( + 'match' => '(E002) 0A02', + 'replace' => '\\1 0A70', + ), + 267 => + array ( + 'match' => '(E003) 0A02', + 'replace' => '\\1 0A70', + ), + 268 => + array ( + 'match' => '0A3E 0A02', + 'replace' => 'E0A8', + ), + 269 => + array ( + 'match' => '0A3E 0A70', + 'replace' => 'E0A8', + ), + 270 => + array ( + 'match' => '0A40 0A02', + 'replace' => 'E0A9', + ), + 271 => + array ( + 'match' => '0A40 0A70', + 'replace' => 'E0A9', + ), + 272 => + array ( + 'match' => '0A47 0A02', + 'replace' => 'E0AA', + ), + 273 => + array ( + 'match' => '0A47 0A70', + 'replace' => 'E0AA', + ), + 274 => + array ( + 'match' => '0A48 0A02', + 'replace' => 'E0AB', + ), + 275 => + array ( + 'match' => '0A48 0A70', + 'replace' => 'E0AB', + ), + 276 => + array ( + 'match' => '0A4B 0A02', + 'replace' => 'E0AC', + ), + 277 => + array ( + 'match' => '0A4B 0A70', + 'replace' => 'E0AC', + ), + 278 => + array ( + 'match' => '0A4C 0A02', + 'replace' => 'E0AD', + ), + 279 => + array ( + 'match' => '0A4C 0A70', + 'replace' => 'E0AD', + ), + 280 => + array ( + 'match' => '0A3E 0A01', + 'replace' => 'E0AE', + ), + 281 => + array ( + 'match' => '0A40 0A01', + 'replace' => 'E0AF', + ), + 282 => + array ( + 'match' => '0A47 0A01', + 'replace' => 'E0B0', + ), + 283 => + array ( + 'match' => '0A48 0A01', + 'replace' => 'E0B1', + ), + 284 => + array ( + 'match' => '0A4B 0A01', + 'replace' => 'E0B2', + ), + 285 => + array ( + 'match' => '0A4C 0A01', + 'replace' => 'E0B3', + ), + 286 => + array ( + 'match' => '((0A08|0A0F|0A10|0A13|0A14|E0B6|E0B7|E0B8|E0B9|E0BA)) 0A01', + 'replace' => '\\1 E0A5', + ), + 287 => + array ( + 'match' => '((E0A8|E0A9|E0AA|E0AB|E0AC|E0AD)) 0A01', + 'replace' => '\\1 E0A5', + ), +); +?> \ No newline at end of file diff --git a/include/mpdf/includes/ind_ta_1_001.volt.php b/include/mpdf/includes/ind_ta_1_001.volt.php new file mode 100755 index 0000000000000000000000000000000000000000..ea6e6f25f3d52a97ae0553ac4466bc10a4c71613 --- /dev/null +++ b/include/mpdf/includes/ind_ta_1_001.volt.php @@ -0,0 +1,394 @@ +<?php + $volt = array ( + 0 => + array ( + 'match' => '0BCD 200D', + 'replace' => '014B', + ), + 1 => + array ( + 'match' => '0BCD 200C', + 'replace' => 'E002', + ), + 2 => + array ( + 'match' => '200D 0BCD', + 'replace' => '014A', + ), + 3 => + array ( + 'match' => '0B95 0BCD 0BB7', + 'replace' => 'E005', + ), + 4 => + array ( + 'match' => '0BB8 0BCD 0BB0 0BC0', + 'replace' => 'E04B', + ), + 5 => + array ( + 'match' => '0B93 0BAE 0BCD', + 'replace' => 'E04C', + ), + 6 => + array ( + 'match' => '(0BB8) 0BC1', + 'replace' => '\\1 E00C', + ), + 7 => + array ( + 'match' => '(0BB8) 0BC2', + 'replace' => '\\1 E00D', + ), + 8 => + array ( + 'match' => '0B95 0BC2', + 'replace' => 'E00F', + ), + 9 => + array ( + 'match' => '0B9C 0BC1', + 'replace' => 'E014', + ), + 10 => + array ( + 'match' => '0B9C 0BC2', + 'replace' => 'E015', + ), + 11 => + array ( + 'match' => '0B9F 0BBF', + 'replace' => 'E018', + ), + 12 => + array ( + 'match' => '0BB2 0BBF', + 'replace' => 'E033', + ), + 13 => + array ( + 'match' => '0BB7 0BBF', + 'replace' => 'E03F', + ), + 14 => + array ( + 'match' => '0BB7 0BC1', + 'replace' => 'E041', + ), + 15 => + array ( + 'match' => '0BB7 0BC2', + 'replace' => 'E042', + ), + 16 => + array ( + 'match' => '0BB8 0BBF', + 'replace' => 'E043', + ), + 17 => + array ( + 'match' => '0BB9 0BC1', + 'replace' => 'E045', + ), + 18 => + array ( + 'match' => '0BB9 0BC2', + 'replace' => 'E046', + ), + 19 => + array ( + 'match' => 'E005 0BBF', + 'replace' => 'E047', + ), + 20 => + array ( + 'match' => 'E005 0BC1', + 'replace' => 'E049', + ), + 21 => + array ( + 'match' => 'E005 0BC2', + 'replace' => 'E04A', + ), + 22 => + array ( + 'match' => '((0BAA|0BAF|0B99|0BB5)) 0BC0', + 'replace' => '\\1 E00B', + ), + 23 => + array ( + 'match' => '((0BAE|0B9A|0BB9|0B9C|0BB4|0BB1)) 0BBF', + 'replace' => '\\1 E006', + ), + 24 => + array ( + 'match' => '((0BB0|0BB3|0BA3|0BA9)) 0BBF', + 'replace' => '\\1 E007', + ), + 25 => + array ( + 'match' => '((0B95|0BA4)) 0BBF', + 'replace' => '\\1 E008', + ), + 26 => + array ( + 'match' => '((0BAA|0BAF|0B99|0BB5)) 0BBF', + 'replace' => '\\1 E009', + ), + 27 => + array ( + 'match' => '((0BA8|0B9E)) 0BBF', + 'replace' => '\\1 E00A', + ), + 28 => + array ( + 'match' => '0BA3 200C 0BC8', + 'replace' => 'E01F', + ), + 29 => + array ( + 'match' => '0BA9 200C 0BC8', + 'replace' => 'E027', + ), + 30 => + array ( + 'match' => '0BB2 200C 0BC8', + 'replace' => 'E037', + ), + 31 => + array ( + 'match' => '0BB3 200C 0BC8', + 'replace' => 'E03A', + ), + 32 => + array ( + 'match' => '0B9F 0BC0', + 'replace' => 'E019', + ), + 33 => + array ( + 'match' => '0BB2 0BC0', + 'replace' => 'E034', + ), + 34 => + array ( + 'match' => '0BB7 0BC0', + 'replace' => 'E040', + ), + 35 => + array ( + 'match' => '0BB8 0BC0', + 'replace' => 'E044', + ), + 36 => + array ( + 'match' => 'E005 0BC0', + 'replace' => 'E048', + ), + 37 => + array ( + 'match' => '0B95 0BC1', + 'replace' => 'E00E', + ), + 38 => + array ( + 'match' => '0B99 0BC1', + 'replace' => 'E010', + ), + 39 => + array ( + 'match' => '0B99 0BC2', + 'replace' => 'E011', + ), + 40 => + array ( + 'match' => '0B9A 0BC1', + 'replace' => 'E012', + ), + 41 => + array ( + 'match' => '0B9A 0BC2', + 'replace' => 'E013', + ), + 42 => + array ( + 'match' => '0B9E 0BC1', + 'replace' => 'E016', + ), + 43 => + array ( + 'match' => '0B9E 0BC2', + 'replace' => 'E017', + ), + 44 => + array ( + 'match' => '0B9F 0BC1', + 'replace' => 'E01A', + ), + 45 => + array ( + 'match' => '0B9F 0BC2', + 'replace' => 'E01B', + ), + 46 => + array ( + 'match' => '0BA3 200C 0BBE', + 'replace' => 'E01C', + ), + 47 => + array ( + 'match' => '0BA3 0BC1', + 'replace' => 'E01D', + ), + 48 => + array ( + 'match' => '0BA3 0BC2', + 'replace' => 'E01E', + ), + 49 => + array ( + 'match' => '0BA4 0BC1', + 'replace' => 'E020', + ), + 50 => + array ( + 'match' => '0BA4 0BC2', + 'replace' => 'E021', + ), + 51 => + array ( + 'match' => '0BA8 0BC1', + 'replace' => 'E022', + ), + 52 => + array ( + 'match' => '0BA8 0BC2', + 'replace' => 'E023', + ), + 53 => + array ( + 'match' => '0BA9 200C 0BBE', + 'replace' => 'E024', + ), + 54 => + array ( + 'match' => '0BA9 0BC1', + 'replace' => 'E025', + ), + 55 => + array ( + 'match' => '0BA9 0BC2', + 'replace' => 'E026', + ), + 56 => + array ( + 'match' => '0BAA 0BC1', + 'replace' => 'E028', + ), + 57 => + array ( + 'match' => '0BAA 0BC2', + 'replace' => 'E029', + ), + 58 => + array ( + 'match' => '0BAE 0BC1', + 'replace' => 'E02A', + ), + 59 => + array ( + 'match' => '0BAE 0BC2', + 'replace' => 'E02B', + ), + 60 => + array ( + 'match' => '0BAF 0BC1', + 'replace' => 'E02C', + ), + 61 => + array ( + 'match' => '0BAF 0BC2', + 'replace' => 'E02D', + ), + 62 => + array ( + 'match' => '0BB0 0BC1', + 'replace' => 'E02E', + ), + 63 => + array ( + 'match' => '0BB0 0BC2', + 'replace' => 'E02F', + ), + 64 => + array ( + 'match' => '0BB1 200C 0BBE', + 'replace' => 'E030', + ), + 65 => + array ( + 'match' => '0BB1 0BC1', + 'replace' => 'E031', + ), + 66 => + array ( + 'match' => '0BB1 0BC2', + 'replace' => 'E032', + ), + 67 => + array ( + 'match' => '0BB2 0BC1', + 'replace' => 'E035', + ), + 68 => + array ( + 'match' => '0BB2 0BC2', + 'replace' => 'E036', + ), + 69 => + array ( + 'match' => '0BB3 0BC1', + 'replace' => 'E038', + ), + 70 => + array ( + 'match' => '0BB3 0BC2', + 'replace' => 'E039', + ), + 71 => + array ( + 'match' => '0BB4 0BC1', + 'replace' => 'E03B', + ), + 72 => + array ( + 'match' => '0BB4 0BC2', + 'replace' => 'E03C', + ), + 73 => + array ( + 'match' => '0BB5 0BC1', + 'replace' => 'E03D', + ), + 74 => + array ( + 'match' => '0BB5 0BC2', + 'replace' => 'E03E', + ), + 75 => + array ( + 'match' => '014B', + 'replace' => '0BCD', + ), + 76 => + array ( + 'match' => 'E002', + 'replace' => '0BCD', + ), + 77 => + array ( + 'match' => '014A', + 'replace' => '0BCD', + ), +); +?> \ No newline at end of file diff --git a/include/mpdf/includes/ind_te_1_001.volt.php b/include/mpdf/includes/ind_te_1_001.volt.php new file mode 100755 index 0000000000000000000000000000000000000000..f46e83f9e5494f179976c235df0f11cec70f644f --- /dev/null +++ b/include/mpdf/includes/ind_te_1_001.volt.php @@ -0,0 +1,1489 @@ +<?php + $volt = array ( + 0 => + array ( + 'match' => '0C4D 0C30 ((0C15|0C16|0C17|0C18|0C19|0C1A|0C1B|0C1C|0C1D|0C1E|0C1F|0C20|0C21|0C22|0C23|0C24|0C25|0C26|0C27|0C28|0C2A|0C2B|0C2C|0C2D|0C2E|0C2F|0C30|0C31|0C32|0C33|0C35|0C36|0C37|0C38|0C39))', + 'replace' => 'E046 \\1', + ), + 1 => + array ( + 'match' => '0C4D 200D', + 'replace' => '00C9', + ), + 2 => + array ( + 'match' => '0C4D 200C', + 'replace' => '00D0', + ), + 3 => + array ( + 'match' => '200D 0C4D', + 'replace' => '00D1', + ), + 4 => + array ( + 'match' => '((0C15|0C16|0C17|0C18|0C19|0C1A|0C1B|0C1C|0C1D|0C1E|0C1F|0C20|0C21|0C22|0C23|0C24|0C25|0C26|0C27|0C28|0C2A|0C2B|0C2C|0C2D|0C2E|0C2F|0C30|0C31|0C32|0C33|0C35|0C36|0C37|0C38|0C39)) 0C4D', + 'replace' => '\\1 00D1', + ), + 5 => + array ( + 'match' => '((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C)) 0C4D', + 'replace' => '\\1 00D1', + ), + 6 => + array ( + 'match' => '((0C41|0C42|0C43|0C44)) 0C4D', + 'replace' => '\\1 00D1', + ), + 7 => + array ( + 'match' => '(0020) 0C4D', + 'replace' => '\\1 00D1', + ), + 8 => + array ( + 'match' => '(25CC) 0C4D', + 'replace' => '\\1 00D1', + ), + 9 => + array ( + 'match' => '0C15 00D1 0C37', + 'replace' => 'E078', + ), + 10 => + array ( + 'match' => '0C36 00D1 0C1C', + 'replace' => 'E079', + ), + 11 => + array ( + 'match' => '00D1 0C15', + 'replace' => 'E02C', + ), + 12 => + array ( + 'match' => '00D1 0C16', + 'replace' => 'E02D', + ), + 13 => + array ( + 'match' => '00D1 0C17', + 'replace' => 'E02E', + ), + 14 => + array ( + 'match' => '00D1 0C18', + 'replace' => 'E02F', + ), + 15 => + array ( + 'match' => '00D1 0C19', + 'replace' => 'E030', + ), + 16 => + array ( + 'match' => '00D1 0C1A', + 'replace' => 'E031', + ), + 17 => + array ( + 'match' => '00D1 0C1B', + 'replace' => 'E032', + ), + 18 => + array ( + 'match' => '00D1 0C1C', + 'replace' => 'E033', + ), + 19 => + array ( + 'match' => '00D1 0C1D', + 'replace' => 'E034', + ), + 20 => + array ( + 'match' => '00D1 0C1E', + 'replace' => 'E035', + ), + 21 => + array ( + 'match' => '00D1 0C1F', + 'replace' => 'E036', + ), + 22 => + array ( + 'match' => '00D1 0C20', + 'replace' => 'E037', + ), + 23 => + array ( + 'match' => '00D1 0C21', + 'replace' => 'E038', + ), + 24 => + array ( + 'match' => '00D1 0C22', + 'replace' => 'E039', + ), + 25 => + array ( + 'match' => '00D1 0C23', + 'replace' => 'E03A', + ), + 26 => + array ( + 'match' => '00D1 0C24', + 'replace' => 'E03B', + ), + 27 => + array ( + 'match' => '00D1 0C25', + 'replace' => 'E03C', + ), + 28 => + array ( + 'match' => '00D1 0C26', + 'replace' => 'E03D', + ), + 29 => + array ( + 'match' => '00D1 0C27', + 'replace' => 'E03E', + ), + 30 => + array ( + 'match' => '00D1 0C28', + 'replace' => 'E03F', + ), + 31 => + array ( + 'match' => '00D1 0C2A', + 'replace' => 'E040', + ), + 32 => + array ( + 'match' => '00D1 0C2B', + 'replace' => 'E041', + ), + 33 => + array ( + 'match' => '00D1 0C2C', + 'replace' => 'E042', + ), + 34 => + array ( + 'match' => '00D1 0C2D', + 'replace' => 'E043', + ), + 35 => + array ( + 'match' => '00D1 0C2E', + 'replace' => 'E044', + ), + 36 => + array ( + 'match' => '00D1 0C2F', + 'replace' => 'E045', + ), + 37 => + array ( + 'match' => '00D1 0C30', + 'replace' => 'E046', + ), + 38 => + array ( + 'match' => '00D1 0C31', + 'replace' => 'E047', + ), + 39 => + array ( + 'match' => '00D1 0C32', + 'replace' => 'E048', + ), + 40 => + array ( + 'match' => '00D1 0C33', + 'replace' => 'E049', + ), + 41 => + array ( + 'match' => '00D1 0C35', + 'replace' => 'E04A', + ), + 42 => + array ( + 'match' => '00D1 0C36', + 'replace' => 'E04B', + ), + 43 => + array ( + 'match' => '00D1 0C37', + 'replace' => 'E04C', + ), + 44 => + array ( + 'match' => '00D1 0C38', + 'replace' => 'E04D', + ), + 45 => + array ( + 'match' => '00D1 0C39', + 'replace' => 'E04E', + ), + 46 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E02C', + 'replace' => '\\1 E04F', + ), + 47 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E02D', + 'replace' => '\\1 E050', + ), + 48 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E02E', + 'replace' => '\\1 E051', + ), + 49 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E02F', + 'replace' => '\\1 E052', + ), + 50 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E030', + 'replace' => '\\1 E053', + ), + 51 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E031', + 'replace' => '\\1 E054', + ), + 52 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E032', + 'replace' => '\\1 E055', + ), + 53 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E033', + 'replace' => '\\1 E056', + ), + 54 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E034', + 'replace' => '\\1 E057', + ), + 55 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E035', + 'replace' => '\\1 E058', + ), + 56 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E036', + 'replace' => '\\1 E059', + ), + 57 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E037', + 'replace' => '\\1 E05A', + ), + 58 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E038', + 'replace' => '\\1 E05B', + ), + 59 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E039', + 'replace' => '\\1 E05C', + ), + 60 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E03A', + 'replace' => '\\1 E05D', + ), + 61 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E03B', + 'replace' => '\\1 E05E', + ), + 62 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E03C', + 'replace' => '\\1 E05F', + ), + 63 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E03D', + 'replace' => '\\1 E060', + ), + 64 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E03E', + 'replace' => '\\1 E061', + ), + 65 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E03F', + 'replace' => '\\1 E062', + ), + 66 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E040', + 'replace' => '\\1 E063', + ), + 67 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E041', + 'replace' => '\\1 E064', + ), + 68 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E042', + 'replace' => '\\1 E065', + ), + 69 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E043', + 'replace' => '\\1 E066', + ), + 70 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E044', + 'replace' => '\\1 E067', + ), + 71 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E045', + 'replace' => '\\1 E068', + ), + 72 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E046', + 'replace' => '\\1 E069', + ), + 73 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E047', + 'replace' => '\\1 E06A', + ), + 74 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E048', + 'replace' => '\\1 E06B', + ), + 75 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E049', + 'replace' => '\\1 E06C', + ), + 76 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E04A', + 'replace' => '\\1 E06D', + ), + 77 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E04B', + 'replace' => '\\1 E06E', + ), + 78 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E04C', + 'replace' => '\\1 E06F', + ), + 79 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E04D', + 'replace' => '\\1 E070', + ), + 80 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) E04E', + 'replace' => '\\1 E071', + ), + 81 => + array ( + 'match' => '((E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071)) E02C', + 'replace' => '\\1 E072', + ), + 82 => + array ( + 'match' => '((E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071)) E03F', + 'replace' => '\\1 E073', + ), + 83 => + array ( + 'match' => '((E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071)) E044', + 'replace' => '\\1 E074', + ), + 84 => + array ( + 'match' => '((E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071)) E045', + 'replace' => '\\1 E075', + ), + 85 => + array ( + 'match' => '((E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071)) E04A', + 'replace' => '\\1 E076', + ), + 86 => + array ( + 'match' => '((E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071)) E046', + 'replace' => '\\1 E077', + ), + 87 => + array ( + 'match' => '00C9', + 'replace' => '0C4D', + ), + 88 => + array ( + 'match' => '00D0', + 'replace' => '0C4D', + ), + 89 => + array ( + 'match' => '00D1', + 'replace' => '0C4D', + ), + 90 => + array ( + 'match' => '0C2A ((0C3E|0C4A|0C4B|0C4C))', + 'replace' => 'E028 \\1', + ), + 91 => + array ( + 'match' => '0C2B ((0C3E|0C4A|0C4B|0C4C))', + 'replace' => 'E029 \\1', + ), + 92 => + array ( + 'match' => '0C37 ((0C3E|0C4A|0C4B|0C4C))', + 'replace' => 'E02A \\1', + ), + 93 => + array ( + 'match' => '0C38 ((0C3E|0C4A|0C4B|0C4C))', + 'replace' => 'E02B \\1', + ), + 94 => + array ( + 'match' => 'E07B ((0C3E|0C4A|0C4B|0C4C))', + 'replace' => 'E0B2 \\1', + ), + 95 => + array ( + 'match' => '((E028|E029|E02A|E02B)) 0C4A', + 'replace' => '\\1 E009', + ), + 96 => + array ( + 'match' => '((E028|E029|E02A|E02B)) 0C4B', + 'replace' => '\\1 E00A', + ), + 97 => + array ( + 'match' => '((E028|E029|E02A|E02B)) 0C4C', + 'replace' => '\\1 E00B', + ), + 98 => + array ( + 'match' => '0C15 0C41', + 'replace' => 'E07F', + ), + 99 => + array ( + 'match' => '0C15 0C42', + 'replace' => 'E080', + ), + 100 => + array ( + 'match' => '0C16 0C3F', + 'replace' => 'E081', + ), + 101 => + array ( + 'match' => '0C16 0C40', + 'replace' => 'E082', + ), + 102 => + array ( + 'match' => '0C18 0C4A', + 'replace' => 'E083', + ), + 103 => + array ( + 'match' => '0C18 0C4B', + 'replace' => 'E084', + ), + 104 => + array ( + 'match' => '0C19 0C41', + 'replace' => 'E085', + ), + 105 => + array ( + 'match' => '0C19 0C42', + 'replace' => 'E086', + ), + 106 => + array ( + 'match' => '0C1A 0C3F', + 'replace' => 'E087', + ), + 107 => + array ( + 'match' => '0C1A 0C40', + 'replace' => 'E088', + ), + 108 => + array ( + 'match' => '0C1B 0C3F', + 'replace' => 'E089', + ), + 109 => + array ( + 'match' => '0C1B 0C40', + 'replace' => 'E08A', + ), + 110 => + array ( + 'match' => '0C1C 0C3F', + 'replace' => 'E08B', + ), + 111 => + array ( + 'match' => '0C1C 0C40', + 'replace' => 'E08C', + ), + 112 => + array ( + 'match' => '0C1C 0C41', + 'replace' => 'E08D', + ), + 113 => + array ( + 'match' => '0C1C 0C42', + 'replace' => 'E08E', + ), + 114 => + array ( + 'match' => '0C1D 0C4A', + 'replace' => 'E08F', + ), + 115 => + array ( + 'match' => '0C1D 0C4B', + 'replace' => 'E090', + ), + 116 => + array ( + 'match' => '0C24 0C3F', + 'replace' => 'E091', + ), + 117 => + array ( + 'match' => '0C24 0C40', + 'replace' => 'E092', + ), + 118 => + array ( + 'match' => '0C28 0C3F', + 'replace' => 'E093', + ), + 119 => + array ( + 'match' => '0C28 0C40', + 'replace' => 'E094', + ), + 120 => + array ( + 'match' => '0C2C 0C3F', + 'replace' => 'E095', + ), + 121 => + array ( + 'match' => '0C2C 0C40', + 'replace' => 'E096', + ), + 122 => + array ( + 'match' => '0C2D 0C3F', + 'replace' => 'E097', + ), + 123 => + array ( + 'match' => '0C2D 0C40', + 'replace' => 'E098', + ), + 124 => + array ( + 'match' => '0C2E 0C3F', + 'replace' => 'E099', + ), + 125 => + array ( + 'match' => '0C2E 0C40', + 'replace' => 'E09A', + ), + 126 => + array ( + 'match' => '0C2E 0C4A', + 'replace' => 'E09B', + ), + 127 => + array ( + 'match' => '0C2E 0C4B', + 'replace' => 'E09C', + ), + 128 => + array ( + 'match' => '0C2F 0C3F', + 'replace' => 'E09D', + ), + 129 => + array ( + 'match' => '0C2F 0C40', + 'replace' => 'E09E', + ), + 130 => + array ( + 'match' => '0C2F 0C4A', + 'replace' => 'E09F', + ), + 131 => + array ( + 'match' => '0C2F 0C4B', + 'replace' => 'E0A0', + ), + 132 => + array ( + 'match' => '0C32 0C3F', + 'replace' => 'E0A1', + ), + 133 => + array ( + 'match' => '0C32 0C40', + 'replace' => 'E0A2', + ), + 134 => + array ( + 'match' => '0C33 0C3F', + 'replace' => 'E0A3', + ), + 135 => + array ( + 'match' => '0C33 0C40', + 'replace' => 'E0A4', + ), + 136 => + array ( + 'match' => '0C35 0C3F', + 'replace' => 'E0A5', + ), + 137 => + array ( + 'match' => '0C35 0C40', + 'replace' => 'E0A6', + ), + 138 => + array ( + 'match' => '0C36 0C41', + 'replace' => 'E0A7', + ), + 139 => + array ( + 'match' => '0C36 0C42', + 'replace' => 'E0A8', + ), + 140 => + array ( + 'match' => '0C36 0C3F', + 'replace' => 'E0A9', + ), + 141 => + array ( + 'match' => '0C36 0C40', + 'replace' => 'E0AA', + ), + 142 => + array ( + 'match' => '0C39 0C3E', + 'replace' => 'E0AB', + ), + 143 => + array ( + 'match' => '0C39 0C41', + 'replace' => 'E0AC', + ), + 144 => + array ( + 'match' => '0C39 0C42', + 'replace' => 'E0AD', + ), + 145 => + array ( + 'match' => 'E078 0C41', + 'replace' => 'E0AE', + ), + 146 => + array ( + 'match' => 'E078 0C42', + 'replace' => 'E0AF', + ), + 147 => + array ( + 'match' => 'E07A 0C48', + 'replace' => 'E0B0', + ), + 148 => + array ( + 'match' => 'E07B 0C48', + 'replace' => 'E0B1', + ), + 149 => + array ( + 'match' => 'E07A 0C3F', + 'replace' => 'E0DA', + ), + 150 => + array ( + 'match' => 'E07A 0C40', + 'replace' => 'E0DB', + ), + 151 => + array ( + 'match' => 'E07B 0C3F', + 'replace' => 'E0DC', + ), + 152 => + array ( + 'match' => 'E07B 0C40', + 'replace' => 'E0DD', + ), + 153 => + array ( + 'match' => '0C15 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E00D \\1', + ), + 154 => + array ( + 'match' => '0C17 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E00E \\1', + ), + 155 => + array ( + 'match' => '0C18 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E00F \\1', + ), + 156 => + array ( + 'match' => '0C1A ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E010 \\1', + ), + 157 => + array ( + 'match' => '0C1B ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E011 \\1', + ), + 158 => + array ( + 'match' => '0C1C ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E012 \\1', + ), + 159 => + array ( + 'match' => '0C1D ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E013 \\1', + ), + 160 => + array ( + 'match' => '0C20 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E014 \\1', + ), + 161 => + array ( + 'match' => '0C21 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E015 \\1', + ), + 162 => + array ( + 'match' => '0C22 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E016 \\1', + ), + 163 => + array ( + 'match' => '0C24 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E017 \\1', + ), + 164 => + array ( + 'match' => '0C25 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E018 \\1', + ), + 165 => + array ( + 'match' => '0C26 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E019 \\1', + ), + 166 => + array ( + 'match' => '0C27 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E01A \\1', + ), + 167 => + array ( + 'match' => '0C28 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E01B \\1', + ), + 168 => + array ( + 'match' => '0C2A ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E01C \\1', + ), + 169 => + array ( + 'match' => '0C2B ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E01D \\1', + ), + 170 => + array ( + 'match' => '0C2D ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E01E \\1', + ), + 171 => + array ( + 'match' => '0C2E ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E01F \\1', + ), + 172 => + array ( + 'match' => '0C2F ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E020 \\1', + ), + 173 => + array ( + 'match' => '0C30 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E021 \\1', + ), + 174 => + array ( + 'match' => '0C33 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E022 \\1', + ), + 175 => + array ( + 'match' => '0C35 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E023 \\1', + ), + 176 => + array ( + 'match' => '0C36 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E024 \\1', + ), + 177 => + array ( + 'match' => '0C37 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E025 \\1', + ), + 178 => + array ( + 'match' => '0C38 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E026 \\1', + ), + 179 => + array ( + 'match' => '0C39 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E027 \\1', + ), + 180 => + array ( + 'match' => 'E078 ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E07C \\1', + ), + 181 => + array ( + 'match' => 'E07A ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E07D \\1', + ), + 182 => + array ( + 'match' => 'E07B ((0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C))', + 'replace' => 'E07E \\1', + ), + 183 => + array ( + 'match' => '0C15 (0C3E)', + 'replace' => 'E00D \\1', + ), + 184 => + array ( + 'match' => '0C17 (0C3E)', + 'replace' => 'E00E \\1', + ), + 185 => + array ( + 'match' => '0C18 (0C3E)', + 'replace' => 'E00F \\1', + ), + 186 => + array ( + 'match' => '0C1A (0C3E)', + 'replace' => 'E010 \\1', + ), + 187 => + array ( + 'match' => '0C1B (0C3E)', + 'replace' => 'E011 \\1', + ), + 188 => + array ( + 'match' => '0C1C (0C3E)', + 'replace' => 'E012 \\1', + ), + 189 => + array ( + 'match' => '0C1D (0C3E)', + 'replace' => 'E013 \\1', + ), + 190 => + array ( + 'match' => '0C20 (0C3E)', + 'replace' => 'E014 \\1', + ), + 191 => + array ( + 'match' => '0C21 (0C3E)', + 'replace' => 'E015 \\1', + ), + 192 => + array ( + 'match' => '0C22 (0C3E)', + 'replace' => 'E016 \\1', + ), + 193 => + array ( + 'match' => '0C24 (0C3E)', + 'replace' => 'E017 \\1', + ), + 194 => + array ( + 'match' => '0C25 (0C3E)', + 'replace' => 'E018 \\1', + ), + 195 => + array ( + 'match' => '0C26 (0C3E)', + 'replace' => 'E019 \\1', + ), + 196 => + array ( + 'match' => '0C27 (0C3E)', + 'replace' => 'E01A \\1', + ), + 197 => + array ( + 'match' => '0C28 (0C3E)', + 'replace' => 'E01B \\1', + ), + 198 => + array ( + 'match' => '0C2A (0C3E)', + 'replace' => 'E01C \\1', + ), + 199 => + array ( + 'match' => '0C2B (0C3E)', + 'replace' => 'E01D \\1', + ), + 200 => + array ( + 'match' => '0C2D (0C3E)', + 'replace' => 'E01E \\1', + ), + 201 => + array ( + 'match' => '0C2E (0C3E)', + 'replace' => 'E01F \\1', + ), + 202 => + array ( + 'match' => '0C2F (0C3E)', + 'replace' => 'E020 \\1', + ), + 203 => + array ( + 'match' => '0C30 (0C3E)', + 'replace' => 'E021 \\1', + ), + 204 => + array ( + 'match' => '0C33 (0C3E)', + 'replace' => 'E022 \\1', + ), + 205 => + array ( + 'match' => '0C35 (0C3E)', + 'replace' => 'E023 \\1', + ), + 206 => + array ( + 'match' => '0C36 (0C3E)', + 'replace' => 'E024 \\1', + ), + 207 => + array ( + 'match' => '0C37 (0C3E)', + 'replace' => 'E025 \\1', + ), + 208 => + array ( + 'match' => '0C38 (0C3E)', + 'replace' => 'E026 \\1', + ), + 209 => + array ( + 'match' => '0C39 (0C3E)', + 'replace' => 'E027 \\1', + ), + 210 => + array ( + 'match' => 'E078 (0C3E)', + 'replace' => 'E07C \\1', + ), + 211 => + array ( + 'match' => 'E07A (0C3E)', + 'replace' => 'E07D \\1', + ), + 212 => + array ( + 'match' => 'E07B (0C3E)', + 'replace' => 'E07E \\1', + ), + 213 => + array ( + 'match' => '0C15 (0C4C)', + 'replace' => 'E00D \\1', + ), + 214 => + array ( + 'match' => '0C17 (0C4C)', + 'replace' => 'E00E \\1', + ), + 215 => + array ( + 'match' => '0C18 (0C4C)', + 'replace' => 'E00F \\1', + ), + 216 => + array ( + 'match' => '0C1A (0C4C)', + 'replace' => 'E010 \\1', + ), + 217 => + array ( + 'match' => '0C1B (0C4C)', + 'replace' => 'E011 \\1', + ), + 218 => + array ( + 'match' => '0C1C (0C4C)', + 'replace' => 'E012 \\1', + ), + 219 => + array ( + 'match' => '0C1D (0C4C)', + 'replace' => 'E013 \\1', + ), + 220 => + array ( + 'match' => '0C20 (0C4C)', + 'replace' => 'E014 \\1', + ), + 221 => + array ( + 'match' => '0C21 (0C4C)', + 'replace' => 'E015 \\1', + ), + 222 => + array ( + 'match' => '0C22 (0C4C)', + 'replace' => 'E016 \\1', + ), + 223 => + array ( + 'match' => '0C24 (0C4C)', + 'replace' => 'E017 \\1', + ), + 224 => + array ( + 'match' => '0C25 (0C4C)', + 'replace' => 'E018 \\1', + ), + 225 => + array ( + 'match' => '0C26 (0C4C)', + 'replace' => 'E019 \\1', + ), + 226 => + array ( + 'match' => '0C27 (0C4C)', + 'replace' => 'E01A \\1', + ), + 227 => + array ( + 'match' => '0C28 (0C4C)', + 'replace' => 'E01B \\1', + ), + 228 => + array ( + 'match' => '0C2A (0C4C)', + 'replace' => 'E01C \\1', + ), + 229 => + array ( + 'match' => '0C2B (0C4C)', + 'replace' => 'E01D \\1', + ), + 230 => + array ( + 'match' => '0C2D (0C4C)', + 'replace' => 'E01E \\1', + ), + 231 => + array ( + 'match' => '0C2E (0C4C)', + 'replace' => 'E01F \\1', + ), + 232 => + array ( + 'match' => '0C2F (0C4C)', + 'replace' => 'E020 \\1', + ), + 233 => + array ( + 'match' => '0C30 (0C4C)', + 'replace' => 'E021 \\1', + ), + 234 => + array ( + 'match' => '0C33 (0C4C)', + 'replace' => 'E022 \\1', + ), + 235 => + array ( + 'match' => '0C35 (0C4C)', + 'replace' => 'E023 \\1', + ), + 236 => + array ( + 'match' => '0C36 (0C4C)', + 'replace' => 'E024 \\1', + ), + 237 => + array ( + 'match' => '0C37 (0C4C)', + 'replace' => 'E025 \\1', + ), + 238 => + array ( + 'match' => '0C38 (0C4C)', + 'replace' => 'E026 \\1', + ), + 239 => + array ( + 'match' => '0C39 (0C4C)', + 'replace' => 'E027 \\1', + ), + 240 => + array ( + 'match' => 'E078 (0C4C)', + 'replace' => 'E07C \\1', + ), + 241 => + array ( + 'match' => 'E07A (0C4C)', + 'replace' => 'E07D \\1', + ), + 242 => + array ( + 'match' => 'E07B (0C4C)', + 'replace' => 'E07E \\1', + ), + 243 => + array ( + 'match' => '0C15 (0C4D)', + 'replace' => 'E00D \\1', + ), + 244 => + array ( + 'match' => '0C17 (0C4D)', + 'replace' => 'E00E \\1', + ), + 245 => + array ( + 'match' => '0C18 (0C4D)', + 'replace' => 'E00F \\1', + ), + 246 => + array ( + 'match' => '0C1A (0C4D)', + 'replace' => 'E010 \\1', + ), + 247 => + array ( + 'match' => '0C1B (0C4D)', + 'replace' => 'E011 \\1', + ), + 248 => + array ( + 'match' => '0C1C (0C4D)', + 'replace' => 'E012 \\1', + ), + 249 => + array ( + 'match' => '0C1D (0C4D)', + 'replace' => 'E013 \\1', + ), + 250 => + array ( + 'match' => '0C20 (0C4D)', + 'replace' => 'E014 \\1', + ), + 251 => + array ( + 'match' => '0C21 (0C4D)', + 'replace' => 'E015 \\1', + ), + 252 => + array ( + 'match' => '0C22 (0C4D)', + 'replace' => 'E016 \\1', + ), + 253 => + array ( + 'match' => '0C24 (0C4D)', + 'replace' => 'E017 \\1', + ), + 254 => + array ( + 'match' => '0C25 (0C4D)', + 'replace' => 'E018 \\1', + ), + 255 => + array ( + 'match' => '0C26 (0C4D)', + 'replace' => 'E019 \\1', + ), + 256 => + array ( + 'match' => '0C27 (0C4D)', + 'replace' => 'E01A \\1', + ), + 257 => + array ( + 'match' => '0C28 (0C4D)', + 'replace' => 'E01B \\1', + ), + 258 => + array ( + 'match' => '0C2A (0C4D)', + 'replace' => 'E01C \\1', + ), + 259 => + array ( + 'match' => '0C2B (0C4D)', + 'replace' => 'E01D \\1', + ), + 260 => + array ( + 'match' => '0C2D (0C4D)', + 'replace' => 'E01E \\1', + ), + 261 => + array ( + 'match' => '0C2E (0C4D)', + 'replace' => 'E01F \\1', + ), + 262 => + array ( + 'match' => '0C2F (0C4D)', + 'replace' => 'E020 \\1', + ), + 263 => + array ( + 'match' => '0C30 (0C4D)', + 'replace' => 'E021 \\1', + ), + 264 => + array ( + 'match' => '0C33 (0C4D)', + 'replace' => 'E022 \\1', + ), + 265 => + array ( + 'match' => '0C35 (0C4D)', + 'replace' => 'E023 \\1', + ), + 266 => + array ( + 'match' => '0C36 (0C4D)', + 'replace' => 'E024 \\1', + ), + 267 => + array ( + 'match' => '0C37 (0C4D)', + 'replace' => 'E025 \\1', + ), + 268 => + array ( + 'match' => '0C38 (0C4D)', + 'replace' => 'E026 \\1', + ), + 269 => + array ( + 'match' => '0C39 (0C4D)', + 'replace' => 'E027 \\1', + ), + 270 => + array ( + 'match' => 'E078 (0C4D)', + 'replace' => 'E07C \\1', + ), + 271 => + array ( + 'match' => 'E07A (0C4D)', + 'replace' => 'E07D \\1', + ), + 272 => + array ( + 'match' => 'E07B (0C4D)', + 'replace' => 'E07E \\1', + ), + 273 => + array ( + 'match' => 'E00F (0C3E)', + 'replace' => '0C18 \\1', + ), + 274 => + array ( + 'match' => 'E013 (0C3E)', + 'replace' => '0C1D \\1', + ), + 275 => + array ( + 'match' => 'E01F (0C3E)', + 'replace' => '0C2E \\1', + ), + 276 => + array ( + 'match' => 'E020 (0C3E)', + 'replace' => '0C2F \\1', + ), + 277 => + array ( + 'match' => 'E027 (0C3E)', + 'replace' => '0C39 \\1', + ), + 278 => + array ( + 'match' => 'E00F (0C4C)', + 'replace' => '0C18 \\1', + ), + 279 => + array ( + 'match' => 'E013 (0C4C)', + 'replace' => '0C1D \\1', + ), + 280 => + array ( + 'match' => 'E01F (0C4C)', + 'replace' => '0C2E \\1', + ), + 281 => + array ( + 'match' => 'E020 (0C4C)', + 'replace' => '0C2F \\1', + ), + 282 => + array ( + 'match' => 'E027 (0C4C)', + 'replace' => '0C39 \\1', + ), + 283 => + array ( + 'match' => '((E00F|0C1F|E01C|E01D|E025|E026|E027)) 0C46', + 'replace' => '\\1 E007', + ), + 284 => + array ( + 'match' => '((E00F|0C1F|E01C|E01D|E025|E026|E027)) 0C47', + 'replace' => '\\1 E008', + ), + 285 => + array ( + 'match' => '((0C16|0C18|0C1F|0C2C|E01E|0C2E|0C2F|0C32|0C1D)) 0C3E', + 'replace' => '\\1 E002', + ), + 286 => + array ( + 'match' => '((0C19|0C1C)) 0C3E', + 'replace' => '\\1 E003', + ), + 287 => + array ( + 'match' => '((0C1E|E022)) 0C3E', + 'replace' => '\\1 E004', + ), + 288 => + array ( + 'match' => '((E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E)) 0C56', + 'replace' => '\\1 E00C', + ), + 289 => + array ( + 'match' => '((E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071)) 0C56', + 'replace' => '\\1 E00C', + ), + 290 => + array ( + 'match' => '(0C33) 0C41', + 'replace' => '\\1 E005', + ), + 291 => + array ( + 'match' => '(0C33) 0C42', + 'replace' => '\\1 E0DE', + ), + 292 => + array ( + 'match' => '((0C2A|0C2B|0C35)) 0C41', + 'replace' => '\\1 E006', + ), + 293 => + array ( + 'match' => '((0C2A|0C2B|0C35)) 0C42', + 'replace' => '\\1 E0DF', + ), + 294 => + array ( + 'match' => 'E046 (E07C 0C46 0C56)', + 'replace' => 'E077 \\1', + ), + 295 => + array ( + 'match' => 'E046 ((0C15|E00D|0C16|0C17|E00E|0C18|E00F|0C19|0C1A|E010|0C1B|E011|0C1C|E012|0C1D|E013|0C1E|0C1F|0C20|E014|0C21|E015|0C22|E016|0C23|0C24|E017|0C25|E018|0C26|E019|0C27|E01A|0C28|E01B|0C2A|E01C|0C2B|E01D|0C2C|0C2D|E01E|0C2E|E01F|0C2F|E020|0C30|E021|0C32|0C33|E022|0C35|E023|0C36|E024|0C37|E025|0C38|E026|0C39|E027|E078|E07C|E079) 0C46 0C56)', + 'replace' => 'E069 \\1', + ), + 296 => + array ( + 'match' => '0C4D', + 'replace' => 'E0E0', + ), +); +?> \ No newline at end of file diff --git a/include/mpdf/includes/no_image.jpg b/include/mpdf/includes/no_image.jpg new file mode 100755 index 0000000000000000000000000000000000000000..a690485ec13f25d2509e3f34d0188ff5a7af789f Binary files /dev/null and b/include/mpdf/includes/no_image.jpg differ diff --git a/include/mpdf/includes/out.php b/include/mpdf/includes/out.php new file mode 100755 index 0000000000000000000000000000000000000000..9dd11186923b5a99b5fa2183796142a2c8b94436 --- /dev/null +++ b/include/mpdf/includes/out.php @@ -0,0 +1,59 @@ +<?php + +$path = '../tmp/'; + +$tempfilename = $_REQUEST['filename'].'.pdf'; +if (strstr($tempfilename,'/') || strstr($tempfilename,'\\')) { die("Filename should not contain \ or / "); } +$opname = $_REQUEST['opname']; +$dest = $_REQUEST['dest']; + if ($tempfilename && file_exists($path.$tempfilename)) { + // mPDF 5.3.17 + if ($dest=='I') { + if(PHP_SAPI!='cli') { + header('Content-Type: application/pdf'); + header('Content-disposition: inline; filename="'.$name.'"'); + header('Cache-Control: public, must-revalidate, max-age=0'); + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + } + } + + else if ($dest=='D') { + header('Content-Description: File Transfer'); + if (headers_sent()) + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + header('Content-Transfer-Encoding: binary'); + header('Cache-Control: public, must-revalidate, max-age=0'); + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + header('Content-Type: application/force-download'); + header('Content-Type: application/octet-stream', false); + header('Content-Type: application/download', false); + header('Content-Type: application/pdf', false); + header('Content-disposition: attachment; filename="'.$name.'"'); + } + $filesize = filesize($path.$tempfilename); + if (!isset($_SERVER['HTTP_ACCEPT_ENCODING']) OR empty($_SERVER['HTTP_ACCEPT_ENCODING'])) { + // don't use length if server using compression + header('Content-Length: '.$filesize); + } + $fd=fopen($path.$tempfilename,'rb'); + fpassthru($fd); + fclose($fd); + unlink($path.$tempfilename); + // ====================== DELETE OLD FILES - Housekeeping ========================================= + // Clear any files in directory that are >24 hrs old + $interval = 86400; + if ($handle = opendir(dirname($path.'dummy'))) { + while (false !== ($file = readdir($handle))) { + if (((filemtime($path.$file)+$interval) < time()) && ($file != "..") && ($file != ".") && substr($file, -3)=='pdf') { + unlink($path.$file); + } + } + closedir($handle); + } + exit; + } +?> \ No newline at end of file diff --git a/include/mpdf/includes/subs_core.php b/include/mpdf/includes/subs_core.php new file mode 100755 index 0000000000000000000000000000000000000000..8101d809d089c347b1ff1712790053386af884e6 --- /dev/null +++ b/include/mpdf/includes/subs_core.php @@ -0,0 +1,454 @@ +<?php +$aarr = array( +160 => 160, +161 => 161, +162 => 162, +163 => 163, +164 => 164, +165 => 165, +166 => 166, +167 => 167, +168 => 168, +169 => 169, +170 => 170, +171 => 171, +172 => 172, +173 => 173, +174 => 174, +175 => 175, +176 => 176, +177 => 177, +178 => 178, +179 => 179, +180 => 180, +181 => 181, +182 => 182, +183 => 183, +184 => 184, +185 => 185, +186 => 186, +187 => 187, +188 => 188, +189 => 189, +190 => 190, +191 => 191, +192 => 192, +193 => 193, +194 => 194, +195 => 195, +196 => 196, +197 => 197, +198 => 198, +199 => 199, +200 => 200, +201 => 201, +202 => 202, +203 => 203, +204 => 204, +205 => 205, +206 => 206, +207 => 207, +208 => 208, +209 => 209, +210 => 210, +211 => 211, +212 => 212, +213 => 213, +214 => 214, +215 => 215, +216 => 216, +217 => 217, +218 => 218, +219 => 219, +220 => 220, +221 => 221, +222 => 222, +223 => 223, +224 => 224, +225 => 225, +226 => 226, +227 => 227, +228 => 228, +229 => 229, +230 => 230, +231 => 231, +232 => 232, +233 => 233, +234 => 234, +235 => 235, +236 => 236, +237 => 237, +238 => 238, +239 => 239, +240 => 240, +241 => 241, +242 => 242, +243 => 243, +244 => 244, +245 => 245, +246 => 246, +247 => 247, +248 => 248, +249 => 249, +250 => 250, +251 => 251, +252 => 252, +253 => 253, +254 => 254, +255 => 255, +338 => 140, +339 => 156, +352 => 138, +353 => 154, +376 => 159, +381 => 142, +382 => 158, +402 => 131, +710 => 136, +732 => 152, +8211 => 150, +8212 => 151, +8216 => 145, +8217 => 146, +8218 => 130, +8220 => 147, +8221 => 148, +8222 => 132, +8224 => 134, +8225 => 135, +8226 => 149, +8230 => 133, +8240 => 137, +8249 => 139, +8250 => 155, +8364 => 128, +8482 => 153 +); + +$zarr = array( +8594 => 213, +8596 => 214, +8597 => 215, +9312 => 172, +9313 => 173, +9314 => 174, +9315 => 175, +9316 => 176, +9317 => 177, +9318 => 178, +9319 => 179, +9320 => 180, +9321 => 181, +9632 => 110, +9650 => 115, +9660 => 116, +9670 => 117, +9679 => 108, +9687 => 119, +9733 => 72, +9742 => 37, +9755 => 42, +9758 => 43, +9824 => 171, +9827 => 168, +9829 => 170, +9830 => 169, +9985 => 33, +9986 => 34, +9987 => 35, +9988 => 36, +9990 => 38, +9991 => 39, +9992 => 40, +9993 => 41, +9996 => 44, +9997 => 45, +9998 => 46, +9999 => 47, +10000 => 48, +10001 => 49, +10002 => 50, +10003 => 51, +10004 => 52, +10005 => 53, +10006 => 54, +10007 => 55, +10008 => 56, +10009 => 57, +10010 => 58, +10011 => 59, +10012 => 60, +10013 => 61, +10014 => 62, +10015 => 63, +10016 => 64, +10017 => 65, +10018 => 66, +10019 => 67, +10020 => 68, +10021 => 69, +10022 => 70, +10023 => 71, +10025 => 73, +10026 => 74, +10027 => 75, +10028 => 76, +10029 => 77, +10030 => 78, +10031 => 79, +10032 => 80, +10033 => 81, +10034 => 82, +10035 => 83, +10036 => 84, +10037 => 85, +10038 => 86, +10039 => 87, +10040 => 88, +10041 => 89, +10042 => 90, +10043 => 91, +10044 => 92, +10045 => 93, +10046 => 94, +10047 => 95, +10048 => 96, +10049 => 97, +10050 => 98, +10051 => 99, +10052 => 100, +10053 => 101, +10054 => 102, +10055 => 103, +10056 => 104, +10057 => 105, +10058 => 106, +10059 => 107, +10061 => 109, +10063 => 111, +10064 => 112, +10065 => 113, +10066 => 114, +10070 => 118, +10072 => 120, +10073 => 121, +10074 => 122, +10075 => 123, +10076 => 124, +10077 => 125, +10078 => 126, +10081 => 161, +10082 => 162, +10083 => 163, +10084 => 164, +10085 => 165, +10086 => 166, +10087 => 167, +10102 => 182, +10103 => 183, +10104 => 184, +10105 => 185, +10106 => 186, +10107 => 187, +10108 => 188, +10109 => 189, +10110 => 190, +10111 => 191, +10112 => 192, +10113 => 193, +10114 => 194, +10115 => 195, +10116 => 196, +10117 => 197, +10118 => 198, +10119 => 199, +10120 => 200, +10121 => 201, +10122 => 202, +10123 => 203, +10124 => 204, +10125 => 205, +10126 => 206, +10127 => 207, +10128 => 208, +10129 => 209, +10130 => 210, +10131 => 211, +10132 => 212, +10136 => 216, +10137 => 217, +10138 => 218, +10139 => 219, +10140 => 220, +10141 => 221, +10142 => 222, +10143 => 223, +10144 => 224, +10145 => 225, +10146 => 226, +10147 => 227, +10148 => 228, +10149 => 229, +10150 => 230, +10151 => 231, +10152 => 232, +10153 => 233, +10154 => 234, +10155 => 235, +10156 => 236, +10157 => 237, +10158 => 238, +10159 => 239, +10161 => 241, +10162 => 242, +10163 => 243, +10164 => 244, +10165 => 245, +10166 => 246, +10167 => 247, +10168 => 248, +10169 => 249, +10170 => 250, +10171 => 251, +10172 => 252, +10173 => 253, +10174 => 254 +); + +$sarr = array( +169 => 227, +172 => 216, +174 => 226, +176 => 176, +177 => 177, +181 => 109, +215 => 180, +247 => 184, +402 => 166, +913 => 65, +914 => 66, +915 => 71, +916 => 68, +917 => 69, +918 => 90, +919 => 72, +920 => 81, +921 => 73, +922 => 75, +923 => 76, +924 => 77, +925 => 78, +926 => 88, +927 => 79, +928 => 80, +929 => 82, +931 => 83, +932 => 84, +933 => 85, +934 => 70, +935 => 67, +936 => 89, +937 => 87, +945 => 97, +946 => 98, +947 => 103, +948 => 100, +949 => 101, +950 => 122, +951 => 104, +952 => 113, +953 => 105, +954 => 107, +955 => 108, +956 => 109, +957 => 110, +958 => 120, +959 => 111, +960 => 112, +961 => 114, +962 => 86, +963 => 115, +964 => 116, +965 => 117, +966 => 102, +967 => 99, +968 => 121, +969 => 119, +977 => 74, +978 => 161, +981 => 106, +982 => 118, +8226 => 183, +8230 => 188, +8242 => 162, +8243 => 178, +8260 => 164, +8465 => 193, +8472 => 195, +8476 => 194, +8482 => 228, +8486 => 87, +8501 => 192, +8592 => 172, +8593 => 173, +8594 => 174, +8595 => 175, +8596 => 171, +8629 => 191, +8656 => 220, +8657 => 221, +8658 => 222, +8659 => 223, +8660 => 219, +8704 => 34, +8706 => 182, +8707 => 36, +8709 => 198, +8710 => 68, +8711 => 209, +8712 => 206, +8713 => 207, +8715 => 39, +8719 => 213, +8721 => 229, +8722 => 45, +8725 => 164, +8727 => 42, +8730 => 214, +8733 => 181, +8734 => 165, +8736 => 208, +8743 => 217, +8744 => 218, +8745 => 199, +8746 => 200, +8747 => 242, +8756 => 92, +8764 => 126, +8773 => 64, +8776 => 187, +8800 => 185, +8801 => 186, +8804 => 163, +8805 => 179, +8834 => 204, +8835 => 201, +8836 => 203, +8838 => 205, +8839 => 202, +8853 => 197, +8855 => 196, +8869 => 94, +8901 => 215, +8992 => 243, +8993 => 245, +9001 => 225, +9002 => 241, +9674 => 224, +9824 => 170, +9827 => 167, +9829 => 169, +9830 => 168 +); + +?> \ No newline at end of file diff --git a/include/mpdf/includes/subs_win-1252.php b/include/mpdf/includes/subs_win-1252.php new file mode 100755 index 0000000000000000000000000000000000000000..7aeab8284327b5321d611dedfc4b69d1c1d77753 --- /dev/null +++ b/include/mpdf/includes/subs_win-1252.php @@ -0,0 +1,308 @@ +<?php + +$subsarray = array ( + 913 => '<tts>65</tts>', + 914 => '<tts>66</tts>', + 915 => '<tts>71</tts>', + 916 => '<tts>68</tts>', + 917 => '<tts>69</tts>', + 918 => '<tts>90</tts>', + 919 => '<tts>72</tts>', + 920 => '<tts>81</tts>', + 921 => '<tts>73</tts>', + 922 => '<tts>75</tts>', + 923 => '<tts>76</tts>', + 924 => '<tts>77</tts>', + 925 => '<tts>78</tts>', + 926 => '<tts>88</tts>', + 927 => '<tts>79</tts>', + 928 => '<tts>80</tts>', + 929 => '<tts>82</tts>', + 931 => '<tts>83</tts>', + 932 => '<tts>84</tts>', + 933 => '<tts>85</tts>', + 934 => '<tts>70</tts>', + 935 => '<tts>67</tts>', + 936 => '<tts>89</tts>', + 937 => '<tts>87</tts>', + 945 => '<tts>97</tts>', + 946 => '<tts>98</tts>', + 947 => '<tts>103</tts>', + 948 => '<tts>100</tts>', + 949 => '<tts>101</tts>', + 950 => '<tts>122</tts>', + 951 => '<tts>104</tts>', + 952 => '<tts>113</tts>', + 953 => '<tts>105</tts>', + 954 => '<tts>107</tts>', + 955 => '<tts>108</tts>', + 956 => '<tts>109</tts>', + 957 => '<tts>110</tts>', + 958 => '<tts>120</tts>', + 959 => '<tts>111</tts>', + 960 => '<tts>112</tts>', + 961 => '<tts>114</tts>', + 962 => '<tts>86</tts>', + 963 => '<tts>115</tts>', + 964 => '<tts>116</tts>', + 965 => '<tts>117</tts>', + 966 => '<tts>102</tts>', + 967 => '<tts>99</tts>', + 968 => '<tts>121</tts>', + 969 => '<tts>119</tts>', + 977 => '<tts>74</tts>', + 978 => '<tts>161</tts>', + 981 => '<tts>106</tts>', + 982 => '<tts>118</tts>', + 8242 => '<tts>162</tts>', + 8243 => '<tts>178</tts>', + 8260 => '<tts>164</tts>', + 8465 => '<tts>193</tts>', + 8472 => '<tts>195</tts>', + 8476 => '<tts>194</tts>', + 8486 => '<tts>87</tts>', + 8501 => '<tts>192</tts>', + 8592 => '<tts>172</tts>', + 8593 => '<tts>173</tts>', + 8594 => '<tts>174</tts>', + 8595 => '<tts>175</tts>', + 8596 => '<tts>171</tts>', + 8597 => '<ttz>215</ttz>', + 8629 => '<tts>191</tts>', + 8656 => '<tts>220</tts>', + 8657 => '<tts>221</tts>', + 8658 => '<tts>222</tts>', + 8659 => '<tts>223</tts>', + 8660 => '<tts>219</tts>', + 8704 => '<tts>34</tts>', + 8706 => '<tts>182</tts>', + 8707 => '<tts>36</tts>', + 8709 => '<tts>198</tts>', + 8710 => '<tts>68</tts>', + 8711 => '<tts>209</tts>', + 8712 => '<tts>206</tts>', + 8713 => '<tts>207</tts>', + 8715 => '<tts>39</tts>', + 8719 => '<tts>213</tts>', + 8721 => '<tts>229</tts>', + 8722 => '<tts>45</tts>', + 8725 => '<tts>164</tts>', + 8727 => '<tts>42</tts>', + 8730 => '<tts>214</tts>', + 8733 => '<tts>181</tts>', + 8734 => '<tts>165</tts>', + 8736 => '<tts>208</tts>', + 8743 => '<tts>217</tts>', + 8744 => '<tts>218</tts>', + 8745 => '<tts>199</tts>', + 8746 => '<tts>200</tts>', + 8747 => '<tts>242</tts>', + 8756 => '<tts>92</tts>', + 8764 => '<tts>126</tts>', + 8773 => '<tts>64</tts>', + 8776 => '<tts>187</tts>', + 8800 => '<tts>185</tts>', + 8801 => '<tts>186</tts>', + 8804 => '<tts>163</tts>', + 8805 => '<tts>179</tts>', + 8834 => '<tts>204</tts>', + 8835 => '<tts>201</tts>', + 8836 => '<tts>203</tts>', + 8838 => '<tts>205</tts>', + 8839 => '<tts>202</tts>', + 8853 => '<tts>197</tts>', + 8855 => '<tts>196</tts>', + 8869 => '<tts>94</tts>', + 8901 => '<tts>215</tts>', + 8992 => '<tts>243</tts>', + 8993 => '<tts>245</tts>', + 9001 => '<tts>225</tts>', + 9002 => '<tts>241</tts>', + 9312 => '<ttz>172</ttz>', + 9313 => '<ttz>173</ttz>', + 9314 => '<ttz>174</ttz>', + 9315 => '<ttz>175</ttz>', + 9316 => '<ttz>176</ttz>', + 9317 => '<ttz>177</ttz>', + 9318 => '<ttz>178</ttz>', + 9319 => '<ttz>179</ttz>', + 9320 => '<ttz>180</ttz>', + 9321 => '<ttz>181</ttz>', + 9632 => '<ttz>110</ttz>', + 9650 => '<ttz>115</ttz>', + 9660 => '<ttz>116</ttz>', + 9670 => '<ttz>117</ttz>', + 9674 => '<tts>224</tts>', + 9679 => '<ttz>108</ttz>', + 9687 => '<ttz>119</ttz>', + 9733 => '<ttz>72</ttz>', + 9742 => '<ttz>37</ttz>', + 9755 => '<ttz>42</ttz>', + 9758 => '<ttz>43</ttz>', + 9824 => '<tts>170</tts>', + 9827 => '<tts>167</tts>', + 9829 => '<tts>169</tts>', + 9830 => '<tts>168</tts>', + 9985 => '<ttz>33</ttz>', + 9986 => '<ttz>34</ttz>', + 9987 => '<ttz>35</ttz>', + 9988 => '<ttz>36</ttz>', + 9990 => '<ttz>38</ttz>', + 9991 => '<ttz>39</ttz>', + 9992 => '<ttz>40</ttz>', + 9993 => '<ttz>41</ttz>', + 9996 => '<ttz>44</ttz>', + 9997 => '<ttz>45</ttz>', + 9998 => '<ttz>46</ttz>', + 9999 => '<ttz>47</ttz>', + 10000 => '<ttz>48</ttz>', + 10001 => '<ttz>49</ttz>', + 10002 => '<ttz>50</ttz>', + 10003 => '<ttz>51</ttz>', + 10004 => '<ttz>52</ttz>', + 10005 => '<ttz>53</ttz>', + 10006 => '<ttz>54</ttz>', + 10007 => '<ttz>55</ttz>', + 10008 => '<ttz>56</ttz>', + 10009 => '<ttz>57</ttz>', + 10010 => '<ttz>58</ttz>', + 10011 => '<ttz>59</ttz>', + 10012 => '<ttz>60</ttz>', + 10013 => '<ttz>61</ttz>', + 10014 => '<ttz>62</ttz>', + 10015 => '<ttz>63</ttz>', + 10016 => '<ttz>64</ttz>', + 10017 => '<ttz>65</ttz>', + 10018 => '<ttz>66</ttz>', + 10019 => '<ttz>67</ttz>', + 10020 => '<ttz>68</ttz>', + 10021 => '<ttz>69</ttz>', + 10022 => '<ttz>70</ttz>', + 10023 => '<ttz>71</ttz>', + 10025 => '<ttz>73</ttz>', + 10026 => '<ttz>74</ttz>', + 10027 => '<ttz>75</ttz>', + 10028 => '<ttz>76</ttz>', + 10029 => '<ttz>77</ttz>', + 10030 => '<ttz>78</ttz>', + 10031 => '<ttz>79</ttz>', + 10032 => '<ttz>80</ttz>', + 10033 => '<ttz>81</ttz>', + 10034 => '<ttz>82</ttz>', + 10035 => '<ttz>83</ttz>', + 10036 => '<ttz>84</ttz>', + 10037 => '<ttz>85</ttz>', + 10038 => '<ttz>86</ttz>', + 10039 => '<ttz>87</ttz>', + 10040 => '<ttz>88</ttz>', + 10041 => '<ttz>89</ttz>', + 10042 => '<ttz>90</ttz>', + 10043 => '<ttz>91</ttz>', + 10044 => '<ttz>92</ttz>', + 10045 => '<ttz>93</ttz>', + 10046 => '<ttz>94</ttz>', + 10047 => '<ttz>95</ttz>', + 10048 => '<ttz>96</ttz>', + 10049 => '<ttz>97</ttz>', + 10050 => '<ttz>98</ttz>', + 10051 => '<ttz>99</ttz>', + 10052 => '<ttz>100</ttz>', + 10053 => '<ttz>101</ttz>', + 10054 => '<ttz>102</ttz>', + 10055 => '<ttz>103</ttz>', + 10056 => '<ttz>104</ttz>', + 10057 => '<ttz>105</ttz>', + 10058 => '<ttz>106</ttz>', + 10059 => '<ttz>107</ttz>', + 10061 => '<ttz>109</ttz>', + 10063 => '<ttz>111</ttz>', + 10064 => '<ttz>112</ttz>', + 10065 => '<ttz>113</ttz>', + 10066 => '<ttz>114</ttz>', + 10070 => '<ttz>118</ttz>', + 10072 => '<ttz>120</ttz>', + 10073 => '<ttz>121</ttz>', + 10074 => '<ttz>122</ttz>', + 10075 => '<ttz>123</ttz>', + 10076 => '<ttz>124</ttz>', + 10077 => '<ttz>125</ttz>', + 10078 => '<ttz>126</ttz>', + 10081 => '<ttz>161</ttz>', + 10082 => '<ttz>162</ttz>', + 10083 => '<ttz>163</ttz>', + 10084 => '<ttz>164</ttz>', + 10085 => '<ttz>165</ttz>', + 10086 => '<ttz>166</ttz>', + 10087 => '<ttz>167</ttz>', + 10102 => '<ttz>182</ttz>', + 10103 => '<ttz>183</ttz>', + 10104 => '<ttz>184</ttz>', + 10105 => '<ttz>185</ttz>', + 10106 => '<ttz>186</ttz>', + 10107 => '<ttz>187</ttz>', + 10108 => '<ttz>188</ttz>', + 10109 => '<ttz>189</ttz>', + 10110 => '<ttz>190</ttz>', + 10111 => '<ttz>191</ttz>', + 10112 => '<ttz>192</ttz>', + 10113 => '<ttz>193</ttz>', + 10114 => '<ttz>194</ttz>', + 10115 => '<ttz>195</ttz>', + 10116 => '<ttz>196</ttz>', + 10117 => '<ttz>197</ttz>', + 10118 => '<ttz>198</ttz>', + 10119 => '<ttz>199</ttz>', + 10120 => '<ttz>200</ttz>', + 10121 => '<ttz>201</ttz>', + 10122 => '<ttz>202</ttz>', + 10123 => '<ttz>203</ttz>', + 10124 => '<ttz>204</ttz>', + 10125 => '<ttz>205</ttz>', + 10126 => '<ttz>206</ttz>', + 10127 => '<ttz>207</ttz>', + 10128 => '<ttz>208</ttz>', + 10129 => '<ttz>209</ttz>', + 10130 => '<ttz>210</ttz>', + 10131 => '<ttz>211</ttz>', + 10132 => '<ttz>212</ttz>', + 10136 => '<ttz>216</ttz>', + 10137 => '<ttz>217</ttz>', + 10138 => '<ttz>218</ttz>', + 10139 => '<ttz>219</ttz>', + 10140 => '<ttz>220</ttz>', + 10141 => '<ttz>221</ttz>', + 10142 => '<ttz>222</ttz>', + 10143 => '<ttz>223</ttz>', + 10144 => '<ttz>224</ttz>', + 10145 => '<ttz>225</ttz>', + 10146 => '<ttz>226</ttz>', + 10147 => '<ttz>227</ttz>', + 10148 => '<ttz>228</ttz>', + 10149 => '<ttz>229</ttz>', + 10150 => '<ttz>230</ttz>', + 10151 => '<ttz>231</ttz>', + 10152 => '<ttz>232</ttz>', + 10153 => '<ttz>233</ttz>', + 10154 => '<ttz>234</ttz>', + 10155 => '<ttz>235</ttz>', + 10156 => '<ttz>236</ttz>', + 10157 => '<ttz>237</ttz>', + 10158 => '<ttz>238</ttz>', + 10159 => '<ttz>239</ttz>', + 10161 => '<ttz>241</ttz>', + 10162 => '<ttz>242</ttz>', + 10163 => '<ttz>243</ttz>', + 10164 => '<ttz>244</ttz>', + 10165 => '<ttz>245</ttz>', + 10166 => '<ttz>246</ttz>', + 10167 => '<ttz>247</ttz>', + 10168 => '<ttz>248</ttz>', + 10169 => '<ttz>249</ttz>', + 10170 => '<ttz>250</ttz>', + 10171 => '<ttz>251</ttz>', + 10172 => '<ttz>252</ttz>', + 10173 => '<ttz>253</ttz>', + 10174 => '<ttz>254</ttz>', +); + +?> \ No newline at end of file diff --git a/include/mpdf/includes/upperCase.php b/include/mpdf/includes/upperCase.php new file mode 100755 index 0000000000000000000000000000000000000000..020f42649531ff33a0b5562dbce98c6c1e00fd13 --- /dev/null +++ b/include/mpdf/includes/upperCase.php @@ -0,0 +1,975 @@ +<?php +$this->upperCase=array ( + 97 => 65, + 98 => 66, + 99 => 67, + 100 => 68, + 101 => 69, + 102 => 70, + 103 => 71, + 104 => 72, + 105 => 73, + 106 => 74, + 107 => 75, + 108 => 76, + 109 => 77, + 110 => 78, + 111 => 79, + 112 => 80, + 113 => 81, + 114 => 82, + 115 => 83, + 116 => 84, + 117 => 85, + 118 => 86, + 119 => 87, + 120 => 88, + 121 => 89, + 122 => 90, + 181 => 924, + 224 => 192, + 225 => 193, + 226 => 194, + 227 => 195, + 228 => 196, + 229 => 197, + 230 => 198, + 231 => 199, + 232 => 200, + 233 => 201, + 234 => 202, + 235 => 203, + 236 => 204, + 237 => 205, + 238 => 206, + 239 => 207, + 240 => 208, + 241 => 209, + 242 => 210, + 243 => 211, + 244 => 212, + 245 => 213, + 246 => 214, + 248 => 216, + 249 => 217, + 250 => 218, + 251 => 219, + 252 => 220, + 253 => 221, + 254 => 222, + 255 => 376, + 257 => 256, + 259 => 258, + 261 => 260, + 263 => 262, + 265 => 264, + 267 => 266, + 269 => 268, + 271 => 270, + 273 => 272, + 275 => 274, + 277 => 276, + 279 => 278, + 281 => 280, + 283 => 282, + 285 => 284, + 287 => 286, + 289 => 288, + 291 => 290, + 293 => 292, + 295 => 294, + 297 => 296, + 299 => 298, + 301 => 300, + 303 => 302, + 305 => 73, + 307 => 306, + 309 => 308, + 311 => 310, + 314 => 313, + 316 => 315, + 318 => 317, + 320 => 319, + 322 => 321, + 324 => 323, + 326 => 325, + 328 => 327, + 331 => 330, + 333 => 332, + 335 => 334, + 337 => 336, + 339 => 338, + 341 => 340, + 343 => 342, + 345 => 344, + 347 => 346, + 349 => 348, + 351 => 350, + 353 => 352, + 355 => 354, + 357 => 356, + 359 => 358, + 361 => 360, + 363 => 362, + 365 => 364, + 367 => 366, + 369 => 368, + 371 => 370, + 373 => 372, + 375 => 374, + 378 => 377, + 380 => 379, + 382 => 381, + 383 => 83, + 384 => 579, + 387 => 386, + 389 => 388, + 392 => 391, + 396 => 395, + 402 => 401, + 405 => 502, + 409 => 408, + 410 => 573, + 414 => 544, + 417 => 416, + 419 => 418, + 421 => 420, + 424 => 423, + 429 => 428, + 432 => 431, + 436 => 435, + 438 => 437, + 441 => 440, + 445 => 444, + 447 => 503, + 453 => 452, + 454 => 452, + 456 => 455, + 457 => 455, + 459 => 458, + 460 => 458, + 462 => 461, + 464 => 463, + 466 => 465, + 468 => 467, + 470 => 469, + 472 => 471, + 474 => 473, + 476 => 475, + 477 => 398, + 479 => 478, + 481 => 480, + 483 => 482, + 485 => 484, + 487 => 486, + 489 => 488, + 491 => 490, + 493 => 492, + 495 => 494, + 498 => 497, + 499 => 497, + 501 => 500, + 505 => 504, + 507 => 506, + 509 => 508, + 511 => 510, + 513 => 512, + 515 => 514, + 517 => 516, + 519 => 518, + 521 => 520, + 523 => 522, + 525 => 524, + 527 => 526, + 529 => 528, + 531 => 530, + 533 => 532, + 535 => 534, + 537 => 536, + 539 => 538, + 541 => 540, + 543 => 542, + 547 => 546, + 549 => 548, + 551 => 550, + 553 => 552, + 555 => 554, + 557 => 556, + 559 => 558, + 561 => 560, + 563 => 562, + 572 => 571, + 575 => 11390, + 576 => 11391, + 578 => 577, + 583 => 582, + 585 => 584, + 587 => 586, + 589 => 588, + 591 => 590, + 592 => 11375, + 593 => 11373, + 594 => 11376, + 595 => 385, + 596 => 390, + 598 => 393, + 599 => 394, + 601 => 399, + 603 => 400, + 608 => 403, + 611 => 404, + 616 => 407, + 617 => 406, + 619 => 11362, + 623 => 412, + 625 => 11374, + 626 => 413, + 629 => 415, + 637 => 11364, + 640 => 422, + 643 => 425, + 648 => 430, + 649 => 580, + 650 => 433, + 651 => 434, + 652 => 581, + 658 => 439, + 837 => 921, + 881 => 880, + 883 => 882, + 887 => 886, + 891 => 1021, + 892 => 1022, + 893 => 1023, + 940 => 902, + 941 => 904, + 942 => 905, + 943 => 906, + 945 => 913, + 946 => 914, + 947 => 915, + 948 => 916, + 949 => 917, + 950 => 918, + 951 => 919, + 952 => 920, + 953 => 921, + 954 => 922, + 955 => 923, + 956 => 924, + 957 => 925, + 958 => 926, + 959 => 927, + 960 => 928, + 961 => 929, + 962 => 931, + 963 => 931, + 964 => 932, + 965 => 933, + 966 => 934, + 967 => 935, + 968 => 936, + 969 => 937, + 970 => 938, + 971 => 939, + 972 => 908, + 973 => 910, + 974 => 911, + 976 => 914, + 977 => 920, + 981 => 934, + 982 => 928, + 983 => 975, + 985 => 984, + 987 => 986, + 989 => 988, + 991 => 990, + 993 => 992, + 995 => 994, + 997 => 996, + 999 => 998, + 1001 => 1000, + 1003 => 1002, + 1005 => 1004, + 1007 => 1006, + 1008 => 922, + 1009 => 929, + 1010 => 1017, + 1013 => 917, + 1016 => 1015, + 1019 => 1018, + 1072 => 1040, + 1073 => 1041, + 1074 => 1042, + 1075 => 1043, + 1076 => 1044, + 1077 => 1045, + 1078 => 1046, + 1079 => 1047, + 1080 => 1048, + 1081 => 1049, + 1082 => 1050, + 1083 => 1051, + 1084 => 1052, + 1085 => 1053, + 1086 => 1054, + 1087 => 1055, + 1088 => 1056, + 1089 => 1057, + 1090 => 1058, + 1091 => 1059, + 1092 => 1060, + 1093 => 1061, + 1094 => 1062, + 1095 => 1063, + 1096 => 1064, + 1097 => 1065, + 1098 => 1066, + 1099 => 1067, + 1100 => 1068, + 1101 => 1069, + 1102 => 1070, + 1103 => 1071, + 1104 => 1024, + 1105 => 1025, + 1106 => 1026, + 1107 => 1027, + 1108 => 1028, + 1109 => 1029, + 1110 => 1030, + 1111 => 1031, + 1112 => 1032, + 1113 => 1033, + 1114 => 1034, + 1115 => 1035, + 1116 => 1036, + 1117 => 1037, + 1118 => 1038, + 1119 => 1039, + 1121 => 1120, + 1123 => 1122, + 1125 => 1124, + 1127 => 1126, + 1129 => 1128, + 1131 => 1130, + 1133 => 1132, + 1135 => 1134, + 1137 => 1136, + 1139 => 1138, + 1141 => 1140, + 1143 => 1142, + 1145 => 1144, + 1147 => 1146, + 1149 => 1148, + 1151 => 1150, + 1153 => 1152, + 1163 => 1162, + 1165 => 1164, + 1167 => 1166, + 1169 => 1168, + 1171 => 1170, + 1173 => 1172, + 1175 => 1174, + 1177 => 1176, + 1179 => 1178, + 1181 => 1180, + 1183 => 1182, + 1185 => 1184, + 1187 => 1186, + 1189 => 1188, + 1191 => 1190, + 1193 => 1192, + 1195 => 1194, + 1197 => 1196, + 1199 => 1198, + 1201 => 1200, + 1203 => 1202, + 1205 => 1204, + 1207 => 1206, + 1209 => 1208, + 1211 => 1210, + 1213 => 1212, + 1215 => 1214, + 1218 => 1217, + 1220 => 1219, + 1222 => 1221, + 1224 => 1223, + 1226 => 1225, + 1228 => 1227, + 1230 => 1229, + 1231 => 1216, + 1233 => 1232, + 1235 => 1234, + 1237 => 1236, + 1239 => 1238, + 1241 => 1240, + 1243 => 1242, + 1245 => 1244, + 1247 => 1246, + 1249 => 1248, + 1251 => 1250, + 1253 => 1252, + 1255 => 1254, + 1257 => 1256, + 1259 => 1258, + 1261 => 1260, + 1263 => 1262, + 1265 => 1264, + 1267 => 1266, + 1269 => 1268, + 1271 => 1270, + 1273 => 1272, + 1275 => 1274, + 1277 => 1276, + 1279 => 1278, + 1281 => 1280, + 1283 => 1282, + 1285 => 1284, + 1287 => 1286, + 1289 => 1288, + 1291 => 1290, + 1293 => 1292, + 1295 => 1294, + 1297 => 1296, + 1299 => 1298, + 1301 => 1300, + 1303 => 1302, + 1305 => 1304, + 1307 => 1306, + 1309 => 1308, + 1311 => 1310, + 1313 => 1312, + 1315 => 1314, + 1317 => 1316, + 1377 => 1329, + 1378 => 1330, + 1379 => 1331, + 1380 => 1332, + 1381 => 1333, + 1382 => 1334, + 1383 => 1335, + 1384 => 1336, + 1385 => 1337, + 1386 => 1338, + 1387 => 1339, + 1388 => 1340, + 1389 => 1341, + 1390 => 1342, + 1391 => 1343, + 1392 => 1344, + 1393 => 1345, + 1394 => 1346, + 1395 => 1347, + 1396 => 1348, + 1397 => 1349, + 1398 => 1350, + 1399 => 1351, + 1400 => 1352, + 1401 => 1353, + 1402 => 1354, + 1403 => 1355, + 1404 => 1356, + 1405 => 1357, + 1406 => 1358, + 1407 => 1359, + 1408 => 1360, + 1409 => 1361, + 1410 => 1362, + 1411 => 1363, + 1412 => 1364, + 1413 => 1365, + 1414 => 1366, + 7545 => 42877, + 7549 => 11363, + 7681 => 7680, + 7683 => 7682, + 7685 => 7684, + 7687 => 7686, + 7689 => 7688, + 7691 => 7690, + 7693 => 7692, + 7695 => 7694, + 7697 => 7696, + 7699 => 7698, + 7701 => 7700, + 7703 => 7702, + 7705 => 7704, + 7707 => 7706, + 7709 => 7708, + 7711 => 7710, + 7713 => 7712, + 7715 => 7714, + 7717 => 7716, + 7719 => 7718, + 7721 => 7720, + 7723 => 7722, + 7725 => 7724, + 7727 => 7726, + 7729 => 7728, + 7731 => 7730, + 7733 => 7732, + 7735 => 7734, + 7737 => 7736, + 7739 => 7738, + 7741 => 7740, + 7743 => 7742, + 7745 => 7744, + 7747 => 7746, + 7749 => 7748, + 7751 => 7750, + 7753 => 7752, + 7755 => 7754, + 7757 => 7756, + 7759 => 7758, + 7761 => 7760, + 7763 => 7762, + 7765 => 7764, + 7767 => 7766, + 7769 => 7768, + 7771 => 7770, + 7773 => 7772, + 7775 => 7774, + 7777 => 7776, + 7779 => 7778, + 7781 => 7780, + 7783 => 7782, + 7785 => 7784, + 7787 => 7786, + 7789 => 7788, + 7791 => 7790, + 7793 => 7792, + 7795 => 7794, + 7797 => 7796, + 7799 => 7798, + 7801 => 7800, + 7803 => 7802, + 7805 => 7804, + 7807 => 7806, + 7809 => 7808, + 7811 => 7810, + 7813 => 7812, + 7815 => 7814, + 7817 => 7816, + 7819 => 7818, + 7821 => 7820, + 7823 => 7822, + 7825 => 7824, + 7827 => 7826, + 7829 => 7828, + 7835 => 7776, + 7841 => 7840, + 7843 => 7842, + 7845 => 7844, + 7847 => 7846, + 7849 => 7848, + 7851 => 7850, + 7853 => 7852, + 7855 => 7854, + 7857 => 7856, + 7859 => 7858, + 7861 => 7860, + 7863 => 7862, + 7865 => 7864, + 7867 => 7866, + 7869 => 7868, + 7871 => 7870, + 7873 => 7872, + 7875 => 7874, + 7877 => 7876, + 7879 => 7878, + 7881 => 7880, + 7883 => 7882, + 7885 => 7884, + 7887 => 7886, + 7889 => 7888, + 7891 => 7890, + 7893 => 7892, + 7895 => 7894, + 7897 => 7896, + 7899 => 7898, + 7901 => 7900, + 7903 => 7902, + 7905 => 7904, + 7907 => 7906, + 7909 => 7908, + 7911 => 7910, + 7913 => 7912, + 7915 => 7914, + 7917 => 7916, + 7919 => 7918, + 7921 => 7920, + 7923 => 7922, + 7925 => 7924, + 7927 => 7926, + 7929 => 7928, + 7931 => 7930, + 7933 => 7932, + 7935 => 7934, + 7936 => 7944, + 7937 => 7945, + 7938 => 7946, + 7939 => 7947, + 7940 => 7948, + 7941 => 7949, + 7942 => 7950, + 7943 => 7951, + 7952 => 7960, + 7953 => 7961, + 7954 => 7962, + 7955 => 7963, + 7956 => 7964, + 7957 => 7965, + 7968 => 7976, + 7969 => 7977, + 7970 => 7978, + 7971 => 7979, + 7972 => 7980, + 7973 => 7981, + 7974 => 7982, + 7975 => 7983, + 7984 => 7992, + 7985 => 7993, + 7986 => 7994, + 7987 => 7995, + 7988 => 7996, + 7989 => 7997, + 7990 => 7998, + 7991 => 7999, + 8000 => 8008, + 8001 => 8009, + 8002 => 8010, + 8003 => 8011, + 8004 => 8012, + 8005 => 8013, + 8017 => 8025, + 8019 => 8027, + 8021 => 8029, + 8023 => 8031, + 8032 => 8040, + 8033 => 8041, + 8034 => 8042, + 8035 => 8043, + 8036 => 8044, + 8037 => 8045, + 8038 => 8046, + 8039 => 8047, + 8048 => 8122, + 8049 => 8123, + 8050 => 8136, + 8051 => 8137, + 8052 => 8138, + 8053 => 8139, + 8054 => 8154, + 8055 => 8155, + 8056 => 8184, + 8057 => 8185, + 8058 => 8170, + 8059 => 8171, + 8060 => 8186, + 8061 => 8187, + 8064 => 8072, + 8065 => 8073, + 8066 => 8074, + 8067 => 8075, + 8068 => 8076, + 8069 => 8077, + 8070 => 8078, + 8071 => 8079, + 8080 => 8088, + 8081 => 8089, + 8082 => 8090, + 8083 => 8091, + 8084 => 8092, + 8085 => 8093, + 8086 => 8094, + 8087 => 8095, + 8096 => 8104, + 8097 => 8105, + 8098 => 8106, + 8099 => 8107, + 8100 => 8108, + 8101 => 8109, + 8102 => 8110, + 8103 => 8111, + 8112 => 8120, + 8113 => 8121, + 8115 => 8124, + 8126 => 921, + 8131 => 8140, + 8144 => 8152, + 8145 => 8153, + 8160 => 8168, + 8161 => 8169, + 8165 => 8172, + 8179 => 8188, + 8526 => 8498, + 8560 => 8544, + 8561 => 8545, + 8562 => 8546, + 8563 => 8547, + 8564 => 8548, + 8565 => 8549, + 8566 => 8550, + 8567 => 8551, + 8568 => 8552, + 8569 => 8553, + 8570 => 8554, + 8571 => 8555, + 8572 => 8556, + 8573 => 8557, + 8574 => 8558, + 8575 => 8559, + 8580 => 8579, + 9424 => 9398, + 9425 => 9399, + 9426 => 9400, + 9427 => 9401, + 9428 => 9402, + 9429 => 9403, + 9430 => 9404, + 9431 => 9405, + 9432 => 9406, + 9433 => 9407, + 9434 => 9408, + 9435 => 9409, + 9436 => 9410, + 9437 => 9411, + 9438 => 9412, + 9439 => 9413, + 9440 => 9414, + 9441 => 9415, + 9442 => 9416, + 9443 => 9417, + 9444 => 9418, + 9445 => 9419, + 9446 => 9420, + 9447 => 9421, + 9448 => 9422, + 9449 => 9423, + 11312 => 11264, + 11313 => 11265, + 11314 => 11266, + 11315 => 11267, + 11316 => 11268, + 11317 => 11269, + 11318 => 11270, + 11319 => 11271, + 11320 => 11272, + 11321 => 11273, + 11322 => 11274, + 11323 => 11275, + 11324 => 11276, + 11325 => 11277, + 11326 => 11278, + 11327 => 11279, + 11328 => 11280, + 11329 => 11281, + 11330 => 11282, + 11331 => 11283, + 11332 => 11284, + 11333 => 11285, + 11334 => 11286, + 11335 => 11287, + 11336 => 11288, + 11337 => 11289, + 11338 => 11290, + 11339 => 11291, + 11340 => 11292, + 11341 => 11293, + 11342 => 11294, + 11343 => 11295, + 11344 => 11296, + 11345 => 11297, + 11346 => 11298, + 11347 => 11299, + 11348 => 11300, + 11349 => 11301, + 11350 => 11302, + 11351 => 11303, + 11352 => 11304, + 11353 => 11305, + 11354 => 11306, + 11355 => 11307, + 11356 => 11308, + 11357 => 11309, + 11358 => 11310, + 11361 => 11360, + 11365 => 570, + 11366 => 574, + 11368 => 11367, + 11370 => 11369, + 11372 => 11371, + 11379 => 11378, + 11382 => 11381, + 11393 => 11392, + 11395 => 11394, + 11397 => 11396, + 11399 => 11398, + 11401 => 11400, + 11403 => 11402, + 11405 => 11404, + 11407 => 11406, + 11409 => 11408, + 11411 => 11410, + 11413 => 11412, + 11415 => 11414, + 11417 => 11416, + 11419 => 11418, + 11421 => 11420, + 11423 => 11422, + 11425 => 11424, + 11427 => 11426, + 11429 => 11428, + 11431 => 11430, + 11433 => 11432, + 11435 => 11434, + 11437 => 11436, + 11439 => 11438, + 11441 => 11440, + 11443 => 11442, + 11445 => 11444, + 11447 => 11446, + 11449 => 11448, + 11451 => 11450, + 11453 => 11452, + 11455 => 11454, + 11457 => 11456, + 11459 => 11458, + 11461 => 11460, + 11463 => 11462, + 11465 => 11464, + 11467 => 11466, + 11469 => 11468, + 11471 => 11470, + 11473 => 11472, + 11475 => 11474, + 11477 => 11476, + 11479 => 11478, + 11481 => 11480, + 11483 => 11482, + 11485 => 11484, + 11487 => 11486, + 11489 => 11488, + 11491 => 11490, + 11500 => 11499, + 11502 => 11501, + 11520 => 4256, + 11521 => 4257, + 11522 => 4258, + 11523 => 4259, + 11524 => 4260, + 11525 => 4261, + 11526 => 4262, + 11527 => 4263, + 11528 => 4264, + 11529 => 4265, + 11530 => 4266, + 11531 => 4267, + 11532 => 4268, + 11533 => 4269, + 11534 => 4270, + 11535 => 4271, + 11536 => 4272, + 11537 => 4273, + 11538 => 4274, + 11539 => 4275, + 11540 => 4276, + 11541 => 4277, + 11542 => 4278, + 11543 => 4279, + 11544 => 4280, + 11545 => 4281, + 11546 => 4282, + 11547 => 4283, + 11548 => 4284, + 11549 => 4285, + 11550 => 4286, + 11551 => 4287, + 11552 => 4288, + 11553 => 4289, + 11554 => 4290, + 11555 => 4291, + 11556 => 4292, + 11557 => 4293, + 42561 => 42560, + 42563 => 42562, + 42565 => 42564, + 42567 => 42566, + 42569 => 42568, + 42571 => 42570, + 42573 => 42572, + 42575 => 42574, + 42577 => 42576, + 42579 => 42578, + 42581 => 42580, + 42583 => 42582, + 42585 => 42584, + 42587 => 42586, + 42589 => 42588, + 42591 => 42590, + 42595 => 42594, + 42597 => 42596, + 42599 => 42598, + 42601 => 42600, + 42603 => 42602, + 42605 => 42604, + 42625 => 42624, + 42627 => 42626, + 42629 => 42628, + 42631 => 42630, + 42633 => 42632, + 42635 => 42634, + 42637 => 42636, + 42639 => 42638, + 42641 => 42640, + 42643 => 42642, + 42645 => 42644, + 42647 => 42646, + 42787 => 42786, + 42789 => 42788, + 42791 => 42790, + 42793 => 42792, + 42795 => 42794, + 42797 => 42796, + 42799 => 42798, + 42803 => 42802, + 42805 => 42804, + 42807 => 42806, + 42809 => 42808, + 42811 => 42810, + 42813 => 42812, + 42815 => 42814, + 42817 => 42816, + 42819 => 42818, + 42821 => 42820, + 42823 => 42822, + 42825 => 42824, + 42827 => 42826, + 42829 => 42828, + 42831 => 42830, + 42833 => 42832, + 42835 => 42834, + 42837 => 42836, + 42839 => 42838, + 42841 => 42840, + 42843 => 42842, + 42845 => 42844, + 42847 => 42846, + 42849 => 42848, + 42851 => 42850, + 42853 => 42852, + 42855 => 42854, + 42857 => 42856, + 42859 => 42858, + 42861 => 42860, + 42863 => 42862, + 42874 => 42873, + 42876 => 42875, + 42879 => 42878, + 42881 => 42880, + 42883 => 42882, + 42885 => 42884, + 42887 => 42886, + 42892 => 42891, +); +?> \ No newline at end of file diff --git a/include/mpdf/mpdf.php b/include/mpdf/mpdf.php new file mode 100755 index 0000000000000000000000000000000000000000..91d310dda8dc9c810d5697873de236a2f5a7b3a1 --- /dev/null +++ b/include/mpdf/mpdf.php @@ -0,0 +1,32746 @@ +<?php + +// ****************************************************************************** +// Software: mPDF, Unicode-HTML Free PDF generator * +// Version: 5.7 based on * +// FPDF by Olivier PLATHEY * +// HTML2FPDF by Renato Coelho * +// Date: 2013-07-14 * +// Author: Ian Back <ianb@bpm1.com> * +// License: GPL * +// * +// Changes: See changelog.txt * +// ****************************************************************************** + + +define('mPDF_VERSION','5.7'); + +//Scale factor +define('_MPDFK', (72/25.4)); + +/*-- HTML-CSS --*/ +define('AUTOFONT_CJK',1); +define('AUTOFONT_THAIVIET',2); +define('AUTOFONT_RTL',4); +define('AUTOFONT_INDIC',8); +define('AUTOFONT_ALL',15); + +define('_BORDER_ALL',15); +define('_BORDER_TOP',8); +define('_BORDER_RIGHT',4); +define('_BORDER_BOTTOM',2); +define('_BORDER_LEFT',1); +/*-- END HTML-CSS --*/ + +if (!defined('_MPDF_PATH')) define('_MPDF_PATH', dirname(preg_replace('/\\\\/','/',__FILE__)) . '/'); +if (!defined('_MPDF_URI')) define('_MPDF_URI',_MPDF_PATH); + +require_once(_MPDF_PATH.'includes/functions.php'); +require_once(_MPDF_PATH.'config_cp.php'); + +if (!defined('_JPGRAPH_PATH')) define("_JPGRAPH_PATH", _MPDF_PATH.'jpgraph/'); + +if (!defined('_MPDF_TEMP_PATH')) define("_MPDF_TEMP_PATH", _MPDF_PATH.'tmp/'); + +if (!defined('_MPDF_TTFONTPATH')) { define('_MPDF_TTFONTPATH',_MPDF_PATH.'ttfonts/'); } +if (!defined('_MPDF_TTFONTDATAPATH')) { define('_MPDF_TTFONTDATAPATH',_MPDF_PATH.'ttfontdata/'); } + +$errorlevel=error_reporting(); +$errorlevel=error_reporting($errorlevel & ~E_NOTICE); + +//error_reporting(E_ALL); + +if(function_exists("date_default_timezone_set")) { + if (ini_get("date.timezone")=="") { date_default_timezone_set("Europe/London"); } +} +if (!function_exists("mb_strlen")) { die("Error - mPDF requires mb_string functions. Ensure that PHP is compiled with php_mbstring.dll enabled."); } + +if (!defined('PHP_VERSION_ID')) { + $version = explode('.', PHP_VERSION); + define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2])); +} +// Machine dependent number of bytes used to pack "double" into binary (used in cacheTables) +$test = pack("d", 134455.474557333333666); +define("_DSIZE", strlen($test)); + +class mPDF +{ + +/////////////////////////////// +// EXTERNAL (PUBLIC) VARIABLES +// Define these in config.php +/////////////////////////////// +var $CJKforceend; // mPDF 5.6.40 +// mPDF 5.6.34 +var $h2bookmarks; +var $h2toc; +var $decimal_align; // mPDF 5.6.13 +var $margBuffer; // mPDF 5.4.04 +var $splitTableBorderWidth; // mPDF 5.4.16 + +var $cacheTables; +var $bookmarkStyles; +var $useActiveForms; + +var $repackageTTF; +var $allowCJKorphans; +var $allowCJKoverflow; + +var $useKerning; +var $restrictColorSpace; +var $bleedMargin; +var $crossMarkMargin; +var $cropMarkMargin; +var $cropMarkLength; +var $nonPrintMargin; + +var $PDFX; +var $PDFXauto; + +var $PDFA; +var $PDFAauto; +var $ICCProfile; + +var $printers_info; +var $iterationCounter; +var $smCapsScale; +var $smCapsStretch; + +var $backupSubsFont; +var $backupSIPFont; +var $debugfonts; +var $useAdobeCJK; +var $percentSubset; +var $maxTTFFilesize; +var $BMPonly; + +var $tableMinSizePriority; + +var $dpi; +var $watermarkImgAlphaBlend; +var $watermarkImgBehind; +var $justifyB4br; +var $packTableData; +var $pgsIns; +var $simpleTables; +var $enableImports; + +var $debug; +var $showStats; +var $setAutoTopMargin; +var $setAutoBottomMargin; +var $autoMarginPadding; +var $collapseBlockMargins; +var $falseBoldWeight; +var $normalLineheight; +var $progressBar; +var $incrementFPR1; +var $incrementFPR2; +var $incrementFPR3; +var $incrementFPR4; + +var $SHYlang; +var $SHYleftmin; +var $SHYrightmin; +var $SHYcharmin; +var $SHYcharmax; +var $SHYlanguages; +// PageNumber Conditional Text +var $pagenumPrefix; +var $pagenumSuffix; +var $nbpgPrefix; +var $nbpgSuffix; +var $showImageErrors; +var $allow_output_buffering; +var $autoPadding; +var $useGraphs; +var $autoFontGroupSize; +var $tabSpaces; +var $useLang; +var $restoreBlockPagebreaks; +var $watermarkTextAlpha; +var $watermarkImageAlpha; +var $watermark_size; +var $watermark_pos; +var $annotSize; +var $annotMargin; +var $annotOpacity; +var $title2annots; +var $keepColumns; +var $keep_table_proportions; +var $ignore_table_widths; +var $ignore_table_percents; +var $list_align_style; +var $list_number_suffix; +var $useSubstitutions; +var $CSSselectMedia; + +var $forcePortraitHeaders; +var $forcePortraitMargins; +var $displayDefaultOrientation; +var $ignore_invalid_utf8; +var $allowedCSStags; +var $onlyCoreFonts; +var $allow_charset_conversion; + +var $jSWord; +var $jSmaxChar; +var $jSmaxCharLast; +var $jSmaxWordLast; + +var $max_colH_correction; + + +var $table_error_report; +var $table_error_report_param; +var $biDirectional; +var $text_input_as_HTML; +var $anchor2Bookmark; +var $list_indent_first_level; +var $shrink_tables_to_fit; + +var $allow_html_optional_endtags; + +var $img_dpi; + +var $defaultheaderfontsize; +var $defaultheaderfontstyle; +var $defaultheaderline; +var $defaultfooterfontsize; +var $defaultfooterfontstyle; +var $defaultfooterline; +var $header_line_spacing; +var $footer_line_spacing; + +var $pregUHCchars; +var $pregSJISchars; +var $pregCJKchars; +var $pregASCIIchars1; +var $pregASCIIchars2; +var $pregASCIIchars3; +var $pregVIETchars; +var $pregVIETPluschars; + +var $pregRTLchars; +var $pregHEBchars; +var $pregARABICchars; +var $pregNonARABICchars; +// INDIC +var $pregHIchars; +var $pregBNchars; +var $pregPAchars; +var $pregGUchars; +var $pregORchars; +var $pregTAchars; +var $pregTEchars; +var $pregKNchars; +var $pregMLchars; +var $pregSHchars; +var $pregINDextra; + +var $mirrorMargins; +var $default_lineheight_correction; +var $watermarkText; +var $watermarkImage; +var $showWatermarkText; +var $showWatermarkImage; + +var $fontsizes; + +// Aliases for backward compatability +var $UnvalidatedText; // alias = $watermarkText +var $TopicIsUnvalidated; // alias = $showWatermarkText +var $useOddEven; // alias = $mirrorMargins +var $useSubstitutionsMB; // alias = $useSubstitutions + + + +////////////////////// +// CLASS OBJECTS +////////////////////// +var $cssmgr; +var $grad; +var $bmp; +var $wmf; +var $tocontents; +var $form; +var $directw; + +////////////////////// +// INTERNAL VARIABLES +////////////////////// +var $writingToC; // mPDF 5.6.38 +// mPDF 5.6.01 +var $layers; +var $current_layer; +var $open_layer_pane; +var $decimal_offset; // mPDF 5.6.13 +var $inMeter; // mPDF 5.5.09 + +var $CJKleading; +var $CJKfollowing; +var $CJKoverflow; + +var $textshadow; + +var $colsums; +var $spanborder; +var $spanborddet; + +var $visibility; + +var $useRC128encryption; +var $uniqid; + +var $kerning; +var $fixedlSpacing; +var $minwSpacing; +var $lSpacingCSS; +var $wSpacingCSS; + +var $listDir; +var $spotColorIDs; +var $SVGcolors; +var $spotColors; +var $defTextColor; +var $defDrawColor; +var $defFillColor; + +var $tableBackgrounds; +var $inlineDisplayOff; +var $kt_y00; +var $kt_p00; +var $upperCase; +var $checkSIP; +var $checkSMP; +var $checkCJK; +var $tableCJK; + +var $watermarkImgAlpha; +var $PDFAXwarnings; +var $MetadataRoot; +var $OutputIntentRoot; +var $InfoRoot; +var $current_filename; +var $parsers; +var $current_parser; +var $_obj_stack; +var $_don_obj_stack; +var $_current_obj_id; +var $tpls; +var $tpl; +var $tplprefix; +var $_res; + +var $pdf_version; +var $noImageFile; +var $lastblockbottommargin; +var $baselineC; +var $subPos; +var $subArrMB; +var $ReqFontStyle; +var $tableClipPath ; +var $forceExactLineheight; +var $listOcc; + +var $fullImageHeight; +var $inFixedPosBlock; // Internal flag for position:fixed block +var $fixedPosBlock; // Buffer string for position:fixed block +var $fixedPosBlockDepth; +var $fixedPosBlockBBox; +var $fixedPosBlockSave; +var $maxPosL; +var $maxPosR; + +var $loaded; + +var $extraFontSubsets; +var $docTemplateStart; // Internal flag for page (page no. -1) that docTemplate starts on +var $time0; + +// Classes +var $indic; +var $barcode; + +var $SHYpatterns; +var $loadedSHYpatterns; +var $loadedSHYdictionary; +var $SHYdictionary; +var $SHYdictionaryWords; + +var $spanbgcolorarray; +var $default_font; +var $list_lineheight; +var $headerbuffer; +var $lastblocklevelchange; +var $nestedtablejustfinished; +var $linebreakjustfinished; +var $cell_border_dominance_L; +var $cell_border_dominance_R; +var $cell_border_dominance_T; +var $cell_border_dominance_B; +var $table_keep_together; +var $plainCell_properties; +var $inherit_lineheight; +var $listitemtype; +var $shrin_k1; +var $outerfilled; + +var $blockContext; +var $floatDivs; + + +var $patterns; +var $pageBackgrounds; + +var $bodyBackgroundGradient; +var $bodyBackgroundImage; +var $bodyBackgroundColor; + +var $writingHTMLheader; // internal flag - used both for writing HTMLHeaders/Footers and FixedPos block +var $writingHTMLfooter; +var $autoFontGroups; +var $angle; + +var $gradients; + +var $kwt_Reference; +var $kwt_BMoutlines; +var $kwt_toc; + +var $tbrot_Reference; +var $tbrot_BMoutlines; +var $tbrot_toc; + +var $col_Reference; +var $col_BMoutlines; +var $col_toc; + +var $currentGraphId; +var $graphs; + +var $floatbuffer; +var $floatmargins; + +var $bullet; +var $bulletarray; + +var $rtlAsArabicFarsi; // DEPRACATED + +var $currentLang; +var $default_lang; +var $default_available_fonts; +var $pageTemplate; +var $docTemplate; +var $docTemplateContinue; + +var $arabGlyphs; +var $arabHex; +var $persianGlyphs; +var $persianHex; +var $arabVowels; +var $arabPrevLink; +var $arabNextLink; + + +var $formobjects; // array of Form Objects for WMF +var $InlineProperties; +var $InlineAnnots; +var $ktAnnots; +var $tbrot_Annots; +var $kwt_Annots; +var $columnAnnots; +var $columnForms; + +var $PageAnnots; + +var $pageDim; // Keep track of page wxh for orientation changes - set in _beginpage, used in _putannots + +var $breakpoints; + +var $tableLevel; +var $tbctr; +var $innermostTableLevel; +var $saveTableCounter; +var $cellBorderBuffer; + +var $saveHTMLFooter_height; +var $saveHTMLFooterE_height; + +var $firstPageBoxHeader; +var $firstPageBoxHeaderEven; +var $firstPageBoxFooter; +var $firstPageBoxFooterEven; + +var $page_box; +var $show_marks; // crop or cross marks + +var $basepathIsLocal; + +var $use_kwt; +var $kwt; +var $kwt_height; +var $kwt_y0; +var $kwt_x0; +var $kwt_buffer; +var $kwt_Links; +var $kwt_moved; +var $kwt_saved; + +var $PageNumSubstitutions; + +var $table_borders_separate; +var $base_table_properties; +var $borderstyles; + +var $listjustfinished; +var $blockjustfinished; + +var $orig_bMargin; +var $orig_tMargin; +var $orig_lMargin; +var $orig_rMargin; +var $orig_hMargin; +var $orig_fMargin; + +var $pageheaders; +var $pagefooters; + +var $pageHTMLheaders; +var $pageHTMLfooters; + +var $saveHTMLHeader; +var $saveHTMLFooter; + +var $HTMLheaderPageLinks; +var $HTMLheaderPageAnnots; +var $HTMLheaderPageForms; + +// See config_fonts.php for these next 5 values +var $available_unifonts; +var $sans_fonts; +var $serif_fonts; +var $mono_fonts; +var $defaultSubsFont; + +// List of ALL available CJK fonts (incl. styles) (Adobe add-ons) hw removed +var $available_CJK_fonts; + +var $HTMLHeader; +var $HTMLFooter; +var $HTMLHeaderE; +var $HTMLFooterE; +var $bufferoutput; + +var $showdefaultpagenos; // DEPRACATED -left for backward compatability + + +// CJK fonts +var $Big5_widths; +var $GB_widths; +var $SJIS_widths; +var $UHC_widths; + +// SetProtection +var $encrypted; //whether document is protected +var $Uvalue; //U entry in pdf document +var $Ovalue; //O entry in pdf document +var $Pvalue; //P entry in pdf document +var $enc_obj_id; //encryption object id +var $last_rc4_key; //last RC4 key encrypted (cached for optimisation) +var $last_rc4_key_c; //last RC4 computed key +var $encryption_key; +var $padding; //used for encryption + + +// Bookmark +var $BMoutlines; +var $OutlineRoot; +// INDEX +var $ColActive; +var $Reference; +var $CurrCol; +var $NbCol; +var $y0; //Top ordinate of columns +var $ColL; +var $ColWidth; +var $ColGap; +// COLUMNS +var $ColR; +var $ChangeColumn; +var $columnbuffer; +var $ColDetails; +var $columnLinks; +var $colvAlign; +// Substitutions +var $substitute; // Array of substitution strings e.g. <ttz>112</ttz> +var $entsearch; // Array of HTML entities (>ASCII 127) to substitute +var $entsubstitute; // Array of substitution decimal unicode for the Hi entities + + +// Default values if no style sheet offered (cf. http://www.w3.org/TR/CSS21/sample.html) +var $defaultCSS; + +var $linemaxfontsize; +var $lineheight_correction; +var $lastoptionaltag; // Save current block item which HTML specifies optionsl endtag +var $pageoutput; +var $charset_in; +var $blk; +var $blklvl; +var $ColumnAdjust; +var $ws; // Word spacing +var $HREF; +var $pgwidth; +var $fontlist; +var $oldx; +var $oldy; +var $B; +var $U; //underlining flag +var $S; // SmallCaps flag +var $I; + +var $tdbegin; +var $table; +var $cell; +var $col; +var $row; + +var $divbegin; +var $divalign; +var $divwidth; +var $divheight; +var $divrevert; +var $spanbgcolor; + +var $spanlvl; +var $listlvl; +var $listnum; +var $listtype; +var $listoccur; +var $listlist; +var $listitem; + +var $pjustfinished; +var $ignorefollowingspaces; +var $SUP; +var $SUB; +var $SMALL; +var $BIG; +var $toupper; +var $tolower; +var $capitalize; +var $dash_on; +var $dotted_on; +var $strike; + +var $textbuffer; +var $currentfontstyle; +var $currentfontfamily; +var $currentfontsize; +var $colorarray; +var $bgcolorarray; +var $internallink; +var $enabledtags; + +var $lineheight; +var $basepath; +var $textparam; + +var $specialcontent; +var $selectoption; +var $objectbuffer; + +// Table Rotation +var $table_rotate; +var $tbrot_maxw; +var $tbrot_maxh; +var $tablebuffer; +var $tbrot_align; +var $tbrot_Links; + +var $divbuffer; // Buffer used when keeping DIV on one page +var $keep_block_together; // Keep a Block from page-break-inside: avoid +var $ktLinks; // Keep-together Block links array +var $ktBlock; // Keep-together Block array +var $ktForms; +var $ktReference; +var $ktBMoutlines; +var $_kttoc; + +var $tbrot_y0; +var $tbrot_x0; +var $tbrot_w; +var $tbrot_h; + +var $mb_enc; +var $directionality; + +var $extgstates; // Used for alpha channel - Transparency (Watermark) +var $mgl; +var $mgt; +var $mgr; +var $mgb; + +var $tts; +var $ttz; +var $tta; + +var $headerDetails; +var $footerDetails; + +// Best to alter the below variables using default stylesheet above +var $page_break_after_avoid; +var $margin_bottom_collapse; +var $list_indent; +var $list_align; +var $list_margin_bottom; +var $default_font_size; // in pts +var $original_default_font_size; // used to save default sizes when using table default +var $original_default_font; +var $watermark_font; +var $defaultAlign; + +// TABLE +var $defaultTableAlign; +var $tablethead; +var $thead_font_weight; +var $thead_font_style; +var $thead_font_smCaps; +var $thead_valign_default; +var $thead_textalign_default; +var $tabletfoot; +var $tfoot_font_weight; +var $tfoot_font_style; +var $tfoot_font_smCaps; +var $tfoot_valign_default; +var $tfoot_textalign_default; + +var $trow_text_rotate; + +var $cellPaddingL; +var $cellPaddingR; +var $cellPaddingT; +var $cellPaddingB; +var $table_lineheight; +var $table_border_attr_set; +var $table_border_css_set; + +var $shrin_k; // factor with which to shrink tables - used internally - do not change +var $shrink_this_table_to_fit; // 0 or false to disable; value (if set) gives maximum factor to reduce fontsize +var $MarginCorrection; // corrects for OddEven Margins +var $margin_footer; +var $margin_header; + +var $tabletheadjustfinished; +var $usingCoreFont; +var $charspacing; + +//Private properties FROM FPDF +var $DisplayPreferences; +var $flowingBlockAttr; +var $page; //current page number +var $n; //current object number +var $offsets; //array of object offsets +var $buffer; //buffer holding in-memory PDF +var $pages; //array containing pages +var $state; //current document state +var $compress; //compression flag +var $DefOrientation; //default orientation +var $CurOrientation; //current orientation +var $OrientationChanges; //array indicating orientation changes +var $k; //scale factor (number of points in user unit) +var $fwPt; +var $fhPt; //dimensions of page format in points +var $fw; +var $fh; //dimensions of page format in user unit +var $wPt; +var $hPt; //current dimensions of page in points +var $w; +var $h; //current dimensions of page in user unit +var $lMargin; //left margin +var $tMargin; //top margin +var $rMargin; //right margin +var $bMargin; //page break margin +var $cMarginL; //cell margin Left +var $cMarginR; //cell margin Right +var $cMarginT; //cell margin Left +var $cMarginB; //cell margin Right +var $DeflMargin; //Default left margin +var $DefrMargin; //Default right margin +var $x; +var $y; //current position in user unit for cell positioning +var $lasth; //height of last cell printed +var $LineWidth; //line width in user unit +var $CoreFonts; //array of standard font names +var $fonts; //array of used fonts +var $FontFiles; //array of font files +var $images; //array of used images +var $PageLinks; //array of links in pages +var $links; //array of internal links +var $FontFamily; //current font family +var $FontStyle; //current font style +var $CurrentFont; //current font info +var $FontSizePt; //current font size in points +var $FontSize; //current font size in user unit +var $DrawColor; //commands for drawing color +var $FillColor; //commands for filling color +var $TextColor; //commands for text color +var $ColorFlag; //indicates whether fill and text colors are different +var $autoPageBreak; //automatic page breaking +var $PageBreakTrigger; //threshold used to trigger page breaks +var $InFooter; //flag set when processing footer +var $InHTMLFooter; + +var $processingFooter; //flag set when processing footer - added for columns +var $processingHeader; //flag set when processing header - added for columns +var $ZoomMode; //zoom display mode +var $LayoutMode; //layout display mode +var $title; //title +var $subject; //subject +var $author; //author +var $keywords; //keywords +var $creator; //creator + +var $aliasNbPg; //alias for total number of pages +var $aliasNbPgGp; //alias for total number of pages in page group +var $aliasNbPgHex; +var $aliasNbPgGpHex; + +var $ispre; + +var $outerblocktags; +var $innerblocktags; + + +// ********************************** +// ********************************** +// ********************************** +// ********************************** +// ********************************** +// ********************************** +// ********************************** +// ********************************** +// ********************************** + +function mPDF($mode='',$format='A4',$default_font_size=0,$default_font='',$mgl=15,$mgr=15,$mgt=16,$mgb=16,$mgh=9,$mgf=9, $orientation='P') { + +/*-- BACKGROUNDS --*/ + if (!class_exists('grad', false)) { include(_MPDF_PATH.'classes/grad.php'); } + if (empty($this->grad)) { $this->grad = new grad($this); } +/*-- END BACKGROUNDS --*/ +/*-- FORMS -- + if (!class_exists('form', false)) { include(_MPDF_PATH.'classes/form.php'); } + if (empty($this->form)) { $this->form = new form($this); } +/*-- END FORMS --*/ + + $this->time0 = microtime(true); + //Some checks + $this->_dochecks(); + + // Set up Aliases for backwards compatability + $this->UnvalidatedText =& $this->watermarkText; + $this->TopicIsUnvalidated =& $this->showWatermarkText; + $this->AliasNbPg =& $this->aliasNbPg; + $this->AliasNbPgGp =& $this->aliasNbPgGp; + $this->BiDirectional =& $this->biDirectional; + $this->Anchor2Bookmark =& $this->anchor2Bookmark; + $this->KeepColumns =& $this->keepColumns; + $this->useOddEven =& $this->mirrorMargins; + $this->useSubstitutionsMB =& $this->useSubstitutions; + + $this->writingToC = false; // mPDF 5.6.38 + // mPDF 5.6.01 + $this->layers = array(); + $this->current_layer = 0; + $this->open_layer_pane = false; + + $this->visibility='visible'; + + //Initialization of properties + $this->spotColors=array(); + $this->spotColorIDs = array(); + $this->tableBackgrounds = array(); + + $this->kt_y00 = ''; + $this->kt_p00 = ''; + $this->iterationCounter = false; + $this->BMPonly = array(); + $this->page=0; + $this->n=2; + $this->buffer=''; + $this->objectbuffer = array(); + $this->pages=array(); + $this->OrientationChanges=array(); + $this->state=0; + $this->fonts=array(); + $this->FontFiles=array(); + $this->images=array(); + $this->links=array(); + $this->InFooter=false; + $this->processingFooter=false; + $this->processingHeader=false; + $this->lasth=0; + $this->FontFamily=''; + $this->FontStyle=''; + $this->FontSizePt=9; + $this->U=false; + // Small Caps + $this->upperCase = array(); + $this->S = false; + $this->smCapsScale = 1; + $this->smCapsStretch = 100; + $this->margBuffer = 0; // mPDF 5.4.04 + $this->inMeter = false; // mPDF 5.5.09 + $this->decimal_offset = 0; + + $this->defTextColor = $this->TextColor = $this->SetTColor($this->ConvertColor(0),true); + $this->defDrawColor = $this->DrawColor = $this->SetDColor($this->ConvertColor(0),true); + $this->defFillColor = $this->FillColor = $this->SetFColor($this->ConvertColor(255),true); + + //SVG color names array + //http://www.w3schools.com/css/css_colornames.asp + $this->SVGcolors = array('antiquewhite'=>'#FAEBD7','aqua'=>'#00FFFF','aquamarine'=>'#7FFFD4','beige'=>'#F5F5DC','black'=>'#000000', +'blue'=>'#0000FF','brown'=>'#A52A2A','cadetblue'=>'#5F9EA0','chocolate'=>'#D2691E','cornflowerblue'=>'#6495ED','crimson'=>'#DC143C', +'darkblue'=>'#00008B','darkgoldenrod'=>'#B8860B','darkgreen'=>'#006400','darkmagenta'=>'#8B008B','darkorange'=>'#FF8C00', +'darkred'=>'#8B0000','darkseagreen'=>'#8FBC8F','darkslategray'=>'#2F4F4F','darkviolet'=>'#9400D3','deepskyblue'=>'#00BFFF', +'dodgerblue'=>'#1E90FF','firebrick'=>'#B22222','forestgreen'=>'#228B22','fuchsia'=>'#FF00FF','gainsboro'=>'#DCDCDC','gold'=>'#FFD700', +'gray'=>'#808080','green'=>'#008000','greenyellow'=>'#ADFF2F','hotpink'=>'#FF69B4','indigo'=>'#4B0082','khaki'=>'#F0E68C', +'lavenderblush'=>'#FFF0F5','lemonchiffon'=>'#FFFACD','lightcoral'=>'#F08080','lightgoldenrodyellow'=>'#FAFAD2','lightgreen'=>'#90EE90', +'lightsalmon'=>'#FFA07A','lightskyblue'=>'#87CEFA','lightslategray'=>'#778899','lightyellow'=>'#FFFFE0','lime'=>'#00FF00','limegreen'=>'#32CD32', +'magenta'=>'#FF00FF','maroon'=>'#800000','mediumaquamarine'=>'#66CDAA','mediumorchid'=>'#BA55D3','mediumseagreen'=>'#3CB371', +'mediumspringgreen'=>'#00FA9A','mediumvioletred'=>'#C71585','midnightblue'=>'#191970','mintcream'=>'#F5FFFA','moccasin'=>'#FFE4B5','navy'=>'#000080', +'olive'=>'#808000','orange'=>'#FFA500','orchid'=>'#DA70D6','palegreen'=>'#98FB98', +'palevioletred'=>'#D87093','peachpuff'=>'#FFDAB9','pink'=>'#FFC0CB','powderblue'=>'#B0E0E6','purple'=>'#800080', +'red'=>'#FF0000','royalblue'=>'#4169E1','salmon'=>'#FA8072','seagreen'=>'#2E8B57','sienna'=>'#A0522D','silver'=>'#C0C0C0','skyblue'=>'#87CEEB', +'slategray'=>'#708090','springgreen'=>'#00FF7F','steelblue'=>'#4682B4','tan'=>'#D2B48C','teal'=>'#008080','thistle'=>'#D8BFD8','turquoise'=>'#40E0D0', +'violetred'=>'#D02090','white'=>'#FFFFFF','yellow'=>'#FFFF00', +'aliceblue'=>'#f0f8ff', 'azure'=>'#f0ffff', 'bisque'=>'#ffe4c4', 'blanchedalmond'=>'#ffebcd', 'blueviolet'=>'#8a2be2', 'burlywood'=>'#deb887', +'chartreuse'=>'#7fff00', 'coral'=>'#ff7f50', 'cornsilk'=>'#fff8dc', 'cyan'=>'#00ffff', 'darkcyan'=>'#008b8b', 'darkgray'=>'#a9a9a9', +'darkgrey'=>'#a9a9a9', 'darkkhaki'=>'#bdb76b', 'darkolivegreen'=>'#556b2f', 'darkorchid'=>'#9932cc', 'darksalmon'=>'#e9967a', +'darkslateblue'=>'#483d8b', 'darkslategrey'=>'#2f4f4f', 'darkturquoise'=>'#00ced1', 'deeppink'=>'#ff1493', 'dimgray'=>'#696969', +'dimgrey'=>'#696969', 'floralwhite'=>'#fffaf0', 'ghostwhite'=>'#f8f8ff', 'goldenrod'=>'#daa520', 'grey'=>'#808080', 'honeydew'=>'#f0fff0', +'indianred'=>'#cd5c5c', 'ivory'=>'#fffff0', 'lavender'=>'#e6e6fa', 'lawngreen'=>'#7cfc00', 'lightblue'=>'#add8e6', 'lightcyan'=>'#e0ffff', +'lightgray'=>'#d3d3d3', 'lightgrey'=>'#d3d3d3', 'lightpink'=>'#ffb6c1', 'lightseagreen'=>'#20b2aa', 'lightslategrey'=>'#778899', +'lightsteelblue'=>'#b0c4de', 'linen'=>'#faf0e6', 'mediumblue'=>'#0000cd', 'mediumpurple'=>'#9370db', 'mediumslateblue'=>'#7b68ee', +'mediumturquoise'=>'#48d1cc', 'mistyrose'=>'#ffe4e1', 'navajowhite'=>'#ffdead', 'oldlace'=>'#fdf5e6', 'olivedrab'=>'#6b8e23', 'orangered'=>'#ff4500', +'palegoldenrod'=>'#eee8aa', 'paleturquoise'=>'#afeeee', 'papayawhip'=>'#ffefd5', 'peru'=>'#cd853f', 'plum'=>'#dda0dd', 'rosybrown'=>'#bc8f8f', +'saddlebrown'=>'#8b4513', 'sandybrown'=>'#f4a460', 'seashell'=>'#fff5ee', 'slateblue'=>'#6a5acd', 'slategrey'=>'#708090', 'snow'=>'#fffafa', +'tomato'=>'#ff6347', 'violet'=>'#ee82ee', 'wheat'=>'#f5deb3', 'whitesmoke'=>'#f5f5f5', 'yellowgreen'=>'#9acd32'); + + $this->ColorFlag=false; + $this->extgstates = array(); + + $this->mb_enc='windows-1252'; + $this->directionality='ltr'; + $this->defaultAlign = 'L'; + $this->defaultTableAlign = 'L'; + + $this->fixedPosBlockSave = array(); + $this->extraFontSubsets = 0; + + $this->SHYpatterns = array(); + $this->loadedSHYdictionary = false; + $this->SHYdictionary = array(); + $this->SHYdictionaryWords = array(); + $this->blockContext = 1; + $this->floatDivs = array(); + $this->DisplayPreferences=''; + + $this->patterns = array(); // Tiling patterns used for backgrounds + $this->pageBackgrounds = array(); + $this->writingHTMLheader = false; // internal flag - used both for writing HTMLHeaders/Footers and FixedPos block + $this->writingHTMLfooter = false; // internal flag - used both for writing HTMLHeaders/Footers and FixedPos block + $this->gradients = array(); + + $this->kwt_Reference = array(); + $this->kwt_BMoutlines = array(); + $this->kwt_toc = array(); + + $this->tbrot_Reference = array(); + $this->tbrot_BMoutlines = array(); + $this->tbrot_toc = array(); + + $this->col_Reference = array(); + $this->col_BMoutlines = array(); + $this->col_toc = array(); + $this->graphs = array(); + + $this->pgsIns = array(); + $this->PDFAXwarnings = array(); + $this->inlineDisplayOff = false; + $this->kerning = false; + $this->lSpacingCSS = ''; + $this->wSpacingCSS = ''; + $this->fixedlSpacing = false; + $this->minwSpacing = 0; + + + $this->baselineC = 0.35; // Baseline for text + $this->noImageFile = str_replace("\\","/",dirname(__FILE__)) . '/includes/no_image.jpg'; + $this->subPos = 0; + $this->forceExactLineheight = false; + $this->listOcc = 0; + $this->normalLineheight = 1.3; + // These are intended as configuration variables, and should be set in config.php - which will override these values; + // set here as failsafe as will cause an error if not defined + $this->incrementFPR1 = 10; + $this->incrementFPR2 = 10; + $this->incrementFPR3 = 10; + $this->incrementFPR4 = 10; + + $this->fullImageHeight = false; + $this->floatbuffer = array(); + $this->floatmargins = array(); + $this->autoFontGroups = 0; + $this->formobjects=array(); // array of Form Objects for WMF + $this->InlineProperties=array(); + $this->InlineAnnots=array(); + $this->ktAnnots=array(); + $this->tbrot_Annots=array(); + $this->kwt_Annots=array(); + $this->columnAnnots=array(); + $this->pageDim=array(); + $this->breakpoints = array(); // used in columnbuffer + $this->tableLevel=0; + $this->tbctr=array(); // counter for nested tables at each level + $this->page_box = array(); + $this->show_marks = ''; // crop or cross marks + $this->kwt = false; + $this->kwt_height = 0; + $this->kwt_y0 = 0; + $this->kwt_x0 = 0; + $this->kwt_buffer = array(); + $this->kwt_Links = array(); + $this->kwt_moved = false; + $this->kwt_saved = false; + $this->PageNumSubstitutions = array(); + $this->base_table_properties=array(); + $this->borderstyles = array('inset','groove','outset','ridge','dotted','dashed','solid','double'); + $this->tbrot_align = 'C'; + $this->pageheaders=array(); + $this->pagefooters=array(); + + $this->pageHTMLheaders=array(); + $this->pageHTMLfooters=array(); + $this->HTMLheaderPageLinks = array(); + $this->HTMLheaderPageAnnots = array(); + + $this->ktForms = array(); + $this->HTMLheaderPageForms = array(); + $this->columnForms = array(); + $this->tbrotForms = array(); + $this->useRC128encryption = false; + $this->uniqid = ''; + + $this->bufferoutput = false; + $this->encrypted=false; //whether document is protected + $this->BMoutlines=array(); + $this->ColActive=0; //Flag indicating that columns are on (the index is being processed) + $this->Reference=array(); //Array containing the references + $this->CurrCol=0; //Current column number + $this->ColL = array(0); // Array of Left pos of columns - absolute - needs Margin correction for Odd-Even + $this->ColR = array(0); // Array of Right pos of columns - absolute pos - needs Margin correction for Odd-Even + $this->ChangeColumn = 0; + $this->columnbuffer = array(); + $this->ColDetails = array(); // Keeps track of some column details + $this->columnLinks = array(); // Cross references PageLinks + $this->substitute = array(); // Array of substitution strings e.g. <ttz>112</ttz> + $this->entsearch = array(); // Array of HTML entities (>ASCII 127) to substitute + $this->entsubstitute = array(); // Array of substitution decimal unicode for the Hi entities + $this->lastoptionaltag = ''; + $this->charset_in = ''; + $this->blk = array(); + $this->blklvl = 0; + $this->tts = false; + $this->ttz = false; + $this->tta = false; + $this->ispre=false; + + $this->checkSIP = false; + $this->checkSMP = false; + $this->checkCJK = false; + $this->tableCJK = false; + + $this->headerDetails=array(); + $this->footerDetails=array(); + $this->page_break_after_avoid = false; + $this->margin_bottom_collapse = false; + $this->tablethead = 0; + $this->tabletfoot = 0; + $this->table_border_attr_set = 0; + $this->table_border_css_set = 0; + $this->shrin_k = 1.0; + $this->shrink_this_table_to_fit = 0; + $this->MarginCorrection = 0; + + $this->tabletheadjustfinished = false; + $this->usingCoreFont = false; + $this->charspacing=0; + + $this->autoPageBreak = true; + + require(_MPDF_PATH.'config.php'); // config data + + $this->_setPageSize($format, $orientation); + $this->DefOrientation=$orientation; + + $this->margin_header=$mgh; + $this->margin_footer=$mgf; + + $bmargin=$mgb; + + $this->DeflMargin = $mgl; + $this->DefrMargin = $mgr; + + $this->orig_tMargin = $mgt; + $this->orig_bMargin = $bmargin; + $this->orig_lMargin = $this->DeflMargin; + $this->orig_rMargin = $this->DefrMargin; + $this->orig_hMargin = $this->margin_header; + $this->orig_fMargin = $this->margin_footer; + + if ($this->setAutoTopMargin=='pad') { $mgt += $this->margin_header; } + if ($this->setAutoBottomMargin=='pad') { $mgb += $this->margin_footer; } + $this->SetMargins($this->DeflMargin,$this->DefrMargin,$mgt); // sets l r t margin + //Automatic page break + $this->SetAutoPageBreak($this->autoPageBreak,$bmargin); // sets $this->bMargin & PageBreakTrigger + + $this->pgwidth = $this->w - $this->lMargin - $this->rMargin; + + //Interior cell margin (1 mm) ? not used + $this->cMarginL = 1; + $this->cMarginR = 1; + //Line width (0.2 mm) + $this->LineWidth=.567/_MPDFK; + + //To make the function Footer() work - replaces {nb} with page number + $this->AliasNbPages(); + $this->AliasNbPageGroups(); + + $this->aliasNbPgHex = '{nbHEXmarker}'; + $this->aliasNbPgGpHex = '{nbpgHEXmarker}'; + + //Enable all tags as default + $this->DisableTags(); + //Full width display mode + $this->SetDisplayMode(100); // fullwidth? 'fullpage' + //Compression + $this->SetCompression(true); + //Set default display preferences + $this->SetDisplayPreferences(''); + + // Font data + require(_MPDF_PATH.'config_fonts.php'); + // Available fonts + $this->available_unifonts = array(); + foreach ($this->fontdata AS $f => $fs) { + if (isset($fs['R']) && $fs['R']) { $this->available_unifonts[] = $f; } + if (isset($fs['B']) && $fs['B']) { $this->available_unifonts[] = $f.'B'; } + if (isset($fs['I']) && $fs['I']) { $this->available_unifonts[] = $f.'I'; } + if (isset($fs['BI']) && $fs['BI']) { $this->available_unifonts[] = $f.'BI'; } + } + + $this->default_available_fonts = $this->available_unifonts; + + $optcore = false; + $onlyCoreFonts = false; + if (preg_match('/([\-+])aCJK/i',$mode, $m)) { + preg_replace('/([\-+])aCJK/i','',$mode); + if ($m[1]=='+') { $this->useAdobeCJK = true; } + else { $this->useAdobeCJK = false; } + } + + if (strlen($mode)==1) { + if ($mode=='s') { $this->percentSubset = 100; $mode = ''; } + else if ($mode=='c') { $onlyCoreFonts = true; $mode = ''; } + } + else if (substr($mode,-2)=='-s') { + $this->percentSubset = 100; + $mode = substr($mode,0,strlen($mode)-2); + } + else if (substr($mode,-2)=='-c') { + $onlyCoreFonts = true; + $mode = substr($mode,0,strlen($mode)-2); + } + else if (substr($mode,-2)=='-x') { + $optcore = true; + $mode = substr($mode,0,strlen($mode)-2); + } + + // Autodetect if mode is a language_country string (en-GB or en_GB or en) + if ((strlen($mode) == 5 && $mode != 'UTF-8') || strlen($mode) == 2) { + list ($coreSuitable,$mpdf_pdf_unifonts) = GetLangOpts($mode, $this->useAdobeCJK); + if ($coreSuitable && $optcore) { $onlyCoreFonts = true; } + if ($mpdf_pdf_unifonts) { + $this->RestrictUnicodeFonts($mpdf_pdf_unifonts); + $this->default_available_fonts = $mpdf_pdf_unifonts; + } + $this->currentLang = $mode; + $this->default_lang = $mode; + } + + $this->onlyCoreFonts = $onlyCoreFonts; + + if ($this->onlyCoreFonts) { + $this->setMBencoding('windows-1252'); // sets $this->mb_enc + } + else { + $this->setMBencoding('UTF-8'); // sets $this->mb_enc + } + @mb_regex_encoding('UTF-8'); // required only for mb_ereg... and mb_split functions + + + // Adobe CJK fonts + $this->available_CJK_fonts = array('gb','big5','sjis','uhc','gbB','big5B','sjisB','uhcB','gbI','big5I','sjisI','uhcI', + 'gbBI','big5BI','sjisBI','uhcBI'); + + + //Standard fonts + $this->CoreFonts=array('ccourier'=>'Courier','ccourierB'=>'Courier-Bold','ccourierI'=>'Courier-Oblique','ccourierBI'=>'Courier-BoldOblique', + 'chelvetica'=>'Helvetica','chelveticaB'=>'Helvetica-Bold','chelveticaI'=>'Helvetica-Oblique','chelveticaBI'=>'Helvetica-BoldOblique', + 'ctimes'=>'Times-Roman','ctimesB'=>'Times-Bold','ctimesI'=>'Times-Italic','ctimesBI'=>'Times-BoldItalic', + 'csymbol'=>'Symbol','czapfdingbats'=>'ZapfDingbats'); + $this->fontlist=array("ctimes","ccourier","chelvetica","csymbol","czapfdingbats"); + + // Substitutions + $this->setHiEntitySubstitutions(); + + if ($this->onlyCoreFonts) { + $this->useSubstitutions = true; + $this->SetSubstitutions(); + } + else { $this->useSubstitutions = false; } + +/*-- HTML-CSS --*/ + + if (!class_exists('cssmgr', false)) { include(_MPDF_PATH .'classes/cssmgr.php'); } + $this->cssmgr = new cssmgr($this); + if (file_exists(_MPDF_PATH.'mpdf.css')) { + $css = file_get_contents(_MPDF_PATH.'mpdf.css'); + $css2 = $this->cssmgr->ReadDefaultCSS($css); + $this->defaultCSS = $this->cssmgr->array_merge_recursive_unique($this->defaultCSS,$css2); + } +/*-- END HTML-CSS --*/ + + if ($default_font=='') { + if ($this->onlyCoreFonts) { + if (in_array(strtolower($this->defaultCSS['BODY']['FONT-FAMILY']),$this->mono_fonts)) { $default_font = 'ccourier'; } + else if (in_array(strtolower($this->defaultCSS['BODY']['FONT-FAMILY']),$this->sans_fonts)) { $default_font = 'chelvetica'; } + else { $default_font = 'ctimes'; } + } + else { $default_font = $this->defaultCSS['BODY']['FONT-FAMILY']; } + } + if (!$default_font_size) { + $mmsize = $this->ConvertSize($this->defaultCSS['BODY']['FONT-SIZE']); + $default_font_size = $mmsize*(_MPDFK); + } + + if ($default_font) { $this->SetDefaultFont($default_font); } + if ($default_font_size) { $this->SetDefaultFontSize($default_font_size); } + + $this->SetLineHeight(); // lineheight is in mm + + $this->SetFColor($this->ConvertColor(255)); + $this->HREF=''; + $this->oldy=-1; + $this->B=0; + $this->U=false; + $this->S=false; + $this->I=0; + + $this->listlvl=0; + $this->listnum=0; + $this->listtype=''; + $this->listoccur=array(); + $this->listlist=array(); + $this->listitem=array(); + + $this->tdbegin=false; + $this->table=array(); + $this->cell=array(); + $this->col=-1; + $this->row=-1; + $this->cellBorderBuffer = array(); + + $this->divbegin=false; + $this->divalign=''; + $this->divwidth=0; + $this->divheight=0; + $this->spanbgcolor=false; + $this->divrevert=false; + $this->spanborder=false; + $this->spanborddet=array(); + + $this->blockjustfinished=false; + $this->listjustfinished=false; + $this->ignorefollowingspaces = true; //in order to eliminate exceeding left-side spaces + $this->toupper=false; + $this->tolower=false; + $this->capitalize=false; + $this->dash_on=false; + $this->dotted_on=false; + $this->SUP=false; + $this->SUB=false; + $this->strike=false; + $this->textshadow=''; + + $this->currentfontfamily=''; + $this->currentfontsize=''; + $this->currentfontstyle=''; + $this->colorarray=array(); + $this->spanbgcolorarray=array(); + $this->textbuffer=array(); + $this->internallink=array(); + $this->basepath = ""; + + $this->SetBasePath(''); + + $this->textparam = array(); + + $this->specialcontent = ''; + $this->selectoption = array(); + +/*-- IMPORTS --*/ + + $this->tpls = array(); + $this->tpl = 0; + $this->tplprefix = "/TPL"; + $this->res = array(); + if ($this->enableImports) { + $this->SetImportUse(); + } +/*-- END IMPORTS --*/ + + if ($this->progressBar) { $this->StartProgressBarOutput($this->progressBar) ; } // *PROGRESS-BAR* +} + + +function _setPageSize($format, &$orientation) { + //Page format + if(is_string($format)) + { + if ($format=='') { $format = 'A4'; } + $pfo = 'P'; + if(preg_match('/([0-9a-zA-Z]*)-L/i',$format,$m)) { // e.g. A4-L = A4 landscape + $format=$m[1]; + $pfo='L'; + } + $format = $this->_getPageFormat($format); + if (!$format) { $this->Error('Unknown page format: '.$format); } + else { $orientation = $pfo; } + + $this->fwPt=$format[0]; + $this->fhPt=$format[1]; + } + else + { + if (!$format[0] || !$format[1]) { $this->Error('Invalid page format: '.$format[0].' '.$format[1]); } + $this->fwPt=$format[0]*_MPDFK; + $this->fhPt=$format[1]*_MPDFK; + } + $this->fw=$this->fwPt/_MPDFK; + $this->fh=$this->fhPt/_MPDFK; + //Page orientation + $orientation=strtolower($orientation); + if($orientation=='p' or $orientation=='portrait') + { + $orientation='P'; + $this->wPt=$this->fwPt; + $this->hPt=$this->fhPt; + } + elseif($orientation=='l' or $orientation=='landscape') + { + $orientation='L'; + $this->wPt=$this->fhPt; + $this->hPt=$this->fwPt; + } + else $this->Error('Incorrect orientation: '.$orientation); + $this->CurOrientation=$orientation; + + $this->w=$this->wPt/_MPDFK; + $this->h=$this->hPt/_MPDFK; +} + +function _getPageFormat($format) { + switch (strtoupper($format)) { + case '4A0': {$format = array(4767.87,6740.79); break;} + case '2A0': {$format = array(3370.39,4767.87); break;} + case 'A0': {$format = array(2383.94,3370.39); break;} + case 'A1': {$format = array(1683.78,2383.94); break;} + case 'A2': {$format = array(1190.55,1683.78); break;} + case 'A3': {$format = array(841.89,1190.55); break;} + case 'A4': default: {$format = array(595.28,841.89); break;} + case 'A5': {$format = array(419.53,595.28); break;} + case 'A6': {$format = array(297.64,419.53); break;} + case 'A7': {$format = array(209.76,297.64); break;} + case 'A8': {$format = array(147.40,209.76); break;} + case 'A9': {$format = array(104.88,147.40); break;} + case 'A10': {$format = array(73.70,104.88); break;} + case 'B0': {$format = array(2834.65,4008.19); break;} + case 'B1': {$format = array(2004.09,2834.65); break;} + case 'B2': {$format = array(1417.32,2004.09); break;} + case 'B3': {$format = array(1000.63,1417.32); break;} + case 'B4': {$format = array(708.66,1000.63); break;} + case 'B5': {$format = array(498.90,708.66); break;} + case 'B6': {$format = array(354.33,498.90); break;} + case 'B7': {$format = array(249.45,354.33); break;} + case 'B8': {$format = array(175.75,249.45); break;} + case 'B9': {$format = array(124.72,175.75); break;} + case 'B10': {$format = array(87.87,124.72); break;} + case 'C0': {$format = array(2599.37,3676.54); break;} + case 'C1': {$format = array(1836.85,2599.37); break;} + case 'C2': {$format = array(1298.27,1836.85); break;} + case 'C3': {$format = array(918.43,1298.27); break;} + case 'C4': {$format = array(649.13,918.43); break;} + case 'C5': {$format = array(459.21,649.13); break;} + case 'C6': {$format = array(323.15,459.21); break;} + case 'C7': {$format = array(229.61,323.15); break;} + case 'C8': {$format = array(161.57,229.61); break;} + case 'C9': {$format = array(113.39,161.57); break;} + case 'C10': {$format = array(79.37,113.39); break;} + case 'RA0': {$format = array(2437.80,3458.27); break;} + case 'RA1': {$format = array(1729.13,2437.80); break;} + case 'RA2': {$format = array(1218.90,1729.13); break;} + case 'RA3': {$format = array(864.57,1218.90); break;} + case 'RA4': {$format = array(609.45,864.57); break;} + case 'SRA0': {$format = array(2551.18,3628.35); break;} + case 'SRA1': {$format = array(1814.17,2551.18); break;} + case 'SRA2': {$format = array(1275.59,1814.17); break;} + case 'SRA3': {$format = array(907.09,1275.59); break;} + case 'SRA4': {$format = array(637.80,907.09); break;} + case 'LETTER': {$format = array(612.00,792.00); break;} + case 'LEGAL': {$format = array(612.00,1008.00); break;} + case 'LEDGER': {$format = array(279.00,432.00); break;} + case 'TABLOID': {$format = array(279.00,432.00); break;} + case 'EXECUTIVE': {$format = array(521.86,756.00); break;} + case 'FOLIO': {$format = array(612.00,936.00); break;} + case 'B': {$format=array(362.83,561.26 ); break;} // 'B' format paperback size 128x198mm + case 'A': {$format=array(314.65,504.57 ); break;} // 'A' format paperback size 111x178mm + case 'DEMY': {$format=array(382.68,612.28 ); break;} // 'Demy' format paperback size 135x216mm + case 'ROYAL': {$format=array(433.70,663.30 ); break;} // 'Royal' format paperback size 153x234mm + default: $format = false; + } + return $format; +} + + +/*-- PROGRESS-BAR --*/ +function StartProgressBarOutput($mode=1) { + // must be relative path, or URI (not a file system path) + if (!defined('_MPDF_URI')) { + $this->progressBar = false; + if ($this->debug) { $this->Error("You need to define _MPDF_URI to use the progress bar!"); } + else return false; + } + $this->progressBar = $mode; + if ($this->progbar_altHTML) { + echo $this->progbar_altHTML; + } + else { + echo '<html> + <head> + <title>mPDF File Progress</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <link rel="stylesheet" type="text/css" href="'._MPDF_URI.'progbar.css" /> + </head> + <body> + <div class="main"> + <div class="heading">'.$this->progbar_heading.'</div> + <div class="demo"> + '; + if ($this->progressBar==2) { echo ' <table width="100%"><tr><td style="width: 50%;"> + <span class="barheading">Writing HTML code</span> <br/> + + <div class="progressBar"> + <div id="element1" class="innerBar"> </div> + </div> + <span class="code" id="box1"></span> + </td><td style="width: 50%;"> + <span class="barheading">Autosizing elements</span> <br/> + <div class="progressBar"> + <div id="element4" class="innerBar"> </div> + </div> + <span class="code" id="box4"></span> + <br/><br/> + <span class="barheading">Writing Tables</span> <br/> + <div class="progressBar"> + <div id="element7" class="innerBar"> </div> + </div> + <span class="code" id="box7"></span> + </td></tr> + <tr><td><br /><br /></td><td></td></tr> + <tr><td style="width: 50%;"> + '; } + echo ' <span class="barheading">Writing PDF file</span> <br/> + <div class="progressBar"> + <div id="element2" class="innerBar"> </div> + </div> + <span class="code" id="box2"></span> + '; + if ($this->progressBar==2) { echo ' + </td><td style="width: 50%;"> + <span class="barheading">Memory usage</span> <br/> + <div class="progressBar"> + <div id="element5" class="innerBar"> </div> + </div> + <span id="box5">0</span> '.ini_get("memory_limit").'<br /> + <br/><br/> + <span class="barheading">Memory usage (peak)</span> <br/> + <div class="progressBar"> + <div id="element6" class="innerBar"> </div> + </div> + <span id="box6">0</span> '.ini_get("memory_limit").'<br /> + </td></tr> + </table> + '; } + echo ' <br/><br/> + <span id="box3"></span> + + </div> + '; + } + ob_flush(); + flush(); +} + +function UpdateProgressBar($el,$val,$txt='') { + // $val should be a string - 5 = actual value, +15 = increment + + if ($this->progressBar<2) { + if ($el>3) { return; } + else if ($el ==1) { $el = 2; } + } + echo '<script type="text/javascript">'; + if ($val) { echo ' document.getElementById(\'element'.$el.'\').style.width=\''.$val.'%\'; '; } + if ($txt) { echo ' document.getElementById(\'box'.$el.'\').innerHTML=\''.$txt.'\'; '; } + if ($this->progressBar==2) { + $m = round(memory_get_usage(true)/1048576); + $m2 = round(memory_get_peak_usage(true)/1048576); + $mem = $m * 100 / (ini_get("memory_limit")+0); + $mem2 = $m2 * 100 / (ini_get("memory_limit")+0); + echo ' document.getElementById(\'element5\').style.width=\''.$mem.'%\'; '; + echo ' document.getElementById(\'element6\').style.width=\''.$mem2.'%\'; '; + echo ' document.getElementById(\'box5\').innerHTML=\''.$m.'MB / \'; '; + echo ' document.getElementById(\'box6\').innerHTML=\''.$m2.'MB / \'; '; + } + echo '</script>'."\n"; + ob_flush(); + flush(); +} +/*-- END PROGRESS-BAR --*/ + + + +function RestrictUnicodeFonts($res) { + // $res = array of (Unicode) fonts to restrict to: e.g. norasi|norasiB - language specific + if (count($res)) { // Leave full list of available fonts if passed blank array + $this->available_unifonts = $res; + } + else { $this->available_unifonts = $this->default_available_fonts; } + if (count($this->available_unifonts) == 0) { $this->available_unifonts[] = $this->default_available_fonts[0]; } + $this->available_unifonts = array_values($this->available_unifonts); +} + + +function setMBencoding($enc) { + if ($this->mb_enc != $enc) { + $this->mb_enc = $enc; + mb_internal_encoding($this->mb_enc); + } +} + + +function SetMargins($left,$right,$top) { + //Set left, top and right margins + $this->lMargin=$left; + $this->rMargin=$right; + $this->tMargin=$top; +} + +function ResetMargins() { + //ReSet left, top margins + if (($this->forcePortraitHeaders || $this->forcePortraitMargins) && $this->DefOrientation=='P' && $this->CurOrientation=='L') { + if (($this->mirrorMargins) && (($this->page)%2==0)) { // EVEN + $this->tMargin=$this->orig_rMargin; + $this->bMargin=$this->orig_lMargin; + } + else { // ODD // OR NOT MIRRORING MARGINS/FOOTERS + $this->tMargin=$this->orig_lMargin; + $this->bMargin=$this->orig_rMargin; + } + $this->lMargin=$this->DeflMargin; + $this->rMargin=$this->DefrMargin; + $this->MarginCorrection = 0; + $this->PageBreakTrigger=$this->h-$this->bMargin; + } + else if (($this->mirrorMargins) && (($this->page)%2==0)) { // EVEN + $this->lMargin=$this->DefrMargin; + $this->rMargin=$this->DeflMargin; + $this->MarginCorrection = $this->DefrMargin-$this->DeflMargin; + + } + else { // ODD // OR NOT MIRRORING MARGINS/FOOTERS + $this->lMargin=$this->DeflMargin; + $this->rMargin=$this->DefrMargin; + if ($this->mirrorMargins) { $this->MarginCorrection = $this->DeflMargin-$this->DefrMargin; } + } + $this->x=$this->lMargin; + +} + +function SetLeftMargin($margin) { + //Set left margin + $this->lMargin=$margin; + if($this->page>0 and $this->x<$margin) $this->x=$margin; +} + +function SetTopMargin($margin) { + //Set top margin + $this->tMargin=$margin; +} + +function SetRightMargin($margin) { + //Set right margin + $this->rMargin=$margin; +} + +function SetAutoPageBreak($auto,$margin=0) { + //Set auto page break mode and triggering margin + $this->autoPageBreak=$auto; + $this->bMargin=$margin; + $this->PageBreakTrigger=$this->h-$margin; +} + +function SetDisplayMode($zoom,$layout='continuous') { + //Set display mode in viewer + if($zoom=='fullpage' or $zoom=='fullwidth' or $zoom=='real' or $zoom=='default' or !is_string($zoom)) + $this->ZoomMode=$zoom; + else + $this->Error('Incorrect zoom display mode: '.$zoom); + if($layout=='single' or $layout=='continuous' or $layout=='two' or $layout=='twoleft' or $layout=='tworight' or $layout=='default') + $this->LayoutMode=$layout; + else + $this->Error('Incorrect layout display mode: '.$layout); +} + +function SetCompression($compress) { + //Set page compression + if(function_exists('gzcompress')) $this->compress=$compress; + else $this->compress=false; +} + +function SetTitle($title) { + //Title of document // Arrives as UTF-8 + $this->title = $title; +} + +function SetSubject($subject) { + //Subject of document + $this->subject= $subject; +} + +function SetAuthor($author) { + //Author of document + $this->author= $author; +} + +function SetKeywords($keywords) { + //Keywords of document + $this->keywords= $keywords; +} + +function SetCreator($creator) { + //Creator of document + $this->creator= $creator; +} + + +function SetAnchor2Bookmark($x) { + $this->anchor2Bookmark = $x; +} + +function AliasNbPages($alias='{nb}') { + //Define an alias for total number of pages + $this->aliasNbPg=$alias; +} + +function AliasNbPageGroups($alias='{nbpg}') { + //Define an alias for total number of pages in a group + $this->aliasNbPgGp=$alias; +} + +function SetAlpha($alpha, $bm='Normal', $return=false, $mode='B') { +// alpha: real value from 0 (transparent) to 1 (opaque) +// bm: blend mode, one of the following: +// Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, +// HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity +// set alpha for stroking (CA) and non-stroking (ca) operations +// mode determines F (fill) S (stroke) B (both) + if (($this->PDFA || $this->PDFX) && $alpha!=1) { + if (($this->PDFA && !$this->PDFAauto) || ($this->PDFX && !$this->PDFXauto)) { $this->PDFAXwarnings[] = "Image opacity must be 100% (Opacity changed to 100%)"; } + $alpha = 1; + } + $a = array('BM'=>'/'.$bm); + if ($mode=='F' || $mode='B') $a['ca'] = $alpha; + if ($mode=='S' || $mode='B') $a['CA'] = $alpha; + $gs = $this->AddExtGState($a); + if ($return) { return sprintf('/GS%d gs', $gs); } + else { $this->_out(sprintf('/GS%d gs', $gs)); } +} + +function AddExtGState($parms) { + $n = count($this->extgstates); + // check if graphics state already exists + for ($i=1; $i<=$n; $i++) { + if (count($this->extgstates[$i]['parms']) == count($parms)) { + $same = true; + foreach($this->extgstates[$i]['parms'] AS $k=>$v) { + if (!isset($parms[$k]) || $parms[$k] != $v) { $same = false; break; } + } + if ($same) { return $i; } + } + } + $n++; + $this->extgstates[$n]['parms'] = $parms; + return $n; +} + +function SetVisibility($v) { + if (($this->PDFA || $this->PDFX) && $this->visibility!='visible') { $this->PDFAXwarnings[] = "Cannot set visibility to anything other than full when using PDFA or PDFX"; return ''; } + else if (!$this->PDFA && !$this->PDFX) + $this->pdf_version='1.5'; + if($this->visibility!='visible') { + $this->_out('EMC'); + $this->hasOC=intval($this->hasOC ); // mPDF 5.6.01 + } + if($v=='printonly') { + $this->_out('/OC /OC1 BDC'); + $this->hasOC=($this->hasOC | 1); // mPDF 5.6.01 + } + elseif($v=='screenonly') { + $this->_out('/OC /OC2 BDC'); + $this->hasOC=($this->hasOC | 2); // mPDF 5.6.01 + } + elseif($v=='hidden') { + $this->_out('/OC /OC3 BDC'); + $this->hasOC=($this->hasOC | 4); // mPDF 5.6.01 + } + elseif($v!='visible') + $this->Error('Incorrect visibility: '.$v); + $this->visibility=$v; +} + +function Error($msg) { + //Fatal error + header('Content-Type: text/html; charset=utf-8'); + die('<B>mPDF error: </B>'.$msg); +} + +function Open() { + //Begin document + if($this->state==0) $this->_begindoc(); +} + +function Close() { + if ($this->progressBar) { $this->UpdateProgressBar(2,'2','Closing last page'); } // *PROGRESS-BAR* + //Terminate document + if($this->state==3) return; + if($this->page==0) $this->AddPage($this->CurOrientation); + if (count($this->cellBorderBuffer)) { $this->printcellbuffer(); } // *TABLES* + if ($this->tablebuffer) { $this->printtablebuffer(); } // *TABLES* +/*-- COLUMNS --*/ + + if ($this->ColActive) { + $this->SetColumns(0); + $this->ColActive = 0; + if (count($this->columnbuffer)) { $this->printcolumnbuffer(); } + } +/*-- END COLUMNS --*/ + if (count($this->divbuffer)) { $this->printdivbuffer(); } + + // BODY Backgrounds + $s = ''; + + $s .= $this->PrintBodyBackgrounds(); + + $s .= $this->PrintPageBackgrounds(); + $this->pages[$this->page] = preg_replace('/(___BACKGROUND___PATTERNS'.date('jY').')/', "\n".$s."\n".'\\1', $this->pages[$this->page]); + $this->pageBackgrounds = array(); + + if($this->visibility!='visible') + $this->SetVisibility('visible'); + // mPDF 5.6.01 - LAYERS + $this->EndLayer(); + + if (!$this->tocontents || !$this->tocontents->TOCmark) { //Page footer + $this->InFooter=true; + $this->Footer(); + $this->InFooter=false; + } + if ($this->tocontents && ($this->tocontents->TOCmark || count($this->tocontents->m_TOC))) { $this->tocontents->insertTOC(); } // *TOC* + + //Close page + $this->_endpage(); + + //Close document + $this->_enddoc(); +} + +/*-- BACKGROUNDS --*/ +function _resizeBackgroundImage($imw, $imh, $cw, $ch, $resize=0, $repx, $repy, $pba=array(), $size=array()) { // mPDF 5.6.10 + // pba is background positioning area (from CSS background-origin) may not always be set [x,y,w,h] + // size is from CSS3 background-size - takes precendence over old resize + // $w - absolute length or % or auto or cover | contain + // $h - absolute length or % or auto or cover | contain + // mPDF 5.6.10 + if (isset($pba['w'])) $cw = $pba['w']; + if (isset($pba['h'])) $ch = $pba['h']; + + $cw = $cw*_MPDFK; + $ch = $ch*_MPDFK; + if (empty($size) && !$resize) { return array($imw, $imh, $repx, $repy); } + + // mPDF 5.6.10 + if (isset($size['w']) && $size['w']) { + if ($size['w']=='contain') { + // Scale the image, while preserving its intrinsic aspect ratio (if any), to the largest size such that both its width and its height can fit inside the background positioning area. + // Same as resize==3 + $h = $imh * $cw/$imw; + $w = $cw; + if ($h > $ch) { + $w = $w * $ch/$h; + $h = $ch; + } + } + else if ($size['w']=='cover') { + // Scale the image, while preserving its intrinsic aspect ratio (if any), to the smallest size such that both its width and its height can completely cover the background positioning area. + $h = $imh * $cw/$imw; + $w = $cw; + if ($h < $ch) { + $w = $w * $h/$ch; + $h = $ch; + } + } + else { + if (stristr($size['w'] ,'%')) { + $size['w'] += 0; + $size['w'] /= 100; + $size['w'] = ($cw * $size['w']); + } + if (stristr($size['h'] ,'%')) { + $size['h'] += 0; + $size['h'] /= 100; + $size['h'] = ($ch * $size['h']); + } + if ($size['w']=='auto' && $size['h']=='auto') { + $w = $imw; + $h = $imh; + } + else if ($size['w']=='auto' && $size['h']!='auto') { + $w = $imw * $size['h']/$imh; + $h = $size['h']; + } + else if ($size['w']!='auto' && $size['h']=='auto') { + $h = $imh * $size['w']/$imw; + $w = $size['w']; + } + else { + $w = $size['w']; + $h = $size['h']; + } + } + return array($w, $h, $repx, $repy); + } + else if ($resize==1 && $imw > $cw) { + $h = $imh * $cw/$imw; + return array($cw, $h, $repx, $repy); + } + else if ($resize==2 && $imh > $ch) { + $w = $imw * $ch/$imh; + return array($w, $ch, $repx, $repy); + } + else if ($resize==3) { + $w = $imw; + $h = $imh; + if ($w > $cw) { + $h = $h * $cw/$w; + $w = $cw; + } + if ($h > $ch) { + $w = $w * $ch/$h; + $h = $ch; + } + return array($w, $h, $repx, $repy); + } + else if ($resize==4) { + $h = $imh * $cw/$imw; + return array($cw, $h, $repx, $repy); + } + else if ($resize==5) { + $w = $imw * $ch/$imh; + return array($w, $ch, $repx, $repy); + } + else if ($resize==6) { + return array($cw, $ch, $repx, $repy); + } + return array($imw, $imh, $repx, $repy); +} + + +function SetBackground(&$properties, &$maxwidth) { + // mPDF 5.6.10 5.6.11 + if (isset($properties['BACKGROUND-ORIGIN']) && ($properties['BACKGROUND-ORIGIN']=='border-box' || $properties['BACKGROUND-ORIGIN']== 'content-box')) { $origin = $properties['BACKGROUND-ORIGIN']; } + else { $origin = 'padding-box'; } + // mPDF 5.6.10 + if (isset($properties['BACKGROUND-SIZE'])) { + if (stristr($properties['BACKGROUND-SIZE'] ,'contain') ) { $bsw = $bsh = 'contain'; } + else if (stristr($properties['BACKGROUND-SIZE'] ,'cover') ) { $bsw = $bsh = 'cover'; } + else { + $bsw = $bsh = 'auto'; + $sz = preg_split('/\s+/',trim($properties['BACKGROUND-SIZE'])); + if (count($sz)==2) { $bsw = $sz[0]; $bsh = $sz[1]; } + else { $bsw = $sz[0]; } + if (!stristr($bsw ,'%') && !stristr($bsw ,'auto') ) { $bsw = $this->ConvertSize($bsw ,$maxwidth,$this->FontSize); } + if (!stristr($bsh ,'%') && !stristr($bsh ,'auto') ) { $bsh = $this->ConvertSize($bsh ,$maxwidth,$this->FontSize); } + } + $size = array('w'=>$bsw, 'h'=>$bsh); + } + if (preg_match('/(-moz-)*(repeating-)*(linear|radial)-gradient/',$properties['BACKGROUND-IMAGE'])) { + return array('gradient'=>$properties['BACKGROUND-IMAGE'], 'origin'=>$origin, 'size'=>$size ); // mPDF 5.6.10 + } + else { + $file = $properties['BACKGROUND-IMAGE']; + $sizesarray = $this->Image($file,0,0,0,0,'','',false, false, false, false, true); + if (isset($sizesarray['IMAGE_ID'])) { + $image_id = $sizesarray['IMAGE_ID']; + $orig_w = $sizesarray['WIDTH']*_MPDFK; // in user units i.e. mm + $orig_h = $sizesarray['HEIGHT']*_MPDFK; // (using $this->img_dpi) + if (isset($properties['BACKGROUND-IMAGE-RESOLUTION'])) { + if (preg_match('/from-image/i', $properties['BACKGROUND-IMAGE-RESOLUTION']) && isset($sizesarray['set-dpi']) && $sizesarray['set-dpi']>0) { + $orig_w *= $this->img_dpi / $sizesarray['set-dpi']; + $orig_h *= $this->img_dpi / $sizesarray['set-dpi']; + } + else if (preg_match('/(\d+)dpi/i', $properties['BACKGROUND-IMAGE-RESOLUTION'], $m)) { + $dpi = $m[1]; + if ($dpi > 0) { + $orig_w *= $this->img_dpi / $dpi; + $orig_h *= $this->img_dpi / $dpi; + } + } + } + $x_repeat = true; + $y_repeat = true; + if (isset($properties['BACKGROUND-REPEAT'])) { + if ($properties['BACKGROUND-REPEAT']=='no-repeat' || $properties['BACKGROUND-REPEAT']=='repeat-x') { $y_repeat = false; } + if ($properties['BACKGROUND-REPEAT']=='no-repeat' || $properties['BACKGROUND-REPEAT']=='repeat-y') { $x_repeat = false; } + } + $x_pos = 0; + $y_pos = 0; + if (isset($properties['BACKGROUND-POSITION'])) { + $ppos = preg_split('/\s+/',$properties['BACKGROUND-POSITION']); + $x_pos = $ppos[0]; + $y_pos = $ppos[1]; + if (!stristr($x_pos ,'%') ) { $x_pos = $this->ConvertSize($x_pos ,$maxwidth,$this->FontSize); } + if (!stristr($y_pos ,'%') ) { $y_pos = $this->ConvertSize($y_pos ,$maxwidth,$this->FontSize); } + } + if (isset($properties['BACKGROUND-IMAGE-RESIZE'])) { $resize = $properties['BACKGROUND-IMAGE-RESIZE']; } + else { $resize = 0; } + if (isset($properties['BACKGROUND-IMAGE-OPACITY'])) { $opacity = $properties['BACKGROUND-IMAGE-OPACITY']; } + else { $opacity = 1; } + return array('image_id'=>$image_id, 'orig_w'=>$orig_w, 'orig_h'=>$orig_h, 'x_pos'=>$x_pos, 'y_pos'=>$y_pos, 'x_repeat'=>$x_repeat, 'y_repeat'=>$y_repeat, 'resize'=>$resize, 'opacity'=>$opacity, 'itype'=>$sizesarray['itype'], 'origin'=>$origin, 'size'=>$size ); + } + } + return false; +} +/*-- END BACKGROUNDS --*/ + +function PrintBodyBackgrounds() { + $s = ''; + $clx = 0; + $cly = 0; + $clw = $this->w; + $clh = $this->h; + // If using bleed and trim margins in paged media + if ($this->pageDim[$this->page]['outer_width_LR'] || $this->pageDim[$this->page]['outer_width_TB']) { + $clx = $this->pageDim[$this->page]['outer_width_LR'] - $this->pageDim[$this->page]['bleedMargin']; + $cly = $this->pageDim[$this->page]['outer_width_TB'] - $this->pageDim[$this->page]['bleedMargin']; + $clw = $this->w - 2*$clx; + $clh = $this->h - 2*$cly; + } + + if ($this->bodyBackgroundColor) { + $s .= 'q ' .$this->SetFColor($this->bodyBackgroundColor, true)."\n"; + if ($this->bodyBackgroundColor{0}==5) { // RGBa + $s .= $this->SetAlpha(ord($this->bodyBackgroundColor{4})/100, 'Normal', true, 'F')."\n"; + } + else if ($this->bodyBackgroundColor{0}==6) { // CMYKa + $s .= $this->SetAlpha(ord($this->bodyBackgroundColor{5})/100, 'Normal', true, 'F')."\n"; + } + $s .= sprintf('%.3F %.3F %.3F %.3F re f Q', ($clx*_MPDFK), ($cly*_MPDFK),$clw*_MPDFK,$clh*_MPDFK)."\n"; + } + +/*-- BACKGROUNDS --*/ + if ($this->bodyBackgroundGradient) { + $g = $this->grad->parseBackgroundGradient($this->bodyBackgroundGradient); + if ($g) { + $s .= $this->grad->Gradient($clx, $cly, $clw, $clh, (isset($g['gradtype']) ? $g['gradtype'] : null), $g['stops'], $g['colorspace'], $g['coords'], $g['extend'], true); + } + } + if ($this->bodyBackgroundImage) { + if ( $this->bodyBackgroundImage['gradient'] && preg_match('/(-moz-)*(repeating-)*(linear|radial)-gradient/', $this->bodyBackgroundImage['gradient'])) { + $g = $this->grad->parseMozGradient( $this->bodyBackgroundImage['gradient']); + if ($g) { + $s .= $this->grad->Gradient($clx, $cly, $clw, $clh, $g['type'], $g['stops'], $g['colorspace'], $g['coords'], $g['extend'], true); + } + } + else if ($this->bodyBackgroundImage['image_id']) { // Background pattern + $n = count($this->patterns)+1; + // If using resize, uses TrimBox (not including the bleed) + list($orig_w, $orig_h, $x_repeat, $y_repeat) = $this->_resizeBackgroundImage($this->bodyBackgroundImage['orig_w'], $this->bodyBackgroundImage['orig_h'], $clw, $clh, $this->bodyBackgroundImage['resize'], $this->bodyBackgroundImage['x_repeat'], $this->bodyBackgroundImage['y_repeat']); + + $this->patterns[$n] = array('x'=>$clx, 'y'=>$cly, 'w'=>$clw, 'h'=>$clh, 'pgh'=>$this->h, 'image_id'=>$this->bodyBackgroundImage['image_id'], 'orig_w'=>$orig_w, 'orig_h'=>$orig_h, 'x_pos'=>$this->bodyBackgroundImage['x_pos'], 'y_pos'=>$this->bodyBackgroundImage['y_pos'], 'x_repeat'=>$x_repeat, 'y_repeat'=>$y_repeat, 'itype'=>$this->bodyBackgroundImage['itype']); + if (($this->bodyBackgroundImage['opacity']>0 || $this->bodyBackgroundImage['opacity']==='0') && $this->bodyBackgroundImage['opacity']<1) { $opac = $this->SetAlpha($this->bodyBackgroundImage['opacity'],'Normal',true); } + else { $opac = ''; } + $s .= sprintf('q /Pattern cs /P%d scn %s %.3F %.3F %.3F %.3F re f Q', $n, $opac, ($clx*_MPDFK), ($cly*_MPDFK),$clw*_MPDFK, $clh*_MPDFK) ."\n"; + } + } +/*-- END BACKGROUNDS --*/ + return $s; +} + + +function PrintPageBackgrounds($adjustmenty=0) { + $s = ''; + + ksort($this->pageBackgrounds); + foreach($this->pageBackgrounds AS $bl=>$pbs) { + foreach ($pbs AS $pb) { + if ((!isset($pb['image_id']) && !isset($pb['gradient'])) || isset($pb['shadowonly'])) { // Background colour or boxshadow + // mPDF 5.6.01 - LAYERS + if($pb['z-index']>0) { + $this->current_layer = $pb['z-index']; + $s .= "\n".'/OCBZ-index /ZI'.$pb['z-index'].' BDC'."\n"; + } + + if($pb['visibility']!='visible') { + if($pb['visibility']=='printonly') + $s .= '/OC /OC1 BDC'."\n"; + else if($pb['visibility']=='screenonly') + $s .= '/OC /OC2 BDC'."\n"; + else if($pb['visibility']=='hidden') + $s .= '/OC /OC3 BDC'."\n"; + } + // Box shadow + if (isset($pb['shadow']) && $pb['shadow']) { $s .= $pb['shadow']."\n"; } + if (isset($pb['clippath']) && $pb['clippath']) { $s .= $pb['clippath']."\n"; } + $s .= 'q '.$this->SetFColor($pb['col'], true)."\n"; + if ($pb['col']{0}==5) { // RGBa + $s .= $this->SetAlpha(ord($pb['col']{4})/100, 'Normal', true, 'F')."\n"; + } + else if ($pb['col']{0}==6) { // CMYKa + $s .= $this->SetAlpha(ord($pb['col']{5})/100, 'Normal', true, 'F')."\n"; + } + $s .= sprintf('%.3F %.3F %.3F %.3F re f Q',$pb['x']*_MPDFK,($this->h-$pb['y'])*_MPDFK,$pb['w']*_MPDFK,-$pb['h']*_MPDFK)."\n"; + if (isset($pb['clippath']) && $pb['clippath']) { $s .= 'Q'."\n"; } + if($pb['visibility']!='visible') + $s .= 'EMC'."\n"; + + // mPDF 5.6.01 - LAYERS + if($pb['z-index']>0) { + $s .= "\n".'EMCBZ-index'."\n"; + $this->current_layer = 0; + } + } + } +/*-- BACKGROUNDS --*/ + foreach ($pbs AS $pb) { + // mPDF 5.6.01 - LAYERS + if ((isset($pb['gradient']) && $pb['gradient']) || (isset($pb['image_id']) && $pb['image_id'])) { + if($pb['z-index']>0) { + $this->current_layer = $pb['z-index']; + $s .= "\n".'/OCGZ-index /ZI'.$pb['z-index'].' BDC'."\n"; + } + if($pb['visibility']!='visible') { + if($pb['visibility']=='printonly') + $s .= '/OC /OC1 BDC'."\n"; + else if($pb['visibility']=='screenonly') + $s .= '/OC /OC2 BDC'."\n"; + else if($pb['visibility']=='hidden') + $s .= '/OC /OC3 BDC'."\n"; + } + } + if (isset($pb['gradient']) && $pb['gradient']) { + if (isset($pb['clippath']) && $pb['clippath']) { $s .= $pb['clippath']."\n"; } + $s .= $this->grad->Gradient($pb['x'], $pb['y'], $pb['w'], $pb['h'], $pb['gradtype'], $pb['stops'], $pb['colorspace'], $pb['coords'], $pb['extend'], true); + if (isset($pb['clippath']) && $pb['clippath']) { $s .= 'Q'."\n"; } + } + else if (isset($pb['image_id']) && $pb['image_id']) { // Background Image + $pb['y'] -= $adjustmenty; + $pb['h'] += $adjustmenty; + $n = count($this->patterns)+1; + list($orig_w, $orig_h, $x_repeat, $y_repeat) = $this->_resizeBackgroundImage($pb['orig_w'], $pb['orig_h'], $pb['w'], $pb['h'], $pb['resize'], $pb['x_repeat'], $pb['y_repeat'], $pb['bpa'], $pb['size']); // mPDF 5.6.10 + $this->patterns[$n] = array('x'=>$pb['x'], 'y'=>$pb['y'], 'w'=>$pb['w'], 'h'=>$pb['h'], 'pgh'=>$this->h, 'image_id'=>$pb['image_id'], 'orig_w'=>$orig_w, 'orig_h'=>$orig_h, 'x_pos'=>$pb['x_pos'], 'y_pos'=>$pb['y_pos'], 'x_repeat'=>$x_repeat, 'y_repeat'=>$y_repeat, 'itype'=>$pb['itype'], 'bpa'=>$pb['bpa']); // mPDF 5.6.10 + $x = $pb['x']*_MPDFK; + $y = ($this->h - $pb['y'])*_MPDFK; + $w = $pb['w']*_MPDFK; + $h = -$pb['h']*_MPDFK; + if (isset($pb['clippath']) && $pb['clippath']) { $s .= $pb['clippath']."\n"; } + if ($this->writingHTMLfooter || $this->writingHTMLheader) { // Write each (tiles) image rather than use as a pattern + $iw = $pb['orig_w']/_MPDFK; + $ih = $pb['orig_h']/_MPDFK; + + $w = $pb['w']; + $h = $pb['h']; + $x0 = $pb['x']; + $y0 = $pb['y']; + + // mPDF 5.6.11 + if (isset($pb['bpa']) && $pb['bpa']) { + $w = $pb['bpa']['w']; + $h = $pb['bpa']['h']; + $x0 = $pb['bpa']['x']; + $y0 = $pb['bpa']['y']; + } + + // mPDF 5.6.11 + if (isset($pb['size']['w']) && $pb['size']['w']) { + $size = $pb['size']; + + if ($size['w']=='contain') { + // Scale the image, while preserving its intrinsic aspect ratio (if any), to the largest size such that both its width and its height can fit inside the background positioning area. + // Same as resize==3 + $ih = $ih * $pb['bpa']['w']/$iw; + $iw = $pb['bpa']['w']; + if ($ih > $pb['bpa']['h']) { + $iw = $iw * $pb['bpa']['h']/$ih; + $ih = $pb['bpa']['h']; + } + } + else if ($size['w']=='cover') { + // Scale the image, while preserving its intrinsic aspect ratio (if any), to the smallest size such that both its width and its height can completely cover the background positioning area. + $ih = $ih * $pb['bpa']['w']/$iw; + $iw = $pb['bpa']['w']; + if ($ih < $pb['bpa']['h']) { + $iw = $iw * $ih/$pb['bpa']['h']; + $ih = $pb['bpa']['h']; + } + } + else { + if (stristr($size['w'] ,'%')) { + $size['w'] += 0; + $size['w'] /= 100; + $size['w'] = ($pb['bpa']['w'] * $size['w']); + } + if (stristr($size['h'] ,'%')) { + $size['h'] += 0; + $size['h'] /= 100; + $size['h'] = ($pb['bpa']['h'] * $size['h']); + } + if ($size['w']=='auto' && $size['h']=='auto') { + $iw = $iw; + $ih = $ih; + } + else if ($size['w']=='auto' && $size['h']!='auto') { + $iw = $iw * $size['h']/$ih; + $ih = $size['h']; + } + else if ($size['w']!='auto' && $size['h']=='auto') { + $ih = $ih * $size['w']/$iw; + $iw = $size['w']; + } + else { + $iw = $size['w']; + $ih = $size['h']; + } + } + } + + // Number to repeat + if ($pb['x_repeat']) { $nx = ceil($pb['w']/$iw)+1; } // mPDF 5.6.11 + else { $nx = 1; } + if ($pb['y_repeat']) { $ny = ceil($pb['h']/$ih)+1; } // mPDF 5.6.11 + else { $ny = 1; } + + $x_pos = $pb['x_pos']; + if (stristr($x_pos ,'%') ) { + $x_pos += 0; + $x_pos /= 100; + $x_pos = ($pb['bpa']['w'] * $x_pos) - ($iw * $x_pos); // mPDF 5.6.11 + } + $y_pos = $pb['y_pos']; + if (stristr($y_pos ,'%') ) { + $y_pos += 0; + $y_pos /= 100; + $y_pos = ($pb['bpa']['h'] * $y_pos) - ($ih * $y_pos); // mPDF 5.6.11 + } + if ($nx>1) { + while($x_pos>($pb['x']-$pb['bpa']['x'])) { $x_pos -= $iw; } // mPDF 5.6.11 + } + if ($ny>1) { + while($y_pos>($pb['y']-$pb['bpa']['y'])) { $y_pos -= $ih; } // mPDF 5.6.11 + } + for($xi=0;$xi<$nx;$xi++) { + for($yi=0;$yi<$ny;$yi++) { + $x = $x0 + $x_pos + ($iw*$xi); + $y = $y0 + $y_pos + ($ih*$yi); + if ($pb['opacity']>0 && $pb['opacity']<1) { $opac = $this->SetAlpha($pb['opacity'],'Normal',true); } + else { $opac = ''; } + $s .= sprintf("q %s %.3F 0 0 %.3F %.3F %.3F cm /I%d Do Q", $opac,$iw*_MPDFK,$ih*_MPDFK,$x*_MPDFK,($this->h-($y+$ih))*_MPDFK,$pb['image_id']) ."\n"; + } + } + } + else { + if (($pb['opacity']>0 || $pb['opacity']==='0') && $pb['opacity']<1) { $opac = $this->SetAlpha($pb['opacity'],'Normal',true); } + else { $opac = ''; } + $s .= sprintf('q /Pattern cs /P%d scn %s %.3F %.3F %.3F %.3F re f Q', $n, $opac, $x, $y, $w, $h) ."\n"; + } + if (isset($pb['clippath']) && $pb['clippath']) { $s .= 'Q'."\n"; } + } + if ((isset($pb['gradient']) && $pb['gradient']) || (isset($pb['image_id']) && $pb['image_id'])) { + if($pb['visibility']!='visible') + $s .= 'EMC'."\n"; + + // mPDF 5.6.01 - LAYERS + if($pb['z-index']>0) { + $s .= "\n".'EMCGZ-index'."\n"; + $this->current_layer = 0; + } + } + + } +/*-- END BACKGROUNDS --*/ + } + return $s; +} + +function PrintTableBackgrounds($adjustmenty=0) { + $s = ''; +/*-- BACKGROUNDS --*/ + ksort($this->tableBackgrounds); + foreach($this->tableBackgrounds AS $bl=>$pbs) { + foreach ($pbs AS $pb) { + if ((!isset($pb['gradient']) || !$pb['gradient']) && (!isset($pb['image_id']) || !$pb['image_id'])) { + $s .= 'q '.$this->SetFColor($pb['col'], true)."\n"; + if ($pb['col']{0}==5) { // RGBa + $s .= $this->SetAlpha(ord($pb['col']{4})/100, 'Normal', true, 'F')."\n"; + } + else if ($pb['col']{0}==6) { // CMYKa + $s .= $this->SetAlpha(ord($pb['col']{5})/100, 'Normal', true, 'F')."\n"; + } + $s .= sprintf('%.3F %.3F %.3F %.3F re %s Q',$pb['x']*_MPDFK,($this->h-$pb['y'])*_MPDFK,$pb['w']*_MPDFK,-$pb['h']*_MPDFK,'f')."\n"; + } + if (isset($pb['gradient']) && $pb['gradient']) { + if (isset($pb['clippath']) && $pb['clippath']) { $s .= $pb['clippath']."\n"; } + $s .= $this->grad->Gradient($pb['x'], $pb['y'], $pb['w'], $pb['h'], $pb['gradtype'], $pb['stops'], $pb['colorspace'], $pb['coords'], $pb['extend'], true); + if (isset($pb['clippath']) && $pb['clippath']) { $s .= 'Q'."\n"; } + } + if (isset($pb['image_id']) && $pb['image_id']) { // Background pattern + $pb['y'] -= $adjustmenty; + $pb['h'] += $adjustmenty; + $n = count($this->patterns)+1; + list($orig_w, $orig_h, $x_repeat, $y_repeat) = $this->_resizeBackgroundImage($pb['orig_w'], $pb['orig_h'], $pb['w'], $pb['h'], $pb['resize'], $pb['x_repeat'], $pb['y_repeat']); + $this->patterns[$n] = array('x'=>$pb['x'], 'y'=>$pb['y'], 'w'=>$pb['w'], 'h'=>$pb['h'], 'pgh'=>$this->h, 'image_id'=>$pb['image_id'], 'orig_w'=>$orig_w, 'orig_h'=>$orig_h, 'x_pos'=>$pb['x_pos'], 'y_pos'=>$pb['y_pos'], 'x_repeat'=>$x_repeat, 'y_repeat'=>$y_repeat, 'itype'=>$pb['itype']); + $x = $pb['x']*_MPDFK; + $y = ($this->h - $pb['y'])*_MPDFK; + $w = $pb['w']*_MPDFK; + $h = -$pb['h']*_MPDFK; + if (isset($pb['clippath']) && $pb['clippath']) { $s .= $pb['clippath']."\n"; } + if ($pb['opacity']>0 && $pb['opacity']<1) { $opac = $this->SetAlpha($pb['opacity'],'Normal',true); } + else { $opac = ''; } + $s .= sprintf('q /Pattern cs /P%d scn %s %.3F %.3F %.3F %.3F re f Q', $n, $opac, $x, $y, $w, $h) ."\n"; + if (isset($pb['clippath']) && $pb['clippath']) { $s .= 'Q'."\n"; } + } + } + } +/*-- END BACKGROUNDS --*/ + return $s; +} + +// mPDF 5.6.01 - LAYERS +function BeginLayer($id) { + if($this->current_layer>0) $this->EndLayer(); + if ($id < 1) { return false; } + if (!isset($this->layers[$id])) { + $this->layers[$id] = array('name'=>'Layer '.($id) ); + if (($this->PDFA || $this->PDFX)) { $this->PDFAXwarnings[] = "Cannot use layers when using PDFA or PDFX"; return ''; } + else if (!$this->PDFA && !$this->PDFX) { $this->pdf_version='1.5'; } + } + $this->current_layer = $id; + $this->_out('/OCZ-index /ZI'.$id.' BDC'); + + $this->pageoutput[$this->page] = array(); +} + +function EndLayer() { + if($this->current_layer>0) { + $this->_out('EMCZ-index'); + $this->current_layer = 0; + } +} + + + +// Depracated - can use AddPage for all +function AddPages($orientation='',$condition='', $resetpagenum='', $pagenumstyle='', $suppress='',$mgl='',$mgr='',$mgt='',$mgb='',$mgh='',$mgf='',$ohname='',$ehname='',$ofname='',$efname='',$ohvalue=0,$ehvalue=0,$ofvalue=0,$efvalue=0,$pagesel='',$newformat='') +{ + $this->AddPage($orientation,$condition,$resetpagenum, $pagenumstyle, $suppress,$mgl,$mgr,$mgt,$mgb,$mgh,$mgf, $ohname, $ehname, $ofname, $efname, $ohvalue, $ehvalue, $ofvalue, $efvalue,$pagesel,$newformat); +} + + +function AddPageByArray($a) { + if (!is_array($a)) { $a = array(); } + $orientation = (isset($a['orientation']) ? $a['orientation'] : ''); + $condition = (isset($a['condition']) ? $a['condition'] : (isset($a['type']) ? $a['type'] : '')); + $resetpagenum = (isset($a['resetpagenum']) ? $a['resetpagenum'] : ''); + $pagenumstyle = (isset($a['pagenumstyle']) ? $a['pagenumstyle'] : ''); + $suppress = (isset($a['suppress']) ? $a['suppress'] : ''); + $mgl = (isset($a['mgl']) ? $a['mgl'] : (isset($a['margin-left']) ? $a['margin-left'] : '')); + $mgr = (isset($a['mgr']) ? $a['mgr'] : (isset($a['margin-right']) ? $a['margin-right'] : '')); + $mgt = (isset($a['mgt']) ? $a['mgt'] : (isset($a['margin-top']) ? $a['margin-top'] : '')); + $mgb = (isset($a['mgb']) ? $a['mgb'] : (isset($a['margin-bottom']) ? $a['margin-bottom'] : '')); + $mgh = (isset($a['mgh']) ? $a['mgh'] : (isset($a['margin-header']) ? $a['margin-header'] : '')); + $mgf = (isset($a['mgf']) ? $a['mgf'] : (isset($a['margin-footer']) ? $a['margin-footer'] : '')); + $ohname = (isset($a['ohname']) ? $a['ohname'] : (isset($a['odd-header-name']) ? $a['odd-header-name'] : '')); + $ehname = (isset($a['ehname']) ? $a['ehname'] : (isset($a['even-header-name']) ? $a['even-header-name'] : '')); + $ofname = (isset($a['ofname']) ? $a['ofname'] : (isset($a['odd-footer-name']) ? $a['odd-footer-name'] : '')); + $efname = (isset($a['efname']) ? $a['efname'] : (isset($a['even-footer-name']) ? $a['even-footer-name'] : '')); + $ohvalue = (isset($a['ohvalue']) ? $a['ohvalue'] : (isset($a['odd-header-value']) ? $a['odd-header-value'] : 0)); + $ehvalue = (isset($a['ehvalue']) ? $a['ehvalue'] : (isset($a['even-header-value']) ? $a['even-header-value'] : 0)); + $ofvalue = (isset($a['ofvalue']) ? $a['ofvalue'] : (isset($a['odd-footer-value']) ? $a['odd-footer-value'] : 0)); + $efvalue = (isset($a['efvalue']) ? $a['efvalue'] : (isset($a['even-footer-value']) ? $a['even-footer-value'] : 0)); + $pagesel = (isset($a['pagesel']) ? $a['pagesel'] : (isset($a['pageselector']) ? $a['pageselector'] : '')); + $newformat = (isset($a['newformat']) ? $a['newformat'] : (isset($a['sheet-size']) ? $a['sheet-size'] : '')); + + $this->AddPage($orientation,$condition,$resetpagenum, $pagenumstyle, $suppress,$mgl,$mgr,$mgt,$mgb,$mgh,$mgf, $ohname, $ehname, $ofname, $efname, $ohvalue, $ehvalue, $ofvalue, $efvalue,$pagesel,$newformat); + +} + + +function AddPage($orientation='',$condition='', $resetpagenum='', $pagenumstyle='', $suppress='',$mgl='',$mgr='',$mgt='',$mgb='',$mgh='',$mgf='',$ohname='',$ehname='',$ofname='',$efname='',$ohvalue=0,$ehvalue=0,$ofvalue=0,$efvalue=0,$pagesel='',$newformat='') +{ +/*-- CSS-FLOAT --*/ + // Float DIV + // Cannot do with columns on, or if any change in page orientation/margins etc. + // If next page already exists - i.e background /headers and footers already written + if ($this->state > 0 && $this->page < count($this->pages)) { + $bak_cml = $this->cMarginL; + $bak_cmr = $this->cMarginR; + $bak_dw = $this->divwidth; + // Paint Div Border if necessary + if ($this->blklvl > 0) { + $save_tr = $this->table_rotate; // *TABLES* + $this->table_rotate = 0; // *TABLES* + if ($this->y == $this->blk[$this->blklvl]['y0']) { $this->blk[$this->blklvl]['startpage']++; } + if (($this->y > $this->blk[$this->blklvl]['y0']) || $this->flowingBlockAttr['is_table'] ) { $toplvl = $this->blklvl; } + else { $toplvl = $this->blklvl-1; } + $sy = $this->y; + for ($bl=1;$bl<=$toplvl;$bl++) { + $this->PaintDivBB('pagebottom',0,$bl); + } + $this->y = $sy; + $this->table_rotate = $save_tr; // *TABLES* + } + $s = $this->PrintPageBackgrounds(); + + // Writes after the marker so not overwritten later by page background etc. + $this->pages[$this->page] = preg_replace('/(___BACKGROUND___PATTERNS'.date('jY').')/', '\\1'."\n".$s."\n", $this->pages[$this->page]); + $this->pageBackgrounds = array(); + $family=$this->FontFamily; + $style=$this->FontStyle.($this->U ? 'U' : '').($this->S ? 'S' : ''); + $size=$this->FontSizePt; + $lw=$this->LineWidth; + $dc=$this->DrawColor; + $fc=$this->FillColor; + $tc=$this->TextColor; + $cf=$this->ColorFlag; + + $this->printfloatbuffer(); + + //Move to next page + $this->page++; + $this->ResetMargins(); + $this->SetAutoPageBreak($this->autoPageBreak,$this->bMargin); + $this->x=$this->lMargin; + $this->y=$this->tMargin; + $this->FontFamily=''; + $this->_out('2 J'); + $this->LineWidth=$lw; + $this->_out(sprintf('%.3F w',$lw*_MPDFK)); + if($family) $this->SetFont($family,$style,$size,true,true); + $this->DrawColor=$dc; + if($dc!=$this->defDrawColor) $this->_out($dc); + $this->FillColor=$fc; + if($fc!=$this->defFillColor) $this->_out($fc); + $this->TextColor=$tc; + $this->ColorFlag=$cf; + for($bl=1;$bl<=$this->blklvl;$bl++) { + $this->blk[$bl]['y0'] = $this->y; + // Don't correct more than once for background DIV containing a Float + if (!isset($this->blk[$bl]['marginCorrected'][$this->page])) { $this->blk[$bl]['x0'] += $this->MarginCorrection; } + $this->blk[$bl]['marginCorrected'][$this->page] = true; + } + $this->cMarginL = $bak_cml; + $this->cMarginR = $bak_cmr; + $this->divwidth = $bak_dw; + return ''; + } +/*-- END CSS-FLOAT --*/ + + //Start a new page + if($this->state==0) $this->Open(); + + $bak_cml = $this->cMarginL; + $bak_cmr = $this->cMarginR; + $bak_dw = $this->divwidth; + + + $bak_lh = $this->lineheight; + + $orientation = substr(strtoupper($orientation),0,1); + $condition = strtoupper($condition); + + + if ($condition == 'NEXT-EVEN') { // always adds at least one new page to create an Even page + if (!$this->mirrorMargins) { $condition = ''; } + else { + if ($pagesel) { $pbch = $pagesel; $pagesel = ''; } // *CSS-PAGE* + else { $pbch = false; } // *CSS-PAGE* + $this->AddPage($this->CurOrientation,'O'); + if ($pbch ) { $pagesel = $pbch; } // *CSS-PAGE* + $condition = ''; + } + } + if ($condition == 'NEXT-ODD') { // always adds at least one new page to create an Odd page + if (!$this->mirrorMargins) { $condition = ''; } + else { + if ($pagesel) { $pbch = $pagesel; $pagesel = ''; } // *CSS-PAGE* + else { $pbch = false; } // *CSS-PAGE* + $this->AddPage($this->CurOrientation,'E'); + if ($pbch ) { $pagesel = $pbch; } // *CSS-PAGE* + $condition = ''; + } + } + + + if ($condition == 'E') { // only adds new page if needed to create an Even page + if (!$this->mirrorMargins || ($this->page)%2==0) { return false; } + } + if ($condition == 'O') { // only adds new page if needed to create an Odd page + if (!$this->mirrorMargins || ($this->page)%2==1) { return false; } + } + + if ($resetpagenum || $pagenumstyle || $suppress) { + $this->PageNumSubstitutions[] = array('from'=>($this->page+1), 'reset'=> $resetpagenum, 'type'=>$pagenumstyle, 'suppress'=>$suppress); + } + + + $save_tr = $this->table_rotate; // *TABLES* + $this->table_rotate = 0; // *TABLES* + $save_kwt = $this->kwt; + $this->kwt = 0; + // mPDF 5.6.01 - LAYERS + $save_layer = $this->current_layer; + $save_vis = $this->visibility; + + if($this->visibility!='visible') + $this->SetVisibility('visible'); + // mPDF 5.6.01 - LAYERS + $this->EndLayer(); + + // Paint Div Border if necessary + //PAINTS BACKGROUND COLOUR OR BORDERS for DIV - DISABLED FOR COLUMNS (cf. AcceptPageBreak) AT PRESENT in ->PaintDivBB + if (!$this->ColActive && $this->blklvl > 0) { + if (isset($this->blk[$this->blklvl]['y0']) && $this->y == $this->blk[$this->blklvl]['y0']) { + if (isset($this->blk[$this->blklvl]['startpage'])) { $this->blk[$this->blklvl]['startpage']++; } + else { $this->blk[$this->blklvl]['startpage'] = 1; } + } + if ((isset($this->blk[$this->blklvl]['y0']) && $this->y > $this->blk[$this->blklvl]['y0']) || $this->flowingBlockAttr['is_table'] ) { $toplvl = $this->blklvl; } + else { $toplvl = $this->blklvl-1; } + $sy = $this->y; + for ($bl=1;$bl<=$toplvl;$bl++) { + + // mPDF 5.6.01 - LAYERS + if ($this->blk[$bl]['z-index']>0) { + $this->BeginLayer($this->blk[$bl]['z-index']); + } + if (isset($this->blk[$bl]['visibility']) && $this->blk[$bl]['visibility'] && $this->blk[$bl]['visibility']!='visible') { + $this->SetVisibility($this->blk[$bl]['visibility']); + } + + $this->PaintDivBB('pagebottom',0,$bl); + } + $this->y = $sy; + // RESET block y0 and x0 - see below + } + + if($this->visibility!='visible') + $this->SetVisibility('visible'); + // mPDF 5.6.01 - LAYERS + $this->EndLayer(); + + // BODY Backgrounds + if ($this->page > 0) { + $s = ''; + $s .= $this->PrintBodyBackgrounds(); + + $s .= $this->PrintPageBackgrounds(); + $this->pages[$this->page] = preg_replace('/(___BACKGROUND___PATTERNS'.date('jY').')/', "\n".$s."\n".'\\1', $this->pages[$this->page]); + $this->pageBackgrounds = array(); + } + + $save_kt = $this->keep_block_together; + $this->keep_block_together = 0; + + $save_cols = false; +/*-- COLUMNS --*/ + if ($this->ColActive) { + $save_cols = true; + $save_nbcol = $this->NbCol; // other values of gap and vAlign will not change by setting Columns off + $this->SetColumns(0); + } +/*-- END COLUMNS --*/ + + + $family=$this->FontFamily; + $style=$this->FontStyle.($this->U ? 'U' : '').($this->S ? 'S' : ''); + $size=$this->FontSizePt; + $this->ColumnAdjust = true; // enables column height adjustment for the page + $lw=$this->LineWidth; + $dc=$this->DrawColor; + $fc=$this->FillColor; + $tc=$this->TextColor; + $cf=$this->ColorFlag; + if($this->page>0) + { + //Page footer + $this->InFooter=true; + + $this->Reset(); + $this->pageoutput[$this->page] = array(); + + $this->Footer(); + //Close page + $this->_endpage(); + } + + + //Start new page + $this->_beginpage($orientation,$mgl,$mgr,$mgt,$mgb,$mgh,$mgf,$ohname,$ehname,$ofname,$efname,$ohvalue,$ehvalue,$ofvalue,$efvalue,$pagesel,$newformat); + if ($this->docTemplate) { + $pagecount = $this->SetSourceFile($this->docTemplate); + if (($this->page - $this->docTemplateStart) > $pagecount) { + if ($this->docTemplateContinue) { + $tplIdx = $this->ImportPage($pagecount); + $this->UseTemplate($tplIdx); + } + } + else { + $tplIdx = $this->ImportPage(($this->page - $this->docTemplateStart)); + $this->UseTemplate($tplIdx); + } + } + if ($this->pageTemplate) { + $this->UseTemplate($this->pageTemplate); + } + + // Tiling Patterns + $this->_out('___PAGE___START'.date('jY')); + $this->_out('___BACKGROUND___PATTERNS'.date('jY')); + $this->_out('___HEADER___MARKER'.date('jY')); + $this->pageBackgrounds = array(); + + //Set line cap style to square + $this->SetLineCap(2); + //Set line width + $this->LineWidth=$lw; + $this->_out(sprintf('%.3F w',$lw*_MPDFK)); + //Set font + if($family) $this->SetFont($family,$style,$size,true,true); // forces write + //Set colors + $this->DrawColor=$dc; + if($dc!=$this->defDrawColor) $this->_out($dc); + $this->FillColor=$fc; + if($fc!=$this->defFillColor) $this->_out($fc); + $this->TextColor=$tc; + $this->ColorFlag=$cf; + + //Page header + $this->Header(); + + //Restore line width + if($this->LineWidth!=$lw) + { + $this->LineWidth=$lw; + $this->_out(sprintf('%.3F w',$lw*_MPDFK)); + } + //Restore font + if($family) $this->SetFont($family,$style,$size,true,true); // forces write + //Restore colors + if($this->DrawColor!=$dc) + { + $this->DrawColor=$dc; + $this->_out($dc); + } + if($this->FillColor!=$fc) + { + $this->FillColor=$fc; + $this->_out($fc); + } + $this->TextColor=$tc; + $this->ColorFlag=$cf; + $this->InFooter=false; + + // mPDF 5.6.01 - LAYERS + if ($save_layer>0) + $this->BeginLayer($save_layer); + + if($save_vis!='visible') + $this->SetVisibility($save_vis); + +/*-- COLUMNS --*/ + if ($save_cols) { + // Restore columns + $this->SetColumns($save_nbcol,$this->colvAlign,$this->ColGap); + } + if ($this->ColActive) { $this->SetCol(0); } +/*-- END COLUMNS --*/ + + + //RESET BLOCK BORDER TOP + if (!$this->ColActive) { + for($bl=1;$bl<=$this->blklvl;$bl++) { + $this->blk[$bl]['y0'] = $this->y; + if (isset($this->blk[$bl]['x0'])) { $this->blk[$bl]['x0'] += $this->MarginCorrection; } + else { $this->blk[$bl]['x0'] = $this->MarginCorrection; } + // Added mPDF 3.0 Float DIV + $this->blk[$bl]['marginCorrected'][$this->page] = true; + } + } + + + $this->table_rotate = $save_tr; // *TABLES* + $this->kwt = $save_kwt; + + $this->keep_block_together = $save_kt ; + + $this->cMarginL = $bak_cml; + $this->cMarginR = $bak_cmr; + $this->divwidth = $bak_dw; + + $this->lineheight = $bak_lh; +} + + +function PageNo() { + //Get current page number + return $this->page; +} + +function AddSpotColorsFromFile($file) { + $colors = @file($file) or die("Cannot load spot colors file - ".$file); + foreach($colors AS $sc) { + list($name, $c, $m, $y, $k) = preg_split("/\t/",$sc); + $c = intval($c); + $m = intval($m); + $y = intval($y); + $k = intval($k); + $this->AddSpotColor($name, $c, $m, $y, $k); + } +} + +function AddSpotColor($name, $c, $m, $y, $k) { + $name = strtoupper(trim($name)); + if(!isset($this->spotColors[$name])) { + $i=count($this->spotColors)+1; + $this->spotColors[$name]=array('i'=>$i,'c'=>$c,'m'=>$m,'y'=>$y,'k'=>$k); + $this->spotColorIDs[$i]=$name; + } +} + +function SetColor($col, $type='') { + $out = ''; + if ($col{0}==3 || $col{0}==5) { // RGB / RGBa + $out = sprintf('%.3F %.3F %.3F rg',ord($col{1})/255,ord($col{2})/255,ord($col{3})/255); + } + else if ($col{0}==1) { // GRAYSCALE + $out = sprintf('%.3F g',ord($col{1})/255); + } + else if ($col{0}==2) { // SPOT COLOR + $out = sprintf('/CS%d cs %.3F scn',ord($col{1}),ord($col{2})/100); + } + else if ($col{0}==4 || $col{0}==6) { // CMYK / CMYKa + $out = sprintf('%.3F %.3F %.3F %.3F k', ord($col{1})/100, ord($col{2})/100, ord($col{3})/100, ord($col{4})/100); + } + if ($type=='Draw') { $out = strtoupper($out); } // e.g. rg => RG + else if ($type=='CodeOnly') { $out = preg_replace('/\s(rg|g|k)/','',$out); } + return $out; +} + + +function SetDColor($col, $return=false) { + $out = $this->SetColor($col, 'Draw'); + if ($return) { return $out; } + if ($out=='') { return ''; } + $this->DrawColor = $out; + if($this->page>0 && ((isset($this->pageoutput[$this->page]['DrawColor']) && $this->pageoutput[$this->page]['DrawColor'] != $this->DrawColor) || !isset($this->pageoutput[$this->page]['DrawColor']) || $this->keep_block_together)) { $this->_out($this->DrawColor); } + $this->pageoutput[$this->page]['DrawColor'] = $this->DrawColor; +} + +function SetFColor($col, $return=false) { + $out = $this->SetColor($col, 'Fill'); + if ($return) { return $out; } + if ($out=='') { return ''; } + $this->FillColor = $out; + $this->ColorFlag = ($out != $this->TextColor); + if($this->page>0 && ((isset($this->pageoutput[$this->page]['FillColor']) && $this->pageoutput[$this->page]['FillColor'] != $this->FillColor) || !isset($this->pageoutput[$this->page]['FillColor']) || $this->keep_block_together)) { $this->_out($this->FillColor); } + $this->pageoutput[$this->page]['FillColor'] = $this->FillColor; +} + +function SetTColor($col, $return=false) { + $out = $this->SetColor($col, 'Text'); + if ($return) { return $out; } + if ($out=='') { return ''; } + $this->TextColor = $out; + $this->ColorFlag = ($this->FillColor != $out); +} + + +function SetDrawColor($r,$g=-1,$b=-1,$col4=-1, $return=false) { + //Set color for all stroking operations + $col = array(); + if(($r==0 and $g==0 and $b==0 && $col4 == -1) or $g==-1) { $col = $this->ConvertColor($r); } + else if ($col4 == -1) { $col = $this->ConvertColor('rgb('.$r.','.$g.','.$b.')'); } + else { $col = $this->ConvertColor('cmyk('.$r.','.$g.','.$b.','.$col4.')'); } + $out = $this->SetDColor($col, $return); + return $out; +} + +function SetFillColor($r,$g=-1,$b=-1,$col4=-1, $return=false) { + //Set color for all filling operations + $col = array(); + if(($r==0 and $g==0 and $b==0 && $col4 == -1) or $g==-1) { $col = $this->ConvertColor($r); } + else if ($col4 == -1) { $col = $this->ConvertColor('rgb('.$r.','.$g.','.$b.')'); } + else { $col = $this->ConvertColor('cmyk('.$r.','.$g.','.$b.','.$col4.')'); } + $out = $this->SetFColor($col, $return); + return $out; +} + +function SetTextColor($r,$g=-1,$b=-1,$col4=-1, $return=false) { + //Set color for text + $col = array(); + if(($r==0 and $g==0 and $b==0 && $col4 == -1) or $g==-1) { $col = $this->ConvertColor($r); } + else if ($col4 == -1) { $col = $this->ConvertColor('rgb('.$r.','.$g.','.$b.')'); } + else { $col = $this->ConvertColor('cmyk('.$r.','.$g.','.$b.','.$col4.')'); } + $out = $this->SetTColor($col, $return); + return $out; +} + +function _getCharWidth(&$cw, $u, $isdef=true) { + if ($u==0) { $w = false; } + else { $w = (ord($cw[$u*2]) << 8) + ord($cw[$u*2+1]); } + if ($w == 65535) { return 0; } + else if ($w) { return $w; } + else if ($isdef) { return false; } + else { return 0; } +} + +function _charDefined(&$cw, $u) { + if ($u==0) { return false; } + $w = (ord($cw[$u*2]) << 8) + ord($cw[$u*2+1]); + if ($w) { return true; } + else { return false; } +} + +function GetCharWidthCore($c) { + //Get width of a single character in the current Core font + $c = (string)$c; + $w = 0; + // Soft Hyphens chr(173) + if ($c == chr(173) && $this->FontFamily!='csymbol' && $this->FontFamily!='czapfdingbats') { + return 0; + } + else if ($this->S && isset($this->upperCase[ord($c)])) { + $charw = $this->CurrentFont['cw'][chr($this->upperCase[ord($c)])]; + if ($charw!==false) { + $charw = $charw*$this->smCapsScale * $this->smCapsStretch/100; + $w+=$charw; + } + } + else if (isset($this->CurrentFont['cw'][$c])) { + $w += $this->CurrentFont['cw'][$c]; + } + else if (isset($this->CurrentFont['cw'][ord($c)])) { + $w += $this->CurrentFont['cw'][ord($c)]; + } + $w *= ($this->FontSize/ 1000); + if ($this->minwSpacing || $this->fixedlSpacing) { + if ($c==' ') $nb_spaces = 1; + else $nb_spaces = 0; + $w += $this->fixedlSpacing + ($nb_spaces * $this->minwSpacing); + } + return ($w); +} + +function GetCharWidthNonCore($c, $addSubset=true) { + //Get width of a single character in the current Non-Core font + $c = (string)$c; + $w = 0; + $unicode = $this->UTF8StringToArray($c, $addSubset); + $char = $unicode[0]; +/*-- CJK-FONTS --*/ + if ($this->CurrentFont['type'] == 'Type0') { // CJK Adobe fonts + if ($char == 173) { return 0; } // Soft Hyphens + elseif (isset($this->CurrentFont['cw'][$char])) { $w+=$this->CurrentFont['cw'][$char]; } + elseif(isset($this->CurrentFont['MissingWidth'])) { $w += $this->CurrentFont['MissingWidth']; } + else { $w += 500; } + } + else { +/*-- END CJK-FONTS --*/ + if ($char == 173) { return 0; } // Soft Hyphens + else if ($this->S && isset($this->upperCase[$char])) { + $charw = $this->_getCharWidth($this->CurrentFont['cw'],$this->upperCase[$char]); + if ($charw!==false) { + $charw = $charw*$this->smCapsScale * $this->smCapsStretch/100; + $w+=$charw; + } + elseif(isset($this->CurrentFont['desc']['MissingWidth'])) { $w += $this->CurrentFont['desc']['MissingWidth']; } + elseif(isset($this->CurrentFont['MissingWidth'])) { $w += $this->CurrentFont['MissingWidth']; } + else { $w += 500; } + } + else { + $charw = $this->_getCharWidth($this->CurrentFont['cw'],$char); + if ($charw!==false) { $w+=$charw; } + elseif(isset($this->CurrentFont['desc']['MissingWidth'])) { $w += $this->CurrentFont['desc']['MissingWidth']; } + elseif(isset($this->CurrentFont['MissingWidth'])) { $w += $this->CurrentFont['MissingWidth']; } + else { $w += 500; } + } + } // *CJK-FONTS* + $w *= ($this->FontSize/ 1000); + if ($this->minwSpacing || $this->fixedlSpacing) { + if ($c==' ') $nb_spaces = 1; + else $nb_spaces = 0; + $w += $this->fixedlSpacing + ($nb_spaces * $this->minwSpacing); + } + return ($w); +} + + +function GetCharWidth($c, $addSubset=true) { + if (!$this->usingCoreFont) { + return $this->GetCharWidthNonCore($c, $addSubset); + } + else { + return $this->GetCharWidthCore($c); + } +} + +function GetStringWidth($s, $addSubset=true) { + //Get width of a string in the current font + $s = (string)$s; + $cw = &$this->CurrentFont['cw']; + $w = 0; + $kerning = 0; + $lastchar = 0; + $nb_carac = 0; + $nb_spaces = 0; + // mPDF ITERATION + if ($this->iterationCounter) $s = preg_replace('/{iteration ([a-zA-Z0-9_]+)}/', '\\1', $s); + + if (!$this->usingCoreFont) { + $s = str_replace("\xc2\xad",'',$s ); + $unicode = $this->UTF8StringToArray($s, $addSubset); + if ($this->minwSpacing || $this->fixedlSpacing) { + $nb_carac = count($unicode); + $nb_spaces = mb_substr_count($s,' ', $this->mb_enc); + } +/*-- CJK-FONTS --*/ + if ($this->CurrentFont['type'] == 'Type0') { // CJK Adobe fonts + foreach($unicode as $char) { + if (isset($cw[$char])) { $w+=$cw[$char]; } + elseif(isset($this->CurrentFont['MissingWidth'])) { $w += $this->CurrentFont['MissingWidth']; } + else { $w += 500; } + } + } + else { +/*-- END CJK-FONTS --*/ + foreach($unicode as $char) { + if ($this->S && isset($this->upperCase[$char])) { + $charw = $this->_getCharWidth($cw,$this->upperCase[$char]); + if ($charw!==false) { + $charw = $charw*$this->smCapsScale * $this->smCapsStretch/100; + $w+=$charw; + } + elseif(isset($this->CurrentFont['desc']['MissingWidth'])) { $w += $this->CurrentFont['desc']['MissingWidth']; } + elseif(isset($this->CurrentFont['MissingWidth'])) { $w += $this->CurrentFont['MissingWidth']; } + else { $w += 500; } + } + else { + $charw = $this->_getCharWidth($cw,$char); + if ($charw!==false) { $w+=$charw; } + elseif(isset($this->CurrentFont['desc']['MissingWidth'])) { $w += $this->CurrentFont['desc']['MissingWidth']; } + elseif(isset($this->CurrentFont['MissingWidth'])) { $w += $this->CurrentFont['MissingWidth']; } + else { $w += 500; } + if ($this->kerning && $this->useKerning && $lastchar) { + if (isset($this->CurrentFont['kerninfo'][$lastchar][$char])) { + $kerning += $this->CurrentFont['kerninfo'][$lastchar][$char]; + } + } + $lastchar = $char; + } + } + } // *CJK-FONTS* + + } + else { + if ($this->FontFamily!='csymbol' && $this->FontFamily!='czapfdingbats') { + $s = str_replace(chr(173),'',$s ); + } + $nb_carac = $l = strlen($s); + if ($this->minwSpacing || $this->fixedlSpacing) { + $nb_spaces = substr_count($s,' '); + } + for($i=0; $i<$l; $i++) { + if ($this->S && isset($this->upperCase[ord($s[$i])])) { + $charw = $cw[chr($this->upperCase[ord($s[$i])])]; + if ($charw!==false) { + $charw = $charw*$this->smCapsScale * $this->smCapsStretch/100; + $w+=$charw; + } + } + else if (isset($cw[$s[$i]])) { + $w += $cw[$s[$i]]; + } + else if (isset($cw[ord($s[$i])])) { + $w += $cw[ord($s[$i])]; + } + if ($this->kerning && $this->useKerning && $i>0) { + if (isset($this->CurrentFont['kerninfo'][$s[($i-1)]][$s[$i]])) { + $kerning += $this->CurrentFont['kerninfo'][$s[($i-1)]][$s[$i]]; + } + } + } + } + unset($cw); + if ($this->kerning && $this->useKerning) { $w += $kerning; } + $w *= ($this->FontSize/ 1000); + $w += (($nb_carac + $nb_spaces) * $this->fixedlSpacing) + ($nb_spaces * $this->minwSpacing); + return ($w); +} + +function SetLineWidth($width) { + //Set line width + $this->LineWidth=$width; + $lwout = (sprintf('%.3F w',$width*_MPDFK)); + if($this->page>0 && ((isset($this->pageoutput[$this->page]['LineWidth']) && $this->pageoutput[$this->page]['LineWidth'] != $lwout) || !isset($this->pageoutput[$this->page]['LineWidth']) || $this->keep_block_together)) { + $this->_out($lwout); + } + $this->pageoutput[$this->page]['LineWidth'] = $lwout; +} + +function Line($x1,$y1,$x2,$y2) { + //Draw a line + $this->_out(sprintf('%.3F %.3F m %.3F %.3F l S',$x1*_MPDFK,($this->h-$y1)*_MPDFK,$x2*_MPDFK,($this->h-$y2)*_MPDFK)); +} + +function Arrow($x1,$y1,$x2,$y2,$headsize=3,$fill='B',$angle=25) { + //F == fill //S == stroke //B == stroke and fill + // angle = splay of arrowhead - 1 - 89 degrees + if($fill=='F') $fill='f'; + elseif($fill=='FD' or $fill=='DF' or $fill=='B') $fill='B'; + else $fill='S'; + $a = atan2(($y2-$y1),($x2-$x1)); + $b = $a + deg2rad($angle); + $c = $a - deg2rad($angle); + $x3 = $x2 - ($headsize* cos($b)); + $y3 = $this->h-($y2 - ($headsize* sin($b))); + $x4 = $x2 - ($headsize* cos($c)); + $y4 = $this->h-($y2 - ($headsize* sin($c))); + + $x5 = $x3-($x3-$x4)/2; // mid point of base of arrowhead - to join arrow line to + $y5 = $y3-($y3-$y4)/2; + + $s = ''; + $s.=sprintf('%.3F %.3F m %.3F %.3F l S',$x1*_MPDFK,($this->h-$y1)*_MPDFK,$x5*_MPDFK,$y5*_MPDFK); + $this->_out($s); + + $s = ''; + $s.=sprintf('%.3F %.3F m %.3F %.3F l %.3F %.3F l %.3F %.3F l %.3F %.3F l ',$x5*_MPDFK,$y5*_MPDFK,$x3*_MPDFK,$y3*_MPDFK,$x2*_MPDFK,($this->h-$y2)*_MPDFK,$x4*_MPDFK,$y4*_MPDFK,$x5*_MPDFK,$y5*_MPDFK); + $s.=$fill; + $this->_out($s); +} + + +function Rect($x,$y,$w,$h,$style='') { + //Draw a rectangle + if($style=='F') $op='f'; + elseif($style=='FD' or $style=='DF') $op='B'; + else $op='S'; + $this->_out(sprintf('%.3F %.3F %.3F %.3F re %s',$x*_MPDFK,($this->h-$y)*_MPDFK,$w*_MPDFK,-$h*_MPDFK,$op)); +} + +function AddFont($family,$style='') { + if(empty($family)) { return; } + $family = strtolower($family); + $style=strtoupper($style); + $style=str_replace('U','',$style); + if($style=='IB') $style='BI'; + $fontkey = $family.$style; + // check if the font has been already added + if(isset($this->fonts[$fontkey])) { + return; + } + +/*-- CJK-FONTS --*/ + if (in_array($family,$this->available_CJK_fonts)) { + if (empty($this->Big5_widths)) { require(_MPDF_PATH . 'includes/CJKdata.php'); } + $this->AddCJKFont($family); // don't need to add style + return; + } +/*-- END CJK-FONTS --*/ + + if ($this->usingCoreFont) { die("mPDF Error - problem with Font management"); } + + $stylekey = $style; + if (!$style) { $stylekey = 'R'; } + + if (!isset($this->fontdata[$family][$stylekey]) || !$this->fontdata[$family][$stylekey]) { + die('mPDF Error - Font is not supported - '.$family.' '.$style); + } + + $name = ''; + $originalsize = 0; + $sip = false; + $smp = false; + $unAGlyphs = false; // mPDF 5.4.05 + $haskerninfo = false; + $BMPselected = false; + @include(_MPDF_TTFONTDATAPATH.$fontkey.'.mtx.php'); + + $ttffile = ''; + if (defined('_MPDF_SYSTEM_TTFONTS')) { + $ttffile = _MPDF_SYSTEM_TTFONTS.$this->fontdata[$family][$stylekey]; + if (!file_exists($ttffile)) { $ttffile = ''; } + } + if (!$ttffile) { + $ttffile = _MPDF_TTFONTPATH.$this->fontdata[$family][$stylekey]; + if (!file_exists($ttffile)) { die("mPDF Error - cannot find TTF TrueType font file - ".$ttffile); } + } + $ttfstat = stat($ttffile); + + if (isset($this->fontdata[$family]['TTCfontID'][$stylekey])) { $TTCfontID = $this->fontdata[$family]['TTCfontID'][$stylekey]; } + else { $TTCfontID = 0; } + + + $BMPonly = false; + if (in_array($family,$this->BMPonly)) { $BMPonly = true; } + $regenerate = false; + if ($BMPonly && !$BMPselected) { $regenerate = true; } + else if (!$BMPonly && $BMPselected) { $regenerate = true; } + if ($this->useKerning && !$haskerninfo) { $regenerate = true; } + // mPDF 5.4.05 + if (isset($this->fontdata[$family]['unAGlyphs']) && $this->fontdata[$family]['unAGlyphs'] && !$unAGlyphs) { + $regenerate = true; + $unAGlyphs = true; + } + else if ((!isset($this->fontdata[$family]['unAGlyphs']) || !$this->fontdata[$family]['unAGlyphs']) && $unAGlyphs) { + $regenerate = true; + $unAGlyphs = false; + } + if (!isset($name) || $originalsize != $ttfstat['size'] || $regenerate) { + if (!class_exists('TTFontFile', false)) { include(_MPDF_PATH .'classes/ttfontsuni.php'); } + $ttf = new TTFontFile(); + $ttf->getMetrics($ttffile, $TTCfontID, $this->debugfonts, $BMPonly, $this->useKerning, $unAGlyphs); // mPDF 5.4.05 + $cw = $ttf->charWidths; + $kerninfo = $ttf->kerninfo; + $haskerninfo = true; + $name = preg_replace('/[ ()]/','',$ttf->fullName); + $sip = $ttf->sipset; + $smp = $ttf->smpset; + + $desc= array('Ascent'=>round($ttf->ascent), + 'Descent'=>round($ttf->descent), + 'CapHeight'=>round($ttf->capHeight), + 'Flags'=>$ttf->flags, + 'FontBBox'=>'['.round($ttf->bbox[0])." ".round($ttf->bbox[1])." ".round($ttf->bbox[2])." ".round($ttf->bbox[3]).']', + 'ItalicAngle'=>$ttf->italicAngle, + 'StemV'=>round($ttf->stemV), + 'MissingWidth'=>round($ttf->defaultWidth)); + $panose = ''; + // mPDF 5.5.19 + if (count($ttf->panose)) { + $panoseArray = array_merge(array($ttf->sFamilyClass, $ttf->sFamilySubClass), $ttf->panose); + foreach($panoseArray as $value) + $panose .= ' '.dechex($value); + } + $up = round($ttf->underlinePosition); + $ut = round($ttf->underlineThickness); + $originalsize = $ttfstat['size']+0; + $type = 'TTF'; + //Generate metrics .php file + $s='<?php'."\n"; + $s.='$name=\''.$name."';\n"; + $s.='$type=\''.$type."';\n"; + $s.='$desc='.var_export($desc,true).";\n"; + $s.='$up='.$up.";\n"; + $s.='$ut='.$ut.";\n"; + $s.='$ttffile=\''.$ttffile."';\n"; + $s.='$TTCfontID=\''.$TTCfontID."';\n"; + $s.='$originalsize='.$originalsize.";\n"; + if ($sip) $s.='$sip=true;'."\n"; + else $s.='$sip=false;'."\n"; + if ($smp) $s.='$smp=true;'."\n"; + else $s.='$smp=false;'."\n"; + if ($BMPonly) $s.='$BMPselected=true;'."\n"; + else $s.='$BMPselected=false;'."\n"; + $s.='$fontkey=\''.$fontkey."';\n"; + $s.='$panose=\''.$panose."';\n"; + if ($this->useKerning) { + $s.='$kerninfo='.var_export($kerninfo,true).";\n"; + $s.='$haskerninfo=true;'."\n"; + } + else $s.='$haskerninfo=false;'."\n"; + // mPDF 5.4.05 + if ($this->fontdata[$family]['unAGlyphs']) { + $s.='$unAGlyphs=true;'."\n"; + } + else $s.='$unAGlyphs=false;'."\n"; + $s.="?>"; + if (is_writable(dirname(_MPDF_TTFONTDATAPATH.'x'))) { + $fh = fopen(_MPDF_TTFONTDATAPATH.$fontkey.'.mtx.php',"w"); + fwrite($fh,$s,strlen($s)); + fclose($fh); + $fh = fopen(_MPDF_TTFONTDATAPATH.$fontkey.'.cw.dat',"wb"); + fwrite($fh,$cw,strlen($cw)); + fclose($fh); + @unlink(_MPDF_TTFONTDATAPATH.$fontkey.'.cgm'); + @unlink(_MPDF_TTFONTDATAPATH.$fontkey.'.z'); + @unlink(_MPDF_TTFONTDATAPATH.$fontkey.'.cw127.php'); + @unlink(_MPDF_TTFONTDATAPATH.$fontkey.'.cw'); + } + else if ($this->debugfonts) { $this->Error('Cannot write to the font caching directory - '._MPDF_TTFONTDATAPATH); } + unset($ttf); + } + else { + $cw = @file_get_contents(_MPDF_TTFONTDATAPATH.$fontkey.'.cw.dat'); + } + + if (isset($this->fontdata[$family]['indic']) && $this->fontdata[$family]['indic']) { $indic = true; } + else { $indic = false; } + if (isset($this->fontdata[$family]['sip-ext']) && $this->fontdata[$family]['sip-ext']) { $sipext = $this->fontdata[$family]['sip-ext']; } + else { $sipext = ''; } + + + $i = count($this->fonts)+$this->extraFontSubsets+1; + if ($sip || $smp) { + $this->fonts[$fontkey] = array('i'=>$i, 'type'=>$type, 'name'=>$name, 'desc'=>$desc, 'panose'=>$panose, 'up'=>$up, 'ut'=>$ut, 'cw'=>$cw, 'ttffile'=>$ttffile, 'fontkey'=>$fontkey, 'subsets'=>array(0=>range(0,127)), 'subsetfontids'=>array($i), 'used'=>false, 'indic'=>$indic, 'sip'=>$sip, 'sipext'=>$sipext, 'smp'=>$smp, 'TTCfontID' => $TTCfontID, 'unAGlyphs' => false); // mPDF 5.4.05 + } + else { + $ss = array(); + for ($s=32; $s<128; $s++) { $ss[$s] = $s; } + $this->fonts[$fontkey] = array('i'=>$i, 'type'=>$type, 'name'=>$name, 'desc'=>$desc, 'panose'=>$panose, 'up'=>$up, 'ut'=>$ut, 'cw'=>$cw, 'ttffile'=>$ttffile, 'fontkey'=>$fontkey, 'subset'=>$ss, 'used'=>false, 'indic'=>$indic, 'sip'=>$sip, 'sipext'=>$sipext, 'smp'=>$smp, 'TTCfontID' => $TTCfontID, 'unAGlyphs' => $unAGlyphs); // mPDF 5.4.05 + } + if ($this->useKerning && $haskerninfo) { $this->fonts[$fontkey]['kerninfo'] = $kerninfo; } + $this->FontFiles[$fontkey]=array('length1'=>$originalsize, 'type'=>"TTF", 'ttffile'=>$ttffile, 'sip'=>$sip, 'smp'=>$smp); + unset($cw); +} + + + +function SetFont($family,$style='',$size=0, $write=true, $forcewrite=false) { + $family=strtolower($family); + if (!$this->onlyCoreFonts) { + if ($family == 'sans' || $family == 'sans-serif') { $family = $this->sans_fonts[0]; } + if ($family == 'serif') { $family = $this->serif_fonts[0]; } + if ($family == 'mono' || $family == 'monospace') { $family = $this->mono_fonts[0]; } + } + if (isset($this->fonttrans[$family]) && $this->fonttrans[$family]) { $family = $this->fonttrans[$family]; } + if($family=='') { + if ($this->FontFamily) { $family=$this->FontFamily; } + else if ($this->default_font) { $family=$this->default_font; } + else { $this->Error("No font or default font set!"); } + } + $this->ReqFontStyle = $style; // required or requested style - used later for artificial bold/italic + + if (($family == 'csymbol') || ($family == 'czapfdingbats') || ($family == 'ctimes') || ($family == 'ccourier') || ($family == 'chelvetica')) { + if ($this->PDFA || $this->PDFX) { + if ($family == 'csymbol' || $family == 'czapfdingbats') { + $this->Error("Symbol and Zapfdingbats cannot be embedded in mPDF (required for PDFA1-b or PDFX/1-a)."); + } + if ($family == 'ctimes' || $family == 'ccourier' || $family == 'chelvetica') { + if (($this->PDFA && !$this->PDFAauto) || ($this->PDFX && !$this->PDFXauto)) { $this->PDFAXwarnings[] = "Core Adobe font ".ucfirst($family)." cannot be embedded in mPDF, which is required for PDFA1-b or PDFX/1-a. (Embedded font will be substituted.)"; } + if ($family == 'chelvetica') { $family = 'sans'; } + if ($family == 'ctimes') { $family = 'serif'; } + if ($family == 'ccourier') { $family = 'mono'; } + } + $this->usingCoreFont = false; + } + else { $this->usingCoreFont = true; } + if($family=='csymbol' || $family=='czapfdingbats') { $style=''; } + } + else { $this->usingCoreFont = false; } + + $this->U=false; + $this->S=false; + if ($style) { + $style=strtoupper($style); + if(strpos($style,'U')!==false) { + $this->U=true; + $style=str_replace('U','',$style); + } + if(strpos($style,'S')!==false) { + $this->S=true; + // Small Caps + if (empty($this->upperCase)) { @include(_MPDF_PATH.'includes/upperCase.php'); } + $style=str_replace('S','',$style); + } + if ($style=='IB') $style='BI'; + } + if ($size==0) $size=$this->FontSizePt; + + $fontkey=$family.$style; + + $stylekey = $style; + if (!$stylekey) { $stylekey = "R"; } + + if (!$this->onlyCoreFonts && !$this->usingCoreFont) { + if(!isset($this->fonts[$fontkey]) || count($this->default_available_fonts) != count($this->available_unifonts) ) { // not already added +/*-- CJK-FONTS --*/ + // CJK fonts + if (in_array($fontkey,$this->available_CJK_fonts)) { + if(!isset($this->fonts[$fontkey])) { // already added + if (empty($this->Big5_widths)) { require(_MPDF_PATH . 'includes/CJKdata.php'); } + $this->AddCJKFont($family); // don't need to add style + } + } + // Test to see if requested font/style is available - or substitute + else +/*-- END CJK-FONTS --*/ + if (!in_array($fontkey,$this->available_unifonts)) { + // If font[nostyle] exists - set it + if (in_array($family,$this->available_unifonts)) { + $style = ''; + } + + // Else if only one font available - set it (assumes if only one font available it will not have a style) + else if (count($this->available_unifonts) == 1) { + $family = $this->available_unifonts[0]; + $style = ''; + } + + else { + $found = 0; + // else substitute font of similar type + if (in_array($family,$this->sans_fonts)) { + $i = array_intersect($this->sans_fonts,$this->available_unifonts); + if (count($i)) { + $i = array_values($i); + // with requested style if possible + if (!in_array(($i[0].$style),$this->available_unifonts)) { + $style = ''; + } + $family = $i[0]; + $found = 1; + } + } + else if (in_array($family,$this->serif_fonts)) { + $i = array_intersect($this->serif_fonts,$this->available_unifonts); + if (count($i)) { + $i = array_values($i); + // with requested style if possible + if (!in_array(($i[0].$style),$this->available_unifonts)) { + $style = ''; + } + $family = $i[0]; + $found = 1; + } + } + else if (in_array($family,$this->mono_fonts)) { + $i = array_intersect($this->mono_fonts,$this->available_unifonts); + if (count($i)) { + $i = array_values($i); + // with requested style if possible + if (!in_array(($i[0].$style),$this->available_unifonts)) { + $style = ''; + } + $family = $i[0]; + $found = 1; + } + } + + if (!$found) { + // set first available font + $fs = $this->available_unifonts[0]; + preg_match('/^([a-z_0-9\-]+)([BI]{0,2})$/',$fs,$fas); // Allow "-" + // with requested style if possible + $ws = $fas[1].$style; + if (in_array($ws,$this->available_unifonts)) { + $family = $fas[1]; // leave $style as is + } + else if (in_array($fas[1],$this->available_unifonts)) { + // or without style + $family = $fas[1]; + $style = ''; + } + else { + // or with the style specified + $family = $fas[1]; + $style = $fas[2]; + } + } + } + $fontkey = $family.$style; + } + } + // try to add font (if not already added) + $this->AddFont($family, $style); + + //Test if font is already selected + if($this->FontFamily == $family && $this->FontFamily == $this->currentfontfamily && $this->FontStyle == $style && $this->FontStyle == $this->currentfontstyle && $this->FontSizePt == $size && $this->FontSizePt == $this->currentfontsize && !$forcewrite) { + return $family; + } + + $fontkey = $family.$style; + + //Select it + $this->FontFamily = $family; + $this->FontStyle = $style; + $this->FontSizePt = $size; + $this->FontSize = $size / _MPDFK; + $this->CurrentFont = &$this->fonts[$fontkey]; + if ($write) { + $fontout = (sprintf('BT /F%d %.3F Tf ET', $this->CurrentFont['i'], $this->FontSizePt)); + if($this->page>0 && ((isset($this->pageoutput[$this->page]['Font']) && $this->pageoutput[$this->page]['Font'] != $fontout) || !isset($this->pageoutput[$this->page]['Font']) || $this->keep_block_together)) { $this->_out($fontout); } + $this->pageoutput[$this->page]['Font'] = $fontout; + } + + + + // Added - currentfont (lowercase) used in HTML2PDF + $this->currentfontfamily=$family; + $this->currentfontsize=$size; + $this->currentfontstyle=$style.($this->U ? 'U' : '').($this->S ? 'S' : ''); + $this->setMBencoding('UTF-8'); + } + + else { // if using core fonts + + + if ($this->PDFA || $this->PDFX) { + $this->Error('Core Adobe fonts cannot be embedded in mPDF (required for PDFA1-b or PDFX/1-a) - cannot use option to use core fonts.'); + } + $this->setMBencoding('windows-1252'); + + //Test if font is already selected + if(($this->FontFamily == $family) AND ($this->FontStyle == $style) AND ($this->FontSizePt == $size) && !$forcewrite) { + return $family; + } + + if (!isset($this->CoreFonts[$fontkey])) { + if (in_array($family,$this->serif_fonts)) { $family = 'ctimes'; } + else if (in_array($family,$this->mono_fonts)) { $family = 'ccourier'; } + else { $family = 'chelvetica'; } + $this->usingCoreFont = true; + $fontkey = $family.$style; + } + + if(!isset($this->fonts[$fontkey])) { + // STANDARD CORE FONTS + if (isset($this->CoreFonts[$fontkey])) { + //Load metric file + $file=$family; + if($family=='ctimes' || $family=='chelvetica' || $family=='ccourier') { $file.=strtolower($style); } + $file.='.php'; + include(_MPDF_PATH.'font/'.$file); + if(!isset($cw)) { $this->Error('Could not include font metric file'); } + $i=count($this->fonts)+$this->extraFontSubsets+1; + $this->fonts[$fontkey]=array('i'=>$i,'type'=>'core','name'=>$this->CoreFonts[$fontkey],'desc'=>$desc,'up'=>$up,'ut'=>$ut,'cw'=>$cw); + if ($this->useKerning) { $this->fonts[$fontkey]['kerninfo'] = $kerninfo; } + } + else { + die('mPDF error - Font not defined'); + } + } + //Test if font is already selected + if(($this->FontFamily == $family) AND ($this->FontStyle == $style) AND ($this->FontSizePt == $size) && !$forcewrite) { + return $family; + } + //Select it + $this->FontFamily=$family; + $this->FontStyle=$style; + $this->FontSizePt=$size; + $this->FontSize=$size/_MPDFK; + $this->CurrentFont=&$this->fonts[$fontkey]; + if ($write) { + $fontout = (sprintf('BT /F%d %.3F Tf ET', $this->CurrentFont['i'], $this->FontSizePt)); + if($this->page>0 && ((isset($this->pageoutput[$this->page]['Font']) && $this->pageoutput[$this->page]['Font'] != $fontout) || !isset($this->pageoutput[$this->page]['Font']) || $this->keep_block_together)) { $this->_out($fontout); } + $this->pageoutput[$this->page]['Font'] = $fontout; + } + // Added - currentfont (lowercase) used in HTML2PDF + $this->currentfontfamily=$family; + $this->currentfontsize=$size; + $this->currentfontstyle=$style.($this->U ? 'U' : '').($this->S ? 'S' : ''); + + } + + return $family; +} + +function SetFontSize($size,$write=true) { + //Set font size in points + if($this->FontSizePt==$size) return; + $this->FontSizePt=$size; + $this->FontSize=$size/_MPDFK; + $this->currentfontsize=$size; + if ($write) { + $fontout = (sprintf('BT /F%d %.3F Tf ET', $this->CurrentFont['i'], $this->FontSizePt)); + // Edited mPDF 3.0 + if($this->page>0 && ((isset($this->pageoutput[$this->page]['Font']) && $this->pageoutput[$this->page]['Font'] != $fontout) || !isset($this->pageoutput[$this->page]['Font']) || $this->keep_block_together)) { $this->_out($fontout); } + $this->pageoutput[$this->page]['Font'] = $fontout; + } +} + +function AddLink() { + //Create a new internal link + $n=count($this->links)+1; + $this->links[$n]=array(0,0); + return $n; +} + +function SetLink($link,$y=0,$page=-1) { + //Set destination of internal link + if($y==-1) $y=$this->y; + if($page==-1) $page=$this->page; + $this->links[$link]=array($page,$y); +} + +function Link($x,$y,$w,$h,$link) { + $l = array($x*_MPDFK,$this->hPt-$y*_MPDFK,$w*_MPDFK,$h*_MPDFK,$link); + if ($this->keep_block_together) { // Save to array - don't write yet + $this->ktLinks[$this->page][]= $l; + return; + } + else if ($this->table_rotate) { // *TABLES* + $this->tbrot_Links[$this->page][]= $l; // *TABLES* + return; // *TABLES* + } // *TABLES* + else if ($this->kwt) { + $this->kwt_Links[$this->page][]= $l; + return; + } + + if ($this->writingHTMLheader || $this->writingHTMLfooter) { + $this->HTMLheaderPageLinks[]= $l; + return; + } + //Put a link on the page + $this->PageLinks[$this->page][]= $l; + // Save cross-reference to Column buffer + $ref = count($this->PageLinks[$this->page])-1; // *COLUMNS* + $this->columnLinks[$this->CurrCol][INTVAL($this->x)][INTVAL($this->y)] = $ref; // *COLUMNS* + +} + +function Text($x,$y,$txt) { + // Output a string + // Called (internally) by Watermark and _tableWrite [rotated cells] + // Expects input to be mb_encoded if necessary and RTL reversed + + // ARTIFICIAL BOLD AND ITALIC + $s = 'q '; + if ($this->falseBoldWeight && strpos($this->ReqFontStyle,"B") !== false && strpos($this->FontStyle,"B") === false) { + $s .= '2 Tr 1 J 1 j '; + $s .= sprintf('%.3F w ',($this->FontSize/130)*_MPDFK*$this->falseBoldWeight); + $tc = strtoupper($this->TextColor); // change 0 0 0 rg to 0 0 0 RG + if($this->FillColor!=$tc) { $s .= $tc.' '; } // stroke (outline) = same colour as text(fill) + } + if (strpos($this->ReqFontStyle,"I") !== false && strpos($this->FontStyle,"I") === false) { + $aix = '1 0 0.261799 1 %.3F %.3F Tm'; + } + else { $aix = '%.3F %.3F Td'; } + + if($this->ColorFlag) $s.=$this->TextColor.' '; + + $this->CurrentFont['used']= true; + if ($this->CurrentFont['type']=='TTF' && ($this->CurrentFont['sip'] || $this->CurrentFont['smp'])) { + $txt2 = str_replace(chr(194).chr(160),chr(32),$txt); + $txt2 = $this->UTF8toSubset($txt2); + $s.=sprintf('BT '.$aix.' %s Tj ET ',$x*_MPDFK,($this->h-$y)*_MPDFK,$txt2); + } + else if (!$this->usingCoreFont) { + $txt2 = str_replace(chr(194).chr(160),chr(32),$txt); + $this->UTF8StringToArray($txt2); // this is just to add chars to subset list + if ($this->kerning && $this->useKerning) { $s .= $this->_kern($txt2, '', $aix, $x, $y); } + else { + //Convert string to UTF-16BE without BOM + $txt2= $this->UTF8ToUTF16BE($txt2, false); + $s.=sprintf('BT '.$aix.' (%s) Tj ET ',$x*_MPDFK,($this->h-$y)*_MPDFK,$this->_escape($txt2)); + } + } + else { + $txt2 = str_replace(chr(160),chr(32),$txt); + if ($this->kerning && $this->useKerning) { $s .= $this->_kern($txt2, '', $aix, $x, $y); } + else { + $s.=sprintf('BT '.$aix.' (%s) Tj ET ',$x*_MPDFK,($this->h-$y)*_MPDFK,$this->_escape($txt2)); + } + } + if($this->U && $txt!='') { + $c = strtoupper($this->TextColor); // change 0 0 0 rg to 0 0 0 RG + if($this->FillColor!=$c) { $s.= ' '.$c.' '; } + if (isset($this->CurrentFont['up'])) { $up=$this->CurrentFont['up']; } + else { $up = -100; } + $adjusty = (-$up/1000* $this->FontSize); + if (isset($this->CurrentFont['ut'])) { $ut=$this->CurrentFont['ut']/1000* $this->FontSize; } + else { $ut = 60/1000* $this->FontSize; } + $olw = $this->LineWidth; + $s.=' '.(sprintf(' %.3F w',$ut*_MPDFK)); + $s.=' '.$this->_dounderline($x,$y + $adjusty,$txt); + $s.=' '.(sprintf(' %.3F w',$olw*_MPDFK)); + if($this->FillColor!=$c) { $s.= ' '.$this->FillColor.' '; } + } + // STRIKETHROUGH + if($this->strike && $txt!='') { + $c = strtoupper($this->TextColor); // change 0 0 0 rg to 0 0 0 RG + if($this->FillColor!=$c) { $s.= ' '.$c.' '; } + //Superscript and Subscript Y coordinate adjustment (now for striked-through texts) + if (isset($this->CurrentFont['desc']['CapHeight'])) { $ch=$this->CurrentFont['desc']['CapHeight']; } + else { $ch = 700; } + $adjusty = (-$ch/1000* $this->FontSize) * 0.35; + if (isset($this->CurrentFont['ut'])) { $ut=$this->CurrentFont['ut']/1000* $this->FontSize; } + else { $ut = 60/1000* $this->FontSize; } + $olw = $this->LineWidth; + $s.=' '.(sprintf(' %.3F w',$ut*_MPDFK)); + $s.=' '.$this->_dounderline($x,$y+$adjusty,$txt); + $s.=' '.(sprintf(' %.3F w',$olw*_MPDFK)); + if($this->FillColor!=$c) { $s.= ' '.$this->FillColor.' '; } + } + $s .= 'Q'; + $this->_out($s); +} + +/*-- DIRECTW --*/ +function WriteText($x,$y,$txt) { + // Output a string using Text() but does encoding and text reversing of RTL + $txt = $this->purify_utf8_text($txt); + if ($this->text_input_as_HTML) { + $txt = $this->all_entities_to_utf8($txt); + } + if ($this->usingCoreFont) { $txt = mb_convert_encoding($txt,$this->mb_enc,'UTF-8'); } + // DIRECTIONALITY + if (preg_match("/([".$this->pregRTLchars."])/u", $txt)) { $this->biDirectional = true; } // *RTL* + $this->magic_reverse_dir($txt, true, $this->directionality); // *RTL* + // Font-specific ligature substitution for Indic fonts + if (isset($this->CurrentFont['indic']) && $this->CurrentFont['indic']) $this->ConvertIndic($txt); // *INDIC* + $this->Text($x,$y,$txt); +} + +function WriteCell($w,$h=0,$txt='',$border=0,$ln=0,$align='',$fill=0,$link='', $currentx=0) { + //Output a cell using Cell() but does encoding and text reversing of RTL + $txt = $this->purify_utf8_text($txt); + if ($this->text_input_as_HTML) { + $txt = $this->all_entities_to_utf8($txt); + } + if ($this->usingCoreFont) { $txt = mb_convert_encoding($txt,$this->mb_enc,'UTF-8'); } + // DIRECTIONALITY + if (preg_match("/([".$this->pregRTLchars."])/u", $txt)) { $this->biDirectional = true; } // *RTL* + $this->magic_reverse_dir($txt, true, $this->directionality); // *RTL* + // Font-specific ligature substitution for Indic fonts + if (isset($this->CurrentFont['indic']) && $this->CurrentFont['indic']) $this->ConvertIndic($txt); // *INDIC* + $this->Cell($w,$h,$txt,$border,$ln,$align,$fill,$link, $currentx); +} +/*-- END DIRECTW --*/ + + +function ResetSpacing() { + if ($this->ws != 0) { $this->_out('BT 0 Tw ET'); } + $this->ws=0; + if ($this->charspacing != 0) { $this->_out('BT 0 Tc ET'); } + $this->charspacing=0; +} + + +function SetSpacing($cs,$ws) { + if (intval($cs*1000)==0) { $cs = 0; } + if ($cs) { $this->_out(sprintf('BT %.3F Tc ET',$cs)); } + else if ($this->charspacing != 0) { $this->_out('BT 0 Tc ET'); } + $this->charspacing=$cs; + if (intval($ws*1000)==0) { $ws = 0; } + if ($ws) { $this->_out(sprintf('BT %.3F Tw ET',$ws)); } + else if ($this->ws != 0) { $this->_out('BT 0 Tw ET'); } + $this->ws=$ws; +} + +// WORD SPACING +function GetJspacing($nc,$ns,$w,$inclCursive) { + $ws = 0; + $charspacing = 0; + $ww = $this->jSWord; + $ncx = $nc-1; + if ($nc == 0) { return array(0,0); } + else if ($nc==1) { $charspacing = $w; } + // Only word spacing allowed / possible + else if ($this->fixedlSpacing !== false || $inclCursive) { + if ($ns) { $ws = $w / $ns; } + } + else if (!$ns) { + $charspacing = $w / ($ncx ); + if (($this->jSmaxChar > 0) && ($charspacing > $this->jSmaxChar)) { + $charspacing = $this->jSmaxChar; + } + } + else if ($ns == ($ncx )) { + $charspacing = $w / $ns; + } + else { + if ($this->usingCoreFont) { + $cs = ($w * (1 - $this->jSWord)) / ($ncx ); + if (($this->jSmaxChar > 0) && ($cs > $this->jSmaxChar)) { + $cs = $this->jSmaxChar; + $ww = 1 - (($cs * ($ncx ))/$w); + } + $charspacing = $cs; + $ws = ($w * ($ww) ) / $ns; + } + else { + $cs = ($w * (1 - $this->jSWord)) / ($ncx -$ns); + if (($this->jSmaxChar > 0) && ($cs > $this->jSmaxChar)) { + $cs = $this->jSmaxChar; + $ww = 1 - (($cs * ($ncx -$ns))/$w); + } + $charspacing = $cs; + $ws = (($w * ($ww) ) / $ns) - $charspacing; + } + } + return array($charspacing,$ws); +} + +function Cell($w,$h=0,$txt='',$border=0,$ln=0,$align='',$fill=0,$link='', $currentx=0, $lcpaddingL=0, $lcpaddingR=0, $valign='M', $spanfill=0, $abovefont=0, $belowfont=0, $exactWidth=false) { + //Output a cell + // Expects input to be mb_encoded if necessary and RTL reversed + // NON_BREAKING SPACE + if ($this->usingCoreFont) { + $txt = str_replace(chr(160),chr(32),$txt); + } + else { + $txt = str_replace(chr(194).chr(160),chr(32),$txt); + } + + $oldcolumn = $this->CurrCol; + // Automatic page break + // Allows PAGE-BREAK-AFTER = avoid to work + + if (!$this->tableLevel && (($this->y+$this->divheight>$this->PageBreakTrigger) || ($this->y+$h>$this->PageBreakTrigger) || + ($this->y+($h*2)>$this->PageBreakTrigger && $this->blk[$this->blklvl]['page_break_after_avoid'])) and !$this->InFooter and $this->AcceptPageBreak()) { + $x=$this->x;//Current X position + + + // WORD SPACING + $ws=$this->ws;//Word Spacing + $charspacing=$this->charspacing;//Character Spacing + $this->ResetSpacing(); + + $this->AddPage($this->CurOrientation); + // Added to correct for OddEven Margins + $x += $this->MarginCorrection; + if ($currentx) { + $currentx += $this->MarginCorrection; + } + $this->x=$x; + // WORD SPACING + $this->SetSpacing($charspacing,$ws); + } + + // Test: to put line through centre of cell: $this->Line($this->x,$this->y+($h/2),$this->x+50,$this->y+($h/2)); + +/*-- COLUMNS --*/ + // COLS + // COLUMN CHANGE + if ($this->CurrCol != $oldcolumn) { + if ($currentx) { + $currentx += $this->ChangeColumn * ($this->ColWidth+$this->ColGap); + } + $this->x += $this->ChangeColumn * ($this->ColWidth+$this->ColGap); + } + + // COLUMNS Update/overwrite the lowest bottom of printing y value for a column + if ($this->ColActive) { + if ($h) { $this->ColDetails[$this->CurrCol]['bottom_margin'] = $this->y+$h; } + else { $this->ColDetails[$this->CurrCol]['bottom_margin'] = $this->y+$this->divheight; } + } +/*-- END COLUMNS --*/ + + // KEEP BLOCK TOGETHER Update/overwrite the lowest bottom of printing y value on first page + if ($this->keep_block_together) { + if ($h) { $this->ktBlock[$this->page]['bottom_margin'] = $this->y+$h; } +// else { $this->ktBlock[$this->page]['bottom_margin'] = $this->y+$this->divheight; } + } + + if($w==0) $w = $this->w-$this->rMargin-$this->x; + $s=''; + if($fill==1 && $this->FillColor) { + if((isset($this->pageoutput[$this->page]['FillColor']) && $this->pageoutput[$this->page]['FillColor'] != $this->FillColor) || !isset($this->pageoutput[$this->page]['FillColor']) || $this->keep_block_together) { $s .= $this->FillColor.' '; } + $this->pageoutput[$this->page]['FillColor'] = $this->FillColor; + } + + + $boxtop = $this->y; + $boxheight = $h; + $boxbottom = $this->y+$h; + + if($txt!='') { + // FONT SIZE - this determines the baseline caculation + if ($this->linemaxfontsize && !$this->processingHeader) { $bfs = $this->linemaxfontsize; } + else { $bfs = $this->FontSize; } + //Calculate baseline Superscript and Subscript Y coordinate adjustment + $bfx = $this->baselineC; + $baseline = $bfx*$bfs; + if($this->SUP) { $baseline += ($bfx-1.05)*$this->FontSize; } + else if($this->SUB) { $baseline += ($bfx + 0.04)*$this->FontSize; } + else if($this->bullet) { $baseline += ($bfx-0.7)*$this->FontSize; } + + // Vertical align (for Images) + if ($abovefont || $belowfont) { // from flowing block - valign always M + $va = $abovefont + (0.5*$bfs); + } + else if ($this->lineheight_correction) { + if ($valign == 'T') { $va = (0.5 * $bfs * $this->lineheight_correction); } + else if ($valign == 'B') { $va = $h-(0.5 * $bfs * $this->lineheight_correction); } + else { $va = 0.5*$h; } // Middle + } + else { + if ($valign == 'T') { $va = (0.5 * $bfs * $this->default_lineheight_correction); } + else if ($valign == 'B') { $va = $h-(0.5 * $bfs * $this->default_lineheight_correction); } + else { $va = 0.5*$h; } // Middle + } + + // ONLY SET THESE IF WANT TO CONFINE BORDER +/- FILL TO FIT FONTSIZE - NOT FULL CELL AS IS ORIGINAL FUNCTION + // spanfill or spanborder are set in FlowingBlock functions + if ($spanfill || !empty($this->spanborddet) || $link!='') { + $exth = 0.2; // Add to fontsize to increase height of background / link / border + $boxtop = $this->y+$baseline+$va-($this->FontSize*(1+$exth/2)*(0.5+$bfx)); + $boxheight = $this->FontSize * (1+$exth); + $boxbottom = $boxtop + $boxheight; + } + } + + $bbw = $tbw = $lbw = $rbw = 0; // Border widths + if (!empty($this->spanborddet)) { + if (!isset($this->spanborddet['B'])) { $this->spanborddet['B'] = array('s' => 0, 'style' => '', 'w' => 0); } + if (!isset($this->spanborddet['T'])) { $this->spanborddet['T'] = array('s' => 0, 'style' => '', 'w' => 0); } + if (!isset($this->spanborddet['L'])) { $this->spanborddet['L'] = array('s' => 0, 'style' => '', 'w' => 0); } + if (!isset($this->spanborddet['R'])) { $this->spanborddet['R'] = array('s' => 0, 'style' => '', 'w' => 0); } + $bbw = $this->spanborddet['B']['w']; + $tbw = $this->spanborddet['T']['w']; + $lbw = $this->spanborddet['L']['w']; + $rbw = $this->spanborddet['R']['w']; + } + if($fill==1 || $border==1 || !empty($this->spanborddet)) { + if (!empty($this->spanborddet)) { + if ($fill==1) { + $s.=sprintf('%.3F %.3F %.3F %.3F re f ',($this->x-$lbw)*_MPDFK,($this->h-$boxtop+$tbw)*_MPDFK,($w+$lbw+$rbw)*_MPDFK,(-$boxheight-$tbw-$bbw)*_MPDFK); + } + $s.= ' q '; + $dashon = 3; + $dashoff = 3.5; + $dot = 2.5; + if($tbw) { + $short = 0; + if ($this->spanborddet['T']['style'] == 'dashed') { + $s.=sprintf(' 0 j 0 J [%.3F %.3F] 0 d ',$tbw*$dashon*_MPDFK,$tbw*$dashoff*_MPDFK); + } + else if ($this->spanborddet['T']['style'] == 'dotted') { + $s.=sprintf(' 1 j 1 J [%.3F %.3F] %.3F d ',0.001,$tbw*$dot*_MPDFK,-$tbw/2*_MPDFK); + $short = $tbw/2; + } + else { + $s.=' 0 j 0 J [] 0 d '; + } + $c = $this->SetDColor($this->spanborddet['T']['c'],true); + if ($this->spanborddet['T']['style'] == 'double') { + $s.=sprintf(' %s %.3F w ',$c,$tbw/3*_MPDFK); + $xadj = $xadj2 = 0; + if ($this->spanborddet['L']['style'] == 'double') { $xadj = $this->spanborddet['L']['w']*2/3; } + if ($this->spanborddet['R']['style'] == 'double') { $xadj2 = $this->spanborddet['R']['w']*2/3; } + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',($this->x-$lbw)*_MPDFK,($this->h-$boxtop+$tbw*5/6)*_MPDFK,($this->x+$w+$rbw-$short)*_MPDFK,($this->h-$boxtop+$tbw*5/6)*_MPDFK); + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',($this->x-$lbw+$xadj)*_MPDFK,($this->h-$boxtop+$tbw/6)*_MPDFK,($this->x+$w+$rbw-$short-$xadj2)*_MPDFK,($this->h-$boxtop+$tbw/6)*_MPDFK); + } + else { + $s.=sprintf(' %s %.3F w ',$c,$tbw*_MPDFK); + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',($this->x-$lbw)*_MPDFK,($this->h-$boxtop+$tbw/2)*_MPDFK,($this->x+$w+$rbw-$short)*_MPDFK,($this->h-$boxtop+$tbw/2)*_MPDFK); + } + } + if($bbw) { + $short = 0; + if ($this->spanborddet['B']['style'] == 'dashed') { + $s.=sprintf(' 0 j 0 J [%.3F %.3F] 0 d ',$bbw*$dashon*_MPDFK,$bbw*$dashoff*_MPDFK); + } + else if ($this->spanborddet['B']['style'] == 'dotted') { + $s.=sprintf(' 1 j 1 J [%.3F %.3F] %.3F d ',0.001,$bbw*$dot*_MPDFK,-$bbw/2*_MPDFK); + $short = $bbw/2; + } + else { + $s.=' 0 j 0 J [] 0 d '; + } + $c = $this->SetDColor($this->spanborddet['B']['c'],true); + if ($this->spanborddet['B']['style'] == 'double') { + $s.=sprintf(' %s %.3F w ',$c,$bbw/3*_MPDFK); + $xadj = $xadj2 = 0; + if ($this->spanborddet['L']['style'] == 'double') { $xadj = $this->spanborddet['L']['w']*2/3; } + if ($this->spanborddet['R']['style'] == 'double') { $xadj2 = $this->spanborddet['R']['w']*2/3; } + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',($this->x-$lbw+$xadj)*_MPDFK,($this->h-$boxbottom-$bbw/6)*_MPDFK,($this->x+$w+$rbw-$short-$xadj2)*_MPDFK,($this->h-$boxbottom-$bbw/6)*_MPDFK); + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',($this->x-$lbw)*_MPDFK,($this->h-$boxbottom-$bbw*5/6)*_MPDFK,($this->x+$w+$rbw-$short)*_MPDFK,($this->h-$boxbottom-$bbw*5/6)*_MPDFK); + } + else { + $s.=sprintf(' %s %.3F w ',$c,$bbw*_MPDFK); + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',($this->x-$lbw)*_MPDFK,($this->h-$boxbottom-$bbw/2)*_MPDFK,($this->x+$w+$rbw-$short)*_MPDFK,($this->h-$boxbottom-$bbw/2)*_MPDFK); + } + } + if($lbw) { + $short = 0; + if ($this->spanborddet['L']['style'] == 'dashed') { + $s.=sprintf(' 0 j 0 J [%.3F %.3F] 0 d ',$lbw*$dashon*_MPDFK,$lbw*$dashoff*_MPDFK); + } + else if ($this->spanborddet['L']['style'] == 'dotted') { + $s.=sprintf(' 1 j 1 J [%.3F %.3F] %.3F d ',0.001,$lbw*$dot*_MPDFK,-$lbw/2*_MPDFK); + $short = $lbw/2; + } + else { + $s.=' 0 j 0 J [] 0 d '; + } + $c = $this->SetDColor($this->spanborddet['L']['c'],true); + if ($this->spanborddet['L']['style'] == 'double') { + $s.=sprintf(' %s %.3F w ',$c,$lbw/3*_MPDFK); + $yadj = $yadj2 = 0; + if ($this->spanborddet['T']['style'] == 'double') { $yadj = $this->spanborddet['T']['w']*2/3; } + if ($this->spanborddet['B']['style'] == 'double') { $yadj2 = $this->spanborddet['B']['w']*2/3; } + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',($this->x-$lbw/6)*_MPDFK,($this->h-$boxtop+$tbw-$yadj)*_MPDFK,($this->x-$lbw/6)*_MPDFK,($this->h-$boxbottom-$bbw+$short+$yadj2)*_MPDFK); + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',($this->x-$lbw*5/6)*_MPDFK,($this->h-$boxtop+$tbw)*_MPDFK,($this->x-$lbw*5/6)*_MPDFK,($this->h-$boxbottom-$bbw+$short)*_MPDFK); + } + else { + $s.=sprintf(' %s %.3F w ',$c,$lbw*_MPDFK); + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',($this->x-$lbw/2)*_MPDFK,($this->h-$boxtop+$tbw)*_MPDFK,($this->x-$lbw/2)*_MPDFK,($this->h-$boxbottom-$bbw+$short)*_MPDFK); + } + } + if($rbw) { + $short = 0; + if ($this->spanborddet['R']['style'] == 'dashed') { + $s.=sprintf(' 0 j 0 J [%.3F %.3F] 0 d ',$rbw*$dashon*_MPDFK,$rbw*$dashoff*_MPDFK); + } + else if ($this->spanborddet['R']['style'] == 'dotted') { + $s.=sprintf(' 1 j 1 J [%.3F %.3F] %.3F d ',0.001,$rbw*$dot*_MPDFK,-$rbw/2*_MPDFK); + $short = $rbw/2; + } + else { + $s.=' 0 j 0 J [] 0 d '; + } + $c = $this->SetDColor($this->spanborddet['R']['c'],true); + if ($this->spanborddet['R']['style'] == 'double') { + $s.=sprintf(' %s %.3F w ',$c,$rbw/3*_MPDFK); + $yadj = $yadj2 = 0; + if ($this->spanborddet['T']['style'] == 'double') { $yadj = $this->spanborddet['T']['w']*2/3; } + if ($this->spanborddet['B']['style'] == 'double') { $yadj2 = $this->spanborddet['B']['w']*2/3; } + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',($this->x+$w+$rbw/6)*_MPDFK,($this->h-$boxtop+$tbw-$yadj)*_MPDFK,($this->x+$w+$rbw/6)*_MPDFK,($this->h-$boxbottom-$bbw+$short+$yadj2)*_MPDFK); + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',($this->x+$w+$rbw*5/6)*_MPDFK,($this->h-$boxtop+$tbw)*_MPDFK,($this->x+$w+$rbw*5/6)*_MPDFK,($this->h-$boxbottom-$bbw+$short)*_MPDFK); + } + else { + $s.=sprintf(' %s %.3F w ',$c,$rbw*_MPDFK); + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',($this->x+$w+$rbw/2)*_MPDFK,($this->h-$boxtop+$tbw)*_MPDFK,($this->x+$w+$rbw/2)*_MPDFK,($this->h-$boxbottom-$bbw+$short)*_MPDFK); + } + } + $s.= ' Q '; + } + else { + if ($fill==1) $op=($border==1) ? 'B' : 'f'; + else $op='S'; + $s.=sprintf('%.3F %.3F %.3F %.3F re %s ',$this->x*_MPDFK,($this->h-$boxtop)*_MPDFK,$w*_MPDFK,-$boxheight*_MPDFK,$op); + } + } + + if(is_string($border)) { + $x=$this->x; + $y=$this->y; + if(is_int(strpos($border,'L'))) + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',$x*_MPDFK,($this->h-$boxtop)*_MPDFK,$x*_MPDFK,($this->h-($boxbottom))*_MPDFK); + if(is_int(strpos($border,'T'))) + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',$x*_MPDFK,($this->h-$boxtop)*_MPDFK,($x+$w)*_MPDFK,($this->h-$boxtop)*_MPDFK); + if(is_int(strpos($border,'R'))) + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',($x+$w)*_MPDFK,($this->h-$boxtop)*_MPDFK,($x+$w)*_MPDFK,($this->h-($boxbottom))*_MPDFK); + if(is_int(strpos($border,'B'))) + $s.=sprintf('%.3F %.3F m %.3F %.3F l S ',$x*_MPDFK,($this->h-($boxbottom))*_MPDFK,($x+$w)*_MPDFK,($this->h-($boxbottom))*_MPDFK); + } + + if($txt!='') { + if ($exactWidth) + $stringWidth = $w; + else + $stringWidth = $this->GetStringWidth($txt) + ( $this->charspacing * mb_strlen( $txt, $this->mb_enc ) / _MPDFK ) + + ( $this->ws * mb_substr_count( $txt, ' ', $this->mb_enc ) / _MPDFK ); + + // Set x OFFSET FOR PRINTING + if($align=='R') { + $dx=$w-$this->cMarginR - $stringWidth - $lcpaddingR; + } + elseif($align=='C') { + $dx=(($w - $stringWidth )/2); + } + elseif($align=='L' or $align=='J') $dx=$this->cMarginL + $lcpaddingL; + else $dx = 0; + + if($this->ColorFlag) $s .='q '.$this->TextColor.' '; + + // OUTLINE + if($this->textparam['outline-s'] && !$this->S) { // mPDF 5.6.07 + $s .=' '.sprintf('%.3F w',$this->LineWidth*_MPDFK).' '; + $s .=" $this->DrawColor "; + $s .=" 2 Tr "; + } + else if ($this->falseBoldWeight && strpos($this->ReqFontStyle,"B") !== false && strpos($this->FontStyle,"B") === false && !$this->S) { // can't use together with OUTLINE or Small Caps + $s .= ' 2 Tr 1 J 1 j '; + $s .= ' '.sprintf('%.3F w',($this->FontSize/130)*_MPDFK*$this->falseBoldWeight).' '; + $tc = strtoupper($this->TextColor); // change 0 0 0 rg to 0 0 0 RG + if($this->FillColor!=$tc) { $s .= ' '.$tc.' '; } // stroke (outline) = same colour as text(fill) + } + else { $s .=" 0 Tr "; } // mPDF 5.6.07 + + if (strpos($this->ReqFontStyle,"I") !== false && strpos($this->FontStyle,"I") === false) { // Artificial italic + $aix = '1 0 0.261799 1 %.3F %.3F Tm '; + } + else { $aix = '%.3F %.3F Td '; } + + // THE TEXT + $sub = ''; + $this->CurrentFont['used']= true; + + // WORD SPACING + // IF multibyte - Tw has no effect - need to use alternative method - do word spacing using an adjustment before each space + if ($this->ws && !$this->usingCoreFont && !$this->CurrentFont['sip'] && !$this->CurrentFont['smp'] && !$this->S) { + $sub .= ' BT 0 Tw ET '; + if ($this->kerning && $this->useKerning) { $sub .= $this->_kern($txt, 'MBTw', $aix, ($this->x+$dx), ($this->y+$baseline+$va)); } + else { + $space = " "; + //Convert string to UTF-16BE without BOM + $space= $this->UTF8ToUTF16BE($space , false); + $space=$this->_escape($space ); + $sub .=sprintf('BT '.$aix,($this->x+$dx)*_MPDFK,($this->h-($this->y+$baseline+$va))*_MPDFK); + $t = explode(' ',$txt); + $sub .=sprintf(' %.3F Tc [',$this->charspacing); + $numt = count($t); + for($i=0;$i<$numt;$i++) { + $tx = $t[$i]; + //Convert string to UTF-16BE without BOM + $tx = $this->UTF8ToUTF16BE($tx , false); + $tx = $this->_escape($tx); + $sub .=sprintf('(%s) ',$tx); + if (($i+1)<$numt) { + $adj = -($this->ws)*1000/$this->FontSizePt; + $sub .=sprintf('%d(%s) ',$adj,$space); + } + } + $sub .='] TJ '; + $sub .=' ET'; + } + } + else { + $txt2= $txt; + if ($this->CurrentFont['type']=='TTF' && ($this->CurrentFont['sip'] || $this->CurrentFont['smp'])) { + if ($this->S) { $sub .= $this->_smallCaps($txt2, 'SIPSMP', $aix, $dx, _MPDFK, $baseline, $va); } + else { + $txt2 = $this->UTF8toSubset($txt2); + $sub .=sprintf('BT '.$aix.' %s Tj ET',($this->x+$dx)*_MPDFK,($this->h-($this->y+$baseline+$va))*_MPDFK,$txt2); + } + } + else { + if ($this->S) { $sub .= $this->_smallCaps($txt2, '', $aix, $dx, _MPDFK, $baseline, $va); } + else if ($this->kerning && $this->useKerning) { $sub .= $this->_kern($txt2, '', $aix, ($this->x+$dx), ($this->y+$baseline+$va)); } + else { + if (!$this->usingCoreFont) { + $txt2 = $this->UTF8ToUTF16BE($txt2, false); + } + $txt2=$this->_escape($txt2); + $sub .=sprintf('BT '.$aix.' (%s) Tj ET',($this->x+$dx)*_MPDFK,($this->h-($this->y+$baseline+$va))*_MPDFK,$txt2); + } + } + } + // UNDERLINE + if($this->U) { + $c = strtoupper($this->TextColor); // change 0 0 0 rg to 0 0 0 RG + if($this->FillColor!=$c) { $sub .= ' '.$c.' '; } + if (isset($this->CurrentFont['up'])) { $up=$this->CurrentFont['up']; } + else { $up = -100; } + $adjusty = (-$up/1000* $this->FontSize); + if (isset($this->CurrentFont['ut'])) { $ut=$this->CurrentFont['ut']/1000* $this->FontSize; } + else { $ut = 60/1000* $this->FontSize; } + $olw = $this->LineWidth; + $sub .=' '.(sprintf(' %.3F w 0 j 0 J ',$ut*_MPDFK)); + $sub .=' '.$this->_dounderline($this->x+$dx,$this->y+$baseline+$va+$adjusty,$txt); + $sub .=' '.(sprintf(' %.3F w 2 j 2 J ',$olw*_MPDFK)); + if($this->FillColor!=$c) { $sub .= ' '.$this->FillColor.' '; } + } + + // STRIKETHROUGH + if($this->strike) { + $c = strtoupper($this->TextColor); // change 0 0 0 rg to 0 0 0 RG + if($this->FillColor!=$c) { $sub .= ' '.$c.' '; } + //Superscript and Subscript Y coordinate adjustment (now for striked-through texts) + if (isset($this->CurrentFont['desc']['CapHeight'])) { $ch=$this->CurrentFont['desc']['CapHeight']; } + else { $ch = 700; } + $adjusty = (-$ch/1000* $this->FontSize) * 0.35; + if (isset($this->CurrentFont['ut'])) { $ut=$this->CurrentFont['ut']/1000* $this->FontSize; } + else { $ut = 60/1000* $this->FontSize; } + $olw = $this->LineWidth; + $sub .=' '.(sprintf(' %.3F w 0 j 0 J ',$ut*_MPDFK)); + $sub .=' '.$this->_dounderline($this->x+$dx,$this->y+$baseline+$va+$adjusty,$txt); + $sub .=' '.(sprintf(' %.3F w 2 j 2 J ',$olw*_MPDFK)); + if($this->FillColor!=$c) { $sub .= ' '.$this->FillColor.' '; } + } + + // TEXT SHADOW + if ($this->textshadow) { // First to process is last in CSS comma separated shadows + foreach($this->textshadow AS $ts) { + $s .= ' q '; + $s .= $this->SetTColor($ts['col'], true)."\n"; + if ($ts['col']{0}==5 && ord($ts['col']{4})<100) { // RGBa + $s .= $this->SetAlpha(ord($ts['col']{4})/100, 'Normal', true, 'F')."\n"; + } + else if ($ts['col']{0}==6 && ord($ts['col']{5})<100) { // CMYKa + $s .= $this->SetAlpha(ord($ts['col']{5})/100, 'Normal', true, 'F')."\n"; + } + else if ($ts['col']{0}==1 && $ts['col']{2}==1 && ord($ts['col']{3})<100) { // Gray + $s .= $this->SetAlpha(ord($ts['col']{3})/100, 'Normal', true, 'F')."\n"; + } + $s .= sprintf(' 1 0 0 1 %.4F %.4F cm', $ts['x']*_MPDFK, -$ts['y']*_MPDFK)."\n"; + $s .= $sub; + $s .= ' Q '; + } + } + + $s .= $sub; + + // COLOR + if($this->ColorFlag) $s .=' Q'; + + // LINK + if($link!='') { + $this->Link($this->x,$boxtop,$w,$boxheight,$link); + } + } + if($s) $this->_out($s); + + // WORD SPACING + if ($this->ws && !$this->usingCoreFont) { + $this->_out(sprintf('BT %.3F Tc ET',$this->charspacing)); + } + $this->lasth=$h; + if( strpos($txt,"\n") !== false) $ln=1; // cell recognizes \n from <BR> tag + if($ln>0) + { + //Go to next line + $this->y += $h; + if($ln==1) { + //Move to next line + if ($currentx != 0) { $this->x=$currentx; } + else { $this->x=$this->lMargin; } + } + } + else $this->x+=$w; + + +} + + +function _kern($txt, $mode, $aix, $x, $y) { + if ($mode == 'MBTw') { // Multibyte requiring word spacing + $space = ' '; + //Convert string to UTF-16BE without BOM + $space= $this->UTF8ToUTF16BE($space , false); + $space=$this->_escape($space ); + $s = sprintf(' BT '.$aix,$x*_MPDFK,($this->h-$y)*_MPDFK); + $t = explode(' ',$txt); + for($i=0;$i<count($t);$i++) { + $tx = $t[$i]; + + $tj = '('; + $unicode = $this->UTF8StringToArray($tx); + for($ti=0;$ti<count($unicode);$ti++) { + if ($ti > 0 && isset($this->CurrentFont['kerninfo'][$unicode[($ti-1)]][$unicode[$ti]])) { + $kern = -$this->CurrentFont['kerninfo'][$unicode[($ti-1)]][$unicode[$ti]]; + $tj .= sprintf(')%d(',$kern); + } + $tc = code2utf($unicode[$ti]); + $tc = $this->UTF8ToUTF16BE($tc, false); + $tj .= $this->_escape($tc); + } + $tj .= ')'; + $s.=sprintf(' %.3F Tc [%s] TJ',$this->charspacing,$tj); + + + if (($i+1)<count($t)) { + $s.=sprintf(' %.3F Tc (%s) Tj',$this->ws+$this->charspacing,$space); + } + } + $s.=' ET '; + } + else if (!$this->usingCoreFont) { + $s = ''; + $tj = '('; + $unicode = $this->UTF8StringToArray($txt); + for($i=0;$i<count($unicode);$i++) { + if ($i > 0 && isset($this->CurrentFont['kerninfo'][$unicode[($i-1)]][$unicode[$i]])) { + $kern = -$this->CurrentFont['kerninfo'][$unicode[($i-1)]][$unicode[$i]]; + $tj .= sprintf(')%d(',$kern); + } + $tx = code2utf($unicode[$i]); + $tx = $this->UTF8ToUTF16BE($tx, false); + $tj .= $this->_escape($tx); + } + $tj .= ')'; + $s.=sprintf(' BT '.$aix.' [%s] TJ ET ',$x*_MPDFK,($this->h-$y)*_MPDFK,$tj); + } + else { // CORE Font + $s = ''; + $tj = '('; + $l = strlen($txt); + for($i=0;$i<$l;$i++) { + if ($i > 0 && isset($this->CurrentFont['kerninfo'][$txt[($i-1)]][$txt[$i]])) { + $kern = -$this->CurrentFont['kerninfo'][$txt[($i-1)]][$txt[$i]]; + $tj .= sprintf(')%d(',$kern); + } + $tj .= $this->_escape($txt[$i]); + } + $tj .= ')'; + $s.=sprintf(' BT '.$aix.' [%s] TJ ET ',$x*_MPDFK,($this->h-$y)*_MPDFK,$tj); + } + + return $s; +} + + +function _smallCaps($txt, $mode, $aix, $dx, $k, $baseline, $va) { + $upp = false; + $str = array(); + $bits = array(); + if (!$this->usingCoreFont) { + $unicode = $this->UTF8StringToArray($txt); + foreach($unicode as $char) { + if ($this->ws && $char == 32) { // space + if (count($str)) { $bits[] = array($upp, $str, false); } + $bits[] = array(false, array(32), true); + $str = array(); + $upp = false; + } + else if (isset($this->upperCase[$char])) { + if (!$upp) { + if (count($str)) { $bits[] = array($upp, $str, false); } + $str = array(); + } + $str[] = $this->upperCase[$char]; + if ((!isset($this->CurrentFont['sip']) || !$this->CurrentFont['sip']) && (!isset($this->CurrentFont['smp']) || !$this->CurrentFont['smp'])) { + $this->CurrentFont['subset'][$this->upperCase[$char]] = $this->upperCase[$char]; + } + $upp = true; + } + else { + if ($upp) { + if (count($str)) { $bits[] = array($upp, $str, false); } + $str = array(); + } + $str[] = $char; + $upp = false; + } + } + } + else { + for($i=0;$i<strlen($txt);$i++) { + if (isset($this->upperCase[ord($txt[$i])]) && $this->upperCase[ord($txt[$i])] < 256) { + if (!$upp) { + if (count($str)) { $bits[] = array($upp, $str, false); } + $str = array(); + } + $str[] = $this->upperCase[ord($txt[$i])]; + $upp = true; + } + else { + if ($upp) { + if (count($str)) { $bits[] = array($upp, $str, false); } + $str = array(); + } + $str[] = ord($txt[$i]); + $upp = false; + } + } + } + if (count($str)) { $bits[] = array($upp, $str, false); } + + $fid = $this->CurrentFont['i']; + + $s=sprintf(' BT '.$aix,($this->x+$dx)*$k,($this->h-($this->y+$baseline+$va))*$k); + foreach($bits AS $b) { + if ($b[0]) { $upp = true; } + else { $upp = false; } + + $size = count ($b[1]); + $txt = ''; + for ($i = 0; $i < $size; $i++) { + $txt .= code2utf($b[1][$i]); + } + if ($this->usingCoreFont) { + $txt = utf8_decode($txt); + } + if ($mode == 'SIPSMP') { + $txt = $this->UTF8toSubset($txt); + } + else { + if (!$this->usingCoreFont) { + $txt = $this->UTF8ToUTF16BE($txt, false); + } + $txt=$this->_escape($txt); + $txt = '('.$txt.')'; + } + if ($b[2]) { // space + $s.=sprintf(' /F%d %.3F Tf %d Tz', $fid, $this->FontSizePt, 100); + $s.=sprintf(' %.3F Tc', ($this->charspacing+$this->ws)); + $s.=sprintf(' %s Tj', $txt); + } + else if ($upp) { + $s.=sprintf(' /F%d %.3F Tf', $fid, $this->FontSizePt*$this->smCapsScale); + $s.=sprintf(' %d Tz', $this->smCapsStretch); + $s.=sprintf(' %.3F Tc', ($this->charspacing*100/$this->smCapsStretch)); + $s.=sprintf(' %s Tj', $txt); + } + else { + $s.=sprintf(' /F%d %.3F Tf %d Tz', $fid, $this->FontSizePt, 100); + $s.=sprintf(' %.3F Tc', ($this->charspacing)); + $s.=sprintf(' %s Tj', $txt); + } + } + $s.=' ET '; + return $s; +} + + +function MultiCell($w,$h,$txt,$border=0,$align='',$fill=0,$link='',$directionality='ltr',$encoded=false) +{ + // Parameter (pre-)encoded - When called internally from ToC or textarea: mb_encoding already done - but not reverse RTL/Indic + if (!$encoded) { + $txt = $this->purify_utf8_text($txt); + if ($this->text_input_as_HTML) { + $txt = $this->all_entities_to_utf8($txt); + } + if ($this->usingCoreFont) { $txt = mb_convert_encoding($txt,$this->mb_enc,'UTF-8'); } + // Font-specific ligature substitution for Indic fonts + else if (isset($this->CurrentFont['indic']) && $this->CurrentFont['indic']) { // *INDIC* + $this->ConvertIndic($tmp); // *INDIC* + } // *INDIC* + if (preg_match("/([".$this->pregRTLchars."])/u", $txt)) { $this->biDirectional = true; } // *RTL* + } + if (!$align) { $align = $this->defaultAlign; } + + //Output text with automatic or explicit line breaks + $cw=&$this->CurrentFont['cw']; + if($w==0) $w=$this->w-$this->rMargin-$this->x; + + $wmax = ($w - ($this->cMarginL+$this->cMarginR)); + if ($this->usingCoreFont) { + $s=str_replace("\r",'',$txt); + $nb=strlen($s); + while($nb>0 and $s[$nb-1]=="\n") $nb--; + } + else { + $s=str_replace("\r",'',$txt); + $nb=mb_strlen($s, $this->mb_enc ); + while($nb>0 and mb_substr($s,$nb-1,1,$this->mb_enc )=="\n") $nb--; + } + $b=0; + if($border) { + if($border==1) { + $border='LTRB'; + $b='LRT'; + $b2='LR'; + } + else { + $b2=''; + if(is_int(strpos($border,'L'))) $b2.='L'; + if(is_int(strpos($border,'R'))) $b2.='R'; + $b=is_int(strpos($border,'T')) ? $b2.'T' : $b2; + } + } + $sep=-1; + $i=0; + $j=0; + $l=0; + $ns=0; + $nl=1; + + + + if (!$this->usingCoreFont) { + $checkCursive=false; + if ($this->biDirectional) { $checkCursive=true; } + else if (isset($this->CurrentFont['indic']) && $this->CurrentFont['indic']) { $checkCursive=true; } // *INDIC* + while($i<$nb) { + //Get next character + $c = mb_substr($s,$i,1,$this->mb_enc ); + if($c == "\n") { + //Explicit line break + // WORD SPACING + $this->ResetSpacing(); + $tmp = rtrim(mb_substr($s,$j,$i-$j,$this->mb_enc)); + // DIRECTIONALITY + $this->magic_reverse_dir($tmp, true, $directionality); // *RTL* + + $this->Cell($w,$h,$tmp,$b,2,$align,$fill,$link); + $i++; + $sep=-1; + $j=$i; + $l=0; + $ns=0; + $nl++; + if($border and $nl==2) $b=$b2; + continue; + } + if($c == " ") { + $sep=$i; + $ls=$l; + $ns++; + } + + $l += $this->GetCharWidthNonCore($c); + + if($l>$wmax) { + //Automatic line break + if($sep==-1) { // Only one word + if($i==$j) $i++; + // WORD SPACING + $this->ResetSpacing(); + $tmp = rtrim(mb_substr($s,$j,$i-$j,$this->mb_enc)); + // DIRECTIONALITY + $this->magic_reverse_dir($tmp, true, $directionality); // *RTL* + + $this->Cell($w,$h,$tmp,$b,2,$align,$fill,$link); + } + else { + $tmp = rtrim(mb_substr($s,$j,$sep-$j,$this->mb_enc)); + if($align=='J') { + ////////////////////////////////////////// + // JUSTIFY J using Unicode fonts (Word spacing doesn't work) + // WORD SPACING UNICODE + // Change NON_BREAKING SPACE to spaces so they are 'spaced' properly + $tmp = str_replace(chr(194).chr(160),chr(32),$tmp ); + $len_ligne = $this->GetStringWidth($tmp ); + $nb_carac = mb_strlen( $tmp , $this->mb_enc ) ; + $nb_spaces = mb_substr_count( $tmp ,' ', $this->mb_enc ) ; + + $inclCursive=false; + if ($checkCursive) { + if (preg_match("/([".$this->pregRTLchars."])/u", $tmp)) { $inclCursive = true; } // *RTL* + if (preg_match("/([".$this->pregHIchars.$this->pregBNchars.$this->pregPAchars."])/u", $tmp)) { $inclCursive = true; } // *INDIC* + } + list($charspacing,$ws) = $this->GetJspacing($nb_carac,$nb_spaces,((($wmax) - $len_ligne) * _MPDFK),$inclCursive); + $this->SetSpacing($charspacing,$ws); + ////////////////////////////////////////// + } + + // DIRECTIONALITY + $this->magic_reverse_dir($tmp, true, $directionality); // *RTL* + + $this->Cell($w,$h,$tmp,$b,2,$align,$fill,$link); + $i=$sep+1; + } + $sep=-1; + $j=$i; + $l=0; + $ns=0; + $nl++; + if($border and $nl==2) $b=$b2; + } + else $i++; + } + //Last chunk + // WORD SPACING + + $this->ResetSpacing(); + + } + + + else { + + while($i<$nb) { + //Get next character + $c=$s[$i]; + if($c == "\n") { + //Explicit line break + // WORD SPACING + $this->ResetSpacing(); + $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill,$link); + $i++; + $sep=-1; + $j=$i; + $l=0; + $ns=0; + $nl++; + if($border and $nl==2) $b=$b2; + continue; + } + if($c == " ") { + $sep=$i; + $ls=$l; + $ns++; + } + + $l += $this->GetCharWidthCore($c); + if($l>$wmax) { + //Automatic line break + if($sep==-1) { + if($i==$j) $i++; + // WORD SPACING + $this->ResetSpacing(); + $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill,$link); + } + else { + if($align=='J') { + $tmp = rtrim(substr($s,$j,$sep-$j)); + ////////////////////////////////////////// + // JUSTIFY J using Unicode fonts (Word spacing doesn't work) + // WORD SPACING NON_UNICDOE/CJK + // Change NON_BREAKING SPACE to spaces so they are 'spaced' properly + $tmp = str_replace(chr(160),chr(32),$tmp); + $len_ligne = $this->GetStringWidth($tmp ); + $nb_carac = strlen( $tmp ) ; + $nb_spaces = substr_count( $tmp ,' ' ) ; + list($charspacing,$ws) = $this->GetJspacing($nb_carac,$nb_spaces,((($wmax) - $len_ligne) * _MPDFK),false); + $this->SetSpacing($charspacing,$ws); + ////////////////////////////////////////// + } + $this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill,$link); + $i=$sep+1; + } + $sep=-1; + $j=$i; + $l=0; + $ns=0; + $nl++; + if($border and $nl==2) $b=$b2; + } + else $i++; + } + //Last chunk + // WORD SPACING + + $this->ResetSpacing(); + + } + //Last chunk + if($border and is_int(strpos($border,'B'))) $b.='B'; + if (!$this->usingCoreFont) { + $tmp = rtrim(mb_substr($s,$j,$i-$j,$this->mb_enc)); + // DIRECTIONALITY + $this->magic_reverse_dir($tmp, true, $directionality); // *RTL* + $this->Cell($w,$h,$tmp,$b,2,$align,$fill,$link); + } + else { $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill,$link); } + $this->x=$this->lMargin; +} + + +/*-- DIRECTW --*/ +function Write($h,$txt,$currentx=0,$link='',$directionality='ltr',$align='') { + if (!class_exists('directw', false)) { include(_MPDF_PATH.'classes/directw.php'); } + if (empty($this->directw)) { $this->directw = new directw($this); } + $this->directw->Write($h,$txt,$currentx,$link,$directionality,$align); +} +/*-- END DIRECTW --*/ + + +/*-- HTML-CSS --*/ +function saveInlineProperties() { + $saved = array(); + $saved[ 'family' ] = $this->FontFamily; + $saved[ 'style' ] = $this->FontStyle; + $saved[ 'sizePt' ] = $this->FontSizePt; + $saved[ 'size' ] = $this->FontSize; + $saved[ 'HREF' ] = $this->HREF; + $saved[ 'underline' ] = $this->U; + $saved[ 'smCaps' ] = $this->S; + $saved[ 'strike' ] = $this->strike; + $saved[ 'textshadow' ] = $this->textshadow; + $saved[ 'SUP' ] = $this->SUP; + $saved[ 'SUB' ] = $this->SUB; + $saved[ 'linewidth' ] = $this->LineWidth; + $saved[ 'drawcolor' ] = $this->DrawColor; + $saved[ 'textparam' ] = $this->textparam; + $saved[ 'toupper' ] = $this->toupper; + $saved[ 'tolower' ] = $this->tolower; + $saved[ 'capitalize' ] = $this->capitalize; + $saved[ 'fontkerning' ] = $this->kerning; + $saved[ 'lSpacingCSS' ] = $this->lSpacingCSS; + $saved[ 'wSpacingCSS' ] = $this->wSpacingCSS; + $saved[ 'I' ] = $this->I; + $saved[ 'B' ] = $this->B; + $saved[ 'colorarray' ] = $this->colorarray; + $saved[ 'bgcolorarray' ] = $this->spanbgcolorarray; + $saved[ 'border' ] = $this->spanborddet; + $saved[ 'color' ] = $this->TextColor; + $saved[ 'bgcolor' ] = $this->FillColor; + $saved[ 'lang' ] = $this->currentLang; + $saved[ 'display_off' ] = $this->inlineDisplayOff; + + return $saved; +} + +function restoreInlineProperties( &$saved) { + $FontFamily = $saved[ 'family' ]; + $this->FontStyle = $saved[ 'style' ]; + $this->FontSizePt = $saved[ 'sizePt' ]; + $this->FontSize = $saved[ 'size' ]; + + $this->currentLang = $saved['lang']; + if ($this->useLang && !$this->usingCoreFont) { + if ($this->currentLang != $this->default_lang && ((strlen($this->currentLang) == 5 && $this->currentLang != 'UTF-8') || strlen($this->currentLang ) == 2)) { + list ($coreSuitable,$mpdf_pdf_unifonts) = GetLangOpts($this->currentLang, $this->useAdobeCJK); + if ($mpdf_pdf_unifonts) { $this->RestrictUnicodeFonts($mpdf_pdf_unifonts); } + else { $this->RestrictUnicodeFonts($this->default_available_fonts ); } + } + else { + $this->RestrictUnicodeFonts($this->default_available_fonts ); + } + } + + $this->ColorFlag = ($this->FillColor != $this->TextColor); //Restore ColorFlag as well + + $this->HREF = $saved[ 'HREF' ]; + $this->U = $saved[ 'underline' ]; + $this->S = $saved[ 'smCaps' ]; + $this->strike = $saved[ 'strike' ]; + $this->textshadow = $saved[ 'textshadow' ]; + $this->SUP = $saved[ 'SUP' ]; + $this->SUB = $saved[ 'SUB' ]; + $this->LineWidth = $saved[ 'linewidth' ]; + $this->DrawColor = $saved[ 'drawcolor' ]; + $this->textparam = $saved[ 'textparam' ]; + $this->inlineDisplayOff = $saved['display_off']; + + $this->toupper = $saved[ 'toupper' ]; + $this->tolower = $saved[ 'tolower' ]; + $this->capitalize = $saved[ 'capitalize' ]; + $this->kerning = $saved[ 'fontkerning' ]; + $this->lSpacingCSS = $saved[ 'lSpacingCSS' ]; + if (($this->lSpacingCSS || $this->lSpacingCSS==='0') && strtoupper($this->lSpacingCSS) != 'NORMAL') { + $this->fixedlSpacing = $this->ConvertSize($this->lSpacingCSS,$this->FontSize); + } + else { $this->fixedlSpacing = false; } + $this->wSpacingCSS = $saved[ 'wSpacingCSS' ]; + if ($this->wSpacingCSS && strtoupper($this->wSpacingCSS) != 'NORMAL') { + $this->minwSpacing = $this->ConvertSize($this->wSpacingCSS,$this->FontSize); + } + else { $this->minwSpacing = 0; } + + $this->SetFont($FontFamily, $saved[ 'style' ].($this->U ? 'U' : '').($this->S ? 'S' : ''),$saved[ 'sizePt' ],false); + + $this->currentfontstyle = $saved[ 'style' ].($this->U ? 'U' : '').($this->S ? 'S' : ''); + $this->currentfontsize = $saved[ 'sizePt' ]; + $this->SetStylesArray(array('S'=>$this->S, 'U'=>$this->U, 'B'=>$saved[ 'B' ], 'I'=>$saved[ 'I' ])); + + $this->TextColor = $saved[ 'color' ]; + $this->FillColor = $saved[ 'bgcolor' ]; + $this->colorarray = $saved[ 'colorarray' ]; + $cor = $saved[ 'colorarray' ]; + if ($cor) $this->SetTColor($cor); + $this->spanbgcolorarray = $saved[ 'bgcolorarray' ]; + $cor = $saved[ 'bgcolorarray' ]; + if ($cor) $this->SetFColor($cor); + $this->spanborddet = $saved[ 'border' ]; +} + + + +// Used when ColActive for tables - updated to return first block with background fill OR borders +function GetFirstBlockFill() { + // Returns the first blocklevel that uses a bgcolor fill + $startfill = 0; + for ($i=1;$i<=$this->blklvl;$i++) { + if ($this->blk[$i]['bgcolor'] || $this->blk[$i]['border_left']['w'] || $this->blk[$i]['border_right']['w'] || $this->blk[$i]['border_top']['w'] || $this->blk[$i]['border_bottom']['w'] ) { + $startfill = $i; + break; + } + } + return $startfill; +} + +function SetBlockFill($blvl) { + if ($this->blk[$blvl]['bgcolor']) { + $this->SetFColor($this->blk[$blvl]['bgcolorarray']); + return 1; + } + else { + $this->SetFColor($this->ConvertColor(255)); + return 0; + } +} + + +//-------------------------FLOWING BLOCK------------------------------------// +//The following functions were originally written by Damon Kohler // +//--------------------------------------------------------------------------// + +function saveFont() { + $saved = array(); + $saved[ 'family' ] = $this->FontFamily; + $saved[ 'style' ] = $this->FontStyle; + $saved[ 'sizePt' ] = $this->FontSizePt; + $saved[ 'size' ] = $this->FontSize; + $saved[ 'curr' ] = &$this->CurrentFont; + $saved[ 'color' ] = $this->TextColor; + $saved[ 'spanbgcolor' ] = $this->spanbgcolor; + $saved[ 'spanbgcolorarray' ] = $this->spanbgcolorarray; + $saved[ 'bord' ] = $this->spanborder; + $saved[ 'border' ] = $this->spanborddet; + $saved[ 'HREF' ] = $this->HREF; + $saved[ 'underline' ] = $this->U; + $saved[ 'smCaps' ] = $this->S; + $saved[ 'strike' ] = $this->strike; + $saved[ 'textshadow' ] = $this->textshadow; + $saved[ 'SUP' ] = $this->SUP; + $saved[ 'SUB' ] = $this->SUB; + $saved[ 'linewidth' ] = $this->LineWidth; + $saved[ 'drawcolor' ] = $this->DrawColor; + $saved[ 'textparam' ] = $this->textparam; + $saved[ 'ReqFontStyle' ] = $this->ReqFontStyle; + $saved[ 'fontkerning' ] = $this->kerning; + $saved[ 'fixedlSpacing' ] = $this->fixedlSpacing; + $saved[ 'minwSpacing' ] = $this->minwSpacing; + return $saved; +} + +function restoreFont( &$saved, $write=true) { + if (!isset($saved) || empty($saved)) return; + + $this->FontFamily = $saved[ 'family' ]; + $this->FontStyle = $saved[ 'style' ]; + $this->FontSizePt = $saved[ 'sizePt' ]; + $this->FontSize = $saved[ 'size' ]; + $this->CurrentFont = &$saved[ 'curr' ]; + $this->TextColor = $saved[ 'color' ]; + $this->spanbgcolor = $saved[ 'spanbgcolor' ]; + $this->spanbgcolorarray = $saved[ 'spanbgcolorarray' ]; + $this->spanborder = $saved[ 'bord' ]; + $this->spanborddet = $saved[ 'border' ]; + $this->ColorFlag = ($this->FillColor != $this->TextColor); //Restore ColorFlag as well + $this->HREF = $saved[ 'HREF' ]; + $this->U = $saved[ 'underline' ]; + $this->S = $saved[ 'smCaps' ]; + $this->kerning = $saved[ 'fontkerning' ]; + $this->fixedlSpacing = $saved[ 'fixedlSpacing' ]; + $this->minwSpacing = $saved[ 'minwSpacing' ]; + $this->strike = $saved[ 'strike' ]; + $this->textshadow = $saved[ 'textshadow' ]; + $this->SUP = $saved[ 'SUP' ]; + $this->SUB = $saved[ 'SUB' ]; + $this->LineWidth = $saved[ 'linewidth' ]; + $this->DrawColor = $saved[ 'drawcolor' ]; + $this->textparam = $saved[ 'textparam' ]; + if ($write) { + $this->SetFont($saved[ 'family' ],$saved[ 'style' ].($this->U ? 'U' : '').($this->S ? 'S' : ''),$saved[ 'sizePt' ],true,true); // force output + $fontout = (sprintf('BT /F%d %.3F Tf ET', $this->CurrentFont['i'], $this->FontSizePt)); + if($this->page>0 && ((isset($this->pageoutput[$this->page]['Font']) && $this->pageoutput[$this->page]['Font'] != $fontout) || !isset($this->pageoutput[$this->page]['Font']) || $this->keep_block_together)) { $this->_out($fontout); } + $this->pageoutput[$this->page]['Font'] = $fontout; + } + else + $this->SetFont($saved[ 'family' ],$saved[ 'style' ].($this->U ? 'U' : '').($this->S ? 'S' : ''),$saved[ 'sizePt' ]); + $this->ReqFontStyle = $saved[ 'ReqFontStyle' ]; +} + +function newFlowingBlock( $w, $h, $a = '', $is_table = false, $is_list = false, $blockstate = 0, $newblock=true, $blockdir='ltr') +{ + if (!$a) { + if ($blockdir=='rtl') { $a = 'R'; } + else { $a = 'L'; } + } + $this->flowingBlockAttr[ 'width' ] = ($w * _MPDFK); + // line height in user units + $this->flowingBlockAttr[ 'is_table' ] = $is_table; + $this->flowingBlockAttr[ 'is_list' ] = $is_list; + $this->flowingBlockAttr[ 'height' ] = $h; + $this->flowingBlockAttr[ 'lineCount' ] = 0; + $this->flowingBlockAttr[ 'align' ] = $a; + $this->flowingBlockAttr[ 'font' ] = array(); + $this->flowingBlockAttr[ 'content' ] = array(); + $this->flowingBlockAttr[ 'contentB' ] = array(); + $this->flowingBlockAttr[ 'contentWidth' ] = 0; + $this->flowingBlockAttr[ 'blockstate' ] = $blockstate; + + $this->flowingBlockAttr[ 'newblock' ] = $newblock; + $this->flowingBlockAttr[ 'valign' ] = 'M'; + $this->flowingBlockAttr['blockdir'] = $blockdir; + +} + +function finishFlowingBlock($endofblock=false, $next='') { + $currentx = $this->x; + //prints out the last chunk + $is_table = $this->flowingBlockAttr[ 'is_table' ]; + $is_list = $this->flowingBlockAttr[ 'is_list' ]; + $maxWidth =& $this->flowingBlockAttr[ 'width' ]; + $lineHeight =& $this->flowingBlockAttr[ 'height' ]; + $align =& $this->flowingBlockAttr[ 'align' ]; + $content =& $this->flowingBlockAttr[ 'content' ]; + $contentB =& $this->flowingBlockAttr[ 'contentB' ]; + $font =& $this->flowingBlockAttr[ 'font' ]; + $contentWidth =& $this->flowingBlockAttr[ 'contentWidth' ]; + $lineCount =& $this->flowingBlockAttr[ 'lineCount' ]; + $valign =& $this->flowingBlockAttr[ 'valign' ]; + $blockstate = $this->flowingBlockAttr[ 'blockstate' ]; + + $newblock = $this->flowingBlockAttr[ 'newblock' ]; + $blockdir = $this->flowingBlockAttr['blockdir']; + + + // *********** BLOCK BACKGROUND COLOR *****************// + if ($this->blk[$this->blklvl]['bgcolor'] && !$is_table) { + $fill = 0; + } + else { + $this->SetFColor($this->ConvertColor(255)); + $fill = 0; + } + + $hanger = ''; // mPDF 5.6.40 + + // Always right trim! + // Right trim content and adjust width if need to justify (later) + if (isset($content[count($content)-1]) && preg_match('/[ ]+$/',$content[count($content)-1], $m)) { + $strip = strlen($m[0]); + $content[count($content)-1] = substr($content[count($content)-1],0,(strlen($content[count($content)-1])-$strip)); + $this->restoreFont( $font[ count($content)-1 ],false ); + $contentWidth -= $this->GetStringWidth($m[0]) * _MPDFK; + } + + // the amount of space taken up so far in user units + $usedWidth = 0; + + // COLS + $oldcolumn = $this->CurrCol; + + if ($this->ColActive && !$is_table) { $this->breakpoints[$this->CurrCol][] = $this->y; } // *COLUMNS* + + // Print out each chunk + +/*-- TABLES --*/ + if ($is_table) { + $ipaddingL = 0; + $ipaddingR = 0; + $paddingL = 0; + $paddingR = 0; + } + else { +/*-- END TABLES --*/ + $ipaddingL = $this->blk[$this->blklvl]['padding_left']; + $ipaddingR = $this->blk[$this->blklvl]['padding_right']; + $paddingL = ($ipaddingL * _MPDFK); + $paddingR = ($ipaddingR * _MPDFK); + $this->cMarginL = $this->blk[$this->blklvl]['border_left']['w']; + $this->cMarginR = $this->blk[$this->blklvl]['border_right']['w']; + + // Added mPDF 3.0 Float DIV + $fpaddingR = 0; + $fpaddingL = 0; +/*-- CSS-FLOAT --*/ + if (count($this->floatDivs)) { + list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->GetFloatDivInfo($this->blklvl); + if ($r_exists) { $fpaddingR = $r_width; } + if ($l_exists) { $fpaddingL = $l_width; } + } +/*-- END CSS-FLOAT --*/ + + $usey = $this->y + 0.002; + if (($newblock) && ($blockstate==1 || $blockstate==3) && ($lineCount == 0) ) { + $usey += $this->blk[$this->blklvl]['margin_top'] + $this->blk[$this->blklvl]['padding_top'] + $this->blk[$this->blklvl]['border_top']['w']; + } +/*-- CSS-IMAGE-FLOAT --*/ + // If float exists at this level + if (isset($this->floatmargins['R']) && $usey <= $this->floatmargins['R']['y1'] && $usey >= $this->floatmargins['R']['y0'] && !$this->floatmargins['R']['skipline']) { $fpaddingR += $this->floatmargins['R']['w']; } + if (isset($this->floatmargins['L']) && $usey <= $this->floatmargins['L']['y1'] && $usey >= $this->floatmargins['L']['y0'] && !$this->floatmargins['L']['skipline']) { $fpaddingL += $this->floatmargins['L']['w']; } +/*-- END CSS-IMAGE-FLOAT --*/ + } // *TABLES* + + // Set Current lineheight (correction factor) + $lhfixed = false; +/*-- LISTS --*/ + if ($is_list) { + if (preg_match('/([0-9.,]+)mm/',$this->list_lineheight[$this->listlvl][$this->listOcc],$am)) { + $lhfixed = true; + $def_fontsize = $this->InlineProperties['LISTITEM'][$this->listlvl][$this->listOcc][$this->listnum]['size']; + $this->lineheight_correction = $am[1] / $def_fontsize ; + } + else { + $this->lineheight_correction = $this->list_lineheight[$this->listlvl][$this->listOcc]; + } + } + else +/*-- END LISTS --*/ +/*-- TABLES --*/ + if ($is_table) { + if (preg_match('/([0-9.,]+)mm/',$this->table_lineheight,$am)) { + $lhfixed = true; + $def_fontsize = $this->FontSize; // needs to be default font-size for block **** + $this->lineheight_correction = $lineHeight / $def_fontsize ; + } + else { + $this->lineheight_correction = $this->table_lineheight; + } + } + else +/*-- END TABLES --*/ + if (isset($this->blk[$this->blklvl]['line_height']) && $this->blk[$this->blklvl]['line_height']) { + if (preg_match('/([0-9.,]+)mm/',$this->blk[$this->blklvl]['line_height'],$am)) { + $lhfixed = true; + $def_fontsize = $this->blk[$this->blklvl]['InlineProperties']['size']; // needs to be default font-size for block **** + $this->lineheight_correction = $am[1] / $def_fontsize ; + } + else { + $this->lineheight_correction = $this->blk[$this->blklvl]['line_height']; + } + } + else { + $this->lineheight_correction = $this->normalLineheight; + } + + // correct lineheight to maximum fontsize + if ($lhfixed) { $maxlineHeight = $this->lineheight; } + else { $maxlineHeight = 0; } + $this->forceExactLineheight = true; + $maxfontsize = 0; + // While we're at it, check if contains cursive text + $checkCursive=false; + if ($this->biDirectional) { $checkCursive=true; } // *RTL* + foreach ( $content as $k => $chunk ) + { + $this->restoreFont( $font[ $k ],false ); + if (!isset($this->objectbuffer[$k])) { + // Soft Hyphens chr(173) + if (!$this->usingCoreFont) { + $content[$k] = $chunk = str_replace("\xc2\xad",'',$chunk ); + if (isset($this->CurrentFont['indic']) && $this->CurrentFont['indic']) { $checkCursive=true; } // *INDIC* + } + else if ($this->FontFamily!='csymbol' && $this->FontFamily!='czapfdingbats') { + $content[$k] = $chunk = str_replace(chr(173),'',$chunk ); + } + // Special case of sub/sup carried over on its own to last line + if (($this->SUB || $this->SUP) && count($content)==1) { $actfs = $this->FontSize*100/55; } // 55% is font change for sub/sup + else { $actfs = $this->FontSize; } + if (!$lhfixed) { $maxlineHeight = max($maxlineHeight,$actfs * $this->lineheight_correction ); } + if ($lhfixed && ($actfs > $def_fontsize || ($actfs > ($lineHeight * $this->lineheight_correction) && $is_list))) { + $this->forceExactLineheight = false; + } + $maxfontsize = max($maxfontsize,$actfs); + } + } + + if(isset($font[count($font)-1])) { + $lastfontreqstyle = $font[count($font)-1]['ReqFontStyle']; + $lastfontstyle = $font[count($font)-1]['style']; + } + else { + $lastfontreqstyle=null; + $lastfontstyle=null; + } + if ($blockdir == 'ltr' && strpos($lastfontreqstyle,"I") !== false && strpos($lastfontstyle,"I") === false) { // Artificial italic + $lastitalic = $this->FontSize*0.15*_MPDFK; + } + else { $lastitalic = 0; } + + +/*-- LISTS --*/ + if ($is_list && is_array($this->bulletarray) && count($this->bulletarray)) { + $actfs = $this->bulletarray['fontsize']; + if (!$lhfixed) { $maxlineHeight = max($maxlineHeight,$actfs * $this->lineheight_correction ); } + if ($lhfixed && $actfs > $def_fontsize) { $this->forceExactLineheight = false; } + $maxfontsize = max($maxfontsize,$actfs); + } +/*-- END LISTS --*/ + + // when every text item checked i.e. $maxfontsize is set properly + + $af = 0; // Above font + $bf = 0; // Below font + $mta = 0; // Maximum top-aligned + $mba = 0; // Maximum bottom-aligned + + foreach ( $content as $k => $chunk ) + { + if (isset($this->objectbuffer[$k])) { + $oh = $this->objectbuffer[$k]['OUTER-HEIGHT']; + $va = $this->objectbuffer[$k]['vertical-align']; // = $objattr['vertical-align'] = set as M,T,B,S + if ($lhfixed && $oh > $def_fontsize) { $this->forceExactLineheight = false; } + + if ($va == 'BS') { // (BASELINE default) + $af = max($af, ($oh - ($maxfontsize * (0.5 + $this->baselineC)))); + } + else if ($va == 'M') { + $af = max($af, ($oh - $maxfontsize)/2); + $bf = max($bf, ($oh - $maxfontsize)/2); + } + else if ($va == 'TT') { + $bf = max($bf, ($oh - $maxfontsize)); + } + else if ($va == 'TB') { + $af = max($af, ($oh - $maxfontsize)); + } + else if ($va == 'T') { + $mta = max($mta, $oh); + } + else if ($va == 'B') { + $mba = max($mba, $oh); + } + } + } + if ((!$lhfixed || !$this->forceExactLineheight) && ($af > (($maxlineHeight - $maxfontsize)/2) || $bf > (($maxlineHeight - $maxfontsize)/2))) { + $maxlineHeight = $maxfontsize + $af + $bf; + } + else if (!$lhfixed) { $af = $bf = ($maxlineHeight - $maxfontsize)/2; } + if ($mta > $maxlineHeight) { + $bf += ($mta - $maxlineHeight); + $maxlineHeight = $mta; + } + if ($mba > $maxlineHeight) { + $af += ($mba - $maxlineHeight); + $maxlineHeight = $mba; + } + + $lineHeight = $maxlineHeight; + // If NOT images, and maxfontsize NOT > lineHeight - this value determines text baseline positioning + if ($lhfixed && $af==0 && $bf==0 && $maxfontsize<=($def_fontsize * $this->lineheight_correction * 0.8 )) { + $this->linemaxfontsize = $def_fontsize; + } + else { $this->linemaxfontsize = $maxfontsize; } + + // Get PAGEBREAK TO TEST for height including the bottom border/padding + $check_h = max($this->divheight,$lineHeight); + + // This fixes a proven bug... + if ($endofblock && $newblock && $blockstate==0 && !$content) { $check_h = 0; } + // but ? needs to fix potentially more widespread... + // if (!$content) { $check_h = 0; } + + if ($this->blklvl > 0 && !$is_table) { + if ($endofblock && $blockstate > 1) { + if ($this->blk[$this->blklvl]['page_break_after_avoid']) { $check_h += $lineHeight; } + $check_h += ($this->blk[$this->blklvl]['padding_bottom'] + $this->blk[$this->blklvl]['border_bottom']['w']); + } + // mPDF 5.4.03 + if (($newblock && ($blockstate==1 || $blockstate==3) && $lineCount == 0) || ($endofblock && $blockstate ==3 && $lineCount == 0)) { + $check_h += ($this->blk[$this->blklvl]['padding_top'] + $this->blk[$this->blklvl]['margin_top'] + $this->blk[$this->blklvl]['border_top']['w']); + } + } + + // Force PAGE break if column height cannot take check-height + if ($this->ColActive && $check_h > ($this->PageBreakTrigger - $this->y0)) { + $this->SetCol($this->NbCol-1); + } + + // mPDF 5.4.04 + // Avoid just border/background-color moved on to next page + if ($endofblock && $blockstate > 1 && !$content) { $buff = $this->margBuffer; } + else { $buff = 0; } + + + // PAGEBREAK + // mPDF 5.4.04 + if(!$is_table && ($this->y+$check_h) > ($this->PageBreakTrigger + $buff) and !$this->InFooter and $this->AcceptPageBreak()) { + $bak_x=$this->x;//Current X position + // WORD SPACING + $ws=$this->ws;//Word Spacing + $charspacing=$this->charspacing;//Character Spacing + $this->ResetSpacing(); + + $this->AddPage($this->CurOrientation); + + $this->x=$bak_x; + // Added to correct for OddEven Margins + $currentx += $this->MarginCorrection; + $this->x += $this->MarginCorrection; + + // WORD SPACING + $this->SetSpacing($charspacing,$ws); + } + + if ($this->keep_block_together && !$is_table && $this->kt_p00 < $this->page && ($this->y+$check_h) > $this->kt_y00) { + $this->printdivbuffer(); + $this->keep_block_together = 0; + } + +/*-- COLUMNS --*/ + // COLS + // COLUMN CHANGE + if ($this->CurrCol != $oldcolumn) { + $currentx += $this->ChangeColumn * ($this->ColWidth+$this->ColGap); + $this->x += $this->ChangeColumn * ($this->ColWidth+$this->ColGap); + $oldcolumn = $this->CurrCol; + } + + + if ($this->ColActive && !$is_table) { $this->breakpoints[$this->CurrCol][] = $this->y; } +/*-- END COLUMNS --*/ + + // TOP MARGIN + if ($newblock && ($blockstate==1 || $blockstate==3) && ($this->blk[$this->blklvl]['margin_top']) && $lineCount == 0 && !$is_table && !$is_list) { + $this->DivLn($this->blk[$this->blklvl]['margin_top'],$this->blklvl-1,true,$this->blk[$this->blklvl]['margin_collapse']); + if ($this->ColActive) { $this->breakpoints[$this->CurrCol][] = $this->y; } // *COLUMNS* + } + + if ($newblock && ($blockstate==1 || $blockstate==3) && $lineCount == 0 && !$is_table && !$is_list) { + $this->blk[$this->blklvl]['y0'] = $this->y; + $this->blk[$this->blklvl]['startpage'] = $this->page; + if ($this->blk[$this->blklvl]['float']) { $this->blk[$this->blklvl]['float_start_y'] = $this->y; } // mPDF 5.6.63 + if ($this->ColActive) { $this->breakpoints[$this->CurrCol][] = $this->y; } // *COLUMNS* + } + + // ADDED for Paragraph_indent + $WidthCorrection = 0; + if (($newblock) && ($blockstate==1 || $blockstate==3) && isset($this->blk[$this->blklvl]['text_indent']) && ($lineCount == 0) && (!$is_table) && (!$is_list) && ($align != 'C')) { + $ti = $this->ConvertSize($this->blk[$this->blklvl]['text_indent'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + $WidthCorrection = ($ti*_MPDFK); + } + + + // PADDING and BORDER spacing/fill + if (($newblock) && ($blockstate==1 || $blockstate==3) && (($this->blk[$this->blklvl]['padding_top']) || ($this->blk[$this->blklvl]['border_top'])) && ($lineCount == 0) && (!$is_table) && (!$is_list)) { + // $state = 0 normal; 1 top; 2 bottom; 3 top and bottom + $this->DivLn($this->blk[$this->blklvl]['padding_top'] + $this->blk[$this->blklvl]['border_top']['w'],-3,true,false,1); + if ($this->ColActive) { $this->breakpoints[$this->CurrCol][] = $this->y; } // *COLUMNS* + $this->x = $currentx; + } + + + // Added mPDF 3.0 Float DIV + $fpaddingR = 0; + $fpaddingL = 0; +/*-- CSS-FLOAT --*/ + if (count($this->floatDivs)) { + list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->GetFloatDivInfo($this->blklvl); + if ($r_exists) { $fpaddingR = $r_width; } + if ($l_exists) { $fpaddingL = $l_width; } + } +/*-- END CSS-FLOAT --*/ + + $usey = $this->y + 0.002; + if (($newblock) && ($blockstate==1 || $blockstate==3) && ($lineCount == 0) ) { + $usey += $this->blk[$this->blklvl]['margin_top'] + $this->blk[$this->blklvl]['padding_top'] + $this->blk[$this->blklvl]['border_top']['w']; + } +/*-- CSS-IMAGE-FLOAT --*/ + // If float exists at this level + if (isset($this->floatmargins['R']) && $usey <= $this->floatmargins['R']['y1'] && $usey >= $this->floatmargins['R']['y0'] && !$this->floatmargins['R']['skipline']) { $fpaddingR += $this->floatmargins['R']['w']; } + if (isset($this->floatmargins['L']) && $usey <= $this->floatmargins['L']['y1'] && $usey >= $this->floatmargins['L']['y0'] && !$this->floatmargins['L']['skipline']) { $fpaddingL += $this->floatmargins['L']['w']; } +/*-- END CSS-IMAGE-FLOAT --*/ + + if ($content) { + + // In FinishFlowing Block no lines are justified as it is always last line + // but if CJKorphan has allowed content width to go over max width, use J charspacing to compress line + // JUSTIFICATION J - NOT! + $nb_carac = 0; + $nb_spaces = 0; + $jcharspacing = 0; + $jws = 0; + $inclCursive=false; + $dottab = false; // mPDF 5.6.19 + foreach ( $content as $k => $chunk ) { + if (!isset($this->objectbuffer[$k]) || (isset($this->objectbuffer[$k]) && !$this->objectbuffer[$k])) { + if ($this->usingCoreFont) { + $chunk = str_replace(chr(160),chr(32),$chunk ); + } + else { + $chunk = str_replace(chr(194).chr(160),chr(32),$chunk ); + } + $nb_carac += mb_strlen( $chunk, $this->mb_enc ); + $nb_spaces += mb_substr_count( $chunk,' ', $this->mb_enc ); + if ($checkCursive) { + if (preg_match("/([".$this->pregRTLchars."])/u", $chunk)) { $inclCursive = true; } // *RTL* + if (preg_match("/([".$this->pregHIchars.$this->pregBNchars.$this->pregPAchars."])/u", $chunk)) { $inclCursive = true; } // *INDIC* + } + } + else if ($this->objectbuffer[$k]['type']=='dottab') { $dottab = $this->objectbuffer[$k]['outdent']; } // mPDF 5.6.19 + } + // if it's justified, we need to find the char/word spacing (or if orphans have allowed length of line to go over the maxwidth) + // If "orphans" in fact is just a final space - ignore this + // mPDF 5.6.40 + $lastchar = mb_substr($content[(count($content)-1)],mb_strlen($content[(count($content)-1)], $this->mb_enc)-1, 1, $this->mb_enc); + if (preg_match("/[".$this->CJKoverflow."]/u", $lastchar)) { $CJKoverflow = true; } + else {$CJKoverflow = false; } + if ((((($contentWidth + $lastitalic) > $maxWidth) && ($content[count($content)-1] != ' ') ) || + (!$endofblock && $align=='J' && ($next=='image' || $next=='select' || $next=='input' || $next=='textarea' || ($next=='br' && $this->justifyB4br)))) && !($CJKoverflow && $this->allowCJKoverflow) ) { // mPDF 5.6.40 + // WORD SPACING + list($jcharspacing,$jws) = $this->GetJspacing($nb_carac,$nb_spaces,($maxWidth-$lastitalic-$contentWidth-$WidthCorrection-(($this->cMarginL+$this->cMarginR)*_MPDFK)-($paddingL+$paddingR +(($fpaddingL + $fpaddingR) * _MPDFK) )),$inclCursive); + } +/*-- CJK-FONTS --*/ + // mPDF 5.6.40 + else if ($this->checkCJK && $align=='J' && $CJKoverflow && $this->allowCJKoverflow && $this->CJKforceend) { + // force-end overhang + $hanger = mb_substr($content[count($content)-1],mb_strlen($content[count($content)-1],$this->mb_enc)-1,1,$this->mb_enc ); + if (preg_match("/[".$this->CJKoverflow."]/u", $hanger)) { + $content[count($content)-1] = mb_substr($content[count($content)-1],0,mb_strlen($content[count($content)-1],$this->mb_enc)-1,$this->mb_enc ); + $this->restoreFont( $font[ count($content)-1 ],false ); + $contentWidth -= $this->GetStringWidth($hanger) * _MPDFK; + $nb_carac -= 1; + list($jcharspacing,$jws) = $this->GetJspacing($nb_carac,$nb_spaces,($maxWidth-$lastitalic-$contentWidth-$WidthCorrection-(($this->cMarginL+$this->cMarginR)*_MPDFK)-($paddingL+$paddingR +(($fpaddingL + $fpaddingR) * _MPDFK) )),$inclCursive); + } + } +/*-- END CJK-FONTS --*/ + + // Check if will fit at word/char spacing of previous line - if so continue it + // but only allow a maximum of $this->jSmaxWordLast and $this->jSmaxCharLast + else if ($contentWidth < ($maxWidth - $lastitalic-$WidthCorrection - (($this->cMarginL+$this->cMarginR)* _MPDFK) - ($paddingL+$paddingR +(($fpaddingL + $fpaddingR) * _MPDFK))) && !$this->fixedlSpacing) { + if ($this->ws > $this->jSmaxWordLast) { + $jws = $this->jSmaxWordLast; + } + if ($this->charspacing > $this->jSmaxCharLast) { + $jcharspacing = $this->jSmaxCharLast; + } + $check = $maxWidth - $lastitalic-$WidthCorrection - $contentWidth - (($this->cMarginL+$this->cMarginR)* _MPDFK) - ($paddingL+$paddingR +(($fpaddingL + $fpaddingR) * _MPDFK) ) - ( $jcharspacing * $nb_carac) - ( $jws * $nb_spaces); + if ($check <= 0) { + $jcharspacing = 0; + $jws = 0; + } + } + + $empty = $maxWidth - $lastitalic-$WidthCorrection - $contentWidth - (($this->cMarginL+$this->cMarginR)* _MPDFK) - ($paddingL+$paddingR +(($fpaddingL + $fpaddingR) * _MPDFK) ); + + $empty -= ($jcharspacing * $nb_carac); + $empty -= ($jws * $nb_spaces); + + $empty /= _MPDFK; + + if (!$is_table) { + $this->maxPosR = max($this->maxPosR , ($this->w - $this->rMargin - $this->blk[$this->blklvl]['outer_right_margin'] - $empty)); + $this->maxPosL = min($this->maxPosL , ($this->lMargin + $this->blk[$this->blklvl]['outer_left_margin'] + $empty)); + } + + $arraysize = count($content); + + $margins = ($this->cMarginL+$this->cMarginR) + ($ipaddingL+$ipaddingR + $fpaddingR + $fpaddingR ); + + if (!$is_table) { $this->DivLn($lineHeight,$this->blklvl,false); } // false -> don't advance y + + // DIRECTIONALITY RTL + $all_rtl = false; + $contains_rtl = false; +/*-- RTL --*/ + if ($blockdir == 'rtl' || $this->biDirectional) { + $all_rtl = true; + foreach ( $content as $k => $chunk ) { + $reversed = $this->magic_reverse_dir($chunk, false, $blockdir); + if ($reversed > 0) { $contains_rtl = true; } + if ($reversed < 2) { $all_rtl = false; } + $content[$k] = $chunk; + } + if (($blockdir =='rtl' && $contains_rtl) || $all_rtl) { + $content = array_reverse($content,false); + $contentB = array_reverse($contentB,false); + } + } +/*-- END RTL --*/ + + $this->x = $currentx + $this->cMarginL + $ipaddingL + $fpaddingL; + if ($dottab !== false && $blockdir=='rtl') { $this->x -= $dottab; } // mPDF 5.6.19 + else if ($align == 'R') { $this->x += $empty; } + else if ($align == 'J' && $blockdir == 'rtl') { $this->x += $empty; } + else if ($align == 'C') { $this->x += ($empty / 2); } + + // Paragraph INDENT + $WidthCorrection = 0; + if (($newblock) && ($blockstate==1 || $blockstate==3) && isset($this->blk[$this->blklvl]['text_indent']) && ($lineCount == 0) && (!$is_table) && (!$is_list) && ($align !='C')) { + $ti = $this->ConvertSize($this->blk[$this->blklvl]['text_indent'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + $this->x += $ti; + } + + + foreach ( $content as $k => $chunk ) + { + + // FOR IMAGES + if ((($blockdir == 'rtl') && ($contains_rtl )) || $all_rtl ) { $dirk = $arraysize-1 - $k; } else { $dirk = $k; } + + $va = 'M'; // default for text + if (isset($this->objectbuffer[$dirk]) && $this->objectbuffer[$dirk]) { + $xadj = $this->x - $this->objectbuffer[$dirk]['OUTER-X']; + $this->objectbuffer[$dirk]['OUTER-X'] += $xadj; + $this->objectbuffer[$dirk]['BORDER-X'] += $xadj; + $this->objectbuffer[$dirk]['INNER-X'] += $xadj; + $va = $this->objectbuffer[$dirk]['vertical-align']; + $yadj = $this->y - $this->objectbuffer[$dirk]['OUTER-Y']; + if ($va == 'BS') { + $yadj += $af + ($this->linemaxfontsize * (0.5 + $this->baselineC)) - $this->objectbuffer[$dirk]['OUTER-HEIGHT']; + } + else if ($va == 'M' || $va == '') { + $yadj += $af + ($this->linemaxfontsize /2) - ($this->objectbuffer[$dirk]['OUTER-HEIGHT']/2); + } + else if ($va == 'TB') { + $yadj += $af + $this->linemaxfontsize - $this->objectbuffer[$dirk]['OUTER-HEIGHT']; + } + else if ($va == 'TT') { + $yadj += $af; + } + else if ($va == 'B') { + $yadj += $af + $this->linemaxfontsize + $bf - $this->objectbuffer[$dirk]['OUTER-HEIGHT']; + } + else if ($va == 'T') { + $yadj += 0; + } + $this->objectbuffer[$dirk]['OUTER-Y'] += $yadj; + $this->objectbuffer[$dirk]['BORDER-Y'] += $yadj; + $this->objectbuffer[$dirk]['INNER-Y'] += $yadj; + } + + + // DIRECTIONALITY RTL + if ((($blockdir == 'rtl') && ($contains_rtl )) || $all_rtl ) { $this->restoreFont( $font[ $arraysize-1 - $k ] ); } + else { $this->restoreFont( $font[ $k ] ); } + + // mPDF 5.6.13 Decimal alignment - set in _tableWrite + if ($is_table && substr($align,0,1)=='D' && $k==0 ) { + $dp = $this->decimal_align[substr($align,0,2)]; + $s = preg_split('/'.preg_quote($dp,'/').'/', $content[0], 2); // ? needs to be /u if not core + $s0 = $this->GetStringWidth($s[0], false); + $this->x += ($this->decimal_offset - $s0); + } + + $this->SetSpacing(($this->fixedlSpacing*_MPDFK)+$jcharspacing,($this->fixedlSpacing+$this->minwSpacing)*_MPDFK+$jws); + $this->fixedlSpacing = false; + $this->minwSpacing = 0; + + // mPDF 5.6.26 + $save_vis = $this->visibility; + if (isset($this->textparam['visibility']) && $this->textparam['visibility'] && $this->textparam['visibility'] != $this->visibility) { + $this->SetVisibility($this->textparam['visibility']); + } + + // *********** SPAN BACKGROUND COLOR ***************** // + if (isset($this->spanbgcolor) && $this->spanbgcolor) { + $cor = $this->spanbgcolorarray; + $this->SetFColor($cor); + $save_fill = $fill; $spanfill = 1; $fill = 1; + } + if (!empty($this->spanborddet)) { + if (strpos($contentB[$k],'L')!==false && isset($this->spanborddet['L'])) $this->x += $this->spanborddet['L']['w']; + if (strpos($contentB[$k],'L')===false) $this->spanborddet['L']['s'] = $this->spanborddet['L']['w'] = 0; + if (strpos($contentB[$k],'R')===false) $this->spanborddet['R']['s'] = $this->spanborddet['R']['w'] = 0; + } + // WORD SPACING + $stringWidth = $this->GetStringWidth($chunk ) + ( $this->charspacing * mb_strlen($chunk,$this->mb_enc ) / _MPDFK ) + + ( $this->ws * mb_substr_count($chunk,' ',$this->mb_enc ) / _MPDFK ); + if (isset($this->objectbuffer[$dirk])) { + if ($this->objectbuffer[$dirk]['type']=='dottab') { + $this->objectbuffer[$dirk]['OUTER-WIDTH'] +=$empty; + $this->objectbuffer[$dirk]['OUTER-WIDTH'] +=$this->objectbuffer[$dirk]['outdent']; // mPDF 5.6.19 + } + $stringWidth = $this->objectbuffer[$dirk]['OUTER-WIDTH']; + } + + if ($stringWidth==0) { $stringWidth = 0.000001; } + if ($k == $arraysize-1) { + // mPDF 5.6.40 + if ($this->checkCJK && $CJKoverflow && $align=='J' && $this->allowCJKoverflow && $hanger && $this->CJKforceend) { + // force-end overhang + $this->Cell( $stringWidth, $lineHeight, $chunk, '', 0, '', $fill, $this->HREF, $currentx,0,0,'M', $fill, $af, $bf, true ); + $this->Cell( $this->GetStringWidth($hanger), $lineHeight, $hanger, '', 1, '', $fill, $this->HREF, $currentx,0,0,'M', $fill, $af, $bf, true ); + } + else { + $this->Cell( $stringWidth, $lineHeight, $chunk, '', 1, '', $fill, $this->HREF, $currentx,0,0,'M', $fill, $af, $bf, true ); + } + } + else $this->Cell( $stringWidth, $lineHeight, $chunk, '', 0, '', $fill, $this->HREF, 0, 0,0,'M', $fill, $af, $bf, true );//first or middle part + + + if (!empty($this->spanborddet)) { + if (strpos($contentB[$k],'R')!==false && $k != $arraysize-1) $this->x += $this->spanborddet['R']['w']; + } + // *********** SPAN BACKGROUND COLOR OFF - RESET BLOCK BGCOLOR ***************** // + if (isset($spanfill) && $spanfill) { + $fill = $save_fill; $spanfill = 0; + if ($fill) { $this->SetFColor($bcor); } + } + // mPDF 5.6.26 + if (isset($this->textparam['visibility']) && $this->textparam['visibility'] && $this->visibility != $save_vis) { + $this->SetVisibility($save_vis); + } + + } + + $this->printobjectbuffer($is_table, $blockdir); + + $this->objectbuffer = array(); + + $this->ResetSpacing(); + +/*-- LISTS --*/ + // LIST BULLETS/NUMBERS + if ($is_list && is_array($this->bulletarray) && ($lineCount == 0) ) { + + $savedFont = $this->saveFont(); + + $bull = $this->bulletarray; + if (isset($bull['level']) && isset($bull['occur']) && isset($this->InlineProperties['LIST'][$bull['level']][$bull['occur']])) { + $this->restoreInlineProperties($this->InlineProperties['LIST'][$bull['level']][$bull['occur']]); + } + if (isset($bull['level']) && isset($bull['occur']) && isset($bull['num']) && isset($this->InlineProperties['LISTITEM'][$bull['level']][$bull['occur']][$bull['num']]) && $this->InlineProperties['LISTITEM'][$bull['level']][$bull['occur']][$bull['num']]) { $this->restoreInlineProperties($this->InlineProperties['LISTITEM'][$bull['level']][$bull['occur']][$bull['num']]); } + if (isset($bull['font']) && $bull['font'] == 'czapfdingbats') { + $this->bullet = true; + $this->SetFont('czapfdingbats','',$this->FontSizePt/2.5); + } + else { $this->SetFont($this->FontFamily,$this->FontStyle,$this->FontSizePt,true,true); } // force output + //Output bullet + $this->x = $currentx; + if (isset($bull['x'])) { $this->x += $bull['x']; } + $this->y -= $lineHeight; + if (isset($bull['col']) && $bull['col']) { $this->SetTColor($bull['col']); } // mPDF 5.6.67 + + if (isset($bull['txt'])) { $this->Cell($bull['w'], $lineHeight,$bull['txt'],'','',$bull['align'],0,'',0,-$this->cMarginL, -$this->cMarginR ); } + if (isset($bull['font']) && $bull['font'] == 'czapfdingbats') { + $this->bullet = false; + } + $this->x = $currentx; // Reset + $this->y += $lineHeight; + + if ($this->ColActive && !$is_table) { $this->breakpoints[$this->CurrCol][] = $this->y; } // *COLUMNS* + + $this->restoreFont( $savedFont ); + // $font = array( $savedFont ); + + $this->bulletarray = array(); // prevents repeat of bullet/number if <li>....<br />.....</li> + } +/*-- END LISTS --*/ + + + } // END IF CONTENT + +/*-- CSS-IMAGE-FLOAT --*/ + // Update values if set to skipline + if ($this->floatmargins) { $this->_advanceFloatMargins(); } + + + if ($endofblock && $blockstate>1) { + // If float exists at this level + if (isset($this->floatmargins['R']['y1'])) { $fry1 = $this->floatmargins['R']['y1']; } + else { $fry1 = 0; } + if (isset($this->floatmargins['L']['y1'])) { $fly1 = $this->floatmargins['L']['y1']; } + else { $fly1 = 0; } + if ($this->y < $fry1 || $this->y < $fly1) { + $drop = max($fry1,$fly1) - $this->y; + $this->DivLn($drop); + $this->x = $currentx; + } + } +/*-- END CSS-IMAGE-FLOAT --*/ + + + // PADDING and BORDER spacing/fill + if ($endofblock && ($blockstate > 1) && ($this->blk[$this->blklvl]['padding_bottom'] || $this->blk[$this->blklvl]['border_bottom'] || $this->blk[$this->blklvl]['css_set_height']) && (!$is_table) && (!$is_list)) { + // If CSS height set, extend bottom - if on same page as block started, and CSS HEIGHT > actual height, + // and does not force pagebreak + $extra = 0; + if ($this->blk[$this->blklvl]['css_set_height'] && $this->blk[$this->blklvl]['startpage']==$this->page) { + // predicted height + $h1 = ($this->y-$this->blk[$this->blklvl]['y0']) + $this->blk[$this->blklvl]['padding_bottom'] + $this->blk[$this->blklvl]['border_bottom']['w']; + if ($h1 < ($this->blk[$this->blklvl]['css_set_height']+$this->blk[$this->blklvl]['padding_bottom']+$this->blk[$this->blklvl]['padding_top'])) { $extra = ($this->blk[$this->blklvl]['css_set_height']+$this->blk[$this->blklvl]['padding_bottom']+$this->blk[$this->blklvl]['padding_top']) - $h1; } + if($this->y + $this->blk[$this->blklvl]['padding_bottom'] + $this->blk[$this->blklvl]['border_bottom']['w'] + $extra > $this->PageBreakTrigger) { + $extra = $this->PageBreakTrigger - ($this->y + $this->blk[$this->blklvl]['padding_bottom'] + $this->blk[$this->blklvl]['border_bottom']['w']); + } + } + + // $state = 0 normal; 1 top; 2 bottom; 3 top and bottom + $this->DivLn($this->blk[$this->blklvl]['padding_bottom'] + $this->blk[$this->blklvl]['border_bottom']['w'] + $extra,-3,true,false,2); + $this->x = $currentx; + + if ($this->ColActive) { $this->breakpoints[$this->CurrCol][] = $this->y; } // *COLUMNS* + + } + + // SET Bottom y1 of block (used for painting borders) + if (($endofblock) && ($blockstate > 1) && (!$is_table) && (!$is_list)) { + $this->blk[$this->blklvl]['y1'] = $this->y; + } + + // BOTTOM MARGIN + if (($endofblock) && ($blockstate > 1) && ($this->blk[$this->blklvl]['margin_bottom']) && (!$is_table) && (!$is_list)) { + if($this->y+$this->blk[$this->blklvl]['margin_bottom'] < $this->PageBreakTrigger and !$this->InFooter) { + $this->DivLn($this->blk[$this->blklvl]['margin_bottom'],$this->blklvl-1,true,$this->blk[$this->blklvl]['margin_collapse']); + if ($this->ColActive) { $this->breakpoints[$this->CurrCol][] = $this->y; } // *COLUMNS* + } + } + + // Reset lineheight + $lineHeight = $this->divheight; +} + + + + + +function printobjectbuffer($is_table=false, $blockdir=false) { + if (!$blockdir) { $blockdir = $this->directionality; } + if ($is_table && $this->shrin_k > 1) { $k = $this->shrin_k; } + else { $k = 1; } + $save_y = $this->y; + $save_x = $this->x; + $save_currentfontfamily = $this->FontFamily; + $save_currentfontsize = $this->FontSizePt; + $save_currentfontstyle = $this->FontStyle.($this->U ? 'U' : '').($this->S ? 'S' : ''); + if ($blockdir == 'rtl') { $rtlalign = 'R'; } else { $rtlalign = 'L'; } + foreach ($this->objectbuffer AS $ib => $objattr) { + if ($objattr['type'] == 'bookmark' || $objattr['type'] == 'indexentry' || $objattr['type'] == 'toc') { + $x = $objattr['OUTER-X']; + $y = $objattr['OUTER-Y']; + $this->y = $y - $this->FontSize/2; + $this->x = $x; + if ($objattr['type'] == 'bookmark' ) { $this->Bookmark($objattr['CONTENT'],$objattr['bklevel'] ,$y - $this->FontSize); } // *BOOKMARKS* + if ($objattr['type'] == 'indexentry') { $this->IndexEntry($objattr['CONTENT']); } // *INDEX* + if ($objattr['type'] == 'toc') { $this->TOC_Entry($objattr['CONTENT'], $objattr['toclevel'], $objattr['toc_id']); } // *TOC* + } +/*-- ANNOTATIONS --*/ + else if ($objattr['type'] == 'annot') { + if ($objattr['POS-X']) { $x = $objattr['POS-X']; } + else if ($this->annotMargin<>0) { $x = -$objattr['OUTER-X']; } + else { $x = $objattr['OUTER-X']; } + if ($objattr['POS-Y']) { $y = $objattr['POS-Y']; } + else { $y = $objattr['OUTER-Y'] - $this->FontSize/2; } + // Create a dummy entry in the _out/columnBuffer with position sensitive data, + // linking $y-1 in the Columnbuffer with entry in $this->columnAnnots + // and when columns are split in length will not break annotation from current line + $this->y = $y-1; + $this->x = $x-1; + $this->Line($x-1,$y-1,$x-1,$y-1); + $this->Annotation($objattr['CONTENT'], $x , $y , $objattr['ICON'], $objattr['AUTHOR'], $objattr['SUBJECT'], $objattr['OPACITY'], $objattr['COLOR'], $objattr['POPUP'], $objattr['FILE']); + } +/*-- END ANNOTATIONS --*/ + else { + $y = $objattr['OUTER-Y']; + $x = $objattr['OUTER-X']; + $w = $objattr['OUTER-WIDTH']; + $h = $objattr['OUTER-HEIGHT']; + if (isset($objattr['text'])) { $texto = $objattr['text']; } + $this->y = $y; + $this->x = $x; + if (isset($objattr['fontfamily'])) { $this->SetFont($objattr['fontfamily'],'',$objattr['fontsize'] ); } + } + + // HR + if ($objattr['type'] == 'hr') { + $this->SetDColor($objattr['color']); + switch($objattr['align']) { + case 'C': + $empty = $objattr['OUTER-WIDTH'] - $objattr['INNER-WIDTH']; + $empty /= 2; + $x += $empty; + break; + case 'R': + $empty = $objattr['OUTER-WIDTH'] - $objattr['INNER-WIDTH']; + $x += $empty; + break; + } + $oldlinewidth = $this->LineWidth; + $this->SetLineWidth($objattr['linewidth']/$k ); + $this->y += ($objattr['linewidth']/2) + $objattr['margin_top']/$k; + $this->Line($x,$this->y,$x+$objattr['INNER-WIDTH'],$this->y); + $this->SetLineWidth($oldlinewidth); + $this->SetDColor($this->ConvertColor(0)); + } + // IMAGE + if ($objattr['type'] == 'image') { + // mPDF 5.6.01 - LAYERS + if (isset($objattr['z-index']) && $objattr['z-index'] > 0 && $this->currentlayer==0) { + $this->BeginLayer($objattr['z-index']); + } + if(isset($objattr['visibility']) && $objattr['visibility']!='visible' && $objattr['visibility']) { + $this->SetVisibility($objattr['visibility']); + } + if (isset($objattr['opacity'])) { $this->SetAlpha($objattr['opacity']); } + $rotate = 0; + $obiw = $objattr['INNER-WIDTH']; + $obih = $objattr['INNER-HEIGHT']; + $sx = $objattr['INNER-WIDTH']*_MPDFK / $objattr['orig_w']; + $sy = abs($objattr['INNER-HEIGHT'])*_MPDFK / abs($objattr['orig_h']); + $sx = ($objattr['INNER-WIDTH']*_MPDFK / $objattr['orig_w']); + $sy = ($objattr['INNER-HEIGHT']*_MPDFK / $objattr['orig_h']); + + if (isset($objattr['ROTATE'])) { $rotate = $objattr['ROTATE']; } + if ($rotate==90) { + // Clockwise + $obiw = $objattr['INNER-HEIGHT']; + $obih = $objattr['INNER-WIDTH']; + $tr = $this->transformTranslate(0, -$objattr['INNER-WIDTH'], true) ; + $tr .= ' '. $this->transformRotate(90, $objattr['INNER-X'],($objattr['INNER-Y'] +$objattr['INNER-WIDTH'] ),true) ; + $sx = $obiw*_MPDFK / $objattr['orig_h']; + $sy = $obih*_MPDFK / $objattr['orig_w']; + } + else if ($rotate==-90 || $rotate==270) { + // AntiClockwise + $obiw = $objattr['INNER-HEIGHT']; + $obih = $objattr['INNER-WIDTH']; + $tr = $this->transformTranslate($objattr['INNER-WIDTH'], ($objattr['INNER-HEIGHT']-$objattr['INNER-WIDTH']), true) ; + $tr .= ' '. $this->transformRotate(-90, $objattr['INNER-X'],($objattr['INNER-Y'] +$objattr['INNER-WIDTH'] ),true) ; + $sx = $obiw*_MPDFK / $objattr['orig_h']; + $sy = $obih*_MPDFK / $objattr['orig_w']; + } + else if ($rotate==180) { + // Mirror + $tr = $this->transformTranslate($objattr['INNER-WIDTH'], -$objattr['INNER-HEIGHT'], true) ; + $tr .= ' '. $this->transformRotate(180, $objattr['INNER-X'],($objattr['INNER-Y'] +$objattr['INNER-HEIGHT'] ),true) ; + } + else { $tr = ''; } + $tr = trim($tr); + if ($tr) { $tr .= ' '; } + $gradmask = ''; + + +/*-- BACKGROUNDS --*/ + if (isset($objattr['GRADIENT-MASK'])) { + $g = $this->grad->parseMozGradient( $objattr['GRADIENT-MASK'] ); + if ($g) { + $dummy = $this->grad->Gradient($objattr['INNER-X'], $objattr['INNER-Y'], $obiw, $obih, $g['type'], $g['stops'], $g['colorspace'], $g['coords'], $g['extend'], true, true); + $gradmask = '/TGS'.count($this->gradients).' gs '; + // $this->_out("q ".$tr.$this->grad->Gradient($objattr['INNER-X'], $objattr['INNER-Y'], $obiw, $obih, $g['type'], $g['stops'], $g['colorspace'], $g['coords'], $g['extend'], true)." Q"); + } + } +/*-- END BACKGROUNDS --*/ +/*-- IMAGES-WMF --*/ + if (isset($objattr['itype']) && $objattr['itype']=='wmf') { + $outstring = sprintf('q '.$tr.'%.3F 0 0 %.3F %.3F %.3F cm /FO%d Do Q', $sx, -$sy, $objattr['INNER-X']*_MPDFK-$sx*$objattr['wmf_x'], (($this->h-$objattr['INNER-Y'])*_MPDFK)+$sy*$objattr['wmf_y'], $objattr['ID']); + } + else +/*-- END IMAGES-WMF --*/ + if (isset($objattr['itype']) && $objattr['itype']=='svg') { + $outstring = sprintf('q '.$tr.'%.3F 0 0 %.3F %.3F %.3F cm /FO%d Do Q', $sx, -$sy, $objattr['INNER-X']*_MPDFK-$sx*$objattr['wmf_x'], (($this->h-$objattr['INNER-Y'])*_MPDFK)+$sy*$objattr['wmf_y'], $objattr['ID']); + } + else { + $outstring = sprintf("q ".$tr."%.3F 0 0 %.3F %.3F %.3F cm ".$gradmask."/I%d Do Q",$obiw*_MPDFK, $obih*_MPDFK, $objattr['INNER-X'] *_MPDFK, ($this->h-($objattr['INNER-Y'] +$obih ))*_MPDFK,$objattr['ID'] ); + } + $this->_out($outstring); + // LINK + if (isset($objattr['link'])) $this->Link($objattr['INNER-X'],$objattr['INNER-Y'],$objattr['INNER-WIDTH'],$objattr['INNER-HEIGHT'],$objattr['link']); + if (isset($objattr['opacity'])) { $this->SetAlpha(1); } + if ((isset($objattr['border_top']) && $objattr['border_top']>0) || (isset($objattr['border_left']) && $objattr['border_left']>0) || (isset($objattr['border_right']) && $objattr['border_right']>0) || (isset($objattr['border_bottom']) && $objattr['border_bottom']>0)) { $this->PaintImgBorder($objattr,$is_table); } + if(isset($objattr['visibility']) && $objattr['visibility']!='visible' && $objattr['visibility']) { + $this->SetVisibility('visible'); + } + // mPDF 5.6.01 - LAYERS + if (isset($objattr['z-index']) && $objattr['z-index'] > 0 && $this->currentlayer==0) { + $this->EndLayer(); + } + + } + +/*-- BARCODES --*/ + // BARCODE + if ($objattr['type'] == 'barcode') { + $bgcol = $this->ConvertColor(255); + if (isset($objattr['bgcolor']) && $objattr['bgcolor']) { + $bgcol = $objattr['bgcolor']; + } + $col = $this->ConvertColor(0); + if (isset($objattr['color']) && $objattr['color']) { + $col = $objattr['color']; + } + $this->SetFColor($bgcol); + $this->Rect($objattr['BORDER-X'], $objattr['BORDER-Y'], $objattr['BORDER-WIDTH'], $objattr['BORDER-HEIGHT'], 'F'); + $this->SetFColor($this->ConvertColor(255)); + if (isset($objattr['BORDER-WIDTH'])) { $this->PaintImgBorder($objattr,$is_table); } + if ($objattr['btype'] == 'EAN13' || $objattr['btype'] == 'ISBN' || $objattr['btype'] == 'ISSN' || $objattr['btype'] == 'UPCA' || $objattr['btype'] == 'UPCE' || $objattr['btype'] == 'EAN8') { + $this->WriteBarcode($objattr['code'], $objattr['showtext'], $objattr['INNER-X'], $objattr['INNER-Y'], $objattr['bsize'], 0, 0, 0, 0, 0, $objattr['bheight'], $bgcol, $col, $objattr['btype'], $objattr['bsupp'], $objattr['bsupp_code'], $k); + } + // QR-code + else if ($objattr['btype']=='QR') { + if (!class_exists('QRcode', false)) { + include(_MPDF_PATH.'qrcode/qrcode.class.php'); + } + $this->qrcode = new QRcode($objattr['code'], $objattr['errorlevel']); + $this->qrcode->displayFPDF($this, $objattr['INNER-X'], $objattr['INNER-Y'], $objattr['bsize']*25, array(255,255,255), array(0,0,0)); + } + else { + $this->WriteBarcode2($objattr['code'], $objattr['INNER-X'], $objattr['INNER-Y'], $objattr['bsize'], $objattr['bheight'], $bgcol, $col, $objattr['btype'], $objattr['pr_ratio'], $k); + } + } +/*-- END BARCODES --*/ + + // TEXT CIRCLE + if ($objattr['type'] == 'textcircle') { + $bgcol = ''; // mPDF 5.5.14 + if (isset($objattr['bgcolor']) && $objattr['bgcolor']) { + $bgcol = $objattr['bgcolor']; + } + $col = $this->ConvertColor(0); + if (isset($objattr['color']) && $objattr['color']) { + $col = $objattr['color']; + } + $this->SetTColor($col); + $this->SetFColor($bgcol); + if ($bgcol) $this->Rect($objattr['BORDER-X'], $objattr['BORDER-Y'], $objattr['BORDER-WIDTH'], $objattr['BORDER-HEIGHT'], 'F'); // mPDF 5.5.14 + $this->SetFColor($this->ConvertColor(255)); + if (isset($objattr['BORDER-WIDTH'])) { $this->PaintImgBorder($objattr,$is_table); } + if (!class_exists('directw', false)) { include(_MPDF_PATH.'classes/directw.php'); } + if (empty($this->directw)) { $this->directw = new directw($this); } + $save_lmfs = $this->linemaxfontsize; + $this->linemaxfontsize = 0; + if (isset($objattr['top-text'])) { + $this->directw->CircularText($objattr['INNER-X']+$objattr['INNER-WIDTH']/2, $objattr['INNER-Y']+$objattr['INNER-HEIGHT']/2, $objattr['r']/$k, $objattr['top-text'], 'top', $objattr['fontfamily'], $objattr['fontsize']/$k, $objattr['fontstyle'], $objattr['space-width'], $objattr['char-width'], $objattr['divider']); // mPDF 5.5.23 + } + if (isset($objattr['bottom-text'])) { + $this->directw->CircularText($objattr['INNER-X']+$objattr['INNER-WIDTH']/2, $objattr['INNER-Y']+$objattr['INNER-HEIGHT']/2, $objattr['r']/$k, $objattr['bottom-text'], 'bottom', $objattr['fontfamily'], $objattr['fontsize']/$k, $objattr['fontstyle'], $objattr['space-width'], $objattr['char-width'], $objattr['divider']); // mPDF 5.5.23 + } + $this->linemaxfontsize = $save_lmfs; + } + + $this->ResetSpacing(); + + // DOT-TAB + if ($objattr['type'] == 'dottab') { + // mPDF 5.6.19 + if (isset($objattr['fontfamily'])) { $this->SetFont($objattr['fontfamily'],'',$objattr['fontsize'] ); } + $sp = $this->GetStringWidth(' '); + $nb=floor(($w-2*$sp)/$this->GetStringWidth('.')); + if ($nb>0) { $dots=' '.str_repeat('.',$nb).' '; } + else { $dots=' '; } + $col = $this->ConvertColor(0); + if (isset($objattr['colorarray']) && ($objattr['colorarray'])) { // mPDF 5.6.19 + $col = $objattr['colorarray']; + } + $this->SetTColor($col); + $save_dh = $this->divheight; // mPDF 5.6.19 + $save_sbd = $this->spanborddet; + $save_u = $this->U; + $save_s = $this->strike; + $this->spanborddet = ''; + $this->divheight = 0; // mPDF 5.6.19 + $this->U = false; + $this->strike = false; + $this->Cell($w,$h,$dots,0,0,'C'); + $this->spanborddet = $save_sbd; + $this->U = $save_u; + $this->strike = $save_s; + $this->divheight = $save_dh; // mPDF 5.6.19 + // mPDF 5.0 + $this->SetTColor($this->ConvertColor(0)); + } + +/*-- FORMS --*/ + // TEXT/PASSWORD INPUT + if ($objattr['type'] == 'input' && ($objattr['subtype'] == 'TEXT' || $objattr['subtype'] == 'PASSWORD')) { + $this->form->print_ob_text($objattr,$w,$h,$texto,$rtlalign,$k,$blockdir); + } + + // TEXTAREA + if ($objattr['type'] == 'textarea') { + $this->form->print_ob_textarea($objattr,$w,$h,$texto,$rtlalign,$k,$blockdir); + } + + // SELECT + if ($objattr['type'] == 'select') { + $this->form->print_ob_select($objattr,$w,$h,$texto,$rtlalign,$k,$blockdir); + } + + + // INPUT/BUTTON as IMAGE + if ($objattr['type'] == 'input' && $objattr['subtype'] == 'IMAGE') { + $this->form->print_ob_imageinput($objattr,$w,$h,$texto,$rtlalign,$k,$blockdir); + } + + // BUTTON + if ($objattr['type'] == 'input' && ($objattr['subtype'] == 'SUBMIT' || $objattr['subtype'] == 'RESET' || $objattr['subtype'] == 'BUTTON')) { + $this->form->print_ob_button($objattr,$w,$h,$texto,$rtlalign,$k,$blockdir); + } + + // CHECKBOX + if ($objattr['type'] == 'input' && ($objattr['subtype'] == 'CHECKBOX')) { + $this->form->print_ob_checkbox($objattr,$w,$h,$texto,$rtlalign,$k,$blockdir,$x,$y); + } + // RADIO + if ($objattr['type'] == 'input' && ($objattr['subtype'] == 'RADIO')) { + $this->form->print_ob_radio($objattr,$w,$h,$texto,$rtlalign,$k,$blockdir,$x,$y); + } +/*-- END FORMS --*/ + } + $this->SetFont($save_currentfontfamily,$save_currentfontstyle,$save_currentfontsize); + $this->y = $save_y; + $this->x = $save_x; + unset($content); +} + + +function WriteFlowingBlock( $s) +{ + $currentx = $this->x; + $is_table = $this->flowingBlockAttr[ 'is_table' ]; + $is_list = $this->flowingBlockAttr[ 'is_list' ]; + // width of all the content so far in points + $contentWidth =& $this->flowingBlockAttr[ 'contentWidth' ]; + // cell width in points + $maxWidth =& $this->flowingBlockAttr[ 'width' ]; + $lineCount =& $this->flowingBlockAttr[ 'lineCount' ]; + // line height in user units + $lineHeight =& $this->flowingBlockAttr[ 'height' ]; + $align =& $this->flowingBlockAttr[ 'align' ]; + $content =& $this->flowingBlockAttr[ 'content' ]; + $contentB =& $this->flowingBlockAttr[ 'contentB' ]; + $font =& $this->flowingBlockAttr[ 'font' ]; + $valign =& $this->flowingBlockAttr[ 'valign' ]; + $blockstate = $this->flowingBlockAttr[ 'blockstate' ]; + + $newblock = $this->flowingBlockAttr[ 'newblock' ]; + $blockdir = $this->flowingBlockAttr['blockdir']; + // *********** BLOCK BACKGROUND COLOR ***************** // + if ($this->blk[$this->blklvl]['bgcolor'] && !$is_table) { + $fill = 0; + } + else { + $this->SetFColor($this->ConvertColor(255)); + $fill = 0; + } + $font[] = $this->saveFont(); + $content[] = ''; + $contentB[] = ''; + $currContent =& $content[ count( $content ) - 1 ]; + // where the line should be cutoff if it is to be justified + $cutoffWidth = $contentWidth; + + $CJKoverflow = false; + $hanger = ''; // mPDF 5.6.40 + + // COLS + $oldcolumn = $this->CurrCol; + + if ($this->ColActive && !$is_table) { $this->breakpoints[$this->CurrCol][] = $this->y; } // *COLUMNS* + +/*-- TABLES --*/ + if ($is_table) { + $ipaddingL = 0; + $ipaddingR = 0; + $paddingL = 0; + $paddingR = 0; + $cpaddingadjustL = 0; + $cpaddingadjustR = 0; + // Added mPDF 3.0 + $fpaddingR = 0; + $fpaddingL = 0; + } + else { +/*-- END TABLES --*/ + $ipaddingL = $this->blk[$this->blklvl]['padding_left']; + $ipaddingR = $this->blk[$this->blklvl]['padding_right']; + $paddingL = ($ipaddingL * _MPDFK); + $paddingR = ($ipaddingR * _MPDFK); + $this->cMarginL = $this->blk[$this->blklvl]['border_left']['w']; + $cpaddingadjustL = -$this->cMarginL; + $this->cMarginR = $this->blk[$this->blklvl]['border_right']['w']; + $cpaddingadjustR = -$this->cMarginR; + // Added mPDF 3.0 Float DIV + $fpaddingR = 0; + $fpaddingL = 0; +/*-- CSS-FLOAT --*/ + if (count($this->floatDivs)) { + list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->GetFloatDivInfo($this->blklvl); + if ($r_exists) { $fpaddingR = $r_width; } + if ($l_exists) { $fpaddingL = $l_width; } + } +/*-- END CSS-FLOAT --*/ + + $usey = $this->y + 0.002; + if (($newblock) && ($blockstate==1 || $blockstate==3) && ($lineCount == 0) ) { + $usey += $this->blk[$this->blklvl]['margin_top'] + $this->blk[$this->blklvl]['padding_top'] + $this->blk[$this->blklvl]['border_top']['w']; + } +/*-- CSS-IMAGE-FLOAT --*/ + // If float exists at this level + if (isset($this->floatmargins['R']) && $usey <= $this->floatmargins['R']['y1'] && $usey >= $this->floatmargins['R']['y0'] && !$this->floatmargins['R']['skipline']) { $fpaddingR += $this->floatmargins['R']['w']; } + if (isset($this->floatmargins['L']) && $usey <= $this->floatmargins['L']['y1'] && $usey >= $this->floatmargins['L']['y0'] && !$this->floatmargins['L']['skipline']) { $fpaddingL += $this->floatmargins['L']['w']; } +/*-- END CSS-IMAGE-FLOAT --*/ + } // *TABLES* + + //OBJECTS - IMAGES & FORM Elements (NB has already skipped line/page if required - in printbuffer) + if (substr($s,0,3) == "\xbb\xa4\xac") { //identifier has been identified! + $objattr = $this->_getObjAttr($s); + $h_corr = 0; + if ($is_table) { // *TABLES* + $maximumW = ($maxWidth/_MPDFK) - ($this->cellPaddingL + $this->cMarginL + $this->cellPaddingR + $this->cMarginR); // *TABLES* + } // *TABLES* + else { // *TABLES* + if (($newblock) && ($blockstate==1 || $blockstate==3) && ($lineCount == 0) && (!$is_table)) { $h_corr = $this->blk[$this->blklvl]['padding_top'] + $this->blk[$this->blklvl]['border_top']['w']; } + $maximumW = ($maxWidth/_MPDFK) - ($this->blk[$this->blklvl]['padding_left'] + $this->blk[$this->blklvl]['border_left']['w'] + $this->blk[$this->blklvl]['padding_right'] + $this->blk[$this->blklvl]['border_right']['w'] + $fpaddingL + $fpaddingR ); + } // *TABLES* + $objattr = $this->inlineObject($objattr['type'],$this->lMargin + $fpaddingL + ($contentWidth/_MPDFK),($this->y + $h_corr), $objattr, $this->lMargin,($contentWidth/_MPDFK),$maximumW,$lineHeight,true,$is_table); + + // SET LINEHEIGHT for this line ================ RESET AT END + $lineHeight = MAX($lineHeight,$objattr['OUTER-HEIGHT']); + $this->objectbuffer[count($content)-1] = $objattr; + // if (isset($objattr['vertical-align'])) { $valign = $objattr['vertical-align']; } + // else { $valign = ''; } + $contentWidth += ($objattr['OUTER-WIDTH'] * _MPDFK); + return; + } + + $lbw = $rbw = 0; // Border widths + if (!empty($this->spanborddet)) { + if (isset($this->spanborddet['L'])) $lbw = $this->spanborddet['L']['w']; + if (isset($this->spanborddet['R'])) $rbw = $this->spanborddet['R']['w']; + } + + if ($this->usingCoreFont) { + $tmp = strlen( $s ); + } + else { + $tmp = mb_strlen( $s, $this->mb_enc ); + } + + // for every character in the string + for ( $i = 0; $i < $tmp; $i++ ) { + // extract the current character + // get the width of the character in points + if ($this->usingCoreFont) { + $c = $s[$i]; + // Soft Hyphens chr(173) + $cw = ($this->GetCharWidthCore($c) * _MPDFK); + if ($this->kerning && $this->useKerning && $i > 0) { + if (isset($this->CurrentFont['kerninfo'][$s[($i-1)]][$c])) { + $cw += ($this->CurrentFont['kerninfo'][$s[($i-1)]][$c] * $this->FontSizePt / 1000 ); + } + } + } + else { + $c = mb_substr($s,$i,1,$this->mb_enc ); + $cw = ($this->GetCharWidthNonCore($c, false) * _MPDFK); + if ($this->kerning && $this->useKerning && $i > 0) { + $lastc = mb_substr($s,($i-1),1,$this->mb_enc ); + $ulastc = $this->UTF8StringToArray($lastc, false); + $uc = $this->UTF8StringToArray($c, false); + if (isset($this->CurrentFont['kerninfo'][$ulastc[0]][$uc[0]])) { + $cw += ($this->CurrentFont['kerninfo'][$ulastc[0]][$uc[0]] * $this->FontSizePt / 1000 ); + } + } + } + + if ($i==0) { + $cw += $lbw*_MPDFK; + $contentB[(count($contentB)-1)] .= 'L'; + } + if ($i==($tmp-1)) { + $cw += $rbw*_MPDFK; + $contentB[(count($contentB)-1)] .= 'R'; + } + // mPDF 5.6.45 + if ($c==' ') { + $currContent .= $c; + $cutoffWidth = $contentWidth; + $contentWidth += $cw; + continue; + } + + // ADDED for Paragraph_indent + $WidthCorrection = 0; + if (($newblock) && ($blockstate==1 || $blockstate==3) && isset($this->blk[$this->blklvl]['text_indent']) && ($lineCount == 0) && (!$is_table) && (!$is_list) && ($align != 'C')) { + $ti = $this->ConvertSize($this->blk[$this->blklvl]['text_indent'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + $WidthCorrection = ($ti*_MPDFK); + } + + // Added mPDF 3.0 Float DIV + $fpaddingR = 0; + $fpaddingL = 0; +/*-- CSS-FLOAT --*/ + if (count($this->floatDivs)) { + list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->GetFloatDivInfo($this->blklvl); + if ($r_exists) { $fpaddingR = $r_width; } + if ($l_exists) { $fpaddingL = $l_width; } + } +/*-- END CSS-FLOAT --*/ + + $usey = $this->y + 0.002; + if (($newblock) && ($blockstate==1 || $blockstate==3) && ($lineCount == 0) ) { + $usey += $this->blk[$this->blklvl]['margin_top'] + $this->blk[$this->blklvl]['padding_top'] + $this->blk[$this->blklvl]['border_top']['w']; + } + +/*-- CSS-IMAGE-FLOAT --*/ + // If float exists at this level + if (isset($this->floatmargins['R']) && $usey <= $this->floatmargins['R']['y1'] && $usey >= $this->floatmargins['R']['y0'] && !$this->floatmargins['R']['skipline']) { $fpaddingR += $this->floatmargins['R']['w']; } + if (isset($this->floatmargins['L']) && $usey <= $this->floatmargins['L']['y1'] && $usey >= $this->floatmargins['L']['y0'] && !$this->floatmargins['L']['skipline']) { $fpaddingL += $this->floatmargins['L']['w']; } +/*-- END CSS-IMAGE-FLOAT --*/ + + + + // try adding another char + if (( $contentWidth + $cw > $maxWidth - $WidthCorrection - (($this->cMarginL+$this->cMarginR)*_MPDFK) - ($paddingL+$paddingR +(($fpaddingL + $fpaddingR) * _MPDFK) ) + 0.001)) {// 0.001 is to correct for deviations converting mm=>pts + // it won't fit, output what we already have + $lineCount++; + + // contains any content that didn't make it into this print + $savedContent = ''; + $savedContentB = ''; + $savedFont = array(); + $savedObj = array(); + // mPDF 5.6.20 + $savedPreContent = array(); + $savedPreContentB = array(); + $savedPreFont = array(); + + // cut off and save any partial words at the end of the string + $words = explode( ' ', $currContent ); + /////////////////// + // HYPHENATION + $currWord = $words[count($words)-1] ; + $success = false; + + // mPDF 5.6.21 Hard Hyphens - + $hardsuccess = false; + if ($this->textparam['hyphens'] != 2 && preg_match("/\-/",$currWord)) { + $rem = $maxWidth - $WidthCorrection - (($this->cMarginL+$this->cMarginR)*_MPDFK) - ($paddingL+$paddingR +(($fpaddingL + $fpaddingR) * _MPDFK) ); + list($hardsuccess,$pre,$post,$prelength) = $this->hardHyphenate($currWord, (($rem-$cutoffWidth)/_MPDFK -$this->GetCharWidth("-", false)) ); + if ($hardsuccess) { + $already = array_pop( $words ); + $forward = mb_substr($already,$prelength+1,mb_strlen($already, $this->mb_enc), $this->mb_enc); + $words[] = $pre.'-'; + $words[] = $forward; + $currContent = mb_substr($currContent,0,mb_strlen($currContent, $this->mb_enc)+1-mb_strlen($post, $this->mb_enc), $this->mb_enc) . '-'; + } + } + +/*-- HYPHENATION --*/ + // Soft Hyphens chr(173) + else if ($this->textparam['hyphens'] != 2 && (!$this->usingCoreFont && preg_match("/\xc2\xad/",$currWord)) || ($this->usingCoreFont && preg_match("/".chr(173)."/",$currWord) && ($this->FontFamily!='csymbol' && $this->FontFamily!='czapfdingbats')) ) { // mPDF 5.6.06 + $rem = $maxWidth - $WidthCorrection - (($this->cMarginL+$this->cMarginR)*_MPDFK) - ($paddingL+$paddingR +(($fpaddingL + $fpaddingR) * _MPDFK) ); + list($success,$pre,$post,$prelength) = $this->softHyphenate($currWord, (($rem-$cutoffWidth)/_MPDFK -$this->GetCharWidth(" ", false)) ); + } + + if (!$success && !$hardsuccess && $this->textparam['hyphens'] == 1 ) { // mPDF 5.6.06 // mPDF 5.6.21 + // Look ahead to get current word + for($ac = $i; $ac<(mb_strlen($s)-1); $ac++) { + $addc = mb_substr($s,$ac,1,$this->mb_enc ); + if ($addc == ' ') { break; } + $currWord .= $addc; + } + $rem = $maxWidth - $WidthCorrection - (($this->cMarginL+$this->cMarginR)*_MPDFK) - ($paddingL+$paddingR +(($fpaddingL + $fpaddingR) * _MPDFK) ); + list($success,$pre,$post,$prelength) = $this->hyphenateWord($currWord, (($rem-$cutoffWidth)/_MPDFK -$this->GetCharWidth(" ", false)) ); + } + if ($success) { + $already = array_pop( $words ); + $forward = mb_substr($already,$prelength,mb_strlen($already, $this->mb_enc), $this->mb_enc); + $words[] = $pre.'-'; + $words[] = $forward; + $currContent = mb_substr($currContent,0,mb_strlen($currContent, $this->mb_enc)+1-mb_strlen($post, $this->mb_enc), $this->mb_enc) . '-'; + } +/*-- END HYPHENATION --*/ + + // mPDF 5.6.13 Decimal alignment (cancel if wraps to > 1 line) + if ($is_table && substr($align,0,1)=='D' ) { $align=substr($align,2,1); } + +/*-- CJK-FONTS --*/ + // mPDF 5.6.42 + if ($this->checkCJK) { + $lastchar = mb_substr($words[(count($words)-1)],mb_strlen($words[(count($words)-1)], $this->mb_enc)-1, 1, $this->mb_enc); + } + // Next character is suitable to add as overhanging or squeezed punctuation + if ($this->checkCJK && preg_match("/[".$this->CJKoverflow."]/u", $c) && $this->allowCJKorphans && !$CJKoverflow) { + // add character onto this line + $currContent .= $c; + $cutoffWidth = $contentWidth; + $contentWidth += $cw; + $CJKoverflow = true; + continue; + } + // Last character that fits is not allowed to end a line - move lastchar(s) to start of next line + else if ($this->checkCJK && preg_match("/[".$this->CJKleading."]/u", $lastchar)) { + //move lastchar(s) to next line + $m0 = $lastchar; + $m1 = $c; + while(preg_match("/[".$this->CJKleading."]/u", $m0) && mb_strlen($words[(count($words)-1)], $this->mb_enc)>2) { + // trim last letter off word[0] + $words[(count($words)-1)] = mb_substr($words[(count($words)-1)],0,mb_strlen($words[(count($words)-1)], $this->mb_enc)-1, $this->mb_enc); + // and add it to savedContent for next line + $savedContent = $m0.$savedContent; + $m1 = $lastchar; + $lastchar = mb_substr($words[(count($words)-1)],mb_strlen($words[(count($words)-1)], $this->mb_enc)-1, 1, $this->mb_enc); + $m0 = $lastchar; + } + $lastContent = ''; + for ( $w = 0; $w < count( $words ) ; $w++) { $lastContent .= $words[ $w ]." "; } + $savedFont = $this->saveFont(); + // replace the current content with the cropped version + $currContent = rtrim( $lastContent ); + } + // Next character is not allowed to start a new line + else if ($this->checkCJK && preg_match("/[".$this->CJKfollowing."]/u", $c)) { + // try squeezing another character(s) onto this line = Oikomi + if ($this->allowCJKorphans && !$CJKoverflow) { // mPDF 5.6.40 + $lookahead = mb_substr($s,$i+1,1,$this->mb_enc ); + //if lookahead is not another following char + if (!$lookahead || ($lookahead && !preg_match("/[".$this->CJKfollowing."]/u", $lookahead))) { + $currContent .= $c; + $cutoffWidth = $contentWidth; + $contentWidth += $cw; + if ($this->allowCJKoverflow && preg_match("/[".$this->CJKoverflow."]/u", $c)) { $CJKoverflow = true; } + continue; + } + } + // or move lastchar(s) to next line to keep $c company = Oidashi + $m0 = $lastchar; + $m1 = $c; + while(preg_match("/[".$this->CJKfollowing."]/u", $m1) && mb_strlen($words[(count($words)-1)], $this->mb_enc)>2) { + // trim last letter off word[0] + $words[(count($words)-1)] = mb_substr($words[(count($words)-1)],0,mb_strlen($words[(count($words)-1)], $this->mb_enc)-1, $this->mb_enc); + // and add it to savedContent for next line + $savedContent = $m0.$savedContent; + $m1 = $lastchar; + $lastchar = mb_substr($words[(count($words)-1)],mb_strlen($words[(count($words)-1)], $this->mb_enc)-1, 1, $this->mb_enc); + $m0 = $lastchar; + } + $lastContent = ''; + for ( $w = 0; $w < count( $words ) ; $w++) { $lastContent .= $words[ $w ]." "; } + $savedFont = $this->saveFont(); + // replace the current content with the cropped version + $currContent = rtrim( $lastContent ); + } + // mPDF 5.6.42 + else if ($this->checkCJK && preg_match("/([".$this->pregCJKchars."]+[0-9\x{ff10}-\x{ff19}]+$)/u", $words[0])) { + $lookahead = mb_substr($s,$i,16,$this->mb_enc ); + //and if lookahead starts with a few numerals + if ($lookahead && (preg_match("/^([0-9\x{ff10}-\x{ff19}]+[".$this->pregCJKchars."]+)/u", $lookahead) || preg_match("/^([0-9\x{ff10}-\x{ff19}]+$)/u", $lookahead)) ) { + // or move lastchar(s) to next line to keep numerals together + $m0 = $lastchar; + while(preg_match("/[0-9\x{ff10}-\x{ff19}]/u", $m0) && mb_strlen($words[(count($words)-1)], $this->mb_enc)>2) { + // trim last letter off word[0] + $words[(count($words)-1)] = mb_substr($words[(count($words)-1)],0,mb_strlen($words[(count($words)-1)], $this->mb_enc)-1, $this->mb_enc); + // and add it to savedContent for next line + $savedContent = $m0.$savedContent; + $lastchar = mb_substr($words[(count($words)-1)],mb_strlen($words[(count($words)-1)], $this->mb_enc)-1, 1, $this->mb_enc); + $m0 = $lastchar; + } + } + $lastContent = ''; + for ( $w = 0; $w < count( $words ) ; $w++) { $lastContent .= $words[ $w ]." "; } + $savedFont = $this->saveFont(); + // replace the current content with the cropped version + $currContent = rtrim( $lastContent ); + } + else +/*-- END CJK-FONTS --*/ + // if it looks like we didn't finish any words for this chunk + if ( count( $words ) == 1 ) { + // TO correct for error when word too wide for page - but only when one long word from left to right margin + if (count($content) == 1 && $currContent != ' ') { + $lastchar = mb_substr($words[0],mb_strlen($words[0], $this->mb_enc)-1, 1, $this->mb_enc); + $lastContent = $words[0]; + $savedFont = $this->saveFont(); + // replace the current content with the cropped version + $currContent = rtrim( $lastContent ); + } + // mPDF 5.6.20 + else if ( count($content)>1 + && (!isset($this->objectbuffer[(count($content)-1)]) && !isset($this->objectbuffer[(count($content)-2)])) + && substr($content[count($content)-2],-1,1) != ' ' + && substr($currContent,0,1) != ' ' + ) { + // Go back to find a space in a previous chunk of content + $found = false; + for ($ix=count($content)-1;$ix>=0;$ix--) { + // mPDF 5.6.29 + if ($this->usingCoreFont && preg_match('/[ '.chr(173).']/',$content[$ix],$m)) { $match = $m[0]; $found = $ix; break; } + else if (!$this->usingCoreFont) { + if (preg_match('/[ ]/',$content[$ix])) { $match = ' '; $found = $ix; break; } + else if (preg_match('/[\x{00AD}]/u',$content[$ix])) { + // even though it is UTF-8 replace it temporarily with chr(173) + $content[$ix] = preg_replace('/[\x{00AD}]/u',chr(173),$content[$ix]); + $match = chr(173); $found = $ix; break; + } + } + } + if ($found !== false) { + $charpos = strrpos($content[$found],$match); // mPDF 5.6.29 + for ($ix=count($content)-1;$ix>$found;$ix--) { + // save and crop off any subsequent chunks + $savedPreContent[] = array_pop($content); + $savedPreContentB[] = array_pop($contentB); + $savedPreFont[] = array_pop($font); + } + if (substr($content[count($content)-1],$charpos+1,strlen($content[count($content)-1])-1) != '') { + $savedPreContent[] = substr($content[count($content)-1],$charpos+1,strlen($content[count($content)-1])-1); + $savedPreContentB[] = preg_replace('/L/','',$contentB[count($content)-1]); // ??? + $savedPreFont[] = $font[count($content)-1]; + } + $savedContent = ''; + $savedContentB = ''; + $savedFont = array(); + + $currContent =& $content[ count( $content ) - 1 ]; + $currContent = substr($currContent,0,$charpos); + if ($match == chr(173)) { $currContent .= '-'; } // mPDF 5.6.29 + if (strpos($contentB[(count($contentB)-1)],'R')!==false) { // ??? + $contentB[count($content)-1] = preg_replace('/R/','',$contentB[count($content)-1]); // ??? + } + + $currContent = rtrim( $currContent ); + } + else { + $savedContent = array_pop( $content ); + $savedContentB = array_pop($contentB); + $savedFont = array_pop( $font ); + $currContent =& $content[ count( $content ) - 1 ]; + $currContent = rtrim( $currContent ); + } + } + else { + // save and crop off the content currently on the stack + $savedContent = array_pop( $content ); + $savedContentB = array_pop($contentB); // mPDF 5.6.20 + $savedFont = array_pop( $font ); + // trim any trailing spaces off the last bit of content + $currContent =& $content[ count( $content ) - 1 ]; + $currContent = rtrim( $currContent ); + } + } + else { // otherwise, we need to find which bit to cut off + $lastContent = ''; + for ( $w = 0; $w < count( $words ) - 1; $w++) { $lastContent .= $words[ $w ]." "; } + $savedContent = $words[ count( $words ) - 1 ]; + $savedFont = $this->saveFont(); + // replace the current content with the cropped version + $currContent = rtrim( $lastContent ); + } + // CJK - strip CJK space at end of line + //   = \xe3\x80\x80 = CJK space + if ($this->checkCJK) { $currContent = preg_replace("/\xe3\x80\x80$/",'',$currContent) ; } // *CJK-FONTS* + + + if (isset($this->objectbuffer[(count($content)-1)]) && $this->objectbuffer[(count($content)-1)]['type']=='dottab') { + $savedObj = array_pop( $this->objectbuffer ); + $contentWidth -= ($this->objectbuffer[(count($content)-1)]['OUTER-WIDTH'] * _MPDFK); + } + + // Set Current lineheight (correction factor) + $lhfixed = false; +/*-- LISTS --*/ + if ($is_list) { + if (preg_match('/([0-9.,]+)mm/',$this->list_lineheight[$this->listlvl][$this->listOcc],$am)) { + $lhfixed = true; + $def_fontsize = $this->InlineProperties['LISTITEM'][$this->listlvl][$this->listOcc][$this->listnum]['size']; + $this->lineheight_correction = $am[1] / $def_fontsize ; + } + else { + $this->lineheight_correction = $this->list_lineheight[$this->listlvl][$this->listOcc]; + } + } + else +/*-- END LISTS --*/ +/*-- TABLES --*/ + if ($is_table) { + if (preg_match('/([0-9.,]+)mm/',$this->table_lineheight,$am)) { + $lhfixed = true; + $def_fontsize = $this->FontSize; // needs to be default font-size for block **** + $this->lineheight_correction = $lineHeight / $def_fontsize ; + } + else { + $this->lineheight_correction = $this->table_lineheight; + } + } + else +/*-- END TABLES --*/ + if (isset($this->blk[$this->blklvl]['line_height']) && $this->blk[$this->blklvl]['line_height']) { + if (preg_match('/([0-9.,]+)mm/',$this->blk[$this->blklvl]['line_height'],$am)) { + $lhfixed = true; + $def_fontsize = $this->blk[$this->blklvl]['InlineProperties']['size']; // needs to be default font-size for block **** + $this->lineheight_correction = $am[1] / $def_fontsize ; + } + else { + $this->lineheight_correction = $this->blk[$this->blklvl]['line_height']; + } + } + else { + $this->lineheight_correction = $this->normalLineheight; + } + // update $contentWidth and $cutoffWidth since they changed with cropping + // Also correct lineheight to maximum fontsize (not for tables) + $contentWidth = 0; + // correct lineheight to maximum fontsize + if ($lhfixed) { $maxlineHeight = $this->lineheight; } + else { $maxlineHeight = 0; } + $this->forceExactLineheight = true; + $maxfontsize = 0; + // While we're at it, check for cursive text + $checkCursive=false; + if ($this->biDirectional) { $checkCursive=true; } // *RTL* + foreach ( $content as $k => $chunk ) + { + $this->restoreFont( $font[ $k ]); + if (!isset($this->objectbuffer[$k])) { + // mPDF 5.6.40 + if ($this->checkCJK && $k == count($content)-1 && $CJKoverflow && $align=='J' && $this->allowCJKoverflow && $this->CJKforceend) { + // force-end overhang + $hanger = mb_substr($chunk,mb_strlen($chunk,$this->mb_enc)-1,1,$this->mb_enc ); + $content[$k] = $chunk = mb_substr($chunk,0,mb_strlen($chunk,$this->mb_enc)-1,$this->mb_enc ); + } + if (!$this->usingCoreFont) { + $content[$k] = $chunk = str_replace("\xc2\xad",'',$chunk ); + if (isset($this->CurrentFont['indic']) && $this->CurrentFont['indic']) { $checkCursive=true; } // *INDIC* + } + // Soft Hyphens chr(173) + else if ($this->FontFamily!='csymbol' && $this->FontFamily!='czapfdingbats') { + $content[$k] = $chunk = str_replace(chr(173),'',$chunk ); + } + $contentWidth += $this->GetStringWidth( $chunk ) * _MPDFK; + if (!empty($this->spanborddet)) { + if (strpos($contentB[$k],'L')!==false) $contentWidth += $this->spanborddet['L']['w'] * _MPDFK; + if (strpos($contentB[$k],'R')!==false) $contentWidth += $this->spanborddet['R']['w'] * _MPDFK; + } + if (!$lhfixed) { $maxlineHeight = max($maxlineHeight,$this->FontSize * $this->lineheight_correction ); } + if ($lhfixed && ($this->FontSize > $def_fontsize || ($this->FontSize > ($lineHeight * $this->lineheight_correction) && $is_list))) { + $this->forceExactLineheight = false; + } + $maxfontsize = max($maxfontsize,$this->FontSize); + } + } + + $lastfontreqstyle = $font[count($font)-1]['ReqFontStyle']; + $lastfontstyle = $font[count($font)-1]['style']; + if ($blockdir == 'ltr' && strpos($lastfontreqstyle,"I") !== false && strpos($lastfontstyle,"I") === false) { // Artificial italic + $lastitalic = $this->FontSize*0.15*_MPDFK; + } + else { $lastitalic = 0; } + + +/*-- LISTS --*/ + if ($is_list && is_array($this->bulletarray) && $this->bulletarray) { + $actfs = $this->bulletarray['fontsize']; + if (!$lhfixed) { $maxlineHeight = max($maxlineHeight,$actfs * $this->lineheight_correction ); } + if ($lhfixed && $actfs > $def_fontsize) { $this->forceExactLineheight = false; } + $maxfontsize = max($maxfontsize,$actfs); + } +/*-- END LISTS --*/ + + // when every text item checked i.e. $maxfontsize is set properly + + $af = 0; // Above font + $bf = 0; // Below font + $mta = 0; // Maximum top-aligned + $mba = 0; // Maximum bottom-aligned + + foreach ( $content as $k => $chunk ) { + if (isset($this->objectbuffer[$k]) && $this->objectbuffer[$k]) { + $contentWidth += $this->objectbuffer[$k]['OUTER-WIDTH'] * _MPDFK; + $oh = $this->objectbuffer[$k]['OUTER-HEIGHT']; + $va = $this->objectbuffer[$k]['vertical-align']; // = $objattr['vertical-align'] = set as M,T,B,S + if ($lhfixed && $oh > $def_fontsize) { $this->forceExactLineheight = false; } + + if ($va == 'BS') { // (BASELINE default) + $af = max($af, ($oh - ($maxfontsize * (0.5 + $this->baselineC)))); + } + else if ($va == 'M') { + $af = max($af, ($oh - $maxfontsize)/2); + $bf = max($bf, ($oh - $maxfontsize)/2); + } + else if ($va == 'TT') { + $bf = max($bf, ($oh - $maxfontsize)); + } + else if ($va == 'TB') { + $af = max($af, ($oh - $maxfontsize)); + } + else if ($va == 'T') { + $mta = max($mta, $oh); + } + else if ($va == 'B') { + $mba = max($mba, $oh); + } + } + } + if ((!$lhfixed || !$this->forceExactLineheight) && ($af > (($maxlineHeight - $maxfontsize)/2) || $bf > (($maxlineHeight - $maxfontsize)/2))) { + $maxlineHeight = $maxfontsize + $af + $bf; + } + else if (!$lhfixed) { $af = $bf = ($maxlineHeight - $maxfontsize)/2; } + + if ($mta > $maxlineHeight) { + $bf += ($mta - $maxlineHeight); + $maxlineHeight = $mta; + } + if ($mba > $maxlineHeight) { + $af += ($mba - $maxlineHeight); + $maxlineHeight = $mba; + } + + + $lineHeight = $maxlineHeight; + $cutoffWidth = $contentWidth; + // If NOT images, and maxfontsize NOT > lineHeight - this value determines text baseline positioning + if ($lhfixed && $af==0 && $bf==0 && $maxfontsize<=($def_fontsize * $this->lineheight_correction * 0.8 )) { + $this->linemaxfontsize = $def_fontsize; + } + else { $this->linemaxfontsize = $maxfontsize; } + + + $inclCursive=false; + foreach ( $content as $k => $chunk ) { + if (!isset($this->objectbuffer[$k]) || (isset($this->objectbuffer[$k]) && !$this->objectbuffer[$k])) { + if ($this->usingCoreFont) { + $content[$k] = str_replace(chr(160),chr(32),$chunk ); + } + else { + $content[$k] = str_replace(chr(194).chr(160),chr(32),$chunk ); + if ($checkCursive) { + if (preg_match("/([".$this->pregRTLchars."])/u", $chunk)) { $inclCursive = true; } // *RTL* + if (preg_match("/([".$this->pregHIchars.$this->pregBNchars.$this->pregPAchars."])/u", $chunk)) { $inclCursive = true; } // *INDIC* + } + } + } + } + + // JUSTIFICATION J + $jcharspacing = 0; + $jws = 0; + $nb_carac = 0; + $nb_spaces = 0; + // if it's justified, we need to find the char/word spacing (or if orphans have allowed length of line to go over the maxwidth) + if ( ($align == 'J' && !$CJKoverflow) || (($cutoffWidth + $lastitalic > $maxWidth - $WidthCorrection - (($this->cMarginL+$this->cMarginR)*_MPDFK) - ($paddingL+$paddingR +(($fpaddingL + $fpaddingR) * _MPDFK) ) + 0.001) && (!$CJKoverflow || ($CJKoverflow && !$this->allowCJKoverflow))) || $CJKoverflow && $align=='J' && $this->allowCJKoverflow && $hanger && $this->CJKforceend) { // 0.001 is to correct for deviations converting mm=>pts // mPDF 5.6.40 + // JUSTIFY J (Use character spacing) + // WORD SPACING + foreach ( $content as $k => $chunk ) { + if (!isset($this->objectbuffer[$k]) || (isset($this->objectbuffer[$k]) && !$this->objectbuffer[$k])) { + $nb_carac += mb_strlen( $chunk, $this->mb_enc ) ; + $nb_spaces += mb_substr_count( $chunk,' ', $this->mb_enc ) ; + } + } + list($jcharspacing,$jws) = $this->GetJspacing($nb_carac,$nb_spaces,($maxWidth-$lastitalic-$cutoffWidth-$WidthCorrection-(($this->cMarginL+$this->cMarginR)*_MPDFK)-($paddingL+$paddingR +(($fpaddingL + $fpaddingR) * _MPDFK) )),$inclCursive); + } + + + // WORD SPACING + $empty = $maxWidth - $lastitalic-$WidthCorrection - $contentWidth - (($this->cMarginL+$this->cMarginR)* _MPDFK) - ($paddingL+$paddingR +(($fpaddingL + $fpaddingR) * _MPDFK) ); + + $empty -= ($jcharspacing * $nb_carac); + $empty -= ($jws * $nb_spaces); + + $empty /= _MPDFK; + $b = ''; //do not use borders + // Get PAGEBREAK TO TEST for height including the top border/padding + $check_h = max($this->divheight,$lineHeight); + if (($newblock) && ($blockstate==1 || $blockstate==3) && ($this->blklvl > 0) && ($lineCount == 1) && (!$is_table) && (!$is_list)) { + $check_h += ($this->blk[$this->blklvl]['padding_top'] + $this->blk[$this->blklvl]['margin_top'] + $this->blk[$this->blklvl]['border_top']['w']); + } + + if ($this->ColActive && $check_h > ($this->PageBreakTrigger - $this->y0)) { + $this->SetCol($this->NbCol-1); + } + + // PAGEBREAK + // 'If' below used in order to fix "first-line of other page with justify on" bug + if(!$is_table && ($this->y+$check_h) > $this->PageBreakTrigger and !$this->InFooter and $this->AcceptPageBreak()) { + $bak_x=$this->x;//Current X position + + // WORD SPACING + $ws=$this->ws;//Word Spacing + $charspacing=$this->charspacing;//Character Spacing + $this->ResetSpacing(); + + $this->AddPage($this->CurOrientation); + + $this->x = $bak_x; + // Added to correct for OddEven Margins + $currentx += $this->MarginCorrection; + $this->x += $this->MarginCorrection; + + // WORD SPACING + $this->SetSpacing($charspacing,$ws); + } + + if ($this->keep_block_together && !$is_table && $this->kt_p00 < $this->page && ($this->y+$check_h) > $this->kt_y00) { + $this->printdivbuffer(); + $this->keep_block_together = 0; + } + + +/*-- COLUMNS --*/ + // COLS + // COLUMN CHANGE + if ($this->CurrCol != $oldcolumn) { + $currentx += $this->ChangeColumn * ($this->ColWidth+$this->ColGap); + $this->x += $this->ChangeColumn * ($this->ColWidth+$this->ColGap); + $oldcolumn = $this->CurrCol; + } + + if ($this->ColActive && !$is_table) { $this->breakpoints[$this->CurrCol][] = $this->y; } // *COLUMNS* +/*-- END COLUMNS --*/ + + // TOP MARGIN + if (($newblock) && ($blockstate==1 || $blockstate==3) && ($this->blk[$this->blklvl]['margin_top']) && ($lineCount == 1) && (!$is_table) && (!$is_list)) { + $this->DivLn($this->blk[$this->blklvl]['margin_top'],$this->blklvl-1,true,$this->blk[$this->blklvl]['margin_collapse']); + if ($this->ColActive) { $this->breakpoints[$this->CurrCol][] = $this->y; } // *COLUMNS* + } + + + // Update y0 for top of block (used to paint border) + if (($newblock) && ($blockstate==1 || $blockstate==3) && ($lineCount == 1) && (!$is_table) && (!$is_list)) { + $this->blk[$this->blklvl]['y0'] = $this->y; + $this->blk[$this->blklvl]['startpage'] = $this->page; + if ($this->blk[$this->blklvl]['float']) { $this->blk[$this->blklvl]['float_start_y'] = $this->y; } // mPDF 5.6.63 + } + + // TOP PADDING and BORDER spacing/fill + if (($newblock) && ($blockstate==1 || $blockstate==3) && (($this->blk[$this->blklvl]['padding_top']) || ($this->blk[$this->blklvl]['border_top'])) && ($lineCount == 1) && (!$is_table) && (!$is_list)) { + // $state = 0 normal; 1 top; 2 bottom; 3 top and bottom + $this->DivLn($this->blk[$this->blklvl]['padding_top'] + $this->blk[$this->blklvl]['border_top']['w'],-3,true,false,1); + if ($this->ColActive) { $this->breakpoints[$this->CurrCol][] = $this->y; } // *COLUMNS* + } + + $arraysize = count($content); + + $margins = ($this->cMarginL+$this->cMarginR) + ($ipaddingL+$ipaddingR + $fpaddingR + $fpaddingR ); + + // PAINT BACKGROUND FOR THIS LINE + if (!$is_table) { $this->DivLn($lineHeight,$this->blklvl,false); } // false -> don't advance y + + $this->x = $currentx + $this->cMarginL + $ipaddingL + $fpaddingL ; + if ($align == 'R') { $this->x += $empty; } + else if ($align == 'C') { $this->x += ($empty / 2); } + + // Paragraph INDENT + if (isset($this->blk[$this->blklvl]['text_indent']) && ($newblock) && ($blockstate==1 || $blockstate==3) && ($lineCount == 1) && (!$is_table) && ($blockdir !='rtl') && ($align !='C')) { + $ti = $this->ConvertSize($this->blk[$this->blklvl]['text_indent'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + $this->x += $ti; + } + + // DIRECTIONALITY RTL + $all_rtl = false; + $contains_rtl = false; +/*-- RTL --*/ + if ($blockdir == 'rtl' || $this->biDirectional) { + $all_rtl = true; + foreach ( $content as $k => $chunk ) { + $reversed = $this->magic_reverse_dir($chunk, false, $blockdir); + + if ($reversed > 0) { $contains_rtl = true; } + if ($reversed < 2) { $all_rtl = false; } + $content[$k] = $chunk; + } + if (($blockdir =='rtl' && $contains_rtl) || $all_rtl) { + $content = array_reverse($content,false); + $contentB = array_reverse($contentB,false); + } + } +/*-- END RTL --*/ + + foreach ( $content as $k => $chunk ) { + + // FOR IMAGES - UPDATE POSITION + if (($blockdir =='rtl' && $contains_rtl) || $all_rtl) { $dirk = $arraysize-1 - $k ; } else { $dirk = $k; } + + $va = 'M'; // default for text + if (isset($this->objectbuffer[$dirk]) && $this->objectbuffer[$dirk]) { + $xadj = $this->x - $this->objectbuffer[$dirk]['OUTER-X'] ; + $this->objectbuffer[$dirk]['OUTER-X'] += $xadj; + $this->objectbuffer[$dirk]['BORDER-X'] += $xadj; + $this->objectbuffer[$dirk]['INNER-X'] += $xadj; + $va = $this->objectbuffer[$dirk]['vertical-align']; + $yadj = $this->y - $this->objectbuffer[$dirk]['OUTER-Y']; + if ($va == 'BS') { + $yadj += $af + ($this->linemaxfontsize * (0.5 + $this->baselineC)) - $this->objectbuffer[$dirk]['OUTER-HEIGHT']; + } + else if ($va == 'M' || $va == '') { + $yadj += $af + ($this->linemaxfontsize /2) - ($this->objectbuffer[$dirk]['OUTER-HEIGHT']/2); + } + else if ($va == 'TB') { + $yadj += $af + $this->linemaxfontsize - $this->objectbuffer[$dirk]['OUTER-HEIGHT']; + } + else if ($va == 'TT') { + $yadj += $af; + } + else if ($va == 'B') { + $yadj += $af + $this->linemaxfontsize + $bf - $this->objectbuffer[$dirk]['OUTER-HEIGHT']; + } + else if ($va == 'T') { + $yadj += 0; + } + $this->objectbuffer[$dirk]['OUTER-Y'] += $yadj; + $this->objectbuffer[$dirk]['BORDER-Y'] += $yadj; + $this->objectbuffer[$dirk]['INNER-Y'] += $yadj; + } + + // DIRECTIONALITY RTL + if ((($blockdir == 'rtl') && ($contains_rtl )) || ($all_rtl )) { $this->restoreFont($font[$arraysize-1 - $k]); } + else { $this->restoreFont( $font[ $k ] ); } + + $this->SetSpacing(($this->fixedlSpacing*_MPDFK)+$jcharspacing,($this->fixedlSpacing+$this->minwSpacing)*_MPDFK+$jws); + // Now unset these values so they don't influence GetStringwidth below or in fn. Cell + $this->fixedlSpacing = false; + $this->minwSpacing = 0; + + // mPDF 5.6.26 + $save_vis = $this->visibility; + if (isset($this->textparam['visibility']) && $this->textparam['visibility'] && $this->textparam['visibility'] != $this->visibility) { + $this->SetVisibility($this->textparam['visibility']); + } + // *********** SPAN BACKGROUND COLOR ***************** // + if ($this->spanbgcolor) { + $cor = $this->spanbgcolorarray; + $this->SetFColor($cor); + $save_fill = $fill; $spanfill = 1; $fill = 1; + } + if (!empty($this->spanborddet)) { + if (strpos($contentB[$k],'L')!==false) $this->x += $this->spanborddet['L']['w']; + if (strpos($contentB[$k],'L')===false) $this->spanborddet['L']['s'] = $this->spanborddet['L']['w'] = 0; + if (strpos($contentB[$k],'R')===false) $this->spanborddet['R']['s'] = $this->spanborddet['R']['w'] = 0; + } + + // WORD SPACING + $stringWidth = $this->GetStringWidth($chunk ); + $stringWidth += ( $this->charspacing * mb_strlen($chunk,$this->mb_enc ) / _MPDFK ); + $stringWidth += ( $this->ws * mb_substr_count($chunk,' ',$this->mb_enc ) / _MPDFK ); + if (isset($this->objectbuffer[$dirk])) { $stringWidth = $this->objectbuffer[$dirk]['OUTER-WIDTH']; } + + if ($stringWidth==0) { $stringWidth = 0.000001; } + if ($k == $arraysize-1) { + $stringWidth -= ( $this->charspacing / _MPDFK ); + // mPDF 5.6.40 + if ($this->checkCJK && $CJKoverflow && $align=='J' && $this->allowCJKoverflow && $hanger && $this->CJKforceend) { + // force-end overhang + $this->Cell( $stringWidth, $lineHeight, $chunk, '', 0, '', $fill, $this->HREF, $currentx,0,0,'M', $fill, $af, $bf, true ); + $this->Cell( $this->GetStringWidth($hanger), $lineHeight, $hanger, '', 1, '', $fill, $this->HREF, $currentx,0,0,'M', $fill, $af, $bf, true ); + } + else { + $this->Cell( $stringWidth, $lineHeight, $chunk, '', 1, '', $fill, $this->HREF, $currentx,0,0,'M', $fill, $af, $bf, true ); //mono-style line or last part (skips line) + } + + } + else $this->Cell( $stringWidth, $lineHeight, $chunk, '', 0, '', $fill, $this->HREF, 0, 0,0,'M', $fill, $af, $bf, true );//first or middle part + + if (!empty($this->spanborddet)) { + if (strpos($contentB[$k],'R')!==false && $k != $arraysize-1) $this->x += $this->spanborddet['R']['w']; + } + // *********** SPAN BACKGROUND COLOR OFF - RESET BLOCK BGCOLOR ***************** // + if (isset($spanfill) && $spanfill) { + $fill = $save_fill; $spanfill = 0; + if ($fill) { $this->SetFColor($bcor); } + } + // mPDF 5.6.26 + if (isset($this->textparam['visibility']) && $this->textparam['visibility'] && $this->visibility != $save_vis) { + $this->SetVisibility($save_vis); + } + + } + if (!$is_table) { + $this->maxPosR = max($this->maxPosR , ($this->w - $this->rMargin - $this->blk[$this->blklvl]['outer_right_margin'])); + $this->maxPosL = min($this->maxPosL , ($this->lMargin + $this->blk[$this->blklvl]['outer_left_margin'])); + } + + // move on to the next line, reset variables, tack on saved content and current char + + $this->printobjectbuffer($is_table, $blockdir); + $this->objectbuffer = array(); + +/*-- LISTS --*/ + // LIST BULLETS/NUMBERS + if ($is_list && is_array($this->bulletarray) && ($lineCount == 1) ) { + + $this->ResetSpacing(); + + $bull = $this->bulletarray; + if (isset($bull['level']) && isset($bull['occur']) && isset($this->InlineProperties['LIST'][$bull['level']][$bull['occur']])) { + $this->restoreInlineProperties($this->InlineProperties['LIST'][$bull['level']][$bull['occur']]); + } + if (isset($bull['level']) && isset($bull['occur']) && isset($bull['num']) && isset($this->InlineProperties['LISTITEM'][$bull['level']][$bull['occur']][$bull['num']]) && $this->InlineProperties['LISTITEM'][$bull['level']][$bull['occur']][$bull['num']]) { $this->restoreInlineProperties($this->InlineProperties['LISTITEM'][$bull['level']][$bull['occur']][$bull['num']]); } + if (isset($bull['font']) && $bull['font'] == 'czapfdingbats') { + $this->bullet = true; + $this->SetFont('czapfdingbats','',$this->FontSizePt/2.5); + } + else { $this->SetFont($this->FontFamily,$this->FontStyle,$this->FontSizePt,true,true); } // force output + //Output bullet + $this->x = $currentx; + if (isset($bull['x'])) { $this->x += $bull['x']; } + $this->y -= $lineHeight; + if (isset($bull['col']) && $bull['col']) { $this->SetTColor($bull['col']); } // mPDF 5.6.67 + if (isset($bull['txt'])) { $this->Cell($bull['w'], $lineHeight,$bull['txt'],'','',$bull['align'],0,'',0,-$this->cMarginL, -$this->cMarginR ); } + if (isset($bull['font']) && $bull['font'] == 'czapfdingbats') { + $this->bullet = false; + } + $this->x = $currentx; // Reset + $this->y += $lineHeight; + + if ($this->ColActive && !$is_table) { $this->breakpoints[$this->CurrCol][] = $this->y; } // *COLUMNS* + + $this->bulletarray = array(); // prevents repeat of bullet/number if <li>....<br />.....</li> + } +/*-- END LISTS --*/ + + +/*-- CSS-IMAGE-FLOAT --*/ + // Update values if set to skipline + if ($this->floatmargins) { $this->_advanceFloatMargins(); } +/*-- END CSS-IMAGE-FLOAT --*/ + + // Reset lineheight + $lineHeight = $this->divheight; + $valign = 'M'; + + $font = array(); + $content = array(); + $contentB = array(); + $contentWidth = 0; + if (!empty($savedObj)) { + $this->objectbuffer[] = $savedObj; + $font[] = $savedFont; + $content[] = ''; + $contentB[] = ''; + $contentWidth += $savedObj['OUTER-WIDTH'] * _MPDFK; + } + // mPDF 5.6.20 + if (count($savedPreContent) > 0) { + for($ix=count($savedPreContent)-1;$ix>=0;$ix--) { + $font[] = $savedPreFont[$ix]; + $content[] = $savedPreContent[$ix]; + $contentB[] = $savedPreContentB[$ix]; + $this->restoreFont( $savedPreFont[$ix] ); + $lbw = $rbw = 0; // Border widths + if (!empty($this->spanborddet)) { + $lbw = $this->spanborddet['L']['w']; + $rbw = $this->spanborddet['R']['w']; + } + if ($ix>0) { + $contentWidth += $this->GetStringWidth( $savedPreContent[$ix] ) * _MPDFK; + if (strpos($savedPreContentB[$ix],'L')!==false) $contentWidth += $lbw; + if (strpos($savedPreContentB[$ix],'R')!==false) $contentWidth += $rbw; + } + } + $savedPreContent = array(); + $savedPreContentB = array(); + $savedPreFont = array(); + $content[ (count($content)-1) ] .= $c; + } + else { + $font[] = $savedFont; + $content[] = $savedContent . $c; + $contentB[] = $savedContentB ; + } + + $currContent =& $content[ (count($content)-1) ]; + + // CJK - strip CJK space at end of line + //   = \xe3\x80\x80 = CJK space + if ($this->checkCJK && $currContent == "\xe3\x80\x80") { $currContent = '' ; } // *CJK-FONTS* + + $this->restoreFont( $savedFont ); + $lbw = $rbw = 0; // Border widths + if (!empty($this->spanborddet)) { + $lbw = $this->spanborddet['L']['w']; + $rbw = $this->spanborddet['R']['w']; + } + $contentWidth += $this->GetStringWidth( $currContent ) * _MPDFK; + if (strpos($savedContentB,'L')!==false) $contentWidth += $lbw; + $cutoffWidth = $contentWidth; + $CJKoverflow = false; + $hanger = ''; // mPDF 5.6.40 + } + // another character will fit, so add it on + else { + $contentWidth += $cw; + $currContent .= $c; + } + } + unset($content); + unset($contentB); +} +//----------------------END OF FLOWING BLOCK------------------------------------// + + +/*-- CSS-IMAGE-FLOAT --*/ +// Update values if set to skipline +function _advanceFloatMargins() { + // Update floatmargins - L + if (isset($this->floatmargins['L']) && $this->floatmargins['L']['skipline'] && $this->floatmargins['L']['y0'] != $this->y) { + $yadj = $this->y - $this->floatmargins['L']['y0']; + $this->floatmargins['L']['y0'] = $this->y; + $this->floatmargins['L']['y1'] += $yadj; + + // Update objattr in floatbuffer + if ($this->floatbuffer[$this->floatmargins['L']['id']]['border_left']['w']) { + $this->floatbuffer[$this->floatmargins['L']['id']]['BORDER-Y'] += $yadj; + } + $this->floatbuffer[$this->floatmargins['L']['id']]['INNER-Y'] += $yadj; + $this->floatbuffer[$this->floatmargins['L']['id']]['OUTER-Y'] += $yadj; + + // Unset values + $this->floatbuffer[$this->floatmargins['L']['id']]['skipline'] = false; + $this->floatmargins['L']['skipline'] = false; + $this->floatmargins['L']['id'] = ''; + } + // Update floatmargins - R + if (isset($this->floatmargins['R']) && $this->floatmargins['R']['skipline'] && $this->floatmargins['R']['y0'] != $this->y) { + $yadj = $this->y - $this->floatmargins['R']['y0']; + $this->floatmargins['R']['y0'] = $this->y; + $this->floatmargins['R']['y1'] += $yadj; + + // Update objattr in floatbuffer + if ($this->floatbuffer[$this->floatmargins['R']['id']]['border_left']['w']) { + $this->floatbuffer[$this->floatmargins['R']['id']]['BORDER-Y'] += $yadj; + } + $this->floatbuffer[$this->floatmargins['R']['id']]['INNER-Y'] += $yadj; + $this->floatbuffer[$this->floatmargins['R']['id']]['OUTER-Y'] += $yadj; + + // Unset values + $this->floatbuffer[$this->floatmargins['R']['id']]['skipline'] = false; + $this->floatmargins['R']['skipline'] = false; + $this->floatmargins['R']['id'] = ''; + } +} +/*-- END CSS-IMAGE-FLOAT --*/ + + + +//////////////////////////////////////////////////////////////////////////////// +// ADDED forcewrap - to call from inline OBJECT functions to breakwords if necessary in cell +//////////////////////////////////////////////////////////////////////////////// +function WordWrap(&$text, $maxwidth, $forcewrap = 0) { + $biggestword=0; + $toonarrow=false; + + $text = trim($text); + + if ($text==='') return 0; + $space = $this->GetCharWidth(' ',false); + $lines = explode("\n", $text); + $text = ''; + $count = 0; + foreach ($lines as $line) { + $words = explode(' ', $line); + $width = 0; + foreach ($words as $word) { + $word = trim($word); + $wordwidth = $this->GetStringWidth($word); + //Warn user that maxwidth is insufficient + if ($wordwidth > $maxwidth + 0.0001) { + if ($wordwidth > $biggestword) { $biggestword = $wordwidth; } + $toonarrow=true; + // ADDED + if ($forcewrap) { + while($wordwidth > $maxwidth) { + $chw = 0; // check width + for ( $i = 0; $i < mb_strlen($word, $this->mb_enc ); $i++ ) { + $chw = $this->GetStringWidth(mb_substr($word,0,$i+1,$this->mb_enc )); + if ($chw > $maxwidth ) { + if ($text) { + $text = rtrim($text)."\n".mb_substr($word,0,$i,$this->mb_enc ); + $count++; + } + else { + $text = mb_substr($word,0,$i,$this->mb_enc ); + } + $word = mb_substr($word,$i,mb_strlen($word, $this->mb_enc )-$i,$this->mb_enc ); + $wordwidth = $this->GetStringWidth($word); + $width = $maxwidth; + break; + } + } + } + } + } + + if ($width + $wordwidth < $maxwidth - 0.0001) { + $width += $wordwidth + $space; + $text .= $word.' '; + } + else { + $width = $wordwidth + $space; + $text = rtrim($text)."\n".$word.' '; + $count++; + } + } + $text .= "\n"; + $count++; + } + $text = rtrim($text); + + //Return -(wordsize) if word is bigger than maxwidth + + // ADDED + if ($forcewrap) { return $count; } + if (($toonarrow) && ($this->table_error_report)) { + $this->Error("Word is too long to fit in table - ".$this->table_error_report_param); + } + if ($toonarrow) return -$biggestword; + else return $count; +} + +/*-- END HTML-CSS --*/ + +function _SetTextRendering($mode) { + if (!(($mode == 0) || ($mode == 1) || ($mode == 2))) + $this->Error("Text rendering mode should be 0, 1 or 2 (value : $mode)"); + $tr = ($mode.' Tr'); + if($this->page>0 && ((isset($this->pageoutput[$this->page]['TextRendering']) && $this->pageoutput[$this->page]['TextRendering'] != $tr) || !isset($this->pageoutput[$this->page]['TextRendering']) || $this->keep_block_together)) { $this->_out($tr); } + $this->pageoutput[$this->page]['TextRendering'] = $tr; + +} + +function SetTextOutline($params=array()) { // mPDF 5.6.07 + if (isset($params['outline-s']) && $params['outline-s']) + { + $this->SetLineWidth($params['outline-WIDTH']); + $this->SetDColor($params['outline-COLOR']); + $tr = ('2 Tr'); + if($this->page>0 && ((isset($this->pageoutput[$this->page]['TextRendering']) && $this->pageoutput[$this->page]['TextRendering'] != $tr) || !isset($this->pageoutput[$this->page]['TextRendering']) || $this->keep_block_together)) { $this->_out($tr); } + $this->pageoutput[$this->page]['TextRendering'] = $tr; + } + else //Now resets all values + { + $this->SetLineWidth(0.2); + $this->SetDColor($this->ConvertColor(0)); + $this->_SetTextRendering(0); + $tr = ('0 Tr'); + if($this->page>0 && ((isset($this->pageoutput[$this->page]['TextRendering']) && $this->pageoutput[$this->page]['TextRendering'] != $tr) || !isset($this->pageoutput[$this->page]['TextRendering']) || $this->keep_block_together)) { $this->_out($tr); } + $this->pageoutput[$this->page]['TextRendering'] = $tr; + } +} + +function Image($file,$x,$y,$w=0,$h=0,$type='',$link='',$paint=true, $constrain=true, $watermark=false, $shownoimg=true, $allowvector=true) { + $orig_srcpath = $file; + $this->GetFullPath($file); + + $info=$this->_getImage($file, true, $allowvector, $orig_srcpath ); + if(!$info && $paint) { + $info = $this->_getImage($this->noImageFile); + if ($info) { + $file = $this->noImageFile; + $w = ($info['w'] * (25.4/$this->dpi)); // 14 x 16px + $h = ($info['h'] * (25.4/$this->dpi)); // 14 x 16px + } + } + if(!$info) return false; + //Automatic width and height calculation if needed + if($w==0 and $h==0) { +/*-- IMAGES-WMF --*/ + if ($info['type']=='wmf') { + // WMF units are twips (1/20pt) + // divide by 20 to get points + // divide by k to get user units + $w = abs($info['w'])/(20*_MPDFK); + $h = abs($info['h']) / (20*_MPDFK); + } + else +/*-- END IMAGES-WMF --*/ + if ($info['type']=='svg') { + // returned SVG units are pts + // divide by k to get user units (mm) + $w = abs($info['w'])/_MPDFK; + $h = abs($info['h']) /_MPDFK; + } + else { + //Put image at default image dpi + $w=($info['w']/_MPDFK) * (72/$this->img_dpi); + $h=($info['h']/_MPDFK) * (72/$this->img_dpi); + } + } + if($w==0) $w=abs($h*$info['w']/$info['h']); + if($h==0) $h=abs($w*$info['h']/$info['w']); + +/*-- WATERMARK --*/ + if ($watermark) { + $maxw = $this->w; + $maxh = $this->h; + // Size = D PF or array + if (is_array($this->watermark_size)) { + $w = $this->watermark_size[0]; + $h = $this->watermark_size[1]; + } + else if (!is_string($this->watermark_size)) { + $maxw -= $this->watermark_size*2; + $maxh -= $this->watermark_size*2; + $w = $maxw; + $h=abs($w*$info['h']/$info['w']); + if ($h > $maxh ) { + $h = $maxh ; $w=abs($h*$info['w']/$info['h']); + } + } + else if ($this->watermark_size == 'F') { + if ($this->ColActive) { $maxw = $this->w - ($this->DeflMargin + $this->DefrMargin); } + else { $maxw = $this->pgwidth; } + $maxh = $this->h - ($this->tMargin + $this->bMargin); + $w = $maxw; + $h=abs($w*$info['h']/$info['w']); + if ($h > $maxh ) { + $h = $maxh ; $w=abs($h*$info['w']/$info['h']); + } + } + else if ($this->watermark_size == 'P') { // Default P + $w = $maxw; + $h=abs($w*$info['h']/$info['w']); + if ($h > $maxh ) { + $h = $maxh ; $w=abs($h*$info['w']/$info['h']); + } + } + // Automatically resize to maximum dimensions of page if too large + if ($w > $maxw) { + $w = $maxw; + $h=abs($w*$info['h']/$info['w']); + } + if ($h > $maxh ) { + $h = $maxh ; + $w=abs($h*$info['w']/$info['h']); + } + // Position + if (is_array($this->watermark_pos)) { + $x = $this->watermark_pos[0]; + $y = $this->watermark_pos[1]; + } + else if ($this->watermark_pos == 'F') { // centred on printable area + if ($this->ColActive) { // *COLUMNS* + if (($this->mirrorMargins) && (($this->page)%2==0)) { $xadj = $this->DeflMargin-$this->DefrMargin; } // *COLUMNS* + else { $xadj = 0; } // *COLUMNS* + $x = ($this->DeflMargin - $xadj + ($this->w - ($this->DeflMargin + $this->DefrMargin))/2) - ($w/2); // *COLUMNS* + } // *COLUMNS* + else { // *COLUMNS* + $x = ($this->lMargin + ($this->pgwidth)/2) - ($w/2); + } // *COLUMNS* + $y = ($this->tMargin + ($this->h - ($this->tMargin + $this->bMargin))/2) - ($h/2); + } + else { // default P - centred on whole page + $x = ($this->w/2) - ($w/2); + $y = ($this->h/2) - ($h/2); + } +/*-- IMAGES-WMF --*/ + if ($info['type']=='wmf') { + $sx = $w*_MPDFK / $info['w']; + $sy = -$h*_MPDFK / $info['h']; + $outstring = sprintf('q %.3F 0 0 %.3F %.3F %.3F cm /FO%d Do Q', $sx, $sy, $x*_MPDFK-$sx*$info['x'], (($this->h-$y)*_MPDFK)-$sy*$info['y'], $info['i']); + } + else +/*-- END IMAGES-WMF --*/ + if ($info['type']=='svg') { + $sx = $w*_MPDFK / $info['w']; + $sy = -$h*_MPDFK / $info['h']; + $outstring = sprintf('q %.3F 0 0 %.3F %.3F %.3F cm /FO%d Do Q', $sx, $sy, $x*_MPDFK-$sx*$info['x'], (($this->h-$y)*_MPDFK)-$sy*$info['y'], $info['i']); + } + else { + $outstring = sprintf("q %.3F 0 0 %.3F %.3F %.3F cm /I%d Do Q",$w*_MPDFK,$h*_MPDFK,$x*_MPDFK,($this->h-($y+$h))*_MPDFK,$info['i']); + } + + if ($this->watermarkImgBehind) { + $outstring = $this->watermarkImgAlpha . "\n" . $outstring . "\n" . $this->SetAlpha(1, 'Normal', true) . "\n"; + $this->pages[$this->page] = preg_replace('/(___BACKGROUND___PATTERNS'.date('jY').')/', "\n".$outstring."\n".'\\1', $this->pages[$this->page]); + } + else { $this->_out($outstring); } + + return 0; + } // end of IF watermark +/*-- END WATERMARK --*/ + + if ($constrain) { + // Automatically resize to maximum dimensions of page if too large + if (isset($this->blk[$this->blklvl]['inner_width']) && $this->blk[$this->blklvl]['inner_width']) { $maxw = $this->blk[$this->blklvl]['inner_width']; } + else { $maxw = $this->pgwidth; } + if ($w > $maxw) { + $w = $maxw; + $h=abs($w*$info['h']/$info['w']); + } + if ($h > $this->h - ($this->tMargin + $this->bMargin + 1)) { // see below - +10 to avoid drawing too close to border of page + $h = $this->h - ($this->tMargin + $this->bMargin + 1) ; + if ($this->fullImageHeight) { $h = $this->fullImageHeight; } + $w=abs($h*$info['w']/$info['h']); + } + + + //Avoid drawing out of the paper(exceeding width limits). + //if ( ($x + $w) > $this->fw ) { + if ( ($x + $w) > $this->w ) { + $x = $this->lMargin; + $y += 5; + } + + $changedpage = false; + $oldcolumn = $this->CurrCol; + //Avoid drawing out of the page. + if($y+$h>$this->PageBreakTrigger and !$this->InFooter and $this->AcceptPageBreak()) { + $this->AddPage($this->CurOrientation); + // Added to correct for OddEven Margins + $x=$x +$this->MarginCorrection; + $y = $tMargin + $this->margin_header; + $changedpage = true; + } +/*-- COLUMNS --*/ + // COLS + // COLUMN CHANGE + if ($this->CurrCol != $oldcolumn) { + $y = $this->y0; + $x += $this->ChangeColumn * ($this->ColWidth+$this->ColGap); + $this->x += $this->ChangeColumn * ($this->ColWidth+$this->ColGap); + } +/*-- END COLUMNS --*/ + } // end of IF constrain + +/*-- IMAGES-WMF --*/ + if ($info['type']=='wmf') { + $sx = $w*_MPDFK / $info['w']; + $sy = -$h*_MPDFK / $info['h']; + $outstring = sprintf('q %.3F 0 0 %.3F %.3F %.3F cm /FO%d Do Q', $sx, $sy, $x*_MPDFK-$sx*$info['x'], (($this->h-$y)*_MPDFK)-$sy*$info['y'], $info['i']); + } + else +/*-- END IMAGES-WMF --*/ + if ($info['type']=='svg') { + $sx = $w*_MPDFK / $info['w']; + $sy = -$h*_MPDFK / $info['h']; + $outstring = sprintf('q %.3F 0 0 %.3F %.3F %.3F cm /FO%d Do Q', $sx, $sy, $x*_MPDFK-$sx*$info['x'], (($this->h-$y)*_MPDFK)-$sy*$info['y'], $info['i']); + } + else { + $outstring = sprintf("q %.3F 0 0 %.3F %.3F %.3F cm /I%d Do Q",$w*_MPDFK,$h*_MPDFK,$x*_MPDFK,($this->h-($y+$h))*_MPDFK,$info['i']); + } + + if($paint) { + $this->_out($outstring); + if($link) $this->Link($x,$y,$w,$h,$link); + + // Avoid writing text on top of the image. // THIS WAS OUTSIDE THE if ($paint) bit!!!!!!!!!!!!!!!! + $this->y = $y + $h; + } + + //Return width-height array + $sizesarray['WIDTH'] = $w; + $sizesarray['HEIGHT'] = $h; + $sizesarray['X'] = $x; //Position before painting image + $sizesarray['Y'] = $y; //Position before painting image + $sizesarray['OUTPUT'] = $outstring; + + $sizesarray['IMAGE_ID'] = $info['i']; + $sizesarray['itype'] = $info['type']; + $sizesarray['set-dpi'] = $info['set-dpi']; + return $sizesarray; +} + + + +//============================================================= +//============================================================= +//============================================================= +//============================================================= +//============================================================= +/*-- HTML-CSS --*/ + +function _getObjAttr($t) { + $c = explode("\xbb\xa4\xac",$t,2); + $c = explode(",",$c[1],2); + foreach($c as $v) { + $v = explode("=",$v,2); + $sp[$v[0]] = $v[1]; + } + return (unserialize($sp['objattr'])); +} + + +function inlineObject($type,$x,$y,$objattr,$Lmargin,$widthUsed,$maxWidth,$lineHeight,$paint=false,$is_table=false) +{ + if ($is_table) { $k = $this->shrin_k; } else { $k = 1; } + + // NB $x is only used when paint=true + // Lmargin not used + $w = 0; + if (isset($objattr['width'])) { $w = $objattr['width']/$k; } + $h = 0; + if (isset($objattr['height'])) { $h = abs($objattr['height']/$k); } + $widthLeft = $maxWidth - $widthUsed; + $maxHeight = $this->h - ($this->tMargin + $this->bMargin + 10) ; + if ($this->fullImageHeight) { $maxHeight = $this->fullImageHeight; } + // For Images + if (isset($objattr['border_left'])) { + $extraWidth = ($objattr['border_left']['w'] + $objattr['border_right']['w'] + $objattr['margin_left']+ $objattr['margin_right'])/$k; + $extraHeight = ($objattr['border_top']['w'] + $objattr['border_bottom']['w'] + $objattr['margin_top']+ $objattr['margin_bottom'])/$k; + + if ($type == 'image' || $type == 'barcode' || $type == 'textcircle') { + $extraWidth += ($objattr['padding_left'] + $objattr['padding_right'])/$k; + $extraHeight += ($objattr['padding_top'] + $objattr['padding_bottom'])/$k; + } + } + + if (!isset($objattr['vertical-align'])) { $objattr['vertical-align'] = 'M'; } + + if ($type == 'image' || (isset($objattr['subtype']) && $objattr['subtype'] == 'IMAGE')) { + if (isset($objattr['itype']) && ($objattr['itype'] == 'wmf' || $objattr['itype'] == 'svg')) { + $file = $objattr['file']; + $info=$this->formobjects[$file]; + } + else if (isset($objattr['file'])) { + $file = $objattr['file']; + $info=$this->images[$file]; + } + } + if ($type == 'annot' || $type == 'bookmark' || $type == 'indexentry' || $type == 'toc') { + $w = 0.00001; + $h = 0.00001; + } + + // TEST whether need to skipline + if (!$paint) { + if ($type == 'hr') { // always force new line + if (($y + $h + $lineHeight > $this->PageBreakTrigger) && !$this->InFooter && !$is_table) { return array(-2, $w ,$h ); } // New page + new line + else { return array(1, $w ,$h ); } // new line + } + else { + if ($widthUsed > 0 && $w > $widthLeft && (!$is_table || $type != 'image')) { // New line needed + if (($y + $h + $lineHeight > $this->PageBreakTrigger) && !$this->InFooter) { return array(-2,$w ,$h ); } // New page + new line + return array(1,$w ,$h ); // new line + } + else if ($widthUsed > 0 && $w > $widthLeft && $is_table) { // New line needed in TABLE + return array(1,$w ,$h ); // new line + } + // Will fit on line but NEW PAGE REQUIRED + else if (($y + $h > $this->PageBreakTrigger) && !$this->InFooter && !$is_table) { return array(-1,$w ,$h ); } + else { return array(0,$w ,$h ); } + } + } + + if ($type == 'annot' || $type == 'bookmark' || $type == 'indexentry' || $type == 'toc') { + $w = 0.00001; + $h = 0.00001; + $objattr['BORDER-WIDTH'] = 0; + $objattr['BORDER-HEIGHT'] = 0; + $objattr['BORDER-X'] = $x; + $objattr['BORDER-Y'] = $y; + $objattr['INNER-WIDTH'] = 0; + $objattr['INNER-HEIGHT'] = 0; + $objattr['INNER-X'] = $x; + $objattr['INNER-Y'] = $y; + } + + if ($type == 'image') { + // Automatically resize to width remaining + if ($w > $widthLeft && !$is_table) { + $w = $widthLeft ; + $h=abs($w*$info['h']/$info['w']); + } + $img_w = $w - $extraWidth ; + $img_h = $h - $extraHeight ; + + $objattr['BORDER-WIDTH'] = $img_w + $objattr['padding_left']/$k + $objattr['padding_right']/$k + (($objattr['border_left']['w']/$k + $objattr['border_right']['w']/$k)/2) ; + $objattr['BORDER-HEIGHT'] = $img_h + $objattr['padding_top']/$k + $objattr['padding_bottom']/$k + (($objattr['border_top']['w']/$k + $objattr['border_bottom']['w']/$k)/2) ; + $objattr['BORDER-X'] = $x + $objattr['margin_left']/$k + (($objattr['border_left']['w']/$k)/2) ; + $objattr['BORDER-Y'] = $y + $objattr['margin_top']/$k + (($objattr['border_top']['w']/$k)/2) ; + $objattr['INNER-WIDTH'] = $img_w; + $objattr['INNER-HEIGHT'] = $img_h; + $objattr['INNER-X'] = $x + $objattr['padding_left']/$k + $objattr['margin_left']/$k + ($objattr['border_left']['w']/$k); + $objattr['INNER-Y'] = $y + $objattr['padding_top']/$k + $objattr['margin_top']/$k + ($objattr['border_top']['w']/$k) ; + $objattr['ID'] = $info['i']; + } + + if ($type == 'input' && $objattr['subtype'] == 'IMAGE') { + $img_w = $w - $extraWidth ; + $img_h = $h - $extraHeight ; + $objattr['BORDER-WIDTH'] = $img_w + (($objattr['border_left']['w']/$k + $objattr['border_right']['w']/$k)/2) ; + $objattr['BORDER-HEIGHT'] = $img_h + (($objattr['border_top']['w']/$k + $objattr['border_bottom']['w']/$k)/2) ; + $objattr['BORDER-X'] = $x + $objattr['margin_left']/$k + (($objattr['border_left']['w']/$k)/2) ; + $objattr['BORDER-Y'] = $y + $objattr['margin_top']/$k + (($objattr['border_top']['w']/$k)/2) ; + $objattr['INNER-WIDTH'] = $img_w; + $objattr['INNER-HEIGHT'] = $img_h; + $objattr['INNER-X'] = $x + $objattr['margin_left']/$k + ($objattr['border_left']['w']/$k); + $objattr['INNER-Y'] = $y + $objattr['margin_top']/$k + ($objattr['border_top']['w']/$k) ; + $objattr['ID'] = $info['i']; + } + + if ($type == 'barcode' || $type == 'textcircle') { + $b_w = $w - $extraWidth ; + $b_h = $h - $extraHeight ; + $objattr['BORDER-WIDTH'] = $b_w + $objattr['padding_left']/$k + $objattr['padding_right']/$k + (($objattr['border_left']['w']/$k + $objattr['border_right']['w']/$k)/2) ; + $objattr['BORDER-HEIGHT'] = $b_h + $objattr['padding_top']/$k + $objattr['padding_bottom']/$k + (($objattr['border_top']['w']/$k + $objattr['border_bottom']['w']/$k)/2) ; + $objattr['BORDER-X'] = $x + $objattr['margin_left']/$k + (($objattr['border_left']['w']/$k)/2) ; + $objattr['BORDER-Y'] = $y + $objattr['margin_top']/$k + (($objattr['border_top']['w']/$k)/2) ; + $objattr['INNER-X'] = $x + $objattr['padding_left']/$k + $objattr['margin_left']/$k + ($objattr['border_left']['w']/$k); + $objattr['INNER-Y'] = $y + $objattr['padding_top']/$k + $objattr['margin_top']/$k + ($objattr['border_top']['w']/$k) ; + $objattr['INNER-WIDTH'] = $b_w; + $objattr['INNER-HEIGHT'] = $b_h; + } + + + if ($type == 'textarea') { + // Automatically resize to width remaining + if ($w > $widthLeft && !$is_table) { + $w = $widthLeft ; + } + if (($y + $h > $this->PageBreakTrigger) && !$this->InFooter) { + $h=$this->h - $y - $this->bMargin; + } + } + + if ($type == 'hr') { + if ($is_table) { + $objattr['INNER-WIDTH'] = $maxWidth * $objattr['W-PERCENT']/100; + $objattr['width'] = $objattr['INNER-WIDTH']; + $w = $maxWidth; + } + else { + if ($w>$maxWidth) { $w = $maxWidth; } + $objattr['INNER-WIDTH'] = $w; + $w = $maxWidth; + } + } + + + + if (($type == 'select') || ($type == 'input' && ($objattr['subtype'] == 'TEXT' || $objattr['subtype'] == 'PASSWORD'))) { + // Automatically resize to width remaining + if ($w > $widthLeft && !$is_table) { + $w = $widthLeft; + } + } + + if ($type == 'textarea' || $type == 'select' || $type == 'input') { + if (isset($objattr['fontsize'])) $objattr['fontsize'] /= $k; + if (isset($objattr['linewidth'])) $objattr['linewidth'] /= $k; + } + + if (!isset($objattr['BORDER-Y'])) { $objattr['BORDER-Y'] = 0; } + if (!isset($objattr['BORDER-X'])) { $objattr['BORDER-X'] = 0; } + if (!isset($objattr['INNER-Y'])) { $objattr['INNER-Y'] = 0; } + if (!isset($objattr['INNER-X'])) { $objattr['INNER-X'] = 0; } + + //Return width-height array + $objattr['OUTER-WIDTH'] = $w; + $objattr['OUTER-HEIGHT'] = $h; + $objattr['OUTER-X'] = $x; + $objattr['OUTER-Y'] = $y; + return $objattr; +} + +/*-- END HTML-CSS --*/ + +//============================================================= +//============================================================= +//============================================================= +//============================================================= +//============================================================= + +function SetLineJoin($mode=0) +{ + $s=sprintf('%d j',$mode); + if($this->page>0 && ((isset($this->pageoutput[$this->page]['LineJoin']) && $this->pageoutput[$this->page]['LineJoin'] != $s) || !isset($this->pageoutput[$this->page]['LineJoin']) || $this->keep_block_together)) { $this->_out($s); } + $this->pageoutput[$this->page]['LineJoin'] = $s; + +} +function SetLineCap($mode=2) { + $s=sprintf('%d J',$mode); + if($this->page>0 && ((isset($this->pageoutput[$this->page]['LineCap']) && $this->pageoutput[$this->page]['LineCap'] != $s) || !isset($this->pageoutput[$this->page]['LineCap']) || $this->keep_block_together)) { $this->_out($s); } + $this->pageoutput[$this->page]['LineCap'] = $s; + +} + +function SetDash($black=false,$white=false) +{ + if($black and $white) $s=sprintf('[%.3F %.3F] 0 d',$black*_MPDFK,$white*_MPDFK); + else $s='[] 0 d'; + if($this->page>0 && ((isset($this->pageoutput[$this->page]['Dash']) && $this->pageoutput[$this->page]['Dash'] != $s) || !isset($this->pageoutput[$this->page]['Dash']) || $this->keep_block_together)) { $this->_out($s); } + $this->pageoutput[$this->page]['Dash'] = $s; + +} + +function SetDisplayPreferences($preferences) { + // String containing any or none of /HideMenubar/HideToolbar/HideWindowUI/DisplayDocTitle/CenterWindow/FitWindow + $this->DisplayPreferences .= $preferences; +} + + +function Ln($h='',$collapsible=0) +{ +// Added collapsible to allow collapsible top-margin on new page + //Line feed; default value is last cell height + $this->x = $this->lMargin + $this->blk[$this->blklvl]['outer_left_margin']; + if ($collapsible && ($this->y==$this->tMargin) && (!$this->ColActive)) { $h = 0; } + if(is_string($h)) $this->y+=$this->lasth; + else $this->y+=$h; +} + +/*-- HTML-CSS --*/ +// $state = 0 normal; 1 top; 2 bottom; 3 top and bottom +function DivLn($h,$level=-3,$move_y=true,$collapsible=false,$state=0) { + // this->x is returned as it was + // adds lines (y) where DIV bgcolors are filled in + // allows .00001 as nominal height used for bookmarks/annotations etc. + if ($collapsible && (sprintf("%0.4f", $this->y)==sprintf("%0.4f", $this->tMargin)) && (!$this->ColActive)) { return; } + if ($collapsible && (sprintf("%0.4f", $this->y)==sprintf("%0.4f", $this->y0)) && ($this->ColActive) && $this->CurrCol == 0) { return; } // *COLUMNS* + + // Still use this method if columns or page-break-inside: avoid, as it allows repositioning later + // otherwise, now uses PaintDivBB() + if (!$this->ColActive && !$this->keep_block_together && !$this->kwt) { + if ($move_y && !$this->ColActive) { $this->y += $h; } + return; + } + + if ($level == -3) { $level = $this->blklvl; } + $firstblockfill = $this->GetFirstBlockFill(); + if ($firstblockfill && $this->blklvl > 0 && $this->blklvl >= $firstblockfill) { + $last_x = 0; + $last_w = 0; + $last_fc = $this->FillColor; + $bak_x = $this->x; + $bak_h = $this->divheight; + $this->divheight = 0; // Temporarily turn off divheight - as Cell() uses it to check for PageBreak + for ($blvl=$firstblockfill;$blvl<=$level;$blvl++) { + $this->SetBlockFill($blvl); + $this->x = $this->lMargin + $this->blk[$blvl]['outer_left_margin']; + if ($last_x != $this->lMargin + $this->blk[$blvl]['outer_left_margin'] || $last_w != $this->blk[$blvl]['width'] || $last_fc != $this->FillColor || $this->blk[$blvl]['border_top']['s'] || $this->blk[$blvl]['border_bottom']['s'] || $this->blk[$blvl]['border_left']['s'] || $this->blk[$blvl]['border_right']['s']) { // mPDF 5.6.55 + $x = $this->x; + $this->Cell( ($this->blk[$blvl]['width']), $h, '', '', 0, '', 1); + if (!$this->keep_block_together && !$this->writingHTMLheader && !$this->writingHTMLfooter) { + $this->x = $x; + // $state = 0 normal; 1 top; 2 bottom; 3 top and bottom + if ($blvl == $this->blklvl) { $this->PaintDivLnBorder($state,$blvl,$h); } + else { $this->PaintDivLnBorder(0,$blvl,$h); } + } + } + $last_x = $this->lMargin + $this->blk[$blvl]['outer_left_margin']; + $last_w = $this->blk[$blvl]['width']; + $last_fc = $this->FillColor; + } + // Reset current block fill + if (isset($this->blk[$this->blklvl]['bgcolorarray'])) { + $bcor = $this->blk[$this->blklvl]['bgcolorarray']; + $this->SetFColor($bcor); + } + $this->x = $bak_x; + $this->divheight = $bak_h; + } + if ($move_y) { $this->y += $h; } +} +/*-- END HTML-CSS --*/ + + +function SetX($x) +{ + //Set x position + if($x >= 0) $this->x=$x; + else $this->x = $this->w + $x; +} + +function SetY($y) +{ + //Set y position and reset x + $this->x=$this->lMargin; + if($y>=0) + $this->y=$y; + else + $this->y=$this->h+$y; +} + +function SetXY($x,$y) +{ + //Set x and y positions + $this->SetY($y); + $this->SetX($x); +} + + +function Output($name='',$dest='') +{ + //Output PDF to some destination + if ($this->showStats) { + echo '<div>Generated in '.sprintf('%.2F',(microtime(true) - $this->time0)).' seconds</div>'; + } + //Finish document if necessary + if ($this->progressBar) { $this->UpdateProgressBar(1,'100','Finished'); } // *PROGRESS-BAR* + if($this->state < 3) $this->Close(); + if ($this->progressBar) { $this->UpdateProgressBar(2,'100','Finished'); } // *PROGRESS-BAR* + // fn. error_get_last is only in PHP>=5.2 + if ($this->debug && function_exists('error_get_last') && error_get_last()) { + $e = error_get_last(); + if (($e['type'] < 2048 && $e['type'] != 8) || (intval($e['type']) & intval(ini_get("error_reporting")))) { + echo "<p>Error message detected - PDF file generation aborted.</p>"; + echo $e['message'].'<br />'; + echo 'File: '.$e['file'].'<br />'; + echo 'Line: '.$e['line'].'<br />'; + exit; + } + } + + + if (($this->PDFA || $this->PDFX) && $this->encrypted) { $this->Error("PDFA1-b or PDFX/1-a does not permit encryption of documents."); } + if (count($this->PDFAXwarnings) && (($this->PDFA && !$this->PDFAauto) || ($this->PDFX && !$this->PDFXauto))) { + if ($this->PDFA) { + echo '<div>WARNING - This file could not be generated as it stands as a PDFA1-b compliant file.</div>'; + echo '<div>These issues can be automatically fixed by mPDF using <i>$mpdf->PDFAauto=true;</i></div>'; + echo '<div>Action that mPDF will take to automatically force PDFA1-b compliance are shown in brackets.</div>'; + } + else { + echo '<div>WARNING - This file could not be generated as it stands as a PDFX/1-a compliant file.</div>'; + echo '<div>These issues can be automatically fixed by mPDF using <i>$mpdf->PDFXauto=true;</i></div>'; + echo '<div>Action that mPDF will take to automatically force PDFX/1-a compliance are shown in brackets.</div>'; + } + echo '<div>Warning(s) generated:</div><ul>'; + $this->PDFAXwarnings = array_unique($this->PDFAXwarnings); + foreach($this->PDFAXwarnings AS $w) { + echo '<li>'.$w.'</li>'; + } + echo '</ul>'; + exit; + } + + if ($this->showStats) { + echo '<div>Compiled in '.sprintf('%.2F',(microtime(true) - $this->time0)).' seconds (total)</div>'; + echo '<div>Peak Memory usage '.number_format((memory_get_peak_usage(true)/(1024*1024)),2).' MB</div>'; + echo '<div>PDF file size '.number_format((strlen($this->buffer)/1024)).' kB</div>'; + echo '<div>Number of fonts '.count($this->fonts).'</div>'; + exit; + } + + + if(is_bool($dest)) $dest=$dest ? 'D' : 'F'; + $dest=strtoupper($dest); + if($dest=='') { + if($name=='') { + $name='mpdf.pdf'; + $dest='I'; + } + else { $dest='F'; } + } + +/*-- PROGRESS-BAR --*/ + if ($this->progressBar && ($dest=='D' || $dest=='I')) { + if($name=='') { $name='mpdf.pdf'; } + $tempfile = '_tempPDF'.RAND(1,10000); + //Save to local file + $f=fopen(_MPDF_TEMP_PATH.$tempfile.'.pdf','wb'); + if(!$f) $this->Error('Unable to create temporary output file: '.$tempfile.'.pdf'); + fwrite($f,$this->buffer,strlen($this->buffer)); + fclose($f); + $this->UpdateProgressBar(3,'','Finished'); + + echo '<script type="text/javascript"> + + var form = document.createElement("form"); + form.setAttribute("method", "post"); + form.setAttribute("action", "'._MPDF_URI.'includes/out.php"); + + var hiddenField = document.createElement("input"); + hiddenField.setAttribute("type", "hidden"); + hiddenField.setAttribute("name", "filename"); + hiddenField.setAttribute("value", "'.$tempfile.'"); + form.appendChild(hiddenField); + + var hiddenField = document.createElement("input"); + hiddenField.setAttribute("type", "hidden"); + hiddenField.setAttribute("name", "dest"); + hiddenField.setAttribute("value", "'.$dest.'"); + form.appendChild(hiddenField); + + var hiddenField = document.createElement("input"); + hiddenField.setAttribute("type", "hidden"); + hiddenField.setAttribute("name", "opname"); + hiddenField.setAttribute("value", "'.$name.'"); + form.appendChild(hiddenField); + + var hiddenField = document.createElement("input"); + hiddenField.setAttribute("type", "hidden"); + hiddenField.setAttribute("name", "path"); + hiddenField.setAttribute("value", "'.urlencode(_MPDF_TEMP_PATH).'"); + form.appendChild(hiddenField); + + document.body.appendChild(form); + form.submit(); + + </script> + </div> + </body> + </html>'; + exit; + } + else { + if ($this->progressBar) { $this->UpdateProgressBar(3,'','Finished'); } +/*-- END PROGRESS-BAR --*/ + + switch($dest) { + case 'I': + if ($this->debug && !$this->allow_output_buffering && ob_get_contents()) { echo "<p>Output has already been sent from the script - PDF file generation aborted.</p>"; exit; } + //Send to standard output + if(PHP_SAPI!='cli') { + //We send to a browser + header('Content-Type: application/pdf'); + if(headers_sent()) + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + if (!isset($_SERVER['HTTP_ACCEPT_ENCODING']) OR empty($_SERVER['HTTP_ACCEPT_ENCODING'])) { + // don't use length if server using compression + header('Content-Length: '.strlen($this->buffer)); + } + header('Content-disposition: inline; filename="'.$name.'"'); + header('Cache-Control: public, must-revalidate, max-age=0'); + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + } + echo $this->buffer; + break; + case 'D': + //Download file + header('Content-Description: File Transfer'); + if (headers_sent()) + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + header('Content-Transfer-Encoding: binary'); + header('Cache-Control: public, must-revalidate, max-age=0'); + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + header('Content-Type: application/force-download'); + header('Content-Type: application/octet-stream', false); + header('Content-Type: application/download', false); + header('Content-Type: application/pdf', false); + if (!isset($_SERVER['HTTP_ACCEPT_ENCODING']) OR empty($_SERVER['HTTP_ACCEPT_ENCODING'])) { + // don't use length if server using compression + header('Content-Length: '.strlen($this->buffer)); + } + header('Content-disposition: attachment; filename="'.$name.'"'); + echo $this->buffer; + break; + case 'F': + //Save to local file + $f=fopen($name,'wb'); + if(!$f) $this->Error('Unable to create output file: '.$name); + fwrite($f,$this->buffer,strlen($this->buffer)); + fclose($f); + break; + case 'S': + //Return as a string + return $this->buffer; + default: + $this->Error('Incorrect output destination: '.$dest); + } + + } // *PROGRESS-BAR* + //====================================================================================================== + // DELETE OLD TMP FILES - Housekeeping + // Delete any files in tmp/ directory that are >1 hrs old + $interval = 3600; + if ($handle = opendir(preg_replace('/\/$/','',_MPDF_TEMP_PATH))) { + while (false !== ($file = readdir($handle))) { + if (!is_dir($file) && ((filemtime(_MPDF_TEMP_PATH.$file)+$interval) < time()) && ($file != "..") && ($file != ".")) { // mPDF 5.4.19 + unlink(_MPDF_TEMP_PATH.$file); + } + } + closedir($handle); + } + //============================================================================================================== + + return ''; +} + + +// ***************************************************************************** +// * +// Protected methods * +// * +// ***************************************************************************** +function _dochecks() +{ + //Check for locale-related bug + if(1.1==1) + $this->Error('Don\'t alter the locale before including mPDF'); + //Check for decimal separator + if(sprintf('%.1f',1.0)!='1.0') + setlocale(LC_NUMERIC,'C'); + // mPDF 5.4.11 + $mqr=ini_get("magic_quotes_runtime"); + if ($mqr) { $this->Error('mPDF requires magic_quotes_runtime to be turned off e.g. by using ini_set("magic_quotes_runtime", 0);'); } +} + +function _begindoc() +{ + //Start document + $this->state=1; + $this->_out('%PDF-'.$this->pdf_version); + $this->_out('%'.chr(226).chr(227).chr(207).chr(211)); // 4 chars > 128 to show binary file +} + + +/*-- HTMLHEADERS-FOOTERS --*/ +function _puthtmlheaders() { + $this->state=2; + $nb=$this->page; + for($n=1;$n<=$nb;$n++) { + if ($this->mirrorMargins && $n%2==0) { $OE = 'E'; } // EVEN + else { $OE = 'O'; } + $this->page = $n; + if (isset($this->saveHTMLHeader[$n][$OE])) { + $html = $this->saveHTMLHeader[$n][$OE]['html']; + $this->lMargin = $this->saveHTMLHeader[$n][$OE]['ml']; + $this->rMargin = $this->saveHTMLHeader[$n][$OE]['mr']; + $this->tMargin = $this->saveHTMLHeader[$n][$OE]['mh']; + $this->bMargin = $this->saveHTMLHeader[$n][$OE]['mf']; + $this->margin_header = $this->saveHTMLHeader[$n][$OE]['mh']; + $this->margin_footer = $this->saveHTMLHeader[$n][$OE]['mf']; + $this->w = $this->saveHTMLHeader[$n][$OE]['pw']; + $this->h = $this->saveHTMLHeader[$n][$OE]['ph']; + $rotate = (isset($this->saveHTMLHeader[$n][$OE]['rotate']) ? $this->saveHTMLHeader[$n][$OE]['rotate'] : null); + $this->Reset(); + $this->pageoutput[$n] = array(); + $this->pgwidth = $this->w - $this->lMargin - $this->rMargin; + $this->x = $this->lMargin; + $this->y = $this->margin_header; + // mPDF 5.6.47 + $pn = $this->docPageNum($n); + if ($pn) + $pnstr = $this->pagenumPrefix.$pn.$this->pagenumSuffix; + else { $pnstr = ''; } + $html = str_replace('{PAGENO}',$pnstr,$html); + $pnt = $this->docPageNumTotal($n); + if ($pnt) + $pntstr = $this->nbpgPrefix.$pnt.$this->nbpgSuffix; + else { $pntstr = ''; } + $html = str_replace($this->aliasNbPgGp,$pntstr,$html ); // {nbpg} + $html = str_replace($this->aliasNbPg,$nb,$html ); // {nb} + $html = preg_replace('/\{DATE\s+(.*?)\}/e',"date('\\1')",$html ); + + $this->HTMLheaderPageLinks = array(); + $this->HTMLheaderPageAnnots = array(); + $this->HTMLheaderPageForms = array(); + $this->pageBackgrounds = array(); + + $this->writingHTMLheader = true; + $this->WriteHTML($html , 4); // parameter 4 saves output to $this->headerbuffer + $this->writingHTMLheader = false; + $this->Reset(); + $this->pageoutput[$n] = array(); + + $s = $this->PrintPageBackgrounds(); + $this->headerbuffer = $s . $this->headerbuffer; + $os = ''; + if ($rotate) { + $os .= sprintf('q 0 -1 1 0 0 %.3F cm ',($this->w*_MPDFK)); + } + $os .= $this->headerbuffer ; + if ($rotate) { + $os .= ' Q' . "\n"; + } + + // Writes over the page background but behind any other output on page + $os = preg_replace('/\\\\/','\\\\\\\\',$os); + $this->pages[$n] = preg_replace('/(___HEADER___MARKER'.date('jY').')/', "\n".$os."\n".'\\1', $this->pages[$n]); + + $lks = $this->HTMLheaderPageLinks; + foreach($lks AS $lk) { + if ($rotate) { + $lw = $lk[2]; + $lh = $lk[3]; + $lk[2] = $lh; + $lk[3] = $lw; // swap width and height + $ax = $lk[0]/_MPDFK; + $ay = $lk[1]/_MPDFK; + $bx = $ay-($lh/_MPDFK); + $by = $this->w-$ax; + $lk[0] = $bx*_MPDFK; + $lk[1] = ($this->h-$by)*_MPDFK - $lw; + } + $this->PageLinks[$n][]=$lk; + } +/*-- FORMS --*/ + foreach($this->HTMLheaderPageForms AS $f) { + $this->form->forms[$f['n']] = $f; + } +/*-- END FORMS --*/ + + + } + if (isset($this->saveHTMLFooter[$n][$OE])) { + $html = $this->saveHTMLFooter[$this->page][$OE]['html']; + $this->lMargin = $this->saveHTMLFooter[$n][$OE]['ml']; + $this->rMargin = $this->saveHTMLFooter[$n][$OE]['mr']; + $this->tMargin = $this->saveHTMLFooter[$n][$OE]['mh']; + $this->bMargin = $this->saveHTMLFooter[$n][$OE]['mf']; + $this->margin_header = $this->saveHTMLFooter[$n][$OE]['mh']; + $this->margin_footer = $this->saveHTMLFooter[$n][$OE]['mf']; + $this->w = $this->saveHTMLFooter[$n][$OE]['pw']; + $this->h = $this->saveHTMLFooter[$n][$OE]['ph']; + $rotate = (isset($this->saveHTMLFooter[$n][$OE]['rotate']) ? $this->saveHTMLFooter[$n][$OE]['rotate'] : null); + $this->Reset(); + $this->pageoutput[$n] = array(); + $this->pgwidth = $this->w - $this->lMargin - $this->rMargin; + $this->x = $this->lMargin; + $top_y = $this->y = $this->h - $this->margin_footer; + + // if bottom-margin==0, corrects to avoid division by zero + if ($this->y == $this->h) { $top_y = $this->y = ($this->h - 0.1); } + // mPDF 5.6.47 + $pn = $this->docPageNum($n); + if ($pn) + $pnstr = $this->pagenumPrefix.$pn.$this->pagenumSuffix; + else { $pnstr = ''; } + $html = str_replace('{PAGENO}',$pnstr,$html); + $pnt = $this->docPageNumTotal($n); + if ($pnt) + $pntstr = $this->nbpgPrefix.$pnt.$this->nbpgSuffix; + else { $pntstr = ''; } + $html = str_replace($this->aliasNbPgGp,$pntstr,$html ); // {nbpg} + $html = str_replace($this->aliasNbPg,$nb,$html ); // {nb} + $html = preg_replace('/\{DATE\s+(.*?)\}/e',"date('\\1')",$html ); + + + $this->HTMLheaderPageLinks = array(); + $this->HTMLheaderPageAnnots = array(); + $this->HTMLheaderPageForms = array(); + $this->pageBackgrounds = array(); + + $this->writingHTMLfooter = true; + $this->InFooter = true; + $this->WriteHTML($html , 4); // parameter 4 saves output to $this->headerbuffer + $this->writingHTMLfooter = false; + $this->InFooter = false; + $this->Reset(); + $this->pageoutput[$n] = array(); + + $fheight = $this->y - $top_y; + $adj = -$fheight; + + $s = $this->PrintPageBackgrounds(-$adj); + $this->headerbuffer = $s . $this->headerbuffer; + + $os = ''; + $os .= $this->StartTransform(true)."\n"; + if ($rotate) { + $os .= sprintf('q 0 -1 1 0 0 %.3F cm ',($this->w*_MPDFK)); + } + $os .= $this->transformTranslate(0, $adj, true)."\n"; + $os .= $this->headerbuffer ; + if ($rotate) { + $os .= ' Q' . "\n"; + } + $os .= $this->StopTransform(true)."\n"; + // Writes over the page background but behind any other output on page + $os = preg_replace('/\\\\/','\\\\\\\\',$os); + $this->pages[$n] = preg_replace('/(___HEADER___MARKER'.date('jY').')/', "\n".$os."\n".'\\1', $this->pages[$n]); + + $lks = $this->HTMLheaderPageLinks; + foreach($lks AS $lk) { + $lk[1] -= $adj*_MPDFK; + if ($rotate) { + $lw = $lk[2]; + $lh = $lk[3]; + $lk[2] = $lh; + $lk[3] = $lw; // swap width and height + + $ax = $lk[0]/_MPDFK; + $ay = $lk[1]/_MPDFK; + $bx = $ay-($lh/_MPDFK); + $by = $this->w-$ax; + $lk[0] = $bx*_MPDFK; + $lk[1] = ($this->h-$by)*_MPDFK - $lw; + } + $this->PageLinks[$n][]=$lk; + } +/*-- FORMS --*/ + foreach($this->HTMLheaderPageForms AS $f) { + $f['y'] += $adj; + $this->form->forms[$f['n']] = $f; + } +/*-- END FORMS --*/ + } + } + $this->page=$nb; + $this->state=1; +} +/*-- END HTMLHEADERS-FOOTERS --*/ + + +function _putpages() +{ + $nb=$this->page; + $filter=($this->compress) ? '/Filter /FlateDecode ' : ''; + + if($this->DefOrientation=='P') { + $defwPt=$this->fwPt; + $defhPt=$this->fhPt; + } + else { + $defwPt=$this->fhPt; + $defhPt=$this->fwPt; + } + $annotid=(3+2*$nb); + + // Active Forms + $totaladdnum = 0; + for($n=1;$n<=$nb;$n++) { + if (isset($this->PageLinks[$n])) { $totaladdnum += count($this->PageLinks[$n]); } +/*-- ANNOTATIONS --*/ + if (isset($this->PageAnnots[$n])) { + foreach ($this->PageAnnots[$n] as $k => $pl) { + if (!empty($pl['opt']['popup']) || !empty($pl['opt']['file'])) { $totaladdnum += 2 ; } + else { $totaladdnum++; } + } + } +/*-- END ANNOTATIONS --*/ + +/*-- FORMS --*/ + if ( count($this->form->forms) > 0 ) { + $this->form->countPageForms($n, $totaladdnum); + } +/*-- END FORMS --*/ + } +/*-- FORMS --*/ + // Make a note in the radio button group of the obj_id it will have + $ctr = 0; + if (count($this->form->form_radio_groups)) { + foreach($this->form->form_radio_groups AS $name=>$frg) { + $this->form->form_radio_groups[$name]['obj_id'] = $annotid + $totaladdnum + $ctr; + $ctr++; + } + } +/*-- END FORMS --*/ + + // Select unused fonts (usually default font) + $unused = array(); + foreach($this->fonts as $fk=>$font) { + if (!$font['used'] && ($font['type']=='TTF')) { + $unused[] = $fk; + } + } + + + for($n=1;$n<=$nb;$n++) + { + $thispage = $this->pages[$n]; +// unset($this->pages[$n]); // mPDF 5.6.47 + if(isset($this->OrientationChanges[$n])) { + $hPt=$this->pageDim[$n]['w']*_MPDFK; + $wPt=$this->pageDim[$n]['h']*_MPDFK; + $owidthPt_LR = $this->pageDim[$n]['outer_width_TB']*_MPDFK; + $owidthPt_TB = $this->pageDim[$n]['outer_width_LR']*_MPDFK; + } + else { + $wPt=$this->pageDim[$n]['w']*_MPDFK; + $hPt=$this->pageDim[$n]['h']*_MPDFK; + $owidthPt_LR = $this->pageDim[$n]['outer_width_LR']*_MPDFK; + $owidthPt_TB = $this->pageDim[$n]['outer_width_TB']*_MPDFK; + } + // Remove references to unused fonts (usually default font) + foreach($unused as $fk) { + if ($this->fonts[$fk]['sip'] || $this->fonts[$fk]['smp']) { + foreach($this->fonts[$fk]['subsetfontids'] AS $k => $fid) { + $thispage = preg_replace('/\s\/F'.$fid.' \d[\d.]* Tf\s/is',' ',$thispage); + } + } + else { + $thispage = preg_replace('/\s\/F'.$this->fonts[$fk]['i'].' \d[\d.]* Tf\s/is',' ',$thispage); + } + } + //Replace number of pages + if(!empty($this->aliasNbPg)) { + if (!$this->onlyCoreFonts) { $s1 = $this->UTF8ToUTF16BE($this->aliasNbPg, false); } + $s2 = $this->aliasNbPg; + if (!$this->onlyCoreFonts) { $r1 = $this->UTF8ToUTF16BE($nb, false); } + $r2 = $nb; + if (preg_match_all('/{mpdfheadernbpg (C|R) ff=(\S*) fs=(\S*) fz=(.*?)}/',$thispage,$m)) { + for($hi=0;$hi<count($m[0]);$hi++) { + $pos = $m[1][$hi]; + $hff = $m[2][$hi]; + $hfst = $m[3][$hi]; + $hfsz = $m[4][$hi]; + $this->SetFont($hff,$hfst,$hfsz, false); + $x1 = $this->GetStringWidth($this->aliasNbPg); + $x2 = $this->GetStringWidth($nb); + $xadj = $x1 - $x2; + if ($pos=='C') { $xadj /= 2; } + $rep = sprintf(' q 1 0 0 1 %.3F 0 cm ', $xadj*_MPDFK); + $thispage = str_replace($m[0][$hi], $rep, $thispage); + } + } + if (!$this->onlyCoreFonts) { $thispage=str_replace($s1,$r1,$thispage); } + $thispage=str_replace($s2,$r2,$thispage); + + // And now for any SMP/SIP fonts subset using <HH> format + $r = ''; + $nstr = "$nb"; + for($i=0;$i<strlen($nstr);$i++) { + $r .= sprintf("%02s", strtoupper(dechex(intval($nstr[$i])+48))); + } + $thispage=str_replace($this->aliasNbPgHex,$r,$thispage); + + } + //Replace number of pages in group + if(!empty($this->aliasNbPgGp)) { + if (!$this->onlyCoreFonts) { $s1 = $this->UTF8ToUTF16BE($this->aliasNbPgGp, false); } + $s2 = $this->aliasNbPgGp; + $nbt = $this->docPageNumTotal($n); + if (!$this->onlyCoreFonts) { $r1 = $this->UTF8ToUTF16BE($nbt, false); } + $r2 = $nbt; + if (preg_match_all('/{mpdfheadernbpggp (C|R) ff=(\S*) fs=(\S*) fz=(.*?)}/',$thispage,$m)) { + for($hi=0;$hi<count($m[0]);$hi++) { + $pos = $m[1][$hi]; + $hff = $m[2][$hi]; + $hfst = $m[3][$hi]; + $hfsz = $m[4][$hi]; + $this->SetFont($hff,$hfst,$hfsz, false); + $x1 = $this->GetStringWidth($this->aliasNbPgGp); + $x2 = $this->GetStringWidth($nbt); + $xadj = $x1 - $x2; + if ($pos=='C') { $xadj /= 2; } + $rep = sprintf(' q 1 0 0 1 %.3F 0 cm ', $xadj*_MPDFK); + $thispage = str_replace($m[0][$hi], $rep, $thispage); + } + } + if (!$this->onlyCoreFonts) { $thispage=str_replace($s1,$r1,$thispage); } + $thispage=str_replace($s2,$r2,$thispage); + + // And now for any SMP/SIP fonts subset using <HH> format + $r = ''; + $nstr = "$nbt"; + for($i=0;$i<strlen($nstr);$i++) { + $r .= sprintf("%02s", strtoupper(dechex(intval($nstr[$i])+48))); + } + $thispage=str_replace($this->aliasNbPgGpHex,$r,$thispage); + + } + $thispage = preg_replace('/(\s*___BACKGROUND___PATTERNS'.date('jY').'\s*)/', " ", $thispage); + $thispage = preg_replace('/(\s*___HEADER___MARKER'.date('jY').'\s*)/', " ", $thispage); + $thispage = preg_replace('/(\s*___PAGE___START'.date('jY').'\s*)/', " ", $thispage); + $thispage = preg_replace('/(\s*___TABLE___BACKGROUNDS'.date('jY').'\s*)/', " ", $thispage); + + //Page + $this->_newobj(); + $this->_out('<</Type /Page'); + $this->_out('/Parent 1 0 R'); + if(isset($this->OrientationChanges[$n])) { + $this->_out(sprintf('/MediaBox [0 0 %.3F %.3F]',$hPt,$wPt)); + //If BleedBox is defined, it must be larger than the TrimBox, but smaller than the MediaBox + $bleedMargin = $this->pageDim[$n]['bleedMargin']*_MPDFK; + if ($bleedMargin && ($owidthPt_TB || $owidthPt_LR)) { + $x0 = $owidthPt_TB-$bleedMargin; + $y0 = $owidthPt_LR-$bleedMargin; + $x1 = $hPt-$owidthPt_TB+$bleedMargin; + $y1 = $wPt-$owidthPt_LR+$bleedMargin; + $this->_out(sprintf('/BleedBox [%.3F %.3F %.3F %.3F]', $x0, $y0, $x1, $y1)); + } + $this->_out(sprintf('/TrimBox [%.3F %.3F %.3F %.3F]', $owidthPt_TB, $owidthPt_LR, ($hPt-$owidthPt_TB), ($wPt-$owidthPt_LR))); + if (isset($this->OrientationChanges[$n]) && $this->displayDefaultOrientation) { + if ($this->DefOrientation=='P') { $this->_out('/Rotate 270'); } + else { $this->_out('/Rotate 90'); } + } + } + //else if($wPt != $defwPt || $hPt != $defhPt) { + else { + $this->_out(sprintf('/MediaBox [0 0 %.3F %.3F]',$wPt,$hPt)); + $bleedMargin = $this->pageDim[$n]['bleedMargin']*_MPDFK; + if ($bleedMargin && ($owidthPt_TB || $owidthPt_LR)) { + $x0 = $owidthPt_LR-$bleedMargin; + $y0 = $owidthPt_TB-$bleedMargin; + $x1 = $wPt-$owidthPt_LR+$bleedMargin; + $y1 = $hPt-$owidthPt_TB+$bleedMargin; + $this->_out(sprintf('/BleedBox [%.3F %.3F %.3F %.3F]', $x0, $y0, $x1, $y1)); + } + $this->_out(sprintf('/TrimBox [%.3F %.3F %.3F %.3F]', $owidthPt_LR, $owidthPt_TB, ($wPt-$owidthPt_LR), ($hPt-$owidthPt_TB))); + } + $this->_out('/Resources 2 0 R'); + + // Important to keep in RGB colorSpace when using transparency + if (!$this->PDFA && !$this->PDFX) { + if ($this->restrictColorSpace == 3) + $this->_out('/Group << /Type /Group /S /Transparency /CS /DeviceCMYK >> '); + else if ($this->restrictColorSpace == 1) + $this->_out('/Group << /Type /Group /S /Transparency /CS /DeviceGray >> '); + else + $this->_out('/Group << /Type /Group /S /Transparency /CS /DeviceRGB >> '); + } + + $annotsnum = 0; + if (isset($this->PageLinks[$n])) { $annotsnum += count($this->PageLinks[$n]); } +/*-- ANNOTATIONS --*/ + if (isset($this->PageAnnots[$n])) { + foreach ($this->PageAnnots[$n] as $k => $pl) { + if (!empty($pl['opt']['popup']) || !empty($pl['opt']['file'])) { $annotsnum += 2 ; } + else { $annotsnum++; } + $this->PageAnnots[$n][$k]['pageobj'] = $this->n; + } + } +/*-- END ANNOTATIONS --*/ + +/*-- FORMS --*/ + // Active Forms + $formsnum = 0; + if ( count($this->form->forms) > 0 ) { + foreach( $this->form->forms as $val ) { + if ( $val['page'] == $n ) + $formsnum++; + } + } +/*-- END FORMS --*/ + if ($annotsnum || $formsnum) { + $s = '/Annots [ '; + for($i=0;$i<$annotsnum;$i++) { + $s .= ($annotid + $i) . ' 0 R '; + } + $annotid += $annotsnum; +/*-- FORMS --*/ + if ( count($this->form->forms) > 0 ) { + $this->form->addFormIds($n, $s, $annotid); + } +/*-- END FORMS --*/ + $s .= '] '; + $this->_out($s); + } + + $this->_out('/Contents '.($this->n+1).' 0 R>>'); + $this->_out('endobj'); + + //Page content + $this->_newobj(); + $p=($this->compress) ? gzcompress($thispage) : $thispage; + $this->_out('<<'.$filter.'/Length '.strlen($p).'>>'); + $this->_putstream($p); + $this->_out('endobj'); + } + $this->_putannots($n); + + //Pages root + $this->offsets[1]=strlen($this->buffer); + $this->_out('1 0 obj'); + $this->_out('<</Type /Pages'); + $kids='/Kids ['; + for($i=0;$i<$nb;$i++) + $kids.=(3+2*$i).' 0 R '; + $this->_out($kids.']'); + $this->_out('/Count '.$nb); + $this->_out(sprintf('/MediaBox [0 0 %.3F %.3F]',$defwPt,$defhPt)); + $this->_out('>>'); + $this->_out('endobj'); +} + + +function _putannots($n) { + $filter=($this->compress) ? '/Filter /FlateDecode ' : ''; + $nb=$this->page; + for($n=1;$n<=$nb;$n++) + { + $annotobjs = array(); + if(isset($this->PageLinks[$n]) || isset($this->PageAnnots[$n]) || count($this->form->forms) > 0 ) { + $wPt=$this->pageDim[$n]['w']*_MPDFK; + $hPt=$this->pageDim[$n]['h']*_MPDFK; + + //Links + if(isset($this->PageLinks[$n])) { + foreach($this->PageLinks[$n] as $key => $pl) { + $this->_newobj(); + $annot=''; + $rect=sprintf('%.3F %.3F %.3F %.3F',$pl[0],$pl[1],$pl[0]+$pl[2],$pl[1]-$pl[3]); + $annot .= '<</Type /Annot /Subtype /Link /Rect ['.$rect.']'; + $annot .= ' /Contents '.$this->_UTF16BEtextstring($pl[4]); + $annot .= ' /NM '.$this->_textstring(sprintf('%04u-%04u', $n, $key)); + $annot .= ' /M '.$this->_textstring('D:'.date('YmdHis')); + $annot .= ' /Border [0 0 0]'; + // Use this (instead of /Border) to specify border around link + // $annot .= ' /BS <</W 1'; // Width on points; 0 = no line + // $annot .= ' /S /D'; // style - [S]olid, [D]ashed, [B]eveled, [I]nset, [U]nderline + // $annot .= ' /D [3 2]'; // Dash array - if dashed + // $annot .= ' >>'; + // $annot .= ' /C [1 0 0]'; // Color RGB + + if ($this->PDFA || $this->PDFX) { $annot .= ' /F 28'; } + if (strpos($pl[4],'@')===0) { + $p=substr($pl[4],1); + // $h=isset($this->OrientationChanges[$p]) ? $wPt : $hPt; + $htarg=$this->pageDim[$p]['h']*_MPDFK; + $annot.=sprintf(' /Dest [%d 0 R /XYZ 0 %.3F null]>>',1+2*$p,$htarg); + } + else if(is_string($pl[4])) { + $annot .= ' /A <</S /URI /URI '.$this->_textstring($pl[4]).'>> >>'; + } + else { + $l=$this->links[$pl[4]]; + // may not be set if #link points to non-existent target + if (isset($this->pageDim[$l[0]]['h'])) { $htarg=$this->pageDim[$l[0]]['h']*_MPDFK; } + else { $htarg=$this->h*_MPDFK; } // doesn't really matter + $annot.=sprintf(' /Dest [%d 0 R /XYZ 0 %.3F null]>>',1+2*$l[0],$htarg-$l[1]*_MPDFK); + } + $this->_out($annot); + $this->_out('endobj'); + } + } + + +/*-- ANNOTATIONS --*/ + if(isset($this->PageAnnots[$n])) { + foreach ($this->PageAnnots[$n] as $key => $pl) { + if ($pl['opt']['file']) { $FileAttachment=true; } + else { $FileAttachment=false; } + $this->_newobj(); + $annot=''; + $pl['opt'] = array_change_key_case($pl['opt'], CASE_LOWER); + $x = $pl['x']; + if ($this->annotMargin <> 0 || $x==0 || $x<0) { // Odd page + $x = ($wPt/_MPDFK) - $this->annotMargin; + } + $w = $h = 0; + $a = $x * _MPDFK; + $b = $hPt - ($pl['y'] * _MPDFK); + $annot .= '<</Type /Annot '; + if ($FileAttachment) { + $annot .= '/Subtype /FileAttachment'; + // Need to set a size for FileAttachment icons + if ($pl['opt']['icon']=='Paperclip') { $w=8.235; $h=20; } // 7,17 + else if ($pl['opt']['icon']=='Tag') { $w=20; $h=16; } + else if ($pl['opt']['icon']=='Graph') { $w=20; $h=20; } + else { $w=14; $h=20; } // PushPin + $f = $pl['opt']['file']; + $f = preg_replace('/^.*\//', '', $f); + $f = preg_replace('/[^a-zA-Z0-9._]/', '', $f); + $annot .= '/FS <</Type /Filespec /F ('.$f.')'; + $annot .= '/EF <</F '.($this->n+1).' 0 R>>'; + $annot .= '>>'; + } + else { + $annot .= '/Subtype /Text'; + } + $rect = sprintf('%.3F %.3F %.3F %.3F', $a, $b-$h, $a+$w, $b); + $annot .= '/Rect ['.$rect.']'; + + // contents = description of file in free text + $annot .= ' /Contents '.$this->_UTF16BEtextstring($pl['txt']); + $annot .= ' /NM '.$this->_textstring(sprintf('%04u-%04u', $n, (2000 + $key))); + $annot .= ' /M '.$this->_textstring('D:'.date('YmdHis')); + $annot .= ' /CreationDate '.$this->_textstring('D:'.date('YmdHis')); + $annot .= ' /Border [0 0 0]'; + if ($this->PDFA || $this->PDFX) { + $annot .= ' /F 28'; + $annot .= ' /CA 1'; + } + else if ($pl['opt']['ca']>0) { $annot .= ' /CA '.$pl['opt']['ca']; } + + $annotcolor = ' /C ['; + if (isset($pl['opt']['c']) AND $pl['opt']['c']) { + $col = $pl['opt']['c']; + if ($col{0}==3 || $col{0}==5) { $annotcolor .= sprintf("%.3F %.3F %.3F", ord($col{1})/255,ord($col{2})/255,ord($col{3})/255); } + else if ($col{0}==1) { $annotcolor .= sprintf("%.3F", ord($col{1})/255); } + else if ($col{0}==4 || $col{0}==6) { $annotcolor .= sprintf("%.3F %.3F %.3F %.3F", ord($col{1})/100,ord($col{2})/100,ord($col{3})/100,ord($col{4})/100); } + else { $annotcolor .= '1 1 0'; } + } + else { $annotcolor .= '1 1 0'; } + $annotcolor .= ']'; + $annot .= $annotcolor; + // Usually Author + // Use as Title for fileattachment + if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) { + $annot .= ' /T '.$this->_UTF16BEtextstring($pl['opt']['t']); + } + if ($FileAttachment) { + $iconsapp = array('Paperclip', 'Graph', 'PushPin', 'Tag'); + } + else { $iconsapp = array('Comment', 'Help', 'Insert', 'Key', 'NewParagraph', 'Note', 'Paragraph'); } + if (isset($pl['opt']['icon']) AND in_array($pl['opt']['icon'], $iconsapp)) { + $annot .= ' /Name /'.$pl['opt']['icon']; + } + else if ($FileAttachment) { $annot .= ' /Name /PushPin'; } + else { $annot .= ' /Name /Note'; } + if (!$FileAttachment) { + // /Subj is PDF 1.5 spec. + if (isset($pl['opt']['subj']) && !$this->PDFA && !$this->PDFX) { + $annot .= ' /Subj '.$this->_UTF16BEtextstring($pl['opt']['subj']); + } + if (!empty($pl['opt']['popup'])) { + $annot .= ' /Open true'; + $annot .= ' /Popup '.($this->n+1).' 0 R'; + } + else { $annot .= ' /Open false'; } + } + $annot .= ' /P '.$pl['pageobj'].' 0 R'; + $annot .= '>>'; + $this->_out($annot); + $this->_out('endobj'); + + if ($FileAttachment) { + $file = @file_get_contents($pl['opt']['file']) or die('mPDF Error: Cannot access file attachment - '.$pl['opt']['file']); + $filestream = gzcompress($file); + $this->_newobj(); + $this->_out('<</Type /EmbeddedFile'); + $this->_out('/Length '.strlen($filestream)); + $this->_out('/Filter /FlateDecode'); + $this->_out('>>'); + $this->_putstream($filestream); + $this->_out('endobj'); + } + else if (!empty($pl['opt']['popup'])) { + $this->_newobj(); + $annot=''; + if (is_array($pl['opt']['popup']) && isset($pl['opt']['popup'][0])) { $x = $pl['opt']['popup'][0] * _MPDFK; } + else { $x = $pl['x'] * _MPDFK; } + if (is_array($pl['opt']['popup']) && isset($pl['opt']['popup'][1])) { $y = $hPt - ($pl['opt']['popup'][1] * _MPDFK); } + else { $y = $hPt - ($pl['y'] * _MPDFK); } + if (is_array($pl['opt']['popup']) && isset($pl['opt']['popup'][2])) { $w = $pl['opt']['popup'][2] * _MPDFK; } + else { $w = 180; } + if (is_array($pl['opt']['popup']) && isset($pl['opt']['popup'][3])) { $h = $pl['opt']['popup'][3] * _MPDFK; } + else { $h = 120; } + $rect = sprintf('%.3F %.3F %.3F %.3F', $x, $y-$h, $x+$w, $y); + $annot .= '<</Type /Annot /Subtype /Popup /Rect ['.$rect.']'; + $annot .= ' /M '.$this->_textstring('D:'.date('YmdHis')); + if ($this->PDFA || $this->PDFX) { $annot .= ' /F 28'; } + $annot .= ' /Parent '.($this->n-1).' 0 R'; + $annot .= '>>'; + $this->_out($annot); + $this->_out('endobj'); + } + } + } +/*-- END ANNOTATIONS --*/ + +/*-- FORMS --*/ + // Active Forms + if ( count($this->form->forms) > 0 ) { + $this->form->_putFormItems($n, $hPt); + } +/*-- END FORMS --*/ + } + } +/*-- FORMS --*/ + // Active Forms - Radio Button Group entries + // Output Radio Button Group form entries (radio_on_obj_id already determined) + if (count($this->form->form_radio_groups)) { + $this->form->_putRadioItems($n); + } +/*-- END FORMS --*/ +} + + +/*-- ANNOTATIONS --*/ +function Annotation($text, $x=0, $y=0, $icon='Note', $author='', $subject='', $opacity=0, $colarray=false, $popup='', $file='') { + if (is_array($colarray) && count($colarray)==3) { $colarray = $this->ConvertColor('rgb('.$colarray[0].','.$colarray[1].','.$colarray[2].')'); } + if ($colarray === false) { $colarray = $this->ConvertColor('yellow'); } + if ($x==0) { $x = $this->x; } + if ($y==0) { $y = $this->y; } + $page = $this->page; + if ($page < 1) { // Document has not been started - assume it's for first page + $page = 1; + if ($x==0) { $x = $this->lMargin; } + if ($y==0) { $y = $this->tMargin; } + } + + if ($this->PDFA || $this->PDFX) { + if (($this->PDFA && !$this->PDFAauto) || ($this->PDFX && !$this->PDFXauto)) { $this->PDFAXwarnings[] = "Annotation markers cannot be semi-transparent in PDFA1-b or PDFX/1-a, so they may make underlying text unreadable. (Annotation markers moved to right margin)"; } + $x = ($this->w) - $this->rMargin*0.66; + } + if (!$this->annotMargin) { $y -= $this->FontSize / 2; } + + if (!$opacity && $this->annotMargin) { $opacity = 1; } + else if (!$opacity) { $opacity = $this->annotOpacity; } + + $an = array('txt' => $text, 'x' => $x, 'y' => $y, 'opt' => array('Icon'=>$icon, 'T'=>$author, 'Subj'=>$subject, 'C'=>$colarray, 'CA'=>$opacity, 'popup'=>$popup, 'file'=>$file)); + + if ($this->keep_block_together) { // Save to array - don't write yet + $this->ktAnnots[$this->page][]= $an; + return; + } + else if ($this->table_rotate) { + $this->tbrot_Annots[$this->page][]= $an; + return; + } + else if ($this->kwt) { + $this->kwt_Annots[$this->page][]= $an; + return; + } + // mPDF 5.0 + if ($this->writingHTMLheader || $this->writingHTMLfooter) { + $this->HTMLheaderPageAnnots[]= $an; + return; + } + //Put an Annotation on the page + $this->PageAnnots[$page][] = $an; +/*-- COLUMNS --*/ + // Save cross-reference to Column buffer + $ref = count($this->PageAnnots[$this->page])-1; + $this->columnAnnots[$this->CurrCol][INTVAL($this->x)][INTVAL($this->y)] = $ref; +/*-- END COLUMNS --*/ +} +/*-- END ANNOTATIONS --*/ + + +function _putfonts() { + $nf=$this->n; + foreach($this->FontFiles as $fontkey=>$info) { + // TrueType embedded + if (isset($info['type']) && $info['type']=='TTF' && !$info['sip'] && !$info['smp']) { + $used = true; + $asSubset = false; + foreach($this->fonts AS $k=>$f) { + if ($f['fontkey'] == $fontkey && $f['type']=='TTF') { + $used = $f['used']; + if ($used) { + $nChars = (ord($f['cw'][0]) << 8) + ord($f['cw'][1]); + $usage = intval(count($f['subset'])*100 / $nChars); + $fsize = $info['length1']; + // Always subset the very large TTF files + if ($fsize > ($this->maxTTFFilesize *1024)) { $asSubset = true; } + else if ($usage < $this->percentSubset) { $asSubset = true; } + } + if ($f['unAGlyphs']) $aaSubset = true; // mPDF 5.4.05 + if ($this->PDFA || $this->PDFX) $asSubset = false; + $this->fonts[$k]['asSubset'] = $asSubset; + break; + } + } + if ($used && !$asSubset) { + //Font file embedding + $this->_newobj(); + $this->FontFiles[$fontkey]['n']=$this->n; + $font=''; + $originalsize = $info['length1']; + if ($this->repackageTTF || $this->fonts[$fontkey]['TTCfontID']>0) { + // First see if there is a cached compressed file + if (file_exists(_MPDF_TTFONTDATAPATH.$fontkey.'.ps.z')) { + $f=fopen(_MPDF_TTFONTDATAPATH.$fontkey.'.ps.z','rb'); + if(!$f) { $this->Error('Font file .ps.z not found'); } + while(!feof($f)) { $font .= fread($f, 2048); } + fclose($f); + include(_MPDF_TTFONTDATAPATH.$fontkey.'.ps.php'); // sets $originalsize (of repackaged font) + } + else { + if (!class_exists('TTFontFile', false)) { include(_MPDF_PATH .'classes/ttfontsuni.php'); } + $ttf = new TTFontFile(); + $font = $ttf->repackageTTF($this->FontFiles[$fontkey]['ttffile'], $this->fonts[$fontkey]['TTCfontID'], $this->debugfonts, $this->fonts[$fontkey]['unAGlyphs']); // mPDF 5.4.05 + + $originalsize = strlen($font); + $font = gzcompress($font); + unset($ttf); + if (is_writable(dirname(_MPDF_TTFONTDATAPATH.'x'))) { + $fh = fopen(_MPDF_TTFONTDATAPATH.$fontkey.'.ps.z',"wb"); + fwrite($fh,$font,strlen($font)); + fclose($fh); + $fh = fopen(_MPDF_TTFONTDATAPATH.$fontkey.'.ps.php',"wb"); + $len = "<?php \n"; + $len.='$originalsize='.$originalsize.";\n"; + $len.="?>"; + fwrite($fh,$len,strlen($len)); + fclose($fh); + } + } + } + else { + // First see if there is a cached compressed file + if (file_exists(_MPDF_TTFONTDATAPATH.$fontkey.'.z')) { + $f=fopen(_MPDF_TTFONTDATAPATH.$fontkey.'.z','rb'); + if(!$f) { $this->Error('Font file not found'); } + while(!feof($f)) { $font .= fread($f, 2048); } + fclose($f); + } + else { + $f=fopen($this->FontFiles[$fontkey]['ttffile'],'rb'); + if(!$f) { $this->Error('Font file not found'); } + while(!feof($f)) { $font .= fread($f, 2048); } + fclose($f); + $font = gzcompress($font); + if (is_writable(dirname(_MPDF_TTFONTDATAPATH.'x'))) { + $fh = fopen(_MPDF_TTFONTDATAPATH.$fontkey.'.z',"wb"); + fwrite($fh,$font,strlen($font)); + fclose($fh); + } + } + } + + $this->_out('<</Length '.strlen($font)); + $this->_out('/Filter /FlateDecode'); + $this->_out('/Length1 '.$originalsize); + $this->_out('>>'); + $this->_putstream($font); + $this->_out('endobj'); + } + } + } + + $nfonts = count($this->fonts); + $fctr = 1; + foreach($this->fonts as $k=>$font) { + //Font objects + $type=$font['type']; + $name=$font['name']; + if ((!isset($font['used']) || !$font['used']) && $type=='TTF') { continue; } + if ($this->progressBar) { $this->UpdateProgressBar(2,intval($fctr*100/$nfonts),'Writing Fonts'); $fctr++; } // *PROGRESS-BAR* + if (isset($font['asSubset'])) { $asSubset = $font['asSubset']; } + else { $asSubset = ''; } +/*-- CJK-FONTS --*/ + if($type=='Type0') { // = Adobe CJK Fonts + $this->fonts[$k]['n']=$this->n+1; + $this->_newobj(); + $this->_out('<</Type /Font'); + $this->_putType0($font); + } + else +/*-- END CJK-FONTS --*/ + if($type=='core') { + //Standard font + $this->fonts[$k]['n']=$this->n+1; + if ($this->PDFA || $this->PDFX) { $this->Error('Core fonts are not allowed in PDF/A1-b or PDFX/1-a files (Times, Helvetica, Courier etc.)'); } + $this->_newobj(); + $this->_out('<</Type /Font'); + $this->_out('/BaseFont /'.$name); + $this->_out('/Subtype /Type1'); + if($name!='Symbol' && $name!='ZapfDingbats') { + $this->_out('/Encoding /WinAnsiEncoding'); + } + $this->_out('>>'); + $this->_out('endobj'); + } + // TrueType embedded SUBSETS for SIP (CJK extB containing Supplementary Ideographic Plane 2) + // Or Unicode Plane 1 - Supplementary Multilingual Plane + else if ($type=='TTF' && ($font['sip'] || $font['smp'])) { + if (!$font['used']) { continue; } + $ssfaid="AA"; + if (!class_exists('TTFontFile', false)) { include(_MPDF_PATH .'classes/ttfontsuni.php'); } + $ttf = new TTFontFile(); + for($sfid=0;$sfid<count($font['subsetfontids']);$sfid++) { + $this->fonts[$k]['n'][$sfid]=$this->n+1; // NB an array for subset + $subsetname = 'MPDF'.$ssfaid.'+'.$font['name']; + $ssfaid++; + $subset = $font['subsets'][$sfid]; + unset($subset[0]); + $ttfontstream = $ttf->makeSubsetSIP($font['ttffile'], $subset, $font['TTCfontID'], $this->debugfonts); + $ttfontsize = strlen($ttfontstream); + $fontstream = gzcompress($ttfontstream); + $widthstring = ''; + $toUnistring = ''; + foreach($font['subsets'][$sfid] AS $cp=>$u) { + $w = $this->_getCharWidth($font['cw'], $u); + if ($w !== false) { + $widthstring .= $w.' '; + } + else { + $widthstring .= round($ttf->defaultWidth).' '; + } + if ($u > 65535) { + $utf8 = chr(($u>>18)+240).chr((($u>>12)&63)+128).chr((($u>>6)&63)+128) .chr(($u&63)+128); + $utf16 = mb_convert_encoding($utf8, 'UTF-16BE', 'UTF-8'); + $l1 = ord($utf16[0]); + $h1 = ord($utf16[1]); + $l2 = ord($utf16[2]); + $h2 = ord($utf16[3]); + $toUnistring .= sprintf("<%02s> <%02s%02s%02s%02s>\n", strtoupper(dechex($cp)), strtoupper(dechex($l1)), strtoupper(dechex($h1)), strtoupper(dechex($l2)), strtoupper(dechex($h2))); + } + else { + $toUnistring .= sprintf("<%02s> <%04s>\n", strtoupper(dechex($cp)), strtoupper(dechex($u))); + } + } + + //Additional Type1 or TrueType font + $this->_newobj(); + $this->_out('<</Type /Font'); + $this->_out('/BaseFont /'.$subsetname); + $this->_out('/Subtype /TrueType'); + $this->_out('/FirstChar 0 /LastChar '.(count($font['subsets'][$sfid])-1)); + $this->_out('/Widths '.($this->n+1).' 0 R'); + $this->_out('/FontDescriptor '.($this->n+2).' 0 R'); + $this->_out('/ToUnicode '.($this->n + 3).' 0 R'); + $this->_out('>>'); + $this->_out('endobj'); + + //Widths + $this->_newobj(); + $this->_out('['.$widthstring.']'); + $this->_out('endobj'); + + //Descriptor + $this->_newobj(); + $s='<</Type /FontDescriptor /FontName /'.$subsetname."\n"; + foreach($font['desc'] as $kd=>$v) { + if ($kd == 'Flags') { $v = $v | 4; $v = $v & ~32; } // SYMBOLIC font flag + $s.=' /'.$kd.' '.$v."\n"; + } + $s.='/FontFile2 '.($this->n + 2).' 0 R'; + $this->_out($s.'>>'); + $this->_out('endobj'); + + // ToUnicode + $this->_newobj(); + $toUni = "/CIDInit /ProcSet findresource begin\n"; + $toUni .= "12 dict begin\n"; + $toUni .= "begincmap\n"; + $toUni .= "/CIDSystemInfo\n"; + $toUni .= "<</Registry (Adobe)\n"; + $toUni .= "/Ordering (UCS)\n"; + $toUni .= "/Supplement 0\n"; + $toUni .= ">> def\n"; + $toUni .= "/CMapName /Adobe-Identity-UCS def\n"; + $toUni .= "/CMapType 2 def\n"; + $toUni .= "1 begincodespacerange\n"; + $toUni .= "<00> <FF>\n"; + $toUni .= "endcodespacerange\n"; + $toUni .= count($font['subsets'][$sfid])." beginbfchar\n"; + $toUni .= $toUnistring; + $toUni .= "endbfchar\n"; + $toUni .= "endcmap\n"; + $toUni .= "CMapName currentdict /CMap defineresource pop\n"; + $toUni .= "end\n"; + $toUni .= "end\n"; + + $this->_out('<</Length '.(strlen($toUni)).'>>'); + $this->_putstream($toUni); + $this->_out('endobj'); + + //Font file + $this->_newobj(); + $this->_out('<</Length '.strlen($fontstream)); + $this->_out('/Filter /FlateDecode'); + $this->_out('/Length1 '.$ttfontsize); + $this->_out('>>'); + $this->_putstream($fontstream); + $this->_out('endobj'); + } // foreach subset + unset($ttf); + } + // TrueType embedded SUBSETS or FULL + else if ($type=='TTF') { + $this->fonts[$k]['n']=$this->n+1; + if ($asSubset ) { + $ssfaid="A"; + if (!class_exists('TTFontFile', false)) { include(_MPDF_PATH .'classes/ttfontsuni.php'); } + $ttf = new TTFontFile(); + $fontname = 'MPDFA'.$ssfaid.'+'.$font['name']; + $subset = $font['subset']; + unset($subset[0]); + $ttfontstream = $ttf->makeSubset($font['ttffile'], $subset, $font['TTCfontID'], $this->debugfonts, $font['unAGlyphs']); // mPDF 5.4.05 + $ttfontsize = strlen($ttfontstream); + $fontstream = gzcompress($ttfontstream); + $codeToGlyph = $ttf->codeToGlyph; + unset($codeToGlyph[0]); + } + else { $fontname = $font['name']; } + // Type0 Font + // A composite font - a font composed of other fonts, organized hierarchically + $this->_newobj(); + $this->_out('<</Type /Font'); + $this->_out('/Subtype /Type0'); + $this->_out('/BaseFont /'.$fontname.''); + $this->_out('/Encoding /Identity-H'); + $this->_out('/DescendantFonts ['.($this->n + 1).' 0 R]'); + $this->_out('/ToUnicode '.($this->n + 2).' 0 R'); + $this->_out('>>'); + $this->_out('endobj'); + + // CIDFontType2 + // A CIDFont whose glyph descriptions are based on TrueType font technology + $this->_newobj(); + $this->_out('<</Type /Font'); + $this->_out('/Subtype /CIDFontType2'); + $this->_out('/BaseFont /'.$fontname.''); + $this->_out('/CIDSystemInfo '.($this->n + 2).' 0 R'); + $this->_out('/FontDescriptor '.($this->n + 3).' 0 R'); + if (isset($font['desc']['MissingWidth'])){ + $this->_out('/DW '.$font['desc']['MissingWidth'].''); + } + + if (!$asSubset && file_exists(_MPDF_TTFONTDATAPATH.$font['fontkey'].'.cw')) { + $w = ''; + $w=file_get_contents(_MPDF_TTFONTDATAPATH.$font['fontkey'].'.cw'); + $this->_out($w); + } + else { + $this->_putTTfontwidths($font, $asSubset, $ttf->maxUni); + } + + $this->_out('/CIDToGIDMap '.($this->n + 4).' 0 R'); + $this->_out('>>'); + $this->_out('endobj'); + + // ToUnicode + $this->_newobj(); + $toUni = "/CIDInit /ProcSet findresource begin\n"; + $toUni .= "12 dict begin\n"; + $toUni .= "begincmap\n"; + $toUni .= "/CIDSystemInfo\n"; + $toUni .= "<</Registry (Adobe)\n"; + $toUni .= "/Ordering (UCS)\n"; + $toUni .= "/Supplement 0\n"; + $toUni .= ">> def\n"; + $toUni .= "/CMapName /Adobe-Identity-UCS def\n"; + $toUni .= "/CMapType 2 def\n"; + $toUni .= "1 begincodespacerange\n"; + $toUni .= "<0000> <FFFF>\n"; + $toUni .= "endcodespacerange\n"; + $toUni .= "1 beginbfrange\n"; + $toUni .= "<0000> <FFFF> <0000>\n"; + $toUni .= "endbfrange\n"; + $toUni .= "endcmap\n"; + $toUni .= "CMapName currentdict /CMap defineresource pop\n"; + $toUni .= "end\n"; + $toUni .= "end\n"; + $this->_out('<</Length '.(strlen($toUni)).'>>'); + $this->_putstream($toUni); + $this->_out('endobj'); + + + // CIDSystemInfo dictionary + $this->_newobj(); + $this->_out('<</Registry (Adobe)'); + $this->_out('/Ordering (UCS)'); + $this->_out('/Supplement 0'); + $this->_out('>>'); + $this->_out('endobj'); + + // Font descriptor + $this->_newobj(); + $this->_out('<</Type /FontDescriptor'); + $this->_out('/FontName /'.$fontname); + foreach($font['desc'] as $kd=>$v) { + if ($asSubset && $kd == 'Flags') { $v = $v | 4; $v = $v & ~32; } // SYMBOLIC font flag + $this->_out(' /'.$kd.' '.$v); + } + if ($font['panose']) { + $this->_out(' /Style << /Panose <'.$font['panose'].'> >>'); + } + if ($asSubset ) { + $this->_out('/FontFile2 '.($this->n + 2).' 0 R'); + } + else if ($font['fontkey']) { + // obj ID of a stream containing a TrueType font program + $this->_out('/FontFile2 '.$this->FontFiles[$font['fontkey']]['n'].' 0 R'); + } + $this->_out('>>'); + $this->_out('endobj'); + + // Embed CIDToGIDMap + // A specification of the mapping from CIDs to glyph indices + if ($asSubset ) { + $cidtogidmap = ''; + $cidtogidmap = str_pad('', 256*256*2, "\x00"); + foreach($codeToGlyph as $cc=>$glyph) { + $cidtogidmap[$cc*2] = chr($glyph >> 8); + $cidtogidmap[$cc*2 + 1] = chr($glyph & 0xFF); + } + $cidtogidmap = gzcompress($cidtogidmap); + } + else { + // First see if there is a cached CIDToGIDMapfile + $cidtogidmap = ''; + if (file_exists(_MPDF_TTFONTDATAPATH.$font['fontkey'].'.cgm')) { + $f=fopen(_MPDF_TTFONTDATAPATH.$font['fontkey'].'.cgm','rb'); + while(!feof($f)) { $cidtogidmap .= fread($f, 2048); } + fclose($f); + } + else { + if (!class_exists('TTFontFile', false)) { include(_MPDF_PATH .'classes/ttfontsuni.php'); } + $ttf = new TTFontFile(); + $charToGlyph = $ttf->getCTG($font['ttffile'], $font['TTCfontID'], $this->debugfonts, $font['unAGlyphs']); // mPDF 5.4.05 + $cidtogidmap = str_pad('', 256*256*2, "\x00"); + foreach($charToGlyph as $cc=>$glyph) { + $cidtogidmap[$cc*2] = chr($glyph >> 8); + $cidtogidmap[$cc*2 + 1] = chr($glyph & 0xFF); + } + unset($ttf); + $cidtogidmap = gzcompress($cidtogidmap); + if (is_writable(dirname(_MPDF_TTFONTDATAPATH.'x'))) { + $fh = fopen(_MPDF_TTFONTDATAPATH.$font['fontkey'].'.cgm',"wb"); + fwrite($fh,$cidtogidmap,strlen($cidtogidmap)); + fclose($fh); + } + } + } + $this->_newobj(); + $this->_out('<</Length '.strlen($cidtogidmap).''); + $this->_out('/Filter /FlateDecode'); + $this->_out('>>'); + $this->_putstream($cidtogidmap); + $this->_out('endobj'); + + //Font file + if ($asSubset ) { + $this->_newobj(); + $this->_out('<</Length '.strlen($fontstream)); + $this->_out('/Filter /FlateDecode'); + $this->_out('/Length1 '.$ttfontsize); + $this->_out('>>'); + $this->_putstream($fontstream); + $this->_out('endobj'); + unset($ttf); + } + } + else { $this->Error('Unsupported font type: '.$type.' ('.$name.')'); } + } +} + + + +function _putTTfontwidths(&$font, $asSubset, $maxUni) { + if ($asSubset && file_exists(_MPDF_TTFONTDATAPATH.$font['fontkey'].'.cw127.php')) { + include(_MPDF_TTFONTDATAPATH.$font['fontkey'].'.cw127.php') ; + $startcid = 128; + } + else { + $rangeid = 0; + $range = array(); + $prevcid = -2; + $prevwidth = -1; + $interval = false; + $startcid = 1; + } + if ($asSubset) { $cwlen = $maxUni + 1; } + else { $cwlen = (strlen($font['cw'])/2); } + + // for each character + for ($cid=$startcid; $cid<$cwlen; $cid++) { + if ($cid==128 && $asSubset && (!file_exists(_MPDF_TTFONTDATAPATH.$font['fontkey'].'.cw127.php'))) { + if (is_writable(dirname(_MPDF_TTFONTDATAPATH.'x'))) { + $fh = fopen(_MPDF_TTFONTDATAPATH.$font['fontkey'].'.cw127.php',"wb"); + $cw127='<?php'."\n"; + $cw127.='$rangeid='.$rangeid.";\n"; + $cw127.='$prevcid='.$prevcid.";\n"; + $cw127.='$prevwidth='.$prevwidth.";\n"; + if ($interval) { $cw127.='$interval=true'.";\n"; } + else { $cw127.='$interval=false'.";\n"; } + $cw127.='$range='.var_export($range,true).";\n"; + $cw127.="?>"; + fwrite($fh,$cw127,strlen($cw127)); + fclose($fh); + } + } + if ($font['cw'][$cid*2] == "\00" && $font['cw'][$cid*2+1] == "\00") { continue; } + $width = (ord($font['cw'][$cid*2]) << 8) + ord($font['cw'][$cid*2+1]); + if ($width == 65535) { $width = 0; } + if ($asSubset && $cid > 255 && (!isset($font['subset'][$cid]) || !$font['subset'][$cid])) { + continue; + } + if (!isset($font['dw']) || (isset($font['dw']) && $width != $font['dw'])) { + if ($cid == ($prevcid + 1)) { + // consecutive CID + if ($width == $prevwidth) { + if ($width == $range[$rangeid][0]) { + $range[$rangeid][] = $width; + } else { + array_pop($range[$rangeid]); + // new range + $rangeid = $prevcid; + $range[$rangeid] = array(); + $range[$rangeid][] = $prevwidth; + $range[$rangeid][] = $width; + } + $interval = true; + $range[$rangeid]['interval'] = true; + } else { + if ($interval) { + // new range + $rangeid = $cid; + $range[$rangeid] = array(); + $range[$rangeid][] = $width; + } else { + $range[$rangeid][] = $width; + } + $interval = false; + } + } else { + // new range + $rangeid = $cid; + $range[$rangeid] = array(); + $range[$rangeid][] = $width; + $interval = false; + } + $prevcid = $cid; + $prevwidth = $width; + } + } + $w = $this->_putfontranges($range); + $this->_out($w); + if (!$asSubset) { + if (is_writable(dirname(_MPDF_TTFONTDATAPATH.'x'))) { + $fh = fopen(_MPDF_TTFONTDATAPATH.$font['fontkey'].'.cw',"wb"); + fwrite($fh,$w,strlen($w)); + fclose($fh); + } + } +} + +function _putfontranges(&$range) { + // optimize ranges + $prevk = -1; + $nextk = -1; + $prevint = false; + foreach ($range as $k => $ws) { + $cws = count($ws); + if (($k == $nextk) AND (!$prevint) AND ((!isset($ws['interval'])) OR ($cws < 4))) { + if (isset($range[$k]['interval'])) { + unset($range[$k]['interval']); + } + $range[$prevk] = array_merge($range[$prevk], $range[$k]); + unset($range[$k]); + } else { + $prevk = $k; + } + $nextk = $k + $cws; + if (isset($ws['interval'])) { + if ($cws > 3) { + $prevint = true; + } else { + $prevint = false; + } + unset($range[$k]['interval']); + --$nextk; + } else { + $prevint = false; + } + } + // output data + $w = ''; + foreach ($range as $k => $ws) { + if (count(array_count_values($ws)) == 1) { + // interval mode is more compact + $w .= ' '.$k.' '.($k + count($ws) - 1).' '.$ws[0]; + } else { + // range mode + $w .= ' '.$k.' [ '.implode(' ', $ws).' ]' . "\n"; + } + } + return '/W ['.$w.' ]'; +} + + +function _putfontwidths(&$font, $cidoffset=0) { + ksort($font['cw']); + unset($font['cw'][65535]); + $rangeid = 0; + $range = array(); + $prevcid = -2; + $prevwidth = -1; + $interval = false; + // for each character + foreach ($font['cw'] as $cid => $width) { + $cid -= $cidoffset; + if (!isset($font['dw']) || (isset($font['dw']) && $width != $font['dw'])) { + if ($cid == ($prevcid + 1)) { + // consecutive CID + if ($width == $prevwidth) { + if ($width == $range[$rangeid][0]) { + $range[$rangeid][] = $width; + } else { + array_pop($range[$rangeid]); + // new range + $rangeid = $prevcid; + $range[$rangeid] = array(); + $range[$rangeid][] = $prevwidth; + $range[$rangeid][] = $width; + } + $interval = true; + $range[$rangeid]['interval'] = true; + } else { + if ($interval) { + // new range + $rangeid = $cid; + $range[$rangeid] = array(); + $range[$rangeid][] = $width; + } else { + $range[$rangeid][] = $width; + } + $interval = false; + } + } else { + // new range + $rangeid = $cid; + $range[$rangeid] = array(); + $range[$rangeid][] = $width; + $interval = false; + } + $prevcid = $cid; + $prevwidth = $width; + } + } + $this->_out($this->_putfontranges($range)); +} + + +/*-- CJK-FONTS --*/ + +// from class PDF_Chinese CJK EXTENSIONS +function _putType0(&$font) +{ + //Type0 + $this->_out('/Subtype /Type0'); + $this->_out('/BaseFont /'.$font['name'].'-'.$font['CMap']); + $this->_out('/Encoding /'.$font['CMap']); + $this->_out('/DescendantFonts ['.($this->n+1).' 0 R]'); + $this->_out('>>'); + $this->_out('endobj'); + //CIDFont + $this->_newobj(); + $this->_out('<</Type /Font'); + $this->_out('/Subtype /CIDFontType0'); + $this->_out('/BaseFont /'.$font['name']); + + $cidinfo = '/Registry '.$this->_textstring('Adobe'); + $cidinfo .= ' /Ordering '.$this->_textstring($font['registry']['ordering']); + $cidinfo .= ' /Supplement '.$font['registry']['supplement']; + $this->_out('/CIDSystemInfo <<'.$cidinfo.'>>'); + + $this->_out('/FontDescriptor '.($this->n+1).' 0 R'); + if (isset($font['MissingWidth'])){ + $this->_out('/DW '.$font['MissingWidth'].''); + } + $this->_putfontwidths($font, 31); + $this->_out('>>'); + $this->_out('endobj'); + + //Font descriptor + $this->_newobj(); + $s = '<</Type /FontDescriptor /FontName /'.$font['name']; + foreach ($font['desc'] as $k => $v) { + if ($k != 'Style') { + $s .= ' /'.$k.' '.$v.''; + } + } + $this->_out($s.'>>'); + $this->_out('endobj'); +} +/*-- END CJK-FONTS --*/ + + + +function _putimages() +{ + $filter=($this->compress) ? '/Filter /FlateDecode ' : ''; + reset($this->images); + while(list($file,$info)=each($this->images)) { + $this->_newobj(); + $this->images[$file]['n']=$this->n; + $this->_out('<</Type /XObject'); + $this->_out('/Subtype /Image'); + $this->_out('/Width '.$info['w']); + $this->_out('/Height '.$info['h']); + if (isset($info['masked'])) { + $this->_out('/SMask '.($this->n - 1).' 0 R'); + } + if($info['cs']=='Indexed') { + if ($this->PDFX || ($this->PDFA && $this->restrictColorSpace==3)) { $this->Error("PDFA1-b and PDFX/1-a files do not permit using mixed colour space (".$file.")."); } + $this->_out('/ColorSpace [/Indexed /DeviceRGB '.(strlen($info['pal'])/3-1).' '.($this->n+1).' 0 R]'); + } + else { + $this->_out('/ColorSpace /'.$info['cs']); + if($info['cs']=='DeviceCMYK') { + if ($this->PDFA && $this->restrictColorSpace!=3) { $this->Error("PDFA1-b does not permit Images using mixed colour space (".$file.")."); } + if($info['type']=='jpg') { $this->_out('/Decode [1 0 1 0 1 0 1 0]'); } + } + else if ($info['cs']=='DeviceRGB' && ($this->PDFX || ($this->PDFA && $this->restrictColorSpace==3))) { $this->Error("PDFA1-b and PDFX/1-a files do not permit using mixed colour space (".$file.")."); } + } + $this->_out('/BitsPerComponent '.$info['bpc']); + if (isset($info['f']) && $info['f']) { $this->_out('/Filter /'.$info['f']); } + if(isset($info['parms'])) { $this->_out($info['parms']); } + if(isset($info['trns']) and is_array($info['trns'])) { + $trns=''; + for($i=0;$i<count($info['trns']);$i++) + $trns.=$info['trns'][$i].' '.$info['trns'][$i].' '; + $this->_out('/Mask ['.$trns.']'); + } + $this->_out('/Length '.strlen($info['data']).'>>'); + $this->_putstream($info['data']); + + unset($this->images[$file]['data']); + $this->_out('endobj'); + //Palette + if($info['cs']=='Indexed') { + $this->_newobj(); + $pal=($this->compress) ? gzcompress($info['pal']) : $info['pal']; + $this->_out('<<'.$filter.'/Length '.strlen($pal).'>>'); + $this->_putstream($pal); + $this->_out('endobj'); + } + } +} + +function _putinfo() +{ + $this->_out('/Producer '.$this->_UTF16BEtextstring('mPDF '.mPDF_VERSION)); + if(!empty($this->title)) + $this->_out('/Title '.$this->_UTF16BEtextstring($this->title)); + if(!empty($this->subject)) + $this->_out('/Subject '.$this->_UTF16BEtextstring($this->subject)); + if(!empty($this->author)) + $this->_out('/Author '.$this->_UTF16BEtextstring($this->author)); + if(!empty($this->keywords)) + $this->_out('/Keywords '.$this->_UTF16BEtextstring($this->keywords)); + if(!empty($this->creator)) + $this->_out('/Creator '.$this->_UTF16BEtextstring($this->creator)); + + $z = date('O'); // +0200 + $offset = substr($z,0,3)."'".substr($z,3,2)."'"; + $this->_out('/CreationDate '.$this->_textstring(date('YmdHis').$offset)); + $this->_out('/ModDate '.$this->_textstring(date('YmdHis').$offset)); + if ($this->PDFX) { + $this->_out('/Trapped/False'); + $this->_out('/GTS_PDFXVersion(PDF/X-1a:2003)'); + } +} + +function _putmetadata() { + $this->_newobj(); + $this->MetadataRoot = $this->n; + $Producer = 'mPDF '.mPDF_VERSION; + $z = date('O'); // +0200 + $offset = substr($z,0,3).':'.substr($z,3,2); + $CreationDate = date('Y-m-d\TH:i:s').$offset; // 2006-03-10T10:47:26-05:00 2006-06-19T09:05:17Z + $uuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 0xffff), mt_rand(0, 0xffff), + mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, + mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) ); + + + $m = '<?xpacket begin="'.chr(239).chr(187).chr(191).'" id="W5M0MpCehiHzreSzNTczkc9d"?>'."\n"; // begin = FEFF BOM + $m .= ' <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-701">'."\n"; + $m .= ' <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">'."\n"; + $m .= ' <rdf:Description rdf:about="uuid:'.$uuid.'" xmlns:pdf="http://ns.adobe.com/pdf/1.3/">'."\n"; + $m .= ' <pdf:Producer>'.$Producer.'</pdf:Producer>'."\n"; + if(!empty($this->keywords)) { $m .= ' <pdf:Keywords>'.$this->keywords.'</pdf:Keywords>'."\n"; } + $m .= ' </rdf:Description>'."\n"; + + $m .= ' <rdf:Description rdf:about="uuid:'.$uuid.'" xmlns:xmp="http://ns.adobe.com/xap/1.0/">'."\n"; + $m .= ' <xmp:CreateDate>'.$CreationDate.'</xmp:CreateDate>'."\n"; + $m .= ' <xmp:ModifyDate>'.$CreationDate.'</xmp:ModifyDate>'."\n"; + $m .= ' <xmp:MetadataDate>'.$CreationDate.'</xmp:MetadataDate>'."\n"; + if(!empty($this->creator)) { $m .= ' <xmp:CreatorTool>'.$this->creator.'</xmp:CreatorTool>'."\n"; } + $m .= ' </rdf:Description>'."\n"; + + // DC elements + $m .= ' <rdf:Description rdf:about="uuid:'.$uuid.'" xmlns:dc="http://purl.org/dc/elements/1.1/">'."\n"; + $m .= ' <dc:format>application/pdf</dc:format>'."\n"; + if(!empty($this->title)) { + $m .= ' <dc:title> + <rdf:Alt> + <rdf:li xml:lang="x-default">'.$this->title.'</rdf:li> + </rdf:Alt> + </dc:title>'."\n"; + } + if(!empty($this->keywords)) { + $m .= ' <dc:subject> + <rdf:Bag> + <rdf:li>'.$this->keywords.'</rdf:li> + </rdf:Bag> + </dc:subject>'."\n"; + } + if(!empty($this->subject)) { + $m .= ' <dc:description> + <rdf:Alt> + <rdf:li xml:lang="x-default">'.$this->subject.'</rdf:li> + </rdf:Alt> + </dc:description>'."\n"; + } + if(!empty($this->author)) { + $m .= ' <dc:creator> + <rdf:Seq> + <rdf:li>'.$this->author.'</rdf:li> + </rdf:Seq> + </dc:creator>'."\n"; + } + $m .= ' </rdf:Description>'."\n"; + + + // This bit is specific to PDFX-1a + if ($this->PDFX) { + $m .= ' <rdf:Description rdf:about="uuid:'.$uuid.'" xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/" pdfx:Apag_PDFX_Checkup="1.3" pdfx:GTS_PDFXConformance="PDF/X-1a:2003" pdfx:GTS_PDFXVersion="PDF/X-1:2003"/>'."\n"; + } + + // This bit is specific to PDFA-1b + else if ($this->PDFA) { + $m .= ' <rdf:Description rdf:about="uuid:'.$uuid.'" xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/" >'."\n"; + $m .= ' <pdfaid:part>1</pdfaid:part>'."\n"; + $m .= ' <pdfaid:conformance>B</pdfaid:conformance>'."\n"; + $m .= ' <pdfaid:amd>2005</pdfaid:amd>'."\n"; + $m .= ' </rdf:Description>'."\n"; + } + + $m .= ' <rdf:Description rdf:about="uuid:'.$uuid.'" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">'."\n"; + $m .= ' <xmpMM:DocumentID>uuid:'.$uuid.'</xmpMM:DocumentID>'."\n"; + $m .= ' </rdf:Description>'."\n"; + $m .= ' </rdf:RDF>'."\n"; + $m .= ' </x:xmpmeta>'."\n"; + $m .= str_repeat(str_repeat(' ',100)."\n",20); // 2-4kB whitespace padding required + $m .= '<?xpacket end="w"?>'; // "r" read only + $this->_out('<</Type/Metadata/Subtype/XML/Length '.strlen($m).'>>'); + $this->_putstream($m); + $this->_out('endobj'); +} + +function _putoutputintent() { + $this->_newobj(); + $this->OutputIntentRoot = $this->n; + $this->_out('<</Type /OutputIntent'); + + if ($this->PDFA) { + $this->_out('/S /GTS_PDFA1'); + if ($this->ICCProfile) { + $this->_out('/Info ('.preg_replace('/_/',' ',$this->ICCProfile).')'); + $this->_out('/OutputConditionIdentifier (Custom)'); + $this->_out('/OutputCondition ()'); + } + else { + $this->_out('/Info (sRGB IEC61966-2.1)'); + $this->_out('/OutputConditionIdentifier (sRGB IEC61966-2.1)'); + $this->_out('/OutputCondition ()'); + } + $this->_out('/DestOutputProfile '.($this->n+1).' 0 R'); + } + else if ($this->PDFX) { // always a CMYK profile + $this->_out('/S /GTS_PDFX'); + if ($this->ICCProfile) { + $this->_out('/Info ('.preg_replace('/_/',' ',$this->ICCProfile).')'); + $this->_out('/OutputConditionIdentifier (Custom)'); + $this->_out('/OutputCondition ()'); + $this->_out('/DestOutputProfile '.($this->n+1).' 0 R'); + } + else { + $this->_out('/Info (CGATS TR 001)'); + $this->_out('/OutputConditionIdentifier (CGATS TR 001)'); + $this->_out('/OutputCondition (CGATS TR 001 (SWOP))'); + $this->_out('/RegistryName (http://www.color.org)'); + } + } + $this->_out('>>'); + $this->_out('endobj'); + + if ($this->PDFX && !$this->ICCProfile) { return; } // no ICCProfile embedded + + $this->_newobj(); + if ($this->ICCProfile) + $s = file_get_contents(_MPDF_PATH.'iccprofiles/'.$this->ICCProfile.'.icc'); + else + $s = file_get_contents(_MPDF_PATH.'iccprofiles/sRGB_IEC61966-2-1.icc'); + if ($this->compress) { $s = gzcompress($s); } + $this->_out('<<'); + if ($this->PDFX || ($this->PDFA && $this->restrictColorSpace == 3)) { $this->_out('/N 4'); } + else { $this->_out('/N 3'); } + if ($this->compress) + $this->_out('/Filter /FlateDecode '); + $this->_out('/Length '.strlen($s).'>>'); + $this->_putstream($s); + $this->_out('endobj'); +} + + +function _putcatalog() { + $this->_out('/Type /Catalog'); + $this->_out('/Pages 1 0 R'); + if($this->ZoomMode=='fullpage') $this->_out('/OpenAction [3 0 R /Fit]'); + elseif($this->ZoomMode=='fullwidth') $this->_out('/OpenAction [3 0 R /FitH null]'); + elseif($this->ZoomMode=='real') $this->_out('/OpenAction [3 0 R /XYZ null null 1]'); + elseif(!is_string($this->ZoomMode)) $this->_out('/OpenAction [3 0 R /XYZ null null '.($this->ZoomMode/100).']'); + else $this->_out('/OpenAction [3 0 R /XYZ null null null]'); + if($this->LayoutMode=='single') $this->_out('/PageLayout /SinglePage'); + elseif($this->LayoutMode=='continuous') $this->_out('/PageLayout /OneColumn'); + elseif($this->LayoutMode=='twoleft') $this->_out('/PageLayout /TwoColumnLeft'); + elseif($this->LayoutMode=='tworight') $this->_out('/PageLayout /TwoColumnRight'); + elseif($this->LayoutMode=='two') { + if ($this->mirrorMargins) { $this->_out('/PageLayout /TwoColumnRight'); } + else { $this->_out('/PageLayout /TwoColumnLeft'); } + } + +/*-- BOOKMARKS --*/ + if(count($this->BMoutlines)>0) { + $this->_out('/Outlines '.$this->OutlineRoot.' 0 R'); + $this->_out('/PageMode /UseOutlines'); + } +/*-- END BOOKMARKS --*/ + if(is_int(strpos($this->DisplayPreferences,'FullScreen'))) $this->_out('/PageMode /FullScreen'); + + // Metadata + if ($this->PDFA || $this->PDFX) { + $this->_out('/Metadata '.$this->MetadataRoot.' 0 R'); + } + // OutputIntents + if ($this->PDFA || $this->PDFX || $this->ICCProfile) { + $this->_out('/OutputIntents ['.$this->OutputIntentRoot.' 0 R]'); + } + +/*-- FORMS --*/ + if (count($this->form->forms)>0) { + $this->form->_putFormsCatalog(); + } +/*-- END FORMS --*/ + if ( isset($this->js) ) { + $this->_out('/Names << /JavaScript '.($this->n_js).' 0 R >> '); + } + + if($this->DisplayPreferences || $this->directionality == 'rtl' || $this->mirrorMargins) { + $this->_out('/ViewerPreferences<<'); + if(is_int(strpos($this->DisplayPreferences,'HideMenubar'))) $this->_out('/HideMenubar true'); + if(is_int(strpos($this->DisplayPreferences,'HideToolbar'))) $this->_out('/HideToolbar true'); + if(is_int(strpos($this->DisplayPreferences,'HideWindowUI'))) $this->_out('/HideWindowUI true'); + if(is_int(strpos($this->DisplayPreferences,'DisplayDocTitle'))) $this->_out('/DisplayDocTitle true'); + if(is_int(strpos($this->DisplayPreferences,'CenterWindow'))) $this->_out('/CenterWindow true'); + if(is_int(strpos($this->DisplayPreferences,'FitWindow'))) $this->_out('/FitWindow true'); + // /PrintScaling is PDF 1.6 spec. + if(is_int(strpos($this->DisplayPreferences,'NoPrintScaling')) && !$this->PDFA && !$this->PDFX) + $this->_out('/PrintScaling /None'); + if($this->directionality == 'rtl') $this->_out('/Direction /R2L'); + // /Duplex is PDF 1.7 spec. + if($this->mirrorMargins && !$this->PDFA && !$this->PDFX) { + // if ($this->DefOrientation=='P') $this->_out('/Duplex /DuplexFlipShortEdge'); + $this->_out('/Duplex /DuplexFlipLongEdge'); // PDF v1.7+ + } + $this->_out('>>'); + } + // mPDF 5.6.01 + if($this->open_layer_pane && ($this->hasOC || count($this->layers))) + $this->_out('/PageMode /UseOC'); + + // mPDF 5.6.01 + if ($this->hasOC || count($this->layers)) { + $p = $v = $h = $l = $loff = $lall = $as = ''; // mPDF 5.6.28 + if ($this->hasOC) { + if (($this->hasOC & 1) == 1) $p=$this->n_ocg_print.' 0 R'; + if (($this->hasOC & 2) == 2) $v=$this->n_ocg_view.' 0 R'; + if (($this->hasOC & 4) == 4) $h=$this->n_ocg_hidden.' 0 R'; + $as="<</Event /Print /OCGs [$p $v $h] /Category [/Print]>> <</Event /View /OCGs [$p $v $h] /Category [/View]>>"; + } + + if(count($this->layers)) { + foreach($this->layers as $k=>$layer) { // mPDF 5.6.28 + if (strtolower($this->layerDetails[$k]['state'])=='hidden') { $loff .= $layer['n'].' 0 R '; } + else { $l .= $layer['n'].' 0 R '; } + $lall .= $layer['n'].' 0 R '; + } + } + $this->_out("/OCProperties <</OCGs [$p $v $h $lall] /D <</ON [$p $l] /OFF [$v $h $loff] "); // mPDF 5.6.28 + $this->_out("/Order [$v $p $h $lall] "); // mPDF 5.6.28 + if ($as) $this->_out("/AS [$as] "); + $this->_out(">>>>"); + + } + +} + +// Inactive function left for backwards compatability +function SetUserRights($enable=true, $annots="", $form="", $signature="") { + // Does nothing +} + +function _enddoc() { + if ($this->progressBar) { $this->UpdateProgressBar(2,'10','Writing Headers & Footers'); } // *PROGRESS-BAR* + $this->_puthtmlheaders(); // *HTMLHEADERS-FOOTERS* + if ($this->progressBar) { $this->UpdateProgressBar(2,'20','Writing Pages'); } // *PROGRESS-BAR* + // Remove references to unused fonts (usually default font) + foreach($this->fonts as $fk=>$font) { + if (!$font['used'] && ($font['type']=='TTF')) { + if ($font['sip'] || $font['smp']) { + foreach($font['subsetfontids'] AS $k => $fid) { + foreach($this->pages AS $pn=>$page) { + $this->pages[$pn] = preg_replace('/\s\/F'.$fid.' \d[\d.]* Tf\s/is',' ',$this->pages[$pn]); + } + } + } + else { + foreach($this->pages AS $pn=>$page) { + $this->pages[$pn] = preg_replace('/\s\/F'.$font['i'].' \d[\d.]* Tf\s/is',' ',$this->pages[$pn]); + } + } + } + } + + // mPDF 5.6.01 - LAYERS + if (count($this->layers)) { + foreach($this->pages AS $pn=>$page) { + preg_match_all('/\/OCZ-index \/ZI(\d+) BDC(.*?)(EMCZ)-index/is',$this->pages[$pn],$m1); + preg_match_all('/\/OCBZ-index \/ZI(\d+) BDC(.*?)(EMCBZ)-index/is',$this->pages[$pn],$m2); + preg_match_all('/\/OCGZ-index \/ZI(\d+) BDC(.*?)(EMCGZ)-index/is',$this->pages[$pn],$m3); + $m = array(); + for ($i=0;$i<4;$i++) { + $m[$i] = array_merge($m1[$i],$m2[$i],$m3[$i]); + } + if (count($m[0])) { + $sortarr = array(); + for($i=0;$i<count($m[0]);$i++) { + $key = $m[1][$i]*2; + if ($m[3][$i]=='EMCZ') $key +=2; // background first then gradient then normal + else if ($m[3][$i]=='EMCGZ') $key +=1; + $sortarr[$i] = $key; + } + asort($sortarr); + foreach($sortarr AS $i=>$k) { + $this->pages[$pn] = str_replace($m[0][$i],'',$this->pages[$pn] ); + $this->pages[$pn] .= "\n".$m[0][$i]."\n"; + } + $this->pages[$pn] = preg_replace('/\/OC[BG]{0,1}Z-index \/ZI(\d+) BDC/is','/OC /ZI\\1 BDC ',$this->pages[$pn]); + $this->pages[$pn] = preg_replace('/EMC[BG]{0,1}Z-index/is','EMC',$this->pages[$pn]); + } + } + } + + $this->_putpages(); + if ($this->progressBar) { $this->UpdateProgressBar(2,'30','Writing document resources'); } // *PROGRESS-BAR* + + $this->_putresources(); + //Info + $this->_newobj(); + $this->InfoRoot = $this->n; + $this->_out('<<'); + if ($this->progressBar) { $this->UpdateProgressBar(2,'80','Writing document info'); } // *PROGRESS-BAR* + $this->_putinfo(); + $this->_out('>>'); + $this->_out('endobj'); + + // METADATA + if ($this->PDFA || $this->PDFX) { $this->_putmetadata(); } + // OUTPUTINTENT + if ($this->PDFA || $this->PDFX || $this->ICCProfile) { $this->_putoutputintent(); } + + //Catalog + $this->_newobj(); + $this->_out('<<'); + if ($this->progressBar) { $this->UpdateProgressBar(2,'90','Writing document catalog'); } // *PROGRESS-BAR* + $this->_putcatalog(); + $this->_out('>>'); + $this->_out('endobj'); + //Cross-ref + $o=strlen($this->buffer); + $this->_out('xref'); + $this->_out('0 '.($this->n+1)); + $this->_out('0000000000 65535 f '); + for($i=1; $i <= $this->n ; $i++) + $this->_out(sprintf('%010d 00000 n ',$this->offsets[$i])); + //Trailer + $this->_out('trailer'); + $this->_out('<<'); + $this->_puttrailer(); + $this->_out('>>'); + $this->_out('startxref'); + $this->_out($o); + + $this->buffer .= '%%EOF'; + $this->state=3; +/*-- IMPORTS --*/ + + if ($this->enableImports && count($this->parsers) > 0) { + foreach ($this->parsers as $k => $_){ + $this->parsers[$k]->closeFile(); + $this->parsers[$k] = null; + unset($this->parsers[$k]); + } + } +/*-- END IMPORTS --*/ +} + +function _beginpage($orientation,$mgl='',$mgr='',$mgt='',$mgb='',$mgh='',$mgf='',$ohname='',$ehname='',$ofname='',$efname='',$ohvalue=0,$ehvalue=0,$ofvalue=0,$efvalue=0,$pagesel='',$newformat='') { + if (!($pagesel && $this->page==1 && (sprintf("%0.4f", $this->y)==sprintf("%0.4f", $this->tMargin)))) { + $this->page++; + $this->pages[$this->page]=''; + } + $this->state=2; + $resetHTMLHeadersrequired = false; + + if ($newformat) { $this->_setPageSize($newformat, $orientation); } +/*-- CSS-PAGE --*/ + // Paged media (page-box) + + if ($pagesel || (isset($this->page_box['using']) && $this->page_box['using'])) { + if ($pagesel || $this->page==1) { $first = true; } + else { $first = false; } + if ($this->mirrorMargins && ($this->page % 2==0)) { $oddEven = 'E'; } + else { $oddEven = 'O'; } + if ($pagesel) { $psel = $pagesel; } + else if ($this->page_box['current']) { $psel = $this->page_box['current']; } + else { $psel = ''; } + list($orientation,$mgl,$mgr,$mgt,$mgb,$mgh,$mgf,$hname,$fname,$bg,$resetpagenum,$pagenumstyle,$suppress,$marks,$newformat) = $this->SetPagedMediaCSS($psel, $first, $oddEven); + if ($this->mirrorMargins && ($this->page % 2==0)) { + if ($hname) { $ehvalue = 1; $ehname = $hname; } else { $ehvalue = -1; } + if ($fname) { $efvalue = 1; $efname = $fname; } else { $efvalue = -1; } + } + else { + if ($hname) { $ohvalue = 1; $ohname = $hname; } else { $ohvalue = -1; } + if ($fname) { $ofvalue = 1; $ofname = $fname; } else { $ofvalue = -1; } + } + if ($resetpagenum || $pagenumstyle || $suppress) { + $this->PageNumSubstitutions[] = array('from'=>($this->page), 'reset'=> $resetpagenum, 'type'=>$pagenumstyle, 'suppress'=>$suppress); + } + // PAGED MEDIA - CROP / CROSS MARKS from @PAGE + $this->show_marks = $marks; + + // Background color + if (isset($bg['BACKGROUND-COLOR'])) { + $cor = $this->ConvertColor($bg['BACKGROUND-COLOR']); + if ($cor) { + $this->bodyBackgroundColor = $cor; + } + } + else { $this->bodyBackgroundColor = false; } + +/*-- BACKGROUNDS --*/ + if (isset($bg['BACKGROUND-GRADIENT'])) { + $this->bodyBackgroundGradient = $bg['BACKGROUND-GRADIENT']; + } + else { $this->bodyBackgroundGradient = false; } + + // Tiling Patterns + if (isset($bg['BACKGROUND-IMAGE']) && $bg['BACKGROUND-IMAGE']) { + $ret = $this->SetBackground($bg, $this->pgwidth); + if ($ret) { $this->bodyBackgroundImage = $ret; } + } + else { $this->bodyBackgroundImage = false; } +/*-- END BACKGROUNDS --*/ + + $this->page_box['current'] = $psel; + $this->page_box['using'] = true; + } +/*-- END CSS-PAGE --*/ + + //Page orientation + if(!$orientation) + $orientation=$this->DefOrientation; + else { + $orientation=strtoupper(substr($orientation,0,1)); + if($orientation!=$this->DefOrientation) + $this->OrientationChanges[$this->page]=true; + } + if($orientation!=$this->CurOrientation || $newformat) { + + //Change orientation + if($orientation=='P') { + $this->wPt=$this->fwPt; + $this->hPt=$this->fhPt; + $this->w=$this->fw; + $this->h=$this->fh; + if (($this->forcePortraitHeaders || $this->forcePortraitMargins) && $this->DefOrientation=='P') { + $this->tMargin = $this->orig_tMargin; + $this->bMargin = $this->orig_bMargin; + $this->DeflMargin = $this->orig_lMargin; + $this->DefrMargin = $this->orig_rMargin; + $this->margin_header = $this->orig_hMargin; + $this->margin_footer = $this->orig_fMargin; + } + else { $resetHTMLHeadersrequired = true; } // *HTMLHEADERS-FOOTERS* + } + else { + $this->wPt=$this->fhPt; + $this->hPt=$this->fwPt; + $this->w=$this->fh; + $this->h=$this->fw; + if (($this->forcePortraitHeaders || $this->forcePortraitMargins) && $this->DefOrientation=='P') { + $this->tMargin = $this->orig_lMargin; + $this->bMargin = $this->orig_rMargin; + $this->DeflMargin = $this->orig_bMargin; + $this->DefrMargin = $this->orig_tMargin; + $this->margin_header = $this->orig_hMargin; + $this->margin_footer = $this->orig_fMargin; + } + else { $resetHTMLHeadersrequired = true; } // *HTMLHEADERS-FOOTERS* + + } + $this->CurOrientation=$orientation; + $this->ResetMargins(); + $this->pgwidth = $this->w - $this->lMargin - $this->rMargin; + $this->PageBreakTrigger=$this->h-$this->bMargin; + } + + $this->pageDim[$this->page]['w']=$this->w ; + $this->pageDim[$this->page]['h']=$this->h ; + + $this->pageDim[$this->page]['outer_width_LR'] = isset($this->page_box['outer_width_LR']) ? $this->page_box['outer_width_LR'] : 0; + $this->pageDim[$this->page]['outer_width_TB'] = isset($this->page_box['outer_width_TB']) ? $this->page_box['outer_width_TB'] : 0; + if (!isset($this->page_box['outer_width_LR']) && !isset($this->page_box['outer_width_TB'])) { + $this->pageDim[$this->page]['bleedMargin'] = 0; + } + else if ($this->bleedMargin <= $this->page_box['outer_width_LR'] && $this->bleedMargin <= $this->page_box['outer_width_TB']) { + $this->pageDim[$this->page]['bleedMargin'] = $this->bleedMargin; + } + else { + $this->pageDim[$this->page]['bleedMargin'] = min($this->page_box['outer_width_LR'], $this->page_box['outer_width_TB'])-0.01; + } + + // If Page Margins are re-defined + // strlen()>0 is used to pick up (integer) 0, (string) '0', or set value + if ((strlen($mgl)>0 && $this->DeflMargin != $mgl) || (strlen($mgr)>0 && $this->DefrMargin != $mgr) || (strlen($mgt)>0 && $this->tMargin != $mgt) || (strlen($mgb)>0 && $this->bMargin != $mgb) || (strlen($mgh)>0 && $this->margin_header!=$mgh) || (strlen($mgf)>0 && $this->margin_footer!=$mgf)) { + if (strlen($mgl)>0) $this->DeflMargin = $mgl; + if (strlen($mgr)>0) $this->DefrMargin = $mgr; + if (strlen($mgt)>0) $this->tMargin = $mgt; + if (strlen($mgb)>0) $this->bMargin = $mgb; + if (strlen($mgh)>0) $this->margin_header=$mgh; + if (strlen($mgf)>0) $this->margin_footer=$mgf; + $this->ResetMargins(); + $this->SetAutoPageBreak($this->autoPageBreak,$this->bMargin); + $this->pgwidth = $this->w - $this->lMargin - $this->rMargin; + $resetHTMLHeadersrequired = true; // *HTMLHEADERS-FOOTERS* + } + + $this->ResetMargins(); + $this->pgwidth = $this->w - $this->lMargin - $this->rMargin; + $this->SetAutoPageBreak($this->autoPageBreak,$this->bMargin); + + // Reset column top margin + $this->y0 = $this->tMargin; + + $this->x=$this->lMargin; + $this->y=$this->tMargin; + $this->FontFamily=''; + + // HEADERS AND FOOTERS + if ($ohvalue<0 || strtoupper($ohvalue)=='OFF') { + $this->HTMLHeader = ''; + $this->headerDetails['odd'] = array(); + $resetHTMLHeadersrequired = true; // *HTMLHEADERS-FOOTERS* + } + else if ($ohname && $ohvalue>0) { +/*-- HTMLHEADERS-FOOTERS --*/ + if (preg_match('/^html_(.*)$/i',$ohname,$n)) { + if (isset($this->pageHTMLheaders[$n[1]])) { $this->HTMLHeader = $this->pageHTMLheaders[$n[1]]; } + else { $this->HTMLHeader = ''; } + $this->headerDetails['odd'] = array(); + $resetHTMLHeadersrequired = true; + } + else { +/*-- END HTMLHEADERS-FOOTERS --*/ + if (isset($this->pageheaders[$ohname])) { $this->headerDetails['odd'] = $this->pageheaders[$ohname]; } + else if ($ohname!='_default') { $this->headerDetails['odd'] = array(); } + $this->HTMLHeader = ''; +/*-- HTMLHEADERS-FOOTERS --*/ + $resetHTMLHeadersrequired = false; + } +/*-- END HTMLHEADERS-FOOTERS --*/ + } + + if ($ehvalue<0 || strtoupper($ehvalue)=='OFF') { + $this->HTMLHeaderE = ''; + $this->headerDetails['even'] = array(); + $resetHTMLHeadersrequired = true; // *HTMLHEADERS-FOOTERS* + } + else if ($ehname && $ehvalue>0) { +/*-- HTMLHEADERS-FOOTERS --*/ + if (preg_match('/^html_(.*)$/i',$ehname,$n)) { + if (isset($this->pageHTMLheaders[$n[1]])) { $this->HTMLHeaderE = $this->pageHTMLheaders[$n[1]]; } + else { $this->HTMLHeaderE = ''; } + $this->headerDetails['even'] = array(); + $resetHTMLHeadersrequired = true; + } + else { +/*-- END HTMLHEADERS-FOOTERS --*/ + if (isset($this->pageheaders[$ehname])) { $this->headerDetails['even'] = $this->pageheaders[$ehname]; } + else if ($ehname!='_default') { $this->headerDetails['even'] = array(); } + $this->HTMLHeaderE = ''; +/*-- HTMLHEADERS-FOOTERS --*/ + $resetHTMLHeadersrequired = false; + } +/*-- END HTMLHEADERS-FOOTERS --*/ + } + + if ($ofvalue<0 || strtoupper($ofvalue)=='OFF') { + $this->HTMLFooter = ''; + $this->footerDetails['odd'] = array(); + $resetHTMLHeadersrequired = true; // *HTMLHEADERS-FOOTERS* + } + else if ($ofname && $ofvalue>0) { +/*-- HTMLHEADERS-FOOTERS --*/ + if (preg_match('/^html_(.*)$/i',$ofname,$n)) { + if (isset($this->pageHTMLfooters[$n[1]])) { $this->HTMLFooter = $this->pageHTMLfooters[$n[1]]; } + else { $this->HTMLFooter = ''; } + $this->footerDetails['odd'] = array(); + $resetHTMLHeadersrequired = true; + } + else { +/*-- END HTMLHEADERS-FOOTERS --*/ + if (isset($this->pagefooters[$ofname])) { $this->footerDetails['odd'] = $this->pagefooters[$ofname]; } + else if ($ofname!='_default') { $this->footerDetails['odd'] = array(); } + $this->HTMLFooter = ''; +/*-- HTMLHEADERS-FOOTERS --*/ + $resetHTMLHeadersrequired = true; + } +/*-- END HTMLHEADERS-FOOTERS --*/ + } + + if ($efvalue<0 || strtoupper($efvalue)=='OFF') { + $this->HTMLFooterE = ''; + $this->footerDetails['even'] = array(); + $resetHTMLHeadersrequired = true; // *HTMLHEADERS-FOOTERS* + } + else if ($efname && $efvalue>0) { +/*-- HTMLHEADERS-FOOTERS --*/ + if (preg_match('/^html_(.*)$/i',$efname,$n)) { + if (isset($this->pageHTMLfooters[$n[1]])) { $this->HTMLFooterE = $this->pageHTMLfooters[$n[1]]; } + else { $this->HTMLFooterE = ''; } + $this->footerDetails['even'] = array(); + $resetHTMLHeadersrequired = true; + } + else { +/*-- END HTMLHEADERS-FOOTERS --*/ + if (isset($this->pagefooters[$efname])) { $this->footerDetails['even'] = $this->pagefooters[$efname]; } + else if ($efname!='_default') { $this->footerDetails['even'] = array(); } + $this->HTMLFooterE = ''; +/*-- HTMLHEADERS-FOOTERS --*/ + $resetHTMLHeadersrequired = true; + } +/*-- END HTMLHEADERS-FOOTERS --*/ + } +/*-- HTMLHEADERS-FOOTERS --*/ + if ($resetHTMLHeadersrequired) { + $this->SetHTMLHeader($this->HTMLHeader ); + $this->SetHTMLHeader($this->HTMLHeaderE ,'E'); + $this->SetHTMLFooter($this->HTMLFooter ); + $this->SetHTMLFooter($this->HTMLFooterE ,'E'); + } +/*-- END HTMLHEADERS-FOOTERS --*/ + + + if (($this->mirrorMargins) && (($this->page)%2==0)) { // EVEN + $this->_setAutoHeaderHeight($this->headerDetails['even'], $this->HTMLHeaderE); + $this->_setAutoFooterHeight($this->footerDetails['even'], $this->HTMLFooterE); + } + else { // ODD or DEFAULT + $this->_setAutoHeaderHeight($this->headerDetails['odd'], $this->HTMLHeader); + $this->_setAutoFooterHeight($this->footerDetails['odd'], $this->HTMLFooter); + } + // Reset column top margin + $this->y0 = $this->tMargin; + + $this->x=$this->lMargin; + $this->y=$this->tMargin; +} + + + +function _setAutoHeaderHeight(&$det, &$htmlh) { + if ($this->setAutoTopMargin=='pad') { + if ($htmlh['h']) { $h = $htmlh['h']; } + else if ($det) { $h = $this->_getHFHeight($det,'H'); } + else { $h = 0; } + $this->tMargin = $this->margin_header + $h + $this->orig_tMargin; + } + else if ($this->setAutoTopMargin=='stretch') { + if ($htmlh['h']) { $h = $htmlh['h']; } + else if ($det) { $h = $this->_getHFHeight($det,'H'); } + else { $h = 0; } + $this->tMargin = max($this->orig_tMargin, $this->margin_header + $h + $this->autoMarginPadding); + } +} + + +function _setAutoFooterHeight(&$det, &$htmlf) { + if ($this->setAutoBottomMargin=='pad') { + if ($htmlf['h']) { $h = $htmlf['h']; } + else if ($det) { $h = $this->_getHFHeight($det,'F'); } + else { $h = 0; } + $this->bMargin = $this->margin_footer + $h + $this->orig_bMargin; + $this->PageBreakTrigger=$this->h-$this->bMargin ; + } + else if ($this->setAutoBottomMargin=='stretch') { + if ($htmlf['h']) { $h = $htmlf['h']; } + else if ($det) { $h = $this->_getHFHeight($det,'F'); } + else { $h = 0; } + $this->bMargin = max($this->orig_bMargin, $this->margin_footer + $h + $this->autoMarginPadding); + $this->PageBreakTrigger=$this->h-$this->bMargin ; + } +} + +function _getHFHeight(&$det,$end) { + $h = 0; + if(count($det)) { + foreach(array('L','C','R') AS $pos) { + if (isset($det[$pos]['content']) && $det[$pos]['content']) { + if (isset($det[$pos]['font-size']) && $det[$pos]['font-size']) { $hfsz = $det[$pos]['font-size']; } + else { $hfsz = $this->default_font_size; } + $h = max($h,$hfsz/_MPDFK); + } + } + if ($det['line'] && $end=='H') { $h += $h/_MPDFK*$this->header_line_spacing; } + else if ($det['line'] && $end=='F') { $h += $h/_MPDFK*$this->footer_line_spacing; } + } + return $h; +} + + +function _endpage() { +/*-- CSS-IMAGE-FLOAT --*/ + $this->printfloatbuffer(); +/*-- END CSS-IMAGE-FLOAT --*/ + + if($this->visibility!='visible') + $this->SetVisibility('visible'); + $this->EndLayer(); // mPDF 5.6.01 + //End of page contents + $this->state=1; +} + +function _newobj($obj_id=false,$onlynewobj=false) { + if (!$obj_id) { + $obj_id = ++$this->n; + } + //Begin a new object + if (!$onlynewobj) { + $this->offsets[$obj_id] = strlen($this->buffer); + $this->_out($obj_id.' 0 obj'); + $this->_current_obj_id = $obj_id; // for later use with encryption + } +} + +function _dounderline($x,$y,$txt) { + // Now print line exactly where $y secifies - called from Text() and Cell() - adjust position there + // WORD SPACING + $w =($this->GetStringWidth($txt)*_MPDFK) + ($this->charspacing * mb_strlen( $txt, $this->mb_enc )) + + ( $this->ws * mb_substr_count( $txt, ' ', $this->mb_enc )); + //Draw a line + return sprintf('%.3F %.3F m %.3F %.3F l S',$x*_MPDFK,($this->h-$y)*_MPDFK,($x*_MPDFK)+$w,($this->h-$y)*_MPDFK); +} + + +function _imageError($file, $firsttime, $msg) { + // Save re-trying image URL's which have already failed + $this->failedimages[$file] = true; + if ($firsttime && ($this->showImageErrors || $this->debug)) { + $this->Error("IMAGE Error (".$file."): ".$msg); + } + return false; +} + + +function _getImage(&$file, $firsttime=true, $allowvector=true, $orig_srcpath=false) { + // firsttime i.e. whether to add to this->images - use false when calling iteratively + // Image Data passed directly as var:varname + if (preg_match('/var:\s*(.*)/',$file, $v)) { + $data = $this->$v[1]; + $file = md5($data); + } + // mPDF 5.5.13 + if (preg_match('/data:image\/(gif|jpeg|png);base64,(.*)/',$file, $v)) { + $type = $v[1]; + $data = base64_decode($v[2]); + $file = md5($data); + } + + // mPDF 5.6.02 + if ($firsttime && $file && substr($file,0,5)!='data:') { $file = urlencode_part($file); } + if ($firsttime && $orig_srcpath && substr($orig_srcpath,0,5)!='data:') { $orig_srcpath = urlencode_part($orig_srcpath); } + + $ppUx = 0; + if ($orig_srcpath && isset($this->images[$orig_srcpath])) { $file=$orig_srcpath; return $this->images[$orig_srcpath]; } + if (isset($this->images[$file])) { return $this->images[$file]; } + else if ($orig_srcpath && isset($this->formobjects[$orig_srcpath])) { $file=$orig_srcpath; return $this->formobjects[$file]; } + else if (isset($this->formobjects[$file])) { return $this->formobjects[$file]; } + // Save re-trying image URL's which have already failed + else if ($firsttime && isset($this->failedimages[$file])) { return $this->_imageError($file, $firsttime, ''); } + if (empty($data)) { + $type = ''; + $data = ''; + + if ($orig_srcpath && $this->basepathIsLocal && $check = @fopen($orig_srcpath,"rb")) { + fclose($check); + $file=$orig_srcpath; + $data = file_get_contents($file); + $type = $this->_imageTypeFromString($data); + } + if (!$data && $check = @fopen($file,"rb")) { + fclose($check); + $data = file_get_contents($file); + $type = $this->_imageTypeFromString($data); + } + if ((!$data || !$type) && !ini_get('allow_url_fopen') ) { // only worth trying if remote file and !ini_get('allow_url_fopen') + $this->file_get_contents_by_socket($file, $data); // needs full url?? even on local (never needed for local) + if ($data) { $type = $this->_imageTypeFromString($data); } + } + if ((!$data || !$type) && !ini_get('allow_url_fopen') && function_exists("curl_init")) { + $this->file_get_contents_by_curl($file, $data); // needs full url?? even on local (never needed for local) + if ($data) { $type = $this->_imageTypeFromString($data); } + } + + } + if (!$data) { return $this->_imageError($file, $firsttime, 'Could not find image file'); } + if (empty($type)) { $type = $this->_imageTypeFromString($data); } + if (($type == 'wmf' || $type == 'svg') && !$allowvector) { return $this->_imageError($file, $firsttime, 'WMF or SVG image file not supported in this context'); } + + // SVG + if ($type == 'svg') { + if (!class_exists('SVG', false)) { include(_MPDF_PATH .'classes/svg.php'); } + $svg = new SVG($this); + $family=$this->FontFamily; + $style=$this->FontStyle; + $size=$this->FontSizePt; + $info = $svg->ImageSVG($data); + //Restore font + if($family) $this->SetFont($family,$style,$size,false); + if (!$info) { return $this->_imageError($file, $firsttime, 'Error parsing SVG file'); } + $info['type']='svg'; + $info['i']=count($this->formobjects)+1; + $this->formobjects[$file]=$info; + return $info; + } + + // JPEG + if ($type == 'jpeg' || $type == 'jpg') { + $hdr = $this->_jpgHeaderFromString($data); + if (!$hdr) { return $this->_imageError($file, $firsttime, 'Error parsing JPG header'); } + $a = $this->_jpgDataFromHeader($hdr); + $j = strpos($data,'JFIF'); + if ($j) { + //Read resolution + $unitSp=ord(substr($data,($j+7),1)); + if ($unitSp > 0) { + $ppUx=$this->_twobytes2int(substr($data,($j+8),2)); // horizontal pixels per meter, usually set to zero + if ($unitSp == 2) { // = dots per cm (if == 1 set as dpi) + $ppUx=round($ppUx/10 *25.4); + } + } + } + if ($a[2] == 'DeviceCMYK' && (($this->PDFA && $this->restrictColorSpace!=3) || $this->restrictColorSpace==2)) { + // convert to RGB image + if (!function_exists("gd_info")) { $this->Error("JPG image may not use CMYK color space (".$file.")."); } + if ($this->PDFA && !$this->PDFAauto) { $this->PDFAXwarnings[] = "JPG image may not use CMYK color space - ".$file." - (Image converted to RGB. NB This will alter the colour profile of the image.)"; } + $im = @imagecreatefromstring($data); + if ($im) { + $tempfile = _MPDF_TEMP_PATH.'_tempImgPNG'.RAND(1,10000).'.png'; + imageinterlace($im, false); + $check = @imagepng($im, $tempfile); + if (!$check) { return $this->_imageError($file, $firsttime, 'Error creating temporary file ('.$tempfile.') whilst using GD library to parse JPG(CMYK) image'); } + $info = $this->_getImage($tempfile, false); + if (!$info) { return $this->_imageError($file, $firsttime, 'Error parsing temporary file ('.$tempfile.') created with GD library to parse JPG(CMYK) image'); } + imagedestroy($im); + unlink($tempfile); + $info['type']='jpg'; + if ($firsttime) { + $info['i']=count($this->images)+1; + $this->images[$file]=$info; + } + return $info; + } + else { return $this->_imageError($file, $firsttime, 'Error creating GD image file from JPG(CMYK) image'); } + } + else if ($a[2] == 'DeviceRGB' && ($this->PDFX || $this->restrictColorSpace==3)) { + // Convert to CMYK image stream - nominally returned as type='png' + $info = $this->_convImage($data, $a[2], 'DeviceCMYK', $a[0], $a[1], $ppUx, false); + if (($this->PDFA && !$this->PDFAauto) || ($this->PDFX && !$this->PDFXauto)) { $this->PDFAXwarnings[] = "JPG image may not use RGB color space - ".$file." - (Image converted to CMYK. NB This will alter the colour profile of the image.)"; } + } + else if (($a[2] == 'DeviceRGB' || $a[2] == 'DeviceCMYK') && $this->restrictColorSpace==1) { + // Convert to Grayscale image stream - nominally returned as type='png' + $info = $this->_convImage($data, $a[2], 'DeviceGray', $a[0], $a[1], $ppUx, false); + } + else { + $info = array('w'=>$a[0],'h'=>$a[1],'cs'=>$a[2],'bpc'=>$a[3],'f'=>'DCTDecode','data'=>$data, 'type'=>'jpg'); + if ($ppUx) { $info['set-dpi'] = $ppUx; } + } + if (!$info) { return $this->_imageError($file, $firsttime, 'Error parsing or converting JPG image'); } + + if ($firsttime) { + $info['i']=count($this->images)+1; + $this->images[$file]=$info; + } + return $info; + } + + // PNG + else if ($type == 'png') { + //Check signature + if(substr($data,0,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) { + return $this->_imageError($file, $firsttime, 'Error parsing PNG identifier'); + } + //Read header chunk + if(substr($data,12,4)!='IHDR') { + return $this->_imageError($file, $firsttime, 'Incorrect PNG file (no IHDR block found)'); + } + + $w=$this->_fourbytes2int(substr($data,16,4)); + $h=$this->_fourbytes2int(substr($data,20,4)); + $bpc=ord(substr($data,24,1)); + $errpng = false; + $pngalpha = false; + if($bpc>8) { $errpng = 'not 8-bit depth'; } + $ct=ord(substr($data,25,1)); + if($ct==0) { $colspace='DeviceGray'; } + elseif($ct==2) { $colspace='DeviceRGB'; } + elseif($ct==3) { $colspace='Indexed'; } + elseif($ct==4) { $colspace='DeviceGray'; $errpng = 'alpha channel'; $pngalpha = true; } + else { $colspace='DeviceRGB'; $errpng = 'alpha channel'; $pngalpha = true; } + if(ord(substr($data,26,1))!=0) { $errpng = 'compression method'; } + if(ord(substr($data,27,1))!=0) { $errpng = 'filter method'; } + if(ord(substr($data,28,1))!=0) { $errpng = 'interlaced file'; } + $j = strpos($data,'pHYs'); + if ($j) { + //Read resolution + $unitSp=ord(substr($data,($j+12),1)); + if ($unitSp == 1) { + $ppUx=$this->_fourbytes2int(substr($data,($j+4),4)); // horizontal pixels per meter, usually set to zero + $ppUx=round($ppUx/1000 *25.4); + } + } + if (($colspace == 'DeviceRGB' || $colspace == 'Indexed') && ($this->PDFX || $this->restrictColorSpace==3)) { + // Convert to CMYK image stream - nominally returned as type='png' + $info = $this->_convImage($data, $colspace, 'DeviceCMYK', $w, $h, $ppUx, $pngalpha); + if (($this->PDFA && !$this->PDFAauto) || ($this->PDFX && !$this->PDFXauto)) { $this->PDFAXwarnings[] = "PNG image may not use RGB color space - ".$file." - (Image converted to CMYK. NB This will alter the colour profile of the image.)"; } + } + else if (($colspace == 'DeviceRGB' || $colspace == 'Indexed') && $this->restrictColorSpace==1) { + // Convert to Grayscale image stream - nominally returned as type='png' + $info = $this->_convImage($data, $colspace, 'DeviceGray', $w, $h, $ppUx, $pngalpha); + } + else if (($this->PDFA || $this->PDFX) && $pngalpha) { + // Remove alpha channel + if ($this->restrictColorSpace==1) { // Grayscale + $info = $this->_convImage($data, $colspace, 'DeviceGray', $w, $h, $ppUx, $pngalpha); + } + else if ($this->restrictColorSpace==3) { // CMYK + $info = $this->_convImage($data, $colspace, 'DeviceCMYK', $w, $h, $ppUx, $pngalpha); + } + else if ($this->PDFA ) { // RGB + $info = $this->_convImage($data, $colspace, 'DeviceRGB', $w, $h, $ppUx, $pngalpha); + } + if (($this->PDFA && !$this->PDFAauto) || ($this->PDFX && !$this->PDFXauto)) { $this->PDFAXwarnings[] = "Transparency (alpha channel) not permitted in PDFA or PDFX files - ".$file." - (Image converted to one without transparency.)"; } + } + else if ($errpng || $pngalpha) { + if (function_exists('gd_info')) { $gd = gd_info(); } + else {$gd = array(); } + if (!isset($gd['PNG Support'])) { return $this->_imageError($file, $firsttime, 'GD library required for PNG image ('.$errpng.')'); } + $im = imagecreatefromstring($data); + if (!$im) { return $this->_imageError($file, $firsttime, 'Error creating GD image from PNG file ('.$errpng.')'); } + $w = imagesx($im); + $h = imagesy($im); + if ($im) { + $tempfile = _MPDF_TEMP_PATH.'_tempImgPNG'.RAND(1,10000).'.png'; + // Alpha channel set + if ($pngalpha && $this->png_alpha_use_white_matte) { + $imgmat = imagecreatetruecolor($w, $h); + imagesavealpha($imgmat, false); + imageinterlace($imgmat, false); + imagefill($imgmat, 0, 0, imagecolorallocate($imgmat, 255, 255, 255)); + imagecopy($imgmat, $im, 0, 0, 0, 0, $w, $h); + ob_start(); + $check = @imagepng($imgmat); + if (!$check) { return $this->_imageError($file, $firsttime, 'Error creating temporary image object whilst using GD library to parse PNG image'); } + $this->_tempimg = ob_get_contents(); + $this->_tempimglnk = 'var:_tempimg'; + ob_end_clean(); + $info = $this->_getImage($this->_tempimglnk, false); + if (!$info) { return $this->_imageError($file, $firsttime, 'Error parsing temporary file image object created with GD library to parse PNG image'); } + imagedestroy($imgmat); + } + elseif ($pngalpha) { + if ($this->PDFA) { $this->Error("PDFA1-b does not permit images with alpha channel transparency (".$file.")."); } + $imgalpha = imagecreate($w, $h); + // generate gray scale pallete + for ($c = 0; $c < 256; ++$c) { ImageColorAllocate($imgalpha, $c, $c, $c); } + // extract alpha channel + $gammacorr = 2.2; // gamma correction + $_gammas = array(0 => 255); + for ($_i = 1; $_i < 127; $_i++) + $_gammas[127 - $_i] = pow((127 - $alpha) / 127, $gammacorr) * 255; + for ($xpx = 0; $xpx < $w; ++$xpx) { + for ($ypx = 0; $ypx < $h; ++$ypx) { + //$colorindex = imagecolorat($im, $xpx, $ypx); + //$col = imagecolorsforindex($im, $colorindex); + //$gamma2 = (pow((((127 - $col['alpha']) * 255 / 127) / 255), $gammacorr) * 255); + //$alpha = (imagecolorat($im, $xpx, $ypx) & 0x7F000000) >> 24; + $alpha = imagecolorat($im, $xpx, $ypx) >> 24; + if ($alpha < 127) { + imagesetpixel($imgalpha, $xpx, $ypx, $_gammas[$alpha]); + } + } + } + // create temp alpha file + $tempfile_alpha = _MPDF_TEMP_PATH.'_tempMskPNG'.RAND(1,10000).'.png'; + if (!is_writable($tempfile_alpha)) { + ob_start(); + $check = @imagepng($imgalpha); + if (!$check) { return $this->_imageError($file, $firsttime, 'Error creating temporary image object whilst using GD library to parse PNG image'); } + imagedestroy($imgalpha); + $this->_tempimg = ob_get_contents(); + $this->_tempimglnk = 'var:_tempimg'; + ob_end_clean(); + // extract image without alpha channel + $imgplain = imagecreatetruecolor($w, $h); + imagecopy($imgplain, $im, 0, 0, 0, 0, $w, $h); + // create temp image file + $minfo = $this->_getImage($this->_tempimglnk, false); + if (!$minfo) { return $this->_imageError($file, $firsttime, 'Error parsing temporary file image object created with GD library to parse PNG image'); } + ob_start(); + $check = @imagepng($imgplain); + if (!$check) { return $this->_imageError($file, $firsttime, 'Error creating temporary image object whilst using GD library to parse PNG image'); } + $this->_tempimg = ob_get_contents(); + $this->_tempimglnk = 'var:_tempimg'; + ob_end_clean(); + $info = $this->_getImage($this->_tempimglnk, false); + if (!$info) { return $this->_imageError($file, $firsttime, 'Error parsing temporary file image object created with GD library to parse PNG image'); } + imagedestroy($imgplain); + $imgmask = count($this->images)+1; + $minfo['cs'] = 'DeviceGray'; + $minfo['i']=$imgmask ; + $this->images[$tempfile_alpha] = $minfo; + + } + else { + $check = @imagepng($imgalpha, $tempfile_alpha); + if (!$check) { return $this->_imageError($file, $firsttime, 'Failed to create temporary image file ('.$tempfile_alpha.') parsing PNG image with alpha channel ('.$errpng.')'); } + imagedestroy($imgalpha); + + // extract image without alpha channel + $imgplain = imagecreatetruecolor($w, $h); + imagecopy($imgplain, $im, 0, 0, 0, 0, $w, $h); + + // create temp image file + $check = @imagepng($imgplain, $tempfile); + if (!$check) { return $this->_imageError($file, $firsttime, 'Failed to create temporary image file ('.$tempfile.') parsing PNG image with alpha channel ('.$errpng.')'); } + imagedestroy($imgplain); + // embed mask image + $minfo = $this->_getImage($tempfile_alpha, false); + unlink($tempfile_alpha); + if (!$minfo) { return $this->_imageError($file, $firsttime, 'Error parsing temporary file ('.$tempfile_alpha.') created with GD library to parse PNG image'); } + $imgmask = count($this->images)+1; + $minfo['cs'] = 'DeviceGray'; + $minfo['i']=$imgmask ; + $this->images[$tempfile_alpha] = $minfo; + // embed image, masked with previously embedded mask + $info = $this->_getImage($tempfile, false); + unlink($tempfile); + if (!$info) { return $this->_imageError($file, $firsttime, 'Error parsing temporary file ('.$tempfile.') created with GD library to parse PNG image'); } + + } + $info['masked'] = $imgmask; + if ($ppUx) { $info['set-dpi'] = $ppUx; } + $info['type']='png'; + if ($firsttime) { + $info['i']=count($this->images)+1; + $this->images[$file]=$info; + } + return $info; + } + else { // No alpha/transparency set + imagealphablending($im, false); + imagesavealpha($im, false); + imageinterlace($im, false); + if (!is_writable($tempfile)) { + ob_start(); + $check = @imagepng($im); + if (!$check) { return $this->_imageError($file, $firsttime, 'Error creating temporary image object whilst using GD library to parse PNG image'); } + $this->_tempimg = ob_get_contents(); + $this->_tempimglnk = 'var:_tempimg'; + ob_end_clean(); + $info = $this->_getImage($this->_tempimglnk, false); + if (!$info) { return $this->_imageError($file, $firsttime, 'Error parsing temporary file image object created with GD library to parse PNG image'); } + imagedestroy($im); + } + else { + $check = @imagepng($im, $tempfile ); + if (!$check) { return $this->_imageError($file, $firsttime, 'Failed to create temporary image file ('.$tempfile.') parsing PNG image ('.$errpng.')'); } + imagedestroy($im); + $info = $this->_getImage($tempfile, false) ; + unlink($tempfile ); + if (!$info) { return $this->_imageError($file, $firsttime, 'Error parsing temporary file ('.$tempfile.') created with GD library to parse PNG image'); } + } + if ($ppUx) { $info['set-dpi'] = $ppUx; } + $info['type']='png'; + if ($firsttime) { + $info['i']=count($this->images)+1; + $this->images[$file]=$info; + } + return $info; + } + } + } + + else { + $parms='/DecodeParms <</Predictor 15 /Colors '.($ct==2 ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w.'>>'; + //Scan chunks looking for palette, transparency and image data + $pal=''; + $trns=''; + $pngdata=''; + $p = 33; + do { + $n=$this->_fourbytes2int(substr($data,$p,4)); $p += 4; + $type=substr($data,$p,4); $p += 4; + if($type=='PLTE') { + //Read palette + $pal=substr($data,$p,$n); $p += $n; + $p += 4; + } + elseif($type=='tRNS') { + //Read transparency info + $t=substr($data,$p,$n); $p += $n; + if($ct==0) $trns=array(ord(substr($t,1,1))); + elseif($ct==2) $trns=array(ord(substr($t,1,1)),ord(substr($t,3,1)),ord(substr($t,5,1))); + else + { + $pos=strpos($t,chr(0)); + if(is_int($pos)) $trns=array($pos); + } + $p += 4; + } + elseif($type=='IDAT') { + $pngdata.=substr($data,$p,$n); $p += $n; + $p += 4; + } + elseif($type=='IEND') { break; } + else if (preg_match('/[a-zA-Z]{4}/',$type)) { $p += $n+4; } + else { return $this->_imageError($file, $firsttime, 'Error parsing PNG image data'); } + } + while($n); + if (!$pngdata) { return $this->_imageError($file, $firsttime, 'Error parsing PNG image data - no IDAT data found'); } + if($colspace=='Indexed' and empty($pal)) { return $this->_imageError($file, $firsttime, 'Error parsing PNG image data - missing colour palette'); } + $info = array('w'=>$w,'h'=>$h,'cs'=>$colspace,'bpc'=>$bpc,'f'=>'FlateDecode','parms'=>$parms,'pal'=>$pal,'trns'=>$trns,'data'=>$pngdata); + $info['type']='png'; + if ($ppUx) { $info['set-dpi'] = $ppUx; } + } + + if (!$info) { return $this->_imageError($file, $firsttime, 'Error parsing or converting PNG image'); } + + if ($firsttime) { + $info['i']=count($this->images)+1; + $this->images[$file]=$info; + } + return $info; + } + + // GIF + else if ($type == 'gif') { + if (function_exists('gd_info')) { $gd = gd_info(); } + else {$gd = array(); } + if (isset($gd['GIF Read Support']) && $gd['GIF Read Support']) { + $im = @imagecreatefromstring($data); + if ($im) { + $tempfile = _MPDF_TEMP_PATH.'_tempImgPNG'.RAND(1,10000).'.png'; + imagealphablending($im, false); + imagesavealpha($im, false); + imageinterlace($im, false); + if (!is_writable($tempfile)) { + ob_start(); + $check = @imagepng($im); + if (!$check) { return $this->_imageError($file, $firsttime, 'Error creating temporary image object whilst using GD library to parse GIF image'); } + $this->_tempimg = ob_get_contents(); + $this->_tempimglnk = 'var:_tempimg'; + ob_end_clean(); + $info = $this->_getImage($this->_tempimglnk, false); + if (!$info) { return $this->_imageError($file, $firsttime, 'Error parsing temporary file image object created with GD library to parse GIF image'); } + imagedestroy($im); + } + else { + $check = @imagepng($im, $tempfile); + if (!$check) { return $this->_imageError($file, $firsttime, 'Error creating temporary file ('.$tempfile.') whilst using GD library to parse GIF image'); } + $info = $this->_getImage($tempfile, false); + if (!$info) { return $this->_imageError($file, $firsttime, 'Error parsing temporary file ('.$tempfile.') created with GD library to parse GIF image'); } + imagedestroy($im); + unlink($tempfile); + } + $info['type']='gif'; + if ($firsttime) { + $info['i']=count($this->images)+1; + $this->images[$file]=$info; + } + return $info; + } + else { return $this->_imageError($file, $firsttime, 'Error creating GD image file from GIF image'); } + } + + if (!class_exists('gif', false)) { + include_once(_MPDF_PATH.'classes/gif.php'); + } + $gif=new CGIF(); + + $h=0; + $w=0; + $gif->loadFile($data, 0); + + if(isset($gif->m_img->m_gih->m_bLocalClr) && $gif->m_img->m_gih->m_bLocalClr) { + $nColors = $gif->m_img->m_gih->m_nTableSize; + $pal = $gif->m_img->m_gih->m_colorTable->toString(); + if($bgColor != -1) { + $bgColor = $gif->m_img->m_gih->m_colorTable->colorIndex($bgColor); + } + $colspace='Indexed'; + } elseif(isset($gif->m_gfh->m_bGlobalClr) && $gif->m_gfh->m_bGlobalClr) { + $nColors = $gif->m_gfh->m_nTableSize; + $pal = $gif->m_gfh->m_colorTable->toString(); + if((isset($bgColor)) and $bgColor != -1) { + $bgColor = $gif->m_gfh->m_colorTable->colorIndex($bgColor); + } + $colspace='Indexed'; + } else { + $nColors = 0; + $bgColor = -1; + $colspace='DeviceGray'; + $pal=''; + } + + $trns=''; + if(isset($gif->m_img->m_bTrans) && $gif->m_img->m_bTrans && ($nColors > 0)) { + $trns=array($gif->m_img->m_nTrans); + } + $gifdata=$gif->m_img->m_data; + $w=$gif->m_gfh->m_nWidth; + $h=$gif->m_gfh->m_nHeight; + $gif->ClearData(); + + if($colspace=='Indexed' and empty($pal)) { + return $this->_imageError($file, $firsttime, 'Error parsing GIF image - missing colour palette'); + } + if ($this->compress) { + $gifdata=gzcompress($gifdata); + $info = array( 'w'=>$w, 'h'=>$h, 'cs'=>$colspace, 'bpc'=>8, 'f'=>'FlateDecode', 'pal'=>$pal, 'trns'=>$trns, 'data'=>$gifdata); + } + else { + $info = array( 'w'=>$w, 'h'=>$h, 'cs'=>$colspace, 'bpc'=>8, 'pal'=>$pal, 'trns'=>$trns, 'data'=>$gifdata); + } + $info['type']='gif'; + if ($firsttime) { + $info['i']=count($this->images)+1; + $this->images[$file]=$info; + } + return $info; + } + +/*-- IMAGES-BMP --*/ + // BMP (Windows Bitmap) + else if ($type == 'bmp') { + if (!class_exists('bmp', false)) { include(_MPDF_PATH.'classes/bmp.php'); } + if (empty($this->bmp)) { $this->bmp = new bmp($this); } + $info = $this->bmp->_getBMPimage($data, $file); + if (isset($info['error'])) { + return $this->_imageError($file, $firsttime, $info['error']); + } + if ($firsttime) { + $info['i']=count($this->images)+1; + $this->images[$file]=$info; + } + return $info; + } +/*-- END IMAGES-BMP --*/ +/*-- IMAGES-WMF --*/ + // WMF + else if ($type == 'wmf') { + if (!class_exists('wmf', false)) { include(_MPDF_PATH.'classes/wmf.php'); } + if (empty($this->wmf)) { $this->wmf = new wmf($this); } + $wmfres = $this->wmf->_getWMFimage($data); + if ($wmfres[0]==0) { + if ($wmfres[1]) { return $this->_imageError($file, $firsttime, $wmfres[1]); } + return $this->_imageError($file, $firsttime, 'Error parsing WMF image'); + } + $info = array('x'=>$wmfres[2][0],'y'=>$wmfres[2][1],'w'=>$wmfres[3][0],'h'=>$wmfres[3][1],'data'=>$wmfres[1]); + $info['i']=count($this->formobjects)+1; + $info['type']='wmf'; + $this->formobjects[$file]=$info; + return $info; + } +/*-- END IMAGES-WMF --*/ + + // UNKNOWN TYPE - try GD imagecreatefromstring + else { + if (function_exists('gd_info')) { $gd = gd_info(); } + else {$gd = array(); } + if (isset($gd['PNG Support']) && $gd['PNG Support']) { + $im = @imagecreatefromstring($data); + if (!$im) { return $this->_imageError($file, $firsttime, 'Error parsing image file - image type not recognised, and not supported by GD imagecreate'); } + $tempfile = _MPDF_TEMP_PATH.'_tempImgPNG'.RAND(1,10000).'.png'; + imagealphablending($im, false); + imagesavealpha($im, false); + imageinterlace($im, false); + $check = @imagepng($im, $tempfile); + if (!$check) { return $this->_imageError($file, $firsttime, 'Error creating temporary file ('.$tempfile.') whilst using GD library to parse unknown image type'); } + $info = $this->_getImage($tempfile, false); + imagedestroy($im); + unlink($tempfile); + if (!$info) { return $this->_imageError($file, $firsttime, 'Error parsing temporary file ('.$tempfile.') created with GD library to parse unknown image type'); } + $info['type']='png'; + if ($firsttime) { + $info['i']=count($this->images)+1; + $this->images[$file]=$info; + } + return $info; + } + } + + return $this->_imageError($file, $firsttime, 'Error parsing image file - image type not recognised'); +} +//============================================================== +function _convImage(&$data, $colspace, $targetcs, $w, $h, $dpi, $mask) { + if ($this->PDFA || $this->PDFX) { $mask=false; } + $im = @imagecreatefromstring($data); + $info = array(); + if ($im) { + $imgdata = ''; + $mimgdata = ''; + $minfo = array(); + //Read transparency info + $trns=array(); + $trnsrgb = false; + if (!$this->PDFA && !$this->PDFX) { + $p = strpos($data,'tRNS'); + if ($p) { + $n=$this->_fourbytes2int(substr($data,($p-4),4)); + $t = substr($data,($p+4),$n); + if ($colspace=='DeviceGray') { + $trns=array(ord(substr($t,1,1))); + $trnsrgb = array($trns[0],$trns[0],$trns[0]); + } + else if ($colspace=='DeviceRGB') { + $trns=array(ord(substr($t,1,1)),ord(substr($t,3,1)),ord(substr($t,5,1))); + $trnsrgb = $trns; + if ($targetcs=='DeviceCMYK') { + $col = $this->rgb2cmyk(array(3,$trns[0],$trns[1],$trns[2])); + $c1 = intval($col[1]*2.55); + $c2 = intval($col[2]*2.55); + $c3 = intval($col[3]*2.55); + $c4 = intval($col[4]*2.55); + $trns = array($c1,$c2,$c3,$c4); + } + else if ($targetcs=='DeviceGray') { + $c = intval(($trns[0] * .21) + ($trns[1] * .71) + ($trns[2] * .07)); + $trns = array($c); + } + } + else { // Indexed + $pos = strpos($t,chr(0)); + if (is_int($pos)) { + $pal = imagecolorsforindex($im, $pos); + $r = $pal['red']; + $g = $pal['green']; + $b = $pal['blue']; + $trns=array($r,$g,$b); // **** + $trnsrgb = $trns; + if ($targetcs=='DeviceCMYK') { + $col = $this->rgb2cmyk(array(3,$r,$g,$b)); + $c1 = intval($col[1]*2.55); + $c2 = intval($col[2]*2.55); + $c3 = intval($col[3]*2.55); + $c4 = intval($col[4]*2.55); + $trns = array($c1,$c2,$c3,$c4); + } + else if ($targetcs=='DeviceGray') { + $c = intval(($r * .21) + ($g * .71) + ($b * .07)); + $trns = array($c); + } + } + } + } + } + for ($i = 0; $i < $h; $i++) { + for ($j = 0; $j < $w; $j++) { + $rgb = imagecolorat($im, $j, $i); + $r = ($rgb >> 16) & 0xFF; + $g = ($rgb >> 8) & 0xFF; + $b = $rgb & 0xFF; + if ($colspace=='Indexed') { + $pal = imagecolorsforindex($im, $rgb); + $r = $pal['red']; + $g = $pal['green']; + $b = $pal['blue']; + } + + if ($targetcs=='DeviceCMYK') { + $col = $this->rgb2cmyk(array(3,$r,$g,$b)); + $c1 = intval($col[1]*2.55); + $c2 = intval($col[2]*2.55); + $c3 = intval($col[3]*2.55); + $c4 = intval($col[4]*2.55); + if ($trnsrgb) { + // original pixel was not set as transparent but processed color does match + if ($trnsrgb!=array($r,$g,$b) && $trns==array($c1,$c2,$c3,$c4)) { + if ($c4==0) { $c4=1; } else { $c4--; } + } + } + $imgdata .= chr($c1).chr($c2).chr($c3).chr($c4); + } + else if ($targetcs=='DeviceGray') { + $c = intval(($r * .21) + ($g * .71) + ($b * .07)); + if ($trnsrgb) { + // original pixel was not set as transparent but processed color does match + if ($trnsrgb!=array($r,$g,$b) && $trns==array($c)) { + if ($c==0) { $c=1; } else { $c--; } + } + } + $imgdata .= chr($c); + } + else if ($targetcs=='DeviceRGB') { + $imgdata .= chr($r).chr($g).chr($b); + } + if ($mask) { + $col = imagecolorsforindex($im, $rgb); + $gammacorr = 2.2; // gamma correction + $gamma = intval((pow((((127 - $col['alpha']) * 255 / 127) / 255), $gammacorr) * 255)); + $mimgdata .= chr($gamma); + } + } + } + + if ($targetcs=='DeviceGray') { $ncols = 1; } + else if ($targetcs=='DeviceRGB') { $ncols = 3; } + else if ($targetcs=='DeviceCMYK') { $ncols = 4; } + + $imgdata = gzcompress($imgdata); + $info = array('w'=>$w,'h'=>$h,'cs'=>$targetcs,'bpc'=>8,'f'=>'FlateDecode','data'=>$imgdata, 'type'=>'png', + 'parms'=>'/DecodeParms <</Colors '.$ncols.' /BitsPerComponent 8 /Columns '.$w.'>>'); + if ($dpi) { $info['set-dpi'] = $dpi; } + if ($mask) { + $mimgdata = gzcompress($mimgdata); + $minfo = array('w'=>$w,'h'=>$h,'cs'=>'DeviceGray','bpc'=>8,'f'=>'FlateDecode','data'=>$mimgdata, 'type'=>'png', + 'parms'=>'/DecodeParms <</Colors '.$ncols.' /BitsPerComponent 8 /Columns '.$w.'>>'); + if ($dpi) { $minfo['set-dpi'] = $dpi; } + $tempfile = '_tempImgPNG'.RAND(1,10000).'.png'; + $imgmask = count($this->images)+1; + $minfo['i']=$imgmask ; + $this->images[$tempfile] = $minfo; + $info['masked'] = $imgmask; + } + else if ($trns) { $info['trns'] = $trns; } + imagedestroy($im); + } + return $info; +} + + + + +function _fourbytes2int($s) { + //Read a 4-byte integer from string + return (ord($s[0])<<24) + (ord($s[1])<<16) + (ord($s[2])<<8) + ord($s[3]); +} + +function _twobytes2int($s) { + //Read a 2-byte integer from string + return (ord(substr($s, 0, 1))<<8) + ord(substr($s, 1, 1)); +} + +function _jpgHeaderFromString(&$data) { + $p = 4; + $p += $this->_twobytes2int(substr($data, $p, 2)); // Length of initial marker block + $marker = substr($data, $p, 2); + while($marker != chr(255).chr(192) && $marker != chr(255).chr(194) && $p<strlen($data)) { + // Start of frame marker (FFC0) or (FFC2) mPDF 4.4.004 + $p += ($this->_twobytes2int(substr($data, $p+2, 2))) + 2; // Length of marker block + $marker = substr($data, $p, 2); + } + if ($marker != chr(255).chr(192) && $marker != chr(255).chr(194)) { return false; } + return substr($data, $p+2, 10); +} + +function _jpgDataFromHeader($hdr) { + $bpc = ord(substr($hdr, 2, 1)); + if (!$bpc) { $bpc = 8; } + $h = $this->_twobytes2int(substr($hdr, 3, 2)); + $w = $this->_twobytes2int(substr($hdr, 5, 2)); + $channels = ord(substr($hdr, 7, 1)); + if ($channels==3) { $colspace='DeviceRGB'; } + elseif($channels==4) { $colspace='DeviceCMYK'; } + else { $colspace='DeviceGray'; } + return array($w, $h, $colspace, $bpc); +} + +function file_get_contents_by_curl($url, &$data) { + $timeout = 5; + $ch = curl_init($url); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_NOBODY, 0); + curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 ); + curl_setopt ( $ch , CURLOPT_CONNECTTIMEOUT , $timeout ); + $data = curl_exec($ch); + curl_close($ch); +} + + +function file_get_contents_by_socket($url, &$data) { + $timeout = 1; + $p = parse_url($url); + $file = $p['path']; + if ($p['query']) { $file .= '?'.$p['query']; } + if(!($fh = @fsockopen($p['host'], 80, $errno, $errstr, $timeout))) { return false; } + $getstring = + "GET ".$file." HTTP/1.0 \r\n" . + "Host: ".$p['host']." \r\n" . + "Connection: close\r\n\r\n"; + fwrite($fh, $getstring); + // Get rid of HTTP header + $s = fgets($fh, 1024); + if (!$s) { return false; } + $httpheader .= $s; + while (!feof($fh)) { + $s = fgets($fh, 1024); + if ( $s == "\r\n" ) { break; } + } + $data = ''; + while (!feof($fh)) { + $data .= fgets($fh, 1024); + } + fclose($fh); +} + +//============================================================== + +function _imageTypeFromString(&$data) { + $type = ''; + if (substr($data, 6, 4)== 'JFIF' || substr($data, 6, 4)== 'Exif') { + $type = 'jpeg'; + } + else if (substr($data, 0, 6)== "GIF87a" || substr($data, 0, 6)== "GIF89a") { + $type = 'gif'; + } + else if (substr($data, 0, 8)== chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) { + $type = 'png'; + } +/*-- IMAGES-WMF --*/ + else if (substr($data, 0, 4)== chr(215).chr(205).chr(198).chr(154)) { + $type = 'wmf'; + } +/*-- END IMAGES-WMF --*/ + else if (preg_match('/<svg.*<\/svg>/is',$data)) { + $type = 'svg'; + } + // BMP images + else if (substr($data, 0, 2)== "BM") { + $type = 'bmp'; + } + return $type; +} +//============================================================== + +// Moved outside WMF as also needed for SVG +function _putformobjects() { + reset($this->formobjects); + while(list($file,$info)=each($this->formobjects)) { + $this->_newobj(); + $this->formobjects[$file]['n']=$this->n; + $this->_out('<</Type /XObject'); + $this->_out('/Subtype /Form'); + $this->_out('/Group '.($this->n+1).' 0 R'); + $this->_out('/BBox ['.$info['x'].' '.$info['y'].' '.($info['w']+$info['x']).' '.($info['h']+$info['y']).']'); + if ($this->compress) + $this->_out('/Filter /FlateDecode'); + $data=($this->compress) ? gzcompress($info['data']) : $info['data']; + $this->_out('/Length '.strlen($data).'>>'); + $this->_putstream($data); + unset($this->formobjects[$file]['data']); + $this->_out('endobj'); + // Required for SVG transparency (opacity) to work + $this->_newobj(); + $this->_out('<</Type /Group'); + $this->_out('/S /Transparency'); + $this->_out('>>'); + $this->_out('endobj'); + } +} + +function _freadint($f) +{ + //Read a 4-byte integer from file + $i=ord(fread($f,1))<<24; + $i+=ord(fread($f,1))<<16; + $i+=ord(fread($f,1))<<8; + $i+=ord(fread($f,1)); + return $i; +} + +function _UTF16BEtextstring($s) { + $s = $this->UTF8ToUTF16BE($s, true); +/*-- ENCRYPTION --*/ + if ($this->encrypted) { + $s = $this->_RC4($this->_objectkey($this->_current_obj_id), $s); + } +/*-- END ENCRYPTION --*/ + return '('. $this->_escape($s).')'; +} + +function _textstring($s) { +/*-- ENCRYPTION --*/ + if ($this->encrypted) { + $s = $this->_RC4($this->_objectkey($this->_current_obj_id), $s); + } +/*-- END ENCRYPTION --*/ + return '('. $this->_escape($s).')'; +} + + +function _escape($s) +{ + // the chr(13) substitution fixes the Bugs item #1421290. + return strtr($s, array(')' => '\\)', '(' => '\\(', '\\' => '\\\\', chr(13) => '\r')); +} + +function _putstream($s) { +/*-- ENCRYPTION --*/ + if ($this->encrypted) { + $s = $this->_RC4($this->_objectkey($this->_current_obj_id), $s); + } +/*-- END ENCRYPTION --*/ + $this->_out('stream'); + $this->_out($s); + $this->_out('endstream'); +} + + +function _out($s,$ln=true) { + if($this->state==2) { + if ($this->bufferoutput) { + $this->headerbuffer.= $s."\n"; + } +/*-- COLUMNS --*/ + else if (($this->ColActive) && !$this->processingHeader && !$this->processingFooter) { + // Captures everything in buffer for columns; Almost everything is sent from fn. Cell() except: + // Images sent from Image() or + // later sent as _out($textto) in printbuffer + // Line() + if (preg_match('/q \d+\.\d\d+ 0 0 (\d+\.\d\d+) \d+\.\d\d+ \d+\.\d\d+ cm \/(I|FO)\d+ Do Q/',$s,$m)) { // Image data + $h = ($m[1]/_MPDFK); + // Update/overwrite the lowest bottom of printing y value for a column + $this->ColDetails[$this->CurrCol]['bottom_margin'] = $this->y+$h; + } +/*-- TABLES --*/ + else if (preg_match('/\d+\.\d\d+ \d+\.\d\d+ \d+\.\d\d+ ([\-]{0,1}\d+\.\d\d+) re/',$s,$m) && $this->tableLevel>0) { // Rect in table + $h = ($m[1]/_MPDFK); + // Update/overwrite the lowest bottom of printing y value for a column + $this->ColDetails[$this->CurrCol]['bottom_margin'] = max($this->ColDetails[$this->CurrCol]['bottom_margin'],($this->y+$h)); + } +/*-- END TABLES --*/ + else { // Td Text Set in Cell() + if (isset($this->ColDetails[$this->CurrCol]['bottom_margin'])) { $h = $this->ColDetails[$this->CurrCol]['bottom_margin'] - $this->y; } + else { $h = 0; } + } + if ($h < 0) { $h = -$h; } + $this->columnbuffer[] = array( + 's' => $s, // Text string to output + 'col' => $this->CurrCol, // Column when printed + 'x' => $this->x, // x when printed + 'y' => $this->y, // this->y when printed (after column break) + 'h' => $h // actual y at bottom when printed = y+h + ); + } +/*-- END COLUMNS --*/ +/*-- TABLES --*/ + else if ($this->table_rotate && !$this->processingHeader && !$this->processingFooter) { + // Captures eveything in buffer for rotated tables; + $this->tablebuffer .= $s . "\n"; + } +/*-- END TABLES --*/ + else if ($this->kwt && !$this->processingHeader && !$this->processingFooter) { + // Captures eveything in buffer for keep-with-table (h1-6); + $this->kwt_buffer[] = array( + 's' => $s, // Text string to output + 'x' => $this->x, // x when printed + 'y' => $this->y, // y when printed + ); + } + else if (($this->keep_block_together) && !$this->processingHeader && !$this->processingFooter) { + if (!isset($this->ktBlock[$this->page]['bottom_margin'])) { + $this->ktBlock[$this->page]['bottom_margin'] = $this->y; + } + + // Captures eveything in buffer; + if (preg_match('/q \d+\.\d\d+ 0 0 (\d+\.\d\d+) \d+\.\d\d+ \d+\.\d\d+ cm \/(I|FO)\d+ Do Q/',$s,$m)) { // Image data + $h = ($m[1]/_MPDFK); + // Update/overwrite the lowest bottom of printing y value for Keep together block + $this->ktBlock[$this->page]['bottom_margin'] = $this->y+$h; + } + else { // Td Text Set in Cell() + if (isset($this->ktBlock[$this->page]['bottom_margin'])) { $h = $this->ktBlock[$this->page]['bottom_margin'] - $this->y; } + else { $h = 0; } + } + if ($h < 0) { $h = -$h; } + $this->divbuffer[] = array( + 'page' => $this->page, + 's' => $s, // Text string to output + 'x' => $this->x, // x when printed + 'y' => $this->y, // y when printed (after column break) + 'h' => $h // actual y at bottom when printed = y+h + ); + } + else { + $this->pages[$this->page] .= $s.($ln == true ? "\n" : ''); + } + + } + else { + $this->buffer .= $s.($ln == true ? "\n" : ''); + } +} + +/*-- WATERMARK --*/ +// add a watermark +function watermark( $texte, $angle=45, $fontsize=96, $alpha=0.2 ) { + if ($this->PDFA || $this->PDFX) { $this->Error('PDFA and PDFX do not permit transparency, so mPDF does not allow Watermarks!'); } + if (!$this->watermark_font) { $this->watermark_font = $this->default_font; } + $this->SetFont( $this->watermark_font, "B", $fontsize, false ); // Don't output + $texte= $this->purify_utf8_text($texte); + if ($this->text_input_as_HTML) { + $texte= $this->all_entities_to_utf8($texte); + } + if ($this->usingCoreFont) { $texte = mb_convert_encoding($texte,$this->mb_enc,'UTF-8'); } + // DIRECTIONALITY + $this->magic_reverse_dir($texte, true, $this->directionality); // *RTL* + // Font-specific ligature substitution for Indic fonts + if (isset($this->CurrentFont['indic']) && $this->CurrentFont['indic']) $this->ConvertIndic($texte); // *INDIC* + + $this->SetAlpha($alpha); + + $this->SetTColor($this->ConvertColor(0)); + $szfont = $fontsize; + $loop = 0; + $maxlen = (min($this->w,$this->h) ); // sets max length of text as 7/8 width/height of page + while ( $loop == 0 ) + { + $this->SetFont( $this->watermark_font, "B", $szfont, false ); // Don't output + $offset = ((sin(deg2rad($angle))) * ($szfont/_MPDFK)); + + $strlen = $this->GetStringWidth($texte); + if ( $strlen > $maxlen - $offset ) + $szfont --; + else + $loop ++; + } + + $this->SetFont( $this->watermark_font, "B", $szfont-0.1, true, true); // Output The -0.1 is because SetFont above is not written to PDF + // Repeating it will not output anything as mPDF thinks it is set + $adj = ((cos(deg2rad($angle))) * ($strlen/2)); + $opp = ((sin(deg2rad($angle))) * ($strlen/2)); + $wx = ($this->w/2) - $adj + $offset/3; + $wy = ($this->h/2) + $opp; + $this->Rotate($angle,$wx,$wy); + $this->Text($wx,$wy,$texte); + $this->Rotate(0); + $this->SetTColor($this->ConvertColor(0)); + + $this->SetAlpha(1); + +} + +function watermarkImg( $src, $alpha=0.2 ) { + if ($this->PDFA || $this->PDFX) { $this->Error('PDFA and PDFX do not permit transparency, so mPDF does not allow Watermarks!'); } + if ($this->watermarkImgBehind) { $this->watermarkImgAlpha = $this->SetAlpha($alpha, 'Normal', true); } + else { $this->SetAlpha($alpha, $this->watermarkImgAlphaBlend); } + $this->Image($src,0,0,0,0,'','', true, true, true); + if (!$this->watermarkImgBehind) { $this->SetAlpha(1); } +} +/*-- END WATERMARK --*/ + + +function Rotate($angle,$x=-1,$y=-1) +{ + if($x==-1) + $x=$this->x; + if($y==-1) + $y=$this->y; + if($this->angle!=0) + $this->_out('Q'); + $this->angle=$angle; + if($angle!=0) + { + $angle*=M_PI/180; + $c=cos($angle); + $s=sin($angle); + $cx=$x*_MPDFK; + $cy=($this->h-$y)*_MPDFK; + $this->_out(sprintf('q %.5F %.5F %.5F %.5F %.3F %.3F cm 1 0 0 1 %.3F %.3F cm',$c,$s,-$s,$c,$cx,$cy,-$cx,-$cy)); + } +} + + + +function CircularText($x, $y, $r, $text, $align='top', $fontfamily='', $fontsize=0, $fontstyle='', $kerning=120, $fontwidth=100, $divider) { // mPDF 5.5.23 + if (!class_exists('directw', false)) { include(_MPDF_PATH.'classes/directw.php'); } + if (empty($this->directw)) { $this->directw = new directw($this); } + $this->directw->CircularText($x, $y, $r, $text, $align, $fontfamily, $fontsize, $fontstyle, $kerning, $fontwidth, $divider); // mPDF 5.5.23 +} + + +// From Invoice +function RoundedRect($x, $y, $w, $h, $r, $style = '') +{ + $hp = $this->h; + if($style=='F') + $op='f'; + elseif($style=='FD' or $style=='DF') + $op='B'; + else + $op='S'; + $MyArc = 4/3 * (sqrt(2) - 1); + $this->_out(sprintf('%.3F %.3F m',($x+$r)*_MPDFK,($hp-$y)*_MPDFK )); + $xc = $x+$w-$r ; + $yc = $y+$r; + $this->_out(sprintf('%.3F %.3F l', $xc*_MPDFK,($hp-$y)*_MPDFK )); + + $this->_Arc($xc + $r*$MyArc, $yc - $r, $xc + $r, $yc - $r*$MyArc, $xc + $r, $yc); + $xc = $x+$w-$r ; + $yc = $y+$h-$r; + $this->_out(sprintf('%.3F %.3F l',($x+$w)*_MPDFK,($hp-$yc)*_MPDFK)); + $this->_Arc($xc + $r, $yc + $r*$MyArc, $xc + $r*$MyArc, $yc + $r, $xc, $yc + $r); + $xc = $x+$r ; + $yc = $y+$h-$r; + $this->_out(sprintf('%.3F %.3F l',$xc*_MPDFK,($hp-($y+$h))*_MPDFK)); + $this->_Arc($xc - $r*$MyArc, $yc + $r, $xc - $r, $yc + $r*$MyArc, $xc - $r, $yc); + $xc = $x+$r ; + $yc = $y+$r; + $this->_out(sprintf('%.3F %.3F l',($x)*_MPDFK,($hp-$yc)*_MPDFK )); + $this->_Arc($xc - $r, $yc - $r*$MyArc, $xc - $r*$MyArc, $yc - $r, $xc, $yc - $r); + $this->_out($op); +} + +function _Arc($x1, $y1, $x2, $y2, $x3, $y3) +{ + $h = $this->h; + $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F c ', $x1*_MPDFK, ($h-$y1)*_MPDFK, + $x2*_MPDFK, ($h-$y2)*_MPDFK, $x3*_MPDFK, ($h-$y3)*_MPDFK)); +} + + + + +//==================================================== + + + +/*-- DIRECTW --*/ +function Shaded_box( $text,$font='',$fontstyle='B',$szfont='',$width='70%',$style='DF',$radius=2.5,$fill='#FFFFFF',$color='#000000',$pad=2 ) { + // F (shading - no line),S (line, no shading),DF (both) + if (!class_exists('directw', false)) { include(_MPDF_PATH.'classes/directw.php'); } + if (empty($this->directw)) { $this->directw = new directw($this); } + $this->directw->Shaded_box( $text,$font,$fontstyle,$szfont,$width,$style,$radius,$fill,$color,$pad); +} +/*-- END DIRECTW --*/ + + +function UTF8StringToArray($str, $addSubset=true) { + $out = array(); + $len = strlen($str); + for ($i = 0; $i < $len; $i++) { + $uni = -1; + $h = ord($str[$i]); + if ( $h <= 0x7F ) + $uni = $h; + elseif ( $h >= 0xC2 ) { + if ( ($h <= 0xDF) && ($i < $len -1) ) + $uni = ($h & 0x1F) << 6 | (ord($str[++$i]) & 0x3F); + elseif ( ($h <= 0xEF) && ($i < $len -2) ) + $uni = ($h & 0x0F) << 12 | (ord($str[++$i]) & 0x3F) << 6 | (ord($str[++$i]) & 0x3F); + elseif ( ($h <= 0xF4) && ($i < $len -3) ) + $uni = ($h & 0x0F) << 18 | (ord($str[++$i]) & 0x3F) << 12 | (ord($str[++$i]) & 0x3F) << 6 | (ord($str[++$i]) & 0x3F); + } + if ($uni >= 0) { + $out[] = $uni; + if ($addSubset && isset($this->CurrentFont['subset'])) { + $this->CurrentFont['subset'][$uni] = $uni; + } + } + } + return $out; +} + + +//Convert utf-8 string to <HHHHHH> for Font Subsets +function UTF8toSubset($str) { + $ret = '<'; + $str = preg_replace('/'.preg_quote($this->aliasNbPg,'/').'/', chr(7), $str ); + $str = preg_replace('/'.preg_quote($this->aliasNbPgGp,'/').'/', chr(8), $str ); + $unicode = $this->UTF8StringToArray($str); + $orig_fid = $this->CurrentFont['subsetfontids'][0]; + $last_fid = $this->CurrentFont['subsetfontids'][0]; + foreach($unicode as $c) { + if ($c == 7 || $c == 8) { + if ($orig_fid != $last_fid) { + $ret .= '> Tj /F'.$orig_fid.' '.$this->FontSizePt.' Tf <'; + $last_fid = $orig_fid; + } + if ($c == 7) { $ret .= $this->aliasNbPgHex; } + else { $ret .= $this->aliasNbPgGpHex; } + continue; + } + for ($i=0; $i<99; $i++) { + // return c as decimal char + $init = array_search($c, $this->CurrentFont['subsets'][$i]); + if ($init!==false) { + if ($this->CurrentFont['subsetfontids'][$i] != $last_fid) { + $ret .= '> Tj /F'.$this->CurrentFont['subsetfontids'][$i].' '.$this->FontSizePt.' Tf <'; + $last_fid = $this->CurrentFont['subsetfontids'][$i]; + } + $ret .= sprintf("%02s", strtoupper(dechex($init))); + break; + } + // TrueType embedded SUBSETS + else if (count($this->CurrentFont['subsets'][$i]) < 255) { + $n = count($this->CurrentFont['subsets'][$i]); + $this->CurrentFont['subsets'][$i][$n] = $c; + if ($this->CurrentFont['subsetfontids'][$i] != $last_fid) { + $ret .= '> Tj /F'.$this->CurrentFont['subsetfontids'][$i].' '.$this->FontSizePt.' Tf <'; + $last_fid = $this->CurrentFont['subsetfontids'][$i]; + } + $ret .= sprintf("%02s", strtoupper(dechex($n))); + break; + } + else if (!isset($this->CurrentFont['subsets'][($i+1)])) { + // TrueType embedded SUBSETS + $this->CurrentFont['subsets'][($i+1)] = array(0=>0); + $new_fid = count($this->fonts)+$this->extraFontSubsets+1; + $this->CurrentFont['subsetfontids'][($i+1)] = $new_fid; + $this->extraFontSubsets++; + } + } + } + $ret .= '>'; + if ($last_fid != $orig_fid) { + $ret .= ' Tj /F'.$orig_fid.' '.$this->FontSizePt.' Tf <> '; + } + return $ret; +} + + +// Converts UTF-8 strings to UTF16-BE. +function UTF8ToUTF16BE($str, $setbom=true) { + if ($this->checkSIP && preg_match("/([\x{20000}-\x{2FFFF}])/u", $str)) { + if (!in_array($this->currentfontfamily, array('gb','big5','sjis','uhc','gbB','big5B','sjisB','uhcB','gbI','big5I','sjisI','uhcI', + 'gbBI','big5BI','sjisBI','uhcBI'))) { + $str = preg_replace("/[\x{20000}-\x{2FFFF}]/u", chr(0), $str); + } + } + if ($this->checkSMP && preg_match("/([\x{10000}-\x{1FFFF}])/u", $str )) { + $str = preg_replace("/[\x{10000}-\x{1FFFF}]/u", chr(0), $str ); + } + $outstr = ""; // string to be returned + if ($setbom) { + $outstr .= "\xFE\xFF"; // Byte Order Mark (BOM) + } + $outstr .= mb_convert_encoding($str, 'UTF-16BE', 'UTF-8'); + return $outstr; +} + + + + + +// ==================================================== +// ==================================================== +/*-- CJK-FONTS --*/ + +// from class PDF_Chinese CJK EXTENSIONS +function AddCIDFont($family,$style,$name,&$cw,$CMap,$registry,$desc) +{ + $fontkey=strtolower($family).strtoupper($style); + if(isset($this->fonts[$fontkey])) + $this->Error("Font already added: $family $style"); + $i=count($this->fonts)+$this->extraFontSubsets+1; + $name=str_replace(' ','',$name); + if ($family == 'sjis') { $up = -120; } else { $up = -130; } + // ? 'up' and 'ut' do not seem to be referenced anywhere + $this->fonts[$fontkey]=array('i'=>$i,'type'=>'Type0','name'=>$name,'up'=>$up,'ut'=>40,'cw'=>$cw,'CMap'=>$CMap,'registry'=>$registry,'MissingWidth'=>1000,'desc'=>$desc); +} + +function AddCJKFont($family) { + + if ($this->PDFA || $this->PDFX) { + $this->Error("Adobe CJK fonts cannot be embedded in mPDF (required for PDFA1-b and PDFX/1-a)."); + } + if ($family == 'big5') { $this->AddBig5Font(); } + else if ($family == 'gb') { $this->AddGBFont(); } + else if ($family == 'sjis') { $this->AddSJISFont(); } + else if ($family == 'uhc') { $this->AddUHCFont(); } +} + +function AddBig5Font() +{ + //Add Big5 font with proportional Latin + $family='big5'; + $name='MSungStd-Light-Acro'; + $cw=$this->Big5_widths; + $CMap='UniCNS-UTF16-H'; + $registry=array('ordering'=>'CNS1','supplement'=>4); + $desc = array( + 'Ascent' => 880, + 'Descent' => -120, + 'CapHeight' => 880, + 'Flags' => 6, + 'FontBBox' => '[-160 -249 1015 1071]', + 'ItalicAngle' => 0, + 'StemV' => 93, + ); + $this->AddCIDFont($family,'',$name,$cw,$CMap,$registry,$desc); + $this->AddCIDFont($family,'B',$name.',Bold',$cw,$CMap,$registry,$desc); + $this->AddCIDFont($family,'I',$name.',Italic',$cw,$CMap,$registry,$desc); + $this->AddCIDFont($family,'BI',$name.',BoldItalic',$cw,$CMap,$registry,$desc); +} + + +function AddGBFont() +{ + //Add GB font with proportional Latin + $family='gb'; + $name='STSongStd-Light-Acro'; + $cw=$this->GB_widths; + $CMap='UniGB-UTF16-H'; + $registry=array('ordering'=>'GB1','supplement'=>4); + $desc = array( + 'Ascent' => 752, + 'Descent' => -271, + 'CapHeight' => 737, + 'Flags' => 6, + 'FontBBox' => '[-25 -254 1000 880]', + 'ItalicAngle' => 0, + 'StemV' => 58, + 'Style' => '<< /Panose <000000000400000000000000> >>', + ); + $this->AddCIDFont($family,'',$name,$cw,$CMap,$registry,$desc); + $this->AddCIDFont($family,'B',$name.',Bold',$cw,$CMap,$registry,$desc); + $this->AddCIDFont($family,'I',$name.',Italic',$cw,$CMap,$registry,$desc); + $this->AddCIDFont($family,'BI',$name.',BoldItalic',$cw,$CMap,$registry,$desc); +} + + +function AddSJISFont() +{ + //Add SJIS font with proportional Latin + $family='sjis'; + $name='KozMinPro-Regular-Acro'; + $cw=$this->SJIS_widths; + $CMap='UniJIS-UTF16-H'; + $registry=array('ordering'=>'Japan1','supplement'=>5); + $desc = array( + 'Ascent' => 880, + 'Descent' => -120, + 'CapHeight' => 740, + 'Flags' => 6, + 'FontBBox' => '[-195 -272 1110 1075]', + 'ItalicAngle' => 0, + 'StemV' => 86, + 'XHeight' => 502, + ); + $this->AddCIDFont($family,'',$name,$cw,$CMap,$registry,$desc); + $this->AddCIDFont($family,'B',$name.',Bold',$cw,$CMap,$registry,$desc); + $this->AddCIDFont($family,'I',$name.',Italic',$cw,$CMap,$registry,$desc); + $this->AddCIDFont($family,'BI',$name.',BoldItalic',$cw,$CMap,$registry,$desc); +} + +function AddUHCFont() +{ + //Add UHC font with proportional Latin + $family='uhc'; + $name='HYSMyeongJoStd-Medium-Acro'; + $cw=$this->UHC_widths; + $CMap='UniKS-UTF16-H'; + $registry=array('ordering'=>'Korea1','supplement'=>2); + $desc = array( + 'Ascent' => 880, + 'Descent' => -120, + 'CapHeight' => 720, + 'Flags' => 6, + 'FontBBox' => '[-28 -148 1001 880]', + 'ItalicAngle' => 0, + 'StemV' => 60, + 'Style' => '<< /Panose <000000000600000000000000> >>', + ); + $this->AddCIDFont($family,'',$name,$cw,$CMap,$registry,$desc); + $this->AddCIDFont($family,'B',$name.',Bold',$cw,$CMap,$registry,$desc); + $this->AddCIDFont($family,'I',$name.',Italic',$cw,$CMap,$registry,$desc); + $this->AddCIDFont($family,'BI',$name.',BoldItalic',$cw,$CMap,$registry,$desc); +} + +/*-- END CJK-FONTS --*/ + +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +function SetAutoFont($af = AUTOFONT_ALL) { + if ($this->onlyCoreFonts) { return false; } + if (!$af && $af !== 0) { $af = AUTOFONT_ALL; } + $this->autoFontGroups = $af; + if ($this->autoFontGroups ) { + $this->useLang = true; + } +} + + +function SetDefaultFont($font) { + // Disallow embedded fonts to be used as defaults in PDFA + if ($this->PDFA || $this->PDFX) { + if (strtolower($font) == 'ctimes') { $font = 'serif'; } + if (strtolower($font) == 'ccourier') { $font = 'monospace'; } + if (strtolower($font) == 'chelvetica') { $font = 'sans-serif'; } + } + $font = $this->SetFont($font); // returns substituted font if necessary + $this->default_font = $font; + $this->original_default_font = $font; + if (!$this->watermark_font ) { $this->watermark_font = $font; } // *WATERMARK* + $this->defaultCSS['BODY']['FONT-FAMILY'] = $font; + $this->cssmgr->CSS['BODY']['FONT-FAMILY'] = $font; +} + +function SetDefaultFontSize($fontsize) { + $this->default_font_size = $fontsize; + $this->original_default_font_size = $fontsize; + $this->SetFontSize($fontsize); + $this->defaultCSS['BODY']['FONT-SIZE'] = $fontsize . 'pt'; + $this->cssmgr->CSS['BODY']['FONT-SIZE'] = $fontsize . 'pt'; +} + +function SetDefaultBodyCSS($prop, $val) { + if ($prop) { + $this->defaultCSS['BODY'][strtoupper($prop)] = $val; + $this->cssmgr->CSS['BODY'][strtoupper($prop)] = $val; + } +} + + +function SetDirectionality($dir='ltr') { +/*-- RTL --*/ + if (strtolower($dir) == 'rtl') { + if ($this->directionality != 'rtl') { + // Swop L/R Margins so page 1 RTL is an 'even' page + $tmp = $this->DeflMargin; + $this->DeflMargin = $this->DefrMargin; + $this->DefrMargin = $tmp; + $this->orig_lMargin = $this->DeflMargin; + $this->orig_rMargin = $this->DefrMargin; + + $this->SetMargins($this->DeflMargin,$this->DefrMargin,$this->tMargin); + } + $this->directionality = 'rtl'; + $this->defaultAlign = 'R'; + $this->defaultTableAlign = 'R'; + } + else { +/*-- END RTL --*/ + $this->directionality = 'ltr'; + $this->defaultAlign = 'L'; + $this->defaultTableAlign = 'L'; + } // *RTL* + $this->cssmgr->CSS['BODY']['DIRECTION'] = $this->directionality; +} + + + +// Added to set line-height-correction +function SetLineHeightCorrection($val) { + if ($val > 0) { $this->default_lineheight_correction = $val; } + else { $this->default_lineheight_correction = 1.2; } +} + +// Set a (fixed) lineheight to an actual value - either to named fontsize(pts) or default +function SetLineHeight($FontPt='',$spacing = '') { + if ($this->shrin_k > 1) { $k = $this->shrin_k; } + else { $k = 1; } + if ($spacing > 0) { + if (preg_match('/mm/',$spacing)) { + $this->lineheight = ($spacing + 0.0) / $k; // convert to number + } + else { + if ($FontPt) { $this->lineheight = (($FontPt/_MPDFK) *$spacing); } + else { $this->lineheight = (($this->FontSizePt/_MPDFK) *$spacing); } + } + } + else { + if ($FontPt) { $this->lineheight = (($FontPt/_MPDFK) *$this->normalLineheight); } + else { $this->lineheight = (($this->FontSizePt/_MPDFK) *$this->normalLineheight); } + } +} + +function _computeLineheight($lh, $fs='') { + if ($this->shrin_k > 1) { $k = $this->shrin_k; } + else { $k = 1; } + if (!$fs) { $fs = $this->FontSize; } + if (preg_match('/mm/',$lh)) { + return (($lh + 0.0) / $k); // convert to number + } + else if ($lh > 0) { + return ($fs * $lh); + } + else if (isset($this->normalLineheight)) { return ($fs * $this->normalLineheight); } + else return ($fs * $this->default_lineheight_correction); +} + + +function SetBasePath($str='') { + if ( isset($_SERVER['HTTP_HOST']) ) { $host = $_SERVER['HTTP_HOST']; } + else if ( isset($_SERVER['SERVER_NAME']) ) { $host = $_SERVER['SERVER_NAME']; } + else { $host = ''; } + if (!$str) { + if ($_SERVER['SCRIPT_NAME']) { $currentPath = dirname($_SERVER['SCRIPT_NAME']); } + else { $currentPath = dirname($_SERVER['PHP_SELF']); } + $currentPath = str_replace("\\","/",$currentPath); + if ($currentPath == '/') { $currentPath = ''; } + if ($host) { $currpath = 'http://' . $host . $currentPath .'/'; } + else { $currpath = ''; } + $this->basepath = $currpath; + $this->basepathIsLocal = true; + return; + } + $str = preg_replace('/\?.*/','',$str); + if (!preg_match('/(http|https|ftp):\/\/.*\//i',$str)) { $str .= '/'; } + $str .= 'xxx'; // in case $str ends in / e.g. http://www.bbc.co.uk/ + $this->basepath = dirname($str) . "/"; // returns e.g. e.g. http://www.google.com/dir1/dir2/dir3/ + $this->basepath = str_replace("\\","/",$this->basepath); //If on Windows + $tr = parse_url($this->basepath); + if (isset($tr['host']) && ($tr['host'] == $host)) { $this->basepathIsLocal = true; } + else { $this->basepathIsLocal = false; } +} + + +function GetFullPath(&$path,$basepath='') { + // When parsing CSS need to pass temporary basepath - so links are relative to current stylesheet + if (!$basepath) { $basepath = $this->basepath; } + //Fix path value + $path = str_replace("\\","/",$path); //If on Windows + $path = preg_replace('/^\/\//','http://',$path); // mPDF 5.6.27 + $regexp = '|^./|'; // Inadvertently corrects "./path/etc" and "//www.domain.com/etc" + $path = preg_replace($regexp,'',$path); + + + if(substr($path,0,1) == '#') { return; } + if (stristr($path,"mailto:") !== false) { return; } + if (strpos($path,"../") !== false ) { //It is a Relative Link + $backtrackamount = substr_count($path,"../"); + $maxbacktrack = substr_count($basepath,"/") - 3; // mPDF 5.6.18 + $filepath = str_replace("../",'',$path); + $path = $basepath; + //If it is an invalid relative link, then make it go to directory root + if ($backtrackamount > $maxbacktrack) $backtrackamount = $maxbacktrack; + //Backtrack some directories + for( $i = 0 ; $i < $backtrackamount + 1 ; $i++ ) $path = substr( $path, 0 , strrpos($path,"/") ); + $path = $path . "/" . $filepath; //Make it an absolute path + } + else if( strpos($path,":/") === false || strpos($path,":/") > 10) { //It is a Local Link + if (substr($path,0,1) == "/") { + $tr = parse_url($basepath); + $root = $tr['scheme'].'://'.$tr['host']; + $path = $root . $path; + } + else { $path = $basepath . $path; } + } + //Do nothing if it is an Absolute Link +} + + +// Used for external CSS files +function _get_file($path) { + // If local file try using local path (? quicker, but also allowed even if allow_url_fopen false) + $contents = ''; + $contents = @file_get_contents($path); + if ($contents) { return $contents; } + if ($this->basepathIsLocal) { + $tr = parse_url($path); + $lp=getenv("SCRIPT_NAME"); + $ap=realpath($lp); + $ap=str_replace("\\","/",$ap); + $docroot=substr($ap,0,strpos($ap,$lp)); + // WriteHTML parses all paths to full URLs; may be local file name + if ($tr['scheme'] && $tr['host'] && $_SERVER["DOCUMENT_ROOT"] ) { + $localpath = $_SERVER["DOCUMENT_ROOT"] . $tr['path']; + } + // DOCUMENT_ROOT is not returned on IIS + else if ($docroot) { + $localpath = $docroot . $tr['path']; + } + else { $localpath = $path; } + $contents = @file_get_contents($localpath); + } + // if not use full URL + else if (!$contents && !ini_get('allow_url_fopen') && function_exists("curl_init")) { + $ch = curl_init($path); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 ); + $contents = curl_exec($ch); + curl_close($ch); + } + return $contents; +} + + +function docPageNum($num = 0, $extras = false) { + if ($num < 1) { $num = $this->page; } + $type = '1'; // set default decimal + $ppgno = $num; + $suppress = 0; + $offset = 0; + $lastreset = 0; + foreach($this->PageNumSubstitutions AS $psarr) { + if ($num >= $psarr['from']) { + if ($psarr['reset']) { + if ($psarr['reset']>1) { $offset = $psarr['reset']-1; } + $ppgno = $num - $psarr['from'] + 1 + $offset; + $lastreset = $psarr['from']; + } + if ($psarr['type']) { $type = $psarr['type']; } + if (strtoupper($psarr['suppress'])=='ON' || $psarr['suppress']==1) { $suppress = 1; } + else if (strtoupper($psarr['suppress'])=='OFF') { $suppress = 0; } + } + } + if ($suppress) { return ''; } + + foreach($this->pgsIns AS $k=>$v) { + if ($k>$lastreset && $k<$num) { + $ppgno -= $v; + } + } + if ($type=='A') { $ppgno = $this->dec2alpha($ppgno,true); } + else if ($type=='a') { $ppgno = $this->dec2alpha($ppgno,false);} + else if ($type=='I') { $ppgno = $this->dec2roman($ppgno,true); } + else if ($type=='i') { $ppgno = $this->dec2roman($ppgno,false); } + if ($extras) { $ppgno = $this->pagenumPrefix . $ppgno . $this->pagenumSuffix; } + return $ppgno; +} + + +function docPageSettings($num = 0) { + // Returns current type (numberstyle), suppression state for this page number; + // reset is only returned if set for this page number + if ($num < 1) { $num = $this->page; } + $type = '1'; // set default decimal + $ppgno = $num; + $suppress = 0; + $offset = 0; + $reset = ''; + foreach($this->PageNumSubstitutions AS $psarr) { + if ($num >= $psarr['from']) { + if ($psarr['reset']) { + if ($psarr['reset']>1) { $offset = $psarr['reset']-1; } + $ppgno = $num - $psarr['from'] + 1 + $offset; + } + if ($psarr['type']) { $type = $psarr['type']; } + if (strtoupper($psarr['suppress'])=='ON' || $psarr['suppress']==1) { $suppress = 1; } + else if (strtoupper($psarr['suppress'])=='OFF') { $suppress = 0; } + } + if ($num == $psarr['from']) { $reset = $psarr['reset']; } + } + if ($suppress) { $suppress = 'on'; } + else { $suppress = 'off'; } + return array($type, $suppress, $reset); +} + +function docPageNumTotal($num = 0, $extras = false) { + if ($num < 1) { $num = $this->page; } + $type = '1'; // set default decimal + $ppgstart = 1; + $ppgend = count($this->pages)+1; + $suppress = 0; + $offset = 0; + foreach($this->PageNumSubstitutions AS $psarr) { + if ($num >= $psarr['from']) { + if ($psarr['reset']) { + if ($psarr['reset']>1) { $offset = $psarr['reset']-1; } + $ppgstart = $psarr['from'] + $offset; + $ppgend = count($this->pages)+1 + $offset; + } + if ($psarr['type']) { $type = $psarr['type']; } + if (strtoupper($psarr['suppress'])=='ON' || $psarr['suppress']==1) { $suppress = 1; } + else if (strtoupper($psarr['suppress'])=='OFF') { $suppress = 0; } + } + if ($num < $psarr['from']) { + if ($psarr['reset']) { + $ppgend = $psarr['from'] + $offset; + break; + } + } + } + if ($suppress) { return ''; } + $ppgno = $ppgend-$ppgstart+$offset; + + // mPDF 5.6.47 + foreach($this->pgsIns AS $k => $v) { + if ($k>$ppgstart && $k<$ppgend) { + $ppgno -= $v; + } + } + + if ($extras) { $ppgno = $this->nbpgPrefix . $ppgno . $this->nbpgSuffix; } + return $ppgno; +} + +function RestartDocTemplate() { + $this->docTemplateStart = $this->page; +} + + + +//Page header +function Header($content='') { + + $this->cMarginL = 0; + $this->cMarginR = 0; + + +/*-- HTMLHEADERS-FOOTERS --*/ + if (($this->mirrorMargins && ($this->page%2==0) && $this->HTMLHeaderE) || ($this->mirrorMargins && ($this->page%2==1) && $this->HTMLHeader) || (!$this->mirrorMargins && $this->HTMLHeader)) { + $this->writeHTMLHeaders(); + return; + } +/*-- END HTMLHEADERS-FOOTERS --*/ + $this->processingHeader=true; + $h = $this->headerDetails; + if(count($h)) { + + if ($this->forcePortraitHeaders && $this->CurOrientation=='L' && $this->CurOrientation!=$this->DefOrientation) { + $this->_out(sprintf('q 0 -1 1 0 0 %.3F cm ',($this->h*_MPDFK))); + $yadj = $this->w - $this->h; + $headerpgwidth = $this->h - $this->orig_lMargin - $this->orig_rMargin; + if (($this->mirrorMargins) && (($this->page)%2==0)) { // EVEN + $headerlmargin = $this->orig_rMargin; + } + else { + $headerlmargin = $this->orig_lMargin; + } + } + else { + $yadj = 0; + $headerpgwidth = $this->pgwidth; + $headerlmargin = $this->lMargin; + } + + $this->y = $this->margin_header - $yadj ; + $this->SetTColor($this->ConvertColor(0)); + $this->SUP = false; + $this->SUB = false; + $this->bullet = false; + + // only show pagenumber if numbering on + $pgno = $this->docPageNum($this->page, true); + + if (($this->mirrorMargins) && (($this->page)%2==0)) { // EVEN + $side = 'even'; + } + else { // ODD // OR NOT MIRRORING MARGINS/FOOTERS = DEFAULT + $side = 'odd'; + } + $maxfontheight = 0; + foreach(array('L','C','R') AS $pos) { + if (isset($h[$side][$pos]['content']) && $h[$side][$pos]['content']) { + if (isset($h[$side][$pos]['font-size']) && $h[$side][$pos]['font-size']) { $hfsz = $h[$side][$pos]['font-size']; } + else { $hfsz = $this->default_font_size; } + $maxfontheight = max($maxfontheight,$hfsz); + } + } + // LEFT-CENTER-RIGHT + foreach(array('L','C','R') AS $pos) { + if (isset($h[$side][$pos]['content']) && $h[$side][$pos]['content']) { + $hd = str_replace('{PAGENO}',$pgno,$h[$side][$pos]['content']); + $hd = str_replace($this->aliasNbPgGp,$this->nbpgPrefix.$this->aliasNbPgGp.$this->nbpgSuffix,$hd); + $hd = preg_replace('/\{DATE\s+(.*?)\}/e',"date('\\1')",$hd); + if (isset($h[$side][$pos]['font-family']) && $h[$side][$pos]['font-family']) { $hff = $h[$side][$pos]['font-family']; } + else { $hff = $this->original_default_font; } + if (isset($h[$side][$pos]['font-size']) && $h[$side][$pos]['font-size']) { $hfsz = $h[$side][$pos]['font-size']; } + else { $hfsz = $this->original_default_font_size; } // pts + $maxfontheight = max($maxfontheight,$hfsz); + $hfst = ''; + if (isset($h[$side][$pos]['font-style']) && $h[$side][$pos]['font-style']) { + $hfst = $h[$side][$pos]['font-style']; + } + if (isset($h[$side][$pos]['color']) && $h[$side][$pos]['color']) { + $hfcol = $h[$side][$pos]['color']; + $cor = $this->ConvertColor($hfcol); + if ($cor) { $this->SetTColor($cor); } + } + else { $hfcol = ''; } + $this->SetFont($hff,$hfst,$hfsz,true,true); + $this->x = $headerlmargin ; + $this->y = $this->margin_header - $yadj ; + + $hd = $this->purify_utf8_text($hd); + if ($this->text_input_as_HTML) { + $hd = $this->all_entities_to_utf8($hd); + } + // CONVERT CODEPAGE + if ($this->usingCoreFont) { $hd = mb_convert_encoding($hd,$this->mb_enc,'UTF-8'); } + // DIRECTIONALITY RTL + $this->magic_reverse_dir($hd, true, $this->directionality); // *RTL* + // Font-specific ligature substitution for Indic fonts + if (isset($this->CurrentFont['indic']) && $this->CurrentFont['indic']) $this->ConvertIndic($hd); // *INDIC* + $align = $pos; +/*-- RTL --*/ + if ($this->directionality == 'rtl') { + if ($pos == 'L') { $align = 'R'; } + else if ($pos == 'R') { $align = 'L'; } + } +/*-- END RTL --*/ + if ($pos!='L' && (strpos($hd,$this->aliasNbPg)!==false || strpos($hd,$this->aliasNbPgGp)!==false)) { + if (strpos($hd,$this->aliasNbPgGp)!==false) { $type= 'nbpggp'; } else { $type= 'nbpg'; } + $this->_out('{mpdfheader'.$type.' '.$pos.' ff='.$hff.' fs='.$hfst.' fz='.$hfsz.'}'); + $this->Cell($headerpgwidth ,$maxfontheight/_MPDFK ,$hd,0,0,$align,0,'',0,0,0,'M'); + $this->_out('Q'); + } + else { + $this->Cell($headerpgwidth ,$maxfontheight/_MPDFK ,$hd,0,0,$align,0,'',0,0,0,'M'); + } + if ($hfcol) { $this->SetTColor($this->ConvertColor(0)); } + } + } + //Return Font to normal + $this->SetFont($this->default_font,'',$this->original_default_font_size); + // LINE + if (isset($h[$side]['line']) && $h[$side]['line']) { + $this->SetLineWidth(0.1); + $this->SetDColor($this->ConvertColor(0)); + $this->Line($headerlmargin , $this->margin_header + ($maxfontheight*(1+$this->header_line_spacing)/_MPDFK) - $yadj , $headerlmargin + $headerpgwidth, $this->margin_header + ($maxfontheight*(1+$this->header_line_spacing)/_MPDFK) - $yadj ); + } + if ($this->forcePortraitHeaders && $this->CurOrientation=='L' && $this->CurOrientation!=$this->DefOrientation) { + $this->_out('Q'); + } + } + $this->SetY($this->tMargin); + if ($this->ColActive) { $this->pgwidth = $this->ColWidth; } // *COLUMNS* + + $this->processingHeader=false; +} + + + +/*-- TABLES --*/ +function TableHeaderFooter($content='',$tablestartpage='',$tablestartcolumn ='',$horf = 'H',$level, $firstSpread=true, $finalSpread=true) { + if(($horf=='H' || $horf=='F') && !empty($content) && !empty($content[0])) { // mPDF 5.6.61 + $table = &$this->table[1][1]; + // Advance down page by half width of top border + + if ($horf=='H') { // Only if header + if ($table['borders_separate']) { $adv = $table['border_spacing_V']/2 + $table['border_details']['T']['w'] + $table['padding']['T']; } + else { $adv = $table['max_cell_border_width']['T'] /2 ; } + if ($adv) { + if ($this->table_rotate) { + $this->y += ($adv); + } + else { + $this->DivLn($adv,$this->blklvl,true); + } + } + } + + if ($horf=='F') { // Table Footer + $firstrow = count($table['cells']) - $table['footernrows']; + $lastrow = count($table['cells']) - 1; + } + else { // Table Header + $firstrow = 0; + $lastrow = $table['headernrows'] - 1; + } + + $topy = $content[$firstrow][0]['y']-$this->y; + + for ($i=$firstrow ; $i<=$lastrow; $i++) { + + $y = $this->y; + +/*-- COLUMNS --*/ + // If outside columns, this is done in PaintDivBB + if ($this->ColActive) { + //OUTER FILL BGCOLOR of DIVS + if ($this->blklvl > 0) { + $firstblockfill = $this->GetFirstBlockFill(); + if ($firstblockfill && $this->blklvl >= $firstblockfill) { + $divh = $content[$i][0]['h']; + $bak_x = $this->x; + $this->DivLn($divh,-3,false); + // Reset current block fill + $bcor = $this->blk[$this->blklvl]['bgcolorarray']; + $this->SetFColor($bcor); + $this->x = $bak_x; + } + } + } +/*-- END COLUMNS --*/ + + $colctr = 0; + foreach($content[$i] as $tablehf) { + $colctr++; + $y = $tablehf['y'] - $topy; + $this->y = $y; + //Set some cell values + $x = $tablehf['x']; + if (($this->mirrorMargins) && ($tablestartpage == 'ODD') && (($this->page)%2==0)) { // EVEN + $x = $x +$this->MarginCorrection; + } + else if (($this->mirrorMargins) && ($tablestartpage == 'EVEN') && (($this->page)%2==1)) { // ODD + $x = $x +$this->MarginCorrection; + } +/*-- COLUMNS --*/ + // Added to correct for Columns + if ($this->ColActive) { + if ($this->directionality == 'rtl') { // *RTL* + $x -= ($this->CurrCol - $tablestartcolumn) * ($this->ColWidth+$this->ColGap); // *RTL* + } // *RTL* + else { // *RTL* + $x += ($this->CurrCol - $tablestartcolumn) * ($this->ColWidth+$this->ColGap); + } // *RTL* + } +/*-- END COLUMNS --*/ + + if ($colctr==1) { $x0 = $x; } + + // mPDF ITERATION + if ($this->iterationCounter) { + foreach($tablehf['textbuffer'] AS $k=>$t) { + if (!is_array($t[0]) && preg_match('/{iteration ([a-zA-Z0-9_]+)}/',$t[0], $m)) { // mPDF 5.5.06 + $vname = '__'.$m[1].'_'; + if (!isset($this->$vname)) { $this->$vname = 1; } + else { $this->$vname++; } + $tablehf['textbuffer'][$k][0] = preg_replace('/{iteration '.$m[1].'}/', $this->$vname, $tablehf['textbuffer'][$k][0]); + } + } + } + + + $w = $tablehf['w']; + $h = $tablehf['h']; + $va = $tablehf['va']; + $R = $tablehf['R']; + $mih = $tablehf['mih']; + $border = $tablehf['border']; + $border_details = $tablehf['border_details']; + $padding = $tablehf['padding']; + $this->tabletheadjustfinished = true; + + $textbuffer = $tablehf['textbuffer']; + + $align = $tablehf['a']; + //Align + $this->divalign=$align; + $this->x = $x; + + if ($this->ColActive) { + if ($table['borders_separate']) { + $tablefill = isset($table['bgcolor'][-1]) ? $table['bgcolor'][-1] : 0; + if ($tablefill) { + $color = $this->ConvertColor($tablefill); + if ($color) { + $xadj = ($table['border_spacing_H']/2); + $yadj = ($table['border_spacing_V']/2); + $wadj = $table['border_spacing_H']; + $hadj = $table['border_spacing_V']; + if ($i == $firstrow && $horf=='H') { // Top + $yadj += $table['padding']['T'] + $table['border_details']['T']['w'] ; + $hadj += $table['padding']['T'] + $table['border_details']['T']['w'] ; + } + if (($i == ($lastrow) || (isset($tablehf['rowspan']) && ($i+$tablehf['rowspan']) == ($lastrow+1)) || (!isset($tablehf['rowspan']) && ($i+1) == ($lastrow+1))) && $horf=='F') { // Bottom + $hadj += $table['padding']['B'] + $table['border_details']['B']['w'] ; + } + if ($colctr == 1) { // Left + $xadj += $table['padding']['L'] + $table['border_details']['L']['w'] ; + $wadj += $table['padding']['L'] + $table['border_details']['L']['w'] ; + } + if ($colctr == count($content[$i]) ) { // Right + $wadj += $table['padding']['R'] + $table['border_details']['R']['w'] ; + } + $this->SetFColor($color); + $this->Rect($x - $xadj, $y - $yadj, $w + $wadj, $h + $hadj, 'F'); + } + } + } + } + + if ($table['empty_cells']!='hide' || !empty($textbuffer) || !$table['borders_separate']) { $paintcell = true; } + else { $paintcell = false; } + + //Vertical align + if ($R && INTVAL($R) > 0 && isset($va) && $va!='B') { $va='B';} + + if (!isset($va) || empty($va) || $va=='M') $this->y += ($h-$mih)/2; + elseif (isset($va) && $va=='B') $this->y += $h-$mih; + + + //TABLE ROW OR CELL FILL BGCOLOR + $fill = 0; + if (isset($tablehf['bgcolor']) && $tablehf['bgcolor'] && $tablehf['bgcolor']!='transparent') { + $fill = $tablehf['bgcolor']; + $leveladj = 6; + } + else if (isset($content[$i][0]['trbgcolor']) && $content[$i][0]['trbgcolor'] && $content[$i][0]['trbgcolor']!='transparent') { // Row color + $fill = $content[$i][0]['trbgcolor']; + $leveladj = 3; + } + if ($fill && $paintcell) { + $color = $this->ConvertColor($fill); + if ($color) { + if ($table['borders_separate']) { + if ($this->ColActive) { + $this->SetFColor($color); + $this->Rect($x+ ($table['border_spacing_H']/2), $y+ ($table['border_spacing_V']/2), $w- $table['border_spacing_H'], $h- $table['border_spacing_V'], 'F'); + } + else { + $this->tableBackgrounds[$level*9+$leveladj][] = array('gradient'=>false, 'x'=>($x + ($table['border_spacing_H']/2)), 'y'=>($y + ($table['border_spacing_V']/2)), 'w'=>($w - $table['border_spacing_H']), 'h'=>($h - $table['border_spacing_V']), 'col'=>$color); + } + } + else { + if ($this->ColActive) { + $this->SetFColor($color); + $this->Rect($x, $y, $w, $h, 'F'); + } + else { + $this->tableBackgrounds[$level*9+$leveladj][] = array('gradient'=>false, 'x'=>$x, 'y'=>$y, 'w'=>$w, 'h'=>$h, 'col'=>$color); + } + } + } + } + + +/*-- BACKGROUNDS --*/ + if (isset($tablehf['gradient']) && $tablehf['gradient'] && $paintcell){ + $g = $this->grad->parseBackgroundGradient($tablehf['gradient']); + if ($g) { + if ($table['borders_separate']) { + $px = $x+ ($table['border_spacing_H']/2); + $py = $y+ ($table['border_spacing_V']/2); + $pw = $w- $table['border_spacing_H']; + $ph = $h- $table['border_spacing_V']; + } + else { + $px = $x; + $py = $y; + $pw = $w; + $ph = $h; + } + if ($this->ColActive) { + $this->grad->Gradient($px, $py, $pw, $ph, $g['type'], $g['stops'], $g['colorspace'], $g['coords'], $g['extend']); + } + else { + $this->tableBackgrounds[$level*9+7][] = array('gradient'=>true, 'x'=>$px, 'y'=>$py, 'w'=>$pw, 'h'=>$ph, 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>''); + } + } + } + + if (isset($tablehf['background-image']) && $paintcell){ + if ($tablehf['background-image']['gradient'] && preg_match('/(-moz-)*(repeating-)*(linear|radial)-gradient/', $tablehf['background-image']['gradient'] )) { + $g = $this->grad->parseMozGradient( $tablehf['background-image']['gradient'] ); + if ($g) { + if ($table['borders_separate']) { + $px = $x+ ($table['border_spacing_H']/2); + $py = $y+ ($table['border_spacing_V']/2); + $pw = $w- $table['border_spacing_H']; + $ph = $h- $table['border_spacing_V']; + } + else { + $px = $x; + $py = $y; + $pw = $w; + $ph = $h; + } + if ($this->ColActive) { + $this->grad->Gradient($px, $py, $pw, $ph, $g['type'], $g['stops'], $g['colorspace'], $g['coords'], $g['extend']); + } + else { + $this->tableBackgrounds[$level*9+7][] = array('gradient'=>true, 'x'=>$px, 'y'=>$py, 'w'=>$pw, 'h'=>$ph, 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>''); + } + } + } + else if ($tablehf['background-image']['image_id']) { // Background pattern + $n = count($this->patterns)+1; + if ($table['borders_separate']) { + $px = $x+ ($table['border_spacing_H']/2); + $py = $y+ ($table['border_spacing_V']/2); + $pw = $w- $table['border_spacing_H']; + $ph = $h- $table['border_spacing_V']; + } + else { + $px = $x; + $py = $y; + $pw = $w; + $ph = $h; + } + if ($this->ColActive) { + list($orig_w, $orig_h, $x_repeat, $y_repeat) = $this->_resizeBackgroundImage($tablehf['background-image']['orig_w'], $tablehf['background-image']['orig_h'], $pw, $ph, $tablehf['background-image']['resize'], $tablehf['background-image']['x_repeat'] , $tablehf['background-image']['y_repeat']); + $this->patterns[$n] = array('x'=>$px, 'y'=>$py, 'w'=>$pw, 'h'=>$ph, 'pgh'=>$this->h, 'image_id'=>$tablehf['background-image']['image_id'], 'orig_w'=>$orig_w, 'orig_h'=>$orig_h, 'x_pos'=>$tablehf['background-image']['x_pos'] , 'y_pos'=>$tablehf['background-image']['y_pos'] , 'x_repeat'=>$x_repeat, 'y_repeat'=>$y_repeat, 'itype'=>$tablehf['background-image']['itype']); + if ($tablehf['background-image']['opacity']>0 && $tablehf['background-image']['opacity']<1) { $opac = $this->SetAlpha($tablehf['background-image']['opacity'],'Normal',true); } + else { $opac = ''; } + $this->_out(sprintf('q /Pattern cs /P%d scn %s %.3F %.3F %.3F %.3F re f Q', $n, $opac, $px*_MPDFK, ($this->h-$py)*_MPDFK, $pw*_MPDFK, -$ph*_MPDFK)); + } + else { + $this->tableBackgrounds[$level*9+8][] = array('x'=>$px, 'y'=>$py, 'w'=>$pw, 'h'=>$ph, 'image_id'=>$tablehf['background-image']['image_id'], 'orig_w'=>$tablehf['background-image']['orig_w'], 'orig_h'=>$tablehf['background-image']['orig_h'], 'x_pos'=>$tablehf['background-image']['x_pos'], 'y_pos'=>$tablehf['background-image']['y_pos'], 'x_repeat'=>$tablehf['background-image']['x_repeat'], 'y_repeat'=>$tablehf['background-image']['y_repeat'], 'clippath'=>'', 'resize'=>$tablehf['background-image']['resize'], 'opacity'=>$tablehf['background-image']['opacity'], 'itype'=>$tablehf['background-image']['itype']); + } + } + } +/*-- END BACKGROUNDS --*/ + + //Cell Border + if ($table['borders_separate'] && $paintcell && $border) { + $this->_tableRect($x+ ($table['border_spacing_H']/2)+($border_details['L']['w'] /2), $y+ ($table['border_spacing_V']/2)+($border_details['T']['w'] /2), $w-$table['border_spacing_H']-($border_details['L']['w'] /2)-($border_details['R']['w'] /2), $h- $table['border_spacing_V']-($border_details['T']['w'] /2)-($border_details['B']['w']/2), $border, $border_details, false, $table['borders_separate']); + } + else if ($paintcell && $border) { + $this->_tableRect($x, $y, $w, $h, $border, $border_details, true, $table['borders_separate']); // true causes buffer + } + + //Print cell content + //$this->divheight = $this->table_lineheight*$this->lineheight; + if (!empty($textbuffer)) { + if ($horf=='F' && preg_match('/{colsum([0-9]*)[_]*}/', $textbuffer[0][0], $m)) { + $rep = sprintf("%01.".intval($m[1])."f", $this->colsums[$colctr-1]); + $textbuffer[0][0] = preg_replace('/{colsum[0-9_]*}/', $rep ,$textbuffer[0][0]); + } + + if ($R) { + $cellPtSize = $textbuffer[0][11] / $this->shrin_k; + if (!$cellPtSize) { $cellPtSize = $this->default_font_size; } + $cellFontHeight = ($cellPtSize/_MPDFK); + $opx = $this->x; + $opy = $this->y; + $angle = INTVAL($R); + // Only allow 45 - 90 degrees (when bottom-aligned) or -90 + if ($angle > 90) { $angle = 90; } + else if ($angle > 0 && (isset($va) && $va!='B')) { $angle = 90; } + else if ($angle > 0 && $angle <45) { $angle = 45; } + else if ($angle < 0) { $angle = -90; } + $offset = ((sin(deg2rad($angle))) * 0.37 * $cellFontHeight); + if (isset($align) && $align =='R') { + $this->x += ($w) + ($offset) - ($cellFontHeight/3) - ($padding['R'] + $border_details['R']['w']); + } + else if (!isset($align ) || $align =='C') { + $this->x += ($w/2) + ($offset); + } + else { + $this->x += ($offset) + ($cellFontHeight/3)+($padding['L'] + $border_details['L']['w']); + } + $str = ''; + foreach($tablehf['textbuffer'] AS $t) { $str .= $t[0].' '; } + $str = trim($str); + + if (!isset($va) || $va=='M') { + $this->y -= ($h-$mih)/2; //Undo what was added earlier VERTICAL ALIGN + if ($angle > 0) { $this->y += (($h-$mih)/2)+($padding['T'] + $border_details['T']['w']) + ($mih-($padding['T'] + $border_details['T']['w']+$border_details['B']['w']+$padding['B'])); } + else if ($angle < 0) { $this->y += (($h-$mih)/2)+($padding['T'] + $border_details['T']['w']); } + } + else if (isset($va) && $va=='B') { + $this->y -= $h-$mih; //Undo what was added earlier VERTICAL ALIGN + if ($angle > 0) { $this->y += $h-($border_details['B']['w']+$padding['B']); } + else if ($angle < 0) { $this->y += $h-$mih+($padding['T'] + $border_details['T']['w']); } + } + else if (isset($va) && $va=='T') { + if ($angle > 0) { $this->y += $mih-($border_details['B']['w']+$padding['B']); } + else if ($angle < 0) { $this->y += ($padding['T'] + $border_details['T']['w']); } + } + + $this->Rotate($angle,$this->x,$this->y); + $s_fs = $this->FontSizePt; + $s_f = $this->FontFamily; + $s_st = $this->FontStyle; + if (!empty($textbuffer[0][3])) { //Font Color + $cor = $textbuffer[0][3]; + $this->SetTColor($cor); + } + $s_str = $this->strike; + $this->strike = $textbuffer[0][8]; //Strikethrough + $this->SetFont($textbuffer[0][4],$textbuffer[0][2],$cellPtSize,true,true); + $this->Text($this->x,$this->y,$str); + $this->Rotate(0); + $this->SetFont($s_f,$s_st,$s_fs,true,true); + $this->SetTColor(0); + $this->strike = $s_str; + $this->x = $opx; + $this->y = $opy; + } + else { + if ($table['borders_separate']) { // NB twice border width + $xadj = $border_details['L']['w'] + $padding['L'] +($table['border_spacing_H']/2); + $wadj = $border_details['L']['w'] + $border_details['R']['w'] + $padding['L'] +$padding['R'] + $table['border_spacing_H']; + $yadj = $border_details['T']['w'] + $padding['T'] + ($table['border_spacing_H']/2); + } + else { + $xadj = $border_details['L']['w']/2 + $padding['L']; + $wadj = ($border_details['L']['w'] + $border_details['R']['w'])/2 + $padding['L'] + $padding['R']; + $yadj = $border_details['T']['w']/2 + $padding['T']; + } + + $this->divwidth=$w-($wadj); + $this->x += $xadj; + $this->y += $yadj; + $this->printbuffer($textbuffer,'',true); + } + + } + $textbuffer = array(); + +/*-- BACKGROUNDS --*/ + if (!$this->ColActive) { + if (isset($content[$i][0]['trgradients']) && ($colctr==1 || $table['borders_separate'])) { + $g = $this->grad->parseBackgroundGradient($content[$i][0]['trgradients']); + if ($g) { + $gx = $x0; + $gy = $y; + $gh = $h; + $gw = $table['w'] - ($table['max_cell_border_width']['L']/2) - ($table['max_cell_border_width']['R']/2) - $table['margin']['L'] - $table['margin']['R']; + if ($table['borders_separate']) { + $gw -= ($table['padding']['L'] + $table['border_details']['L']['w'] + $table['padding']['R'] + $table['border_details']['R']['w'] + $table['border_spacing_H']); + $s = ''; + $clx = $x+ ($table['border_spacing_H']/2); + $cly = $y+ ($table['border_spacing_V']/2); + $clw = $w- $table['border_spacing_H']; + $clh = $h- $table['border_spacing_V']; + // Set clipping path + $s = ' q 0 w '; // Line width=0 + $s .= sprintf('%.3F %.3F m ', ($clx)*_MPDFK, ($this->h-($cly))*_MPDFK); // start point TL before the arc + $s .= sprintf('%.3F %.3F l ', ($clx)*_MPDFK, ($this->h-($cly+$clh))*_MPDFK); // line to BL + $s .= sprintf('%.3F %.3F l ', ($clx+$clw)*_MPDFK, ($this->h-($cly+$clh))*_MPDFK); // line to BR + $s .= sprintf('%.3F %.3F l ', ($clx+$clw)*_MPDFK, ($this->h-($cly))*_MPDFK); // line to TR + $s .= sprintf('%.3F %.3F l ', ($clx)*_MPDFK, ($this->h-($cly))*_MPDFK); // line to TL + $s .= ' W n '; // Ends path no-op & Sets the clipping path + $this->tableBackgrounds[$level*9+4][] = array('gradient'=>true, 'x'=>$gx + ($table['border_spacing_H']/2), 'y'=>$gy + ($table['border_spacing_V']/2), 'w'=>$gw - $table['border_spacing_V'], 'h'=>$gh - $table['border_spacing_H'], 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>$s); + } + else { + $this->tableBackgrounds[$level*9+4][] = array('gradient'=>true, 'x'=>$gx, 'y'=>$gy, 'w'=>$gw, 'h'=>$gh, 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>''); + } + } + } + + if (isset($content[$i][0]['trbackground-images']) && ($colctr==1 || $table['borders_separate'])) { + if ($content[$i][0]['trbackground-images']['gradient'] && preg_match('/(-moz-)*(repeating-)*(linear|radial)-gradient/', $content[$i][0]['trbackground-images']['gradient'] )) { + $g = $this->grad->parseMozGradient( $content[$i][0]['trbackground-images']['gradient'] ); + if ($g) { + $gx = $x0; + $gy = $y; + $gh = $h; + $gw = $table['w'] - ($table['max_cell_border_width']['L']/2) - ($table['max_cell_border_width']['R']/2) - $table['margin']['L'] - $table['margin']['R']; + if ($table['borders_separate']) { + $gw -= ($table['padding']['L'] + $table['border_details']['L']['w'] + $table['padding']['R'] + $table['border_details']['R']['w'] + $table['border_spacing_H']); + $s = ''; + $clx = $x+ ($table['border_spacing_H']/2); + $cly = $y+ ($table['border_spacing_V']/2); + $clw = $w- $table['border_spacing_H']; + $clh = $h- $table['border_spacing_V']; + // Set clipping path + $s = ' q 0 w '; // Line width=0 + $s .= sprintf('%.3F %.3F m ', ($clx)*_MPDFK, ($this->h-($cly))*_MPDFK); // start point TL before the arc + $s .= sprintf('%.3F %.3F l ', ($clx)*_MPDFK, ($this->h-($cly+$clh))*_MPDFK); // line to BL + $s .= sprintf('%.3F %.3F l ', ($clx+$clw)*_MPDFK, ($this->h-($cly+$clh))*_MPDFK); // line to BR + $s .= sprintf('%.3F %.3F l ', ($clx+$clw)*_MPDFK, ($this->h-($cly))*_MPDFK); // line to TR + $s .= sprintf('%.3F %.3F l ', ($clx)*_MPDFK, ($this->h-($cly))*_MPDFK); // line to TL + $s .= ' W n '; // Ends path no-op & Sets the clipping path + $this->tableBackgrounds[$level*9+4][] = array('gradient'=>true, 'x'=>$gx + ($table['border_spacing_H']/2), 'y'=>$gy + ($table['border_spacing_V']/2), 'w'=>$gw - $table['border_spacing_V'], 'h'=>$gh - $table['border_spacing_H'], 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>$s); + } + else { + $this->tableBackgrounds[$level*9+4][] = array('gradient'=>true, 'x'=>$gx, 'y'=>$gy, 'w'=>$gw, 'h'=>$gh, 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>''); + } + } + } + else { + $image_id = $content[$i][0]['trbackground-images']['image_id']; + $orig_w = $content[$i][0]['trbackground-images']['orig_w']; + $orig_h = $content[$i][0]['trbackground-images']['orig_h']; + $x_pos = $content[$i][0]['trbackground-images']['x_pos']; + $y_pos = $content[$i][0]['trbackground-images']['y_pos']; + $x_repeat = $content[$i][0]['trbackground-images']['x_repeat']; + $y_repeat = $content[$i][0]['trbackground-images']['y_repeat']; + $resize = $content[$i][0]['trbackground-images']['resize']; + $opacity = $content[$i][0]['trbackground-images']['opacity']; + $itype = $content[$i][0]['trbackground-images']['itype']; + + $clippath = ''; + $gx = $x0; + $gy = $y; + $gh = $h; + $gw = $table['w'] - ($table['max_cell_border_width']['L']/2) - ($table['max_cell_border_width']['R']/2) - $table['margin']['L'] - $table['margin']['R']; + if ($table['borders_separate']) { + $gw -= ($table['padding']['L'] + $table['border_details']['L']['w'] + $table['padding']['R'] + $table['border_details']['R']['w'] + $table['border_spacing_H']); + $s = ''; + $clx = $x+ ($table['border_spacing_H']/2); + $cly = $y+ ($table['border_spacing_V']/2); + $clw = $w- $table['border_spacing_H']; + $clh = $h- $table['border_spacing_V']; + // Set clipping path + $s = ' q 0 w '; // Line width=0 + $s .= sprintf('%.3F %.3F m ', ($clx)*_MPDFK, ($this->h-($cly))*_MPDFK); // start point TL before the arc + $s .= sprintf('%.3F %.3F l ', ($clx)*_MPDFK, ($this->h-($cly+$clh))*_MPDFK); // line to BL + $s .= sprintf('%.3F %.3F l ', ($clx+$clw)*_MPDFK, ($this->h-($cly+$clh))*_MPDFK); // line to BR + $s .= sprintf('%.3F %.3F l ', ($clx+$clw)*_MPDFK, ($this->h-($cly))*_MPDFK); // line to TR + $s .= sprintf('%.3F %.3F l ', ($clx)*_MPDFK, ($this->h-($cly))*_MPDFK); // line to TL + $s .= ' W n '; // Ends path no-op & Sets the clipping path + $this->tableBackgrounds[$level*9+5][] = array('x'=>$gx + ($table['border_spacing_H']/2), 'y'=>$gy + ($table['border_spacing_V']/2), 'w'=>$gw - $table['border_spacing_V'], 'h'=>$gh - $table['border_spacing_H'], 'image_id'=>$image_id, 'orig_w'=>$orig_w, 'orig_h'=>$orig_h, 'x_pos'=>$x_pos, 'y_pos'=>$y_pos, 'x_repeat'=>$x_repeat, 'y_repeat'=>$y_repeat, 'clippath'=>$s, 'resize'=>$resize, 'opacity'=>$opacity, 'itype'=>$itype); + } + else { + $this->tableBackgrounds[$level*9+5][] = array('x'=>$gx, 'y'=>$gy, 'w'=>$gw, 'h'=>$gh, 'image_id'=>$image_id, 'orig_w'=>$orig_w, 'orig_h'=>$orig_h, 'x_pos'=>$x_pos, 'y_pos'=>$y_pos, 'x_repeat'=>$x_repeat, 'y_repeat'=>$y_repeat, 'clippath'=>'', 'resize'=>$resize, 'opacity'=>$opacity, 'itype'=>$itype); + } + } + } + } +/*-- END BACKGROUNDS --*/ + + // TABLE BORDER - if separate OR collapsed and only table border + if (($table['borders_separate'] || ($this->simpleTables && !$table['simple']['border'])) && $table['border']) { + $halfspaceL = $table['padding']['L'] + ($table['border_spacing_H']/2); + $halfspaceR = $table['padding']['R'] + ($table['border_spacing_H']/2); + $halfspaceT = $table['padding']['T'] + ($table['border_spacing_V']/2); + $halfspaceB = $table['padding']['B'] + ($table['border_spacing_V']/2); + $tbx = $x; + $tby = $y; + $tbw = $w; + $tbh = $h; + $tab_bord = 0; + $corner = ''; + if ($i == $firstrow && $horf=='H') { // Top + $tby -= $halfspaceT + ($table['border_details']['T']['w']/2); + $tbh += $halfspaceT + ($table['border_details']['T']['w']/2); + $this->setBorder($tab_bord , _BORDER_TOP); + $corner .= 'T'; + } + if (($i == ($lastrow) || (isset($tablehf['rowspan']) && ($i+$tablehf['rowspan']) == ($lastrow+1))) && $horf=='F') { // Bottom + $tbh += $halfspaceB + ($table['border_details']['B']['w']/2); + $this->setBorder($tab_bord , _BORDER_BOTTOM); + $corner .= 'B'; + } + if ($colctr == 1 && $firstSpread) { // Left + $tbx -= $halfspaceL + ($table['border_details']['L']['w']/2); + $tbw += $halfspaceL + ($table['border_details']['L']['w']/2); + $this->setBorder($tab_bord , _BORDER_LEFT); + $corner .= 'L'; + } + if ($colctr == count($content[$i]) && $finalSpread) { // Right + $tbw += $halfspaceR + ($table['border_details']['R']['w']/2); + $this->setBorder($tab_bord , _BORDER_RIGHT); + $corner .= 'R'; + } + $this->_tableRect($tbx, $tby, $tbw, $tbh, $tab_bord , $table['border_details'], false, $table['borders_separate'], 'table', $corner, $table['border_spacing_V'], $table['border_spacing_H'] ); + } + + + }// end column $content + $this->y = $y + $h; //Update y coordinate + }// end row $i + unset($table ); + $this->colsums = array(); + } +} +/*-- END TABLES --*/ + +/*-- HTMLHEADERS-FOOTERS --*/ +function SetHTMLHeader($header='',$OE='',$write=false) { + + $height = 0; + if (is_array($header) && isset($header['html']) && $header['html']) { + $Hhtml = $header['html']; + if ($this->setAutoTopMargin) { + if (isset($header['h'])) { $height = $header['h']; } + else { $height = $this->_gethtmlheight($Hhtml); } + } + } + else if (!is_array($header) && $header) { + $Hhtml = $header; + if ($this->setAutoTopMargin) { $height = $this->_gethtmlheight($Hhtml); } + } + else { $Hhtml = ''; } + + if ($OE != 'E') { $OE = 'O'; } + if ($OE == 'E') { + + if ($Hhtml) { + $this->HTMLHeaderE['html'] = $Hhtml; + $this->HTMLHeaderE['h'] = $height; + } + else { $this->HTMLHeaderE = ''; } + } + else { + + if ($Hhtml) { + $this->HTMLHeader['html'] = $Hhtml; + $this->HTMLHeader['h'] = $height; + } + else { $this->HTMLHeader = ''; } + } + if (!$this->mirrorMargins && $OE == 'E') { return; } + if ($Hhtml=='') { return; } + if ($OE == 'E') { + $this->headerDetails['even'] = array(); // override and clear any other non-HTML header/footer + } + else { + $this->headerDetails['odd'] = array(); // override and clear any non-HTML other header/footer + } + + if ($this->setAutoTopMargin=='pad') { + $this->tMargin = $this->margin_header + $height + $this->orig_tMargin; + if (isset($this->saveHTMLHeader[$this->page][$OE]['mt'])) { $this->saveHTMLHeader[$this->page][$OE]['mt'] = $this->tMargin; } + } + else if ($this->setAutoTopMargin=='stretch') { + $this->tMargin = max($this->orig_tMargin, $this->margin_header + $height + $this->autoMarginPadding); + if (isset($this->saveHTMLHeader[$this->page][$OE]['mt'])) { $this->saveHTMLHeader[$this->page][$OE]['mt'] = $this->tMargin; } + } + if ($write && $this->state!=0 && (($this->mirrorMargins && $OE == 'E' && ($this->page)%2==0) || ($this->mirrorMargins && $OE != 'E' && ($this->page)%2==1) || !$this->mirrorMargins)) { $this->writeHTMLHeaders(); } +} + +function SetHTMLFooter($footer='',$OE='') { + + $height = 0; + if (is_array($footer) && isset($footer['html']) && $footer['html']) { + $Fhtml = $footer['html']; + if ($this->setAutoBottomMargin) { + if (isset($footer['h'])) { $height = $footer['h']; } + else { $height = $this->_gethtmlheight($Fhtml); } + } + } + else if (!is_array($footer) && $footer) { + $Fhtml = $footer; + if ($this->setAutoBottomMargin) { $height = $this->_gethtmlheight($Fhtml); } + } + else { $Fhtml = ''; } + + if ($OE != 'E') { $OE = 'O'; } + if ($OE == 'E') { + + if ($Fhtml) { + $this->HTMLFooterE['html'] = $Fhtml; + $this->HTMLFooterE['h'] = $height; + } + else { $this->HTMLFooterE = ''; } + } + else { + + if ($Fhtml) { + $this->HTMLFooter['html'] = $Fhtml; + $this->HTMLFooter['h'] = $height; + } + else { $this->HTMLFooter = ''; } + } + if (!$this->mirrorMargins && $OE == 'E') { return; } + if ($Fhtml=='') { return false; } + if ($OE == 'E') { + $this->footerDetails['even'] = array(); // override and clear any other header/footer + } + else { + $this->footerDetails['odd'] = array(); // override and clear any other header/footer + } + + if ($this->setAutoBottomMargin=='pad') { + $this->bMargin = $this->margin_footer + $height + $this->orig_bMargin; + $this->PageBreakTrigger=$this->h-$this->bMargin ; + if (isset($this->saveHTMLHeader[$this->page][$OE]['mb'])) { $this->saveHTMLHeader[$this->page][$OE]['mb'] = $this->bMargin; } + } + else if ($this->setAutoBottomMargin=='stretch') { + $this->bMargin = max($this->orig_bMargin, $this->margin_footer + $height + $this->autoMarginPadding); + $this->PageBreakTrigger=$this->h-$this->bMargin ; + if (isset($this->saveHTMLHeader[$this->page][$OE]['mb'])) { $this->saveHTMLHeader[$this->page][$OE]['mb'] = $this->bMargin; } + } +} + + +function _getHtmlHeight($html) { + $save_state = $this->state; + if($this->state==0) { + $this->AddPage($this->CurOrientation); + } + $this->state = 2; + $this->Reset(); + $this->pageoutput[$this->page] = array(); + $save_x = $this->x; + $save_y = $this->y; + $this->x = $this->lMargin; + $this->y = $this->margin_header; + $html = str_replace('{PAGENO}',$this->pagenumPrefix.$this->docPageNum($this->page).$this->pagenumSuffix,$html); + $html = str_replace($this->aliasNbPgGp,$this->nbpgPrefix.$this->docPageNumTotal($this->page).$this->nbpgSuffix,$html ); + $html = str_replace($this->aliasNbPg,$this->page,$html ); + $html = preg_replace('/\{DATE\s+(.*?)\}/e',"date('\\1')",$html ); + $this->HTMLheaderPageLinks = array(); + $this->HTMLheaderPageAnnots = array(); + $this->HTMLheaderPageForms = array(); + $savepb = $this->pageBackgrounds; + $this->writingHTMLheader = true; + $this->WriteHTML($html , 4); // parameter 4 saves output to $this->headerbuffer + $this->writingHTMLheader = false; + $h = ($this->y - $this->margin_header); + $this->Reset(); + $this->pageoutput[$this->page] = array(); + $this->headerbuffer = ''; + $this->pageBackgrounds = $savepb; + $this->x = $save_x; + $this->y = $save_y; + $this->state = $save_state; + if($save_state==0) { + unset($this->pages[1]); + $this->page = 0; + } + return $h; +} + + +// Called internally from Header +function writeHTMLHeaders() { + + if ($this->mirrorMargins && ($this->page)%2==0) { $OE = 'E'; } // EVEN + else { $OE = 'O'; } + if ($OE == 'E') { + $this->saveHTMLHeader[$this->page][$OE]['html'] = $this->HTMLHeaderE['html'] ; + } + else { + $this->saveHTMLHeader[$this->page][$OE]['html'] = $this->HTMLHeader['html'] ; + } + if ($this->forcePortraitHeaders && $this->CurOrientation=='L' && $this->CurOrientation!=$this->DefOrientation) { + $this->saveHTMLHeader[$this->page][$OE]['rotate'] = true; + $this->saveHTMLHeader[$this->page][$OE]['ml'] = $this->tMargin; + $this->saveHTMLHeader[$this->page][$OE]['mr'] = $this->bMargin; + $this->saveHTMLHeader[$this->page][$OE]['mh'] = $this->margin_header; + $this->saveHTMLHeader[$this->page][$OE]['mf'] = $this->margin_footer; + $this->saveHTMLHeader[$this->page][$OE]['pw'] = $this->h; + $this->saveHTMLHeader[$this->page][$OE]['ph'] = $this->w; + } + else { + $this->saveHTMLHeader[$this->page][$OE]['ml'] = $this->lMargin; + $this->saveHTMLHeader[$this->page][$OE]['mr'] = $this->rMargin; + $this->saveHTMLHeader[$this->page][$OE]['mh'] = $this->margin_header; + $this->saveHTMLHeader[$this->page][$OE]['mf'] = $this->margin_footer; + $this->saveHTMLHeader[$this->page][$OE]['pw'] = $this->w; + $this->saveHTMLHeader[$this->page][$OE]['ph'] = $this->h; + } +} + +function writeHTMLFooters() { + + if ($this->mirrorMargins && ($this->page)%2==0) { $OE = 'E'; } // EVEN + else { $OE = 'O'; } + if ($OE == 'E') { + $this->saveHTMLFooter[$this->page][$OE]['html'] = $this->HTMLFooterE['html'] ; + } + else { + $this->saveHTMLFooter[$this->page][$OE]['html'] = $this->HTMLFooter['html'] ; + } + if ($this->forcePortraitHeaders && $this->CurOrientation=='L' && $this->CurOrientation!=$this->DefOrientation) { + $this->saveHTMLFooter[$this->page][$OE]['rotate'] = true; + $this->saveHTMLFooter[$this->page][$OE]['ml'] = $this->tMargin; + $this->saveHTMLFooter[$this->page][$OE]['mr'] = $this->bMargin; + $this->saveHTMLFooter[$this->page][$OE]['mt'] = $this->rMargin; + $this->saveHTMLFooter[$this->page][$OE]['mb'] = $this->lMargin; + $this->saveHTMLFooter[$this->page][$OE]['mh'] = $this->margin_header; + $this->saveHTMLFooter[$this->page][$OE]['mf'] = $this->margin_footer; + $this->saveHTMLFooter[$this->page][$OE]['pw'] = $this->h; + $this->saveHTMLFooter[$this->page][$OE]['ph'] = $this->w; + } + else { + $this->saveHTMLFooter[$this->page][$OE]['ml'] = $this->lMargin; + $this->saveHTMLFooter[$this->page][$OE]['mr'] = $this->rMargin; + $this->saveHTMLFooter[$this->page][$OE]['mt'] = $this->tMargin; + $this->saveHTMLFooter[$this->page][$OE]['mb'] = $this->bMargin; + $this->saveHTMLFooter[$this->page][$OE]['mh'] = $this->margin_header; + $this->saveHTMLFooter[$this->page][$OE]['mf'] = $this->margin_footer; + $this->saveHTMLFooter[$this->page][$OE]['pw'] = $this->w; + $this->saveHTMLFooter[$this->page][$OE]['ph'] = $this->h; + } +} +/*-- END HTMLHEADERS-FOOTERS --*/ + +function DefHeaderByName($name,$arr) { + if (!$name) { $name = '_default'; } + $this->pageheaders[$name] = $arr; +} + +function DefFooterByName($name,$arr) { + if (!$name) { $name = '_default'; } + $this->pagefooters[$name] = $arr; +} + +function SetHeaderByName($name,$side='O',$write=false) { + if (!$name) { $name = '_default'; } + if ($side=='E') { $this->headerDetails['even'] = $this->pageheaders[$name]; } + else { $this->headerDetails['odd'] = $this->pageheaders[$name]; } + if ($write) { $this->Header(); } +} + +function SetFooterByName($name,$side='O') { + if (!$name) { $name = '_default'; } + if ($side=='E') { $this->footerDetails['even'] = $this->pagefooters[$name]; } + else { $this->footerDetails['odd'] = $this->pagefooters[$name]; } +} + +/*-- HTMLHEADERS-FOOTERS --*/ +function DefHTMLHeaderByName($name,$html) { + if (!$name) { $name = '_default'; } + + $this->pageHTMLheaders[$name]['html'] = $html; + $this->pageHTMLheaders[$name]['h'] = $this->_gethtmlheight($html); +} + +function DefHTMLFooterByName($name,$html) { + if (!$name) { $name = '_default'; } + + $this->pageHTMLfooters[$name]['html'] = $html; + $this->pageHTMLfooters[$name]['h'] = $this->_gethtmlheight($html); +} + +function SetHTMLHeaderByName($name,$side='O',$write=false) { + if (!$name) { $name = '_default'; } + $this->SetHTMLHeader($this->pageHTMLheaders[$name],$side,$write); +} + +function SetHTMLFooterByName($name,$side='O') { + if (!$name) { $name = '_default'; } + $this->SetHTMLFooter($this->pageHTMLfooters[$name],$side,$write); +} +/*-- END HTMLHEADERS-FOOTERS --*/ + + +function SetHeader($Harray=array(),$side='',$write=false) { + if (is_string($Harray)) { + if (strlen($Harray)==0) { + if ($side=='O') { $this->headerDetails['odd'] = array(); } + else if ($side=='E') { $this->headerDetails['even'] = array(); } + else { $this->headerDetails = array(); } + } + else if (strpos($Harray,'|') || strpos($Harray,'|')===0) { + $hdet = explode('|',$Harray); + $this->headerDetails = array ( + 'odd' => array ( + 'L' => array ('content' => $hdet[0], 'font-size' => $this->defaultheaderfontsize, 'font-style' => $this->defaultheaderfontstyle), + 'C' => array ('content' => $hdet[1], 'font-size' => $this->defaultheaderfontsize, 'font-style' => $this->defaultheaderfontstyle), + 'R' => array ('content' => $hdet[2], 'font-size' => $this->defaultheaderfontsize, 'font-style' => $this->defaultheaderfontstyle), + 'line' => $this->defaultheaderline, + ), + 'even' => array ( + 'R' => array ('content' => $hdet[0], 'font-size' => $this->defaultheaderfontsize, 'font-style' => $this->defaultheaderfontstyle), + 'C' => array ('content' => $hdet[1], 'font-size' => $this->defaultheaderfontsize, 'font-style' => $this->defaultheaderfontstyle), + 'L' => array ('content' => $hdet[2], 'font-size' => $this->defaultheaderfontsize, 'font-style' => $this->defaultheaderfontstyle), + 'line' => $this->defaultheaderline, + ) + ); + } + else { + $this->headerDetails = array ( + 'odd' => array ( + 'R' => array ('content' => $Harray, 'font-size' => $this->defaultheaderfontsize, 'font-style' => $this->defaultheaderfontstyle), + 'line' => $this->defaultheaderline, + ), + 'even' => array ( + 'L' => array ('content' => $Harray, 'font-size' => $this->defaultheaderfontsize, 'font-style' => $this->defaultheaderfontstyle), + 'line' => $this->defaultheaderline, + ) + ); + } + } + else if (is_array($Harray)) { + if ($side=='O') { $this->headerDetails['odd'] = $Harray; } + else if ($side=='E') { $this->headerDetails['even'] = $Harray; } + else { $this->headerDetails = $Harray; } + } +/*-- HTMLHEADERS-FOOTERS --*/ + // Overwrite any HTML Header previously set + if ($side=='E') { $this->SetHTMLHeader('','E'); } + else if ($side=='O') { $this->SetHTMLHeader(''); } + else { + $this->SetHTMLHeader(''); + $this->SetHTMLHeader('','E'); + } +/*-- END HTMLHEADERS-FOOTERS --*/ + + if ($write) { + $save_y = $this->y; + $this->Header(); + $this->SetY($save_y) ; + } +} + + + + +function SetFooter($Farray=array(),$side='') { + if (is_string($Farray)) { + if (strlen($Farray)==0) { + if ($side=='O') { $this->footerDetails['odd'] = array(); } + else if ($side=='E') { $this->footerDetails['even'] = array(); } + else { $this->footerDetails = array(); } + } + else if (strpos($Farray,'|') || strpos($Farray,'|')===0) { + $fdet = explode('|',$Farray); + $this->footerDetails = array ( + 'odd' => array ( + 'L' => array ('content' => $fdet[0], 'font-size' => $this->defaultfooterfontsize, 'font-style' => $this->defaultfooterfontstyle), + 'C' => array ('content' => $fdet[1], 'font-size' => $this->defaultfooterfontsize, 'font-style' => $this->defaultfooterfontstyle), + 'R' => array ('content' => $fdet[2], 'font-size' => $this->defaultfooterfontsize, 'font-style' => $this->defaultfooterfontstyle), + 'line' => $this->defaultfooterline, + ), + 'even' => array ( + 'R' => array ('content' => $fdet[0], 'font-size' => $this->defaultfooterfontsize, 'font-style' => $this->defaultfooterfontstyle), + 'C' => array ('content' => $fdet[1], 'font-size' => $this->defaultfooterfontsize, 'font-style' => $this->defaultfooterfontstyle), + 'L' => array ('content' => $fdet[2], 'font-size' => $this->defaultfooterfontsize, 'font-style' => $this->defaultfooterfontstyle), + 'line' => $this->defaultfooterline, + ) + ); + } + else { + $this->footerDetails = array ( + 'odd' => array ( + 'R' => array ('content' => $Farray, 'font-size' => $this->defaultfooterfontsize, 'font-style' => $this->defaultfooterfontstyle), + 'line' => $this->defaultfooterline, + ), + 'even' => array ( + 'L' => array ('content' => $Farray, 'font-size' => $this->defaultfooterfontsize, 'font-style' => $this->defaultfooterfontstyle), + 'line' => $this->defaultfooterline, + ) + ); + } + } + else if (is_array($Farray)) { + if ($side=='O') { $this->footerDetails['odd'] = $Farray; } + else if ($side=='E') { $this->footerDetails['even'] = $Farray; } + else { $this->footerDetails = $Farray; } + } +/*-- HTMLHEADERS-FOOTERS --*/ + // Overwrite any HTML Footer previously set + if ($side=='E') { $this->SetHTMLFooter('','E'); } + else if ($side=='O') { $this->SetHTMLFooter(''); } + else { + $this->SetHTMLFooter(''); + $this->SetHTMLFooter('','E'); + } +/*-- END HTMLHEADERS-FOOTERS --*/ +} + +/*-- WATERMARK --*/ +function setUnvalidatedText($txt='', $alpha=-1) { + if ($alpha>=0) $this->watermarkTextAlpha = $alpha; + $this->watermarkText = $txt; +} +function SetWatermarkText($txt='', $alpha=-1) { + if ($alpha>=0) $this->watermarkTextAlpha = $alpha; + $this->watermarkText = $txt; +} + +function SetWatermarkImage($src, $alpha=-1, $size='D', $pos='F') { + if ($alpha>=0) $this->watermarkImageAlpha = $alpha; + $this->watermarkImage = $src; + $this->watermark_size = $size; + $this->watermark_pos = $pos; +} +/*-- END WATERMARK --*/ + + +//Page footer +function Footer() { +/*-- CSS-PAGE --*/ + // PAGED MEDIA - CROP / CROSS MARKS from @PAGE + if ($this->show_marks == 'CROP' || $this->show_marks == 'CROPCROSS') { + // Show TICK MARKS + $this->SetLineWidth(0.1); // = 0.1 mm + $this->SetDColor($this->ConvertColor(0)); + $l = $this->cropMarkLength; + $m = $this->cropMarkMargin; // Distance of crop mark from margin + $b = $this->nonPrintMargin; // Non-printable border at edge of paper sheet + $ax1 = $b; + $bx = $this->page_box['outer_width_LR'] - $m; + $ax = max($ax1, $bx-$l); + $cx1 = $this->w - $b; + $dx = $this->w - $this->page_box['outer_width_LR'] + $m; + $cx = min($cx1, $dx+$l); + $ay1 = $b; + $by = $this->page_box['outer_width_TB'] - $m; + $ay = max($ay1, $by-$l); + $cy1 = $this->h - $b; + $dy = $this->h - $this->page_box['outer_width_TB'] + $m; + $cy = min($cy1, $dy+$l); + + $this->Line($ax, $this->page_box['outer_width_TB'], $bx, $this->page_box['outer_width_TB']); + $this->Line($cx, $this->page_box['outer_width_TB'], $dx, $this->page_box['outer_width_TB']); + $this->Line($ax, $this->h - $this->page_box['outer_width_TB'], $bx, $this->h - $this->page_box['outer_width_TB']); + $this->Line($cx, $this->h - $this->page_box['outer_width_TB'], $dx, $this->h - $this->page_box['outer_width_TB']); + $this->Line($this->page_box['outer_width_LR'], $ay, $this->page_box['outer_width_LR'], $by); + $this->Line($this->page_box['outer_width_LR'], $cy, $this->page_box['outer_width_LR'], $dy); + $this->Line($this->w - $this->page_box['outer_width_LR'], $ay, $this->w - $this->page_box['outer_width_LR'], $by); + $this->Line($this->w - $this->page_box['outer_width_LR'], $cy, $this->w - $this->page_box['outer_width_LR'], $dy); + + if ($this->printers_info) { + $hd = date('Y-m-d H:i').' Page '.$this->page.' of {nb}'; + $this->SetTColor($this->ConvertColor(0)); + $this->SetFont('arial','',7.5,true,true); + $this->x = $this->page_box['outer_width_LR'] + 1.5; + $this->y = 1; + $this->Cell($headerpgwidth ,$this->FontSize,$hd,0,0,'L',0,'',0,0,0,'M'); + $this->SetFont($this->default_font,'',$this->original_default_font_size); + } + + } + if ($this->show_marks == 'CROSS' || $this->show_marks == 'CROPCROSS') { + $this->SetLineWidth(0.1); // = 0.1 mm + $this->SetDColor($this->ConvertColor(0)); + $l = 14 /2; // longer length of the cross line (half) + $w = 6 /2; // shorter width of the cross line (half) + $r = 1.2; // radius of circle + $m = $this->crossMarkMargin; // Distance of cross mark from margin + $x1 = $this->page_box['outer_width_LR'] - $m; + $x2 = $this->w - $this->page_box['outer_width_LR'] + $m; + $y1 = $this->page_box['outer_width_TB'] - $m; + $y2 = $this->h - $this->page_box['outer_width_TB'] + $m; + // Left + $this->Circle($x1, $this->h/2, $r, 'S') ; + $this->Line($x1-$w, $this->h/2, $x1+$w, $this->h/2); + $this->Line($x1, $this->h/2-$l, $x1, $this->h/2+$l); + // Right + $this->Circle($x2, $this->h/2, $r, 'S') ; + $this->Line($x2-$w, $this->h/2, $x2+$w, $this->h/2); + $this->Line($x2, $this->h/2-$l, $x2, $this->h/2+$l); + // Top + $this->Circle($this->w/2, $y1, $r, 'S') ; + $this->Line($this->w/2, $y1-$w, $this->w/2, $y1+$w); + $this->Line($this->w/2-$l, $y1, $this->w/2+$l, $y1); + // Bottom + $this->Circle($this->w/2, $y2, $r, 'S') ; + $this->Line($this->w/2, $y2-$w, $this->w/2, $y2+$w); + $this->Line($this->w/2-$l, $y2, $this->w/2+$l, $y2); + } + + + // If @page set non-HTML headers/footers named, they were not read until later in the HTML code - so now set them + if ($this->page==1) { + if ($this->firstPageBoxHeader) { + $this->headerDetails['odd'] = $this->pageheaders[$this->firstPageBoxHeader]; + $this->Header(); + } + if ($this->firstPageBoxFooter) { + $this->footerDetails['odd'] = $this->pagefooters[$this->firstPageBoxFooter]; + } + $this->firstPageBoxHeader=''; + $this->firstPageBoxFooter=''; + } +/*-- END CSS-PAGE --*/ + + + +/*-- HTMLHEADERS-FOOTERS --*/ + if (($this->mirrorMargins && ($this->page%2==0) && $this->HTMLFooterE) || ($this->mirrorMargins && ($this->page%2==1) && $this->HTMLFooter) || (!$this->mirrorMargins && $this->HTMLFooter)) { + $this->writeHTMLFooters(); +/*-- WATERMARK --*/ + if (($this->watermarkText) && ($this->showWatermarkText)) { + $this->watermark( $this->watermarkText, 45, 120, $this->watermarkTextAlpha); // Watermark text + } + if (($this->watermarkImage) && ($this->showWatermarkImage)) { + $this->watermarkImg( $this->watermarkImage, $this->watermarkImageAlpha); // Watermark image + } +/*-- END WATERMARK --*/ + return; + } +/*-- END HTMLHEADERS-FOOTERS --*/ + + $this->processingHeader=true; + $this->ResetMargins(); // necessary after columns + $this->pgwidth = $this->w - $this->lMargin - $this->rMargin; +/*-- WATERMARK --*/ + if (($this->watermarkText) && ($this->showWatermarkText)) { + $this->watermark( $this->watermarkText, 45, 120, $this->watermarkTextAlpha); // Watermark text + } + if (($this->watermarkImage) && ($this->showWatermarkImage)) { + $this->watermarkImg( $this->watermarkImage, $this->watermarkImageAlpha); // Watermark image + } +/*-- END WATERMARK --*/ + $h = $this->footerDetails; + if(count($h)) { + + if ($this->forcePortraitHeaders && $this->CurOrientation=='L' && $this->CurOrientation!=$this->DefOrientation) { + $this->_out(sprintf('q 0 -1 1 0 0 %.3F cm ',($this->h*_MPDFK))); + $headerpgwidth = $this->h - $this->orig_lMargin - $this->orig_rMargin; + if (($this->mirrorMargins) && (($this->page)%2==0)) { // EVEN + $headerlmargin = $this->orig_rMargin; + } + else { + $headerlmargin = $this->orig_lMargin; + } + } + else { + $yadj = 0; + $headerpgwidth = $this->pgwidth; + $headerlmargin = $this->lMargin; + } + $this->SetY(-$this->margin_footer); + + $this->SetTColor($this->ConvertColor(0)); + $this->SUP = false; + $this->SUB = false; + $this->bullet = false; + + // only show pagenumber if numbering on + $pgno = $this->docPageNum($this->page, true); + + if (($this->mirrorMargins) && (($this->page)%2==0)) { // EVEN + $side = 'even'; + } + else { // ODD // OR NOT MIRRORING MARGINS/FOOTERS = DEFAULT + $side = 'odd'; + } + $maxfontheight = 0; + foreach(array('L','C','R') AS $pos) { + if (isset($h[$side][$pos]['content']) && $h[$side][$pos]['content']) { + if (isset($h[$side][$pos]['font-size']) && $h[$side][$pos]['font-size']) { $hfsz = $h[$side][$pos]['font-size']; } + else { $hfsz = $this->default_font_size; } + $maxfontheight = max($maxfontheight,$hfsz); + } + } + // LEFT-CENTER-RIGHT + foreach(array('L','C','R') AS $pos) { + if (isset($h[$side][$pos]['content']) && $h[$side][$pos]['content']) { + $hd = str_replace('{PAGENO}',$pgno,$h[$side][$pos]['content']); + $hd = str_replace($this->aliasNbPgGp,$this->nbpgPrefix.$this->aliasNbPgGp.$this->nbpgSuffix,$hd); + $hd = preg_replace('/\{DATE\s+(.*?)\}/e',"date('\\1')",$hd); + if (isset($h[$side][$pos]['font-family']) && $h[$side][$pos]['font-family']) { $hff = $h[$side][$pos]['font-family']; } + else { $hff = $this->original_default_font; } + if (isset($h[$side][$pos]['font-size']) && $h[$side][$pos]['font-size']) { $hfsz = $h[$side][$pos]['font-size']; } + else { $hfsz = $this->original_default_font_size; } + $maxfontheight = max($maxfontheight,$hfsz); + if (isset($h[$side][$pos]['font-style']) && $h[$side][$pos]['font-style']) { $hfst = $h[$side][$pos]['font-style']; } + else { $hfst = ''; } + if (isset($h[$side][$pos]['color']) && $h[$side][$pos]['color']) { + $hfcol = $h[$side][$pos]['color']; + $cor = $this->ConvertColor($hfcol); + if ($cor) { $this->SetTColor($cor); } + } + else { $hfcol = ''; } + $this->SetFont($hff,$hfst,$hfsz,true,true); + $this->x = $headerlmargin ; + $this->y = $this->h - $this->margin_footer - ($maxfontheight/_MPDFK); + $hd = $this->purify_utf8_text($hd); + if ($this->text_input_as_HTML) { + $hd = $this->all_entities_to_utf8($hd); + } + // CONVERT CODEPAGE + if ($this->usingCoreFont) { $hd = mb_convert_encoding($hd,$this->mb_enc,'UTF-8'); } + // DIRECTIONALITY RTL + $this->magic_reverse_dir($hd, true, $this->directionality); // *RTL* + // Font-specific ligature substitution for Indic fonts + if (isset($this->CurrentFont['indic']) && $this->CurrentFont['indic']) $this->ConvertIndic($hd); // *INDIC* + $align = $pos; + if ($this->directionality == 'rtl') { + if ($pos == 'L') { $align = 'R'; } + else if ($pos == 'R') { $align = 'L'; } + } + + if ($pos!='L' && (strpos($hd,$this->aliasNbPg)!==false || strpos($hd,$this->aliasNbPgGp)!==false)) { + if (strpos($hd,$this->aliasNbPgGp)!==false) { $type= 'nbpggp'; } else { $type= 'nbpg'; } + $this->_out('{mpdfheader'.$type.' '.$pos.' ff='.$hff.' fs='.$hfst.' fz='.$hfsz.'}'); + $this->Cell($headerpgwidth ,$maxfontheight/_MPDFK ,$hd,0,0,$align,0,'',0,0,0,'M'); + $this->_out('Q'); + } + else { + $this->Cell($headerpgwidth ,$maxfontheight/_MPDFK ,$hd,0,0,$align,0,'',0,0,0,'M'); + } + if ($hfcol) { $this->SetTColor($this->ConvertColor(0)); } + } + } + // Return Font to normal + $this->SetFont($this->default_font,'',$this->original_default_font_size); + + // LINE + + if (isset($h[$side]['line']) && $h[$side]['line']) { + $this->SetLineWidth(0.1); + $this->SetDColor($this->ConvertColor(0)); + $this->Line($headerlmargin , $this->y-($maxfontheight*($this->footer_line_spacing)/_MPDFK), $headerlmargin +$headerpgwidth, $this->y-($maxfontheight*($this->footer_line_spacing)/_MPDFK)); + } + if ($this->forcePortraitHeaders && $this->CurOrientation=='L' && $this->CurOrientation!=$this->DefOrientation) { + $this->_out('Q'); + } + } + $this->processingHeader=false; + +} + +/////////////////// +// HYPHENATION +/////////////////// +// mPDF 5.6.21 +// Hard hyphens +function hardHyphenate($word, $maxWidth) { + // Don't hyphenate web addresses + if (preg_match('/^(http:|www\.)/',$word)) { return array(false,'','',''); } + + // Get dictionary + $poss = array(); + $softhyphens = array(); + $offset = 0; + $p = true; + if ($this->usingCoreFont) { + $wl = strlen($word); + } + else { + $wl = mb_strlen($word,'UTF-8'); + } + while($offset < $wl) { + if (!$this->usingCoreFont) { + $p = mb_strpos($word, "-", $offset, 'UTF-8'); + } + else if ($this->FontFamily!='csymbol' && $this->FontFamily!='czapfdingbats') { + $p = strpos($word, "-", $offset); + } + if ($p !== false) { $poss[] = $p - count($poss); } + else { break; } + $offset = $p+1; + } + $success = false; + foreach($poss AS $i) { + if ($this->usingCoreFont) { + $a = substr($word,0,$i); + if ($this->GetStringWidth($a.'-') > $maxWidth) { break ; } + $pre = $a; + $post = substr($word,$i,strlen($word)); + $prelength = strlen($pre); + } + else { + $a = mb_substr($word,0,$i,'UTF-8'); + if ($this->GetStringWidth($a.'-') > $maxWidth) { break ; } + $pre = $a; + $post = mb_substr($word,$i,mb_strlen($word,'UTF-8'),'UTF-8'); + $prelength = mb_strlen($pre, 'UTF-8'); + } + $success = true; + } + return array($success,$pre,$post,$prelength); +} + + +/*-- HYPHENATION --*/ +/////////////////// +/////////////////// +// HYPHENATION +/////////////////// +// Soft hyphs +function softHyphenate($word, $maxWidth) { + // Don't hyphenate web addresses + if (preg_match('/^(http:|www\.)/',$word)) { return array(false,'','',''); } + + // Get dictionary + $poss = array(); + $softhyphens = array(); + $offset = 0; + $p = true; + if ($this->usingCoreFont) { + $wl = strlen($word); + } + else { + $wl = mb_strlen($word,'UTF-8'); + } + while($offset < $wl) { + // Soft Hyphens chr(173) + if (!$this->usingCoreFont) { + $p = mb_strpos($word, "\xc2\xad", $offset, 'UTF-8'); + } + else if ($this->FontFamily!='csymbol' && $this->FontFamily!='czapfdingbats') { + $p = strpos($word, chr(173), $offset); + } + if ($p !== false) { $poss[] = $p - count($poss); } + else { break; } + $offset = $p+1; + } + $success = false; + foreach($poss AS $i) { + if ($this->usingCoreFont) { + $a = substr($word,0,$i); + if ($this->GetStringWidth($a.'-') > $maxWidth) { break ; } + $pre = $a; + $post = substr($word,$i,strlen($word)); + $prelength = strlen($pre); + } + else { + $a = mb_substr($word,0,$i,'UTF-8'); + if ($this->GetStringWidth($a.'-') > $maxWidth) { break ; } + $pre = $a; + $post = mb_substr($word,$i,mb_strlen($word,'UTF-8'),'UTF-8'); + $prelength = mb_strlen($pre, 'UTF-8'); + } + $success = true; + } + return array($success,$pre,$post,$prelength); +} + +/////////////////// +// Word hyphenation +function hyphenateWord($word, $maxWidth) { + // Do everything inside this function in utf-8 + // Don't hyphenate web addresses + if (preg_match('/^(http:|www\.)/',$word)) { return array(false,'','',''); } + + + // Get dictionary + if (!$this->loadedSHYdictionary) { + if (file_exists(_MPDF_PATH.'patterns/dictionary.txt')) { + $this->SHYdictionary = file(_MPDF_PATH.'patterns/dictionary.txt',FILE_SKIP_EMPTY_LINES); + foreach($this->SHYdictionary as $entry) { + $entry = trim($entry); + $poss = array(); + $offset = 0; + $p = true; + $wl = mb_strlen($entry ,'UTF-8'); + while($offset < $wl) { + $p = mb_strpos($entry, '/', $offset, 'UTF-8'); + if ($p !== false) { $poss[] = $p - count($poss); } + else { break; } + $offset = $p+1; + } + if (count($poss)) { $this->SHYdictionaryWords[str_replace('/', '', mb_strtolower($entry))] = $poss; } + } + } + $this->loadedSHYdictionary = true; + } + + if (!in_array($this->SHYlang,$this->SHYlanguages)) { return array(false,'','',''); } + // If no pattern loaded or not the best one + if (count($this->SHYpatterns) < 1 || ($this->loadedSHYpatterns && $this->loadedSHYpatterns != $this->SHYlang)) { + include(_MPDF_PATH."patterns/" . $this->SHYlang . ".php"); + $patterns = explode(' ', $patterns); + $new_patterns = array(); + for($i = 0; $i < count($patterns); $i++) { + $value = $patterns[$i]; + $new_patterns[preg_replace('/[0-9]/', '', $value)] = $value; + } + $this->SHYpatterns = $new_patterns; + $this->loadedSHYpatterns = $this->SHYlang; + } + + if ($this->usingCoreFont) { $word = mb_convert_encoding($word,'UTF-8',$this->mb_enc); } + + $prepre = ''; + $postpost = ''; + $startpunctuation = "\xc2\xab\xc2\xbf\xe2\x80\x98\xe2\x80\x9b\xe2\x80\x9c\xe2\x80\x9f"; + $endpunctuation = "\xe2\x80\x9e\xe2\x80\x9d\xe2\x80\x9a\xe2\x80\x99\xc2\xbb"; + $pre = ''; + $post = ''; + + + if (preg_match('/^(["\''.$startpunctuation .'])+(.{'.$this->SHYcharmin.',})$/u',$word,$m)) { + $prepre = $m[1]; + $word = $m[2]; + } + if (preg_match('/^(.{'.$this->SHYcharmin.',})([\'\.,;:!?"'.$endpunctuation .']+)$/u',$word,$m)) { + $word = $m[1]; + $postpost = $m[2]; + } + if(mb_strlen($word,'UTF-8') < $this->SHYcharmin) { + return array(false,'','',''); + } + $success = false; + + if(isset($this->SHYdictionaryWords[mb_strtolower($word)])) { + foreach($this->SHYdictionaryWords[mb_strtolower($word)] AS $i) { + $a = $prepre . mb_substr($word,0,$i,'UTF-8'); + if ($this->usingCoreFont) { $testa = mb_convert_encoding($a,$this->mb_enc,'UTF-8'); } + else { $testa = $a; } + if ($this->GetStringWidth($testa.'-') > $maxWidth) { break ; } + $pre = $a; + $post = mb_substr($word,$i,mb_strlen($word,'UTF-8'),'UTF-8') . $postpost; + $success = true; + } + } + + if (!$success) { + $text_word = '_' . $word . '_'; + $word_length = mb_strlen($text_word,'UTF-8'); + + $single_character = preg_split('//u', $text_word); + + $text_word = mb_strtolower($text_word,'UTF-8'); + $hyphenated_word = array(); + $numb3rs = array('0' => true, '1' => true, '2' => true, '3' => true, '4' => true, '5' => true, '6' => true, '7' => true, '8' => true, '9' => true); + for($position = 0; $position <= ($word_length - $this->SHYcharmin); $position++) { + $maxwins = min(($word_length - $position), $this->SHYcharmax); + for($win = $this->SHYcharmin; $win <= $maxwins; $win++) { + if(isset($this->SHYpatterns[mb_substr($text_word, $position, $win,'UTF-8')])) { + $pattern = $this->SHYpatterns[mb_substr($text_word, $position, $win,'UTF-8')]; + $digits = 1; + $pattern_length = mb_strlen($pattern,'UTF-8'); + for($i = 0; $i < $pattern_length; $i++) { + $char = $pattern[$i]; + if(isset($numb3rs[$char])) { + $zero = ($i == 0) ? $position - 1 : $position + $i - $digits; + if(!isset($hyphenated_word[$zero]) || $hyphenated_word[$zero] != $char) $hyphenated_word[$zero] = $char; + $digits++; + } + } + } + } + } + + for($i = $this->SHYleftmin; $i <= (mb_strlen($word,'UTF-8') - $this->SHYrightmin); $i++) { + if(isset($hyphenated_word[$i]) && $hyphenated_word[$i] % 2 != 0) { + $a = $prepre . mb_substr($word,0,$i,'UTF-8'); + if ($this->usingCoreFont) { $testa = mb_convert_encoding($a,$this->mb_enc,'UTF-8'); } + else { $testa = $a; } + if ($this->GetStringWidth($testa.'-') > $maxWidth + 0.0001) { break ; } + $pre = $a; + $post = mb_substr($word,$i,mb_strlen($word,'UTF-8'),'UTF-8') . $postpost; + $success = true; + } + } + } + if ($this->usingCoreFont) { + $pre = mb_convert_encoding($pre,$this->mb_enc,'UTF-8'); + $post = mb_convert_encoding($post,$this->mb_enc,'UTF-8'); + $prelength = strlen($pre); + } + else { + $prelength = mb_strlen($pre); + } + return array($success,$pre,$post,$prelength); + +} +/*-- END HYPHENATION --*/ + + +/*-- HTML-CSS --*/ +/////////////////// +/// HTML parser /// +/////////////////// +function WriteHTML($html,$sub=0,$init=true,$close=true) { + // $sub ADDED - 0 = default; 1=headerCSS only; 2=HTML body (parts) only; 3 - HTML parses only + // 4 - writes HTML headers + // $close Leaves buffers etc. in current state, so that it can continue a block etc. + // $init - Clears and sets buffers to Top level block etc. + + if (empty($html)) { $html = ''; } + if ($this->progressBar) { $this->UpdateProgressBar(1,0,'Parsing CSS & Headers'); } // *PROGRESS-BAR* + + if ($init) { + $this->headerbuffer=''; + $this->textbuffer = array(); + $this->fixedPosBlockSave = array(); + } + if ($sub == 1) { $html = '<style> '.$html.' </style>'; } // stylesheet only + + if ($this->allow_charset_conversion) { + if ($sub < 1) { + $this->ReadCharset($html); + } + if ($this->charset_in && $sub!=4) { // mPDF 5.4.14 + $success = iconv($this->charset_in,'UTF-8//TRANSLIT',$html); + if ($success) { $html = $success; } + } + } + $html = $this->purify_utf8($html,false); + if ($init) { + $this->blklvl = 0; + $this->lastblocklevelchange = 0; + $this->blk = array(); + $this->initialiseBlock($this->blk[0]); + $this->blk[0]['width'] =& $this->pgwidth; + $this->blk[0]['inner_width'] =& $this->pgwidth; + $this->blk[0]['blockContext'] = $this->blockContext; + } + + $zproperties = array(); + if ($sub < 2) { + $this->ReadMetaTags($html); + + // mPDF 5.6.18 + if (preg_match('/<base[^>]*href=["\']([^"\'>]*)["\']/i', $html, $m)) { + $this->SetBasePath($m[1]); + } + // NB default stylesheet now in mPDF.css - read on initialising class + $html = $this->cssmgr->ReadCSS($html); + + if ($this->useLang && !$this->usingCoreFont && preg_match('/<html [^>]*lang=[\'\"](.*?)[\'\"]/ism',$html,$m)) { + $html_lang = $m[1]; + } + + if (preg_match('/<html [^>]*dir=[\'\"]\s*rtl\s*[\'\"]/ism',$html)) { + $zproperties['DIRECTION'] = 'rtl'; + } + + // allow in-line CSS for body tag to be parsed // Get <body> tag inline CSS + if (preg_match('/<body([^>]*)>(.*?)<\/body>/ism',$html,$m) || preg_match('/<body([^>]*)>(.*)$/ism',$html,$m)) { + $html = $m[2]; + // Changed to allow style="background: url('bg.jpg')" + if (preg_match('/style=[\"](.*?)[\"]/ism',$m[1],$mm) || preg_match('/style=[\'](.*?)[\']/ism',$m[1],$mm)) { + $zproperties = $this->cssmgr->readInlineCSS($mm[1]); + } + if (preg_match('/dir=[\'\"]\s*rtl\s*[\'\"]/ism',$m[1])) { + $zproperties['DIRECTION'] = 'rtl'; + } + if (isset($html_lang) && $html_lang) { $zproperties['LANG'] = $html_lang; } + if ($this->useLang && !$this->onlyCoreFonts && preg_match('/lang=[\'\"](.*?)[\'\"]/ism',$m[1],$mm)) { + $zproperties['LANG'] = $mm[1]; + } + + } + } + $properties = $this->cssmgr->MergeCSS('BLOCK','BODY',''); + if ($zproperties) { $properties = $this->cssmgr->array_merge_recursive_unique($properties,$zproperties); } + + if (isset($properties['DIRECTION']) && $properties['DIRECTION']) { + $this->cssmgr->CSS['BODY']['DIRECTION'] = $properties['DIRECTION']; + } + if (!isset($this->cssmgr->CSS['BODY']['DIRECTION'])) { + $this->cssmgr->CSS['BODY']['DIRECTION'] = $this->directionality; + } + else { $this->SetDirectionality($this->cssmgr->CSS['BODY']['DIRECTION']); } + + $this->setCSS($properties,'','BODY'); + $this->blk[0]['InlineProperties'] = $this->saveInlineProperties(); + + if ($sub == 1) { return ''; } + if (!isset($this->cssmgr->CSS['BODY'])) { $this->cssmgr->CSS['BODY'] = array(); } + +/*-- BACKGROUNDS --*/ + if (isset($properties['BACKGROUND-GRADIENT'])) { + $this->bodyBackgroundGradient = $properties['BACKGROUND-GRADIENT']; + } + + if (isset($properties['BACKGROUND-IMAGE']) && $properties['BACKGROUND-IMAGE']) { + $ret = $this->SetBackground($properties, $this->pgwidth); + if ($ret) { $this->bodyBackgroundImage = $ret; } + } +/*-- END BACKGROUNDS --*/ + +/*-- CSS-PAGE --*/ + // If page-box is set + if ($this->state==0 && isset($this->cssmgr->CSS['@PAGE']) && $this->cssmgr->CSS['@PAGE'] ) { + $this->page_box['current'] = ''; + $this->page_box['using'] = true; + list($pborientation,$pbmgl,$pbmgr,$pbmgt,$pbmgb,$pbmgh,$pbmgf,$hname,$fname,$bg,$resetpagenum,$pagenumstyle,$suppress,$marks,$newformat) = $this->SetPagedMediaCSS('', false, 'O'); + $this->DefOrientation = $this->CurOrientation = $pborientation; + $this->orig_lMargin = $this->DeflMargin = $pbmgl; + $this->orig_rMargin = $this->DefrMargin = $pbmgr; + $this->orig_tMargin = $this->tMargin = $pbmgt; + $this->orig_bMargin = $this->bMargin = $pbmgb; + $this->orig_hMargin = $this->margin_header = $pbmgh; + $this->orig_fMargin = $this->margin_footer = $pbmgf; + list($pborientation,$pbmgl,$pbmgr,$pbmgt,$pbmgb,$pbmgh,$pbmgf,$hname,$fname,$bg,$resetpagenum,$pagenumstyle,$suppress,$marks,$newformat) = $this->SetPagedMediaCSS('', true, 'O'); // first page + $this->show_marks = $marks; + if ($hname && !preg_match('/^html_(.*)$/i',$hname)) $this->firstPageBoxHeader = $hname; + if ($fname && !preg_match('/^html_(.*)$/i',$fname)) $this->firstPageBoxFooter = $fname; + } +/*-- END CSS-PAGE --*/ + + $parseonly = false; + $this->bufferoutput = false; + if ($sub == 3) { + $parseonly = true; + // Close any open block tags + for ($b= $this->blklvl;$b>0;$b--) { $this->CloseTag($this->blk[$b]['tag']); } + // Output any text left in buffer + if (count($this->textbuffer)) { $this->printbuffer($this->textbuffer); } + $this->textbuffer=array(); + } + else if ($sub == 4) { + // Close any open block tags + for ($b= $this->blklvl;$b>0;$b--) { $this->CloseTag($this->blk[$b]['tag']); } + // Output any text left in buffer + if (count($this->textbuffer)) { $this->printbuffer($this->textbuffer); } + $this->bufferoutput = true; + $this->textbuffer=array(); + $this->headerbuffer=''; + $properties = $this->cssmgr->MergeCSS('BLOCK','BODY',''); + $this->setCSS($properties,'','BODY'); + } + + mb_internal_encoding('UTF-8'); + + $html = $this->AdjustHTML($html, $this->tabSpaces); //Try to make HTML look more like XHTML + + if ($this->autoFontGroups) { $html = $this->AutoFont($html); } + +/*-- HTMLHEADERS-FOOTERS --*/ + preg_match_all('/<htmlpageheader([^>]*)>(.*?)<\/htmlpageheader>/si',$html,$h); + for($i=0;$i<count($h[1]);$i++) { + if (preg_match('/name=[\'|\"](.*?)[\'|\"]/',$h[1][$i],$n)) { + $this->pageHTMLheaders[$n[1]]['html'] = $h[2][$i]; + $this->pageHTMLheaders[$n[1]]['h'] = $this->_gethtmlheight($h[2][$i]); + } + } + preg_match_all('/<htmlpagefooter([^>]*)>(.*?)<\/htmlpagefooter>/si',$html,$f); + for($i=0;$i<count($f[1]);$i++) { + if (preg_match('/name=[\'|\"](.*?)[\'|\"]/',$f[1][$i],$n)) { + $this->pageHTMLfooters[$n[1]]['html'] = $f[2][$i]; + $this->pageHTMLfooters[$n[1]]['h'] = $this->_gethtmlheight($f[2][$i]); + } + } +/*-- END HTMLHEADERS-FOOTERS --*/ + $html = preg_replace('/<htmlpageheader.*?<\/htmlpageheader>/si','',$html); + $html = preg_replace('/<htmlpagefooter.*?<\/htmlpagefooter>/si','',$html); + + if($this->state==0 && $sub!=1 && $sub!=3 && $sub!=4) { + $this->AddPage($this->CurOrientation); + } + + +/*-- HTMLHEADERS-FOOTERS --*/ + + if (isset($hname) && preg_match('/^html_(.*)$/i',$hname,$n)) $this->SetHTMLHeader($this->pageHTMLheaders[$n[1]],'O',true); + if (isset($fname) && preg_match('/^html_(.*)$/i',$fname,$n)) $this->SetHTMLFooter($this->pageHTMLfooters[$n[1]],'O'); + +/*-- END HTMLHEADERS-FOOTERS --*/ + + $html=str_replace('<?','< ',$html); //Fix '<?XML' bug from HTML code generated by MS Word + + $this->checkSIP = false; + $this->checkSMP = false; + $this->checkCJK = false; + if ($this->onlyCoreFonts) { $html = $this->SubstituteChars($html); } + else { + if (preg_match("/([".$this->pregRTLchars."])/u", $html)) { $this->biDirectional = true; } // *RTL* + if (preg_match("/([\x{20000}-\x{2FFFF}])/u", $html)) { $this->checkSIP = true; } + if (preg_match("/([\x{10000}-\x{1FFFF}])/u", $html)) { $this->checkSMP = true; } +/*-- CJK-FONTS --*/ + if (preg_match("/([".$this->pregCJKchars."])/u", $html)) { $this->checkCJK = true; } +/*-- END CJK-FONTS --*/ + } + + // Don't allow non-breaking spaces that are converted to substituted chars or will break anyway and mess up table width calc. + $html = str_replace('<tta>160</tta>',chr(32),$html); + $html = str_replace('</tta><tta>','|',$html); + $html = str_replace('</tts><tts>','|',$html); + $html = str_replace('</ttz><ttz>','|',$html); + + //Add new supported tags in the DisableTags function + $html=strip_tags($html,$this->enabledtags); //remove all unsupported tags, but the ones inside the 'enabledtags' string + + //Explode the string in order to parse the HTML code + $a=preg_split('/<(.*?)>/ms',$html,-1,PREG_SPLIT_DELIM_CAPTURE); + // ? more accurate regexp that allows e.g. <a name="Silly <name>"> + // if changing - also change in fn.SubstituteChars() + // $a = preg_split ('/<((?:[^<>]+(?:"[^"]*"|\'[^\']*\')?)+)>/ms', $html, -1, PREG_SPLIT_DELIM_CAPTURE); + + if ($this->mb_enc) { + mb_internal_encoding($this->mb_enc); + } + $pbc = 0; + if ($this->progressBar) { $this->UpdateProgressBar(1,0); } // *PROGRESS-BAR* + $this->subPos = -1; + $cnt = count($a); + for($i=0;$i<$cnt; $i++) { + $e = $a[$i]; + if($i%2==0) { + //TEXT + if ($this->blk[$this->blklvl]['hide']) { continue; } + if ($this->inlineDisplayOff) { continue; } + if ($this->inMeter) { continue; } // mPDF 5.5.09 + + if ($this->inFixedPosBlock) { $this->fixedPosBlock .= $e; continue; } // *CSS-POSITION* + if (strlen($e) == 0) { continue; } + + $e = strcode2utf($e); + $e = $this->lesser_entity_decode($e); + + if ($this->usingCoreFont) { + // If core font is selected in document which is not onlyCoreFonts - substitute with non-core font + if ($this->useSubstitutions && !$this->onlyCoreFonts && $this->subPos<$i && !$this->specialcontent) { + $cnt += $this->SubstituteCharsNonCore($a, $i, $e); + } + // CONVERT ENCODING + $e = mb_convert_encoding($e,$this->mb_enc,'UTF-8'); + // mPDF 5.6.41 + if ($this->toupper) { $e = mb_strtoupper($e,$this->mb_enc); } + if ($this->tolower) { $e = mb_strtolower($e,$this->mb_enc); } + if ($this->capitalize) { $e = mb_convert_case($e, MB_CASE_TITLE, "UTF-8"); } + } + else { + if ($this->checkSIP && $this->CurrentFont['sipext'] && $this->subPos<$i && !$this->specialcontent) { + $cnt += $this->SubstituteCharsSIP($a, $i, $e); + } + + if ($this->useSubstitutions && !$this->onlyCoreFonts && $this->CurrentFont['type']!='Type0' && $this->subPos<$i && !$this->specialcontent) { + // mPDF 5.6.62 removes U+200E/U+200F LTR and RTL mark and U+200C/U+200D Zero-width Joiner and Non-joiner + $e = preg_replace("/[\xe2\x80\x8c\xe2\x80\x8d\xe2\x80\x8e\xe2\x80\x8f]/u",'',$e); + $cnt += $this->SubstituteCharsMB($a, $i, $e); + } + if ($this->biDirectional) { // *RTL* + $e = preg_replace("/([".$this->pregRTLchars."]+)/ue", '$this->ArabJoin(stripslashes(\'\\1\'))', $e); // *RTL* + } // *RTL* + // Font-specific ligature substitution for Indic fonts + if (isset($this->CurrentFont['indic']) && $this->CurrentFont['indic']) $this->ConvertIndic($e); // *INDIC* + + // mPDF 5.6.62 removes U+200E/U+200F LTR and RTL mark and U+200C/U+200D Zero-width Joiner and Non-joiner + $e = preg_replace("/[\xe2\x80\x8c\xe2\x80\x8d\xe2\x80\x8e\xe2\x80\x8f]/u",'',$e); + + if ($this->toupper) { $e = mb_strtoupper($e,$this->mb_enc); } + if ($this->tolower) { $e = mb_strtolower($e,$this->mb_enc); } + if ($this->capitalize) { $e = mb_convert_case($e, MB_CASE_TITLE, "UTF-8"); } + } + if (($this->tts) || ($this->ttz) || ($this->tta)) { + $es = explode('|',$e); + $e = ''; + foreach($es AS $val) { + $e .= chr($val); + } + } + //Adjust lineheight + + // FORM ELEMENTS + if ($this->specialcontent) { +/*-- FORMS --*/ + //SELECT tag (form element) + if ($this->specialcontent == "type=select") { + $e = ltrim($e); + $stringwidth = $this->GetStringWidth($e); + if (!isset($this->selectoption['MAXWIDTH']) || $stringwidth > $this->selectoption['MAXWIDTH']) { $this->selectoption['MAXWIDTH'] = $stringwidth; } + if (!isset($this->selectoption['SELECTED']) || $this->selectoption['SELECTED'] == '') { $this->selectoption['SELECTED'] = $e; } + // mPDD 1.4 Active Forms + if (isset($this->selectoption['ACTIVE']) && $this->selectoption['ACTIVE']) { + $this->selectoption['ITEMS'][]=array('exportValue'=>$this->selectoption['currentVAL'], 'content'=>$e, 'selected'=>$this->selectoption['currentSEL']); + } + } + // TEXTAREA + else { + $objattr = unserialize($this->specialcontent); + $objattr['text'] = $e; + $te = "\xbb\xa4\xactype=textarea,objattr=".serialize($objattr)."\xbb\xa4\xac"; + if ($this->tdbegin) { + $this->_saveCellTextBuffer($te, $this->HREF); + } + else { + $this->_saveTextBuffer($te, $this->HREF); + } + } +/*-- END FORMS --*/ + } + + // TABLE + else if ($this->tableLevel) { +/*-- TABLES --*/ + if ($this->tdbegin) { + if (($this->ignorefollowingspaces) && !$this->ispre) { $e = ltrim($e); } + if ($e || $e==='0') { + if (($this->blockjustfinished || $this->listjustfinished) && $this->cell[$this->row][$this->col]['s']>0) { + $this->_saveCellTextBuffer("\n"); + if (!isset($this->cell[$this->row][$this->col]['maxs'])) { + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + elseif($this->cell[$this->row][$this->col]['maxs'] < $this->cell[$this->row][$this->col]['s']) { + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + $this->cell[$this->row][$this->col]['s'] = 0;// reset + } + $this->blockjustfinished=false; + $this->listjustfinished=false; + + $this->_saveCellTextBuffer($e, $this->HREF); + + if (!isset($this->cell[$this->row][$this->col]['R']) || !$this->cell[$this->row][$this->col]['R']) { + if (isset($this->cell[$this->row][$this->col]['s'])) { + $this->cell[$this->row][$this->col]['s'] += $this->GetStringWidth($e, false); + } + else { $this->cell[$this->row][$this->col]['s'] = $this->GetStringWidth($e, false); } + if (!empty($this->spanborddet)) { + $this->cell[$this->row][$this->col]['s'] += $this->spanborddet['L']['w'] + $this->spanborddet['R']['w']; + } + } + + if ($this->checkCJK && preg_match("/([".$this->pregCJKchars."])/u", $e)) { $this->tableCJK = true; } // *CJK-FONTS* + + // mPDF 5.6.13 Decimal mark alignment + if (substr($this->cell[$this->row][$this->col]['a'],0,1) == 'D') { + $dp = $this->decimal_align[substr($this->cell[$this->row][$this->col]['a'],0,2)]; + $s = preg_split('/'.preg_quote($dp,'/').'/', $e, 2); // ? needs to be /u if not core + $s0 = $this->GetStringWidth($s[0], false); + if ($s[1]) { $s1 = $this->GetStringWidth(($s[1].$dp), false); } + else $s1 = 0; + if (!isset($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['decimal_align'][$this->col]['maxs0'])) { + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['decimal_align'][$this->col]['maxs0'] = $s0; + } + else { + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['decimal_align'][$this->col]['maxs0'] = max($s0, $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['decimal_align'][$this->col]['maxs0']); + } + if (!isset($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['decimal_align'][$this->col]['maxs1'])) { + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['decimal_align'][$this->col]['maxs1'] = $s1; + } + else { + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['decimal_align'][$this->col]['maxs1'] = max($s1, $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['decimal_align'][$this->col]['maxs1']); + } + } + + if ($this->tableLevel==1 && $this->useGraphs) { + $this->graphs[$this->currentGraphId]['data'][$this->row][$this->col] = $e; + } + $this->nestedtablejustfinished = false; + $this->linebreakjustfinished=false; + } + } +/*-- END TABLES --*/ + } + // ALL ELSE + else { + if ($this->ignorefollowingspaces and !$this->ispre) { $e = ltrim($e); } + if ($e || $e==='0') $this->_saveTextBuffer($e, $this->HREF); + } + } + + + else { // TAG ** + + if($e[0]=='/') { +/*-- PROGRESS-BAR --*/ + if ($this->progressBar) { // 10% increments + if (intval($i*10/$cnt) != $pbc) { $pbc = intval($i*10/$cnt); $this->UpdateProgressBar(1,$pbc*10,$tag); } + } +/*-- END PROGRESS-BAR --*/ + + + // Check for tags where HTML specifies optional end tags, + // and/or does not allow nesting e.g. P inside P, or + $endtag = trim(strtoupper(substr($e,1))); // mPDF 5.4.20 + if($this->blk[$this->blklvl]['hide']) { + if (in_array($endtag, $this->outerblocktags) || in_array($endtag, $this->innerblocktags)) { + unset($this->blk[$this->blklvl]); + $this->blklvl--; + } + continue; + } + +/*-- CSS-POSITION --*/ + if ($this->inFixedPosBlock) { + if (in_array($endtag, $this->outerblocktags) || in_array($endtag, $this->innerblocktags)) { $this->fixedPosBlockDepth--; } + if ($this->fixedPosBlockDepth == 0) { + $this->fixedPosBlockSave[] = array($this->fixedPosBlock, $this->fixedPosBlockBBox, $this->page); + $this->fixedPosBlock = ''; + $this->inFixedPosBlock = false; + continue; + } + $this->fixedPosBlock .= '<'.$e.'>'; + continue; + } +/*-- END CSS-POSITION --*/ + if ($this->allow_html_optional_endtags && !$parseonly) { + if (($endtag == 'DIV' || $endtag =='FORM' || $endtag =='CENTER') && $this->lastoptionaltag == 'P') { $this->CloseTag($this->lastoptionaltag ); } + if ($this->lastoptionaltag == 'LI' && $endtag == 'OL') { $this->CloseTag($this->lastoptionaltag ); } + if ($this->lastoptionaltag == 'LI' && $endtag == 'UL') { $this->CloseTag($this->lastoptionaltag ); } + if ($this->lastoptionaltag == 'DD' && $endtag == 'DL') { $this->CloseTag($this->lastoptionaltag ); } + if ($this->lastoptionaltag == 'DT' && $endtag == 'DL') { $this->CloseTag($this->lastoptionaltag ); } + if ($this->lastoptionaltag == 'OPTION' && $endtag == 'SELECT') { $this->CloseTag($this->lastoptionaltag ); } +/*-- TABLES --*/ + if ($endtag == 'TABLE') { + if ($this->lastoptionaltag == 'THEAD' || $this->lastoptionaltag == 'TBODY' || $this->lastoptionaltag == 'TFOOT') { + $this->CloseTag($this->lastoptionaltag); + } + if ($this->lastoptionaltag == 'TR') { $this->CloseTag('TR'); } + if ($this->lastoptionaltag == 'TD' || $this->lastoptionaltag == 'TH') { $this->CloseTag($this->lastoptionaltag ); $this->CloseTag('TR'); } + } + if ($endtag == 'THEAD' || $endtag == 'TBODY' || $endtag == 'TFOOT') { + if ($this->lastoptionaltag == 'TR') { $this->CloseTag('TR'); } + if ($this->lastoptionaltag == 'TD' || $this->lastoptionaltag == 'TH') { $this->CloseTag($this->lastoptionaltag ); $this->CloseTag('TR'); } + } + if ($endtag == 'TR') { + if ($this->lastoptionaltag == 'TD' || $this->lastoptionaltag == 'TH') { $this->CloseTag($this->lastoptionaltag ); } + } +/*-- END TABLES --*/ + } + $this->CloseTag($endtag); + } + + else { // OPENING TAG + if($this->blk[$this->blklvl]['hide']) { + if (strpos($e,' ')) { $te = strtoupper(substr($e,0,strpos($e,' '))); } + else { $te = strtoupper($e); } + if (in_array($te, $this->outerblocktags) || in_array($te, $this->innerblocktags)) { + $this->blklvl++; + $this->blk[$this->blklvl]['hide']=true; + } + continue; + } + +/*-- CSS-POSITION --*/ + if ($this->inFixedPosBlock) { + if (strpos($e,' ')) { $te = strtoupper(substr($e,0,strpos($e,' '))); } + else { $te = strtoupper($e); } + $this->fixedPosBlock .= '<'.$e.'>'; + if (in_array($te, $this->outerblocktags) || in_array($te, $this->innerblocktags)) { $this->fixedPosBlockDepth++; } + continue; + } +/*-- END CSS-POSITION --*/ + $regexp = '|=\'(.*?)\'|s'; // eliminate single quotes, if any + $e = preg_replace($regexp,"=\"\$1\"",$e); + // changes anykey=anyvalue to anykey="anyvalue" (only do this inside [some] tags) + if (substr($e,0,10)!='pageheader' && substr($e,0,10)!='pagefooter' && substr($e,0,12)!='tocpagebreak') { // mPDF 5.6.69 + $regexp = '| (\\w+?)=([^\\s>"]+)|si'; + $e = preg_replace($regexp," \$1=\"\$2\"",$e); + } + + $e = preg_replace('/ (\\S+?)\s*=\s*"/i', " \\1=\"", $e); + + //Fix path values, if needed + $orig_srcpath = ''; + if ((stristr($e,"href=") !== false) or (stristr($e,"src=") !== false) ) { + $regexp = '/ (href|src)\s*=\s*"(.*?)"/i'; + preg_match($regexp,$e,$auxiliararray); + if (isset($auxiliararray[2])) { $path = $auxiliararray[2]; } + else { $path = ''; } + if (trim($path) != '' && !(stristr($e,"src=") !== false && substr($path,0,4)=='var:')) { + $orig_srcpath = $path; + $this->GetFullPath($path); + $regexp = '/ (href|src)="(.*?)"/i'; + $e = preg_replace($regexp,' \\1="'.$path.'"',$e); + } + }//END of Fix path values + + + //Extract attributes + $contents=array(); + $contents1=array(); // mPDF 5.5.17 + $contents2=array(); + // Changed to allow style="background: url('bg.jpg')" + // mPDF 5.5.17 Changed to improve performance; maximum length of \S (attribute) = 16 + // mPDF 5.6.30 Increase allowed attribute name to 32 - cutting off "toc-even-header-name" etc. + preg_match_all('/\\S{1,32}=["][^"]*["]/',$e,$contents1); + preg_match_all('/\\S{1,32}=[\'][^\']*[\']/i',$e,$contents2); + + $contents = array_merge($contents1, $contents2); + preg_match('/\\S+/',$e,$a2); + $tag=strtoupper($a2[0]); + $attr=array(); + if ($orig_srcpath) { $attr['ORIG_SRC'] = $orig_srcpath; } + if (!empty($contents)) { + foreach($contents[0] as $v) { + // Changed to allow style="background: url('bg.jpg')" + if(preg_match('/^([^=]*)=["]?([^"]*)["]?$/',$v,$a3) || preg_match('/^([^=]*)=[\']?([^\']*)[\']?$/',$v,$a3)) { + if (strtoupper($a3[1])=='ID' || strtoupper($a3[1])=='CLASS') { // 4.2.013 Omits STYLE + $attr[strtoupper($a3[1])]=trim(strtoupper($a3[2])); + } + // includes header-style-right etc. used for <pageheader> + else if (preg_match('/^(HEADER|FOOTER)-STYLE/i',$a3[1])) { + $attr[strtoupper($a3[1])]=trim(strtoupper($a3[2])); + } + else { + $attr[strtoupper($a3[1])]=trim($a3[2]); + } + } + } + } + $this->OpenTag($tag,$attr); +/*-- CSS-POSITION --*/ + if ($this->inFixedPosBlock) { + $this->fixedPosBlockBBox = array($tag,$attr, $this->x, $this->y); + $this->fixedPosBlock = ''; + $this->fixedPosBlockDepth = 1; + } +/*-- END CSS-POSITION --*/ + // mPDF 5.5.09 + if (preg_match('/\/$/',$e)) { $this->closeTag($tag); } + + } + + } // end TAG + } //end of foreach($a as $i=>$e) + + if ($close) { + + // Close any open block tags + for ($b= $this->blklvl;$b>0;$b--) { $this->CloseTag($this->blk[$b]['tag']); } + + // Output any text left in buffer + if (count($this->textbuffer) && !$parseonly) { $this->printbuffer($this->textbuffer); } + if (!$parseonly) $this->textbuffer=array(); + +/*-- CSS-FLOAT --*/ + // If ended with a float, need to move to end page + $currpos = $this->page*1000 + $this->y; + if (isset($this->blk[$this->blklvl]['float_endpos']) && $this->blk[$this->blklvl]['float_endpos'] > $currpos) { + $old_page = $this->page; + $new_page = intval($this->blk[$this->blklvl]['float_endpos'] /1000); + if ($old_page != $new_page) { + $s = $this->PrintPageBackgrounds(); + // Writes after the marker so not overwritten later by page background etc. + $this->pages[$this->page] = preg_replace('/(___BACKGROUND___PATTERNS'.date('jY').')/', '\\1'."\n".$s."\n", $this->pages[$this->page]); + $this->pageBackgrounds = array(); + $this->page = $new_page; + $this->ResetMargins(); + $this->Reset(); + $this->pageoutput[$this->page] = array(); + } + $this->y = (($this->blk[$this->blklvl]['float_endpos'] *1000) % 1000000)/1000; // mod changes operands to integers before processing + } +/*-- END CSS-FLOAT --*/ + +/*-- CSS-IMAGE-FLOAT --*/ + $this->printfloatbuffer(); +/*-- END CSS-IMAGE-FLOAT --*/ + + //Create Internal Links, if needed + if (!empty($this->internallink) ) { + foreach($this->internallink as $k=>$v) { + if (strpos($k,"#") !== false ) { continue; } //ignore + $ypos = $v['Y']; + $pagenum = $v['PAGE']; + $sharp = "#"; + while (array_key_exists($sharp.$k,$this->internallink)) { + $internallink = $this->internallink[$sharp.$k]; + $this->SetLink($internallink,$ypos,$pagenum); + $sharp .= "#"; + } + } + } + + $this->linemaxfontsize = ''; + $this->lineheight_correction = $this->default_lineheight_correction; + + $this->bufferoutput = false; + +/*-- CSS-POSITION --*/ + if (count($this->fixedPosBlockSave) && $sub != 4) { + foreach($this->fixedPosBlockSave AS $fpbs) { + $old_page = $this->page; + $this->page = $fpbs[2]; + $this->WriteFixedPosHTML($fpbs[0], 0, 0, 100, 100,'auto', $fpbs[1]); // 0,0,10,10 are overwritten by bbox + $this->page = $old_page; + } + } +/*-- END CSS-POSITION --*/ + + } +} + +/*-- CSS-POSITION --*/ + +function WriteFixedPosHTML($html='',$x, $y, $w, $h, $overflow='visible', $bounding=array()) { + // $overflow can be 'hidden', 'visible' or 'auto' - 'auto' causes autofit to size + // Annotations disabled - enabled in mPDF 5.0 + // Links do work + // Will always go on current page (or start Page 1 if required) + // Probably INCOMPATIBLE WITH keep with table, columns etc. + // Called externally or interally via <div style="position: [fixed|absolute]"> + // When used internally, $x $y $w $h and $overflow are all overridden by $bounding + + $overflow = strtolower($overflow); + if($this->state==0) { + $this->AddPage($this->CurOrientation); + } + $save_y = $this->y; + $save_x = $this->x; + $this->fullImageHeight = $this->h; + $save_cols = false; +/*-- COLUMNS --*/ + if ($this->ColActive) { + $save_cols = true; + $save_nbcol = $this->NbCol; // other values of gap and vAlign will not change by setting Columns off + $this->SetColumns(0); + } +/*-- END COLUMNS --*/ + $save_annots = $this->title2annots; // *ANNOTATIONS* + $this->writingHTMLheader = true; // a FIX to stop pagebreaks etc. + $this->writingHTMLfooter = true; + $this->InFooter = true; // suppresses autopagebreaks + $save_bgs = $this->pageBackgrounds; + $checkinnerhtml = preg_replace('/\s/','',$html); + + if ($w > $this->w) { $x = 0; $w = $this->w; } + if ($h > $this->h) { $y = 0; $h = $this->h; } + if ($x > $this->w) { $x = $this->w - $w; } + if ($y > $this->h) { $y = $this->h - $h; } + + if (!empty($bounding)) { + // $cont_ containing block = full physical page (position: absolute) or page inside margins (position: fixed) + // $bbox_ Bounding box is the <div> which is positioned absolutely/fixed + // top/left/right/bottom/width/height/background*/border*/padding*/margin* are taken from bounding + // font*[family/size/style/weight]/line-height/text*[align/decoration/transform/indent]/color are transferred to $inner + // as an enclosing <div> (after having checked ID/CLASS) + // $x, $y, $w, $h are inside of $bbox_ = containing box for $inner_ + // $inner_ InnerHTML is the contents of that block to be output + $tag = $bounding[0]; + $attr = $bounding[1]; + $orig_x0 = $bounding[2]; + $orig_y0 = $bounding[3]; + + // As in WriteHTML() initialising + $this->blklvl = 0; + $this->lastblocklevelchange = 0; + $this->blk = array(); + $this->initialiseBlock($this->blk[0]); + + $this->blk[0]['width'] =& $this->pgwidth; + $this->blk[0]['inner_width'] =& $this->pgwidth; + + $this->blk[0]['blockContext'] = $this->blockContext; + + $properties = $this->cssmgr->MergeCSS('BLOCK','BODY',''); + $this->setCSS($properties,'','BODY'); + $this->blklvl = 1; + $this->initialiseBlock($this->blk[1]); + $this->blk[1]['tag'] = $tag; + $this->blk[1]['attr'] = $attr; + $this->Reset(); + $p = $this->cssmgr->MergeCSS('BLOCK',$tag,$attr); + if (isset($p['ROTATE']) && ($p['ROTATE']==90 || $p['ROTATE']==-90)) { $rotate = $p['ROTATE']; } + else { $rotate = 0; } + if (isset($p['OVERFLOW'])) { $overflow = strtolower($p['OVERFLOW']); } + if (strtolower($p['POSITION']) == 'fixed') { + $cont_w = $this->pgwidth; // $this->blk[0]['inner_width']; + $cont_h = $this->h - $this->tMargin - $this->bMargin; + $cont_x = $this->lMargin; + $cont_y = $this->tMargin; + } + else { + $cont_w = $this->w; // ABSOLUTE; + $cont_h = $this->h; + $cont_x = 0; + $cont_y = 0; + } + + // Pass on in-line properties to the innerhtml + $css = ''; + if (isset($p['TEXT-ALIGN'])) { $css .= 'text-align: '.strtolower($p['TEXT-ALIGN']).'; '; } + if (isset($p['TEXT-TRANSFORM'])) { $css .= 'text-transform: '.strtolower($p['TEXT-TRANSFORM']).'; '; } + if (isset($p['TEXT-INDENT'])) { $css .= 'text-indent: '.strtolower($p['TEXT-INDENT']).'; '; } + if (isset($p['TEXT-DECORATION'])) { $css .= 'text-decoration: '.strtolower($p['TEXT-DECORATION']).'; '; } + if (isset($p['FONT-FAMILY'])) { $css .= 'font-family: '.strtolower($p['FONT-FAMILY']).'; '; } + if (isset($p['FONT-STYLE'])) { $css .= 'font-style: '.strtolower($p['FONT-STYLE']).'; '; } + if (isset($p['FONT-WEIGHT'])) { $css .= 'font-weight: '.strtolower($p['FONT-WEIGHT']).'; '; } + if (isset($p['FONT-SIZE'])) { $css .= 'font-size: '.strtolower($p['FONT-SIZE']).'; '; } + if (isset($p['LINE-HEIGHT'])) { $css .= 'line-height: '.strtolower($p['LINE-HEIGHT']).'; '; } + if (isset($p['TEXT-SHADOW'])) { $css .= 'text-shadow: '.strtolower($p['TEXT-SHADOW']).'; '; } + if (isset($p['LETTER-SPACING'])) { $css .= 'letter-spacing: '.strtolower($p['LETTER-SPACING']).'; '; } + if (isset($p['FONT-VARIANT'])) { $css .= 'font-variant: '.strtolower($p['FONT-VARIANT']).'; '; } + if (isset($p['COLOR'])) { $css .= 'color: '.strtolower($p['COLOR']).'; '; } + if (isset($p['Z-INDEX'])) { $css .= 'z-index: '.$p['Z-INDEX'].'; '; } // mPDF 5.6.01 + if ($css) { + $html = '<div style="'.$css.'">'.$html.'</div>'; + } + // Copy over (only) the properties to set for border and background + $pb = array(); + $pb['MARGIN-TOP'] = $p['MARGIN-TOP']; + $pb['MARGIN-RIGHT'] = $p['MARGIN-RIGHT']; + $pb['MARGIN-BOTTOM'] = $p['MARGIN-BOTTOM']; + $pb['MARGIN-LEFT'] = $p['MARGIN-LEFT']; + $pb['PADDING-TOP'] = $p['PADDING-TOP']; + $pb['PADDING-RIGHT'] = $p['PADDING-RIGHT']; + $pb['PADDING-BOTTOM'] = $p['PADDING-BOTTOM']; + $pb['PADDING-LEFT'] = $p['PADDING-LEFT']; + $pb['BORDER-TOP'] = $p['BORDER-TOP']; + $pb['BORDER-RIGHT'] = $p['BORDER-RIGHT']; + $pb['BORDER-BOTTOM'] = $p['BORDER-BOTTOM']; + $pb['BORDER-LEFT'] = $p['BORDER-LEFT']; + $pb['BORDER-TOP-LEFT-RADIUS-H'] = $p['BORDER-TOP-LEFT-RADIUS-H']; + $pb['BORDER-TOP-LEFT-RADIUS-V'] = $p['BORDER-TOP-LEFT-RADIUS-V']; + $pb['BORDER-TOP-RIGHT-RADIUS-H'] = $p['BORDER-TOP-RIGHT-RADIUS-H']; + $pb['BORDER-TOP-RIGHT-RADIUS-V'] = $p['BORDER-TOP-RIGHT-RADIUS-V']; + $pb['BORDER-BOTTOM-LEFT-RADIUS-H'] = $p['BORDER-BOTTOM-LEFT-RADIUS-H']; + $pb['BORDER-BOTTOM-LEFT-RADIUS-V'] = $p['BORDER-BOTTOM-LEFT-RADIUS-V']; + $pb['BORDER-BOTTOM-RIGHT-RADIUS-H'] = $p['BORDER-BOTTOM-RIGHT-RADIUS-H']; + $pb['BORDER-BOTTOM-RIGHT-RADIUS-V'] = $p['BORDER-BOTTOM-RIGHT-RADIUS-V']; + if (isset($p['BACKGROUND-COLOR'])) { $pb['BACKGROUND-COLOR'] = $p['BACKGROUND-COLOR']; } + if (isset($p['BOX-SHADOW'])) { $pb['BOX-SHADOW'] = $p['BOX-SHADOW']; } +/*-- BACKGROUNDS --*/ + if (isset($p['BACKGROUND-IMAGE'])) { $pb['BACKGROUND-IMAGE'] = $p['BACKGROUND-IMAGE']; } + if (isset($p['BACKGROUND-IMAGE-RESIZE'])) { $pb['BACKGROUND-IMAGE-RESIZE'] = $p['BACKGROUND-IMAGE-RESIZE']; } + if (isset($p['BACKGROUND-IMAGE-OPACITY'])) { $pb['BACKGROUND-IMAGE-OPACITY'] = $p['BACKGROUND-IMAGE-OPACITY']; } + if (isset($p['BACKGROUND-REPEAT'])) { $pb['BACKGROUND-REPEAT'] = $p['BACKGROUND-REPEAT']; } + if (isset($p['BACKGROUND-POSITION'])) { $pb['BACKGROUND-POSITION'] = $p['BACKGROUND-POSITION']; } + if (isset($p['BACKGROUND-GRADIENT'])) { $pb['BACKGROUND-GRADIENT'] = $p['BACKGROUND-GRADIENT']; } + if (isset($p['BACKGROUND-SIZE'])) { $pb['BACKGROUND-SIZE'] = $p['BACKGROUND-SIZE']; } // mPDF 5.6.12 + if (isset($p['BACKGROUND-ORIGIN'])) { $pb['BACKGROUND-ORIGIN'] = $p['BACKGROUND-ORIGIN']; } // mPDF 5.6.12 + if (isset($p['BACKGROUND-CLIP'])) { $pb['BACKGROUND-CLIP'] = $p['BACKGROUND-CLIP']; } // mPDF 5.6.12 + +/*-- END BACKGROUNDS --*/ + + $this->setCSS($pb,'BLOCK',$tag); + + //================================================================ + $bbox_br = $this->blk[1]['border_right']['w']; + $bbox_bl = $this->blk[1]['border_left']['w']; + $bbox_bt = $this->blk[1]['border_top']['w']; + $bbox_bb = $this->blk[1]['border_bottom']['w']; + $bbox_pr = $this->blk[1]['padding_right']; + $bbox_pl = $this->blk[1]['padding_left']; + $bbox_pt = $this->blk[1]['padding_top']; + $bbox_pb = $this->blk[1]['padding_bottom']; + $bbox_mr = $this->blk[1]['margin_right']; + if (strtolower($p['MARGIN-RIGHT'])=='auto') { $bbox_mr = 'auto'; } + $bbox_ml = $this->blk[1]['margin_left']; + if (strtolower($p['MARGIN-LEFT'])=='auto') { $bbox_ml = 'auto'; } + $bbox_mt = $this->blk[1]['margin_top']; + if (strtolower($p['MARGIN-TOP'])=='auto') { $bbox_mt = 'auto'; } + $bbox_mb = $this->blk[1]['margin_bottom']; + if (strtolower($p['MARGIN-BOTTOM'])=='auto') { $bbox_mb = 'auto'; } + if (isset($p['LEFT']) && strtolower($p['LEFT'])!='auto') { $bbox_left = $this->ConvertSize($p['LEFT'], $cont_w, $this->FontSize,false); } + else { $bbox_left = 'auto'; } + if (isset($p['TOP']) && strtolower($p['TOP'])!='auto') { $bbox_top = $this->ConvertSize($p['TOP'], $cont_h, $this->FontSize,false); } + else { $bbox_top = 'auto'; } + if (isset($p['RIGHT']) && strtolower($p['RIGHT'])!='auto') { $bbox_right = $this->ConvertSize($p['RIGHT'], $cont_w, $this->FontSize,false); } + else { $bbox_right = 'auto'; } + if (isset($p['BOTTOM']) && strtolower($p['BOTTOM'])!='auto') { $bbox_bottom = $this->ConvertSize($p['BOTTOM'], $cont_h, $this->FontSize,false); } + else { $bbox_bottom = 'auto'; } + if (isset($p['WIDTH']) && strtolower($p['WIDTH'])!='auto') { $inner_w = $this->ConvertSize($p['WIDTH'], $cont_w, $this->FontSize,false); } + else { $inner_w = 'auto'; } + if (isset($p['HEIGHT']) && strtolower($p['HEIGHT'])!='auto') { $inner_h = $this->ConvertSize($p['HEIGHT'], $cont_h, $this->FontSize,false); } + else { $inner_h = 'auto'; } + + // If bottom or right pos are set and not left / top - save this to adjust rotated block later + if ($rotate) { + if ($bbox_left === 'auto' && $bbox_right !== 'auto') { $rot_rpos = $bbox_right; } + else { $rot_rpos = false; } + if ($bbox_top === 'auto' && $bbox_bottom !== 'auto') { $rot_bpos = $bbox_bottom; } + else { $rot_bpos = false; } + } + + //================================================================ + if ($checkinnerhtml=='' && $inner_h==='auto') { $inner_h = 0.0001; } + if ($checkinnerhtml=='' && $inner_w==='auto') { $inner_w = 2*$this->GetCharWidth('W',false); } + //================================================================ + // Algorithm from CSS2.1 See http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-height + // mPD 5.3.14 + // Special case (not CSS) if all not specified, centre vertically on page + if ($bbox_top==='auto' && $inner_h==='auto' && $bbox_bottom==='auto' && $bbox_mt==='auto' && $bbox_mb==='auto') { + $bbox_top_orig = $bbox_top; + if ($bbox_mt==='auto') { $bbox_mt = 0; } + if ($bbox_mb==='auto') { $bbox_mb = 0; } + $bbox_top = $orig_y0 - $bbox_mt - $cont_y; + // solve for $bbox_bottom when content_h known - $inner_h=='auto' && $bbox_bottom=='auto' + } + // mPD 5.3.14 + else if ($bbox_top==='auto' && $inner_h==='auto' && $bbox_bottom==='auto') { + $bbox_top_orig = $bbox_top = $orig_y0 - $cont_y; + if ($bbox_mt==='auto') { $bbox_mt = 0; } + if ($bbox_mb==='auto') { $bbox_mb = 0; } + // solve for $bbox_bottom when content_h known - $inner_h=='auto' && $bbox_bottom=='auto' + } + else if ($bbox_top!=='auto' && $inner_h!=='auto' && $bbox_bottom!=='auto') { + if ($bbox_mt==='auto' && $bbox_mb==='auto') { + $x = $cont_h - $bbox_top - $bbox_bt - $bbox_pt - $inner_h - $bbox_pb - $bbox_bb - $bbox_bottom; + $bbox_mt = $bbox_mb = ($x/2); + } + else if ($bbox_mt==='auto') { + $bbox_mt = $cont_h - $bbox_top - $bbox_bt - $bbox_pt - $inner_h - $bbox_pb - $bbox_bb - $bbox_mb - $bbox_bottom; + } + else if ($bbox_mb==='auto') { + $bbox_mb = $cont_h - $bbox_top - $bbox_mt - $bbox_bt - $bbox_pt - $inner_h - $bbox_pb - $bbox_bb - $bbox_bottom; + } + else { + $bbox_bottom = $cont_h - $bbox_top - $bbox_mt - $bbox_bt - $bbox_pt - $inner_h - $bbox_pb - $bbox_bb - $bbox_mt; + } + } + else { + if ($bbox_mt==='auto') { $bbox_mt = 0; } + if ($bbox_mb==='auto') { $bbox_mb = 0; } + if ($bbox_top==='auto' && $inner_h==='auto' && $bbox_bottom!=='auto') { + // solve for $bbox_top when content_h known - $inner_h=='auto' && $bbox_top =='auto' + } + else if ($bbox_top==='auto' && $bbox_bottom==='auto' && $inner_h!=='auto') { + $bbox_top = $orig_y0 - $bbox_mt - $cont_y; + $bbox_bottom = $cont_h - $bbox_top - $bbox_mt - $bbox_bt - $bbox_pt - $inner_h - $bbox_pb - $bbox_bb - $bbox_mt; + } + else if ($inner_h==='auto' && $bbox_bottom==='auto' && $bbox_top!=='auto') { + // solve for $bbox_bottom when content_h known - $inner_h=='auto' && $bbox_bottom=='auto' + } + else if ($bbox_top==='auto' && $inner_h!=='auto' && $bbox_bottom!=='auto') { + $bbox_top = $cont_h - $bbox_mt - $bbox_bt - $bbox_pt - $inner_h - $bbox_pb - $bbox_bb - $bbox_mt - $bbox_bottom; + } + else if ($inner_h==='auto' && $bbox_top!=='auto' && $bbox_bottom!=='auto') { + $inner_h = $cont_h - $bbox_top - $bbox_mt - $bbox_bt - $bbox_pt - $bbox_pb - $bbox_bb - $bbox_mt - $bbox_bottom; + } + else if ($bbox_bottom==='auto' && $bbox_top!=='auto' && $inner_h!=='auto') { + $bbox_bottom = $cont_h - $bbox_top - $bbox_mt - $bbox_bt - $bbox_pt - $inner_h - $bbox_pb - $bbox_bb - $bbox_mt; + } + } + + // THEN DO SAME FOR WIDTH + // http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width + if ($bbox_left==='auto' && $inner_w==='auto' && $bbox_right==='auto') { + if ($bbox_ml==='auto') { $bbox_ml = 0; } + if ($bbox_mr==='auto') { $bbox_mr = 0; } + // IF containing element RTL, should set $bbox_right + $bbox_left = $orig_x0 - $bbox_ml - $cont_x; + // solve for $bbox_right when content_w known - $inner_w=='auto' && $bbox_right=='auto' + } + else if ($bbox_left!=='auto' && $inner_w!=='auto' && $bbox_right!=='auto') { + if ($bbox_ml==='auto' && $bbox_mr==='auto') { + $x = $cont_w - $bbox_left - $bbox_bl - $bbox_pl - $inner_w - $bbox_pr - $bbox_br - $bbox_right; + $bbox_ml = $bbox_mr = ($x/2); + } + else if ($bbox_ml==='auto') { + $bbox_ml = $cont_w - $bbox_left - $bbox_bl - $bbox_pl - $inner_w - $bbox_pr - $bbox_br - $bbox_mr - $bbox_right; + } + else if ($bbox_mr==='auto') { + $bbox_mr = $cont_w - $bbox_left - $bbox_ml - $bbox_bl - $bbox_pl - $inner_w - $bbox_pr - $bbox_br - $bbox_right; + } + else { + $bbox_right = $cont_w - $bbox_left - $bbox_ml - $bbox_bl - $bbox_pl - $inner_w - $bbox_pr - $bbox_br - $bbox_ml; + } + } + else { + if ($bbox_ml==='auto') { $bbox_ml = 0; } + if ($bbox_mr==='auto') { $bbox_mr = 0; } + if ($bbox_left==='auto' && $inner_w==='auto' && $bbox_right!=='auto') { + // solve for $bbox_left when content_w known - $inner_w=='auto' && $bbox_left =='auto' + } + else if ($bbox_left==='auto' && $bbox_right==='auto' && $inner_w!=='auto') { + // IF containing element RTL, should set $bbox_right + $bbox_left = $orig_x0 - $bbox_ml - $cont_x; + $bbox_right = $cont_w - $bbox_left - $bbox_ml - $bbox_bl - $bbox_pl - $inner_w - $bbox_pr - $bbox_br - $bbox_ml; + } + else if ($inner_w==='auto' && $bbox_right==='auto' && $bbox_left!=='auto') { + // solve for $bbox_right when content_w known - $inner_w=='auto' && $bbox_right=='auto' + } + else if ($bbox_left==='auto' && $inner_w!=='auto' && $bbox_right!=='auto') { + $bbox_left = $cont_w - $bbox_ml - $bbox_bl - $bbox_pl - $inner_w - $bbox_pr - $bbox_br - $bbox_ml - $bbox_right; + } + else if ($inner_w==='auto' && $bbox_left!=='auto' && $bbox_right!=='auto') { + $inner_w = $cont_w - $bbox_left - $bbox_ml - $bbox_bl - $bbox_pl - $bbox_pr - $bbox_br - $bbox_ml - $bbox_right; + } + else if ($bbox_right==='auto' && $bbox_left!=='auto' && $inner_w!=='auto') { + $bbox_right = $cont_w - $bbox_left - $bbox_ml - $bbox_bl - $bbox_pl - $inner_w - $bbox_pr - $bbox_br - $bbox_ml; + } + } + + //================================================================ + //================================================================ +/*-- BACKGROUNDS --*/ + if (isset($pb['BACKGROUND-IMAGE']) && $pb['BACKGROUND-IMAGE']) { + $ret = $this->SetBackground($pb, $this->blk[1]['inner_width']); + if ($ret) { $this->blk[1]['background-image'] = $ret; } + } +/*-- END BACKGROUNDS --*/ + + //================================================================ + $y = $cont_y + $bbox_top + $bbox_mt + $bbox_bt + $bbox_pt; + $h = $cont_h - $bbox_top - $bbox_mt - $bbox_bt - $bbox_pt - $bbox_pb - $bbox_bb - $bbox_mb - $bbox_bottom; + $x = $cont_x + $bbox_left + $bbox_ml + $bbox_bl + $bbox_pl; + $w = $cont_w - $bbox_left - $bbox_ml - $bbox_bl - $bbox_pl - $bbox_pr - $bbox_br - $bbox_mr - $bbox_right; + // Set (temporary) values for x y w h to do first paint, if values are auto + if ($inner_h==='auto' && $bbox_top==='auto') { + $y = $cont_y + $bbox_mt + $bbox_bt + $bbox_pt; + $h = $cont_h - ($bbox_bottom + $bbox_mt + $bbox_mb + $bbox_bt + $bbox_bb + $bbox_pt + $bbox_pb); + } + else if ($inner_h==='auto' && $bbox_bottom==='auto') { + $y = $cont_y + $bbox_top + $bbox_mt + $bbox_bt + $bbox_pt; + $h = $cont_h - ($bbox_top + $bbox_mt + $bbox_mb + $bbox_bt + $bbox_bb + $bbox_pt + $bbox_pb); + } + if ($inner_w==='auto' && $bbox_left==='auto') { + $x = $cont_x + $bbox_ml + $bbox_bl + $bbox_pl; + $w = $cont_w - ($bbox_right + $bbox_ml + $bbox_mr + $bbox_bl + $bbox_br + $bbox_pl + $bbox_pr); + } + else if ($inner_w==='auto' && $bbox_right==='auto') { + $x = $cont_x + $bbox_left + $bbox_ml + $bbox_bl + $bbox_pl; + $w = $cont_w - ($bbox_left + $bbox_ml + $bbox_mr + $bbox_bl + $bbox_br + $bbox_pl + $bbox_pr); + } + $bbox_y = $cont_y + $bbox_top + $bbox_mt; + $bbox_x = $cont_x + $bbox_left + $bbox_ml; + $saved_block1 = $this->blk[1]; + unset($p); + unset($pb); + //================================================================ + if ($inner_w==='auto') { // do a first write + $this->lMargin=$x; + $this->rMargin=$this->w - $w - $x; + // SET POSITION & FONT VALUES + $this->pgwidth = $this->w - $this->lMargin - $this->rMargin; + $this->pageoutput[$this->page]=array(); + $this->x = $x; + $this->y = $y; + $this->HTMLheaderPageLinks = array(); + $this->HTMLheaderPageAnnots = array(); + $this->HTMLheaderPageForms = array(); + $this->pageBackgrounds = array(); + $this->maxPosR = 0; + $this->maxPosL = $this->w; // For RTL + $this->WriteHTML($html , 4); + $inner_w = $this->maxPosR - $this->lMargin; + if ($bbox_right==='auto') { + $bbox_right = $cont_w - $bbox_left - $bbox_ml - $bbox_bl - $bbox_pl - $inner_w - $bbox_pr - $bbox_br - $bbox_ml; + } + else if ($bbox_left==='auto') { + $bbox_left = $cont_w - $bbox_ml - $bbox_bl - $bbox_pl - $inner_w - $bbox_pr - $bbox_br - $bbox_ml - $bbox_right; + $bbox_x = $cont_x + $bbox_left + $bbox_ml ; + $inner_x = $bbox_x + $bbox_bl + $bbox_pl; + $x = $inner_x; + } + $w = $inner_w; + $bbox_y = $cont_y + $bbox_top + $bbox_mt; + $bbox_x = $cont_x + $bbox_left + $bbox_ml; + } + + if ($inner_h==='auto') { // do a first write + $this->lMargin=$x; + $this->rMargin=$this->w - $w - $x; + // SET POSITION & FONT VALUES + $this->pgwidth = $this->w - $this->lMargin - $this->rMargin; + $this->pageoutput[$this->page]=array(); + $this->x = $x; + $this->y = $y; + $this->HTMLheaderPageLinks = array(); + $this->HTMLheaderPageAnnots = array(); + $this->HTMLheaderPageForms = array(); + $this->pageBackgrounds = array(); + $this->WriteHTML($html , 4); + $inner_h = $this->y - $y; + if ($overflow!='hidden' && $overflow!='visible') { // constrained + if (($this->y + $bbox_pb + $bbox_bb) > ($cont_y + $cont_h)) { + $adj = ($this->y + $bbox_pb + $bbox_bb) - ($cont_y + $cont_h); + $inner_h -= $adj; + } + } + if ($bbox_bottom==='auto' && $bbox_top_orig==='auto') { + $bbox_bottom = $bbox_top = ($cont_h - $bbox_mt - $bbox_bt - $bbox_pt - $inner_h - $bbox_pb - $bbox_bb - $bbox_mb)/2; + if ($overflow!='hidden' && $overflow!='visible') { // constrained + if ($bbox_top < 0) { + $bbox_top = 0; + $inner_h = $cont_h - $bbox_top - $bbox_mt - $bbox_bt - $bbox_pt - $bbox_pb - $bbox_bb - $bbox_mb - $bbox_bottom; + } + } + $bbox_y = $cont_y + $bbox_top + $bbox_mt; + $inner_y = $bbox_y + $bbox_bt + $bbox_pt; + $y = $inner_y; + + } + else if ($bbox_bottom==='auto') { + $bbox_bottom = $cont_h - $bbox_top - $bbox_mt - $bbox_bt - $bbox_pt - $inner_h - $bbox_pb - $bbox_bb - $bbox_mb; + } + else if ($bbox_top==='auto') { + $bbox_top = $cont_h - $bbox_mt - $bbox_bt - $bbox_pt - $inner_h - $bbox_pb - $bbox_bb - $bbox_mb - $bbox_bottom; + if ($overflow!='hidden' && $overflow!='visible') { // constrained + if ($bbox_top < 0) { + $bbox_top = 0; + $inner_h = $cont_h - $bbox_top - $bbox_mt - $bbox_bt - $bbox_pt - $bbox_pb - $bbox_bb - $bbox_mb - $bbox_bottom; + } + } + $bbox_y = $cont_y + $bbox_top + $bbox_mt; + $inner_y = $bbox_y + $bbox_bt + $bbox_pt; + $y = $inner_y; + } + $h = $inner_h; + $bbox_y = $cont_y + $bbox_top + $bbox_mt; + $bbox_x = $cont_x + $bbox_left + $bbox_ml; + } + $inner_w = $w; + $inner_h = $h; + + } + $this->lMargin=$x; + $this->rMargin=$this->w - $w - $x; + // SET POSITION & FONT VALUES + $this->pgwidth = $this->w - $this->lMargin - $this->rMargin; + $this->pageoutput[$this->page]=array(); + $this->x = $x; + $this->y = $y; + $this->HTMLheaderPageLinks = array(); + $this->HTMLheaderPageAnnots = array(); + $this->HTMLheaderPageForms = array(); + $this->pageBackgrounds = array(); + $this->WriteHTML($html , 4); // parameter 4 saves output to $this->headerbuffer + $actual_h = $this->y - $y; + $use_w = $w; + $use_h = $h; + $ratio = $actual_h / $use_w; + + if ($overflow!='hidden' && $overflow!='visible') { + $target = $h/$w; + if (($ratio / $target ) > 1) { + $nl = CEIL($actual_h / $this->lineheight); + $l = $use_w * $nl; + $est_w = sqrt(($l * $this->lineheight) / $target) * 0.8; + $use_w += ($est_w - $use_w) - ($w/100); + } + $bpcstart = ($ratio / $target); + $bpcctr = 1; + while(($ratio / $target ) > 1) { + + if ($this->progressBar) { $this->UpdateProgressBar(4,intval(100/($ratio/$target)),('Auto-sizing fixed-position block: '.$bpcctr++)); } // *PROGRESS-BAR* + + $this->x = $x; + $this->y = $y; + + if (($ratio / $target) > 1.5 || ($ratio / $target) < 0.6) { + $use_w += ($w/$this->incrementFPR1); + } + else if (($ratio / $target) > 1.2 || ($ratio / $target) < 0.85) { + $use_w += ($w/$this->incrementFPR2); + } + else if (($ratio / $target) > 1.1 || ($ratio / $target) < 0.91) { + $use_w += ($w/$this->incrementFPR3); + } + else { + $use_w += ($w/$this->incrementFPR4); + } + + $use_h = $use_w * $target ; + $this->rMargin=$this->w - $use_w - $x; + $this->pgwidth = $this->w - $this->lMargin - $this->rMargin; + $this->HTMLheaderPageLinks = array(); + $this->HTMLheaderPageAnnots = array(); + $this->HTMLheaderPageForms = array(); + $this->pageBackgrounds = array(); + $this->WriteHTML($html , 4); // parameter 4 saves output to $this->headerbuffer + $actual_h = $this->y - $y; + $ratio = $actual_h / $use_w; + } + if ($this->progressBar) { $this->UpdateProgressBar(4,'100',' '); } // *PROGRESS-BAR* + } + $shrink_f = $w/$use_w; + + //================================================================ + + $this->pages[$this->page] .= '___BEFORE_BORDERS___'; + $block_s = $this->PrintPageBackgrounds(); // Save to print later inside clipping path + $this->pageBackgrounds = array(); + + //================================================================ + + if ($rotate) { + $prerotw = $bbox_bl + $bbox_pl + $inner_w + $bbox_pr + $bbox_br; + $preroth = $bbox_bt + $bbox_pt + $inner_h + $bbox_pb + $bbox_bb; + $rot_start = " q\n"; + if ($rotate == 90) { + if ($rot_rpos !== false) { $adjw = $prerotw; } // width before rotation + else { $adjw = $preroth; } // height before rotation + if ($rot_bpos !== false) { $adjh = -$prerotw + $preroth; } + else { $adjh = 0; } + } + else { + if ($rot_rpos !== false) { $adjw = $prerotw - $preroth; } + else { $adjw = 0; } + if ($rot_bpos !== false) { $adjh = $preroth; } // height before rotation + else { $adjh = $prerotw; } // width before rotation + } + $rot_start .= $this->transformTranslate($adjw, $adjh, true)."\n"; + $rot_start .= $this->transformRotate($rotate, $bbox_x, $bbox_y, true)."\n"; + $rot_end = " Q\n"; + } + else { + $rot_start = ''; + $rot_end = ''; + } + + //================================================================ + if (!empty($bounding)) { + // WHEN HEIGHT // BOTTOM EDGE IS KNOWN and $this->y is set to the bottom + // Re-instate saved $this->blk[1] + $this->blk[1] = $saved_block1; + + // These are only needed when painting border/background + $this->blk[1]['width'] = $bbox_w = $cont_w - $bbox_left - $bbox_ml - $bbox_mr - $bbox_right; + $this->blk[1]['x0'] = $bbox_x; + $this->blk[1]['y0'] = $bbox_y; + $this->blk[1]['startpage'] = $this->page; + $this->blk[1]['y1'] = $bbox_y + $bbox_bt + $bbox_pt + $inner_h + $bbox_pb + $bbox_bb ; + $this->_out($rot_start); // mPDF 5.0 + $this->PaintDivBB('',0,1); // Prints borders and sets backgrounds in $this->pageBackgrounds + $this->_out($rot_end); + } + + $s = $this->PrintPageBackgrounds(); + $s = $rot_start.$s.$rot_end; + $this->pages[$this->page] = preg_replace('/___BEFORE_BORDERS___/', "\n".$s."\n", $this->pages[$this->page]); + $this->pageBackgrounds = array(); + + $this->_out($rot_start); + + // Clipping Output + if ($overflow=='hidden') { + //Bounding rectangle to clip + $clip_y1 = $this->y; + if (!empty($bounding) && ($this->y + $bbox_pb + $bbox_bb) > ($bbox_y + $bbox_bt + $bbox_pt + $inner_h + $bbox_pb + $bbox_bb )) { + $clip_y1 = ($bbox_y + $bbox_bt + $bbox_pt + $inner_h + $bbox_pb + $bbox_bb ) - ($bbox_pb + $bbox_bb); + } + //$op = 'W* n'; // Clipping + $op = 'W n'; // Clipping alternative mode + $this->_out("q"); + $ch = $clip_y1 - $y; + $this->_out(sprintf('%.3F %.3F %.3F %.3F re %s',$x*_MPDFK,($this->h-$y)*_MPDFK,$w*_MPDFK,-$ch*_MPDFK,$op)); + if (!empty($block_s)) { + $tmp = "q\n".sprintf('%.3F %.3F %.3F %.3F re %s',$x*_MPDFK,($this->h-$y)*_MPDFK,$w*_MPDFK,-$ch*_MPDFK,$op); + $tmp .= "\n".$block_s."\nQ"; + $block_s = $tmp ; + } + } + + + if (!empty($block_s)) { + if ($shrink_f != 1) { // i.e. autofit has resized the box + $tmp = "q\n".$this->transformScale(($shrink_f*100),($shrink_f*100), $x, $y, true); + $tmp .= "\n".$block_s."\nQ"; + $block_s = $tmp ; + } + $this->_out($block_s); + } + + + + if ($shrink_f != 1) { // i.e. autofit has resized the box + $this->StartTransform(); + $this->transformScale(($shrink_f*100),($shrink_f*100), $x, $y); + } + + $this->_out($this->headerbuffer); + + if ($shrink_f != 1) { // i.e. autofit has resized the box + $this->StopTransform(); + } + + if ($overflow=='hidden') { + //End clipping + $this->_out("Q"); + } + + $this->_out($rot_end); + + + // Page Links + foreach($this->HTMLheaderPageLinks AS $lk) { + if ($rotate) { + $tmp = $lk[2]; // Switch h - w + $lk[2] = $lk[3]; + $lk[3] = $tmp; + + $lx1 = (($lk[0]/_MPDFK)); + $ly1 = (($this->h-($lk[1]/_MPDFK))); + if ($rotate == 90) { + $adjx = -($lx1-$bbox_x) + ($preroth - ($ly1-$bbox_y)); + $adjy = -($ly1-$bbox_y) + ($lx1-$bbox_x); + $lk[2] = -$lk[2]; + } + else if ($rotate == -90) { + $adjx = -($lx1-$bbox_x) + ($ly1-$bbox_y); + $adjy = -($ly1-$bbox_y) - ($lx1-$bbox_x) + $prerotw; + $lk[3] = -$lk[3]; + } + if ($rot_rpos !== false) { $adjx += $prerotw - $preroth; } + if ($rot_bpos !== false) { $adjy += $preroth - $prerotw; } + $lx1 += $adjx; + $ly1 += $adjy; + + $lk[0] = $lx1*_MPDFK; + $lk[1] = ($this->h-$ly1)*_MPDFK; + } + if ($shrink_f != 1) { // i.e. autofit has resized the box + $lx1 = (($lk[0]/_MPDFK)-$x); + $lx2 = $x + ($lx1 * $shrink_f); + $lk[0] = $lx2*_MPDFK; + $ly1 = (($this->h-($lk[1]/_MPDFK))-$y); + $ly2 = $y + ($ly1 * $shrink_f); + $lk[1] = ($this->h-$ly2)*_MPDFK; + $lk[2] *= $shrink_f; // width + $lk[3] *= $shrink_f; // height + } + $this->PageLinks[$this->page][]=$lk; + } + + foreach($this->HTMLheaderPageForms AS $n=>$f) { + if ($shrink_f != 1) { // i.e. autofit has resized the box + $f['x'] = $x + (($f['x'] -$x) * $shrink_f); + $f['y'] = $y + (($f['y'] -$y) * $shrink_f); + $f['w'] *= $shrink_f; + $f['h'] *= $shrink_f; + $f['style']['fontsize'] *= $shrink_f; + } + $this->form->forms[$f['n']] = $f; + } + // Page Annotations + foreach($this->HTMLheaderPageAnnots AS $lk) { + if ($rotate) { + if ($rotate == 90) { + $adjx = -($lk['x']-$bbox_x) + ($preroth - ($lk['y']-$bbox_y)); + $adjy = -($lk['y']-$bbox_y) + ($lk['x']-$bbox_x); + } + else if ($rotate == -90) { + $adjx = -($lk['x']-$bbox_x) + ($lk['y']-$bbox_y); + $adjy = -($lk['y']-$bbox_y) - ($lk['x']-$bbox_x) + $prerotw; + } + if ($rot_rpos !== false) { $adjx += $prerotw - $preroth; } + if ($rot_bpos !== false) { $adjy += $preroth - $prerotw; } + $lk['x'] += $adjx; + $lk['y'] += $adjy; + } + if ($shrink_f != 1) { // i.e. autofit has resized the box + $lk['x'] = $x + (($lk['x']-$x) * $shrink_f); + $lk['y'] = $y + (($lk['y']-$y) * $shrink_f); + } + $this->PageAnnots[$this->page][]=$lk; + } + + // Restore + $this->headerbuffer = ''; + $this->HTMLheaderPageLinks = array(); + $this->HTMLheaderPageAnnots = array(); + $this->HTMLheaderPageForms = array(); + $this->pageBackgrounds = $save_bgs; + $this->writingHTMLheader = false; + + $this->writingHTMLfooter = false; + $this->fullImageHeight = false; + $this->ResetMargins(); + $this->pgwidth = $this->w - $this->lMargin - $this->rMargin; + $this->SetXY($save_x,$save_y) ; + $this->title2annots = $save_annots; // *ANNOTATIONS* + $this->InFooter = false; // turns back on autopagebreaks + $this->pageoutput[$this->page]=array(); + $this->pageoutput[$this->page]['Font']=''; +/*-- COLUMNS --*/ + if ($save_cols) { + $this->SetColumns($save_nbcol,$this->colvAlign,$this->ColGap); + } +/*-- END COLUMNS --*/ +} +/*-- END CSS-POSITION --*/ + + + +function initialiseBlock(&$blk) { + $blk['margin_top'] = 0; + $blk['margin_left'] = 0; + $blk['margin_bottom'] = 0; + $blk['margin_right'] = 0; + $blk['padding_top'] = 0; + $blk['padding_left'] = 0; + $blk['padding_bottom'] = 0; + $blk['padding_right'] = 0; + $blk['border_top']['w'] = 0; + $blk['border_left']['w'] = 0; + $blk['border_bottom']['w'] = 0; + $blk['border_right']['w'] = 0; + $blk['hide'] = false; + $blk['outer_left_margin'] = 0; + $blk['outer_right_margin'] = 0; + $blk['cascadeCSS'] = array(); + $blk['block-align'] = false; + $blk['bgcolor'] = false; + $blk['page_break_after_avoid'] = false; + $blk['keep_block_together'] = false; + $blk['float'] = false; + $blk['line_height'] = ''; + $blk['margin_collapse'] = false; +} + + +function border_details($bd) { + $prop = preg_split('/\s+/',trim($bd)); + + if (isset($this->blk[$this->blklvl]['inner_width'])) { $refw = $this->blk[$this->blklvl]['inner_width']; } + else if (isset($this->blk[$this->blklvl-1]['inner_width'])) { $refw = $this->blk[$this->blklvl-1]['inner_width']; } + else { $refw = $this->w; } + if ( count($prop) == 1 ) { + $bsize = $this->ConvertSize($prop[0],$refw,$this->FontSize,false); + if ($bsize > 0) { + return array('s' => 1, 'w' => $bsize, 'c' => $this->ConvertColor(0), 'style'=>'solid'); + } + else { return array('w' => 0, 's' => 0); } + } + + else if (count($prop) == 2 ) { + // 1px solid + if (in_array($prop[1],$this->borderstyles) || $prop[1] == 'none' || $prop[1] == 'hidden' ) { $prop[2] = ''; } + // solid #000000 + else if (in_array($prop[0],$this->borderstyles) || $prop[0] == 'none' || $prop[0] == 'hidden' ) { $prop[0] = ''; $prop[1] = $prop[0]; $prop[2] = $prop[1]; } + // 1px #000000 + else { $prop[1] = ''; $prop[2] = $prop[1]; } + } + else if ( count($prop) == 3 ) { + // Change #000000 1px solid to 1px solid #000000 (proper) + if (substr($prop[0],0,1) == '#') { $tmp = $prop[0]; $prop[0] = $prop[1]; $prop[1] = $prop[2]; $prop[2] = $tmp; } + // Change solid #000000 1px to 1px solid #000000 (proper) + else if (substr($prop[0],1,1) == '#') { $tmp = $prop[1]; $prop[0] = $prop[2]; $prop[1] = $prop[0]; $prop[2] = $tmp; } + // Change solid 1px #000000 to 1px solid #000000 (proper) + else if (in_array($prop[0],$this->borderstyles) || $prop[0] == 'none' || $prop[0] == 'hidden' ) { + $tmp = $prop[0]; $prop[0] = $prop[1]; $prop[1] = $tmp; + } + } + else { return array(); } + // Size + $bsize = $this->ConvertSize($prop[0],$refw,$this->FontSize,false); + //color + $coul = $this->ConvertColor($prop[2]); // returns array + // Style + $prop[1] = strtolower($prop[1]); + if (in_array($prop[1],$this->borderstyles) && $bsize > 0) { $on = 1; } + else if ($prop[1] == 'hidden') { $on = 1; $bsize = 0; $coul = ''; } + else if ($prop[1] == 'none') { $on = 0; $bsize = 0; $coul = ''; } + else { $on = 0; $bsize = 0; $coul = ''; $prop[1] = ''; } + return array('s' => $on, 'w' => $bsize, 'c' => $coul, 'style'=> $prop[1] ); +} + + + +/*-- END HTML-CSS --*/ + + +// Return either a number (factor) - based on current set fontsize (if % or em) - or exact lineheight (with 'mm' after it) +function fixLineheight($v) { + $lh = false; + if (preg_match('/^[0-9\.,]*$/',$v) && $v >= 0) { return ($v + 0); } + else if (strtoupper($v) == 'NORMAL') { + return $this->normalLineheight; + } + else { + $tlh = $this->ConvertSize($v,$this->FontSize,$this->FontSize,true); + if ($tlh) { return ($tlh.'mm'); } + } + return $this->normalLineheight; +} + + +/*-- BORDER-RADIUS --*/ +function _borderPadding($a, $b, &$px, &$py) { + // $px and py are padding long axis (x) and short axis (y) + $added = 0; // extra padding + + $x = $a-$px; + $y = $b-$py; + // Check if Falls within ellipse of border radius + if ( ( (($x+$added)*($x+$added))/($a*$a) + (($y+$added)*($y+$added))/($b*$b) ) <=1 ) { return false; } + + $t = atan2($y,$x); + + $newx = $b / sqrt((($b*$b)/($a*$a)) + ( tan($t) * tan($t) ) ); + $newy = $a / sqrt((($a*$a)/($b*$b)) + ( (1/tan($t)) * (1/tan($t)) ) ); + $px = max($px, $a - $newx + $added); + $py = max($py, $b - $newy + $added); +} +/*-- END BORDER-RADIUS --*/ + + + +/*-- HTML-CSS --*/ + + +/*-- CSS-PAGE --*/ +function SetPagedMediaCSS($name='', $first, $oddEven) { + if ($oddEven == 'E') { + if ($this->directionality=='rtl') { $side = 'R'; } + else { $side = 'L'; } + } + else { + if ($this->directionality=='rtl') { $side = 'L'; } + else { $side = 'R'; } + } + $name = strtoupper($name); + $p = array(); + $p['SIZE'] = 'AUTO'; + + // Uses mPDF original margins as default + $p['MARGIN-RIGHT'] = strval($this->orig_rMargin).'mm'; + $p['MARGIN-LEFT'] = strval($this->orig_lMargin).'mm'; + $p['MARGIN-TOP'] = strval($this->orig_tMargin).'mm'; + $p['MARGIN-BOTTOM'] = strval($this->orig_bMargin).'mm'; + $p['MARGIN-HEADER'] = strval($this->orig_hMargin).'mm'; + $p['MARGIN-FOOTER'] = strval($this->orig_fMargin).'mm'; + + // Basic page + selector + if (isset($this->cssmgr->CSS['@PAGE'])) { $zp = $this->cssmgr->CSS['@PAGE']; } + else { $zp = array(); } + if (is_array($zp) && !empty($zp)) { $p = array_merge($p,$zp); } + + if (isset($p['EVEN-HEADER-NAME']) && $oddEven=='E') { + $p['HEADER'] = $p['EVEN-HEADER-NAME']; unset($p['EVEN-HEADER-NAME']); + } + if (isset($p['ODD-HEADER-NAME']) && $oddEven!='E') { + $p['HEADER'] = $p['ODD-HEADER-NAME']; unset($p['ODD-HEADER-NAME']); + } + if (isset($p['EVEN-FOOTER-NAME']) && $oddEven=='E') { + $p['FOOTER'] = $p['EVEN-FOOTER-NAME']; unset($p['EVEN-FOOTER-NAME']); + } + if (isset($p['ODD-FOOTER-NAME']) && $oddEven!='E') { + $p['FOOTER'] = $p['ODD-FOOTER-NAME']; unset($p['ODD-FOOTER-NAME']); + } + + // If right/Odd page + if (isset($this->cssmgr->CSS['@PAGE>>PSEUDO>>RIGHT']) && $side=='R') { + $zp = $this->cssmgr->CSS['@PAGE>>PSEUDO>>RIGHT']; + } + else { $zp = array(); } + if (isset($zp['SIZE'])) { unset($zp['SIZE']); } + if (isset($zp['SHEET-SIZE'])) { unset($zp['SHEET-SIZE']); } + // Disallow margin-left or -right on :LEFT or :RIGHT + if (isset($zp['MARGIN-LEFT'])) { unset($zp['MARGIN-LEFT']); } + if (isset($zp['MARGIN-RIGHT'])) { unset($zp['MARGIN-RIGHT']); } + if (is_array($zp) && !empty($zp)) { $p = array_merge($p,$zp); } + + // If left/Even page + if (isset($this->cssmgr->CSS['@PAGE>>PSEUDO>>LEFT']) && $side=='L') { + $zp = $this->cssmgr->CSS['@PAGE>>PSEUDO>>LEFT']; + } + else { $zp = array(); } + if (isset($zp['SIZE'])) { unset($zp['SIZE']); } + if (isset($zp['SHEET-SIZE'])) { unset($zp['SHEET-SIZE']); } + // Disallow margin-left or -right on :LEFT or :RIGHT + if (isset($zp['MARGIN-LEFT'])) { unset($zp['MARGIN-LEFT']); } + if (isset($zp['MARGIN-RIGHT'])) { unset($zp['MARGIN-RIGHT']); } + if (is_array($zp) && !empty($zp)) { $p = array_merge($p,$zp); } + + // If first page + if (isset($this->cssmgr->CSS['@PAGE>>PSEUDO>>FIRST']) && $first) { $zp = $this->cssmgr->CSS['@PAGE>>PSEUDO>>FIRST']; } + else { $zp = array(); } + if (isset($zp['SIZE'])) { unset($zp['SIZE']); } + if (isset($zp['SHEET-SIZE'])) { unset($zp['SHEET-SIZE']); } + if (is_array($zp) && !empty($zp)) { $p = array_merge($p,$zp); } + + // If named page + if ($name) { + if (isset($this->cssmgr->CSS['@PAGE>>NAMED>>'.$name])) { $zp = $this->cssmgr->CSS['@PAGE>>NAMED>>'.$name]; } + else { $zp = array(); } + if (is_array($zp) && !empty($zp)) { $p = array_merge($p,$zp); } + + if (isset($p['EVEN-HEADER-NAME']) && $oddEven=='E') { + $p['HEADER'] = $p['EVEN-HEADER-NAME']; unset($p['EVEN-HEADER-NAME']); + } + if (isset($p['ODD-HEADER-NAME']) && $oddEven!='E') { + $p['HEADER'] = $p['ODD-HEADER-NAME']; unset($p['ODD-HEADER-NAME']); + } + if (isset($p['EVEN-FOOTER-NAME']) && $oddEven=='E') { + $p['FOOTER'] = $p['EVEN-FOOTER-NAME']; unset($p['EVEN-FOOTER-NAME']); + } + if (isset($p['ODD-FOOTER-NAME']) && $oddEven!='E') { + $p['FOOTER'] = $p['ODD-FOOTER-NAME']; unset($p['ODD-FOOTER-NAME']); + } + + // If named right/Odd page + if (isset($this->cssmgr->CSS['@PAGE>>NAMED>>'.$name.'>>PSEUDO>>RIGHT']) && $side=='R') { $zp = $this->cssmgr->CSS['@PAGE>>NAMED>>'.$name.'>>PSEUDO>>RIGHT']; } + else { $zp = array(); } + if (isset($zp['SIZE'])) { unset($zp['SIZE']); } + if (isset($zp['SHEET-SIZE'])) { unset($zp['SHEET-SIZE']); } + // Disallow margin-left or -right on :LEFT or :RIGHT + if (isset($zp['MARGIN-LEFT'])) { unset($zp['MARGIN-LEFT']); } + if (isset($zp['MARGIN-RIGHT'])) { unset($zp['MARGIN-RIGHT']); } + if (is_array($zp) && !empty($zp)) { $p = array_merge($p,$zp); } + + // If named left/Even page + if (isset($this->cssmgr->CSS['@PAGE>>NAMED>>'.$name.'>>PSEUDO>>LEFT']) && $side=='L') { $zp = $this->cssmgr->CSS['@PAGE>>NAMED>>'.$name.'>>PSEUDO>>LEFT']; } + else { $zp = array(); } + if (isset($zp['SIZE'])) { unset($zp['SIZE']); } + if (isset($zp['SHEET-SIZE'])) { unset($zp['SHEET-SIZE']); } + // Disallow margin-left or -right on :LEFT or :RIGHT + if (isset($zp['MARGIN-LEFT'])) { unset($zp['MARGIN-LEFT']); } + if (isset($zp['MARGIN-RIGHT'])) { unset($zp['MARGIN-RIGHT']); } + if (is_array($zp) && !empty($zp)) { $p = array_merge($p,$zp); } + + // If named first page + if (isset($this->cssmgr->CSS['@PAGE>>NAMED>>'.$name.'>>PSEUDO>>FIRST']) && $first) { $zp = $this->cssmgr->CSS['@PAGE>>NAMED>>'.$name.'>>PSEUDO>>FIRST']; } + else { $zp = array(); } + if (isset($zp['SIZE'])) { unset($zp['SIZE']); } + if (isset($zp['SHEET-SIZE'])) { unset($zp['SHEET-SIZE']); } + if (is_array($zp) && !empty($zp)) { $p = array_merge($p,$zp); } + } + + $orientation = $mgl = $mgr = $mgt = $mgb = $mgh = $mgf = ''; + $header = $footer = ''; + $resetpagenum = $pagenumstyle = $suppress = ''; + $marks = ''; + $bg = array(); + + $newformat = ''; + + + if (isset($p['SHEET-SIZE']) && is_array($p['SHEET-SIZE'])) { + $newformat = $p['SHEET-SIZE']; + if ($newformat[0] > $newformat[1]) { // landscape + $newformat = array_reverse($newformat); + $p['ORIENTATION'] = 'L'; + } + else { $p['ORIENTATION'] = 'P'; } + $this->_setPageSize($newformat, $p['ORIENTATION']); + } + + if (isset($p['SIZE']) && is_array($p['SIZE']) && !$newformat) { + if ($p['SIZE']['W'] > $p['SIZE']['H']) { $p['ORIENTATION'] = 'L'; } + else { $p['ORIENTATION'] = 'P'; } + } + if (is_array($p['SIZE'])) { + if ($p['SIZE']['W'] > $this->fw) { $p['SIZE']['W'] = $this->fw; } // mPD 4.2 use fw not fPt + if ($p['SIZE']['H'] > $this->fh) { $p['SIZE']['H'] = $this->fh; } + if (($p['ORIENTATION']==$this->DefOrientation && !$newformat) || ($newformat && $p['ORIENTATION']=='P')) { + $outer_width_LR = ($this->fw - $p['SIZE']['W'])/2; + $outer_width_TB = ($this->fh - $p['SIZE']['H'])/2; + } + else { + $outer_width_LR = ($this->fh - $p['SIZE']['W'])/2; + $outer_width_TB = ($this->fw - $p['SIZE']['H'])/2; + } + $pgw = $p['SIZE']['W']; + $pgh = $p['SIZE']['H']; + } + else { // AUTO LANDSCAPE PORTRAIT + $outer_width_LR = 0; + $outer_width_TB = 0; + if (!$newformat) { + if (strtoupper($p['SIZE']) == 'AUTO') { $p['ORIENTATION']=$this->DefOrientation; } + else if (strtoupper($p['SIZE']) == 'LANDSCAPE') { $p['ORIENTATION']='L'; } + else { $p['ORIENTATION']='P'; } + } + if (($p['ORIENTATION']==$this->DefOrientation && !$newformat) || ($newformat && $p['ORIENTATION']=='P')) { + $pgw = $this->fw; + $pgh = $this->fh; + } + else { + $pgw = $this->fh; + $pgh = $this->fw; + } + } + + if (isset($p['HEADER']) && $p['HEADER']) { $header = $p['HEADER']; } + if (isset($p['FOOTER']) && $p['FOOTER']) { $footer = $p['FOOTER']; } + if (isset($p['RESETPAGENUM']) && $p['RESETPAGENUM']) { $resetpagenum = $p['RESETPAGENUM']; } + if (isset($p['PAGENUMSTYLE']) && $p['PAGENUMSTYLE']) { $pagenumstyle = $p['PAGENUMSTYLE']; } + if (isset($p['SUPPRESS']) && $p['SUPPRESS']) { $suppress = $p['SUPPRESS']; } + + if (preg_match('/cross/i', $p['MARKS']) && preg_match('/crop/i', $p['MARKS'])) { $marks = 'CROPCROSS'; } + else if (strtoupper($p['MARKS']) == 'CROP') { $marks = 'CROP'; } + else if (strtoupper($p['MARKS']) == 'CROSS') { $marks = 'CROSS'; } + + + if (isset($p['BACKGROUND-COLOR']) && $p['BACKGROUND-COLOR']) { $bg['BACKGROUND-COLOR'] = $p['BACKGROUND-COLOR']; } +/*-- BACKGROUNDS --*/ + if (isset($p['BACKGROUND-GRADIENT']) && $p['BACKGROUND-GRADIENT']) { $bg['BACKGROUND-GRADIENT'] = $p['BACKGROUND-GRADIENT']; } + if (isset($p['BACKGROUND-IMAGE']) && $p['BACKGROUND-IMAGE']) { $bg['BACKGROUND-IMAGE'] = $p['BACKGROUND-IMAGE']; } + if (isset($p['BACKGROUND-REPEAT']) && $p['BACKGROUND-REPEAT']) { $bg['BACKGROUND-REPEAT'] = $p['BACKGROUND-REPEAT']; } + if (isset($p['BACKGROUND-POSITION']) && $p['BACKGROUND-POSITION']) { $bg['BACKGROUND-POSITION'] = $p['BACKGROUND-POSITION']; } + if (isset($p['BACKGROUND-IMAGE-RESIZE']) && $p['BACKGROUND-IMAGE-RESIZE']) { $bg['BACKGROUND-IMAGE-RESIZE'] = $p['BACKGROUND-IMAGE-RESIZE']; } + if (isset($p['BACKGROUND-IMAGE-OPACITY'])) { $bg['BACKGROUND-IMAGE-OPACITY'] = $p['BACKGROUND-IMAGE-OPACITY']; } +/*-- END BACKGROUNDS --*/ + + if (isset($p['MARGIN-LEFT'])) { $mgl = $this->ConvertSize($p['MARGIN-LEFT'],$pgw) + $outer_width_LR; } + if (isset($p['MARGIN-RIGHT'])) { $mgr = $this->ConvertSize($p['MARGIN-RIGHT'],$pgw) + $outer_width_LR; } + if (isset($p['MARGIN-BOTTOM'])) { $mgb = $this->ConvertSize($p['MARGIN-BOTTOM'],$pgh) + $outer_width_TB; } + if (isset($p['MARGIN-TOP'])) { $mgt = $this->ConvertSize($p['MARGIN-TOP'],$pgh) + $outer_width_TB; } + if (isset($p['MARGIN-HEADER'])) { $mgh = $this->ConvertSize($p['MARGIN-HEADER'],$pgh) + $outer_width_TB; } + if (isset($p['MARGIN-FOOTER'])) { $mgf = $this->ConvertSize($p['MARGIN-FOOTER'],$pgh) + $outer_width_TB; } + + if (isset($p['ORIENTATION']) && $p['ORIENTATION']) { $orientation = $p['ORIENTATION']; } + $this->page_box['outer_width_LR'] = $outer_width_LR; // Used in MARKS:crop etc. + $this->page_box['outer_width_TB'] = $outer_width_TB; + + return array($orientation,$mgl,$mgr,$mgt,$mgb,$mgh,$mgf,$header,$footer,$bg,$resetpagenum,$pagenumstyle,$suppress,$marks,$newformat); +} +/*-- END CSS-PAGE --*/ + + + +/*-- CSS-FLOAT --*/ +// Added mPDF 3.0 Float DIV - CLEAR +function ClearFloats($clear, $blklvl=0) { + list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->GetFloatDivInfo($blklvl,true); + $end = $currpos = ($this->page*1000 + $this->y); + if ($clear == 'BOTH' && ($l_exists || $r_exists)) { + $this->pageoutput[$this->page] = array(); + $end = max($l_max, $r_max, $currpos); + } + else if ($clear == 'RIGHT' && $r_exists) { + $this->pageoutput[$this->page] = array(); + $end = max($r_max, $currpos); + } + else if ($clear == 'LEFT' && $l_exists ) { + $this->pageoutput[$this->page] = array(); + $end = max($l_max, $currpos); + } + else { return; } + $old_page = $this->page; + $new_page = intval($end/1000); + if ($old_page != $new_page) { + $s = $this->PrintPageBackgrounds(); + // Writes after the marker so not overwritten later by page background etc. + $this->pages[$this->page] = preg_replace('/(___BACKGROUND___PATTERNS'.date('jY').')/', '\\1'."\n".$s."\n", $this->pages[$this->page]); + $this->pageBackgrounds = array(); + $this->page = $new_page; + } + $this->ResetMargins(); + $this->pageoutput[$this->page] = array(); + $this->y = (($end*1000) % 1000000)/1000; // mod changes operands to integers before processing +} + + +// Added mPDF 3.0 Float DIV +function GetFloatDivInfo($blklvl=0,$clear=false) { + // If blklvl specified, only returns floats at that level - for ClearFloats + $l_exists = false; + $r_exists = false; + $l_max = 0; + $r_max = 0; + $l_width = 0; + $r_width = 0; + if (count($this->floatDivs)) { + $currpos = ($this->page*1000 + $this->y); + foreach($this->floatDivs AS $f) { + if (($clear && $f['blockContext'] == $this->blk[$blklvl]['blockContext']) || (!$clear && $currpos >= $f['startpos'] && $currpos < ($f['endpos']-0.001) && $f['blklvl'] > $blklvl && $f['blockContext'] == $this->blk[$blklvl]['blockContext'])) { + if ($f['side']=='L') { + $l_exists= true; + $l_max = max($l_max, $f['endpos']); + $l_width = max($l_width , $f['w']); + } + if ($f['side']=='R') { + $r_exists= true; + $r_max = max($r_max, $f['endpos']); + $r_width = max($r_width , $f['w']); + } + } + } + } + return array($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width); +} +/*-- END CSS-FLOAT --*/ + + + + +function OpenTag($tag,$attr) +{ + + // What this gets: < $tag $attr['WIDTH']="90px" > does not get content here </closeTag here> + // Correct tags where HTML specifies optional end tags, + // and/or does not allow nesting e.g. P inside P, or + if ($this->allow_html_optional_endtags) { + if (($tag == 'P' || $tag == 'DIV' || $tag == 'H1' || $tag == 'H2' || $tag == 'H3' || $tag == 'H4' || $tag == 'H5' || $tag == 'H6' || $tag == 'UL' || $tag == 'OL' || $tag == 'TABLE' || $tag=='PRE' || $tag=='FORM' || $tag=='ADDRESS' || $tag=='BLOCKQUOTE' || $tag=='CENTER' || $tag=='DL' || $tag == 'HR' ) && $this->lastoptionaltag == 'P') { $this->CloseTag($this->lastoptionaltag ); } + if ($tag == 'DD' && $this->lastoptionaltag == 'DD') { $this->CloseTag($this->lastoptionaltag ); } + if ($tag == 'DD' && $this->lastoptionaltag == 'DT') { $this->CloseTag($this->lastoptionaltag ); } + if ($tag == 'DT' && $this->lastoptionaltag == 'DD') { $this->CloseTag($this->lastoptionaltag ); } + if ($tag == 'DT' && $this->lastoptionaltag == 'DT') { $this->CloseTag($this->lastoptionaltag ); } + if ($tag == 'LI' && $this->lastoptionaltag == 'LI') { $this->CloseTag($this->lastoptionaltag ); } + if (($tag == 'TD' || $tag == 'TH') && $this->lastoptionaltag == 'TD') { $this->CloseTag($this->lastoptionaltag ); } // *TABLES* + if (($tag == 'TD' || $tag == 'TH') && $this->lastoptionaltag == 'TH') { $this->CloseTag($this->lastoptionaltag ); } // *TABLES* + if ($tag == 'TR' && $this->lastoptionaltag == 'TR') { $this->CloseTag($this->lastoptionaltag ); } // *TABLES* + if ($tag == 'TR' && $this->lastoptionaltag == 'TD') { $this->CloseTag($this->lastoptionaltag ); $this->CloseTag('TR'); $this->CloseTag('THEAD'); } // *TABLES* + if ($tag == 'TR' && $this->lastoptionaltag == 'TH') { $this->CloseTag($this->lastoptionaltag ); $this->CloseTag('TR'); $this->CloseTag('THEAD'); } // *TABLES* + if ($tag == 'OPTION' && $this->lastoptionaltag == 'OPTION') { $this->CloseTag($this->lastoptionaltag ); } + } + + $align = array('left'=>'L','center'=>'C','right'=>'R','top'=>'T','text-top'=>'TT','middle'=>'M','baseline'=>'BS','bottom'=>'B','text-bottom'=>'TB','justify'=>'J'); + + $this->ignorefollowingspaces=false; + + //Opening tag + switch($tag){ + + case 'DOTTAB': + $objattr = array(); + $objattr['type'] = 'dottab'; + $dots=str_repeat('.', 3)." "; // minimum number of dots + $objattr['width'] = $this->GetStringWidth($dots); + $objattr['margin_top'] = 0; + $objattr['margin_bottom'] = 0; + $objattr['margin_left'] = 0; + $objattr['margin_right'] = 0; + $objattr['height'] = 0; + $objattr['colorarray'] = $this->colorarray; + $objattr['border_top']['w'] = 0; + $objattr['border_bottom']['w'] = 0; + $objattr['border_left']['w'] = 0; + $objattr['border_right']['w'] = 0; + + // mPDF 5.6.19 + $properties = $this->cssmgr->MergeCSS('INLINE',$tag,$attr); // mPDF 5.6.33 + if (isset($properties['OUTDENT'])) { // mPDF 5.6.33 + $objattr['outdent'] = $this->ConvertSize($properties['OUTDENT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + else if (isset($attr['OUTDENT'])) { + $objattr['outdent'] = $this->ConvertSize($attr['OUTDENT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + else { $objattr['outdent'] = 0; } + + $objattr['fontfamily'] = $this->FontFamily; + $objattr['fontsize'] = $this->FontSizePt; + + $e = "\xbb\xa4\xactype=dottab,objattr=".serialize($objattr)."\xbb\xa4\xac"; +/*-- TABLES --*/ + // Output it to buffers + if ($this->tableLevel) { + if (!isset($this->cell[$this->row][$this->col]['maxs'])) { + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + elseif($this->cell[$this->row][$this->col]['maxs'] < $this->cell[$this->row][$this->col]['s']) { + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + $this->cell[$this->row][$this->col]['s'] = 0 ;// reset + $this->_saveCellTextBuffer($e); + } + else { +/*-- END TABLES --*/ + $this->_saveTextBuffer($e); + } // *TABLES* + break; + + case 'PAGEHEADER': + case 'PAGEFOOTER': + $this->ignorefollowingspaces = true; + if ($attr['NAME']) { $pname = $attr['NAME']; } + else { $pname = '_default'; } + + if ($tag=='PAGEHEADER') { $p = &$this->pageheaders[$pname]; } + else { $p = &$this->pagefooters[$pname]; } + + $p['L']=array(); + $p['C']=array(); + $p['R']=array(); + $p['L']['font-style'] = ''; + $p['C']['font-style'] = ''; + $p['R']['font-style'] = ''; + + if (isset($attr['CONTENT-LEFT'])) { + $p['L']['content'] = $attr['CONTENT-LEFT']; + } + if (isset($attr['CONTENT-CENTER'])) { + $p['C']['content'] = $attr['CONTENT-CENTER']; + } + if (isset($attr['CONTENT-RIGHT'])) { + $p['R']['content'] = $attr['CONTENT-RIGHT']; + } + + if (isset($attr['HEADER-STYLE']) || isset($attr['FOOTER-STYLE'])) { // font-family,size,weight,style,color + if ($tag=='PAGEHEADER') { $properties = $this->cssmgr->readInlineCSS($attr['HEADER-STYLE']); } + else { $properties = $this->cssmgr->readInlineCSS($attr['FOOTER-STYLE']); } + if (isset($properties['FONT-FAMILY'])) { + $p['L']['font-family'] = $properties['FONT-FAMILY']; + $p['C']['font-family'] = $properties['FONT-FAMILY']; + $p['R']['font-family'] = $properties['FONT-FAMILY']; + } + if (isset($properties['FONT-SIZE'])) { + $p['L']['font-size'] = $this->ConvertSize($properties['FONT-SIZE']) * _MPDFK; + $p['C']['font-size'] = $this->ConvertSize($properties['FONT-SIZE']) * _MPDFK; + $p['R']['font-size'] = $this->ConvertSize($properties['FONT-SIZE']) * _MPDFK; + } + if (isset($properties['FONT-WEIGHT']) && $properties['FONT-WEIGHT']=='bold') { + $p['L']['font-style'] = 'B'; + $p['C']['font-style'] = 'B'; + $p['R']['font-style'] = 'B'; + } + if (isset($properties['FONT-STYLE']) && $properties['FONT-STYLE']=='italic') { + $p['L']['font-style'] .= 'I'; + $p['C']['font-style'] .= 'I'; + $p['R']['font-style'] .= 'I'; + } + if (isset($properties['COLOR'])) { + $p['L']['color'] = $properties['COLOR']; + $p['C']['color'] = $properties['COLOR']; + $p['R']['color'] = $properties['COLOR']; + } + } + if (isset($attr['HEADER-STYLE-LEFT']) || isset($attr['FOOTER-STYLE-LEFT'])) { + if ($tag=='PAGEHEADER') { $properties = $this->cssmgr->readInlineCSS($attr['HEADER-STYLE-LEFT']); } + else { $properties = $this->cssmgr->readInlineCSS($attr['FOOTER-STYLE-LEFT']); } + if (isset($properties['FONT-FAMILY'])) { $p['L']['font-family'] = $properties['FONT-FAMILY']; } + if (isset($properties['FONT-SIZE'])) { $p['L']['font-size'] = $this->ConvertSize($properties['FONT-SIZE']) * _MPDFK; } + if (isset($properties['FONT-WEIGHT']) && $properties['FONT-WEIGHT']=='bold') { $p['L']['font-style'] ='B'; } + if (isset($properties['FONT-STYLE']) && $properties['FONT-STYLE']=='italic') { $p['L']['font-style'] .='I'; } + if (isset($properties['COLOR'])) { $p['L']['color'] = $properties['COLOR']; } + } + if (isset($attr['HEADER-STYLE-CENTER']) || isset($attr['FOOTER-STYLE-CENTER'])) { + if ($tag=='PAGEHEADER') { $properties = $this->cssmgr->readInlineCSS($attr['HEADER-STYLE-CENTER']); } + else { $properties = $this->cssmgr->readInlineCSS($attr['FOOTER-STYLE-CENTER']); } + if (isset($properties['FONT-FAMILY'])) { $p['C']['font-family'] = $properties['FONT-FAMILY']; } + if (isset($properties['FONT-SIZE'])) { $p['C']['font-size'] = $this->ConvertSize($properties['FONT-SIZE']) * _MPDFK; } + if (isset($properties['FONT-WEIGHT']) && $properties['FONT-WEIGHT']=='bold') { $p['C']['font-style'] = 'B'; } + if (isset($properties['FONT-STYLE']) && $properties['FONT-STYLE']=='italic') { $p['C']['font-style'] .= 'I'; } + if (isset($properties['COLOR'])) { $p['C']['color'] = $properties['COLOR']; } + } + if (isset($attr['HEADER-STYLE-RIGHT']) || isset($attr['FOOTER-STYLE-RIGHT'])) { + if ($tag=='PAGEHEADER') { $properties = $this->cssmgr->readInlineCSS($attr['HEADER-STYLE-RIGHT']); } + else { $properties = $this->cssmgr->readInlineCSS($attr['FOOTER-STYLE-RIGHT']); } + if (isset($properties['FONT-FAMILY'])) { $p['R']['font-family'] = $properties['FONT-FAMILY']; } + if (isset($properties['FONT-SIZE'])) { $p['R']['font-size'] = $this->ConvertSize($properties['FONT-SIZE']) * _MPDFK; } + if (isset($properties['FONT-WEIGHT']) && $properties['FONT-WEIGHT']=='bold') { $p['R']['font-style'] = 'B'; } + if (isset($properties['FONT-STYLE']) && $properties['FONT-STYLE']=='italic') { $p['R']['font-style'] .= 'I'; } + if (isset($properties['COLOR'])) { $p['R']['color'] = $properties['COLOR']; } + } + if (isset($attr['LINE']) && $attr['LINE']) { // 0|1|on|off + if ($attr['LINE']=='1' || strtoupper($attr['LINE'])=='ON') { $lineset=1; } + else { $lineset=0; } + $p['line'] = $lineset; + } + break; + + +/*-- HTMLHEADERS-FOOTERS --*/ + case 'SETHTMLPAGEHEADER': + case 'SETHTMLPAGEFOOTER': + $this->ignorefollowingspaces = true; + if (isset($attr['NAME']) && $attr['NAME']) { $pname = $attr['NAME']; } + else { $pname = '_default'; } + if (isset($attr['PAGE']) && $attr['PAGE']) { // O|odd|even|E|ALL|[blank] + if (strtoupper($attr['PAGE'])=='O' || strtoupper($attr['PAGE'])=='ODD') { $side='odd'; } + else if (strtoupper($attr['PAGE'])=='E' || strtoupper($attr['PAGE'])=='EVEN') { $side='even'; } + else if (strtoupper($attr['PAGE'])=='ALL') { $side='both'; } + else { $side='odd'; } + } + else { $side='odd'; } + if (isset($attr['VALUE']) && $attr['VALUE']) { // -1|1|on|off + if ($attr['VALUE']=='1' || strtoupper($attr['VALUE'])=='ON') { $set=1; } + else if ($attr['VALUE']=='-1' || strtoupper($attr['VALUE'])=='OFF') { $set=0; } + else { $set=1; } + } + else { $set=1; } + if (isset($attr['SHOW-THIS-PAGE']) && $attr['SHOW-THIS-PAGE'] && $tag=='SETHTMLPAGEHEADER') { $write = 1; } + else { $write = 0; } + if ($side=='odd' || $side=='both') { + if ($set && $tag=='SETHTMLPAGEHEADER') { $this->SetHTMLHeader($this->pageHTMLheaders[$pname],'O',$write); } + else if ($set && $tag=='SETHTMLPAGEFOOTER') { $this->SetHTMLFooter($this->pageHTMLfooters[$pname],'O'); } + else if ($tag=='SETHTMLPAGEHEADER') { $this->SetHTMLHeader('','O'); } + else { $this->SetHTMLFooter('','O'); } + } + if ($side=='even' || $side=='both') { + if ($set && $tag=='SETHTMLPAGEHEADER') { $this->SetHTMLHeader($this->pageHTMLheaders[$pname],'E',$write); } + else if ($set && $tag=='SETHTMLPAGEFOOTER') { $this->SetHTMLFooter($this->pageHTMLfooters[$pname],'E'); } + else if ($tag=='SETHTMLPAGEHEADER') { $this->SetHTMLHeader('','E'); } + else { $this->SetHTMLFooter('','E'); } + } + break; +/*-- END HTMLHEADERS-FOOTERS --*/ + + case 'SETPAGEHEADER': + case 'SETPAGEFOOTER': + $this->ignorefollowingspaces = true; + if (isset($attr['NAME']) && $attr['NAME']) { $pname = $attr['NAME']; } + else { $pname = '_default'; } + if (isset($attr['PAGE']) && $attr['PAGE']) { // O|odd|even|E|ALL|[blank] + if (strtoupper($attr['PAGE'])=='O' || strtoupper($attr['PAGE'])=='ODD') { $side='odd'; } + else if (strtoupper($attr['PAGE'])=='E' || strtoupper($attr['PAGE'])=='EVEN') { $side='even'; } + else if (strtoupper($attr['PAGE'])=='ALL') { $side='both'; } + else { $side='odd'; } + } + else { $side='odd'; } + if (isset($attr['VALUE']) && $attr['VALUE']) { // -1|1|on|off + if ($attr['VALUE']=='1' || strtoupper($attr['VALUE'])=='ON') { $set=1; } + else if ($attr['VALUE']=='-1' || strtoupper($attr['VALUE'])=='OFF') { $set=0; } + else { $set=1; } + } + else { $set=1; } + if ($side=='odd' || $side=='both') { + if ($set && $tag=='SETPAGEHEADER') { $this->headerDetails['odd'] = $this->pageheaders[$pname]; } + else if ($set && $tag=='SETPAGEFOOTER') { $this->footerDetails['odd'] = $this->pagefooters[$pname]; } + else if ($tag=='SETPAGEHEADER') { $this->headerDetails['odd'] = array(); } + else { $this->footerDetails['odd'] = array(); } + if (!$this->mirrorMargins || ($this->page)%2!=0) { // ODD + if ($tag=='SETPAGEHEADER') { $this->_setAutoHeaderHeight($this->headerDetails['odd'],$this->HTMLHeader); } + if ($tag=='SETPAGEFOOTER') { $this->_setAutoFooterHeight($this->footerDetails['odd'],$this->HTMLFooter); } + } + } + if ($side=='even' || $side=='both') { + if ($set && $tag=='SETPAGEHEADER') { $this->headerDetails['even'] = $this->pageheaders[$pname]; } + else if ($set && $tag=='SETPAGEFOOTER') { $this->footerDetails['even'] = $this->pagefooters[$pname]; } + else if ($tag=='SETPAGEHEADER') { $this->headerDetails['even'] = array(); } + else { $this->footerDetails['even'] = array(); } + if ($this->mirrorMargins && ($this->page)%2==0) { // EVEN + if ($tag=='SETPAGEHEADER') { $this->_setAutoHeaderHeight($this->headerDetails['even'],$this->HTMLHeaderE); } + if ($tag=='SETPAGEFOOTER') { $this->_setAutoFooterHeight($this->footerDetails['even'],$this->HTMLFooterE); } + } + } + if (isset($attr['SHOW-THIS-PAGE']) && $attr['SHOW-THIS-PAGE'] && $tag=='SETPAGEHEADER') { + $this->Header(); + } + break; + + +/*-- TOC --*/ + case 'TOC': //added custom-tag - set Marker for insertion later of ToC + if (!class_exists('tocontents', false)) { include(_MPDF_PATH.'classes/tocontents.php'); } + if (empty($this->tocontents)) { $this->tocontents = new tocontents($this); } + $this->tocontents->openTagTOC($attr); + break; + + + + case 'TOCPAGEBREAK': // custom-tag - set Marker for insertion later of ToC AND adds PAGEBREAK + if (!class_exists('tocontents', false)) { include(_MPDF_PATH.'classes/tocontents.php'); } + if (empty($this->tocontents)) { $this->tocontents = new tocontents($this); } + list($isbreak,$toc_id) = $this->tocontents->openTagTOCPAGEBREAK($attr); + if ($isbreak) break; + // No break - continues as PAGEBREAK... +/*-- END TOC --*/ + + + case 'PAGE_BREAK': //custom-tag + case 'PAGEBREAK': //custom-tag + case 'NEWPAGE': //custom-tag + case 'FORMFEED': //custom-tag + + $save_blklvl = $this->blklvl; + $save_blk = $this->blk; + $save_silp = $this->saveInlineProperties(); + $save_spanlvl = $this->spanlvl; + $save_ilp = $this->InlineProperties; + + // Close any open block tags + for ($b= $this->blklvl;$b>0;$b--) { $this->CloseTag($this->blk[$b]['tag']); } + if(!empty($this->textbuffer)) { //Output previously buffered content + $this->printbuffer($this->textbuffer); + $this->textbuffer=array(); + } + $this->ignorefollowingspaces = true; + $save_cols = false; +/*-- COLUMNS --*/ + if ($this->ColActive) { + $save_cols = true; + $save_nbcol = $this->NbCol; // other values of gap and vAlign will not change by setting Columns off + $this->SetColumns(0); + } +/*-- END COLUMNS --*/ + + + if (isset($attr['SHEET-SIZE']) && $tag != 'FORMFEED' && !$this->restoreBlockPageBreaks) { + // Convert to same types as accepted in initial mPDF() A4, A4-L, or array(w,h) + $prop = preg_split('/\s+/',trim($attr['SHEET-SIZE'])); + if (count($prop) == 2 ) { + $newformat = array($this->ConvertSize($prop[0]), $this->ConvertSize($prop[1])); + } + else { $newformat = $attr['SHEET-SIZE']; } + } + else { $newformat = ''; } + + $mgr = $mgl = $mgt = $mgb = $mgh = $mgf = ''; + if (isset($attr['MARGIN-RIGHT'])) { $mgr = $this->ConvertSize($attr['MARGIN-RIGHT'],$this->w,$this->FontSize,false); } + if (isset($attr['MARGIN-LEFT'])) { $mgl = $this->ConvertSize($attr['MARGIN-LEFT'],$this->w,$this->FontSize,false); } + if (isset($attr['MARGIN-TOP'])) { $mgt = $this->ConvertSize($attr['MARGIN-TOP'],$this->w,$this->FontSize,false); } + if (isset($attr['MARGIN-BOTTOM'])) { $mgb = $this->ConvertSize($attr['MARGIN-BOTTOM'],$this->w,$this->FontSize,false); } + if (isset($attr['MARGIN-HEADER'])) { $mgh = $this->ConvertSize($attr['MARGIN-HEADER'],$this->w,$this->FontSize,false); } + if (isset($attr['MARGIN-FOOTER'])) { $mgf = $this->ConvertSize($attr['MARGIN-FOOTER'],$this->w,$this->FontSize,false); } + $ohname = $ehname = $ofname = $efname = ''; + if (isset($attr['ODD-HEADER-NAME'])) { $ohname = $attr['ODD-HEADER-NAME']; } + if (isset($attr['EVEN-HEADER-NAME'])) { $ehname = $attr['EVEN-HEADER-NAME']; } + if (isset($attr['ODD-FOOTER-NAME'])) { $ofname = $attr['ODD-FOOTER-NAME']; } + if (isset($attr['EVEN-FOOTER-NAME'])) { $efname = $attr['EVEN-FOOTER-NAME']; } + $ohvalue = $ehvalue = $ofvalue = $efvalue = 0; + if (isset($attr['ODD-HEADER-VALUE']) && ($attr['ODD-HEADER-VALUE']=='1' || strtoupper($attr['ODD-HEADER-VALUE'])=='ON')) { $ohvalue = 1; } + else if (isset($attr['ODD-HEADER-VALUE']) && ($attr['ODD-HEADER-VALUE']=='-1' || strtoupper($attr['ODD-HEADER-VALUE'])=='OFF')) { $ohvalue = -1; } + if (isset($attr['EVEN-HEADER-VALUE']) && ($attr['EVEN-HEADER-VALUE']=='1' || strtoupper($attr['EVEN-HEADER-VALUE'])=='ON')) { $ehvalue = 1; } + else if (isset($attr['EVEN-HEADER-VALUE']) && ($attr['EVEN-HEADER-VALUE']=='-1' || strtoupper($attr['EVEN-HEADER-VALUE'])=='OFF')) { $ehvalue = -1; } + if (isset($attr['ODD-FOOTER-VALUE']) && ($attr['ODD-FOOTER-VALUE']=='1' || strtoupper($attr['ODD-FOOTER-VALUE'])=='ON')) { $ofvalue = 1; } + else if (isset($attr['ODD-FOOTER-VALUE']) && ($attr['ODD-FOOTER-VALUE']=='-1' || strtoupper($attr['ODD-FOOTER-VALUE'])=='OFF')) { $ofvalue = -1; } + if (isset($attr['EVEN-FOOTER-VALUE']) && ($attr['EVEN-FOOTER-VALUE']=='1' || strtoupper($attr['EVEN-FOOTER-VALUE'])=='ON')) { $efvalue = 1; } + else if (isset($attr['EVEN-FOOTER-VALUE']) && ($attr['EVEN-FOOTER-VALUE']=='-1' || strtoupper($attr['EVEN-FOOTER-VALUE'])=='OFF')) { $efvalue = -1; } + + if (isset($attr['ORIENTATION']) && (strtoupper($attr['ORIENTATION'])=='L' || strtoupper($attr['ORIENTATION'])=='LANDSCAPE')) { $orient = 'L'; } + else if (isset($attr['ORIENTATION']) && (strtoupper($attr['ORIENTATION'])=='P' || strtoupper($attr['ORIENTATION'])=='PORTRAIT')) { $orient = 'P'; } + else { $orient = $this->CurOrientation; } + + if (isset($attr['PAGE-SELECTOR']) && $attr['PAGE-SELECTOR']) { $pagesel = $attr['PAGE-SELECTOR']; } + else { $pagesel = ''; } + + $resetpagenum = ''; + $pagenumstyle = ''; + $suppress = ''; + if (isset($attr['RESETPAGENUM'])) { $resetpagenum = $attr['RESETPAGENUM']; } + if (isset($attr['PAGENUMSTYLE'])) { $pagenumstyle = $attr['PAGENUMSTYLE']; } + if (isset($attr['SUPPRESS'])) { $suppress = $attr['SUPPRESS']; } + + if ($tag == 'TOCPAGEBREAK') { $type = 'NEXT-ODD'; } + else if(isset($attr['TYPE'])) { $type = strtoupper($attr['TYPE']); } + else { $type = ''; } + + if ($type == 'E' || $type == 'EVEN') { $this->AddPage($orient,'E', $resetpagenum, $pagenumstyle, $suppress,$mgl,$mgr,$mgt,$mgb,$mgh,$mgf,$ohname,$ehname,$ofname,$efname,$ohvalue,$ehvalue,$ofvalue,$efvalue,$pagesel,$newformat); } + else if ($type == 'O' || $type == 'ODD') { $this->AddPage($orient,'O', $resetpagenum, $pagenumstyle, $suppress,$mgl,$mgr,$mgt,$mgb,$mgh,$mgf,$ohname,$ehname,$ofname,$efname,$ohvalue,$ehvalue,$ofvalue,$efvalue,$pagesel,$newformat); } + else if ($type == 'NEXT-ODD') { $this->AddPage($orient,'NEXT-ODD', $resetpagenum, $pagenumstyle, $suppress,$mgl,$mgr,$mgt,$mgb,$mgh,$mgf,$ohname,$ehname,$ofname,$efname,$ohvalue,$ehvalue,$ofvalue,$efvalue,$pagesel,$newformat); } + else if ($type == 'NEXT-EVEN') { $this->AddPage($orient,'NEXT-EVEN', $resetpagenum, $pagenumstyle, $suppress,$mgl,$mgr,$mgt,$mgb,$mgh,$mgf,$ohname,$ehname,$ofname,$efname,$ohvalue,$ehvalue,$ofvalue,$efvalue,$pagesel,$newformat); } + else { $this->AddPage($orient,'', $resetpagenum, $pagenumstyle, $suppress,$mgl,$mgr,$mgt,$mgb,$mgh,$mgf,$ohname,$ehname,$ofname,$efname,$ohvalue,$ehvalue,$ofvalue,$efvalue,$pagesel,$newformat); } + +/*-- TOC --*/ + if ($tag == 'TOCPAGEBREAK') { + if ($toc_id) { $this->tocontents->m_TOC[$toc_id]['TOCmark'] = $this->page; } + else { $this->tocontents->TOCmark = $this->page; } + } +/*-- END TOC --*/ + +/*-- COLUMNS --*/ + if ($save_cols) { + // Restore columns + $this->SetColumns($save_nbcol,$this->colvAlign,$this->ColGap); + } +/*-- END COLUMNS --*/ + if (($tag == 'FORMFEED' || $this->restoreBlockPagebreaks) && !$this->tableLevel && !$this->listlvl) { + $this->blk = $save_blk; + // Re-open block tags + $t = $this->blk[0]['tag']; + $a = $this->blk[0]['attr']; + $this->blklvl = 0; + for ($b=0; $b<=$save_blklvl;$b++) { + $tc = $t; + $ac = $a; + $t = $this->blk[$b+1]['tag']; + $a = $this->blk[$b+1]['attr']; + unset($this->blk[$b+1]); + $this->OpenTag($tc,$ac); + } + $this->spanlvl = $save_spanlvl; + $this->InlineProperties = $save_ilp; + $this->restoreInlineProperties($save_silp); + } + + break; + + +/*-- TOC --*/ + case 'TOCENTRY': + if (isset($attr['CONTENT']) && $attr['CONTENT']) { + $objattr = array(); + $objattr['CONTENT'] = htmlspecialchars_decode($attr['CONTENT'],ENT_QUOTES); + $objattr['type'] = 'toc'; + if (isset($attr['LEVEL']) && $attr['LEVEL']) { $objattr['toclevel'] = $attr['LEVEL']; } else { $objattr['toclevel'] = 0; } + if (isset($attr['NAME']) && $attr['NAME']) { $objattr['toc_id'] = $attr['NAME']; } else { $objattr['toc_id'] = 0; } + $e = "\xbb\xa4\xactype=toc,objattr=".serialize($objattr)."\xbb\xa4\xac"; + if($this->tableLevel) { $this->cell[$this->row][$this->col]['textbuffer'][] = array($e); } // *TABLES* + else { // *TABLES* + $this->textbuffer[] = array($e); + } // *TABLES* + } + break; +/*-- END TOC --*/ + +/*-- INDEX --*/ + case 'INDEXENTRY': + if (isset($attr['CONTENT']) && $attr['CONTENT']) { + if (isset($attr['XREF']) && $attr['XREF']) { + $this->IndexEntry(htmlspecialchars_decode($attr['CONTENT'],ENT_QUOTES),$attr['XREF']); + break; + } + $objattr = array(); + $objattr['CONTENT'] = htmlspecialchars_decode($attr['CONTENT'],ENT_QUOTES); + $objattr['type'] = 'indexentry'; + $e = "\xbb\xa4\xactype=indexentry,objattr=".serialize($objattr)."\xbb\xa4\xac"; + if($this->tableLevel) { $this->cell[$this->row][$this->col]['textbuffer'][] = array($e); } // *TABLES* + else { // *TABLES* + $this->textbuffer[] = array($e); + } // *TABLES* + } + break; + + + case 'INDEXINSERT': + if (isset($attr['FONT-SIZE'])) { $reffontsize = $attr['FONT-SIZE']; } else { $reffontsize = ''; } + if (isset($attr['LINE-SPACING']) && $attr['LINE-SPACING']) { $linespacing = $attr['LINE-SPACING']; } else { $linespacing = ''; } + if (isset($attr['DIV-FONT-SIZE']) && $attr['DIV-FONT-SIZE']) { $divlettfontsize = $attr['DIV-FONT-SIZE']; } else { $divlettfontsize = ''; } + if (isset($attr['FONT']) && $attr['FONT']) { $reffont = $attr['FONT']; } else { $reffont = ''; } + if (isset($attr['DIV-FONT']) && $attr['DIV-FONT']) { $divlettfont = $attr['DIV-FONT']; } else { $divlettfont = ''; } + if (isset($attr['COLS']) && $attr['COLS']) { $cols = $attr['COLS']; } else { $cols = 1; } + if (isset($attr['OFFSET']) && $attr['OFFSET']) { $offset = $attr['OFFSET']; } else { $offset = 3; } + if (isset($attr['GAP']) && $attr['GAP']) { $gap = $attr['GAP']; } else { $gap = 5; } + + if (isset($attr['USEDIVLETTERS']) && (strtoupper($attr['USEDIVLETTERS'])=='OFF' || $attr['USEDIVLETTERS']==-1 || $attr['USEDIVLETTERS']==='0')) { $usedivletters = 0; } + else { $usedivletters = 1; } + + if (isset($attr['LINKS']) && (strtoupper($attr['LINKS'])=='ON' || $attr['LINKS']==1)) { $links = true; } + else { $links = false; } + $this->CreateIndex($cols, $reffontsize, $linespacing, $offset, $usedivletters, $divlettfontsize, $gap, $reffont,$divlettfont, $links); + break; +/*-- END INDEX --*/ + +/*-- WATERMARK --*/ + + case 'WATERMARKTEXT': + if (isset($attr['CONTENT']) && $attr['CONTENT']) { $txt = htmlspecialchars_decode($attr['CONTENT'],ENT_QUOTES); } else { $txt = ''; } + if (isset($attr['ALPHA']) && $attr['ALPHA']>0) { $alpha = $attr['ALPHA']; } else { $alpha = -1; } + $this->SetWatermarkText($txt, $alpha); + break; + + + case 'WATERMARKIMAGE': + if (isset($attr['SRC'])) { $src = $attr['SRC']; } else { $src = ''; } + if (isset($attr['ALPHA']) && $attr['ALPHA']>0) { $alpha = $attr['ALPHA']; } else { $alpha = -1; } + if (isset($attr['SIZE']) && $attr['SIZE']) { + $size = $attr['SIZE']; + if (strpos($size,',')) { $size = explode(',',$size); } + } + else { $size = 'D'; } + if (isset($attr['POS']) && $attr['POS']) { + $pos = $attr['POS']; + if (strpos($pos,',')) { $pos = explode(',',$pos); } + } + else { $pos = 'P'; } + $this->SetWatermarkImage($src, $alpha, $size, $pos); + break; +/*-- END WATERMARK --*/ + +/*-- BOOKMARKS --*/ + case 'BOOKMARK': + if (isset($attr['CONTENT'])) { + $objattr = array(); + $objattr['CONTENT'] = htmlspecialchars_decode($attr['CONTENT'],ENT_QUOTES); + $objattr['type'] = 'bookmark'; + if (isset($attr['LEVEL']) && $attr['LEVEL']) { $objattr['bklevel'] = $attr['LEVEL']; } else { $objattr['bklevel'] = 0; } + $e = "\xbb\xa4\xactype=bookmark,objattr=".serialize($objattr)."\xbb\xa4\xac"; + if($this->tableLevel) { $this->cell[$this->row][$this->col]['textbuffer'][] = array($e); } // *TABLES* + else { // *TABLES* + $this->textbuffer[] = array($e); + } // *TABLES* + } + break; +/*-- END BOOKMARKS --*/ + +/*-- ANNOTATIONS --*/ + case 'ANNOTATION': + + //if (isset($attr['CONTENT']) && !$this->writingHTMLheader && !$this->writingHTMLfooter) { // Stops annotations in FixedPos + if (isset($attr['CONTENT'])) { + $objattr = array(); + $objattr['margin_top'] = 0; + $objattr['margin_bottom'] = 0; + $objattr['margin_left'] = 0; + $objattr['margin_right'] = 0; + $objattr['width'] = 0; + $objattr['height'] = 0; + $objattr['border_top']['w'] = 0; + $objattr['border_bottom']['w'] = 0; + $objattr['border_left']['w'] = 0; + $objattr['border_right']['w'] = 0; + $objattr['CONTENT'] = htmlspecialchars_decode($attr['CONTENT'],ENT_QUOTES); + $objattr['type'] = 'annot'; + $objattr['POPUP'] = ''; + } + else { break; } + if (isset($attr['POS-X'])) { $objattr['POS-X'] = $attr['POS-X']; } else { $objattr['POS-X'] = 0; } + if (isset($attr['POS-Y'])) { $objattr['POS-Y'] = $attr['POS-Y']; } else { $objattr['POS-Y'] = 0; } + if (isset($attr['ICON'])) { $objattr['ICON'] = $attr['ICON']; } else { $objattr['ICON'] = 'Note'; } + if (isset($attr['AUTHOR'])) { $objattr['AUTHOR'] = $attr['AUTHOR']; } + else if (isset($attr['TITLE'])) { $objattr['AUTHOR'] = $attr['TITLE']; } else { $objattr['AUTHOR'] = ''; } + if (isset($attr['FILE'])) { $objattr['FILE'] = $attr['FILE']; } else { $objattr['FILE'] = ''; } + if (isset($attr['SUBJECT'])) { $objattr['SUBJECT'] = $attr['SUBJECT']; } else { $objattr['SUBJECT'] = ''; } + if (isset($attr['OPACITY']) && $attr['OPACITY']>0 && $attr['OPACITY']<=1) { $objattr['OPACITY'] = $attr['OPACITY']; } + else if ($this->annotMargin) { $objattr['OPACITY'] = 1; } + else { $objattr['OPACITY'] = $this->annotOpacity; } + if (isset($attr['COLOR'])) { + $cor = $this->ConvertColor($attr['COLOR']); + if ($cor) { $objattr['COLOR'] = $cor; } + else { $objattr['COLOR'] = $this->ConvertColor('yellow'); } + } + else { $objattr['COLOR'] = $this->ConvertColor('yellow'); } + + if (isset($attr['POPUP']) && !empty($attr['POPUP'])) { + $pop = preg_split('/\s+/',trim($attr['POPUP'])); + if (count($pop)>1) { $objattr['POPUP'] = $pop; } + else { $objattr['POPUP'] = true; } + } + $e = "\xbb\xa4\xactype=annot,objattr=".serialize($objattr)."\xbb\xa4\xac"; + if($this->tableLevel) { $this->cell[$this->row][$this->col]['textbuffer'][] = array($e); } // *TABLES* + else { // *TABLES* + $this->textbuffer[] = array($e); + } // *TABLES* + break; +/*-- END ANNOTATIONS --*/ + + +/*-- COLUMNS --*/ + case 'COLUMNS': //added custom-tag + if (isset($attr['COLUMN-COUNT']) && ($attr['COLUMN-COUNT'] || $attr['COLUMN-COUNT']==='0')) { + // Close any open block tags + for ($b= $this->blklvl;$b>0;$b--) { $this->CloseTag($this->blk[$b]['tag']); } + if(!empty($this->textbuffer)) { //Output previously buffered content + $this->printbuffer($this->textbuffer); + $this->textbuffer=array(); + } + + if (isset($attr['VALIGN']) && $attr['VALIGN']) { + if ($attr['VALIGN'] == 'J') { $valign = 'J'; } + else { $valign = $align[$attr['VALIGN']]; } + } + else { $valign = ''; } + if (isset($attr['COLUMN-GAP']) && $attr['COLUMN-GAP']) { $this->SetColumns($attr['COLUMN-COUNT'],$valign,$attr['COLUMN-GAP']); } + else { $this->SetColumns($attr['COLUMN-COUNT'],$valign); } + } + $this->ignorefollowingspaces = true; + break; + + case 'COLUMN_BREAK': //custom-tag + case 'COLUMNBREAK': //custom-tag + case 'NEWCOLUMN': //custom-tag + $this->ignorefollowingspaces = true; + $this->NewColumn(); + $this->ColumnAdjust = false; // disables all column height adjustment for the page. + break; + +/*-- END COLUMNS --*/ + + + case 'BDO': + // $this->biDirectional = true; + break; + + + case 'TTZ': + $this->ttz = true; + $this->InlineProperties[$tag] = $this->saveInlineProperties(); + $this->setCSS(array('FONT-FAMILY'=>'czapfdingbats','FONT-WEIGHT'=>'normal','FONT-STYLE'=>'normal'),'INLINE'); + break; + + case 'TTS': + $this->tts = true; + $this->InlineProperties[$tag] = $this->saveInlineProperties(); + $this->setCSS(array('FONT-FAMILY'=>'csymbol','FONT-WEIGHT'=>'normal','FONT-STYLE'=>'normal'),'INLINE'); + break; + + case 'TTA': + $this->tta = true; + $this->InlineProperties[$tag] = $this->saveInlineProperties(); + + if (in_array($this->FontFamily,$this->mono_fonts)) { + $this->setCSS(array('FONT-FAMILY'=>'ccourier'),'INLINE'); + } + else if (in_array($this->FontFamily,$this->serif_fonts)) { + $this->setCSS(array('FONT-FAMILY'=>'ctimes'),'INLINE'); + } + else { + $this->setCSS(array('FONT-FAMILY'=>'chelvetica'),'INLINE'); + } + break; + + + + // INLINE PHRASES OR STYLES + case 'SUB': + case 'SUP': + case 'ACRONYM': + case 'BIG': + case 'SMALL': + case 'INS': + case 'S': + case 'STRIKE': + case 'DEL': + case 'STRONG': + case 'CITE': + case 'Q': + case 'EM': + case 'B': + case 'I': + case 'U': + case 'SAMP': + case 'CODE': + case 'KBD': + case 'TT': + case 'VAR': + case 'FONT': + case 'MARK': // mPDF 5.5.09 + case 'TIME': + + case 'SPAN': +/*-- ANNOTATIONS --*/ + if ($this->title2annots && isset($attr['TITLE'])) { + $objattr = array(); + $objattr['margin_top'] = 0; + $objattr['margin_bottom'] = 0; + $objattr['margin_left'] = 0; + $objattr['margin_right'] = 0; + $objattr['width'] = 0; + $objattr['height'] = 0; + $objattr['border_top']['w'] = 0; + $objattr['border_bottom']['w'] = 0; + $objattr['border_left']['w'] = 0; + $objattr['border_right']['w'] = 0; + + $objattr['CONTENT'] = $attr['TITLE']; + $objattr['type'] = 'annot'; + $objattr['POS-X'] = 0; + $objattr['POS-Y'] = 0; + $objattr['ICON'] = 'Comment'; + $objattr['AUTHOR'] = ''; + $objattr['SUBJECT'] = ''; + $objattr['OPACITY'] = $this->annotOpacity; + $objattr['COLOR'] = $this->ConvertColor('yellow'); + $annot = "\xbb\xa4\xactype=annot,objattr=".serialize($objattr)."\xbb\xa4\xac"; + } +/*-- END ANNOTATIONS --*/ + + if ($tag == 'SPAN') { + $this->spanlvl++; + $this->InlineProperties['SPAN'][$this->spanlvl] = $this->saveInlineProperties(); + if (isset($annot)) { $this->InlineAnnots[$tag][$this->spanlvl] = $annot; } // *ANNOTATIONS* + } + else { + if (!isset($this->InlineProperties[$tag])) $this->InlineProperties[$tag] = $this->saveInlineProperties(); // mPDF 5.4.13 + if (isset($annot)) { $this->InlineAnnots[$tag] = $annot; } // *ANNOTATIONS* + } + $properties = $this->cssmgr->MergeCSS('INLINE',$tag,$attr); + if (!empty($properties)) $this->setCSS($properties,'INLINE'); + break; + + + case 'A': + if (isset($attr['NAME']) and $attr['NAME'] != '') { + $e = ''; +/*-- BOOKMARKS --*/ + if ($this->anchor2Bookmark) { + $objattr = array(); + $objattr['CONTENT'] = htmlspecialchars_decode($attr['NAME'],ENT_QUOTES); + $objattr['type'] = 'bookmark'; + if (isset($attr['LEVEL']) && $attr['LEVEL']) { $objattr['bklevel'] = $attr['LEVEL']; } else { $objattr['bklevel'] = 0; } + $e = "\xbb\xa4\xactype=bookmark,objattr=".serialize($objattr)."\xbb\xa4\xac"; + } +/*-- END BOOKMARKS --*/ + if($this->tableLevel) { // *TABLES* + $this->_saveCellTextBuffer($e, '', $attr['NAME']); // *TABLES* + } // *TABLES* + else { // *TABLES* + $this->_saveTextBuffer($e, '', $attr['NAME']); //an internal link (adds a space for recognition) + } // *TABLES* + } + if (isset($attr['HREF'])) { + $this->InlineProperties['A'] = $this->saveInlineProperties(); + $properties = $this->cssmgr->MergeCSS('',$tag,$attr); + if (!empty($properties)) $this->setCSS($properties,'INLINE'); + $this->HREF=htmlspecialchars_decode(urldecode($attr['HREF'])); + } + break; + + case 'LEGEND': // mPDF 5.4.18 + $this->InlineProperties['LEGEND'] = $this->saveInlineProperties(); + $properties = $this->cssmgr->MergeCSS('',$tag,$attr); + if (!empty($properties)) $this->setCSS($properties,'INLINE'); + break; + + + + case 'PROGRESS': // mPDF 5.5.09 + case 'METER': // mPDF 5.5.09 + $this->inMeter = true; // mPDF 5.5.09 + + if (isset($attr['MAX']) && $attr['MAX']) { $max = $attr['MAX']; } + else { $max = 1; } + if (isset($attr['MIN']) && $attr['MIN'] && $tag=='METER') { $min = $attr['MIN']; } + else { $min = 0; } + if ($max < $min) { $max = $min; } + + if (isset($attr['VALUE']) && ($attr['VALUE'] || $attr['VALUE']==='0')) { + $value = $attr['VALUE']; + if ($value < $min) { $value = $min; } + else if ($value > $max) { $value = $max; } + } + else { $value = ''; } + + if (isset($attr['LOW']) && $attr['LOW']) { $low = $attr['LOW']; } + else { $low = $min; } + if ($low < $min) { $low = $min; } + else if ($low > $max) { $low = $max; } + if (isset($attr['HIGH']) && $attr['HIGH']) { $high = $attr['HIGH']; } + else { $high = $max; } + if ($high < $low) { $high = $low; } + else if ($high > $max) { $high = $max; } + if (isset($attr['OPTIMUM']) && $attr['OPTIMUM']) { $optimum = $attr['OPTIMUM']; } + else { $optimum = $min + (($max-$min)/2); } + if ($optimum < $min) { $optimum = $min; } + else if ($optimum > $max) { $optimum = $max; } + if (isset($attr['TYPE']) && $attr['TYPE']) { $type = $attr['TYPE']; } + else { $type = ''; } + $objattr = array(); + $objattr['margin_top'] = 0; + $objattr['margin_bottom'] = 0; + $objattr['margin_left'] = 0; + $objattr['margin_right'] = 0; + $objattr['padding_top'] = 0; + $objattr['padding_bottom'] = 0; + $objattr['padding_left'] = 0; + $objattr['padding_right'] = 0; + $objattr['width'] = 0; + $objattr['height'] = 0; + $objattr['border_top']['w'] = 0; + $objattr['border_bottom']['w'] = 0; + $objattr['border_left']['w'] = 0; + $objattr['border_right']['w'] = 0; + + $properties = $this->cssmgr->MergeCSS('',$tag,$attr); + if(isset($properties ['DISPLAY']) && strtolower($properties ['DISPLAY'])=='none') { + return; + } + $objattr['visibility'] = 'visible'; + if (isset($properties['VISIBILITY'])) { + $v = strtolower($properties['VISIBILITY']); + if (($v == 'hidden' || $v == 'printonly' || $v == 'screenonly') && $this->visibility=='visible') { + $objattr['visibility'] = $v; + } + } + + if (isset($properties['MARGIN-TOP'])) { $objattr['margin_top']=$this->ConvertSize($properties['MARGIN-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-BOTTOM'])) { $objattr['margin_bottom'] = $this->ConvertSize($properties['MARGIN-BOTTOM'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-LEFT'])) { $objattr['margin_left'] = $this->ConvertSize($properties['MARGIN-LEFT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-RIGHT'])) { $objattr['margin_right'] = $this->ConvertSize($properties['MARGIN-RIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + + if (isset($properties['PADDING-TOP'])) { $objattr['padding_top']=$this->ConvertSize($properties['PADDING-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['PADDING-BOTTOM'])) { $objattr['padding_bottom'] = $this->ConvertSize($properties['PADDING-BOTTOM'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['PADDING-LEFT'])) { $objattr['padding_left'] = $this->ConvertSize($properties['PADDING-LEFT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['PADDING-RIGHT'])) { $objattr['padding_right'] = $this->ConvertSize($properties['PADDING-RIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + + if (isset($properties['BORDER-TOP'])) { $objattr['border_top'] = $this->border_details($properties['BORDER-TOP']); } + if (isset($properties['BORDER-BOTTOM'])) { $objattr['border_bottom'] = $this->border_details($properties['BORDER-BOTTOM']); } + if (isset($properties['BORDER-LEFT'])) { $objattr['border_left'] = $this->border_details($properties['BORDER-LEFT']); } + if (isset($properties['BORDER-RIGHT'])) { $objattr['border_right'] = $this->border_details($properties['BORDER-RIGHT']); } + + if (isset($properties['VERTICAL-ALIGN'])) { $objattr['vertical-align'] = $align[strtolower($properties['VERTICAL-ALIGN'])]; } + $w = 0; + $h = 0; + if(isset($properties['WIDTH'])) $w = $this->ConvertSize($properties['WIDTH'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + else if(isset($attr['WIDTH'])) $w = $this->ConvertSize($attr['WIDTH'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + + if(isset($properties['HEIGHT'])) $h = $this->ConvertSize($properties['HEIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + else if(isset($attr['HEIGHT'])) $h = $this->ConvertSize($attr['HEIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + + if (isset($properties['OPACITY']) && $properties['OPACITY'] > 0 && $properties['OPACITY'] <= 1) { $objattr['opacity'] = $properties['OPACITY']; } + if ($this->HREF) { + if (strpos($this->HREF,".") === false && strpos($this->HREF,"@") !== 0) { + $href = $this->HREF; + while(array_key_exists($href,$this->internallink)) $href="#".$href; + $this->internallink[$href] = $this->AddLink(); + $objattr['link'] = $this->internallink[$href]; + } + else { $objattr['link'] = $this->HREF; } + } + $extraheight = $objattr['padding_top'] + $objattr['padding_bottom'] + $objattr['margin_top'] + $objattr['margin_bottom'] + $objattr['border_top']['w'] + $objattr['border_bottom']['w']; + $extrawidth = $objattr['padding_left'] + $objattr['padding_right'] + $objattr['margin_left'] + $objattr['margin_right'] + $objattr['border_left']['w'] + $objattr['border_right']['w']; + + // Image file + if (!class_exists('meter', false)) { + include(_MPDF_PATH.'classes/meter.php'); + } + $this->meter = new meter(); + $svg = $this->meter->makeSVG(strtolower($tag), $type, $value, $max, $min, $optimum, $low, $high); + //Save to local file + $srcpath= _MPDF_TEMP_PATH.'_tempSVG'.RAND(1,10000).'_'.strtolower($tag).'.svg'; + file_put_contents($srcpath, $svg); + $orig_srcpath = $srcpath; + $this->GetFullPath($srcpath); + + $info=$this->_getImage($srcpath, true, true, $orig_srcpath); + if(!$info) { + $info = $this->_getImage($this->noImageFile); + if ($info) { + $srcpath = $this->noImageFile; + $w = ($info['w'] * (25.4/$this->dpi)); + $h = ($info['h'] * (25.4/$this->dpi)); + } + } + if(!$info) break; + + $objattr['file'] = $srcpath; + //Default width and height calculation if needed + if($w==0 and $h==0) { + // SVG units are pixels + $w = $this->FontSize/(10/_MPDFK) * abs($info['w'])/_MPDFK; // mPDF 5.5.21 + $h = $this->FontSize/(10/_MPDFK) * abs($info['h'])/_MPDFK; + } + // IF WIDTH OR HEIGHT SPECIFIED + if($w==0) $w=abs($h*$info['w']/$info['h']); + if($h==0) $h=abs($w*$info['h']/$info['w']); + + // Resize to maximum dimensions of page + $maxWidth = $this->blk[$this->blklvl]['inner_width']; + $maxHeight = $this->h - ($this->tMargin + $this->bMargin + 1) ; + if ($this->fullImageHeight) { $maxHeight = $this->fullImageHeight; } + if ($w + $extrawidth > $maxWidth ) { + $w = $maxWidth - $extrawidth; + $h=abs($w*$info['h']/$info['w']); + } + + if ($h + $extraheight > $maxHeight ) { + $h = $maxHeight - $extraheight; + $w=abs($h*$info['w']/$info['h']); + } + $objattr['type'] = 'image'; + $objattr['itype'] = $info['type']; + + $objattr['orig_h'] = $info['h']; + $objattr['orig_w'] = $info['w']; + $objattr['wmf_x'] = $info['x']; + $objattr['wmf_y'] = $info['y']; + $objattr['height'] = $h + $extraheight; + $objattr['width'] = $w + $extrawidth; + $objattr['image_height'] = $h; + $objattr['image_width'] = $w; + $e = "\xbb\xa4\xactype=image,objattr=".serialize($objattr)."\xbb\xa4\xac"; + $properties = array(); + if ($this->tableLevel) { + $this->_saveCellTextBuffer($e, $this->HREF); + $this->cell[$this->row][$this->col]['s'] += $objattr['width'] ; + } + else { + $this->_saveTextBuffer($e, $this->HREF); + } + + break; + + + case 'BR': + // Added mPDF 3.0 Float DIV - CLEAR + if (isset($attr['STYLE'])) { + $properties = $this->cssmgr->readInlineCSS($attr['STYLE']); + if (isset($properties['CLEAR'])) { $this->ClearFloats(strtoupper($properties['CLEAR']),$this->blklvl); } // *CSS-FLOAT* + } + + +/*-- TABLES --*/ + if($this->tableLevel) { + + if ($this->blockjustfinished || $this->listjustfinished) { + $this->_saveCellTextBuffer("\n"); + } + + $this->_saveCellTextBuffer("\n"); + if (!isset($this->cell[$this->row][$this->col]['maxs'])) { + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + elseif($this->cell[$this->row][$this->col]['maxs'] < $this->cell[$this->row][$this->col]['s']) { + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + $this->cell[$this->row][$this->col]['s'] = 0 ;// reset + } + else { +/*-- END TABLES --*/ + if (count($this->textbuffer)) { + $this->textbuffer[count($this->textbuffer)-1][0] = preg_replace('/ $/','',$this->textbuffer[count($this->textbuffer)-1][0]); + } + $this->_saveTextBuffer("\n"); + } // *TABLES* + $this->ignorefollowingspaces = true; + $this->blockjustfinished=false; + $this->listjustfinished=false; + + $this->linebreakjustfinished=true; + break; + + + // *********** BLOCKS ******************** + + + case 'PRE': + $this->ispre=true; // ADDED - Prevents left trim of textbuffer in printbuffer() + + case 'DIV': + case 'FORM': + case 'CENTER': + + case 'BLOCKQUOTE': + case 'ADDRESS': + + case 'CAPTION': + case 'P': + case 'H1': + case 'H2': + case 'H3': + case 'H4': + case 'H5': + case 'H6': + case 'DL': + case 'DT': + case 'DD': + case 'FIELDSET': + // mPDF 5.5.22 + case 'DETAILS': + case 'SUMMARY': + // mPDF 5.5.09 + case 'ARTICLE': + case 'ASIDE': + case 'FIGURE': + case 'FIGCAPTION': + case 'FOOTER': + case 'HEADER': + case 'HGROUP': + case 'NAV': + case 'SECTION': + $p = $this->cssmgr->PreviewBlockCSS($tag,$attr); + if(isset($p['DISPLAY']) && strtolower($p['DISPLAY'])=='none') { + $this->blklvl++; + $this->blk[$this->blklvl]['hide'] = true; + return; + } + if($tag == 'CAPTION') { + // position is written in AdjstHTML + if (isset($attr['POSITION']) && strtolower($attr['POSITION'])=='bottom') { $divpos = 'B'; } + else { $divpos = 'T'; } + if (isset($attr['ALIGN']) && strtolower($attr['ALIGN'])=='bottom') { $cappos = 'B'; } + else if (isset($p['CAPTION-SIDE']) && strtolower($p['CAPTION-SIDE'])=='bottom') { $cappos = 'B'; } + else { $cappos = 'T'; } + if (isset($attr['ALIGN'])) { unset($attr['ALIGN']); } + if ($cappos != $divpos) { + $this->blklvl++; + $this->blk[$this->blklvl]['hide'] = true; + return; + } + } + +/*-- FORMS --*/ + if($tag == 'FORM') { + if (isset($attr['METHOD']) && strtolower($attr['METHOD'])=='get') { $this->form->formMethod = 'GET'; } + else { $this->form->formMethod = 'POST'; } + if (isset($attr['ACTION'])) { $this->form->formAction = $attr['ACTION']; } + else { $this->form->formAction = ''; } + } +/*-- END FORMS --*/ + + +/*-- CSS-POSITION --*/ + if ((isset($p['POSITION']) && (strtolower($p['POSITION'])=='fixed' || strtolower($p['POSITION'])=='absolute')) && $this->blklvl==0) { + if ($this->inFixedPosBlock) { + $this->Error("Cannot nest block with position:fixed or position:absolute"); + } + $this->inFixedPosBlock = true; + return; + } +/*-- END CSS-POSITION --*/ + // Start Block + $this->ignorefollowingspaces = true; + + if ($this->blockjustfinished && !count($this->textbuffer) && $this->y != $this->tMargin && $this->collapseBlockMargins) { $lastbottommargin = $this->lastblockbottommargin; } + else { $lastbottommargin = 0; } + $this->lastblockbottommargin = 0; + $this->blockjustfinished=false; + +/*-- LISTS --*/ + if ($this->listlvl>0) { return; } +/*-- END LISTS --*/ + + $this->InlineProperties = array(); + $this->spanlvl = 0; + $this->listjustfinished=false; + $this->divbegin=true; + + $this->linebreakjustfinished=false; + +/*-- TABLES --*/ + if ($this->tableLevel) { + + // If already something on the line + if ($this->cell[$this->row][$this->col]['s'] > 0 && !$this->nestedtablejustfinished ) { + $this->_saveCellTextBuffer("\n"); + if (!isset($this->cell[$this->row][$this->col]['maxs'])) { + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + elseif($this->cell[$this->row][$this->col]['maxs'] < $this->cell[$this->row][$this->col]['s']) { + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + $this->cell[$this->row][$this->col]['s'] = 0 ;// reset + } + // Cannot set block properties inside table - use Bold to indicate h1-h6 + if ($tag == 'CENTER' && $this->tdbegin) { $this->cell[$this->row][$this->col]['a'] = $align['center']; } + + $this->InlineProperties['BLOCKINTABLE'] = $this->saveInlineProperties(); + $properties = $this->cssmgr->MergeCSS('',$tag,$attr); + if (!empty($properties)) $this->setCSS($properties,'INLINE'); + + + break; + } +/*-- END TABLES --*/ + + if ($tag == 'P' || $tag == 'DT' || $tag == 'DD') { $this->lastoptionaltag = $tag; } // Save current HTML specified optional endtag + else { $this->lastoptionaltag = ''; } + + if ($this->lastblocklevelchange == 1) { $blockstate = 1; } // Top margins/padding only + else if ($this->lastblocklevelchange < 1) { $blockstate = 0; } // NO margins/padding + $this->printbuffer($this->textbuffer,$blockstate); + $this->textbuffer=array(); + + $save_blklvl = $this->blklvl; + $save_blk = $this->blk; + $save_silp = $this->saveInlineProperties(); + $save_spanlvl = $this->spanlvl; + $save_ilp = $this->InlineProperties; + + $this->blklvl++; + + $currblk =& $this->blk[$this->blklvl]; + $this->initialiseBlock($currblk); + $prevblk =& $this->blk[$this->blklvl-1]; + + $currblk['tag'] = $tag; + $currblk['attr'] = $attr; + + $this->Reset(); + $properties = $this->cssmgr->MergeCSS('BLOCK',$tag,$attr); + $pagesel = ''; +/*-- CSS-PAGE --*/ + + if (isset($properties['PAGE'])) { $pagesel = $properties['PAGE']; } +/*-- END CSS-PAGE --*/ + + // If page-box has changed AND/OR PAGE-BREAK-BEFORE + $save_cols = false; + if (($pagesel && $pagesel != $this->page_box['current']) || (isset($properties['PAGE-BREAK-BEFORE']) && $properties['PAGE-BREAK-BEFORE'])) { + if ($this->blklvl>1) { + // Close any open block tags + for ($b= $this->blklvl;$b>0;$b--) { $this->CloseTag($this->blk[$b]['tag']); } + // Output any text left in buffer + if (count($this->textbuffer)) { $this->printbuffer($this->textbuffer); $this->textbuffer=array(); } + } +/*-- COLUMNS --*/ + if ($this->ColActive) { + $save_cols = true; + $save_nbcol = $this->NbCol; // other values of gap and vAlign will not change by setting Columns off + $this->SetColumns(0); + } +/*-- END COLUMNS --*/ + + + // Must Add new page if changed page properties + if (isset($properties['PAGE-BREAK-BEFORE'])) { + if (strtoupper($properties['PAGE-BREAK-BEFORE']) == 'RIGHT') { $this->AddPage($this->CurOrientation,'NEXT-ODD','','','','','', '','', '','','','','','',0,0,0,0,$pagesel); } + else if (strtoupper($properties['PAGE-BREAK-BEFORE']) == 'LEFT') { $this->AddPage($this->CurOrientation,'NEXT-EVEN','','','','','', '','', '','','','','','',0,0,0,0,$pagesel); } + else if (strtoupper($properties['PAGE-BREAK-BEFORE']) == 'ALWAYS') { $this->AddPage($this->CurOrientation,'','','','','','', '','', '','','','','','',0,0,0,0,$pagesel); } + else if ($this->page_box['current'] != $pagesel) { $this->AddPage($this->CurOrientation,'','','','','','', '','', '','','','','','',0,0,0,0,$pagesel); } // *CSS-PAGE* + } +/*-- CSS-PAGE --*/ + else if ($pagesel != $this->page_box['current']) { $this->AddPage($this->CurOrientation,'','','','','','', '','', '','','','','','',0,0,0,0,$pagesel); } +/*-- END CSS-PAGE --*/ + + // if using htmlheaders, the headers need to be rewritten when new page + // done by calling WriteHTML() within resethtmlheaders + // so block is reset to 0 - now we need to resurrect it + // As in WriteHTML() initialising + if (!($this->restoreBlockPagebreaks && isset($properties['PAGE-BREAK-BEFORE']) && $properties['PAGE-BREAK-BEFORE'])) { + $this->blklvl = 0; + $this->lastblocklevelchange = 0; + $this->blk = array(); + $this->initialiseBlock($this->blk[0]); + $this->blk[0]['width'] =& $this->pgwidth; + $this->blk[0]['inner_width'] =& $this->pgwidth; + $this->blk[0]['blockContext'] = $this->blockContext; + $properties = $this->cssmgr->MergeCSS('BLOCK','BODY',''); + $this->setCSS($properties,'','BODY'); + $this->blklvl++; + $currblk =& $this->blk[$this->blklvl]; + $prevblk =& $this->blk[$this->blklvl-1]; + + $this->initialiseBlock($currblk); + $currblk['tag'] = $tag; + $currblk['attr'] = $attr; + + $this->Reset(); + $properties = $this->cssmgr->MergeCSS('BLOCK',$tag,$attr); + } +/*-- COLUMNS --*/ + if ($save_cols) { + // Restore columns + $this->SetColumns($save_nbcol,$this->colvAlign,$this->ColGap); + } +/*-- END COLUMNS --*/ + if ($this->restoreBlockPagebreaks && isset($properties['PAGE-BREAK-BEFORE']) && $properties['PAGE-BREAK-BEFORE']) { + $this->blk = $save_blk; + // Re-open block tags + $t = $this->blk[0]['tag']; + $a = $this->blk[0]['attr']; + $this->blklvl = 0; + for ($b=0; $b<=$save_blklvl;$b++) { + $tc = $t; + $ac = $a; + $t = $this->blk[$b+1]['tag']; + $a = $this->blk[$b+1]['attr']; + unset($this->blk[$b+1]); + $this->OpenTag($tc,$ac); + } + $this->spanlvl = $save_spanlvl; + $this->InlineProperties = $save_ilp; + $this->restoreInlineProperties($save_silp); + } + } + + if (isset($properties['PAGE-BREAK-INSIDE']) && strtoupper($properties['PAGE-BREAK-INSIDE']) == 'AVOID' && !$this->ColActive && !$this->keep_block_together) { + $currblk['keep_block_together'] = 1; + $this->kt_y00 = $this->y; + $this->kt_p00 = $this->page; + $this->keep_block_together = 1; + $this->divbuffer = array(); + $this->ktLinks = array(); + $this->ktAnnots = array(); + $this->ktForms = array(); + $this->ktBlock = array(); + $this->ktReference = array(); + $this->ktBMoutlines = array(); + $this->_kttoc = array(); + } + if ($lastbottommargin && isset($properties['MARGIN-TOP']) && $properties['MARGIN-TOP'] && empty($properties['FLOAT'])) { $currblk['lastbottommargin'] = $lastbottommargin; } + + // mPDF 5.6.01 - LAYERS + if (isset($properties['Z-INDEX']) && $this->currentlayer==0) { + $v = intval($properties['Z-INDEX']); + if ($v > 0) { + $currblk['z-index'] = $v; + $this->BeginLayer($v); + } + } + + $this->setCSS($properties,'BLOCK',$tag); //name(id/class/style) found in the CSS array! + $currblk['InlineProperties'] = $this->saveInlineProperties(); + + if (isset($properties['VISIBILITY'])) { + $v = strtolower($properties['VISIBILITY']); + if (($v == 'hidden' || $v == 'printonly' || $v == 'screenonly') && $this->visibility=='visible' && !$this->tableLevel) { + $currblk['visibility'] = $v; + $this->SetVisibility($v); + } + } + + if(isset($attr['DIR']) && $attr['DIR']) { $currblk['direction'] = strtolower($attr['DIR']); } + if(isset($attr['ALIGN']) && $attr['ALIGN']) { $currblk['block-align'] = $align[strtolower($attr['ALIGN'])]; } + + if (isset($properties['HEIGHT'])) { + $currblk['css_set_height'] = $this->ConvertSize($properties['HEIGHT'],($this->h - $this->tMargin - $this->bMargin),$this->FontSize,false); + if (($currblk['css_set_height'] + $this->y) > $this->PageBreakTrigger && $this->y > $this->tMargin+5 && $currblk['css_set_height'] < ($this->h - ($this->tMargin + $this->bMargin))) { $this->AddPage($this->CurOrientation); } + } + else { $currblk['css_set_height'] = false; } + + + // Added mPDF 3.0 Float DIV + if (isset($prevblk['blockContext'])) { $currblk['blockContext'] = $prevblk['blockContext'] ; } // *CSS-FLOAT* + + if (isset($properties['CLEAR'])) { $this->ClearFloats(strtoupper($properties['CLEAR']), $this->blklvl-1); } // *CSS-FLOAT* + + $container_w = $prevblk['inner_width']; + $bdr = $currblk['border_right']['w']; + $bdl = $currblk['border_left']['w']; + $pdr = $currblk['padding_right']; + $pdl = $currblk['padding_left']; + + if (isset($currblk['css_set_width'])) { $setwidth = $currblk['css_set_width']; } + else { $setwidth = 0; } + +/*-- CSS-FLOAT --*/ + if (isset($properties['FLOAT']) && strtoupper($properties['FLOAT']) == 'RIGHT' && !$this->ColActive) { + // Cancel Keep-Block-together + $currblk['keep_block_together'] = false; + $this->kt_y00 = ''; + $this->keep_block_together = 0; + + $this->blockContext++; + $currblk['blockContext'] = $this->blockContext; + + list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->GetFloatDivInfo($this->blklvl-1); + + // DIV is too narrow for text to fit! + $maxw = $container_w - $l_width - $r_width; + if (($setwidth + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) > $maxw || ($maxw - ($currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr)) < (2*$this->GetCharWidth('W',false))) { + // Too narrow to fit - try to move down past L or R float + if ($l_max < $r_max && ($setwidth + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) <= ($container_w - $r_width) && (($container_w - $r_width) - ($currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr)) > (2*$this->GetCharWidth('W',false))) { + $this->ClearFloats('LEFT', $this->blklvl-1); + } + else if ($r_max < $l_max && ($setwidth + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) <= ($container_w - $l_width) && (($container_w - $l_width) - ($currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr)) > (2*$this->GetCharWidth('W',false))) { + $this->ClearFloats('RIGHT', $this->blklvl-1); + } + else { $this->ClearFloats('BOTH', $this->blklvl-1); } + list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->GetFloatDivInfo($this->blklvl-1); + } + + if ($r_exists) { $currblk['margin_right'] += $r_width; } + + $currblk['float'] = 'R'; + $currblk['float_start_y'] = $this->y; + if ($currblk['css_set_width']) { + $currblk['margin_left'] = $container_w - ($setwidth + $bdl + $pdl + $bdr + $pdr + $currblk['margin_right']); + $currblk['float_width'] = ($setwidth + $bdl + $pdl + $bdr + $pdr + $currblk['margin_right']); + } + else { + // *** If no width set - would need to buffer and keep track of max width, then Right-align if not full width + // and do borders and backgrounds - For now - just set to maximum width left + + if ($l_exists) { $currblk['margin_left'] += $l_width; } + $currblk['css_set_width'] = $container_w - ($currblk['margin_left'] + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr); + + $currblk['float_width'] = ($currblk['css_set_width'] + $bdl + $pdl + $bdr + $pdr + $currblk['margin_right']); + } + } + else if (isset($properties['FLOAT']) && strtoupper($properties['FLOAT']) == 'LEFT' && !$this->ColActive) { + // Cancel Keep-Block-together + $currblk['keep_block_together'] = false; + $this->kt_y00 = ''; + $this->keep_block_together = 0; + + $this->blockContext++; + $currblk['blockContext'] = $this->blockContext; + + list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->GetFloatDivInfo($this->blklvl-1); + + // DIV is too narrow for text to fit! + $maxw = $container_w - $l_width - $r_width; + if (($setwidth + $currblk['margin_left'] + $bdl + $pdl + $bdr + $pdr) > $maxw || ($maxw - ($currblk['margin_left'] + $bdl + $pdl + $bdr + $pdr)) < (2*$this->GetCharWidth('W',false))) { + // Too narrow to fit - try to move down past L or R float + if ($l_max < $r_max && ($setwidth + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) <= ($container_w - $r_width) && (($container_w - $r_width) - ($currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr)) > (2*$this->GetCharWidth('W',false))) { + $this->ClearFloats('LEFT', $this->blklvl-1); + } + else if ($r_max < $l_max && ($setwidth + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) <= ($container_w - $l_width) && (($container_w - $l_width) - ($currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr)) > (2*$this->GetCharWidth('W',false))) { + $this->ClearFloats('RIGHT', $this->blklvl-1); + } + else { $this->ClearFloats('BOTH', $this->blklvl-1); } + list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->GetFloatDivInfo($this->blklvl-1); + } + + if ($l_exists) { $currblk['margin_left'] += $l_width; } + + $currblk['float'] = 'L'; + $currblk['float_start_y'] = $this->y; + if ($setwidth) { + $currblk['margin_right'] = $container_w - ($setwidth + $bdl + $pdl + $bdr + $pdr + $currblk['margin_left']); + $currblk['float_width'] = ($setwidth + $bdl + $pdl + $bdr + $pdr + $currblk['margin_left']); + } + else { + // *** If no width set - would need to buffer and keep track of max width, then Right-align if not full width + // and do borders and backgrounds - For now - just set to maximum width left + + if ($r_exists) { $currblk['margin_right'] += $r_width; } + $currblk['css_set_width'] = $container_w - ($currblk['margin_left'] + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr); + + $currblk['float_width'] = ($currblk['css_set_width'] + $bdl + $pdl + $bdr + $pdr + $currblk['margin_left']); + } + } + + else { + // Don't allow overlap - if floats present - adjust padding to avoid overlap with Floats + list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->GetFloatDivInfo($this->blklvl-1); + $maxw = $container_w - $l_width - $r_width; + if (($setwidth + $currblk['margin_left'] + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) > $maxw || ($maxw - ($currblk['margin_right'] + $currblk['margin_left'] + $bdl + $pdl + $bdr + $pdr)) < (2*$this->GetCharWidth('W',false))) { + // Too narrow to fit - try to move down past L or R float + if ($l_max < $r_max && ($setwidth + $currblk['margin_left'] + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) <= ($container_w - $r_width) && (($container_w - $r_width) - ($currblk['margin_right'] + $currblk['margin_left'] + $bdl + $pdl + $bdr + $pdr)) > (2*$this->GetCharWidth('W',false))) { + $this->ClearFloats('LEFT', $this->blklvl-1); + } + else if ($r_max < $l_max && ($setwidth + $currblk['margin_left'] + $currblk['margin_right'] + $bdl + $pdl + $bdr + $pdr) <= ($container_w - $l_width) && (($container_w - $l_width) - ($currblk['margin_right'] + $currblk['margin_left'] + $bdl + $pdl + $bdr + $pdr)) > (2*$this->GetCharWidth('W',false))) { + $this->ClearFloats('RIGHT', $this->blklvl-1); + } + else { $this->ClearFloats('BOTH', $this->blklvl-1); } + list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->GetFloatDivInfo($this->blklvl-1); + } + if ($r_exists) { $currblk['padding_right'] = max(($r_width-$currblk['margin_right']-$bdr), $pdr); } + if ($l_exists) { $currblk['padding_left'] = max(($l_width-$currblk['margin_left']-$bdl), $pdl); } + } +/*-- END CSS-FLOAT --*/ + + +/*-- BORDER-RADIUS --*/ + // Automatically increase padding if required for border-radius + if ($this->autoPadding && !$this->ColActive && !$this->keep_block_together) { + if ($currblk['border_radius_TL_H']>$currblk['padding_left'] && $currblk['border_radius_TL_V']>$currblk['padding_top']) { + if ($currblk['border_radius_TL_H']>$currblk['border_radius_TL_V']) { + $this->_borderPadding($currblk['border_radius_TL_H'],$currblk['border_radius_TL_V'], $currblk['padding_left'], $currblk['padding_top']); + } + else { + $this->_borderPadding($currblk['border_radius_TL_V'],$currblk['border_radius_TL_H'], $currblk['padding_top'], $currblk['padding_left']); + } + } + if ($currblk['border_radius_TR_H']>$currblk['padding_right'] && $currblk['border_radius_TR_V']>$currblk['padding_top']) { + if ($currblk['border_radius_TR_H']>$currblk['border_radius_TR_V']) { + $this->_borderPadding($currblk['border_radius_TR_H'],$currblk['border_radius_TR_V'], $currblk['padding_right'], $currblk['padding_top']); + } + else { + $this->_borderPadding($currblk['border_radius_TR_V'],$currblk['border_radius_TR_H'], $currblk['padding_top'], $currblk['padding_right']); + } + } + if ($currblk['border_radius_BL_H']>$currblk['padding_left'] && $currblk['border_radius_BL_V']>$currblk['padding_bottom']) { + if ($currblk['border_radius_BL_H']>$currblk['border_radius_BL_V']) { + $this->_borderPadding($currblk['border_radius_BL_H'],$currblk['border_radius_BL_V'], $currblk['padding_left'], $currblk['padding_bottom']); + } + else { + $this->_borderPadding($currblk['border_radius_BL_V'],$currblk['border_radius_BL_H'], $currblk['padding_bottom'], $currblk['padding_left']); + } + } + if ($currblk['border_radius_BR_H']>$currblk['padding_right'] && $currblk['border_radius_BR_V']>$currblk['padding_bottom']) { + if ($currblk['border_radius_BR_H']>$currblk['border_radius_BR_V']) { + $this->_borderPadding($currblk['border_radius_BR_H'],$currblk['border_radius_BR_V'], $currblk['padding_right'], $currblk['padding_bottom']); + } + else { + $this->_borderPadding($currblk['border_radius_BR_V'],$currblk['border_radius_BR_H'], $currblk['padding_bottom'], $currblk['padding_right']); + } + } + } +/*-- END BORDER-RADIUS --*/ + + + // Hanging indent - if negative indent: ensure padding is >= indent + if(!isset($currblk['text_indent'])) { $currblk['text_indent'] = null; } + if(!isset($currblk['inner_width'])) { $currblk['inner_width'] = null; } + $cbti = $this->ConvertSize($currblk['text_indent'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + if ($cbti < 0) { + $hangind = -($cbti); + if ($currblk['direction'] == 'rtl') { // *RTL* + $currblk['padding_right'] = max($currblk['padding_right'],$hangind); // *RTL* + } // *RTL* + else { // *RTL* + $currblk['padding_left'] = max($currblk['padding_left'],$hangind); + } // *RTL* + } + + if (isset($currblk['css_set_width'])) { + if (isset($properties['MARGIN-LEFT']) && isset($properties['MARGIN-RIGHT']) && strtolower($properties['MARGIN-LEFT'])=='auto' && strtolower($properties['MARGIN-RIGHT'])=='auto') { + // Try to reduce margins to accomodate - if still too wide, set margin-right/left=0 (reduces width) + $anyextra = $prevblk['inner_width'] - ($currblk['css_set_width'] + $currblk['border_left']['w'] + $currblk['padding_left'] + $currblk['border_right']['w'] + $currblk['padding_right']); + if ($anyextra>0) { + $currblk['margin_left'] = $currblk['margin_right'] = $anyextra /2; + } + else { + $currblk['margin_left'] = $currblk['margin_right'] = 0; + } + } + else if (isset($properties['MARGIN-LEFT']) && strtolower($properties['MARGIN-LEFT'])=='auto') { + // Try to reduce margin-left to accomodate - if still too wide, set margin-left=0 (reduces width) + $currblk['margin_left'] = $prevblk['inner_width'] - ($currblk['css_set_width'] + $currblk['border_left']['w'] + $currblk['padding_left'] + $currblk['border_right']['w'] + $currblk['padding_right'] + $currblk['margin_right']); + if ($currblk['margin_left'] < 0) { + $currblk['margin_left'] = 0; + } + } + else if (isset($properties['MARGIN-RIGHT']) && strtolower($properties['MARGIN-RIGHT'])=='auto') { + // Try to reduce margin-right to accomodate - if still too wide, set margin-right=0 (reduces width) + $currblk['margin_right'] = $prevblk['inner_width'] - ($currblk['css_set_width'] + $currblk['border_left']['w'] + $currblk['padding_left'] + $currblk['border_right']['w'] + $currblk['padding_right'] + $currblk['margin_left']); + if ($currblk['margin_right'] < 0) { + $currblk['margin_right'] = 0; + } + } + else { + if ($currblk['direction'] == 'rtl') { // *RTL* + // Try to reduce margin-left to accomodate - if still too wide, set margin-left=0 (reduces width) + $currblk['margin_left'] = $prevblk['inner_width'] - ($currblk['css_set_width'] + $currblk['border_left']['w'] + $currblk['padding_left'] + $currblk['border_right']['w'] + $currblk['padding_right'] + $currblk['margin_right']); // *RTL* + if ($currblk['margin_left'] < 0) { // *RTL* + $currblk['margin_left'] = 0; // *RTL* + } // *RTL* + } // *RTL* + else { // *RTL* + // Try to reduce margin-right to accomodate - if still too wide, set margin-right=0 (reduces width) + $currblk['margin_right'] = $prevblk['inner_width'] - ($currblk['css_set_width'] + $currblk['border_left']['w'] + $currblk['padding_left'] + $currblk['border_right']['w'] + $currblk['padding_right'] + $currblk['margin_left']); + if ($currblk['margin_right'] < 0) { + $currblk['margin_right'] = 0; + } + } // *RTL* + } + } + + $currblk['outer_left_margin'] = $prevblk['outer_left_margin'] + $currblk['margin_left'] + $prevblk['border_left']['w'] + $prevblk['padding_left']; + $currblk['outer_right_margin'] = $prevblk['outer_right_margin'] + $currblk['margin_right'] + $prevblk['border_right']['w'] + $prevblk['padding_right']; + + $currblk['width'] = $this->pgwidth - ($currblk['outer_right_margin'] + $currblk['outer_left_margin']); + $currblk['inner_width'] = $currblk['width'] - ($currblk['border_left']['w'] + $currblk['padding_left'] + $currblk['border_right']['w'] + $currblk['padding_right']); + + // Check DIV is not now too narrow to fit text + $mw = 2*$this->GetCharWidth('W',false); + if ($currblk['inner_width'] < $mw) { + $currblk['padding_left'] = 0; + $currblk['padding_right'] = 0; + $currblk['border_left']['w'] = 0.2; + $currblk['border_right']['w'] = 0.2; + $currblk['margin_left'] = 0; + $currblk['margin_right'] = 0; + $currblk['outer_left_margin'] = $prevblk['outer_left_margin'] + $currblk['margin_left'] + $prevblk['border_left']['w'] + $prevblk['padding_left']; + $currblk['outer_right_margin'] = $prevblk['outer_right_margin'] + $currblk['margin_right'] + $prevblk['border_right']['w'] + $prevblk['padding_right']; + $currblk['width'] = $this->pgwidth - ($currblk['outer_right_margin'] + $currblk['outer_left_margin']); + $currblk['inner_width'] = $this->pgwidth - ($currblk['outer_right_margin'] + $currblk['outer_left_margin'] + $currblk['border_left']['w'] + $currblk['padding_left'] + $currblk['border_right']['w'] + $currblk['padding_right']); +// if ($currblk['inner_width'] < $mw) { $this->Error("DIV is too narrow for text to fit!"); } + } + + $this->x = $this->lMargin + $currblk['outer_left_margin']; + +/*-- BACKGROUNDS --*/ + if (isset($properties['BACKGROUND-IMAGE']) && $properties['BACKGROUND-IMAGE'] && !$this->kwt && !$this->ColActive && !$this->keep_block_together) { + $ret = $this->SetBackground($properties, $currblk['inner_width']); + if ($ret) { $currblk['background-image'] = $ret; } + } +/*-- END BACKGROUNDS --*/ + +/*-- TABLES --*/ + if ($this->use_kwt && isset($attr['KEEP-WITH-TABLE']) && !$this->ColActive && !$this->keep_block_together) { + $this->kwt = true; + $this->kwt_y0 = $this->y; + $this->kwt_x0 = $this->x; + $this->kwt_height = 0; + $this->kwt_buffer = array(); + $this->kwt_Links = array(); + $this->kwt_Annots = array(); + $this->kwt_moved = false; + $this->kwt_saved = false; + $this->kwt_Reference = array(); + $this->kwt_BMoutlines = array(); + $this->kwt_toc = array(); + } + else { +/*-- END TABLES --*/ + $this->kwt = false; + } // *TABLES* + + //Save x,y coords in case we need to print borders... + $currblk['y0'] = $this->y; + $currblk['x0'] = $this->x; + $currblk['startpage'] = $this->page; + $this->oldy = $this->y; + + $this->lastblocklevelchange = 1 ; + + break; + + case 'HR': + // Added mPDF 3.0 Float DIV - CLEAR + if (isset($attr['STYLE'])) { + $properties = $this->cssmgr->readInlineCSS($attr['STYLE']); + if (isset($properties['CLEAR'])) { $this->ClearFloats(strtoupper($properties['CLEAR']),$this->blklvl); } // *CSS-FLOAT* + } + + $this->ignorefollowingspaces = true; + + $objattr = array(); + $objattr['margin_top'] = 0; + $objattr['margin_bottom'] = 0; + $objattr['margin_left'] = 0; + $objattr['margin_right'] = 0; + $objattr['width'] = 0; + $objattr['height'] = 0; + $objattr['border_top']['w'] = 0; + $objattr['border_bottom']['w'] = 0; + $objattr['border_left']['w'] = 0; + $objattr['border_right']['w'] = 0; + $properties = $this->cssmgr->MergeCSS('',$tag,$attr); + if (isset($properties['MARGIN-TOP'])) { $objattr['margin_top'] = $this->ConvertSize($properties['MARGIN-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-BOTTOM'])) { $objattr['margin_bottom'] = $this->ConvertSize($properties['MARGIN-BOTTOM'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['WIDTH'])) { $objattr['width'] = $this->ConvertSize($properties['WIDTH'],$this->blk[$this->blklvl]['inner_width']); } + else if(isset($attr['WIDTH']) && $attr['WIDTH'] != '') $objattr['width'] = $this->ConvertSize($attr['WIDTH'],$this->blk[$this->blklvl]['inner_width']); + if (isset($properties['TEXT-ALIGN'])) { $objattr['align'] = $align[strtolower($properties['TEXT-ALIGN'])]; } + else if(isset($attr['ALIGN']) && $attr['ALIGN'] != '') $objattr['align'] = $align[strtolower($attr['ALIGN'])]; + + if (isset($properties['MARGIN-LEFT']) && strtolower($properties['MARGIN-LEFT'])=='auto') { + $objattr['align'] = 'R'; + } + if (isset($properties['MARGIN-RIGHT']) && strtolower($properties['MARGIN-RIGHT'])=='auto') { + $objattr['align'] = 'L'; + if (isset($properties['MARGIN-RIGHT']) && strtolower($properties['MARGIN-RIGHT'])=='auto' && isset($properties['MARGIN-LEFT']) && strtolower($properties['MARGIN-LEFT'])=='auto') { + $objattr['align'] = 'C'; + } + } + if (isset($properties['COLOR'])) { $objattr['color'] = $this->ConvertColor($properties['COLOR']); } + else if(isset($attr['COLOR']) && $attr['COLOR'] != '') $objattr['color'] = $this->ConvertColor($attr['COLOR']); + if (isset($properties['HEIGHT'])) { $objattr['linewidth'] = $this->ConvertSize($properties['HEIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + + +/*-- TABLES --*/ + if ($this->tableLevel) { + $objattr['W-PERCENT'] = 100; + if (isset($properties['WIDTH']) && stristr($properties['WIDTH'],'%')) { + $properties['WIDTH'] += 0; //make "90%" become simply "90" + $objattr['W-PERCENT'] = $properties['WIDTH']; + } + if (isset($attr['WIDTH']) && stristr($attr['WIDTH'],'%')) { + $attr['WIDTH'] += 0; //make "90%" become simply "90" + $objattr['W-PERCENT'] = $attr['WIDTH']; + } + } +/*-- END TABLES --*/ + + $objattr['type'] = 'hr'; + $objattr['height'] = $objattr['linewidth'] + $objattr['margin_top'] + $objattr['margin_bottom']; + $e = "\xbb\xa4\xactype=image,objattr=".serialize($objattr)."\xbb\xa4\xac"; + + // Clear properties - tidy up + $properties = array(); + +/*-- TABLES --*/ + // Output it to buffers + if ($this->tableLevel) { + if (!isset($this->cell[$this->row][$this->col]['maxs'])) { + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + elseif($this->cell[$this->row][$this->col]['maxs'] < $this->cell[$this->row][$this->col]['s']) { + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + $this->cell[$this->row][$this->col]['s'] = 0 ;// reset + $this->_saveCellTextBuffer($e, $this->HREF); + } + else { +/*-- END TABLES --*/ + $this->_saveTextBuffer($e, $this->HREF); + } // *TABLES* + + break; + + +/*-- BARCODES --*/ + + case 'BARCODE': + if(isset($attr['CODE']) && $attr['CODE']) { + $objattr = array(); + $objattr['margin_top'] = 0; + $objattr['margin_bottom'] = 0; + $objattr['margin_left'] = 0; + $objattr['margin_right'] = 0; + $objattr['padding_top'] = 0; + $objattr['padding_bottom'] = 0; + $objattr['padding_left'] = 0; + $objattr['padding_right'] = 0; + $objattr['width'] = 0; + $objattr['height'] = 0; + $objattr['border_top']['w'] = 0; + $objattr['border_bottom']['w'] = 0; + $objattr['border_left']['w'] = 0; + $objattr['border_right']['w'] = 0; + $objattr['code'] = $attr['CODE']; + + if(isset($attr['TYPE'])) { + $objattr['btype'] = trim(strtoupper($attr['TYPE'])); + } + else { $objattr['btype'] = 'EAN13'; } // default + if (preg_match('/^(EAN13|ISBN|ISSN|EAN8|UPCA|UPCE)P([25])$/',$objattr['btype'],$m)) { + $objattr['btype'] = $m[1]; + $objattr['bsupp'] = $m[2]; + if (preg_match('/^(\S+)\s+(.*)$/',$objattr['code'],$mm)) { + $objattr['code'] = $mm[1]; + $objattr['bsupp_code'] = $mm[2]; + } + } + else { $objattr['bsupp'] = 0; } + + if(isset($attr['TEXT']) && $attr['TEXT']==1) { $objattr['showtext'] = 1; } + else { $objattr['showtext'] = 0; } + if(isset($attr['SIZE']) && $attr['SIZE']>0) { $objattr['bsize'] = $attr['SIZE']; } + else { $objattr['bsize'] = 1; } + if(isset($attr['HEIGHT']) && $attr['HEIGHT']>0) { $objattr['bheight'] = $attr['HEIGHT']; } + else { $objattr['bheight'] = 1; } + if(isset($attr['PR']) && $attr['PR']>0) { $objattr['pr_ratio'] = $attr['PR']; } + else { $objattr['pr_ratio'] = ''; } + $properties = $this->cssmgr->MergeCSS('',$tag,$attr); + if(isset($properties ['DISPLAY']) && strtolower($properties ['DISPLAY'])=='none') { + return; + } + if (isset($properties['MARGIN-TOP'])) { $objattr['margin_top']=$this->ConvertSize($properties['MARGIN-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-BOTTOM'])) { $objattr['margin_bottom'] = $this->ConvertSize($properties['MARGIN-BOTTOM'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-LEFT'])) { $objattr['margin_left'] = $this->ConvertSize($properties['MARGIN-LEFT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-RIGHT'])) { $objattr['margin_right'] = $this->ConvertSize($properties['MARGIN-RIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + + if (isset($properties['PADDING-TOP'])) { $objattr['padding_top']=$this->ConvertSize($properties['PADDING-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['PADDING-BOTTOM'])) { $objattr['padding_bottom'] = $this->ConvertSize($properties['PADDING-BOTTOM'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['PADDING-LEFT'])) { $objattr['padding_left'] = $this->ConvertSize($properties['PADDING-LEFT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['PADDING-RIGHT'])) { $objattr['padding_right'] = $this->ConvertSize($properties['PADDING-RIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + + if (isset($properties['BORDER-TOP'])) { $objattr['border_top'] = $this->border_details($properties['BORDER-TOP']); } + if (isset($properties['BORDER-BOTTOM'])) { $objattr['border_bottom'] = $this->border_details($properties['BORDER-BOTTOM']); } + if (isset($properties['BORDER-LEFT'])) { $objattr['border_left'] = $this->border_details($properties['BORDER-LEFT']); } + if (isset($properties['BORDER-RIGHT'])) { $objattr['border_right'] = $this->border_details($properties['BORDER-RIGHT']); } + + if (isset($properties['VERTICAL-ALIGN'])) { $objattr['vertical-align'] = $align[strtolower($properties['VERTICAL-ALIGN'])]; } + if (isset($properties['COLOR']) && $properties['COLOR'] != '') { $objattr['color'] = $this->ConvertColor($properties['COLOR']); } + else { $objattr['color'] = false; } + if (isset($properties['BACKGROUND-COLOR']) && $properties['BACKGROUND-COLOR'] != '') { $objattr['bgcolor'] = $this->ConvertColor($properties['BACKGROUND-COLOR']); } + else { $objattr['bgcolor'] = false; } + + if (!class_exists('PDFBarcode', false)) { + include(_MPDF_PATH.'classes/barcode.php'); + } + $this->barcode = new PDFBarcode(); + + if ($objattr['btype'] == 'EAN13' || $objattr['btype'] == 'ISBN' || $objattr['btype'] == 'ISSN' || $objattr['btype'] == 'UPCA' || $objattr['btype'] == 'UPCE' || $objattr['btype'] == 'EAN8') { + $code = preg_replace('/\-/','',$objattr['code']); + if ($objattr['btype'] == 'ISSN' || $objattr['btype'] == 'ISBN') { + $arrcode = $this->barcode->getBarcodeArray($code, 'EAN13'); + } + else { $arrcode = $this->barcode->getBarcodeArray($code, $objattr['btype'] ); } + if ($arrcode === false) { $this->Error('Error in barcode string.'); } + + if ($objattr['bsupp'] == 2 || $objattr['bsupp'] == 5) { // EAN-2 or -5 Supplement + $supparrcode = $this->barcode->getBarcodeArray($objattr['bsupp_code'], 'EAN'.$objattr['bsupp'] ); + $w = ($arrcode["maxw"] + $arrcode['lightmL'] + $arrcode['lightmR'] + $supparrcode["maxw"] + $supparrcode['sepM']) * $arrcode['nom-X'] * $objattr['bsize']; + } + else { + $w = ($arrcode["maxw"] + $arrcode['lightmL'] + $arrcode['lightmR']) * $arrcode['nom-X'] * $objattr['bsize']; + } + $h = $arrcode['nom-H'] * $objattr['bsize'] * $objattr['bheight']; + // Add height for ISBN string + margin from top of bars + if (($objattr['showtext'] && $objattr['btype'] == 'EAN13') || $objattr['btype'] == 'ISBN' || $objattr['btype'] == 'ISSN') { + $tisbnm = 1.5 * $objattr['bsize']; // Top margin between TOP TEXT (isbn - if shown) & bars + $isbn_fontsize = 2.1 * $objattr['bsize']; + $h += $isbn_fontsize + $tisbnm ; + } + } + // QR-code + else if ($objattr['btype'] == 'QR') { + $w = $h = $objattr['bsize']*25; // Factor of 25mm (default) + $objattr['errorlevel'] = 'L'; + if (isset($attr['ERROR'])) { $objattr['errorlevel'] = $attr['ERROR']; } + } + else if ($objattr['btype'] == 'IMB' || $objattr['btype'] == 'RM4SCC' || $objattr['btype'] == 'KIX' || $objattr['btype'] == 'POSTNET' || $objattr['btype'] == 'PLANET') { + $arrcode = $this->barcode->getBarcodeArray($objattr['code'], $objattr['btype'] ); + if ($arrcode === false) { $this->Error('Error in barcode string.'); } + $w = ($arrcode["maxw"] * $arrcode['nom-X'] * $objattr['bsize']) + $arrcode['quietL'] + $arrcode['quietR']; + $h = ($arrcode['nom-H'] * $objattr['bsize']) + (2*$arrcode['quietTB']); + } + else if (in_array($objattr['btype'], array('C128A','C128B','C128C','EAN128A','EAN128B','EAN128C','C39','C39+','C39E','C39E+','S25','S25+','I25','I25+','I25B','I25B+','C93','MSI','MSI+','CODABAR','CODE11'))) { + $arrcode = $this->barcode->getBarcodeArray($objattr['code'], $objattr['btype'], $objattr['pr_ratio'] ); + if ($arrcode === false) { $this->Error('Error in barcode string.'); } + $w = ($arrcode["maxw"] + $arrcode['lightmL'] + $arrcode['lightmR']) * $arrcode['nom-X'] * $objattr['bsize']; + $h = ((2*$arrcode['lightTB'] * $arrcode['nom-X']) + $arrcode['nom-H']) * $objattr['bsize'] * $objattr['bheight']; + } + else { break; } + + $extraheight = $objattr['padding_top'] + $objattr['padding_bottom'] + $objattr['margin_top'] + $objattr['margin_bottom'] + $objattr['border_top']['w'] + $objattr['border_bottom']['w']; + $extrawidth = $objattr['padding_left'] + $objattr['padding_right'] + $objattr['margin_left'] + $objattr['margin_right'] + $objattr['border_left']['w'] + $objattr['border_right']['w']; + + $objattr['type'] = 'barcode'; + $objattr['height'] = $h + $extraheight; + $objattr['width'] = $w + $extrawidth; + $objattr['barcode_height'] = $h; + $objattr['barcode_width'] = $w; +/*-- CSS-IMAGE-FLOAT --*/ + if (!$this->ColActive && !$this->tableLevel && !$this->listlvl && !$this->kwt && !$this->keep_block_together) { + if (isset($properties['FLOAT']) && (strtoupper($properties['FLOAT']) == 'RIGHT' || strtoupper($properties['FLOAT']) == 'LEFT')) { + $objattr['float'] = substr(strtoupper($properties['FLOAT']),0,1); + } + } +/*-- END CSS-IMAGE-FLOAT --*/ + + $e = "\xbb\xa4\xactype=barcode,objattr=".serialize($objattr)."\xbb\xa4\xac"; + + // Clear properties - tidy up + $properties = array(); + +/*-- TABLES --*/ + // Output it to buffers + if ($this->tableLevel) { + $this->_saveCellTextBuffer($e, $this->HREF); + $this->cell[$this->row][$this->col]['s'] += $objattr['width'] ; + } + else { +/*-- END TABLES --*/ + $this->_saveTextBuffer($e, $this->HREF); + + } // *TABLES* + } + break; +/*-- END BARCODES --*/ + + + // *********** FORM ELEMENTS ******************** + +/*-- FORMS --*/ + case 'SELECT': + $this->lastoptionaltag = ''; // Save current HTML specified optional endtag + $this->InlineProperties[$tag] = $this->saveInlineProperties(); + $properties = $this->cssmgr->MergeCSS('',$tag,$attr); + if (isset($properties['FONT-FAMILY'])) { + $this->SetFont($properties['FONT-FAMILY'],$this->FontStyle,0,false); + } + if (isset($properties['FONT-SIZE'])) { + $mmsize = $this->ConvertSize($properties['FONT-SIZE'],$this->default_font_size/_MPDFK); + $this->SetFontSize($mmsize*_MPDFK,false); + } + if (isset($attr['SPELLCHECK']) && strtolower($attr['SPELLCHECK'])=='true') { + $this->selectoption['SPELLCHECK'] = true; + } + + if (isset($properties['COLOR'])) { $this->selectoption['COLOR'] = $this->ConvertColor($properties['COLOR']); } + $this->specialcontent = "type=select"; + if(isset($attr['DISABLED'])) { $this->selectoption['DISABLED'] = $attr['DISABLED']; } + if(isset($attr['READONLY'])) { $this->selectoption['READONLY'] = $attr['READONLY']; } + if(isset($attr['REQUIRED'])) { $this->selectoption['REQUIRED'] = $attr['REQUIRED']; } + if(isset($attr['EDITABLE'])) { $this->selectoption['EDITABLE'] = $attr['EDITABLE']; } + if(isset($attr['TITLE'])) { $this->selectoption['TITLE'] = $attr['TITLE']; } + if(isset($attr['MULTIPLE'])) { $this->selectoption['MULTIPLE'] = $attr['MULTIPLE']; } + if(isset($attr['SIZE']) && $attr['SIZE']>1) { $this->selectoption['SIZE'] = $attr['SIZE']; } + if ($this->useActiveForms) { + if(isset($attr['NAME'])) { $this->selectoption['NAME'] = $attr['NAME']; } + if (isset($attr['ONCHANGE'])) { $this->selectoption['ONCHANGE'] = $attr['ONCHANGE']; } + } + + $properties = array(); + break; + + case 'OPTION': + $this->lastoptionaltag = 'OPTION'; // Save current HTML specified optional endtag + $this->selectoption['ACTIVE'] = true; + $this->selectoption['currentSEL'] = false; + if (empty($this->selectoption)) { + $this->selectoption['MAXWIDTH'] = ''; + $this->selectoption['SELECTED'] = ''; + } + if (isset($attr['SELECTED'])) { + $this->selectoption['SELECTED'] = ''; + $this->selectoption['currentSEL'] = true; + } + if(isset($attr['VALUE'])) { + $attr['VALUE'] = strcode2utf($attr['VALUE']); + $attr['VALUE'] = $this->lesser_entity_decode($attr['VALUE']); + if ($this->onlyCoreFonts) + $attr['VALUE'] = mb_convert_encoding($attr['VALUE'], $this->mb_enc,'UTF-8'); + } + $this->selectoption['currentVAL'] = $attr['VALUE']; + break; + + case 'TEXTAREA': + $objattr = array(); + $objattr['margin_top'] = 0; + $objattr['margin_bottom'] = 0; + $objattr['margin_left'] = 0; + $objattr['margin_right'] = 0; + $objattr['width'] = 0; + $objattr['height'] = 0; + $objattr['border_top']['w'] = 0; + $objattr['border_bottom']['w'] = 0; + $objattr['border_left']['w'] = 0; + $objattr['border_right']['w'] = 0; + if(isset($attr['DISABLED'])) { $objattr['disabled'] = true; } + if(isset($attr['READONLY'])) { $objattr['readonly'] = true; } + if(isset($attr['REQUIRED'])) { $objattr['required'] = true; } + if(isset($attr['SPELLCHECK']) && strtolower($attr['SPELLCHECK'])=='true') { $objattr['spellcheck'] = true; } + if(isset($attr['TITLE'])) { $objattr['title'] = $attr['TITLE']; } + if ($this->onlyCoreFonts) + $objattr['title'] = mb_convert_encoding($objattr['title'], $this->mb_enc,'UTF-8'); + if ($this->useActiveForms) { + if(isset($attr['NAME'])) { $objattr['fieldname'] = $attr['NAME']; } + $this->form->form_element_spacing['textarea']['outer']['v'] = 0; + $this->form->form_element_spacing['textarea']['inner']['v'] = 0; + if (isset($attr['ONCALCULATE'])) { $objattr['onCalculate'] = $attr['ONCALCULATE']; } + else if (isset($attr['ONCHANGE'])) { $objattr['onCalculate'] = $attr['ONCHANGE']; } + if (isset($attr['ONVALIDATE'])) { $objattr['onValidate'] = $attr['ONVALIDATE']; } + if (isset($attr['ONKEYSTROKE'])) { $objattr['onKeystroke'] = $attr['ONKEYSTROKE']; } + if (isset($attr['ONFORMAT'])) { $objattr['onFormat'] = $attr['ONFORMAT']; } + } + $this->InlineProperties[$tag] = $this->saveInlineProperties(); + $properties = $this->cssmgr->MergeCSS('',$tag,$attr); + if (isset($properties['FONT-FAMILY'])) { + $this->SetFont($properties['FONT-FAMILY'],'',0,false); + } + if (isset($properties['FONT-SIZE'])) { + $mmsize = $this->ConvertSize($properties['FONT-SIZE'],$this->default_font_size/_MPDFK); + $this->SetFontSize($mmsize*_MPDFK,false); + } + if (isset($properties['COLOR'])) { $objattr['color'] = $this->ConvertColor($properties['COLOR']); } + $objattr['fontfamily'] = $this->FontFamily; + $objattr['fontsize'] = $this->FontSizePt; + if ($this->useActiveForms) { + if(isset($properties['TEXT-ALIGN'])) { $objattr['text_align'] = $align[strtolower($properties['TEXT-ALIGN'])]; } + else if(isset($attr['ALIGN'])) { $objattr['text_align'] = $align[strtolower($attr['ALIGN'])]; } + if (isset($properties['OVERFLOW']) && strtolower($properties['OVERFLOW'])=='hidden') { $objattr['donotscroll'] = true; } + if (isset($properties['BORDER-TOP-COLOR'])) { $objattr['border-col'] = $this->ConvertColor($properties['BORDER-TOP-COLOR']); } + if (isset($properties['BACKGROUND-COLOR'])) { $objattr['background-col'] = $this->ConvertColor($properties['BACKGROUND-COLOR']); } + } + $this->SetLineHeight('',$this->form->textarea_lineheight); + $formLineHeight = $this->lineheight; + + $w = 0; + $h = 0; + if(isset($properties['WIDTH'])) $w = $this->ConvertSize($properties['WIDTH'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + if(isset($properties['HEIGHT'])) $h = $this->ConvertSize($properties['HEIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + if ($properties['VERTICAL-ALIGN']) { $objattr['vertical-align'] = $align[strtolower($properties['VERTICAL-ALIGN'])]; } + + $colsize = 20; //HTML default value + $rowsize = 2; //HTML default value + if (isset($attr['COLS'])) $colsize = intval($attr['COLS']); + if (isset($attr['ROWS'])) $rowsize = intval($attr['ROWS']); + + $charsize = $this->GetCharWidth('w',false); + if ($w) { $colsize = round(($w-($this->form->form_element_spacing['textarea']['outer']['h']*2)-($this->form->form_element_spacing['textarea']['inner']['h']*2))/$charsize); } + if ($h) { $rowsize = round(($h-($this->form->form_element_spacing['textarea']['outer']['v']*2)-($this->form->form_element_spacing['textarea']['inner']['v']*2))/$formLineHeight); } + + $objattr['type'] = 'textarea'; + $objattr['width'] = ($colsize * $charsize) + ($this->form->form_element_spacing['textarea']['outer']['h']*2)+($this->form->form_element_spacing['textarea']['inner']['h']*2); + $objattr['height'] = ($rowsize * $formLineHeight) + ($this->form->form_element_spacing['textarea']['outer']['v']*2)+($this->form->form_element_spacing['textarea']['inner']['v']*2); + $objattr['rows'] = $rowsize; + $objattr['cols'] = $colsize; + + $this->specialcontent = serialize($objattr); + + if ($this->tableLevel) { // *TABLES* + $this->cell[$this->row][$this->col]['s'] += $objattr['width'] ; // *TABLES* + } // *TABLES* + + // Clear properties - tidy up + $properties = array(); + break; + + + + // *********** FORM - INPUT ******************** + + case 'INPUT': + if (!isset($attr['TYPE'])) $attr['TYPE'] == 'TEXT'; + $objattr = array(); + $objattr['margin_top'] = 0; + $objattr['margin_bottom'] = 0; + $objattr['margin_left'] = 0; + $objattr['margin_right'] = 0; + $objattr['width'] = 0; + $objattr['height'] = 0; + $objattr['border_top']['w'] = 0; + $objattr['border_bottom']['w'] = 0; + $objattr['border_left']['w'] = 0; + $objattr['border_right']['w'] = 0; + $objattr['type'] = 'input'; + if(isset($attr['DISABLED'])) { $objattr['disabled'] = true; } + if(isset($attr['READONLY'])) { $objattr['readonly'] = true; } + if(isset($attr['REQUIRED'])) { $objattr['required'] = true; } + if(isset($attr['SPELLCHECK']) && strtolower($attr['SPELLCHECK'])=='true') { $objattr['spellcheck'] = true; } + if(isset($attr['TITLE'])) { $objattr['title'] = $attr['TITLE']; } + else if(isset($attr['ALT'])) { $objattr['title'] = $attr['ALT']; } + else $objattr['title'] = ''; + $objattr['title'] = strcode2utf($objattr['title']); + $objattr['title'] = $this->lesser_entity_decode($objattr['title']); + if ($this->onlyCoreFonts) + $objattr['title'] = mb_convert_encoding($objattr['title'], $this->mb_enc,'UTF-8'); + if ($this->useActiveForms) { + if(isset($attr['NAME'])) { $objattr['fieldname'] = $attr['NAME']; } + } + if(isset($attr['VALUE'])) { + $attr['VALUE'] = strcode2utf($attr['VALUE']); + $attr['VALUE'] = $this->lesser_entity_decode($attr['VALUE']); + if ($this->onlyCoreFonts) + $attr['VALUE'] = mb_convert_encoding($attr['VALUE'], $this->mb_enc,'UTF-8'); + $objattr['value'] = $attr['VALUE']; + } + + $this->InlineProperties[$tag] = $this->saveInlineProperties(); + $properties = $this->cssmgr->MergeCSS('',$tag,$attr); + $objattr['vertical-align'] = ''; + + if (isset($properties['FONT-FAMILY'])) { + $this->SetFont($properties['FONT-FAMILY'],$this->FontStyle,0,false); + } + if (isset($properties['FONT-SIZE'])) { + $mmsize = $this->ConvertSize($properties['FONT-SIZE'],($this->default_font_size/_MPDFK)); + $this->SetFontSize($mmsize*_MPDFK,false); + } + if (isset($properties['COLOR'])) { $objattr['color'] = $this->ConvertColor($properties['COLOR']); } + $objattr['fontfamily'] = $this->FontFamily; + $objattr['fontsize'] = $this->FontSizePt; + if ($this->useActiveForms) { + if(isset($attr['ALIGN'])) { $objattr['text_align'] = $align[strtolower($attr['ALIGN'])]; } + else if(isset($properties['TEXT-ALIGN'])) { $objattr['text_align'] = $align[strtolower($properties['TEXT-ALIGN'])]; } + if (isset($properties['BORDER-TOP-COLOR'])) { $objattr['border-col'] = $this->ConvertColor($properties['BORDER-TOP-COLOR']); } + if (isset($properties['BACKGROUND-COLOR'])) { $objattr['background-col'] = $this->ConvertColor($properties['BACKGROUND-COLOR']); } + } + + $type = ''; + $texto=''; + $height = $this->FontSize; + $width = 0; + $spacesize = $this->GetCharWidth(' ',false); + + $w = 0; + if(isset($properties['WIDTH'])) $w = $this->ConvertSize($properties['WIDTH'],$this->blk[$this->blklvl]['inner_width']); + + if ($properties['VERTICAL-ALIGN']) { $objattr['vertical-align'] = $align[strtolower($properties['VERTICAL-ALIGN'])]; } + + switch(strtoupper($attr['TYPE'])){ + case 'HIDDEN': + $this->ignorefollowingspaces = true; //Eliminate exceeding left-side spaces + if ($this->useActiveForms) { + $this->form->SetFormText( 0, 0, $objattr['fieldname'], $objattr['value'], $objattr['value'], '', 0, '', true ); + } + if ($this->InlineProperties[$tag]) { $this->restoreInlineProperties($this->InlineProperties[$tag]); } + unset($this->InlineProperties[$tag]); + break 2; + case 'CHECKBOX': //Draw Checkbox + $type = 'CHECKBOX'; + if (isset($attr['CHECKED'])) { $objattr['checked'] = true; } + else { $objattr['checked'] = false; } + $width = $this->FontSize; + $height = $this->FontSize; + break; + + case 'RADIO': //Draw Radio button + $type = 'RADIO'; + if (isset($attr['CHECKED'])) $objattr['checked'] = true; + $width = $this->FontSize; + $height = $this->FontSize; + break; + +/*-- IMAGES-CORE --*/ + case 'IMAGE': // Draw an Image button + if(isset($attr['SRC'])) { + $type = 'IMAGE'; + $srcpath = $attr['SRC']; + $orig_srcpath = $attr['ORIG_SRC']; + // VSPACE and HSPACE converted to margins in MergeCSS + if (isset($properties['MARGIN-TOP'])) { $objattr['margin_top']=$this->ConvertSize($properties['MARGIN-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-BOTTOM'])) { $objattr['margin_bottom'] = $this->ConvertSize($properties['MARGIN-BOTTOM'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-LEFT'])) { $objattr['margin_left'] = $this->ConvertSize($properties['MARGIN-LEFT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-RIGHT'])) { $objattr['margin_right'] = $this->ConvertSize($properties['MARGIN-RIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + + + if (isset($properties['BORDER-TOP'])) { $objattr['border_top'] = $this->border_details($properties['BORDER-TOP']); } + if (isset($properties['BORDER-BOTTOM'])) { $objattr['border_bottom'] = $this->border_details($properties['BORDER-BOTTOM']); } + if (isset($properties['BORDER-LEFT'])) { $objattr['border_left'] = $this->border_details($properties['BORDER-LEFT']); } + if (isset($properties['BORDER-RIGHT'])) { $objattr['border_right'] = $this->border_details($properties['BORDER-RIGHT']); } + + $objattr['padding_top'] = 0; + $objattr['padding_bottom'] = 0; + $objattr['padding_left'] = 0; + $objattr['padding_right'] = 0; + + if (isset($properties['VERTICAL-ALIGN'])) { $objattr['vertical-align'] = $align[strtolower($properties['VERTICAL-ALIGN'])]; } + + $w = 0; + $h = 0; + if(isset($properties['WIDTH'])) $w = $this->ConvertSize($properties['WIDTH'],$this->blk[$this->blklvl]['inner_width']); + if(isset($properties['HEIGHT'])) $h = $this->ConvertSize($properties['HEIGHT'],$this->blk[$this->blklvl]['inner_width']); + + $extraheight = $objattr['margin_top'] + $objattr['margin_bottom'] + $objattr['border_top']['w'] + $objattr['border_bottom']['w']; + $extrawidth = $objattr['margin_left'] + $objattr['margin_right'] + $objattr['border_left']['w'] + $objattr['border_right']['w']; + + // Image file + $info=$this->_getImage($srcpath, true, true, $orig_srcpath); + if(!$info) { + $info = $this->_getImage($this->noImageFile); + if ($info) { + $srcpath = $this->noImageFile; + $w = ($info['w'] * (25.4/$this->dpi)); + $h = ($info['h'] * (25.4/$this->dpi)); + } + } + if(!$info) break; + if ($info['cs']=='Indexed') { $objattr['Indexed'] = true; } + $objattr['file'] = $srcpath; + //Default width and height calculation if needed + if($w==0 and $h==0) { +/*-- IMAGES-WMF --*/ + if ($info['type']=='wmf') { + // WMF units are twips (1/20pt) + // divide by 20 to get points + // divide by k to get user units + $w = abs($info['w'])/(20*_MPDFK); + $h = abs($info['h']) / (20*_MPDFK); + } + else +/*-- END IMAGES-WMF --*/ + if ($info['type']=='svg') { + // SVG units are pixels + $w = abs($info['w'])/_MPDFK; + $h = abs($info['h'])/_MPDFK; + } + else { + //Put image at default image dpi + $w=($info['w']/_MPDFK) * (72/$this->img_dpi); + $h=($info['h']/_MPDFK) * (72/$this->img_dpi); + } + if (isset($properties['IMAGE-RESOLUTION'])) { + if (preg_match('/from-image/i', $properties['IMAGE-RESOLUTION']) && isset($info['set-dpi']) && $info['set-dpi']>0) { + $w *= $this->img_dpi / $info['set-dpi']; + $h *= $this->img_dpi / $info['set-dpi']; + } + else if (preg_match('/(\d+)dpi/i', $properties['IMAGE-RESOLUTION'], $m)) { + $dpi = $m[1]; + if ($dpi > 0) { + $w *= $this->img_dpi / $dpi; + $h *= $this->img_dpi / $dpi; + } + } + } + } + // IF WIDTH OR HEIGHT SPECIFIED + if($w==0) $w=$h*$info['w']/$info['h']; + if($h==0) $h=$w*$info['h']/$info['w']; + // Resize to maximum dimensions of page + $maxWidth = $this->blk[$this->blklvl]['inner_width']; + $maxHeight = $this->h - ($this->tMargin + $this->bMargin + 10) ; + if ($this->fullImageHeight) { $maxHeight = $this->fullImageHeight; } + if ($w + $extrawidth > $maxWidth ) { + $w = $maxWidth - $extrawidth; + $h=$w*$info['h']/$info['w']; + } + if ($h + $extraheight > $maxHeight ) { + $h = $maxHeight - $extraheight; + $w=$h*$info['w']/$info['h']; + } + $height = $h + $extraheight; + $width = $w + $extrawidth; + $objattr['type'] = 'image'; + $objattr['itype'] = $info['type']; + $objattr['orig_h'] = $info['h']; + $objattr['orig_w'] = $info['w']; +/*-- IMAGES-WMF --*/ + if ($info['type']=='wmf') { + $objattr['wmf_x'] = $info['x']; + $objattr['wmf_y'] = $info['y']; + } + else +/*-- END IMAGES-WMF --*/ + if ($info['type']=='svg') { + $objattr['wmf_x'] = $info['x']; + $objattr['wmf_y'] = $info['y']; + } + $objattr['height'] = $h + $extraheight; + $objattr['width'] = $w + $extrawidth; + + $objattr['image_height'] = $h; + $objattr['image_width'] = $w; + $objattr['ID'] = $info['i']; + $texto = 'X'; + if ($this->useActiveForms) { + if (isset($attr['ONCLICK'])) { $objattr['onClick'] = $attr['ONCLICK']; } + $objattr['type'] = 'input'; + $type = 'IMAGE'; + } + break; + } +/*-- END IMAGES-CORE --*/ + + case 'BUTTON': // Draw a button + case 'SUBMIT': + case 'RESET': + $type = strtoupper($attr['TYPE']); + if ($type=='IMAGE') { $type = 'BUTTON'; } // src path not found + if(isset($attr['NOPRINT'])) { $objattr['noprint'] = true; } + if (!isset($attr['VALUE'])) { + $objattr['value'] = ucfirst(strtolower($type)); + } + + $texto = " " . $objattr['value'] . " "; + $width = $this->GetStringWidth($texto) + ($this->form->form_element_spacing['button']['outer']['h']*2)+($this->form->form_element_spacing['button']['inner']['h']*2); + $height = $this->FontSize + ($this->form->form_element_spacing['button']['outer']['v']*2)+($this->form->form_element_spacing['button']['inner']['v']*2); + if ($this->useActiveForms) { + if (isset($attr['ONCLICK'])) { $objattr['onClick'] = $attr['ONCLICK']; } + } + break; + + case 'PASSWORD': + case 'TEXT': + default: + if ($type == '') { $type = 'TEXT'; } + if(strtoupper($attr['TYPE'])=='PASSWORD') { $type = 'PASSWORD'; } + if (isset($attr['VALUE'])) { + if ($type == 'PASSWORD') { + $num_stars = mb_strlen($attr['VALUE'],$this->mb_enc ); + $texto = str_repeat('*',$num_stars); + } + else { $texto = $attr['VALUE']; } + } + $xw = ($this->form->form_element_spacing['input']['outer']['h']*2)+($this->form->form_element_spacing['input']['inner']['h']*2); + $xh = ($this->form->form_element_spacing['input']['outer']['v']*2)+($this->form->form_element_spacing['input']['inner']['v']*2); + if ($w) { $width = $w + $xw; } + else { $width = (20 * $spacesize) + $xw; } // Default width in chars + if (isset($attr['SIZE']) and ctype_digit($attr['SIZE']) ) $width = ($attr['SIZE'] * $spacesize) + $xw; + $height = $this->FontSize + $xh; + if (isset($attr['MAXLENGTH']) and ctype_digit($attr['MAXLENGTH']) ) $objattr['maxlength'] = $attr['MAXLENGTH']; + if ($this->useActiveForms) { + if (isset($attr['ONCALCULATE'])) { $objattr['onCalculate'] = $attr['ONCALCULATE']; } + else if (isset($attr['ONCHANGE'])) { $objattr['onCalculate'] = $attr['ONCHANGE']; } + if (isset($attr['ONVALIDATE'])) { $objattr['onValidate'] = $attr['ONVALIDATE']; } + if (isset($attr['ONKEYSTROKE'])) { $objattr['onKeystroke'] = $attr['ONKEYSTROKE']; } + if (isset($attr['ONFORMAT'])) { $objattr['onFormat'] = $attr['ONFORMAT']; } + } + break; + } + + $objattr['subtype'] = $type; + $objattr['text'] = $texto; + $objattr['width'] = $width; + $objattr['height'] = $height; + $e = "\xbb\xa4\xactype=input,objattr=".serialize($objattr)."\xbb\xa4\xac"; + + // Clear properties - tidy up + $properties = array(); + +/*-- TABLES --*/ + // Output it to buffers + if ($this->tableLevel) { + $this->_saveCellTextBuffer($e, $this->HREF); + $this->cell[$this->row][$this->col]['s'] += $objattr['width'] ; + + } + else { +/*-- END TABLES --*/ + $this->_saveTextBuffer($e, $this->HREF); + } // *TABLES* + + if ($this->InlineProperties[$tag]) { $this->restoreInlineProperties($this->InlineProperties[$tag]); } + unset($this->InlineProperties[$tag]); + + break; // END of INPUT +/*-- END FORMS --*/ + + + // *********** GRAPH ******************** + case 'JPGRAPH': + if (!$this->useGraphs) { break; } + if ($attr['TABLE']) { $gid = strtoupper($attr['TABLE']); } + else { $gid = '0'; } + if (!is_array($this->graphs[$gid]) || count($this->graphs[$gid])==0 ) { break; } + include_once(_MPDF_PATH.'graph.php'); + $this->graphs[$gid]['attr'] = $attr; + + + if (isset($this->graphs[$gid]['attr']['WIDTH']) && $this->graphs[$gid]['attr']['WIDTH']) { + $this->graphs[$gid]['attr']['cWIDTH']=$this->ConvertSize($this->graphs[$gid]['attr']['WIDTH'],$pgwidth); + } // mm + if (isset($this->graphs[$gid]['attr']['HEIGHT']) && $this->graphs[$gid]['attr']['HEIGHT']) { + $this->graphs[$gid]['attr']['cHEIGHT']=$this->ConvertSize($this->graphs[$gid]['attr']['HEIGHT'],$pgwidth); + } + + $graph_img = print_graph($this->graphs[$gid],$this->blk[$this->blklvl]['inner_width']); + if ($graph_img) { + if(isset($attr['ROTATE'])) { + if ($attr['ROTATE']==90 || $attr['ROTATE']==-90) { + $tmpw = $graph_img['w']; + $graph_img['w']= $graph_img['h']; + $graph_img['h']= $tmpw; + } + } + $attr['SRC'] = $graph_img['file']; + $attr['WIDTH'] = $graph_img['w']; + $attr['HEIGHT'] = $graph_img['h']; + } + else { break; } + + // *********** IMAGE ******************** +/*-- IMAGES-CORE --*/ + case 'IMG': + if ($this->progressBar) { $this->UpdateProgressBar(1,'','IMG'); } // *PROGRESS-BAR* + $objattr = array(); + $objattr['margin_top'] = 0; + $objattr['margin_bottom'] = 0; + $objattr['margin_left'] = 0; + $objattr['margin_right'] = 0; + $objattr['padding_top'] = 0; + $objattr['padding_bottom'] = 0; + $objattr['padding_left'] = 0; + $objattr['padding_right'] = 0; + $objattr['width'] = 0; + $objattr['height'] = 0; + $objattr['border_top']['w'] = 0; + $objattr['border_bottom']['w'] = 0; + $objattr['border_left']['w'] = 0; + $objattr['border_right']['w'] = 0; + if(isset($attr['SRC'])) { + $srcpath = $attr['SRC']; + $orig_srcpath = $attr['ORIG_SRC']; + $properties = $this->cssmgr->MergeCSS('',$tag,$attr); + if(isset($properties ['DISPLAY']) && strtolower($properties ['DISPLAY'])=='none') { + return; + } + // mPDF 5.6.01 - LAYERS + if (isset($properties['Z-INDEX']) && $this->currentlayer==0) { + $v = intval($properties['Z-INDEX']); + if ($v > 0) { + $objattr['z-index'] = $v; + } + } + + $objattr['visibility'] = 'visible'; + if (isset($properties['VISIBILITY'])) { + $v = strtolower($properties['VISIBILITY']); + if (($v == 'hidden' || $v == 'printonly' || $v == 'screenonly') && $this->visibility=='visible') { + $objattr['visibility'] = $v; + } + } + + // VSPACE and HSPACE converted to margins in MergeCSS + if (isset($properties['MARGIN-TOP'])) { $objattr['margin_top']=$this->ConvertSize($properties['MARGIN-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-BOTTOM'])) { $objattr['margin_bottom'] = $this->ConvertSize($properties['MARGIN-BOTTOM'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-LEFT'])) { $objattr['margin_left'] = $this->ConvertSize($properties['MARGIN-LEFT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-RIGHT'])) { $objattr['margin_right'] = $this->ConvertSize($properties['MARGIN-RIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + + if (isset($properties['PADDING-TOP'])) { $objattr['padding_top']=$this->ConvertSize($properties['PADDING-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['PADDING-BOTTOM'])) { $objattr['padding_bottom'] = $this->ConvertSize($properties['PADDING-BOTTOM'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['PADDING-LEFT'])) { $objattr['padding_left'] = $this->ConvertSize($properties['PADDING-LEFT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['PADDING-RIGHT'])) { $objattr['padding_right'] = $this->ConvertSize($properties['PADDING-RIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + + if (isset($properties['BORDER-TOP'])) { $objattr['border_top'] = $this->border_details($properties['BORDER-TOP']); } + if (isset($properties['BORDER-BOTTOM'])) { $objattr['border_bottom'] = $this->border_details($properties['BORDER-BOTTOM']); } + if (isset($properties['BORDER-LEFT'])) { $objattr['border_left'] = $this->border_details($properties['BORDER-LEFT']); } + if (isset($properties['BORDER-RIGHT'])) { $objattr['border_right'] = $this->border_details($properties['BORDER-RIGHT']); } + + if (isset($properties['VERTICAL-ALIGN'])) { $objattr['vertical-align'] = $align[strtolower($properties['VERTICAL-ALIGN'])]; } + $w = 0; + $h = 0; + if(isset($properties['WIDTH'])) $w = $this->ConvertSize($properties['WIDTH'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + else if(isset($attr['WIDTH'])) $w = $this->ConvertSize($attr['WIDTH'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + if(isset($properties['HEIGHT'])) $h = $this->ConvertSize($properties['HEIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + else if(isset($attr['HEIGHT'])) $h = $this->ConvertSize($attr['HEIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + // mPDF 5.5.15 // mPDF 5.6.60 + $maxw=$maxh=$minw=$minh=false; + if(isset($properties['MAX-WIDTH'])) $maxw = $this->ConvertSize($properties['MAX-WIDTH'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + else if(isset($attr['MAX-WIDTH'])) $maxw = $this->ConvertSize($attr['MAX-WIDTH'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + if(isset($properties['MAX-HEIGHT'])) $maxh = $this->ConvertSize($properties['MAX-HEIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + else if(isset($attr['MAX-HEIGHT'])) $maxh = $this->ConvertSize($attr['MAX-HEIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + if(isset($properties['MIN-WIDTH'])) $minw = $this->ConvertSize($properties['MIN-WIDTH'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + else if(isset($attr['MIN-WIDTH'])) $minw = $this->ConvertSize($attr['MIN-WIDTH'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + if(isset($properties['MIN-HEIGHT'])) $minh = $this->ConvertSize($properties['MIN-HEIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + else if(isset($attr['MIN-HEIGHT'])) $minh = $this->ConvertSize($attr['MIN-HEIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + + if (isset($properties['OPACITY']) && $properties['OPACITY'] > 0 && $properties['OPACITY'] <= 1) { $objattr['opacity'] = $properties['OPACITY']; } + if ($this->HREF) { + if (strpos($this->HREF,".") === false && strpos($this->HREF,"@") !== 0) { + $href = $this->HREF; + while(array_key_exists($href,$this->internallink)) $href="#".$href; + $this->internallink[$href] = $this->AddLink(); + $objattr['link'] = $this->internallink[$href]; + } + else { $objattr['link'] = $this->HREF; } + } + $extraheight = $objattr['padding_top'] + $objattr['padding_bottom'] + $objattr['margin_top'] + $objattr['margin_bottom'] + $objattr['border_top']['w'] + $objattr['border_bottom']['w']; + $extrawidth = $objattr['padding_left'] + $objattr['padding_right'] + $objattr['margin_left'] + $objattr['margin_right'] + $objattr['border_left']['w'] + $objattr['border_right']['w']; + +/*-- BACKGROUNDS --*/ + if(isset($properties['GRADIENT-MASK']) && preg_match('/(-moz-)*(repeating-)*(linear|radial)-gradient/',$properties['GRADIENT-MASK'])) { + $objattr['GRADIENT-MASK'] = $properties['GRADIENT-MASK']; + } +/*-- END BACKGROUNDS --*/ + + // Image file + $info=$this->_getImage($srcpath, true, true, $orig_srcpath); + if(!$info) { + $info = $this->_getImage($this->noImageFile); + if ($info) { + $srcpath = $this->noImageFile; + $w = ($info['w'] * (25.4/$this->dpi)); + $h = ($info['h'] * (25.4/$this->dpi)); + } + } + if(!$info) break; + + if(isset($attr['ROTATE'])) { $image_orientation = $attr['ROTATE']; } + else if(isset($properties['IMAGE-ORIENTATION'])) { $image_orientation = $properties['IMAGE-ORIENTATION']; } + else { $image_orientation = 0; } + if($image_orientation) { + if ($image_orientation==90 || $image_orientation==-90 || $image_orientation==270) { + $tmpw = $info['w']; + $info['w'] = $info['h']; + $info['h'] = $tmpw; + } + $objattr['ROTATE'] = $image_orientation; + } + + $objattr['file'] = $srcpath; + //Default width and height calculation if needed + if($w==0 and $h==0) { +/*-- IMAGES-WMF --*/ + if ($info['type']=='wmf') { + // WMF units are twips (1/20pt) + // divide by 20 to get points + // divide by k to get user units + $w = abs($info['w'])/(20*_MPDFK); + $h = abs($info['h']) / (20*_MPDFK); + } + else +/*-- END IMAGES-WMF --*/ + if ($info['type']=='svg') { + // SVG units are pixels + $w = abs($info['w'])/_MPDFK; + $h = abs($info['h'])/_MPDFK; + } + else { + //Put image at default image dpi + $w=($info['w']/_MPDFK) * (72/$this->img_dpi); + $h=($info['h']/_MPDFK) * (72/$this->img_dpi); + } + if (isset($properties['IMAGE-RESOLUTION'])) { + if (preg_match('/from-image/i', $properties['IMAGE-RESOLUTION']) && isset($info['set-dpi']) && $info['set-dpi']>0) { + $w *= $this->img_dpi / $info['set-dpi']; + $h *= $this->img_dpi / $info['set-dpi']; + } + else if (preg_match('/(\d+)dpi/i', $properties['IMAGE-RESOLUTION'], $m)) { + $dpi = $m[1]; + if ($dpi > 0) { + $w *= $this->img_dpi / $dpi; + $h *= $this->img_dpi / $dpi; + } + } + } + } + // IF WIDTH OR HEIGHT SPECIFIED + if($w==0) $w=abs($h*$info['w']/$info['h']); + if($h==0) $h=abs($w*$info['h']/$info['w']); + + // mPDF 5.5.15 + if ($minw && $w<$minw) { $w = $minw; $h=abs($w*$info['h']/$info['w']); } + if ($maxw && $w>$maxw) { $w = $maxw; $h=abs($w*$info['h']/$info['w']); } + if ($minh && $h<$minh) { $h = $minh; $w=abs($h*$info['w']/$info['h']); } + if ($maxh && $h>$maxh) { $h = $maxh; $w=abs($h*$info['w']/$info['h']); } + + // Resize to maximum dimensions of page + $maxWidth = $this->blk[$this->blklvl]['inner_width']; + $maxHeight = $this->h - ($this->tMargin + $this->bMargin + 1) ; + if ($this->fullImageHeight) { $maxHeight = $this->fullImageHeight; } + if ($w + $extrawidth > $maxWidth ) { + $w = $maxWidth - $extrawidth; + $h=abs($w*$info['h']/$info['w']); + } + + if ($h + $extraheight > $maxHeight ) { + $h = $maxHeight - $extraheight; + $w=abs($h*$info['w']/$info['h']); + } + $objattr['type'] = 'image'; + $objattr['itype'] = $info['type']; + + $objattr['orig_h'] = $info['h']; + $objattr['orig_w'] = $info['w']; +/*-- IMAGES-WMF --*/ + if ($info['type']=='wmf') { + $objattr['wmf_x'] = $info['x']; + $objattr['wmf_y'] = $info['y']; + } + else +/*-- END IMAGES-WMF --*/ + if ($info['type']=='svg') { + $objattr['wmf_x'] = $info['x']; + $objattr['wmf_y'] = $info['y']; + } + $objattr['height'] = $h + $extraheight; + $objattr['width'] = $w + $extrawidth; + $objattr['image_height'] = $h; + $objattr['image_width'] = $w; +/*-- CSS-IMAGE-FLOAT --*/ + if (!$this->ColActive && !$this->tableLevel && !$this->listlvl && !$this->kwt && !$this->keep_block_together) { + if (isset($properties['FLOAT']) && (strtoupper($properties['FLOAT']) == 'RIGHT' || strtoupper($properties['FLOAT']) == 'LEFT')) { + $objattr['float'] = substr(strtoupper($properties['FLOAT']),0,1); + } + } +/*-- END CSS-IMAGE-FLOAT --*/ + + $e = "\xbb\xa4\xactype=image,objattr=".serialize($objattr)."\xbb\xa4\xac"; + + // Clear properties - tidy up + $properties = array(); + +/*-- TABLES --*/ + // Output it to buffers + if ($this->tableLevel) { + $this->_saveCellTextBuffer($e, $this->HREF); + $this->cell[$this->row][$this->col]['s'] += $objattr['width'] ; + } + else { +/*-- END TABLES --*/ + $this->_saveTextBuffer($e, $this->HREF); + } // *TABLES* +/*-- ANNOTATIONS --*/ + if ($this->title2annots && isset($attr['TITLE'])) { + $objattr = array(); + $objattr['margin_top'] = 0; + $objattr['margin_bottom'] = 0; + $objattr['margin_left'] = 0; + $objattr['margin_right'] = 0; + $objattr['width'] = 0; + $objattr['height'] = 0; + $objattr['border_top']['w'] = 0; + $objattr['border_bottom']['w'] = 0; + $objattr['border_left']['w'] = 0; + $objattr['border_right']['w'] = 0; + $objattr['CONTENT'] = $attr['TITLE']; + $objattr['type'] = 'annot'; + $objattr['POS-X'] = 0; + $objattr['POS-Y'] = 0; + $objattr['ICON'] = 'Comment'; + $objattr['AUTHOR'] = ''; + $objattr['SUBJECT'] = ''; + $objattr['OPACITY'] = $this->annotOpacity; + $objattr['COLOR'] = $this->ConvertColor('yellow'); + $e = "\xbb\xa4\xactype=annot,objattr=".serialize($objattr)."\xbb\xa4\xac"; + if($this->tableLevel) { // *TABLES* + $this->cell[$this->row][$this->col]['textbuffer'][] = array($e); // *TABLES* + } // *TABLES* + else { // *TABLES* + $this->textbuffer[] = array($e); + } // *TABLES* + } +/*-- END ANNOTATIONS --*/ + } + break; +/*-- END IMAGES-CORE --*/ + + + // *********** CIRCULAR TEXT = TEXTCIRCLE ******************** + case 'TEXTCIRCLE': + $objattr = array(); + $objattr['margin_top'] = 0; + $objattr['margin_bottom'] = 0; + $objattr['margin_left'] = 0; + $objattr['margin_right'] = 0; + $objattr['padding_top'] = 0; + $objattr['padding_bottom'] = 0; + $objattr['padding_left'] = 0; + $objattr['padding_right'] = 0; + $objattr['width'] = 0; + $objattr['height'] = 0; + $objattr['border_top']['w'] = 0; + $objattr['border_bottom']['w'] = 0; + $objattr['border_left']['w'] = 0; + $objattr['border_right']['w'] = 0; + $objattr['top-text'] = ''; + $objattr['bottom-text'] = ''; + $objattr['r'] = 20; // radius (default value here for safety) + $objattr['space-width'] = 120; + $objattr['char-width'] = 100; + + $this->InlineProperties[$tag] = $this->saveInlineProperties(); + $properties = $this->cssmgr->MergeCSS('INLINE',$tag,$attr); + + if(isset($properties ['DISPLAY']) && strtolower($properties ['DISPLAY'])=='none') { + return; + } + if (isset($attr['R'])) { $objattr['r']=$this->ConvertSize($attr['R'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if(isset($attr['TOP-TEXT'])) { + $objattr['top-text'] = strcode2utf($attr['TOP-TEXT']); + $objattr['top-text'] = $this->lesser_entity_decode($objattr['top-text']); + if ($this->onlyCoreFonts) + $objattr['top-text'] = mb_convert_encoding($objattr['top-text'], $this->mb_enc,'UTF-8'); + } + if(isset($attr['BOTTOM-TEXT'])) { + $objattr['bottom-text'] = strcode2utf($attr['BOTTOM-TEXT']); + $objattr['bottom-text'] = $this->lesser_entity_decode($objattr['bottom-text']); + if ($this->onlyCoreFonts) + $objattr['bottom-text'] = mb_convert_encoding($objattr['bottom-text'], $this->mb_enc,'UTF-8'); + } + if(isset($attr['SPACE-WIDTH']) && $attr['SPACE-WIDTH']) { $objattr['space-width'] = $attr['SPACE-WIDTH']; } + if(isset($attr['CHAR-WIDTH']) && $attr['CHAR-WIDTH']) { $objattr['char-width'] = $attr['CHAR-WIDTH']; } + + // VISIBILITY + $objattr['visibility'] = 'visible'; + if (isset($properties['VISIBILITY'])) { + $v = strtolower($properties['VISIBILITY']); + if (($v == 'hidden' || $v == 'printonly' || $v == 'screenonly') && $this->visibility=='visible') { + $objattr['visibility'] = $v; + } + } + // mPDF 5.5.23 + if (isset($properties['FONT-SIZE'])) { + if (strtolower($properties['FONT-SIZE'])=='auto') { + if ($objattr['top-text'] && $objattr['bottom-text']) { + $objattr['fontsize'] = -2; + } + else { + $objattr['fontsize'] = -1; + } + } + else { + $mmsize = $this->ConvertSize($properties['FONT-SIZE'],($this->default_font_size/_MPDFK)); + $this->SetFontSize($mmsize*_MPDFK,false); + $objattr['fontsize'] = $this->FontSizePt; + } + } + // mPDF 5.5.23 + if(isset($attr['DIVIDER'])) { + $objattr['divider'] = strcode2utf($attr['DIVIDER']); + $objattr['divider'] = $this->lesser_entity_decode($objattr['divider']); + if ($this->onlyCoreFonts) + $objattr['divider'] = mb_convert_encoding($objattr['divider'], $this->mb_enc,'UTF-8'); + + } + + if (isset($properties['COLOR'])) { $objattr['color'] = $this->ConvertColor($properties['COLOR']); } + + $objattr['fontstyle'] = ''; + if (isset($properties['FONT-WEIGHT'])) { + if (strtoupper($properties['FONT-WEIGHT']) == 'BOLD') { $objattr['fontstyle'] .= 'B'; } + } + if (isset($properties['FONT-STYLE'])) { + if (strtoupper($properties['FONT-STYLE']) == 'ITALIC') { $objattr['fontstyle'] .= 'I'; } + } + + if (isset($properties['FONT-FAMILY'])) { + $this->SetFont($properties['FONT-FAMILY'],$this->FontStyle,0,false); + } + $objattr['fontfamily'] = $this->FontFamily; + + // VSPACE and HSPACE converted to margins in MergeCSS + if (isset($properties['MARGIN-TOP'])) { $objattr['margin_top']=$this->ConvertSize($properties['MARGIN-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-BOTTOM'])) { $objattr['margin_bottom'] = $this->ConvertSize($properties['MARGIN-BOTTOM'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-LEFT'])) { $objattr['margin_left'] = $this->ConvertSize($properties['MARGIN-LEFT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['MARGIN-RIGHT'])) { $objattr['margin_right'] = $this->ConvertSize($properties['MARGIN-RIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + + if (isset($properties['PADDING-TOP'])) { $objattr['padding_top']=$this->ConvertSize($properties['PADDING-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['PADDING-BOTTOM'])) { $objattr['padding_bottom'] = $this->ConvertSize($properties['PADDING-BOTTOM'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['PADDING-LEFT'])) { $objattr['padding_left'] = $this->ConvertSize($properties['PADDING-LEFT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + if (isset($properties['PADDING-RIGHT'])) { $objattr['padding_right'] = $this->ConvertSize($properties['PADDING-RIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + + if (isset($properties['BORDER-TOP'])) { $objattr['border_top'] = $this->border_details($properties['BORDER-TOP']); } + if (isset($properties['BORDER-BOTTOM'])) { $objattr['border_bottom'] = $this->border_details($properties['BORDER-BOTTOM']); } + if (isset($properties['BORDER-LEFT'])) { $objattr['border_left'] = $this->border_details($properties['BORDER-LEFT']); } + if (isset($properties['BORDER-RIGHT'])) { $objattr['border_right'] = $this->border_details($properties['BORDER-RIGHT']); } + + if (isset($properties['OPACITY']) && $properties['OPACITY'] > 0 && $properties['OPACITY'] <= 1) { $objattr['opacity'] = $properties['OPACITY']; } + if (isset($properties['BACKGROUND-COLOR']) && $properties['BACKGROUND-COLOR'] != '') { $objattr['bgcolor'] = $this->ConvertColor($properties['BACKGROUND-COLOR']); } + else { $objattr['bgcolor'] = false; } + if ($this->HREF) { + if (strpos($this->HREF,".") === false && strpos($this->HREF,"@") !== 0) { + $href = $this->HREF; + while(array_key_exists($href,$this->internallink)) $href="#".$href; + $this->internallink[$href] = $this->AddLink(); + $objattr['link'] = $this->internallink[$href]; + } + else { $objattr['link'] = $this->HREF; } + } + $extraheight = $objattr['padding_top'] + $objattr['padding_bottom'] + $objattr['margin_top'] + $objattr['margin_bottom'] + $objattr['border_top']['w'] + $objattr['border_bottom']['w']; + $extrawidth = $objattr['padding_left'] + $objattr['padding_right'] + $objattr['margin_left'] + $objattr['margin_right'] + $objattr['border_left']['w'] + $objattr['border_right']['w']; + + + $w = $objattr['r']*2; + $h = $w; + $objattr['height'] = $h + $extraheight; + $objattr['width'] = $w + $extrawidth; + $objattr['type'] = 'textcircle'; + + $e = "\xbb\xa4\xactype=image,objattr=".serialize($objattr)."\xbb\xa4\xac"; + + // Clear properties - tidy up + $properties = array(); + +/*-- TABLES --*/ + // Output it to buffers + if ($this->tableLevel) { + $this->_saveCellTextBuffer($e, $this->HREF); + $this->cell[$this->row][$this->col]['s'] += $objattr['width'] ; + } + else { +/*-- END TABLES --*/ + $this->_saveTextBuffer($e, $this->HREF); + } // *TABLES* + + if ($this->InlineProperties[$tag]) { $this->restoreInlineProperties($this->InlineProperties[$tag]); } + unset($this->InlineProperties[$tag]); + + break; + + +/*-- TABLES --*/ + + case 'TABLE': // TABLE-BEGIN + $this->tdbegin = false; + $this->lastoptionaltag = ''; + // Disable vertical justification in columns + if ($this->ColActive) { $this->colvAlign = ''; } // *COLUMNS* + if ($this->lastblocklevelchange == 1) { $blockstate = 1; } // Top margins/padding only + else if ($this->lastblocklevelchange < 1) { $blockstate = 0; } // NO margins/padding + // called from block after new div e.g. <div> ... <table> ... Outputs block top margin/border and padding + if (count($this->textbuffer) == 0 && $this->lastblocklevelchange == 1 && !$this->tableLevel && !$this->kwt) { + $this->newFlowingBlock( $this->blk[$this->blklvl]['width'],$this->lineheight,'',false,false,1,true, $this->blk[$this->blklvl]['direction']); + $this->finishFlowingBlock(true); // true = END of flowing block + } + else if (!$this->tableLevel && count($this->textbuffer)) { $this->printbuffer($this->textbuffer,$blockstate); } + + $this->textbuffer=array(); + $this->lastblocklevelchange = -1; + if ($this->tableLevel) { // i.e. now a nested table coming... + // Save current level table + // mPDF 5.4.10 + $this->cell['PARENTCELL'] = $this->saveInlineProperties(); + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['baseProperties']= $this->base_table_properties; + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['cells'] = $this->cell; + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['currrow'] = $this->row; + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['currcol'] = $this->col; + } + $this->tableLevel++; + $this->cssmgr->tbCSSlvl++; + + if ($this->tableLevel>1) { // inherit table properties from cell in which nested + $this->base_table_properties['FONT-KERNING'] = $this->kerning ; + $this->base_table_properties['LETTER-SPACING'] = $this->lSpacingCSS ; + $this->base_table_properties['WORD-SPACING'] = $this->wSpacingCSS ; + } + + if (isset($this->tbctr[$this->tableLevel])) { $this->tbctr[$this->tableLevel]++; } + else { $this->tbctr[$this->tableLevel] = 1; } + + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['level'] = $this->tableLevel; + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['levelid'] = $this->tbctr[$this->tableLevel]; + + if ($this->tableLevel > $this->innermostTableLevel) { $this->innermostTableLevel = $this->tableLevel; } + if ($this->tableLevel > 1) { + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['nestedpos'] = array($this->row,$this->col,$this->tbctr[($this->tableLevel-1)]); + } + //++++++++++++++++++++++++++++ + + $this->cell = array(); + $this->col=-1; //int + $this->row=-1; //int + $table = &$this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]; + + // New table - any level + if ($this->cacheTables) { + $this->packTableData = true; // required for cacheTables + $this->simpleTables = false; // Cannot co-exist with cacheTables + $table['cache'] = _MPDF_TEMP_PATH.'_tempTblCache'.RAND(1,1000000).'.dat'; + $fh = fopen($table['cache'] , "wb") or $this->Error("When using cacheTables, you must have read/write access to cache files (".$table['cache'] .")"); + fwrite($fh, "\x00"); + fclose($fh); + $table['ptr'] = 1 ; // Must not be 0 + } + + $table['direction'] = $this->directionality; + $table['bgcolor'] = false; + $table['va'] = false; + $table['txta'] = false; + $table['topntail'] = false; + $table['thead-underline'] = false; + $table['border'] = false; + $table['border_details']['R']['w'] = 0; + $table['border_details']['L']['w'] = 0; + $table['border_details']['T']['w'] = 0; + $table['border_details']['B']['w'] = 0; + $table['border_details']['R']['style'] = ''; + $table['border_details']['L']['style'] = ''; + $table['border_details']['T']['style'] = ''; + $table['border_details']['B']['style'] = ''; + $table['max_cell_border_width']['R'] = 0; + $table['max_cell_border_width']['L'] = 0; + $table['max_cell_border_width']['T'] = 0; + $table['max_cell_border_width']['B'] = 0; + $table['padding']['L'] = false; + $table['padding']['R'] = false; + $table['padding']['T'] = false; + $table['padding']['B'] = false; + $table['margin']['L'] = false; + $table['margin']['R'] = false; + $table['margin']['T'] = false; + $table['margin']['B'] = false; + $table['a'] = false; + $table['border_spacing_H'] = false; + $table['border_spacing_V'] = false; + $table['decimal_align'] = false; // mPDF 5.6.13 + $this->Reset(); + $this->InlineProperties = array(); + $this->spanlvl = 0; + $table['nc'] = $table['nr'] = 0; + $this->tablethead = 0; + $this->tabletfoot = 0; + $this->tabletheadjustfinished = false; + + + if ($this->blockjustfinished && !count($this->textbuffer) && $this->y != $this->tMargin && $this->collapseBlockMargins && $this->tableLevel==1) { $lastbottommargin = $this->lastblockbottommargin; } + else { $lastbottommargin = 0; } + $this->lastblockbottommargin = 0; + $this->blockjustfinished=false; + + if ($this->tableLevel==1) { + $this->tableCJK = false; + $this->table_lineheight = $this->normalLineheight; + $table['headernrows'] = 0; + $table['footernrows'] = 0; + $this->base_table_properties = array(); + } + + // ADDED CSS FUNCIONS FOR TABLE + if ($this->cssmgr->tbCSSlvl==1) { + $properties = $this->cssmgr->MergeCSS('TOPTABLE',$tag,$attr); + } + else { + $properties = $this->cssmgr->MergeCSS('TABLE',$tag,$attr); + } + $w = ''; + if (isset($properties['WIDTH'])) { $w = $properties['WIDTH']; } + else if (isset($attr['WIDTH']) && $attr['WIDTH']) { $w = $attr['WIDTH']; } + + + if(isset($properties['DIRECTION']) && $properties['DIRECTION']) { $table['direction'] = strtolower($properties['DIRECTION']); } + else if(isset($attr['DIR']) && $attr['DIR']) { $table['direction'] = strtolower($attr['DIR']); } + else if (!isset($table['direction'])){ $table['direction'] = $this->blk[$this->blklvl]['direction']; } + + if (isset($properties['BACKGROUND-COLOR'])) { $table['bgcolor'][-1] = $properties['BACKGROUND-COLOR']; } + else if (isset($properties['BACKGROUND'])) { $table['bgcolor'][-1] = $properties['BACKGROUND']; } + else if (isset($attr['BGCOLOR'])) { $table['bgcolor'][-1] = $attr['BGCOLOR']; } + if (isset($properties['VERTICAL-ALIGN'])) { $table['va'] = $align[strtolower($properties['VERTICAL-ALIGN'])]; } + if (isset($properties['TEXT-ALIGN'])) { $table['txta'] = $align[strtolower($properties['TEXT-ALIGN'])]; } + if (isset($attr['ALIGN'])) { $table['a'] = $align[strtolower($attr['ALIGN'])]; } + if (!$table['a']) { + if ($table['direction'] == 'rtl' ) { $table['a'] = 'R'; } + else { $table['a'] = 'L'; } + } + + if (isset($properties['AUTOSIZE']) && $properties['AUTOSIZE'] && $this->tableLevel ==1) { + $this->shrink_this_table_to_fit = $properties['AUTOSIZE']; + if ($this->shrink_this_table_to_fit < 1) { $this->shrink_this_table_to_fit = 0; } + } + if (isset($properties['ROTATE']) && $properties['ROTATE'] && $this->tableLevel ==1) { + $this->table_rotate = $properties['ROTATE']; + } + if (isset($properties['TOPNTAIL'])) { $table['topntail'] = $properties['TOPNTAIL']; } + if (isset($properties['THEAD-UNDERLINE'])) { $table['thead-underline'] = $properties['THEAD-UNDERLINE']; } + + if (isset($properties['BORDER'])) { + $bord = $this->border_details($properties['BORDER']); + if ($bord['s']) { + $table['border'] = _BORDER_ALL; + $table['border_details']['R'] = $bord; + $table['border_details']['L'] = $bord; + $table['border_details']['T'] = $bord; + $table['border_details']['B'] = $bord; + } + } + if (isset($properties['BORDER-RIGHT'])) { + if ($table['direction'] == 'rtl') { // *RTL* + $table['border_details']['R'] = $this->border_details($properties['BORDER-LEFT']); // *RTL* + } // *RTL* + else { // *RTL* + $table['border_details']['R'] = $this->border_details($properties['BORDER-RIGHT']); + } // *RTL* + $this->setBorder($table['border'], _BORDER_RIGHT, $table['border_details']['R']['s']); + } + if (isset($properties['BORDER-LEFT'])) { + if ($table['direction'] == 'rtl') { // *RTL* + $table['border_details']['L'] = $this->border_details($properties['BORDER-RIGHT']); // *RTL* + } // *RTL* + else { // *RTL* + $table['border_details']['L'] = $this->border_details($properties['BORDER-LEFT']); + } // *RTL* + $this->setBorder($table['border'], _BORDER_LEFT, $table['border_details']['L']['s']); + } + if (isset($properties['BORDER-BOTTOM'])) { + $table['border_details']['B'] = $this->border_details($properties['BORDER-BOTTOM']); + $this->setBorder($table['border'], _BORDER_BOTTOM, $table['border_details']['B']['s']); + } + if (isset($properties['BORDER-TOP'])) { + $table['border_details']['T'] = $this->border_details($properties['BORDER-TOP']); + $this->setBorder($table['border'], _BORDER_TOP, $table['border_details']['T']['s']); + } + if ($table['border']){ + $this->table_border_css_set = 1; + } + else { + $this->table_border_css_set = 0; + } + + if (isset($properties['FONT-FAMILY'])) { + $this->default_font = $properties['FONT-FAMILY']; + $this->SetFont($this->default_font,'',0,false); + } + $this->base_table_properties['FONT-FAMILY'] = $this->FontFamily; // mPDF 5.4.10 + + if (isset($properties['FONT-SIZE'])) { + // mPDF 5.4.10 + if ($this->tableLevel>1) { $mmsize = $this->ConvertSize($properties['FONT-SIZE'], $this->base_table_properties['FONT-SIZE']); } + else { $mmsize = $this->ConvertSize($properties['FONT-SIZE'],$this->default_font_size/_MPDFK); } + if ($mmsize) { + $this->default_font_size = $mmsize*(_MPDFK); + $this->SetFontSize($this->default_font_size,false); + } + } + $this->base_table_properties['FONT-SIZE'] = $this->FontSize.'mm'; // mPDF 5.4.10 + + if (isset($properties['FONT-WEIGHT'])) { + if (strtoupper($properties['FONT-WEIGHT']) == 'BOLD') { $this->base_table_properties['FONT-WEIGHT'] = 'BOLD'; } + } + if (isset($properties['FONT-STYLE'])) { + if (strtoupper($properties['FONT-STYLE']) == 'ITALIC') { $this->base_table_properties['FONT-STYLE'] = 'ITALIC'; } + } + if (isset($properties['COLOR'])) { + $this->base_table_properties['COLOR'] = $properties['COLOR']; + } + if (isset($properties['FONT-KERNING'])) { + $this->base_table_properties['FONT-KERNING'] = $properties['FONT-KERNING']; + } + if (isset($properties['LETTER-SPACING'])) { + $this->base_table_properties['LETTER-SPACING'] = $properties['LETTER-SPACING']; + } + if (isset($properties['WORD-SPACING'])) { + $this->base_table_properties['WORD-SPACING'] = $properties['WORD-SPACING']; + } + + if (isset($properties['PADDING-LEFT'])) { + $table['padding']['L'] = $this->ConvertSize($properties['PADDING-LEFT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + if (isset($properties['PADDING-RIGHT'])) { + $table['padding']['R'] = $this->ConvertSize($properties['PADDING-RIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + if (isset($properties['PADDING-TOP'])) { + $table['padding']['T'] = $this->ConvertSize($properties['PADDING-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + if (isset($properties['PADDING-BOTTOM'])) { + $table['padding']['B'] = $this->ConvertSize($properties['PADDING-BOTTOM'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + + if (isset($properties['MARGIN-TOP'])) { + if ($lastbottommargin) { + $tmp = $this->ConvertSize($properties['MARGIN-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + if ($tmp > $lastbottommargin) { $properties['MARGIN-TOP'] -= $lastbottommargin; } + else { $properties['MARGIN-TOP'] = 0; } + } + $table['margin']['T'] = $this->ConvertSize($properties['MARGIN-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + + if (isset($properties['MARGIN-BOTTOM'])) { + $table['margin']['B'] = $this->ConvertSize($properties['MARGIN-BOTTOM'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + if (isset($properties['MARGIN-LEFT'])) { + $table['margin']['L'] = $this->ConvertSize($properties['MARGIN-LEFT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + + if (isset($properties['MARGIN-RIGHT'])) { + $table['margin']['R'] = $this->ConvertSize($properties['MARGIN-RIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + if (isset($properties['MARGIN-LEFT']) && isset($properties['MARGIN-RIGHT']) && strtolower($properties['MARGIN-LEFT'])=='auto' && strtolower($properties['MARGIN-RIGHT'])=='auto') { + $table['a'] = 'C'; + } + else if (isset($properties['MARGIN-LEFT']) && strtolower($properties['MARGIN-LEFT'])=='auto') { + $table['a'] = 'R'; + } + else if (isset($properties['MARGIN-RIGHT']) && strtolower($properties['MARGIN-RIGHT'])=='auto') { + $table['a'] = 'L'; + } + + if (isset($properties['LINE-HEIGHT']) && $this->tableLevel==1) { + $this->table_lineheight = $this->fixLineheight($properties['LINE-HEIGHT']); + if (!$this->table_lineheight) { $this->table_lineheight = $this->normalLineheight; } + } + + if (isset($properties['BORDER-COLLAPSE']) && strtoupper($properties['BORDER-COLLAPSE'])=='SEPARATE') { + $table['borders_separate'] = true; + } + else { + $table['borders_separate'] = false; + } + + if (!$table['borders_separate']) { $table['border_spacing_H'] = $table['border_spacing_V'] = 0; } + else if (isset($attr['CELLSPACING'])) { + $table['border_spacing_H'] = $table['border_spacing_V'] = $this->ConvertSize($attr['CELLSPACING'],$this->blk[$this->blklvl]['inner_width']); + } + if (isset($properties['BORDER-SPACING-H'])) { + $table['border_spacing_H'] = $this->ConvertSize($properties['BORDER-SPACING-H'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + if (isset($properties['BORDER-SPACING-V'])) { + $table['border_spacing_V'] = $this->ConvertSize($properties['BORDER-SPACING-V'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + + if (isset($properties['EMPTY-CELLS'])) { + $table['empty_cells'] = strtolower($properties['EMPTY-CELLS']); // 'hide' or 'show' + } + else { $table['empty_cells'] = ''; } + + if (isset($properties['PAGE-BREAK-INSIDE']) && strtoupper($properties['PAGE-BREAK-INSIDE'])=='AVOID' && $this->tableLevel==1 && !$this->writingHTMLfooter) { + $this->table_keep_together = true; + } + else if ($this->tableLevel==1) { + $this->table_keep_together = false; + } + if (isset($properties['PAGE-BREAK-AFTER']) && $this->tableLevel==1) { + $table['page_break_after'] = strtoupper($properties['PAGE-BREAK-AFTER']); + } + +/*-- BACKGROUNDS --*/ + if (isset($properties['BACKGROUND-GRADIENT']) && !$this->kwt && !$this->ColActive) { $table['gradient'] = $properties['BACKGROUND-GRADIENT']; } + + if (isset($properties['BACKGROUND-IMAGE']) && $properties['BACKGROUND-IMAGE'] && !$this->kwt && !$this->ColActive) { + $ret = $this->SetBackground($properties, $currblk['inner_width']); + if ($ret) { $table['background-image'] = $ret; } + } +/*-- END BACKGROUNDS --*/ + + if (isset($properties['OVERFLOW'])) { + $table['overflow'] = strtolower($properties['OVERFLOW']); // 'hidden' 'wrap' or 'visible' or 'auto' + if (($this->ColActive || $this->tableLevel>1) && $table['overflow']=='visible') { unset($table['overflow']); } + } + + $properties = array(); + + + + if (isset($attr['CELLPADDING'])) { + $table['cell_padding'] = $attr['CELLPADDING']; + } + else { + $table['cell_padding'] = false; + } + + if (isset($attr['BORDER']) && $attr['BORDER']=='1') { // mPDF 5.5.08 + $this->table_border_attr_set = 1; // mPDF 5.5.08 + $bord = $this->border_details('#000000 1px solid'); + if ($bord['s']) { + $table['border'] = _BORDER_ALL; + $table['border_details']['R'] = $bord; + $table['border_details']['L'] = $bord; + $table['border_details']['T'] = $bord; + $table['border_details']['B'] = $bord; + } + } + else { + $this->table_border_attr_set = 0; + } + + if ($w) { + $maxwidth = $this->blk[$this->blklvl]['inner_width']; + if ($table['borders_separate']) { + $tblblw = $table['margin']['L'] + $table['margin']['R'] + $table['border_details']['L']['w']/2 + $table['border_details']['R']['w']/2; + } + else { + $tblblw = $table['margin']['L'] + $table['margin']['R'] + $table['max_cell_border_width']['L']/2 + $table['max_cell_border_width']['R']/2; + } + if (strpos($w,'%') && $this->tableLevel == 1 && !$this->ignore_table_percents ) { + // % needs to be of inner box without table margins etc. + $maxwidth -= $tblblw ; + $wmm = $this->ConvertSize($w,$maxwidth,$this->FontSize,false); + $table['w'] = $wmm + $tblblw ; + } + if (strpos($w,'%') && $this->tableLevel > 1 && !$this->ignore_table_percents && $this->keep_table_proportions) { + $table['wpercent'] = $w + 0; // makes 80% -> 80 + } + if (!strpos($w,'%') && !$this->ignore_table_widths ) { + $wmm = $this->ConvertSize($w,$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + $table['w'] = $wmm + $tblblw ; + } + if (!$this->keep_table_proportions) { + if (isset($table['w']) && $table['w'] > $this->blk[$this->blklvl]['inner_width']) { $table['w'] = $this->blk[$this->blklvl]['inner_width']; } + } + } + + if (isset($attr['AUTOSIZE']) && $this->tableLevel==1) { + $this->shrink_this_table_to_fit = $attr['AUTOSIZE']; + if ($this->shrink_this_table_to_fit < 1) { $this->shrink_this_table_to_fit = 1; } + } + if (isset($attr['ROTATE']) && $this->tableLevel==1) { + $this->table_rotate = $attr['ROTATE']; + } + + //++++++++++++++++++++++++++++ + // keeping block together on one page + // Autosize is now forced therefore keep block together disabled + if ($this->keep_block_together) { + $this->keep_block_together = 0; + $this->printdivbuffer(); + $this->blk[$this->blklvl]['keep_block_together'] = 0; + } + if ($this->table_rotate) { + $this->tbrot_Links = array(); + $this->tbrot_Annots = array(); + $this->tbrotForms = array(); + $this->tbrot_Reference = array(); + $this->tbrot_BMoutlines = array(); + $this->tbrot_toc = array(); + } + + if ($this->kwt) { + if ($this->table_rotate) { $this->table_keep_together = true; } + $this->kwt = false; + $this->kwt_saved = true; + } + + if ($this->tableLevel==1 && $this->useGraphs) { + if (isset($attr['ID']) && $attr['ID']) { $this->currentGraphId = strtoupper($attr['ID']); } + else { $this->currentGraphId = '0'; } + $this->graphs[$this->currentGraphId] = array(); + } + //++++++++++++++++++++++++++++ + $this->plainCell_properties = array(); + unset($table); + break; + + case 'THEAD': + $this->lastoptionaltag = $tag; // Save current HTML specified optional endtag + $this->cssmgr->tbCSSlvl++; + $this->tablethead = 1; + $this->tabletfoot = 0; + $properties = $this->cssmgr->MergeCSS('TABLE',$tag,$attr); + if (isset($properties['FONT-WEIGHT'])) { + if (strtoupper($properties['FONT-WEIGHT']) == 'BOLD') { $this->thead_font_weight = 'B'; } + else { $this->thead_font_weight = ''; } + } + + if (isset($properties['FONT-STYLE'])) { + if (strtoupper($properties['FONT-STYLE']) == 'ITALIC') { $this->thead_font_style = 'I'; } + else { $this->thead_font_style = ''; } + } + if (isset($properties['FONT-VARIANT'])) { + if (strtoupper($properties['FONT-VARIANT']) == 'SMALL-CAPS') { $this->thead_font_smCaps = 'S'; } + else { $this->thead_font_smCaps = ''; } + } + + if (isset($properties['VERTICAL-ALIGN'])) { + $this->thead_valign_default = $properties['VERTICAL-ALIGN']; + } + if (isset($properties['TEXT-ALIGN'])) { + $this->thead_textalign_default = $properties['TEXT-ALIGN']; + } + $properties = array(); + break; + + case 'TFOOT': + $this->lastoptionaltag = $tag; // Save current HTML specified optional endtag + $this->cssmgr->tbCSSlvl++; + $this->tabletfoot = 1; + $this->tablethead = 0; + $properties = $this->cssmgr->MergeCSS('TABLE',$tag,$attr); + if (isset($properties['FONT-WEIGHT'])) { + if (strtoupper($properties['FONT-WEIGHT']) == 'BOLD') { $this->tfoot_font_weight = 'B'; } + else { $this->tfoot_font_weight = ''; } + } + + if (isset($properties['FONT-STYLE'])) { + if (strtoupper($properties['FONT-STYLE']) == 'ITALIC') { $this->tfoot_font_style = 'I'; } + else { $this->tfoot_font_style = ''; } + } + if (isset($properties['FONT-VARIANT'])) { + if (strtoupper($properties['FONT-VARIANT']) == 'SMALL-CAPS') { $this->tfoot_font_smCaps = 'S'; } + else { $this->tfoot_font_smCaps = ''; } + } + + if (isset($properties['VERTICAL-ALIGN'])) { + $this->tfoot_valign_default = $properties['VERTICAL-ALIGN']; + } + if (isset($properties['TEXT-ALIGN'])) { + $this->tfoot_textalign_default = $properties['TEXT-ALIGN']; + } + $properties = array(); + break; + + + case 'TBODY': + $this->tablethead = 0; + $this->tabletfoot = 0; + $this->lastoptionaltag = $tag; // Save current HTML specified optional endtag + $this->cssmgr->tbCSSlvl++; + $this->cssmgr->MergeCSS('TABLE',$tag,$attr); + break; + + + case 'TR': + $this->lastoptionaltag = $tag; // Save current HTML specified optional endtag + $this->cssmgr->tbCSSlvl++; + $this->row++; + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['nr']++; + $this->col = -1; + $properties = $this->cssmgr->MergeCSS('TABLE',$tag,$attr); + + if (!$this->simpleTables && (!isset($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['borders_separate']) || !$this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['borders_separate'])) { + if (isset($properties['BORDER-LEFT']) && $properties['BORDER-LEFT']) { $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['trborder-left'][$this->row] = $properties['BORDER-LEFT']; } + if (isset($properties['BORDER-RIGHT']) && $properties['BORDER-RIGHT']) { $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['trborder-right'][$this->row] = $properties['BORDER-RIGHT']; } + if (isset($properties['BORDER-TOP']) && $properties['BORDER-TOP']) { $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['trborder-top'][$this->row] = $properties['BORDER-TOP']; } + if (isset($properties['BORDER-BOTTOM']) && $properties['BORDER-BOTTOM']) { $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['trborder-bottom'][$this->row] = $properties['BORDER-BOTTOM']; } + } + + if (isset($properties['BACKGROUND-COLOR'])) { $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['bgcolor'][$this->row] = $properties['BACKGROUND-COLOR']; } + else if (isset($attr['BGCOLOR'])) $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['bgcolor'][$this->row] = $attr['BGCOLOR']; + +/*-- BACKGROUNDS --*/ + if (isset($properties['BACKGROUND-GRADIENT']) && !$this->kwt && !$this->ColActive) { $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['trgradients'][$this->row] = $properties['BACKGROUND-GRADIENT']; } + + if (isset($properties['BACKGROUND-IMAGE']) && $properties['BACKGROUND-IMAGE'] && !$this->kwt && !$this->ColActive) { + $ret = $this->SetBackground($properties, $currblk['inner_width']); + if ($ret) { $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['trbackground-images'][$this->row] = $ret; } + } +/*-- END BACKGROUNDS --*/ + + + if (isset($properties['TEXT-ROTATE'])) { + $this->trow_text_rotate = $properties['TEXT-ROTATE']; + } + if (isset($attr['TEXT-ROTATE'])) $this->trow_text_rotate = $attr['TEXT-ROTATE']; + + if ($this->tablethead) { $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['is_thead'][$this->row] = true; } + if ($this->tabletfoot) { $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['is_tfoot'][$this->row] = true; } + $properties = array(); + break; + + + case 'TH': + case 'TD': + $this->ignorefollowingspaces = true; + $this->lastoptionaltag = $tag; // Save current HTML specified optional endtag + $this->cssmgr->tbCSSlvl++; + $this->InlineProperties = array(); + $this->spanlvl = 0; + $this->tdbegin = true; + $this->col++; + while (isset($this->cell[$this->row][$this->col])) { $this->col++; } + + //Update number column + if ($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['nc'] < $this->col+1) { $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['nc'] = $this->col+1; } + + $table = &$this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]; + + $c = array('a' => false, + 'R' => false, + 'nowrap' => false, + 'bgcolor' => false, + 'padding' => array('L' => false, + 'R' => false, + 'T' => false, + 'B' => false + ) + ); + + if ($this->simpleTables && $this->row==0 && $this->col==0){ + $table['simple']['border'] = false; + $table['simple']['border_details']['R']['w'] = 0; + $table['simple']['border_details']['L']['w'] = 0; + $table['simple']['border_details']['T']['w'] = 0; + $table['simple']['border_details']['B']['w'] = 0; + $table['simple']['border_details']['R']['style'] = ''; + $table['simple']['border_details']['L']['style'] = ''; + $table['simple']['border_details']['T']['style'] = ''; + $table['simple']['border_details']['B']['style'] = ''; + } + else if (!$this->simpleTables) { + $c['border'] = false; + $c['border_details']['R']['w'] = 0; + $c['border_details']['L']['w'] = 0; + $c['border_details']['T']['w'] = 0; + $c['border_details']['B']['w'] = 0; + $c['border_details']['mbw']['BL'] = 0; + $c['border_details']['mbw']['BR'] = 0; + $c['border_details']['mbw']['RT'] = 0; + $c['border_details']['mbw']['RB'] = 0; + $c['border_details']['mbw']['TL'] = 0; + $c['border_details']['mbw']['TR'] = 0; + $c['border_details']['mbw']['LT'] = 0; + $c['border_details']['mbw']['LB'] = 0; + $c['border_details']['R']['style'] = ''; + $c['border_details']['L']['style'] = ''; + $c['border_details']['T']['style'] = ''; + $c['border_details']['B']['style'] = ''; + $c['border_details']['R']['s'] = 0; + $c['border_details']['L']['s'] = 0; + $c['border_details']['T']['s'] = 0; + $c['border_details']['B']['s'] = 0; + $c['border_details']['R']['c'] = $this->ConvertColor(0); + $c['border_details']['L']['c'] = $this->ConvertColor(0); + $c['border_details']['T']['c'] = $this->ConvertColor(0); + $c['border_details']['B']['c'] = $this->ConvertColor(0); + $c['border_details']['R']['dom'] = 0; + $c['border_details']['L']['dom'] = 0; + $c['border_details']['T']['dom'] = 0; + $c['border_details']['B']['dom'] = 0; + } + + + if ($table['va']) { $c['va'] = $table['va']; } + if ($table['txta']) { $c['a'] = $table['txta']; } + if ($this->table_border_attr_set) { + if ($table['border_details']) { + if (!$this->simpleTables){ + $c['border_details']['R'] = $table['border_details']['R']; + $c['border_details']['L'] = $table['border_details']['L']; + $c['border_details']['T'] = $table['border_details']['T']; + $c['border_details']['B'] = $table['border_details']['B']; + $c['border'] = $table['border']; + $c['border_details']['L']['dom'] = 1; + $c['border_details']['R']['dom'] = 1; + $c['border_details']['T']['dom'] = 1; + $c['border_details']['B']['dom'] = 1; + } + else if ($this->simpleTables && $this->row==0 && $this->col==0){ + $table['simple']['border_details']['R'] = $table['border_details']['R']; + $table['simple']['border_details']['L'] = $table['border_details']['L']; + $table['simple']['border_details']['T'] = $table['border_details']['T']; + $table['simple']['border_details']['B'] = $table['border_details']['B']; + $table['simple']['border'] = $table['border']; + } + } + } + // INHERITED THEAD CSS Properties + if ($this->tablethead) { + if ($this->thead_valign_default) $c['va'] = $align[strtolower($this->thead_valign_default)]; + if ($this->thead_textalign_default) $c['a'] = $align[strtolower($this->thead_textalign_default)]; + if ($this->thead_font_weight == 'B') { $this->SetStyle('B',true); } + if ($this->thead_font_style == 'I') { $this->SetStyle('I',true); } + if ($this->thead_font_smCaps == 'S') { $this->SetStyle('S',true); } + } + + // INHERITED TFOOT CSS Properties + if ($this->tabletfoot) { + if ($this->tfoot_valign_default) $c['va'] = $align[strtolower($this->tfoot_valign_default)]; + if ($this->tfoot_textalign_default) $c['a'] = $align[strtolower($this->tfoot_textalign_default)]; + if ($this->tfoot_font_weight == 'B') { $this->SetStyle('B',true); } + if ($this->tfoot_font_style == 'I') { $this->SetStyle('I',true); } + if ($this->tfoot_font_style == 'S') { $this->SetStyle('S',true); } + } + + + if ($this->trow_text_rotate){ + $c['R'] = $this->trow_text_rotate; + } + + $this->cell_border_dominance_L = 0; + $this->cell_border_dominance_R = 0; + $this->cell_border_dominance_T = 0; + $this->cell_border_dominance_B = 0; + + $properties = $this->cssmgr->MergeCSS('TABLE',$tag,$attr); + $properties = $this->cssmgr->array_merge_recursive_unique($this->base_table_properties, $properties); + + if (isset($properties['FONT-KERNING']) && (strtoupper($properties['FONT-KERNING'])=='NORMAL' || strtoupper($properties['FONT-KERNING'])=='AUTO')) { + $this->kerning = true; + } + else { $this->kerning = false; } + + if (isset($properties['LETTER-SPACING']) && ($properties['LETTER-SPACING'] || $properties['LETTER-SPACING']==='0') && strtoupper($properties['LETTER-SPACING']) != 'NORMAL') { + $this->lSpacingCSS = strtoupper($properties['LETTER-SPACING']); + $this->fixedlSpacing = $this->ConvertSize($this->lSpacingCSS,$this->FontSize); + } + else { + $this->lSpacingCSS = ''; + $this->fixedlSpacing = false; + } + if (isset($properties['WORD-SPACING']) && strtoupper($properties['WORD-SPACING']) != 'NORMAL') { + $this->wSpacingCSS = strtoupper($properties['WORD-SPACING']); + $this->minwSpacing = $this->ConvertSize($this->wSpacingCSS,$this->FontSize); + } + else { + $this->minwSpacing = 0; + $this->wSpacingCSS = ''; + } + // mPDF 5.6.08 + if (isset($properties['HYPHENS']) && $properties['HYPHENS']) { + if (strtoupper($properties['HYPHENS']) == 'NONE') { $this->textparam['hyphens'] = 2; } + else if (strtoupper($properties['HYPHENS']) == 'AUTO') { $this->textparam['hyphens'] = 1; } + else if (strtoupper($properties['HYPHENS']) == 'MANUAL') { $this->textparam['hyphens'] = 0; } + } + + if (isset($properties['BACKGROUND-COLOR'])) { $c['bgcolor'] = $properties['BACKGROUND-COLOR']; } + else if (isset($properties['BACKGROUND'])) { $c['bgcolor'] = $properties['BACKGROUND']; } + else if (isset($attr['BGCOLOR'])) $c['bgcolor'] = $attr['BGCOLOR']; + + + +/*-- BACKGROUNDS --*/ + if (isset($properties['BACKGROUND-GRADIENT'])) { $c['gradient'] = $properties['BACKGROUND-GRADIENT']; } + else { $c['gradient'] = false; } + + if (isset($properties['BACKGROUND-IMAGE']) && $properties['BACKGROUND-IMAGE'] && !$this->keep_block_together) { + $ret = $this->SetBackground($properties, $this->blk[$this->blklvl]['inner_width']); + if ($ret) { $c['background-image'] = $ret; } + } +/*-- END BACKGROUNDS --*/ + if (isset($properties['VERTICAL-ALIGN'])) { $c['va']=$align[strtolower($properties['VERTICAL-ALIGN'])]; } + else if (isset($attr['VALIGN'])) $c['va'] = $align[strtolower($attr['VALIGN'])]; + + + // mPDF 5.6.13 + if (isset($properties['TEXT-ALIGN']) && $properties['TEXT-ALIGN']) { + if (substr($properties['TEXT-ALIGN'],0,1)=='D') { $c['a'] = $properties['TEXT-ALIGN']; } + else { $c['a'] = $align[strtolower($properties['TEXT-ALIGN'])]; } + } + // mPDF 5.6.13 + if (isset($attr['ALIGN']) && $attr['ALIGN']) { + if (strtolower($attr['ALIGN']) == 'char') { + if (isset($attr['CHAR']) && $attr['CHAR']) { + $char = html_entity_decode($attr['CHAR']); + $char = strcode2utf($char); + $d = array_search($char,$this->decimal_align); + if ($d !== false) { $c['a'] = $d.'R'; } + } + else { $c['a'] = 'DPR'; } + } + else { $c['a'] = $align[strtolower($attr['ALIGN'])]; } + } + + if (!$c['a']) { + if (isset($table['direction']) && $table['direction'] == 'rtl' ) { $c['a'] = 'R'; } + else { $c['a'] = 'L'; } + } + + + if (isset($properties['TEXT-ROTATE']) && ($properties['TEXT-ROTATE'] || $properties['TEXT-ROTATE']==="0")){ + $c['R'] = $properties['TEXT-ROTATE']; + } + if (isset($properties['BORDER'])) { + $bord = $this->border_details($properties['BORDER']); + if ($bord['s']) { + if (!$this->simpleTables){ + $c['border'] = _BORDER_ALL; + $c['border_details']['R'] = $bord; + $c['border_details']['L'] = $bord; + $c['border_details']['T'] = $bord; + $c['border_details']['B'] = $bord; + $c['border_details']['L']['dom'] = $this->cell_border_dominance_L; + $c['border_details']['R']['dom'] = $this->cell_border_dominance_R; + $c['border_details']['T']['dom'] = $this->cell_border_dominance_T; + $c['border_details']['B']['dom'] = $this->cell_border_dominance_B; + } + else if ($this->simpleTables && $this->row==0 && $this->col==0){ + $table['simple']['border'] = _BORDER_ALL; + $table['simple']['border_details']['R'] = $bord; + $table['simple']['border_details']['L'] = $bord; + $table['simple']['border_details']['T'] = $bord; + $table['simple']['border_details']['B'] = $bord; + } + } + } + if (!$this->simpleTables){ + if (isset($properties['BORDER-RIGHT']) && $properties['BORDER-RIGHT']) { + $c['border_details']['R'] = $this->border_details($properties['BORDER-RIGHT']); + $this->setBorder($c['border'], _BORDER_RIGHT, $c['border_details']['R']['s']); + $c['border_details']['R']['dom'] = $this->cell_border_dominance_R; + } + if (isset($properties['BORDER-LEFT']) && $properties['BORDER-LEFT']) { + $c['border_details']['L'] = $this->border_details($properties['BORDER-LEFT']); + $this->setBorder($c['border'], _BORDER_LEFT, $c['border_details']['L']['s']); + $c['border_details']['L']['dom'] = $this->cell_border_dominance_L; + } + if (isset($properties['BORDER-BOTTOM']) && $properties['BORDER-BOTTOM']) { + $c['border_details']['B'] = $this->border_details($properties['BORDER-BOTTOM']); + $this->setBorder($c['border'], _BORDER_BOTTOM, $c['border_details']['B']['s']); + $c['border_details']['B']['dom'] = $this->cell_border_dominance_B; + } + if (isset($properties['BORDER-TOP']) && $properties['BORDER-TOP']) { + $c['border_details']['T'] = $this->border_details($properties['BORDER-TOP']); + $this->setBorder($c['border'], _BORDER_TOP, $c['border_details']['T']['s']); + $c['border_details']['T']['dom'] = $this->cell_border_dominance_T; + } + } + else if ($this->simpleTables && $this->row==0 && $this->col==0){ + if (isset($properties['BORDER-LEFT']) && $properties['BORDER-LEFT']) { + $bord = $this->border_details($properties['BORDER-LEFT']); + if ($bord['s']) { $table['simple']['border'] = _BORDER_ALL; } + else { $table['simple']['border'] = 0; } + $table['simple']['border_details']['R'] = $bord; + $table['simple']['border_details']['L'] = $bord; + $table['simple']['border_details']['T'] = $bord; + $table['simple']['border_details']['B'] = $bord; + } + } + + if ($this->simpleTables && $this->row==0 && $this->col==0 && !$table['borders_separate'] && $table['simple']['border'] ){ + $table['border_details'] = $table['simple']['border_details']; + $table['border'] = $table['simple']['border']; + } + + // Border set on TR (if collapsed only) + if (!$table['borders_separate'] && !$this->simpleTables && isset($table['trborder-left'][$this->row])) { + if ($this->col==0) { + $left = $this->border_details($table['trborder-left'][$this->row]); + $c['border_details']['L'] = $left; + $this->setBorder($c['border'], _BORDER_LEFT, $c['border_details']['L']['s']); + } + $c['border_details']['B'] = $this->border_details($table['trborder-bottom'][$this->row]); + $this->setBorder($c['border'], _BORDER_BOTTOM, $c['border_details']['B']['s']); + $c['border_details']['T'] = $this->border_details($table['trborder-top'][$this->row]); + $this->setBorder($c['border'], _BORDER_TOP, $c['border_details']['T']['s']); + } + + if ($this->packTableData && !$this->simpleTables) { + $c['borderbin'] = $this->_packCellBorder($c); + unset($c['border']); + unset($c['border_details']); + } + + if (isset($properties['PADDING-LEFT'])) { + $c['padding']['L'] = $this->ConvertSize($properties['PADDING-LEFT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + if (isset($properties['PADDING-RIGHT'])) { + $c['padding']['R'] = $this->ConvertSize($properties['PADDING-RIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + if (isset($properties['PADDING-BOTTOM'])) { + $c['padding']['B'] = $this->ConvertSize($properties['PADDING-BOTTOM'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + if (isset($properties['PADDING-TOP'])) { + $c['padding']['T'] = $this->ConvertSize($properties['PADDING-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + + $w = ''; + if (isset($properties['WIDTH'])) { $w = $properties['WIDTH']; } + else if (isset($attr['WIDTH'])) { $w = $attr['WIDTH']; } + if ($w) { + if (strpos($w,'%') && !$this->ignore_table_percents ) { $c['wpercent'] = $w + 0; } // makes 80% -> 80 + else if (!strpos($w,'%') && !$this->ignore_table_widths ) { $c['w'] = $this->ConvertSize($w,$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + } + + if (isset($properties['HEIGHT']) && !strpos($properties['HEIGHT'],'%')) { $c['h'] = $this->ConvertSize($properties['HEIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + else if (isset($attr['HEIGHT']) && !strpos($attr['HEIGHT'],'%')) $c['h'] = $this->ConvertSize($attr['HEIGHT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + + + if (isset($properties['COLOR'])) { + $cor = $this->ConvertColor($properties['COLOR']); + if ($cor) { + $this->colorarray = $cor; + $this->SetTColor($cor); + } + } + if (isset($properties['FONT-FAMILY'])) { + $this->SetFont($properties['FONT-FAMILY'],'',0,false); + } + if (isset($properties['FONT-SIZE'])) { + $mmsize = $this->ConvertSize($properties['FONT-SIZE'],$this->default_font_size/_MPDFK); + if ($mmsize) { + $this->SetFontSize($mmsize*(_MPDFK),false); + } + } + $c['dfs'] = $this->FontSize; // Default Font size + if (isset($properties['FONT-WEIGHT'])) { + if (strtoupper($properties['FONT-WEIGHT']) == 'BOLD') { $this->SetStyle('B',true); } + } + if (isset($properties['FONT-STYLE'])) { + if (strtoupper($properties['FONT-STYLE']) == 'ITALIC') { $this->SetStyle('I',true); } + } + if (isset($properties['FONT-VARIANT'])) { + if (strtoupper($properties['FONT-VARIANT']) == 'SMALL-CAPS') { $this->SetStyle('S',true); } + } + if (isset($properties['TEXT-DECORATION'])) { + if (strtoupper($properties['TEXT-DECORATION']) == 'LINE-THROUGH') { $this->strike = true; } + else if (strtoupper($properties['TEXT-DECORATION']) == 'UNDERLINE') { $this->SetStyle('U',true); } + } + if (isset($properties['TEXT-SHADOW'])) { + $ts = $this->cssmgr->setCSStextshadow($properties['TEXT-SHADOW']); + if ($ts) { $this->textshadow = $ts; } + } + if (isset($properties['TEXT-TRANSFORM'])) { + if (strtoupper($properties['TEXT-TRANSFORM']) == 'CAPITALIZE') { $this->capitalize = true; } + else if (strtoupper($properties['TEXT-TRANSFORM']) == 'UPPERCASE') { $this->toupper = true; } + else if (strtoupper($properties['TEXT-TRANSFORM']) == 'LOWERCASE') { $this->tolower = true; } + } + if (isset($properties['WHITE-SPACE'])) { + if (strtoupper($properties['WHITE-SPACE']) == 'NOWRAP') { $c['nowrap']= 1; } + } + $properties = array(); + + if (isset($attr['TEXT-ROTATE'])) { + $c['R'] = $attr['TEXT-ROTATE']; + } + if (isset($attr['NOWRAP']) && $attr['NOWRAP']) $c['nowrap']= 1; + + $this->cell[$this->row][$this->col] = $c; + unset($c); + $this->cell[$this->row][$this->col]['s'] = 0 ; + + $cs = $rs = 1; + if (isset($attr['COLSPAN']) && $attr['COLSPAN']>1) $cs = $this->cell[$this->row][$this->col]['colspan'] = $attr['COLSPAN']; + if ($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['nc'] < $this->col+$cs) { + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['nc'] = $this->col+$cs; + } // following code moved outside if... + for($l=$this->col; $l < $this->col+$cs ;$l++) { + if ($l-$this->col) $this->cell[$this->row][$l] = 0; + } + if (isset($attr['ROWSPAN']) && $attr['ROWSPAN']>1) $rs = $this->cell[$this->row][$this->col]['rowspan'] = $attr['ROWSPAN']; + for ($k=$this->row ; $k < $this->row+$rs ;$k++) { + for($l=$this->col; $l < $this->col+$cs ;$l++) { + if ($k-$this->row || $l-$this->col) $this->cell[$k][$l] = 0; + } + } + unset($table); + break; +/*-- END TABLES --*/ + + +/*-- LISTS --*/ + // *********** LISTS ******************** + case 'OL': + case 'UL': + $this->listjustfinished = false; + + if ($this->blockjustfinished && !count($this->textbuffer) && $this->y != $this->tMargin && $this->collapseBlockMargins) { $lastbottommargin = $this->lastblockbottommargin; } + else { $lastbottommargin = 0; } + $this->lastblockbottommargin = 0; + $this->blockjustfinished=false; + + $this->linebreakjustfinished=false; + $this->lastoptionaltag = ''; // Save current HTML specified optional endtag + $this->cssmgr->listCSSlvl++; + if((!$this->tableLevel) && ($this->listlvl == 0)) { + $blockstate = 0; + //if ($this->lastblocklevelchange == 1) { $blockstate = -1; } // Top margins/padding only + //else if ($this->lastblocklevelchange < 1) { $blockstate = 0; } // NO margins/padding + // called from block after new div e.g. <div> ... <ol> ... Outputs block top margin/border and padding + if (count($this->textbuffer) == 0 && $this->lastblocklevelchange == 1 && !$this->tableLevel && !$this->kwt) { + $this->newFlowingBlock( $this->blk[$this->blklvl]['width'],$this->lineheight,'',false,false,1,true, $this->blk[$this->blklvl]['direction']); + $this->finishFlowingBlock(true); // true = END of flowing block + } + else if (count($this->textbuffer)) { $this->printbuffer($this->textbuffer,$blockstate); } + $this->textbuffer=array(); + $this->lastblocklevelchange = -1; + } + // ol and ul types are mixed here + if ($this->listlvl == 0) { + $this->list_indent = array(); + $this->list_align = array(); + $this->list_lineheight = array(); + $this->InlineProperties['LIST'] = array(); + $this->InlineProperties['LISTITEM'] = array(); + } + +/*-- TABLES --*/ + // A simple list for inside a table + if($this->tableLevel) { + $this->list_indent[$this->listlvl] = 0; // mm default indent for each level + if ($tag == 'OL') $this->listtype = '1'; + else if ($tag == 'UL') $this->listtype = 'disc'; + if ($this->listlvl > 0) { + $this->listlist[$this->listlvl]['MAXNUM'] = $this->listnum; //save previous lvl's maxnum + } + $this->listlvl++; + // mPDF 5.6.15 + if (isset($attr['START'])) { $this->listnum = intval($attr['START']); } + else { $this->listnum = 0; } + $this->listlist[$this->listlvl] = array('TYPE'=>$this->listtype,'MAXNUM'=>$this->listnum); + break; + } +/*-- END TABLES --*/ + + + if (($this->PDFA || $this->PDFX) && $tag == 'UL') { + if (($this->PDFA && !$this->PDFAauto) || ($this->PDFX && !$this->PDFXauto)) { $this->PDFAXwarnings[] = "List bullets cannot use core font Zapfdingbats in PDFA1-b or PDFX/1-a. (Substitute characters from current font used if available, otherwise substitutes hyphen '-')"; } + } + + if ($this->cssmgr->listCSSlvl==1) { + $properties = $this->cssmgr->MergeCSS('TOPLIST',$tag,$attr); + } + else { + $properties = $this->cssmgr->MergeCSS('LIST',$tag,$attr); + } + if (!empty($properties)) $this->setCSS($properties,'LIST'); + // List-type + + $this->listtype = ''; + if (isset($properties['LIST-STYLE-TYPE'])) { + $this->listtype = $this->_getListStyle($properties['LIST-STYLE-TYPE']); + } + else if (isset($properties['LIST-STYLE'])) { + $this->listtype = $this->_getListStyle($properties['LIST-STYLE']); + } + else if (isset($attr['TYPE']) && $attr['TYPE']) { $this->listtype = $attr['TYPE']; } + if (!$this->listtype) { + if ($tag == 'OL') $this->listtype = '1'; + if ($tag == 'UL') { + if ($this->listlvl % 3 == 0) $this->listtype = 'disc'; + elseif ($this->listlvl % 3 == 1) $this->listtype = 'circle'; + else $this->listtype = 'square'; + } + } + if ($this->listlvl == 0) { + $this->inherit_lineheight = 0; + $this->listlvl++; // first depth level + // mPDF 5.6.15 + if (isset($attr['START'])) { $this->listnum = intval($attr['START']); } + else { $this->listnum = 0; } + $this->listDir = (isset($this->blk[$this->blklvl]['direction']) ? $this->blk[$this->blklvl]['direction'] : null); + $occur = $this->listoccur[$this->listlvl] = 1; + $this->listlist[$this->listlvl][1] = array('TYPE'=>$this->listtype,'MAXNUM'=>$this->listnum); + } + else { + if (!empty($this->textbuffer)) + { + $this->listitem[] = array($this->listlvl,$this->listnum,$this->textbuffer,$this->listoccur[$this->listlvl],$this->listitemtype); + $this->listnum++; + } + // Save current lineheight to inherit + $this->textbuffer = array(); + $occur = $this->listoccur[$this->listlvl]; + $this->listlist[$this->listlvl][$occur]['MAXNUM'] = $this->listnum; //save previous lvl's maxnum + $this->listlvl++; + // mPDF 5.6.15 + if (isset($attr['START'])) { $this->listnum = intval($attr['START']); } + else { $this->listnum = 0; } + + + if (!isset($this->listoccur[$this->listlvl]) || $this->listoccur[$this->listlvl] == 0) $this->listoccur[$this->listlvl] = 1; + else $this->listoccur[$this->listlvl]++; + $occur = $this->listoccur[$this->listlvl]; + $this->listlist[$this->listlvl][$occur] = array('TYPE'=>$this->listtype,'MAXNUM'=>$this->listnum); + } + + + // TOP LEVEL ONLY + if ($this->listlvl == 1) { + if (isset($properties['MARGIN-TOP'])) { + if ($lastbottommargin) { + $tmp = $this->ConvertSize($properties['MARGIN-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + if ($tmp > $lastbottommargin) { $properties['MARGIN-TOP'] -= $lastbottommargin; } + else { $properties['MARGIN-TOP'] = 0; } + } + $this->DivLn($this->ConvertSize($properties['MARGIN-TOP'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false),$this->blklvl,true,1); // collapsible + } + if (isset($properties['MARGIN-BOTTOM'])) { + $this->list_margin_bottom = $this->ConvertSize($properties['MARGIN-BOTTOM'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); + } + + if (isset($this->blk[$this->blklvl]['line_height'])) { + $this->list_lineheight[$this->listlvl][$occur] = $this->blk[$this->blklvl]['line_height']; + } + + if (isset($properties['DIRECTION']) && $properties['DIRECTION']) { $this->listDir = strtolower($properties['DIRECTION']); } + else if (isset($attr['DIR']) && $attr['DIR']) { $this->listDir = strtolower($attr['DIR']); } + + } + $this->list_indent[$this->listlvl][$occur] = 5; // mm default indent for each level + if (isset($properties['TEXT-INDENT'])) { $this->list_indent[$this->listlvl][$occur] = $this->ConvertSize($properties['TEXT-INDENT'],$this->blk[$this->blklvl]['inner_width'],$this->FontSize,false); } + + if (isset($properties['TEXT-ALIGN'])) { + $this->list_align[$this->listlvl][$occur] = $align[strtolower($properties['TEXT-ALIGN'])]; + } + + + if (isset($properties['LINE-HEIGHT'])) { + $this->list_lineheight[$this->listlvl][$occur] = $this->fixLineheight($properties['LINE-HEIGHT']); + } + else if ($this->listlvl>1 && isset($this->list_lineheight[($this->listlvl - 1)][1])) { + $this->list_lineheight[$this->listlvl][$occur] = end($this->list_lineheight[($this->listlvl - 1)]); + } + if (!isset($this->list_lineheight[$this->listlvl][$occur]) || !$this->list_lineheight[$this->listlvl][$occur]) { + $this->list_lineheight[$this->listlvl][$occur] = $this->normalLineheight; + } + + $this->InlineProperties['LIST'][$this->listlvl][$occur] = $this->saveInlineProperties(); + $properties = array(); + break; + + + + case 'LI': + // Start Block + $this->lastoptionaltag = $tag; // Save current HTML specified optional endtag + $this->ignorefollowingspaces = true; //Eliminate exceeding left-side spaces +/*-- TABLES --*/ + // A simple list for inside a table + if($this->tableLevel) { + $this->blockjustfinished=false; + + // If already something in the Cell + if ((isset($this->cell[$this->row][$this->col]['maxs']) && $this->cell[$this->row][$this->col]['maxs'] > 0 ) || $this->cell[$this->row][$this->col]['s'] > 0 ) { + $this->_saveCellTextBuffer("\n"); + if (!isset($this->cell[$this->row][$this->col]['maxs'])) { + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + elseif($this->cell[$this->row][$this->col]['maxs'] < $this->cell[$this->row][$this->col]['s']) { + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + $this->cell[$this->row][$this->col]['s'] = 0 ; + } + if ($this->listlvl == 0) { //in case of malformed HTML code. Example:(...)</p><li>Content</li><p>Paragraph1</p>(...) + $this->listlvl++; // first depth level + $this->listnum = 0; // reset + $this->listlist[$this->listlvl] = array('TYPE'=>'disc','MAXNUM'=>$this->listnum); + } + + $this->listnum++; + switch($this->listlist[$this->listlvl]['TYPE']) { + case 'A': + $blt = $this->dec2alpha($this->listnum,true).$this->list_number_suffix; + break; + case 'a': + $blt = $this->dec2alpha($this->listnum,false).$this->list_number_suffix; + break; + case 'I': + $blt = $this->dec2roman($this->listnum,true).$this->list_number_suffix; + break; + case 'i': + $blt = $this->dec2roman($this->listnum,false).$this->list_number_suffix; + break; + case '1': + $blt = $this->listnum.$this->list_number_suffix; + break; + default: + if ($this->listlvl % 3 == 1 && $this->_charDefined($this->CurrentFont['cw'],8226)) { $blt = "\xe2\x80\xa2"; } // • + else if ($this->listlvl % 3 == 2 && $this->_charDefined($this->CurrentFont['cw'],9900)) { $blt = "\xe2\x9a\xac"; } // ⚬ + else if ($this->listlvl % 3 == 0 && $this->_charDefined($this->CurrentFont['cw'],9642)) { $blt = "\xe2\x96\xaa"; } // ▪ + else { $blt = '-'; } + break; + } + + // change to spaces + if ($this->usingCoreFont) { + $ls = str_repeat(chr(160).chr(160),($this->listlvl-1)*2) . $blt . ' '; + } + else { + $ls = str_repeat("\xc2\xa0\xc2\xa0",($this->listlvl-1)*2) . $blt . ' '; + } + + $this->_saveCellTextBuffer($ls, $this->HREF); + $this->cell[$this->row][$this->col]['s'] += $this->GetStringWidth($ls); + break; + } +/*-- END TABLES --*/ + //Observation: </LI> is ignored + if ($this->listlvl == 0) { //in case of malformed HTML code. Example:(...)</p><li>Content</li><p>Paragraph1</p>(...) + //First of all, skip a line + $this->listlvl++; // first depth level + $this->listnum = 0; // reset + $this->listoccur[$this->listlvl] = 1; + $this->listlist[$this->listlvl][1] = array('TYPE'=>'disc','MAXNUM'=>$this->listnum); + } + if ($this->listnum == 0) { + $this->listnum++; + $this->textbuffer = array(); + } + else { + if (!empty($this->textbuffer)) { + if (!$this->listjustfinished) { + $this->listitem[] = array($this->listlvl,$this->listnum,$this->textbuffer,$this->listoccur[$this->listlvl],$this->listitemtype); + $this->listnum++; + } + else { + $this->listitem[] = array($this->listlvl,$this->listnum,$this->textbuffer,$this->listoccur[$this->listlvl],$this->listitemtype, true); + } + } + $this->textbuffer = array(); + } + $this->listjustfinished = false; + + $this->cssmgr->listCSSlvl++; + $properties = $this->cssmgr->MergeCSS('LIST',$tag,$attr); + if (!empty($properties)) $this->setCSS($properties,'LIST'); + $this->InlineProperties['LISTITEM'][$this->listlvl][$this->listoccur[$this->listlvl]][$this->listnum] = $this->saveInlineProperties(); + + // List-type + if (isset($properties['LIST-STYLE-TYPE'])) { + $this->listitemtype = $this->_getListStyle($properties['LIST-STYLE-TYPE']); + } + else if (isset($properties['LIST-STYLE'])) { + $this->listitemtype = $this->_getListStyle($properties['LIST-STYLE']); + } + else if (isset($attr['TYPE']) && $attr['TYPE']) { $this->listitemtype = $attr['TYPE']; } + else $this->listitemtype = ''; + break; +/*-- END LISTS --*/ + + }//end of switch +} + +/*-- LISTS --*/ + +function _getListStyle($ls) { + if (stristr($ls,'decimal')) { return '1'; } +/* CSS3 list-styles numeric (selected) + I added tamil +arabic-indic | bengali | devanagari | gujarati | gurmukhi | kannada | malayalam | oriya | persian | telugu | thai | urdu +*/ + else if (preg_match('/(disc|circle|square|arabic-indic|bengali|devanagari|gujarati|gurmukhi|kannada|malayalam|oriya|persian|tamil|telugu|thai|urdu)/i',$ls,$m)) { + return strtolower(trim($m[1])); + } + else if (stristr($ls,'lower-roman')) { return 'i'; } + else if (stristr($ls,'upper-roman')) { return 'I'; } + else if (stristr($ls,'lower-latin')|| stristr($ls,'lower-alpha')) { return 'a'; } + else if (stristr($ls,'upper-latin') || stristr($ls,'upper-alpha')) { return 'A'; } + else if (stristr($ls,'none')) { return 'none'; } + else if (preg_match('/U\+([a-fA-F0-9]+)/i',$ls)) { return $ls; } + else { return ''; } +} +/*-- END LISTS --*/ + + + +function CloseTag($tag) +{ + $this->ignorefollowingspaces = false; //Eliminate exceeding left-side spaces + //Closing tag + if($tag=='OPTION') { $this->selectoption['ACTIVE'] = false; $this->lastoptionaltag = ''; } + + if($tag=='TTS' or $tag=='TTA' or $tag=='TTZ') { + if ($this->InlineProperties[$tag]) { $this->restoreInlineProperties($this->InlineProperties[$tag]); } + unset($this->InlineProperties[$tag]); + $ltag = strtolower($tag); + $this->$ltag = false; + } + + + if($tag=='FONT' || $tag=='SPAN' || $tag=='CODE' || $tag=='KBD' || $tag=='SAMP' || $tag=='TT' || $tag=='VAR' + || $tag=='INS' || $tag=='STRONG' || $tag=='CITE' || $tag=='SUB' || $tag=='SUP' || $tag=='S' || $tag=='STRIKE' || $tag=='DEL' + || $tag=='Q' || $tag=='EM' || $tag=='B' || $tag=='I' || $tag=='U' | $tag=='SMALL' || $tag=='BIG' || $tag=='ACRONYM' + || $tag=='MARK' || $tag=='TIME' || $tag=='PROGRESS' || $tag=='METER' + ) { // mPDF 5.5.09 + + if ($tag == 'SPAN') { + if (isset($this->InlineProperties['SPAN'][$this->spanlvl]) && $this->InlineProperties['SPAN'][$this->spanlvl]) { $this->restoreInlineProperties($this->InlineProperties['SPAN'][$this->spanlvl]); } + unset($this->InlineProperties['SPAN'][$this->spanlvl]); + if (isset($this->InlineAnnots['SPAN'][$this->spanlvl]) && $this->InlineAnnots['SPAN'][$this->spanlvl]) { $annot = $this->InlineAnnots['SPAN'][$this->spanlvl]; } // *ANNOTATIONS* + unset($this->InlineAnnots['SPAN'][$this->spanlvl]); // *ANNOTATIONS* + $this->spanlvl--; + } + else { + if (isset($this->InlineProperties[$tag]) && $this->InlineProperties[$tag]) { $this->restoreInlineProperties($this->InlineProperties[$tag]); } + unset($this->InlineProperties[$tag]); + if (isset($this->InlineAnnots[$tag]) && $this->InlineAnnots[$tag]) { $annot = $this->InlineAnnots[$tag]; } // *ANNOTATIONS* + unset($this->InlineAnnots[$tag]); // *ANNOTATIONS* + } + +/*-- ANNOTATIONS --*/ + if (isset($annot)) { + if($this->tableLevel) { // *TABLES* + $this->cell[$this->row][$this->col]['textbuffer'][] = array($annot); // *TABLES* + } // *TABLES* + else { // *TABLES* + $this->textbuffer[] = array($annot); + } // *TABLES* + } +/*-- END ANNOTATIONS --*/ + } + + if($tag=='METER' || $tag=='PROGRESS') { + $this->inMeter = false; // mPDF 5.5.09 + } + + + if($tag=='A') { + $this->HREF=''; + if (isset($this->InlineProperties['A'])) { $this->restoreInlineProperties($this->InlineProperties['A']); } + unset($this->InlineProperties['A']); + } + + if($tag=='LEGEND') { // mPDF 5.4.18 + if (count($this->textbuffer) && !$this->tableLevel) { + $leg = $this->textbuffer[(count($this->textbuffer)-1)]; + unset($this->textbuffer[(count($this->textbuffer)-1)]); + $this->textbuffer = array_values($this->textbuffer); + $this->blk[$this->blklvl]['border_legend'] = $leg; + $this->blk[$this->blklvl]['margin_top'] += ($leg[11]/2)/_MPDFK; + $this->blk[$this->blklvl]['padding_top'] += ($leg[11]/2)/_MPDFK; + } + if (isset($this->InlineProperties['LEGEND'])) { $this->restoreInlineProperties($this->InlineProperties['LEGEND']); } + unset($this->InlineProperties['LEGEND']); + $this->ignorefollowingspaces = true; //Eliminate exceeding left-side spaces + } + + + +/*-- FORMS --*/ + // *********** FORM ELEMENTS ******************** + + if($tag=='TEXTAREA') { + $this->specialcontent = ''; + if ($this->InlineProperties[$tag]) { $this->restoreInlineProperties($this->InlineProperties[$tag]); } + unset($this->InlineProperties[$tag]); + } + + + if($tag=='SELECT') { + $this->lastoptionaltag = ''; + $texto = ''; + if (isset($this->selectoption['SELECTED'])) { $texto = $this->selectoption['SELECTED']; } + + if ($this->useActiveForms) { $w = $this->selectoption['MAXWIDTH']; } + else { $w = $this->GetStringWidth($texto); } + if ($w == 0) { $w = 5; } + $objattr['type'] = 'select'; + $objattr['text'] = $texto; + if (isset($this->selectoption['NAME'])) { $objattr['fieldname'] = $this->selectoption['NAME']; } + if (isset($this->selectoption['READONLY'])) { $objattr['readonly'] = true; } + if (isset($this->selectoption['REQUIRED'])) { $objattr['required'] = true; } + if (isset($this->selectoption['SPELLCHECK'])) { $objattr['spellcheck'] = true; } + if (isset($this->selectoption['EDITABLE'])) { $objattr['editable'] = true; } + if (isset($this->selectoption['ONCHANGE'])) { $objattr['onChange'] = $this->selectoption['ONCHANGE']; } + if (isset($this->selectoption['ITEMS'])) { $objattr['items'] = $this->selectoption['ITEMS']; } + if (isset($this->selectoption['MULTIPLE'])) { $objattr['multiple'] = $this->selectoption['MULTIPLE']; } + if (isset($this->selectoption['DISABLED'])) { $objattr['disabled'] = $this->selectoption['DISABLED']; } + if (isset($this->selectoption['TITLE'])) { $objattr['title'] = $this->selectoption['TITLE']; } + if (isset($this->selectoption['COLOR'])) { $objattr['color'] = $this->selectoption['COLOR']; } + if (isset($this->selectoption['SIZE'])) { $objattr['size'] = $this->selectoption['SIZE']; } + if (isset($objattr['size']) && $objattr['size']>1) { $rows=$objattr['size']; } else { $rows = 1; } + + $objattr['fontfamily'] = $this->FontFamily; + $objattr['fontsize'] = $this->FontSizePt; + + $objattr['width'] = $w + ($this->form->form_element_spacing['select']['outer']['h']*2)+($this->form->form_element_spacing['select']['inner']['h']*2) + ($this->FontSize*1.4); + $objattr['height'] = ($this->FontSize*$rows) + ($this->form->form_element_spacing['select']['outer']['v']*2)+($this->form->form_element_spacing['select']['inner']['v']*2); + $e = "\xbb\xa4\xactype=select,objattr=".serialize($objattr)."\xbb\xa4\xac"; + + // Clear properties - tidy up + $properties = array(); + + // Output it to buffers + if ($this->tableLevel) { // *TABLES* + $this->_saveCellTextBuffer($e, $this->HREF); + $this->cell[$this->row][$this->col]['s'] += $objattr['width'] ; // *TABLES* + } // *TABLES* + else { // *TABLES* + $this->_saveTextBuffer($e, $this->HREF); + } // *TABLES* + + $this->selectoption = array(); + $this->specialcontent = ''; + + if ($this->InlineProperties[$tag]) { $this->restoreInlineProperties($this->InlineProperties[$tag]); } + unset($this->InlineProperties[$tag]); + + } +/*-- END FORMS --*/ + + + // *********** BLOCKS ******************** + // mPDF 5.4.18 + if($tag=='P' || $tag=='DIV' || $tag=='H1' || $tag=='H2' || $tag=='H3' || $tag=='H4' || $tag=='H5' || $tag=='H6' || $tag=='PRE' + || $tag=='FORM' || $tag=='ADDRESS' || $tag=='BLOCKQUOTE' || $tag=='CENTER' || $tag=='DT' || $tag=='DD' || $tag=='DL' + || $tag=='CAPTION' || $tag=='FIELDSET' + || $tag=='ARTICLE' || $tag=='ASIDE' || $tag=='FIGURE' || $tag=='FIGCAPTION' || $tag=='FOOTER' || $tag=='HEADER' || $tag=='HGROUP' + || $tag=='NAV' || $tag=='SECTION' || $tag=='DETAILS' || $tag=='SUMMARY' + ) { // mPDF 5.5.09 // mPDF 5.5.22 + + $this->ignorefollowingspaces = true; //Eliminate exceeding left-side spaces + $this->blockjustfinished=true; + + $this->lastblockbottommargin = $this->blk[$this->blklvl]['margin_bottom']; +/*-- LISTS --*/ + if ($this->listlvl>0) { return; } +/*-- END LISTS --*/ + + // mPDF 5.6.34 + if (preg_match('/^H\d/',$tag) && !$this->tableLevel && !$this->writingToC) { // mPDF 5.6.38 + if (isset($this->h2toc[$tag]) || isset($this->h2bookmarks[$tag])) { + $content = ''; + if (count($this->textbuffer)==1) { $content = $this->textbuffer[0][0]; } + else { + for ($i=0;$i<count($this->textbuffer);$i++) { + if (substr($this->textbuffer[$i][0],0,3) != "\xbb\xa4\xac") { //inline object + $content .= $this->textbuffer[$i][0]; + } + } + } +/*-- TOC --*/ + if (isset($this->h2toc[$tag])) { + $objattr = array(); + $objattr['type'] = 'toc'; + $objattr['toclevel'] = $this->h2toc[$tag]; + $objattr['CONTENT'] = htmlspecialchars($content); // mPDF 5.6.37 + $e = "\xbb\xa4\xactype=toc,objattr=".serialize($objattr)."\xbb\xa4\xac"; + array_unshift($this->textbuffer,array($e)); + } +/*-- END TOC --*/ +/*-- BOOKMARKS --*/ + if (isset($this->h2bookmarks[$tag])) { + $objattr = array(); + $objattr['type'] = 'bookmark'; + $objattr['bklevel'] = $this->h2bookmarks[$tag]; + $objattr['CONTENT'] = $content; + $e = "\xbb\xa4\xactype=toc,objattr=".serialize($objattr)."\xbb\xa4\xac"; + array_unshift($this->textbuffer,array($e)); + } +/*-- END BOOKMARKS --*/ + } + } + +/*-- TABLES --*/ + if($this->tableLevel) { + if ($this->linebreakjustfinished) { $this->blockjustfinished=false; } + if (isset($this->InlineProperties['BLOCKINTABLE'])) { + if ($this->InlineProperties['BLOCKINTABLE']) { $this->restoreInlineProperties($this->InlineProperties['BLOCKINTABLE']); } + unset($this->InlineProperties['BLOCKINTABLE']); + } + if($tag=='PRE') { $this->ispre=false; } + return; + } +/*-- END TABLES --*/ + $this->lastoptionaltag = ''; + $this->divbegin=false; + + $this->linebreakjustfinished=false; + + $this->x = $this->lMargin + $this->blk[$this->blklvl]['outer_left_margin']; + +/*-- CSS-FLOAT --*/ + // If float contained in a float, need to extend bottom to allow for it + $currpos = $this->page*1000 + $this->y; + if (isset($this->blk[$this->blklvl]['float_endpos']) && $this->blk[$this->blklvl]['float_endpos'] > $currpos) { + $old_page = $this->page; + $new_page = intval($this->blk[$this->blklvl]['float_endpos'] /1000); + if ($old_page != $new_page) { + $s = $this->PrintPageBackgrounds(); + // Writes after the marker so not overwritten later by page background etc. + $this->pages[$this->page] = preg_replace('/(___BACKGROUND___PATTERNS'.date('jY').')/', '\\1'."\n".$s."\n", $this->pages[$this->page]); + $this->pageBackgrounds = array(); + $this->page = $new_page; + $this->ResetMargins(); + $this->Reset(); + $this->pageoutput[$this->page] = array(); + } + $this->y = (($this->blk[$this->blklvl]['float_endpos'] *1000) % 1000000)/1000; // mod changes operands to integers before processing + } +/*-- END CSS-FLOAT --*/ + + + //Print content + if ($this->lastblocklevelchange == 1) { $blockstate = 3; } // Top & bottom margins/padding + else if ($this->lastblocklevelchange == -1) { $blockstate = 2; } // Bottom margins/padding only + else { $blockstate = 0; } + // called from after e.g. </table> </div> </div> ... Outputs block margin/border and padding + if (count($this->textbuffer) && $this->textbuffer[count($this->textbuffer)-1]) { + if (substr($this->textbuffer[count($this->textbuffer)-1][0],0,3) != "\xbb\xa4\xac") { // not special content + if ($this->usingCoreFont) { + $this->textbuffer[count($this->textbuffer)-1][0] = preg_replace('/[ ]+$/', '', $this->textbuffer[count($this->textbuffer)-1][0]); + } + else { + $this->textbuffer[count($this->textbuffer)-1][0] = preg_replace('/[ ]+$/u', '', $this->textbuffer[count($this->textbuffer)-1][0]); } + } + } + + if (count($this->textbuffer) == 0 && $this->lastblocklevelchange != 0) { + //$this->newFlowingBlock( $this->blk[$this->blklvl]['width'],$this->lineheight,'',false,false,2,true, $this->blk[$this->blklvl]['direction']); + $this->newFlowingBlock( $this->blk[$this->blklvl]['width'],$this->lineheight,'',false,false,$blockstate,true, $this->blk[$this->blklvl]['direction']); + $this->finishFlowingBlock(true); // true = END of flowing block + $this->PaintDivBB('',$blockstate); + } + else { + $this->printbuffer($this->textbuffer,$blockstate); + } + + + $this->textbuffer=array(); + + if ($this->blk[$this->blklvl]['keep_block_together']) { + $this->printdivbuffer(); + } + + if ($this->kwt) { + $this->kwt_height = $this->y - $this->kwt_y0; + } + +/*-- CSS-IMAGE-FLOAT --*/ + $this->printfloatbuffer(); +/*-- END CSS-IMAGE-FLOAT --*/ + + if($tag=='PRE') { $this->ispre=false; } + +/*-- CSS-FLOAT --*/ + if ($this->blk[$this->blklvl]['float'] == 'R') { + // If width not set, here would need to adjust and output buffer + $s = $this->PrintPageBackgrounds(); + // Writes after the marker so not overwritten later by page background etc. + $this->pages[$this->page] = preg_replace('/(___BACKGROUND___PATTERNS'.date('jY').')/', '\\1'."\n".$s."\n", $this->pages[$this->page]); + $this->pageBackgrounds = array(); + $this->Reset(); + $this->pageoutput[$this->page] = array(); + + for($i=($this->blklvl-1); $i >= 0; $i--) { + if (isset($this->blk[$i]['float_endpos'])) { $this->blk[$i]['float_endpos'] = max($this->blk[$i]['float_endpos'], ($this->page*1000 + $this->y)); } + else { $this->blk[$i]['float_endpos'] = $this->page*1000 + $this->y; } + } + + $this->floatDivs[] = array( + 'side'=>'R', + 'startpage'=>$this->blk[$this->blklvl]['startpage'] , + 'y0'=>$this->blk[$this->blklvl]['float_start_y'] , + 'startpos'=> ($this->blk[$this->blklvl]['startpage']*1000 + $this->blk[$this->blklvl]['float_start_y']), + 'endpage'=>$this->page , + 'y1'=>$this->y , + 'endpos'=> ($this->page*1000 + $this->y), + 'w'=> $this->blk[$this->blklvl]['float_width'], + 'blklvl'=>$this->blklvl, + 'blockContext' => $this->blk[$this->blklvl-1]['blockContext'] + ); + + $this->y = $this->blk[$this->blklvl]['float_start_y'] ; + $this->page = $this->blk[$this->blklvl]['startpage'] ; + $this->ResetMargins(); + $this->pageoutput[$this->page] = array(); + } + if ($this->blk[$this->blklvl]['float'] == 'L') { + // If width not set, here would need to adjust and output buffer + $s = $this->PrintPageBackgrounds(); + // Writes after the marker so not overwritten later by page background etc. + $this->pages[$this->page] = preg_replace('/(___BACKGROUND___PATTERNS'.date('jY').')/', '\\1'."\n".$s."\n", $this->pages[$this->page]); + $this->pageBackgrounds = array(); + $this->Reset(); + $this->pageoutput[$this->page] = array(); + + for($i=($this->blklvl-1); $i >= 0; $i--) { + if (isset($this->blk[$i]['float_endpos'])) { $this->blk[$i]['float_endpos'] = max($this->blk[$i]['float_endpos'], ($this->page*1000 + $this->y)); } + else { $this->blk[$i]['float_endpos'] = $this->page*1000 + $this->y; } + } + + $this->floatDivs[] = array( + 'side'=>'L', + 'startpage'=>$this->blk[$this->blklvl]['startpage'] , + 'y0'=>$this->blk[$this->blklvl]['float_start_y'] , + 'startpos'=> ($this->blk[$this->blklvl]['startpage']*1000 + $this->blk[$this->blklvl]['float_start_y']), + 'endpage'=>$this->page , + 'y1'=>$this->y , + 'endpos'=> ($this->page*1000 + $this->y), + 'w'=> $this->blk[$this->blklvl]['float_width'], + 'blklvl'=>$this->blklvl, + 'blockContext' => $this->blk[$this->blklvl-1]['blockContext'] + ); + + $this->y = $this->blk[$this->blklvl]['float_start_y'] ; + $this->page = $this->blk[$this->blklvl]['startpage'] ; + $this->ResetMargins(); + $this->pageoutput[$this->page] = array(); + } +/*-- END CSS-FLOAT --*/ + + if (isset($this->blk[$this->blklvl]['visibility']) && $this->blk[$this->blklvl]['visibility']!='visible') { + $this->SetVisibility('visible'); + } + + if (isset($this->blk[$this->blklvl]['page_break_after'])) { $page_break_after = $this->blk[$this->blklvl]['page_break_after']; } + else { $page_break_after = ''; } + + //Reset values + $this->Reset(); + + // mPDF 5.6.01 - LAYERS + if (isset($this->blk[$this->blklvl]['z-index']) && $this->blk[$this->blklvl]['z-index'] > 0) { + $this->EndLayer(); + } + + if ($this->blklvl > 0) { // ==0 SHOULDN'T HAPPEN - NOT XHTML + if ($this->blk[$this->blklvl]['tag'] == $tag) { + unset($this->blk[$this->blklvl]); + $this->blklvl--; + } + //else { echo $tag; exit; } // debug - forces error if incorrectly nested html tags + } + + $this->lastblocklevelchange = -1 ; + // Reset Inline-type properties + if (isset($this->blk[$this->blklvl]['InlineProperties'])) { $this->restoreInlineProperties($this->blk[$this->blklvl]['InlineProperties']); } + + $this->x = $this->lMargin + $this->blk[$this->blklvl]['outer_left_margin']; + + if ($page_break_after) { + $save_blklvl = $this->blklvl; + $save_blk = $this->blk; + $save_silp = $this->saveInlineProperties(); + $save_spanlvl = $this->spanlvl; + $save_ilp = $this->InlineProperties; + if ($this->blklvl>1) { + // Close any open block tags + for ($b= $this->blklvl;$b>0;$b--) { $this->CloseTag($this->blk[$b]['tag']); } + // Output any text left in buffer + if (count($this->textbuffer)) { $this->printbuffer($this->textbuffer); $this->textbuffer=array(); } + } +/*-- COLUMNS --*/ + $save_cols = false; + if ($this->ColActive) { + $save_cols = true; + $save_nbcol = $this->NbCol; // other values of gap and vAlign will not change by setting Columns off + $this->SetColumns(0); + } +/*-- END COLUMNS --*/ + if ($page_break_after == 'RIGHT') { $this->AddPage($this->CurOrientation,'NEXT-ODD','','','','','', '','', '','','','','','',0,0,0,0,$pagesel); } + else if ($page_break_after == 'LEFT') { $this->AddPage($this->CurOrientation,'NEXT-EVEN','','','','','', '','', '','','','','','',0,0,0,0,$pagesel); } + else { $this->AddPage($this->CurOrientation,'','','','','','', '','', '','','','','','',0,0,0,0,$pagesel); } + if (!$this->restoreBlockPagebreaks) { + $this->blklvl = 0; + $this->lastblocklevelchange = 0; + $this->blk = array(); + $this->initialiseBlock($this->blk[0]); + $this->blk[0]['width'] =& $this->pgwidth; + $this->blk[0]['inner_width'] =& $this->pgwidth; + $this->blk[0]['blockContext'] = $this->blockContext; + $properties = $this->cssmgr->MergeCSS('BLOCK','BODY',''); + $this->setCSS($properties,'','BODY'); + $this->blklvl++; + $currblk =& $this->blk[$this->blklvl]; + $prevblk =& $this->blk[$this->blklvl-1]; + + $this->initialiseBlock($currblk); + $currblk['tag'] = $tag; + $currblk['attr'] = $attr; + + $this->Reset(); + $properties = $this->cssmgr->MergeCSS('BLOCK',$tag,$attr); + } +/*-- COLUMNS --*/ + if ($save_cols) { + // Restore columns + $this->SetColumns($save_nbcol,$this->colvAlign,$this->ColGap); + } +/*-- END COLUMNS --*/ + if ($this->restoreBlockPagebreaks && !$this->tableLevel && !$this->listlvl) { + $this->blk = $save_blk; + // Re-open block tags + $t = $this->blk[0]['tag']; + $a = $this->blk[0]['attr']; + $this->blklvl = 0; + for ($b=0; $b<=$save_blklvl;$b++) { + $tc = $t; + $ac = $a; + $t = $this->blk[$b+1]['tag']; + $a = $this->blk[$b+1]['attr']; + unset($this->blk[$b+1]); + $this->OpenTag($tc,$ac); + } + $this->spanlvl = $save_spanlvl; + $this->InlineProperties = $save_ilp; + $this->restoreInlineProperties($save_silp); + } + } + + } + + +/*-- TABLES --*/ + + if($tag=='TH') $this->SetStyle('B',false); + + if(($tag=='TH' or $tag=='TD') && $this->tableLevel) { + $this->lastoptionaltag = 'TR'; + unset($this->cssmgr->tablecascadeCSS[$this->cssmgr->tbCSSlvl]); + $this->cssmgr->tbCSSlvl--; + if (!$this->tdbegin) { return; } + $this->tdbegin = false; + // Added for correct calculation of cell column width - otherwise misses the last line if not end </p> etc. + if (!isset($this->cell[$this->row][$this->col]['maxs'])) { + if (!is_array($this->cell[$this->row][$this->col])) { $this->Error("You may have an error in your HTML code e.g. </td></td>"); } + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + elseif($this->cell[$this->row][$this->col]['maxs'] < $this->cell[$this->row][$this->col]['s']) { + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + + // Remove last <br> if at end of cell + if (isset($this->cell[$this->row][$this->col]['textbuffer'])) { $ntb = count($this->cell[$this->row][$this->col]['textbuffer']); } + else { $ntb = 0; } + if ($ntb>1 && $this->cell[$this->row][$this->col]['textbuffer'][$ntb-1][0] == "\n") { + unset($this->cell[$this->row][$this->col]['textbuffer'][$ntb-1]); + } + + if ($this->cacheTables) { + $clen = $this->_cacheCell($this->cell[$this->row][$this->col], $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['cache']); + $this->cell[$this->row][$this->col] = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['ptr']; + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['ptr'] += $clen; + } + + if ($this->tablethead) { + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['is_thead'][$this->row] = true; + if ($this->tableLevel==1) { $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['headernrows'] = max($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['headernrows'] , ($this->row+1)); } + } + if ($this->tabletfoot) { + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['is_tfoot'][$this->row] = true; + if ($this->tableLevel==1) { $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['footernrows'] = max($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['footernrows'] , ($this->row+1 - $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['headernrows'] )); } + } + $this->Reset(); + } + + if($tag=='TR' && $this->tableLevel) { + // If Border set on TR - Update right border + if (isset($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['trborder-left'][$this->row])) { + if ($this->cacheTables) { + $c = $this->_uncacheCell($this->cell[$this->row][$this->col], $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['cache'], null); + } + else { $c =& $this->cell[$this->row][$this->col]; } + if ($c) { + if ($this->packTableData) { + $cell = $this->_unpackCellBorder($c['borderbin'] ); + } + else { $cell = $c; } + $cell['border_details']['R'] = $this->border_details($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['trborder-right'][$this->row]); + $this->setBorder($cell['border'], _BORDER_RIGHT, $cell['border_details']['R']['s']); + if ($this->packTableData) { + $c['borderbin'] = $this->_packCellBorder($cell); + unset($c['border']); + unset($c['border_details']); + } + else { $c = $cell; } + } + if ($this->cacheTables) { + $fh = fopen($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['cache'], "r+b"); + $this->_cacheUpdateBorder($c, $fh, $this->cell[$this->row][$this->col]); + fclose($fh); + } + } + $this->lastoptionaltag = ''; + unset($this->cssmgr->tablecascadeCSS[$this->cssmgr->tbCSSlvl]); + $this->cssmgr->tbCSSlvl--; + $this->trow_text_rotate = ''; + $this->tabletheadjustfinished = false; + } + + if($tag=='TBODY') { + $this->lastoptionaltag = ''; + unset($this->cssmgr->tablecascadeCSS[$this->cssmgr->tbCSSlvl]); + $this->cssmgr->tbCSSlvl--; + } + + if($tag=='THEAD') { + $this->lastoptionaltag = ''; + unset($this->cssmgr->tablecascadeCSS[$this->cssmgr->tbCSSlvl]); + $this->cssmgr->tbCSSlvl--; + $this->tablethead = 0; + $this->tabletheadjustfinished = true; + $this->ResetStyles(); + $this->thead_font_weight = ''; + $this->thead_font_style = ''; + $this->thead_font_smCaps = ''; + + $this->thead_valign_default = ''; + $this->thead_textalign_default = ''; + } + + if($tag=='TFOOT') { + $this->lastoptionaltag = ''; + unset($this->cssmgr->tablecascadeCSS[$this->cssmgr->tbCSSlvl]); + $this->cssmgr->tbCSSlvl--; + $this->tabletfoot = 0; + $this->ResetStyles(); + $this->tfoot_font_weight = ''; + $this->tfoot_font_style = ''; + $this->tfoot_font_smCaps = ''; + + $this->tfoot_valign_default = ''; + $this->tfoot_textalign_default = ''; + } + + if($tag=='TABLE') { // TABLE-END ( + if ($this->progressBar) { $this->UpdateProgressBar(1,'','TABLE'); } // *PROGRESS-BAR* + if ($this->progressBar) { $this->UpdateProgressBar(7,0,''); } // *PROGRESS-BAR* + $this->lastoptionaltag = ''; + unset($this->cssmgr->tablecascadeCSS[$this->cssmgr->tbCSSlvl]); + $this->cssmgr->tbCSSlvl--; + $this->ignorefollowingspaces = true; //Eliminate exceeding left-side spaces + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['cells'] = $this->cell; + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['wc'] = array_pad(array(),$this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['nc'],array('miw'=>0,'maw'=>0)); + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['hr'] = array_pad(array(),$this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['nr'],0); + + // Move table footer <tfoot> row to end of table + if (isset($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['is_tfoot']) && count($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['is_tfoot'])) { + $tfrows = array(); + foreach($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['is_tfoot'] AS $r=>$val) { + if ($val) { $tfrows[] = $r; } + } + $temp = array(); + $temptf = array(); + foreach($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['cells'] AS $k=>$row) { + if (in_array($k,$tfrows)) { + $temptf[] = $row; + } + else { + $temp[] = $row; + } + } + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['is_tfoot'] = array(); + for($i=count($temp) ; $i<(count($temp)+count($temptf)); $i++) { + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['is_tfoot'][$i] = true; + } + // Update nestedpos row references + if (count($this->table[($this->tableLevel+1)])) { + foreach($this->table[($this->tableLevel+1)] AS $nid=>$nested) { + $this->table[($this->tableLevel+1)][$nid]['nestedpos'][0] -= count($temptf); + } + } + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['cells'] = array_merge($temp, $temptf); + + // Update other arays set on row number + // [trbackground-images] [trgradients] + $temptrbgi = array(); + $temptrbgg = array(); + $temptrbgc = array(); + $temptrbgc[-1] = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['bgcolor'][-1]; + for($k=0; $k<$this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['nr']; $k++) { + if (!in_array($k,$tfrows)) { + $temptrbgi[] = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['trbackground-images'][$k]; + $temptrbgg[] = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['trgradients'][$k]; + $temptrbgc[] = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['bgcolor'][$k]; + } + } + for($k=0; $k<$this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['nr']; $k++) { + if (in_array($k,$tfrows)) { + $temptrbgi[] = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['trbackground-images'][$k]; + $temptrbgg[] = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['trgradients'][$k]; + $temptrbgc[] = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['bgcolor'][$k]; + } + } + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['trbackground-images'] = $temptrbgi; + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['trgradients'] = $temptrbgg; + $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['bgcolor'] = $temptrbgc ; + // Should Update all other arays set on row number, but cell properties have been set so not needed + // [bgcolor] [trborder-left] [trborder-right] [trborder-top] [trborder-bottom] + } + + if ($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['direction']=='rtl') { + $this->_reverseTableDir($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]); + } + + // Fix Borders ********************************************* + $this->_fixTableBorders($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]); + + if ($this->progressBar) { $this->UpdateProgressBar(7,10,' '); } // *PROGRESS-BAR* + + if ($this->ColActive) { $this->table_rotate = 0; } // *COLUMNS* + if ($this->table_rotate <> 0) { + $this->tablebuffer = ''; + // Max width for rotated table + $this->tbrot_maxw = $this->h - ($this->y + $this->bMargin + 1); + $this->tbrot_maxh = $this->blk[$this->blklvl]['inner_width'] ; // Max width for rotated table + $this->tbrot_align = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['a'] ; + } + $this->shrin_k = 1; + + if ($this->shrink_tables_to_fit < 1) { $this->shrink_tables_to_fit = 1; } + if (!$this->shrink_this_table_to_fit) { $this->shrink_this_table_to_fit = $this->shrink_tables_to_fit; } + + if ($this->tableLevel>1) { + // deal with nested table + + $this->_tableColumnWidth($this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]],true); + + $tmiw = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['miw']; + $tmaw = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['maw']; + $tl = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['tl']; + + // Go down to lower table level + $this->tableLevel--; + + // Reset lower level table + $this->base_table_properties = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['baseProperties']; + $this->cell = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['cells']; + // mPDF 5.4.10 + if (isset($this->cell['PARENTCELL'])) { + if ($this->cell['PARENTCELL']) { $this->restoreInlineProperties($this->cell['PARENTCELL']); } + unset($this->cell['PARENTCELL']); + } + $this->row = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['currrow']; + $this->col = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['currcol']; + $objattr = array(); + $objattr['type'] = 'nestedtable'; + $objattr['nestedcontent'] = $this->tbctr[($this->tableLevel+1)]; + $objattr['table'] = $this->tbctr[$this->tableLevel]; + $objattr['row'] = $this->row; + $objattr['col'] = $this->col; + $objattr['level'] = $this->tableLevel; + $e = "\xbb\xa4\xactype=nestedtable,objattr=".serialize($objattr)."\xbb\xa4\xac"; + $this->_saveCellTextBuffer($e); + $this->cell[$this->row][$this->col]['s'] += $tl ; + if (!isset($this->cell[$this->row][$this->col]['maxs'])) { + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + elseif($this->cell[$this->row][$this->col]['maxs'] < $this->cell[$this->row][$this->col]['s']) { + $this->cell[$this->row][$this->col]['maxs'] = $this->cell[$this->row][$this->col]['s']; + } + $this->cell[$this->row][$this->col]['s'] = 0;// reset + if ((isset($this->cell[$this->row][$this->col]['nestedmaw']) && $this->cell[$this->row][$this->col]['nestedmaw'] < $tmaw) || !isset($this->cell[$this->row][$this->col]['nestedmaw'])) { $this->cell[$this->row][$this->col]['nestedmaw'] = $tmaw ; } + if ((isset($this->cell[$this->row][$this->col]['nestedmiw']) && $this->cell[$this->row][$this->col]['nestedmiw'] < $tmiw) || !isset($this->cell[$this->row][$this->col]['nestedmiw'])) { $this->cell[$this->row][$this->col]['nestedmiw'] = $tmiw ; } + $this->tdbegin = true; + $this->nestedtablejustfinished = true; + $this->ignorefollowingspaces = true; + return; + } + $this->cMarginL = 0; + $this->cMarginR = 0; + $this->cMarginT = 0; + $this->cMarginB = 0; + $this->cellPaddingL = 0; + $this->cellPaddingR = 0; + $this->cellPaddingT = 0; + $this->cellPaddingB = 0; + + if (isset($this->table[1][1]['overflow']) && $this->table[1][1]['overflow']=='visible') { + if ($this->kwt || $this->table_rotate || $this->table_keep_together || $this->ColActive) { + $this->kwt = false; + $this->table_rotate = 0; + $this->table_keep_together = false; + //die("mPDF Warning: You cannot use CSS overflow:visible together with any of these functions: 'Keep-with-table', rotated tables, page-break-inside:avoid, or columns"); + } + $this->_tableColumnWidth($this->table[1][1],true); + $this->_tableWidth($this->table[1][1]); + } + else { + if (!$this->kwt_saved) { $this->kwt_height = 0; } + + list($check,$tablemiw) = $this->_tableColumnWidth($this->table[1][1],true); + $save_table = $this->table; + if ($this->cacheTables) { $this->_backupCacheFiles(); } + $reset_to_minimum_width = false; + $added_page = false; + + if ($check > 1) { + if ($check > $this->shrink_this_table_to_fit && $this->table_rotate) { + if ($this->y != $this->tMargin) { + $this->AddPage($this->CurOrientation); + $this->kwt_moved = true; + } + $added_page = true; + $this->tbrot_maxw = $this->h - ($this->y + $this->bMargin + 5) - $this->kwt_height; + //$check = $tablemiw/$this->tbrot_maxw; // undo any shrink + $check = 1; // undo any shrink + } + $reset_to_minimum_width = true; + } + + if ($reset_to_minimum_width) { + + $this->shrin_k = $check; + + $this->default_font_size /= $this->shrin_k; + $this->SetFontSize($this->default_font_size, false ); + + $this->shrinkTable($this->table[1][1],$this->shrin_k); + + $this->_tableColumnWidth($this->table[1][1],false); // repeat + + // Starting at $this->innermostTableLevel + // Shrink table values - and redo columnWidth + for($lvl=2;$lvl<=$this->innermostTableLevel;$lvl++) { + for ($nid=1; $nid<=$this->tbctr[$lvl]; $nid++) { + $this->shrinkTable($this->table[$lvl][$nid],$this->shrin_k); + $this->_tableColumnWidth($this->table[$lvl][$nid],false); + } + } + } + + // Set table cell widths for top level table + // Use $shrin_k to resize but don't change again + $this->SetLineHeight('',$this->table_lineheight); + + // Top level table + $this->_tableWidth($this->table[1][1]); + + } + + + // Now work through any nested tables setting child table[w'] = parent cell['w'] + // Now do nested tables _tableWidth + for($lvl=2;$lvl<=$this->innermostTableLevel;$lvl++) { + for ($nid=1; $nid<=$this->tbctr[$lvl]; $nid++) { + // HERE set child table width = cell width + + list($parentrow, $parentcol, $parentnid) = $this->table[$lvl][$nid]['nestedpos']; + + if ($this->cacheTables) { + $c = $this->_uncacheCell($this->table[($lvl-1)][$parentnid]['cells'][$parentrow][$parentcol], $this->table[($lvl-1)][$parentnid]['cache'], null); + } + else + $c =& $this->table[($lvl-1)][$parentnid]['cells'][$parentrow][$parentcol]; + + if (isset($c['colspan']) && $c['colspan']> 1) { + $parentwidth = 0; + for($cs=0;$cs<$c['colspan'] ; $cs++) { + $parentwidth += $this->table[($lvl-1)][$parentnid]['wc'][$parentcol+$cs]; + } + } + else { $parentwidth = $this->table[($lvl-1)][$parentnid]['wc'][$parentcol]; } + + + //$parentwidth -= ALLOW FOR PADDING ETC.in parent cell + if (!$this->simpleTables){ + if ($this->packTableData) { + list($bt,$br,$bb,$bl) = $this->_getBorderWidths($c['borderbin']); + } + else { + $br = $c['border_details']['R']['w']; + $bl = $c['border_details']['L']['w']; + } + if ($this->table[$lvl-1][$parentnid]['borders_separate']) { + $parentwidth -= $br + $bl + + $c['padding']['L'] + + $c['padding']['R'] + + $this->table[($lvl-1)][$parentnid]['border_spacing_H']; + } + else { + $parentwidth -= $br/2 + $bl/2 + + $c['padding']['L'] + + $c['padding']['R']; + } + } + else if ($this->simpleTables){ + if ($this->table[$lvl-1][$parentnid]['borders_separate']) { + $parentwidth -= $this->table[($lvl-1)][$parentnid]['simple']['border_details']['L']['w'] + + $this->table[($lvl-1)][$parentnid]['simple']['border_details']['R']['w'] + + $c['padding']['L'] + + $c['padding']['R'] + + $this->table[($lvl-1)][$parentnid]['border_spacing_H']; + } + else { + $parentwidth -= $this->table[($lvl-1)][$parentnid]['simple']['border_details']['L']['w']/2 + + $this->table[($lvl-1)][$parentnid]['simple']['border_details']['R']['w']/2 + + $c['padding']['L'] + + $c['padding']['R']; + } + } + if (isset($this->table[$lvl][$nid]['wpercent']) && $this->table[$lvl][$nid]['wpercent'] && $lvl>1) { + $this->table[$lvl][$nid]['w'] = $parentwidth; + } + else if ($parentwidth > $this->table[$lvl][$nid]['maw']) { + $this->table[$lvl][$nid]['w'] = $this->table[$lvl][$nid]['maw']; + } + else { + $this->table[$lvl][$nid]['w'] = $parentwidth; + } + unset($c); + $this->_tableWidth($this->table[$lvl][$nid]); + } + } + + // Starting at $this->innermostTableLevel + // Cascade back up nested tables: setting heights back up the tree + for($lvl=$this->innermostTableLevel;$lvl>0;$lvl--) { + for ($nid=1; $nid<=$this->tbctr[$lvl]; $nid++) { + list($tableheight,$maxrowheight,$fullpage,$remainingpage, $maxfirstrowheight) = $this->_tableHeight($this->table[$lvl][$nid]); } + } + if ($this->progressBar) { $this->UpdateProgressBar(7,20,' '); } // *PROGRESS-BAR* + if ($this->table[1][1]['overflow']=='visible') { + if ($maxrowheight > $fullpage) { die("mPDF Warning: A Table row is greater than available height. You cannot use CSS overflow:visible"); } + if ($maxfirstrowheight > $remainingpage) { $this->AddPage($this->CurOrientation); } + $r = 0; $c = 0; $p = 0; $y = 0; + while (!$finished) { + list($finished,$r,$c,$p,$y,$y0) = $this->_tableWrite($this->table[1][1],true,$r,$c,$p,$y); + if (!$finished) { + $this->AddPage($this->CurOrientation); + // If printed something on first spread, set same y + if ($r==0 && $y0 > -1) { $this->y = $y0; } + } + } + } + else { + $recalculate = 1; + $forcerecalc = false; + // RESIZING ALGORITHM + if ($maxrowheight > $fullpage) { + $recalculate = $this->tbsqrt($maxrowheight / $fullpage, 1); + $forcerecalc = true; + } + else if ($this->table_rotate) { // NB $remainingpage == $fullpage == the width of the page + if ($tableheight > $remainingpage) { + // If can fit on remainder of page whilst respecting autsize value.. + if (($this->shrin_k * $this->tbsqrt($tableheight / $remainingpage, 1)) <= $this->shrink_this_table_to_fit) { + $recalculate = $this->tbsqrt($tableheight / $remainingpage, 1); + } + else if (!$added_page) { + if ($this->y != $this->tMargin) { + $this->AddPage($this->CurOrientation); + $this->kwt_moved = true; + } + $added_page = true; + $this->tbrot_maxw = $this->h - ($this->y + $this->bMargin + 5) - $this->kwt_height; + // 0.001 to force it to recalculate + $recalculate = (1 / $this->shrin_k) + 0.001; // undo any shrink + } + } + else { $recalculate = 1; } + } + else if ($this->table_keep_together || ($this->table[1][1]['nr']==1 && !$this->writingHTMLfooter)) { + if ($tableheight > $fullpage) { + if (($this->shrin_k * $this->tbsqrt($tableheight / $fullpage, 1)) <= $this->shrink_this_table_to_fit) { + $recalculate = $this->tbsqrt($tableheight / $fullpage, 1); + } + else if ($this->tableMinSizePriority) { + $this->table_keep_together = false; + $recalculate = 1.001; + } + else { + if ($this->y != $this->tMargin) { // mPDF 5.1 + $this->AddPage($this->CurOrientation); + $this->kwt_moved = true; + } + $added_page = true; + $this->tbrot_maxw = $this->h - ($this->y + $this->bMargin + 5) - $this->kwt_height; + $recalculate = $this->tbsqrt($tableheight / $fullpage, 1); + } + } + else if ($tableheight > $remainingpage) { + // If can fit on remainder of page whilst respecting autsize value.. + if (($this->shrin_k * $this->tbsqrt($tableheight / $remainingpage, 1)) <= $this->shrink_this_table_to_fit) { + $recalculate = $this->tbsqrt($tableheight / $remainingpage, 1); + } + else { + if ($this->y != $this->tMargin) { + $this->AddPage($this->CurOrientation); + $this->kwt_moved = true; + } + $added_page = true; + $this->tbrot_maxw = $this->h - ($this->y + $this->bMargin + 5) - $this->kwt_height; + $recalculate = 1.001; + } + } + else { $recalculate = 1; } + } + else { $recalculate = 1; } + + if ($recalculate > $this->shrink_this_table_to_fit && !$forcerecalc) { $recalculate = $this->shrink_this_table_to_fit; } + + $iteration = 1; + + // RECALCULATE + while($recalculate <> 1) { + $this->shrin_k1 = $recalculate ; + $this->shrin_k *= $recalculate ; + $this->default_font_size /= ($this->shrin_k1) ; + $this->SetFontSize($this->default_font_size, false ); + $this->SetLineHeight('',$this->table_lineheight); + $this->table = $save_table; + if ($this->cacheTables) { $this->_restoreCacheFiles(); } + if ($this->shrin_k <> 1) { $this->shrinkTable($this->table[1][1],$this->shrin_k); } + $this->_tableColumnWidth($this->table[1][1],false); // repeat + + // Starting at $this->innermostTableLevel + // Shrink table values - and redo columnWidth + for($lvl=2;$lvl<=$this->innermostTableLevel;$lvl++) { + for ($nid=1; $nid<=$this->tbctr[$lvl]; $nid++) { + if ($this->shrin_k <> 1) { $this->shrinkTable($this->table[$lvl][$nid],$this->shrin_k); } + $this->_tableColumnWidth($this->table[$lvl][$nid],false); + } + } + // Set table cell widths for top level table + + // Top level table + $this->_tableWidth($this->table[1][1]); + + // Now work through any nested tables setting child table[w'] = parent cell['w'] + // Now do nested tables _tableWidth + for($lvl=2;$lvl<=$this->innermostTableLevel;$lvl++) { + for ($nid=1; $nid<=$this->tbctr[$lvl]; $nid++) { + // HERE set child table width = cell width + + list($parentrow, $parentcol, $parentnid) = $this->table[$lvl][$nid]['nestedpos']; + if ($this->cacheTables) { + $c = $this->_uncacheCell($this->table[($lvl-1)][$parentnid]['cells'][$parentrow][$parentcol], $this->table[($lvl-1)][$parentnid]['cache'], null); + } + else + $c =& $this->table[($lvl-1)][$parentnid]['cells'][$parentrow][$parentcol]; + + if (isset($c['colspan']) && $c['colspan']> 1) { + $parentwidth = 0; + for($cs=0;$cs<$c['colspan'] ; $cs++) { + $parentwidth += $this->table[($lvl-1)][$parentnid]['wc'][$parentcol+$cs]; + } + } + else { $parentwidth = $this->table[($lvl-1)][$parentnid]['wc'][$parentcol]; } + + //$parentwidth -= ALLOW FOR PADDING ETC.in parent cell + if (!$this->simpleTables){ + if ($this->packTableData) { + list($bt,$br,$bb,$bl) = $this->_getBorderWidths($c['borderbin']); + } + else { + $br = $c['border_details']['R']['w']; + $bl = $c['border_details']['L']['w']; + } + if ($this->table[$lvl-1][$parentnid]['borders_separate']) { + $parentwidth -= $br + $bl + + $c['padding']['L'] + + $c['padding']['R'] + + $this->table[($lvl-1)][$parentnid]['border_spacing_H']; + } + else { + $parentwidth -= $br/2 + $bl/2 + + $c['padding']['L'] + + $c['padding']['R']; + } + } + else if ($this->simpleTables){ + if ($this->table[$lvl-1][$parentnid]['borders_separate']) { + $parentwidth -= $this->table[($lvl-1)][$parentnid]['simple']['border_details']['L']['w'] + + $this->table[($lvl-1)][$parentnid]['simple']['border_details']['R']['w'] + + $c['padding']['L'] + + $c['padding']['R'] + + $this->table[($lvl-1)][$parentnid]['border_spacing_H']; + } + else { + $parentwidth -= ($this->table[($lvl-1)][$parentnid]['simple']['border_details']['L']['w'] + + $this->table[($lvl-1)][$parentnid]['simple']['border_details']['R']['w']) /2 + + $c['padding']['L'] + + $c['padding']['R']; + } + } + if (isset($this->table[$lvl][$nid]['wpercent']) && $this->table[$lvl][$nid]['wpercent'] && $lvl>1) { + $this->table[$lvl][$nid]['w'] = $parentwidth; + } + else if ($parentwidth > $this->table[$lvl][$nid]['maw']) { + $this->table[$lvl][$nid]['w'] = $this->table[$lvl][$nid]['maw'] ; + } + else { + $this->table[$lvl][$nid]['w'] = $parentwidth; + } + unset($c); + $this->_tableWidth($this->table[$lvl][$nid]); + } + } + + // Starting at $this->innermostTableLevel + // Cascade back up nested tables: setting heights back up the tree + for($lvl=$this->innermostTableLevel;$lvl>0;$lvl--) { + for ($nid=1; $nid<=$this->tbctr[$lvl]; $nid++) { + list($tableheight,$maxrowheight,$fullpage,$remainingpage, $maxfirstrowheight) = $this->_tableHeight($this->table[$lvl][$nid]); } + } + + // RESIZING ALGORITHM + + if ($maxrowheight > $fullpage) { $recalculate = $this->tbsqrt($maxrowheight / $fullpage, $iteration); $iteration++; } + else if ($this->table_rotate && $tableheight > $remainingpage && !$added_page) { + // If can fit on remainder of page whilst respecting autosize value.. + if (($this->shrin_k * $this->tbsqrt($tableheight / $remainingpage, $iteration)) <= $this->shrink_this_table_to_fit) { + $recalculate = $this->tbsqrt($tableheight / $remainingpage, $iteration); $iteration++; + } + else { + if (!$added_page) { + $this->AddPage($this->CurOrientation); + $added_page = true; + $this->kwt_moved = true; + $this->tbrot_maxw = $this->h - ($this->y + $this->bMargin + 5) - $this->kwt_height; + } + // 0.001 to force it to recalculate + $recalculate = (1 / $this->shrin_k) + 0.001; // undo any shrink + } + } + else if ($this->table_keep_together || ($this->table[1][1]['nr']==1 && !$this->writingHTMLfooter)) { + if ($tableheight > $fullpage) { + if (($this->shrin_k * $this->tbsqrt($tableheight / $fullpage, $iteration)) <= $this->shrink_this_table_to_fit) { + $recalculate = $this->tbsqrt($tableheight / $fullpage, $iteration); $iteration++; + } + else if ($this->tableMinSizePriority) { + $this->table_keep_together = false; + $recalculate = (1 / $this->shrin_k) + 0.001; + } + else { + if (!$added_page && $this->y != $this->tMargin) { + $this->AddPage($this->CurOrientation); + $added_page = true; + $this->kwt_moved = true; + $this->tbrot_maxw = $this->h - ($this->y + $this->bMargin + 5) - $this->kwt_height; + } + $recalculate = $this->tbsqrt($tableheight / $fullpage, $iteration); $iteration++; + } + } + else if ($tableheight > $remainingpage) { + // If can fit on remainder of page whilst respecting autosize value.. + if (($this->shrin_k * $this->tbsqrt($tableheight / $remainingpage, $iteration)) <= $this->shrink_this_table_to_fit) { + $recalculate = $this->tbsqrt($tableheight / $remainingpage, $iteration); $iteration++; + } + else { + if (!$added_page) { + $this->AddPage($this->CurOrientation); + $added_page = true; + $this->kwt_moved = true; + $this->tbrot_maxw = $this->h - ($this->y + $this->bMargin + 5) - $this->kwt_height; + } + + //$recalculate = $this->tbsqrt($tableheight / $fullpage, $iteration); $iteration++; + $recalculate = (1 / $this->shrin_k) + 0.001; // undo any shrink + } + } + else { $recalculate = 1; } + } + else { $recalculate = 1; } + } + + + if ($maxfirstrowheight > $remainingpage && !$added_page && !$this->table_rotate && !$this->ColActive && !$this->table_keep_together && !$this->writingHTMLheader && !$this->writingHTMLfooter) { + $this->AddPage($this->CurOrientation); + $this->kwt_moved = true; + } + + // keep-with-table: if page has advanced, print out buffer now, else done in fn. _Tablewrite() + if ($this->kwt_saved && $this->kwt_moved) { + $this->printkwtbuffer(); + $this->kwt_moved = false; + $this->kwt_saved = false; + } + + if ($this->progressBar) { $this->UpdateProgressBar(7,30,' '); } // *PROGRESS-BAR* + // Recursively writes all tables starting at top level + $this->_tableWrite($this->table[1][1]); + + if ($this->table_rotate && $this->tablebuffer) { + $this->PageBreakTrigger=$this->h-$this->bMargin; + $save_tr = $this->table_rotate; + $save_y = $this->y; + $this->table_rotate = 0; + $this->y = $this->tbrot_y0; + $h = $this->tbrot_w; + $this->DivLn($h,$this->blklvl,true); + + $this->table_rotate = $save_tr; + $this->y = $save_y; + + $this->printtablebuffer(); + } + $this->table_rotate = 0; + } + + + $this->x = $this->lMargin + $this->blk[$this->blklvl]['outer_left_margin']; + + $this->maxPosR = max($this->maxPosR , ($this->x + $this->table[1][1]['w'])); + + $this->blockjustfinished=true; + $this->lastblockbottommargin = $this->table[1][1]['margin']['B']; + //Reset values + + if (isset($this->table[1][1]['page_break_after'])) { $page_break_after = $this->table[1][1]['page_break_after']; } + else { $page_break_after = ''; } + + // Keep-with-table + $this->kwt = false; + $this->kwt_y0 = 0; + $this->kwt_x0 = 0; + $this->kwt_height = 0; + $this->kwt_buffer = array(); + $this->kwt_Links = array(); + $this->kwt_Annots = array(); + $this->kwt_moved = false; + $this->kwt_saved = false; + + $this->kwt_Reference = array(); + $this->kwt_BMoutlines = array(); + $this->kwt_toc = array(); + + $this->shrin_k = 1; + $this->shrink_this_table_to_fit = 0; + + unset($this->table); + $this->table=array(); //array + $this->tableLevel=0; + $this->tbctr=array(); + $this->innermostTableLevel=0; + $this->cssmgr->tbCSSlvl = 0; + $this->cssmgr->tablecascadeCSS = array(); + + unset($this->cell); + $this->cell=array(); //array + + $this->col=-1; //int + $this->row=-1; //int + $this->Reset(); + + $this->cellPaddingL = 0; + $this->cellPaddingT = 0; + $this->cellPaddingR = 0; + $this->cellPaddingB = 0; + $this->cMarginL = 0; + $this->cMarginT = 0; + $this->cMarginR = 0; + $this->cMarginB = 0; + $this->default_font_size = $this->original_default_font_size; + $this->default_font = $this->original_default_font; + $this->SetFontSize($this->default_font_size, false); + $this->SetFont($this->default_font,'',0,false); + $this->SetLineHeight(); + if (isset($this->blk[$this->blklvl]['InlineProperties'])) { $this->restoreInlineProperties($this->blk[$this->blklvl]['InlineProperties']);} + if ($this->progressBar) { $this->UpdateProgressBar(7,100,' '); } // *PROGRESS-BAR* + + if ($page_break_after) { + $save_blklvl = $this->blklvl; + $save_blk = $this->blk; + $save_silp = $this->saveInlineProperties(); + $save_spanlvl = $this->spanlvl; + $save_ilp = $this->InlineProperties; + if ($this->blklvl>1) { + // Close any open block tags + for ($b= $this->blklvl;$b>0;$b--) { $this->CloseTag($this->blk[$b]['tag']); } + // Output any text left in buffer + if (count($this->textbuffer)) { $this->printbuffer($this->textbuffer); $this->textbuffer=array(); } + } +/*-- COLUMNS --*/ + $save_cols = false; + if ($this->ColActive) { + $save_cols = true; + $save_nbcol = $this->NbCol; // other values of gap and vAlign will not change by setting Columns off + $this->SetColumns(0); + } +/*-- END COLUMNS --*/ + if ($page_break_after == 'RIGHT') { $this->AddPage($this->CurOrientation,'NEXT-ODD','','','','','', '','', '','','','','','',0,0,0,0,$pagesel); } + else if ($page_break_after == 'LEFT') { $this->AddPage($this->CurOrientation,'NEXT-EVEN','','','','','', '','', '','','','','','',0,0,0,0,$pagesel); } + else { $this->AddPage($this->CurOrientation,'','','','','','', '','', '','','','','','',0,0,0,0,$pagesel); } + if (!$this->restoreBlockPagebreaks) { + $this->blklvl = 0; + $this->lastblocklevelchange = 0; + $this->blk = array(); + $this->initialiseBlock($this->blk[0]); + $this->blk[0]['width'] =& $this->pgwidth; + $this->blk[0]['inner_width'] =& $this->pgwidth; + $this->blk[0]['blockContext'] = $this->blockContext; + $properties = $this->cssmgr->MergeCSS('BLOCK','BODY',''); + $this->setCSS($properties,'','BODY'); + } + +/*-- COLUMNS --*/ + if ($save_cols) { + // Restore columns + $this->SetColumns($save_nbcol,$this->colvAlign,$this->ColGap); + } +/*-- END COLUMNS --*/ + if ($this->restoreBlockPagebreaks) { + $this->blk = $save_blk; + // Re-open block tags + $t = $this->blk[0]['tag']; + $a = $this->blk[0]['attr']; + $this->blklvl = 0; + for ($b=0; $b<=$save_blklvl;$b++) { + $tc = $t; + $ac = $a; + $t = $this->blk[$b+1]['tag']; + $a = $this->blk[$b+1]['attr']; + unset($this->blk[$b+1]); + $this->OpenTag($tc,$ac); + } + $this->spanlvl = $save_spanlvl; + $this->InlineProperties = $save_ilp; + $this->restoreInlineProperties($save_silp); + } + } + + } +/*-- END TABLES --*/ + +/*-- LISTS --*/ + // *********** LISTS ******************** + + if($tag=='LI') { + $this->lastoptionaltag = ''; + unset($this->cssmgr->listcascadeCSS[$this->cssmgr->listCSSlvl]); + $this->cssmgr->listCSSlvl--; + if (isset($this->listoccur[$this->listlvl]) && isset($this->InlineProperties['LIST'][$this->listlvl][$this->listoccur[$this->listlvl]])) { $this->restoreInlineProperties($this->InlineProperties['LIST'][$this->listlvl][$this->listoccur[$this->listlvl]]); } + } + + + if(($tag=='UL') or ($tag=='OL')) { + $this->ignorefollowingspaces = true; //Eliminate exceeding left-side spaces + unset($this->cssmgr->listcascadeCSS[$this->cssmgr->listCSSlvl]); + $this->cssmgr->listCSSlvl--; + + $this->lastoptionaltag = ''; +/*-- TABLES --*/ + // A simple list for inside a table + if($this->tableLevel) { + $this->listlist[$this->listlvl]['MAXNUM'] = $this->listnum; //save previous lvl's maxnum + unset($this->listlist[$this->listlvl]); + $this->listlvl--; + if (isset($this->listlist[$this->listlvl]['MAXNUM'])) { $this->listnum = $this->listlist[$this->listlvl]['MAXNUM']; } // restore previous levels + if ($this->listlvl == 0) { $this->listjustfinished = true; } + return; + } +/*-- END TABLES --*/ + + if ($this->listlvl > 1) { // returning one level + $this->listjustfinished=true; + if (!empty($this->textbuffer)) { + $this->listitem[] = array($this->listlvl,$this->listnum,$this->textbuffer,$this->listoccur[$this->listlvl],$this->listitemtype); + } + else { + $this->listnum--; + } + + $this->textbuffer = array(); + $occur = $this->listoccur[$this->listlvl]; + $this->listlist[$this->listlvl][$occur]['MAXNUM'] = $this->listnum; //save previous lvl's maxnum + $this->listlvl--; + $occur = $this->listoccur[$this->listlvl]; + $this->listnum = $this->listlist[$this->listlvl][$occur]['MAXNUM']; // recover previous level's number + $this->listtype = $this->listlist[$this->listlvl][$occur]['TYPE']; // recover previous level's type + if ($this->InlineProperties['LIST'][$this->listlvl][$occur]) { $this->restoreInlineProperties($this->InlineProperties['LIST'][$this->listlvl][$occur]); } + + } + else { // We are closing the last OL/UL tag + if (!empty($this->textbuffer)) { + $this->listitem[] = array($this->listlvl,$this->listnum,$this->textbuffer,$this->listoccur[$this->listlvl],$this->listitemtype); + } + else { + $this->listnum--; + } + + $occur = $this->listoccur[$this->listlvl]; + $this->listlist[$this->listlvl][$occur]['MAXNUM'] = $this->listnum; + $this->textbuffer = array(); + $this->listlvl--; + + $this->printlistbuffer(); + unset($this->InlineProperties['LIST']); + // SPACING AFTER LIST (Top level only) + $this->Ln(0); + if ($this->list_margin_bottom) { + $this->DivLn($this->list_margin_bottom,$this->blklvl,true,1); // collapsible + } + if (isset($this->blk[$this->blklvl]['InlineProperties'])) { $this->restoreInlineProperties($this->blk[$this->blklvl]['InlineProperties']);} + $this->listjustfinished = true; + $this->cssmgr->listCSSlvl = 0; + $this->cssmgr->listcascadeCSS = array(); + $this->blockjustfinished=true; + $this->lastblockbottommargin = $this->list_margin_bottom; + } + } +/*-- END LISTS --*/ + + +} + + +/*-- TABLES --*/ +// This function determines the shrink factor when resizing tables +// val is the table_height / page_height_available +// returns a scaling factor used as $shrin_k to resize the table +// Overcompensating will be quicker but may unnecessarily shrink table too much +// Undercompensating means it will reiterate more times (taking more processing time) +function tbsqrt($val, $iteration=3) { + $k = 4; // Alters number of iterations until it returns $val itself - Must be > 2 + // Probably best guess and most accurate + if ($iteration==1) return sqrt($val); + // Faster than using sqrt (because it won't undercompensate), and gives reasonable results + //return 1+(($val-1)/2); + $x = 2-(($iteration-2)/($k-2)); + if ($x == 0) { $ret = $val+0.00001; } + else if ($x < 0) { $ret = 1 + ( pow(2, ($iteration-2-$k))/1000 ); } + else { $ret = 1+(($val-1)/$x); } + return $ret; +} +/*-- END TABLES --*/ + + +/*-- LISTS --*/ +function printlistbuffer() { + //Save x coordinate + $x = $this->lMargin + $this->blk[$this->blklvl]['outer_left_margin']; + $this->cMarginL = 0; + $this->cMarginR = 0; + $currIndentLvl = -1; + $lastIndent = array(); + $bak_page = $this->page; + $indent = 0; + foreach($this->listitem as $item) + { + // COLS + $oldcolumn = $this->CurrCol; + + $this->bulletarray = array(); + //Get list's buffered data + $this->listlvl = $lvl = $item[0]; + $num = $item[1]; + $this->textbuffer = $item[2]; + $occur = $item[3]; + if ($item[4]) { $type = $item[4]; } // listitemtype + else { $type = $this->listlist[$lvl][$occur]['TYPE']; } + $maxnum = $this->listlist[$lvl][$occur]['MAXNUM']; + $this->restoreInlineProperties($this->InlineProperties['LIST'][$lvl][$occur]); + $this->SetFont($this->FontFamily,$this->FontStyle,$this->FontSizePt,true,true); // force to write + $clh = $this->FontSize; + + $this->SetLineHeight($this->FontSizePt,$this->list_lineheight[$lvl][$occur]); + $this->listOcc = $occur; + $this->listnum = $num; + + if (isset($this->list_align[$this->listlvl][$occur])) { $this->divalign = $this->list_align[$this->listlvl][$occur]; } + else { + if (isset($this->blk[$this->blklvl]['direction']) && $this->blk[$this->blklvl]['direction']=='rtl') { $this->divalign = 'R'; } + else { $this->divalign = 'L'; } + } + + // Set the bullet fontsize + $bullfs = $this->InlineProperties['LISTITEM'][$lvl][$occur][$num]['size']; + + $space_width = $this->GetCharWidth(' ',false) * 1.5; + + //Set default width & height values + $this->divwidth = $this->blk[$this->blklvl]['inner_width']; + $this->divheight = $this->lineheight; + $typefont = $this->FontFamily; + if (preg_match('/U\+([a-fA-F0-9]+)/i',$type,$m)) { + if ($this->_charDefined($this->CurrentFont['cw'],hexdec($m[1]))) { $list_item_marker = codeHex2utf($m[1]); } + else { $list_item_marker = '-'; } + $blt_width = $this->GetStringWidth($list_item_marker); + $typefont = ''; + if (preg_match('/rgb\(.*?\)/',$type,$m)) { + $list_item_color = $this->ConvertColor($m[0]); + } + } + else { + $list_item_color = false; + + switch($type) //Format type + { + case '1': + if ($this->listDir == 'rtl') { $list_item_marker = $this->list_number_suffix . $num; } + else { $list_item_marker = $num . $this->list_number_suffix; } + $blt_width = $this->GetStringWidth(str_repeat('5',strlen($maxnum)).$this->list_number_suffix); + break; + case 'none': + $list_item_marker = ''; + $blt_width = 0; + break; + case 'A': + $anum = $this->dec2alpha($num,true); + $maxnum = $this->dec2alpha($maxnum,true); + if ($this->listDir == 'rtl') { $list_item_marker = $this->list_number_suffix . $anum; } + else { $list_item_marker = $anum . $this->list_number_suffix; } + $blt_width = $this->GetStringWidth(str_repeat('W',strlen($maxnum)).$this->list_number_suffix); + break; + case 'a': + $anum = $this->dec2alpha($num,false); + $maxnum = $this->dec2alpha($maxnum,false); + if ($this->listDir == 'rtl') { $list_item_marker = $this->list_number_suffix . $anum; } + else { $list_item_marker = $anum . $this->list_number_suffix; } + $blt_width = $this->GetStringWidth(str_repeat('m',strlen($maxnum)).$this->list_number_suffix); + break; + case 'I': + $anum = $this->dec2roman($num,true); + if ($this->listDir == 'rtl') { $list_item_marker = $this->list_number_suffix . $anum; } + else { $list_item_marker = $anum . $this->list_number_suffix; } + + if ($maxnum>87) { $bbit = 87; } + else if ($maxnum>86) { $bbit = 86; } + else if ($maxnum>37) { $bbit = 38; } + else if ($maxnum>36) { $bbit = 37; } + else if ($maxnum>27) { $bbit = 28; } + else if ($maxnum>26) { $bbit = 27; } + else if ($maxnum>17) { $bbit = 18; } + else if ($maxnum>16) { $bbit = 17; } + else if ($maxnum>7) { $bbit = 8; } + else if ($maxnum>6) { $bbit = 7; } + else if ($maxnum>3) { $bbit = 4; } + else { $bbit = $maxnum; } + $maxlnum = $this->dec2roman($bbit,true); + $blt_width = $this->GetStringWidth($maxlnum.$this->list_number_suffix); + break; + case 'i': + $anum = $this->dec2roman($num,false); + if ($this->listDir == 'rtl') { $list_item_marker = $this->list_number_suffix . $anum; } + else { $list_item_marker = $anum . $this->list_number_suffix; } + + if ($maxnum>87) { $bbit = 87; } + else if ($maxnum>86) { $bbit = 86; } + else if ($maxnum>37) { $bbit = 38; } + else if ($maxnum>36) { $bbit = 37; } + else if ($maxnum>27) { $bbit = 28; } + else if ($maxnum>26) { $bbit = 27; } + else if ($maxnum>17) { $bbit = 18; } + else if ($maxnum>16) { $bbit = 17; } + else if ($maxnum>7) { $bbit = 8; } + else if ($maxnum>6) { $bbit = 7; } + else if ($maxnum>3) { $bbit = 4; } + else { $bbit = $maxnum; } + $maxlnum = $this->dec2roman($bbit,false); + + $blt_width = $this->GetStringWidth($maxlnum.$this->list_number_suffix); + break; + case 'disc': + if ($this->PDFA || $this->PDFX) { + if ($this->_charDefined($this->CurrentFont['cw'],8226)) { $list_item_marker = "\xe2\x80\xa2"; } // • + else { $list_item_marker = '-'; } + $blt_width = $this->GetCharWidth($list_item_marker); + break; + } + $list_item_marker = chr(108); // bullet disc in Zapfdingbats 'l' + $typefont = 'czapfdingbats'; + $blt_width = (0.791 * $this->FontSize/2.5); + break; + case 'circle': + if ($this->PDFA || $this->PDFX) { + if ($this->_charDefined($this->CurrentFont['cw'],9900)) { $list_item_marker = "\xe2\x9a\xac"; } // ⚬ + else { $list_item_marker = '-'; } + $blt_width = $this->GetCharWidth($list_item_marker); + break; + } + $list_item_marker = chr(109); // circle in Zapfdingbats 'm' + $typefont = 'czapfdingbats'; + $blt_width = (0.873 * $this->FontSize/2.5); + break; + case 'square': + if ($this->PDFA || $this->PDFX) { + if ($this->_charDefined($this->CurrentFont['cw'],9642)) { $list_item_marker = "\xe2\x96\xaa"; } // ▪ + else { $list_item_marker = '-'; } + $blt_width = $this->GetCharWidth($list_item_marker); + break; + } + $list_item_marker = chr(110); //black square in Zapfdingbats font 'n' + $typefont = 'czapfdingbats'; + $blt_width = (0.761 * $this->FontSize/2.5); + break; + +/* CSS3 list-styles numeric + I added tamil +arabic-indic | bengali | cambodian | devanagari | gujarati | gurmukhi | kannada | khmer | lao | malayalam | mongolian | myanmar | oriya | persian | telugu | tibetan | thai | urdu +*/ + case 'arabic-indic': + $cp = 0x0660; + $rnum = $this->dec2other($num, $cp); + $list_item_marker = $this->list_number_suffix . $rnum; // RTL + $blt_width = $this->GetStringWidth(str_repeat($this->dec2other(3, $cp),strlen($maxnum)).$this->list_number_suffix); + break; + case 'persian': + case 'urdu': + $cp = 0x06F0; + $rnum = $this->dec2other($num, $cp); + $list_item_marker = $this->list_number_suffix . $rnum; // RTL + $blt_width = $this->GetStringWidth(str_repeat($this->dec2other(3, $cp),strlen($maxnum)).$this->list_number_suffix); + break; + case 'bengali': + $cp = 0x09E6; + $rnum = $this->dec2other($num, $cp); + $list_item_marker = $rnum . $this->list_number_suffix; + $blt_width = $this->GetStringWidth(str_repeat($this->dec2other(3, $cp),strlen($maxnum)).$this->list_number_suffix); + break; + case 'devanagari': + $cp = 0x0966; + $rnum = $this->dec2other($num, $cp); + $list_item_marker = $rnum . $this->list_number_suffix; + $blt_width = $this->GetStringWidth(str_repeat($this->dec2other(3, $cp),strlen($maxnum)).$this->list_number_suffix); + break; + case 'gujarati': + $cp = 0x0AE6; + $rnum = $this->dec2other($num, $cp); + $list_item_marker = $rnum . $this->list_number_suffix; + $blt_width = $this->GetStringWidth(str_repeat($this->dec2other(3, $cp),strlen($maxnum)).$this->list_number_suffix); + break; + case 'gurmukhi': + $cp = 0x0A66; + $rnum = $this->dec2other($num, $cp); + $list_item_marker = $rnum . $this->list_number_suffix; + $blt_width = $this->GetStringWidth(str_repeat($this->dec2other(3, $cp),strlen($maxnum)).$this->list_number_suffix); + break; + case 'kannada': + $cp = 0x0CE6; + $rnum = $this->dec2other($num, $cp); + $list_item_marker = $rnum . $this->list_number_suffix; + $blt_width = $this->GetStringWidth(str_repeat($this->dec2other(3, $cp),strlen($maxnum)).$this->list_number_suffix); + break; + case 'malayalam': + $cp = 0x0D66; + $rnum = $this->dec2other($num, $cp); + $list_item_marker = $rnum . $this->list_number_suffix; + $blt_width = $this->GetStringWidth(str_repeat($this->dec2other(6, $cp),strlen($maxnum)).$this->list_number_suffix); + break; + case 'oriya': + $cp = 0x0B66; + $rnum = $this->dec2other($num, $cp); + $list_item_marker = $rnum . $this->list_number_suffix; + $blt_width = $this->GetStringWidth(str_repeat($this->dec2other(3, $cp),strlen($maxnum)).$this->list_number_suffix); + break; + case 'telugu': + $cp = 0x0C66; + $rnum = $this->dec2other($num, $cp); + $list_item_marker = $rnum . $this->list_number_suffix; + $blt_width = $this->GetStringWidth(str_repeat($this->dec2other(3, $cp),strlen($maxnum)).$this->list_number_suffix); + break; + case 'tamil': + $cp = 0x0BE6; + $rnum = $this->dec2other($num, $cp); + $list_item_marker = $rnum . $this->list_number_suffix; + $blt_width = $this->GetStringWidth(str_repeat($this->dec2other(9, $cp),strlen($maxnum)).$this->list_number_suffix); + break; + case 'thai': + $cp = 0x0E50; + $rnum = $this->dec2other($num, $cp); + $list_item_marker = $rnum . $this->list_number_suffix; + $blt_width = $this->GetStringWidth(str_repeat($this->dec2other(5, $cp),strlen($maxnum)).$this->list_number_suffix); + break; + default: + if ($this->listDir == 'rtl') { $list_item_marker = $this->list_number_suffix . $num; } + else { $list_item_marker = $num . $this->list_number_suffix; } + $blt_width = $this->GetStringWidth(str_repeat('5',strlen($maxnum)).$this->list_number_suffix); + break; + } + } + + if (isset($item[5]) && $item[5]) { $list_item_marker = ''; } + + if ($currIndentLvl < $lvl) { + if ($lvl > 1 || $this->list_indent_first_level) { + $indent += $this->list_indent[$lvl][$occur]; + $lastIndent[$lvl] = $this->list_indent[$lvl][$occur]; + } + } + else if ($currIndentLvl > $lvl) { + while ($currIndentLvl > $lvl) { + $indent -= $lastIndent[$currIndentLvl]; + $currIndentLvl--; + } + } + $currIndentLvl = $lvl; + + +/*-- RTL --*/ + + if ($this->listDir == 'rtl') { + // list_align_style Determines alignment of numbers in numbered lists + if ($this->list_align_style == 'L') { $lalign = 'R'; } + else { $lalign = 'L'; } + $this->divwidth = $this->blk[$this->blklvl]['width'] - ($indent + $blt_width + $space_width) ; + $xb = $this->blk[$this->blklvl]['inner_width'] + $this->blk[$this->blklvl]['border_left']['w'] + $this->blk[$this->blklvl]['padding_left'] - $indent - $blt_width; //Bullet position (relative) + //Output bullet + $this->bulletarray = array('w'=>$blt_width,'h'=>$clh,'txt'=>$list_item_marker,'x'=>$xb,'align'=>$lalign,'font'=>$typefont,'level'=>$lvl, 'occur'=>$occur, 'num'=>$num, 'fontsize'=>$bullfs, 'col'=>$list_item_color ); + $this->x = $x; + } + else { +/*-- END RTL --*/ + + if ($this->list_align_style == 'L') { $lalign = 'L'; } + else { $lalign = 'R'; } + $this->divwidth = $this->blk[$this->blklvl]['width'] - ($indent + $blt_width + $space_width) ; + $xb = $this->blk[$this->blklvl]['padding_left'] + $this->blk[$this->blklvl]['border_left']['w'] - $blt_width - $space_width; + //Output bullet + $this->bulletarray = array('w'=>$blt_width,'h'=>$clh,'txt'=>$list_item_marker,'x'=>$xb,'align'=>$lalign,'font'=>$typefont,'level'=>$lvl, 'occur'=>$occur, 'num'=>$num, 'fontsize'=>$bullfs, 'col'=>$list_item_color ); + $this->x = $x + $indent + $blt_width + $space_width; + } // *RTL* + + //Print content + $this->printbuffer($this->textbuffer,'',false,true); + $this->textbuffer=array(); + + // Added to correct for OddEven Margins + if ($this->page != $bak_page) { + if (($this->page-$bak_page) % 2 == 1) { + $x += $this->MarginCorrection; + } + $bak_page = $this->page; + } +/*-- COLUMNS --*/ + // OR COLUMN CHANGE + if ($this->CurrCol != $oldcolumn) { + if ($this->directionality == 'rtl') { // *RTL* + $x -= ($this->CurrCol - $oldcolumn) * ($this->ColWidth+$this->ColGap); // *RTL* + } // *RTL* + else { // *RTL* + $x += ($this->CurrCol - $oldcolumn) * ($this->ColWidth+$this->ColGap); + } // *RTL* + $oldcolumn = $this->CurrCol; + } +/*-- END COLUMNS --*/ + + } + + //Reset all used values + $this->listoccur = array(); + $this->listitem = array(); + $this->listlist = array(); + $this->listlvl = 0; + $this->listnum = 0; + $this->listtype = ''; + $this->textbuffer = array(); + $this->divwidth = 0; + $this->divheight = 0; + $this->x = $this->lMargin + $this->blk[$this->blklvl]['outer_left_margin']; +} +/*-- END LISTS --*/ + +function _saveTextBuffer($t, $link = '', $intlink = '') { +// $this->textbuffer[] = array($t,$link,$this->currentfontstyle,$this->colorarray,$this->currentfontfamily,$this->SUP,$this->SUB,$intlink,$this->strike,$this->textparam,$this->spanbgcolorarray,$this->currentfontsize,$this->ReqFontStyle,$this->kerning,$this->lSpacingCSS,$this->wSpacingCSS,$this->spanborddet, $this->textshadow); + // mPDF 5.6.14 + $arr = array(); + $arr[0] = $t; + if (isset($link) && $link) $arr[1] = $link; + $arr[2] = $this->currentfontstyle; + if (isset($this->colorarray) && $this->colorarray) $arr[3] = $this->colorarray; + $arr[4] = $this->currentfontfamily; + if (isset($this->SUP) && $this->SUP) $arr[5] = $this->SUP; + if (isset($this->SUB) && $this->SUB) $arr[6] = $this->SUB; + if (isset($intlink) && $intlink) $arr[7] = $intlink; + if (isset($this->strike) && $this->strike) $arr[8] = $this->strike; + if (isset($this->textparam) && $this->textparam) $arr[9] = $this->textparam; + if (isset($this->spanbgcolorarray) && $this->spanbgcolorarray) $arr[10] = $this->spanbgcolorarray; + $arr[11] = $this->currentfontsize; + if (isset($this->ReqFontStyle) && $this->ReqFontStyle) $arr[12] = $this->ReqFontStyle; + if (isset($this->kerning) && $this->kerning) $arr[13] = $this->kerning; + if (isset($this->lSpacingCSS) && $this->lSpacingCSS) $arr[14] = $this->lSpacingCSS; + if (isset($this->wSpacingCSS) && $this->wSpacingCSS) $arr[15] = $this->wSpacingCSS; + if (isset($this->spanborddet) && $this->spanborddet) $arr[16] = $this->spanborddet; + if (isset($this->textshadow) && $this->textshadow) $arr[17] = $this->textshadow; + $this->textbuffer[] = $arr; +} + +function _saveCellTextBuffer($t, $link = '', $intlink = '') { +// $this->cell[$this->row][$this->col]['textbuffer'][] = array($t,$link,$this->currentfontstyle,$this->colorarray,$this->currentfontfamily,$this->SUP,$this->SUB,$intlink,$this->strike,$this->textparam,$this->spanbgcolorarray,$this->currentfontsize,$this->ReqFontStyle,$this->kerning,$this->lSpacingCSS,$this->wSpacingCSS,$this->spanborddet, $this->textshadow); + // mPDF 5.6.14 + $arr = array(); + $arr[0] = $t; + if (isset($link) && $link) $arr[1] = $link; + $arr[2] = $this->currentfontstyle; + if (isset($this->colorarray) && $this->colorarray) $arr[3] = $this->colorarray; + $arr[4] = $this->currentfontfamily; + if (isset($this->SUP) && $this->SUP) $arr[5] = $this->SUP; + if (isset($this->SUB) && $this->SUB) $arr[6] = $this->SUB; + if (isset($intlink) && $intlink) $arr[7] = $intlink; + if (isset($this->strike) && $this->strike) $arr[8] = $this->strike; + if (isset($this->textparam) && $this->textparam) $arr[9] = $this->textparam; + if (isset($this->spanbgcolorarray) && $this->spanbgcolorarray) $arr[10] = $this->spanbgcolorarray; + $arr[11] = $this->currentfontsize; + if (isset($this->ReqFontStyle) && $this->ReqFontStyle) $arr[12] = $this->ReqFontStyle; + if (isset($this->kerning) && $this->kerning) $arr[13] = $this->kerning; + if (isset($this->lSpacingCSS) && $this->lSpacingCSS) $arr[14] = $this->lSpacingCSS; + if (isset($this->wSpacingCSS) && $this->wSpacingCSS) $arr[15] = $this->wSpacingCSS; + if (isset($this->spanborddet) && $this->spanborddet) $arr[16] = $this->spanborddet; + if (isset($this->textshadow) && $this->textshadow) $arr[17] = $this->textshadow; + $this->cell[$this->row][$this->col]['textbuffer'][] = $arr; +} + + +function printbuffer($arrayaux,$blockstate=0,$is_table=false,$is_list=false) +{ +// $blockstate = 0; // NO margins/padding +// $blockstate = 1; // Top margins/padding only +// $blockstate = 2; // Bottom margins/padding only +// $blockstate = 3; // Top & bottom margins/padding + $this->spanbgcolorarray = ''; + $this->spanbgcolor = false; + $this->spanborder = false; + $this->spanborddet = array(); + $paint_ht_corr = 0; + +/*-- CSS-FLOAT --*/ + if (count($this->floatDivs)) { + list($l_exists, $r_exists, $l_max, $r_max, $l_width, $r_width) = $this->GetFloatDivInfo($this->blklvl); + if (($this->blk[$this->blklvl]['inner_width']-$l_width-$r_width) < (2*$this->GetCharWidth('W',false))) { + // Too narrow to fit - try to move down past L or R float + if ($l_max < $r_max && ($this->blk[$this->blklvl]['inner_width']-$r_width) > (2*$this->GetCharWidth('W',false))) { + $this->ClearFloats('LEFT', $this->blklvl); + } + else if ($r_max < $l_max && ($this->blk[$this->blklvl]['inner_width']-$l_width) > (2*$this->GetCharWidth('W',false))) { + $this->ClearFloats('RIGHT', $this->blklvl); + } + else { $this->ClearFloats('BOTH', $this->blklvl); } + } + } +/*-- END CSS-FLOAT --*/ + $bak_y = $this->y; + $bak_x = $this->x; + $align = ''; + if (!$is_table && !$is_list) { + if (isset($this->blk[$this->blklvl]['align']) && $this->blk[$this->blklvl]['align']) { $align = $this->blk[$this->blklvl]['align']; } + // Block-align is set by e.g. <.. align="center"> Takes priority for this block but not inherited + if (isset($this->blk[$this->blklvl]['block-align']) && $this->blk[$this->blklvl]['block-align']) { $align = $this->blk[$this->blklvl]['block-align']; } + if (isset($this->blk[$this->blklvl]['direction'])) $blockdir = $this->blk[$this->blklvl]['direction']; + else $blockdir = ""; + $this->divwidth = $this->blk[$this->blklvl]['width']; + } + else { + $align = $this->divalign; + if ($is_table) { $blockdir = $this->table[$this->tableLevel][$this->tbctr[$this->tableLevel]]['direction']; } + else { $blockdir = $this->listDir; } + } + $oldpage = $this->page; + + // ADDED for Out of Block now done as Flowing Block + if ($this->divwidth == 0) { + $this->divwidth = $this->pgwidth; + } + + if (!$is_table && !$is_list) { $this->SetLineHeight($this->FontSizePt,$this->blk[$this->blklvl]['line_height']); } + $this->divheight = $this->lineheight; + $old_height = $this->divheight; + + // As a failsafe - if font has been set but not output to page + $this->SetFont($this->default_font,'',$this->default_font_size,true,true); // force output to page + + $array_size = count($arrayaux); + $this->newFlowingBlock( $this->divwidth,$this->divheight,$align,$is_table,$is_list,$blockstate,true,$blockdir); + + // Added - Otherwise <div><div><p> did not output top margins/padding for 1st/2nd div + if ($array_size == 0) { $this->finishFlowingBlock(true); } // true = END of flowing block + + for($i=0;$i < $array_size; $i++) + { + // COLS + $oldcolumn = $this->CurrCol; + + $vetor = $arrayaux[$i]; + if ($i == 0 and $vetor[0] != "\n" and !$this->ispre) { + $vetor[0] = ltrim($vetor[0]); + } + + // FIXED TO ALLOW IT TO SHOW '0' + if (empty($vetor[0]) && !($vetor[0]==='0') && empty($vetor[7])) { //Ignore empty text and not carrying an internal link + //Check if it is the last element. If so then finish printing the block + if ($i == ($array_size-1)) { $this->finishFlowingBlock(true); } // true = END of flowing block + continue; + } + + + //Activating buffer properties + if(isset($vetor[11]) and $vetor[11] != '') { // Font Size + if ($is_table && $this->shrin_k) { + $this->SetFontSize($vetor[11]/$this->shrin_k,false); + } + else { + $this->SetFontSize($vetor[11],false); + } + } + + if(isset($vetor[17]) && !empty($vetor[17])) { //TextShadow + $this->textshadow = $vetor[17]; + } + if(isset($vetor[16]) && !empty($vetor[16])) { //Border + $this->spanborddet = $vetor[16]; + $this->spanborder = true; + } + + if(isset($vetor[15])) { // Word spacing + $this->wSpacingCSS = $vetor[15]; + if ($this->wSpacingCSS && strtoupper($this->wSpacingCSS) != 'NORMAL') { + $this->minwSpacing = $this->ConvertSize($this->wSpacingCSS,$this->FontSize); + } + } + if(isset($vetor[14])) { // Letter spacing + $this->lSpacingCSS = $vetor[14]; + if (($this->lSpacingCSS || $this->lSpacingCSS==='0') && strtoupper($this->lSpacingCSS) != 'NORMAL') { + $this->fixedlSpacing = $this->ConvertSize($this->lSpacingCSS,$this->FontSize); + } + } + if(isset($vetor[13])) { // Font Kerning + $this->kerning = $vetor[13]; + } + + + if(isset($vetor[10]) and !empty($vetor[10])) //Background color + { + $this->spanbgcolorarray = $vetor[10]; + $this->spanbgcolor = true; + } + if(isset($vetor[9]) and !empty($vetor[9])) // Text parameters - Outline + hyphens + { + $this->textparam = $vetor[9] ; // mPDF 5.6.14 + $this->SetTextOutline($this->textparam); // mPDF 5.6.07 + } + if(isset($vetor[8]) and $vetor[8] === true) // strike-through the text + { + $this->strike = true; + } + if(isset($vetor[7]) and $vetor[7] != '') // internal target: <a name="anyvalue"> + { + $ily = $this->y; + if ($this->keep_block_together) { $this->internallink[$vetor[7]] = array("Y"=>$ily,"PAGE"=>$this->page, "kt"=>true ); } + else if ($this->table_rotate) { $this->internallink[$vetor[7]] = array("Y"=>$ily,"PAGE"=>$this->page, "tbrot"=>true ); } + else if ($this->kwt) { $this->internallink[$vetor[7]] = array("Y"=>$ily,"PAGE"=>$this->page, "kwt"=>true ); } + else if ($this->ColActive) { $this->internallink[$vetor[7]] = array("Y"=>$ily,"PAGE"=>$this->page, "col"=>$this->CurrCol ); } + else + $this->internallink[$vetor[7]] = array("Y"=>$ily,"PAGE"=>$this->page ); + if (empty($vetor[0])) { //Ignore empty text + //Check if it is the last element. If so then finish printing the block + if ($i == ($array_size-1)) { $this->finishFlowingBlock(true); } // true = END of flowing block + continue; + } + } + if(isset($vetor[6]) and $vetor[6] === true) // Subscript + { + $this->SUB = true; + } + if(isset($vetor[5]) and $vetor[5] === true) // Superscript + { + $this->SUP = true; + } + if(isset($vetor[4]) and $vetor[4] != '') { // Font Family + $font = $this->SetFont($vetor[4],$this->FontStyle,0,false); + } + if (!empty($vetor[3])) //Font Color + { + $cor = $vetor[3]; + $this->SetTColor($cor); + } + if(isset($vetor[2]) and $vetor[2] != '') //Bold,Italic,Underline styles + { + $this->SetStyles($vetor[2]); + } + + if(isset($vetor[12]) and $vetor[12] != '') { //Requested Bold,Italic,Underline + $this->ReqFontStyle = $vetor[12]; + } + if(isset($vetor[1]) and $vetor[1] != '') //LINK + { + if (strpos($vetor[1],".") === false && strpos($vetor[1],"@") !== 0) //assuming every external link has a dot indicating extension (e.g: .html .txt .zip www.somewhere.com etc.) + { + //Repeated reference to same anchor? + while(array_key_exists($vetor[1],$this->internallink)) $vetor[1]="#".$vetor[1]; + $this->internallink[$vetor[1]] = $this->AddLink(); + $vetor[1] = $this->internallink[$vetor[1]]; + } + $this->HREF = $vetor[1]; // HREF link style set here ****** + } + + // SPECIAL CONTENT - IMAGES & FORM OBJECTS + //Print-out special content + + if (substr($vetor[0],0,3) == "\xbb\xa4\xac") { //identifier has been identified! + + $objattr = $this->_getObjAttr($vetor[0]); + +/*-- TABLES --*/ + if ($objattr['type'] == 'nestedtable') { + if ($objattr['nestedcontent']) { + $level = $objattr['level']; + $table = &$this->table[$level][$objattr['table']]; + if ($this->cacheTables) { + $fh = fopen($table['cache'], "r+b"); + $cell = $this->_uncacheCell($table['cells'][$objattr['row']][$objattr['col']], '', $fh); + } + else { + $fh = null; + $cell = &$table['cells'][$objattr['row']][$objattr['col']]; + } + $this->finishFlowingBlock(false,'nestedtable'); + $save_dw = $this->divwidth ; + $save_buffer = $this->cellBorderBuffer; + $this->cellBorderBuffer = array(); + $ncx = $this->x; + list($dummyx,$w) = $this->_tableGetWidth($table, $objattr['row'], $objattr['col'], $fh); + $ntw = $this->table[($level+1)][$objattr['nestedcontent']]['w']; // nested table width + if (!$this->simpleTables){ + if ($this->packTableData) { + list($bt,$br,$bb,$bl) = $this->_getBorderWidths($cell['borderbin']); + } + else { + $br = $cell['border_details']['R']['w']; + $bl = $cell['border_details']['L']['w']; + } + if ($table['borders_separate']) { + $innerw = $w - $bl - $br - $cell['padding']['L'] - $cell['padding']['R'] - $table['border_spacing_H']; + } + else { + $innerw = $w - $bl/2 - $br/2 - $cell['padding']['L'] - $cell['padding']['R']; + } + } + else if ($this->simpleTables){ + if ($table['borders_separate']) { + $innerw = $w - $table['simple']['border_details']['L']['w'] - $table['simple']['border_details']['R']['w'] - $cell['padding']['L'] - $cell['padding']['R'] - $table['border_spacing_H']; + } + else { + $innerw = $w - $table['simple']['border_details']['L']['w']/2 - $table['simple']['border_details']['R']['w']/2 - $cell['padding']['L'] - $cell['padding']['R']; + } + } + if ($cell['a']=='C' || $this->table[($level+1)][$objattr['nestedcontent']]['a']=='C') { + $ncx += ($innerw-$ntw)/2; + } + elseif ($cell['a']=='R' || $this->table[($level+1)][$objattr['nestedcontent']]['a']=='R') { + $ncx += $innerw- $ntw; + } + $this->x = $ncx ; + if ($this->cacheTables) { fclose($fh); } + + $this->_tableWrite($this->table[($level+1)][$objattr['nestedcontent']]); + $this->cellBorderBuffer = $save_buffer; + $this->x = $bak_x ; + $this->divwidth = $save_dw; + $this->newFlowingBlock( $this->divwidth,$this->divheight,$align,$is_table,$is_list,$blockstate,false,$blockdir); + } + } + else { +/*-- END TABLES --*/ + if ($is_table) { // *TABLES* + $maxWidth = $this->divwidth; // *TABLES* + } // *TABLES* + else { // *TABLES* + $maxWidth = $this->divwidth - ($this->blk[$this->blklvl]['padding_left'] + $this->blk[$this->blklvl]['border_left']['w'] + $this->blk[$this->blklvl]['padding_right'] + $this->blk[$this->blklvl]['border_right']['w']); + } // *TABLES* + +/*-- CSS-IMAGE-FLOAT --*/ + // If float (already) exists at this level + if (isset($this->floatmargins['R']) && $this->y <= $this->floatmargins['R']['y1'] && $this->y >= $this->floatmargins['R']['y0']) { $maxWidth -= $this->floatmargins['R']['w']; } + if (isset($this->floatmargins['L']) && $this->y <= $this->floatmargins['L']['y1'] && $this->y >= $this->floatmargins['L']['y0']) { $maxWidth -= $this->floatmargins['L']['w']; } +/*-- END CSS-IMAGE-FLOAT --*/ + + list($skipln) = $this->inlineObject($objattr['type'], '', $this->y, $objattr,$this->lMargin, ($this->flowingBlockAttr['contentWidth']/_MPDFK), $maxWidth, $this->flowingBlockAttr['height'], false, $is_table); + // 1 -> New line needed because of width + // -1 -> Will fit width on line but NEW PAGE REQUIRED because of height + // -2 -> Will not fit on line therefore needs new line but thus NEW PAGE REQUIRED + $iby = $this->y; + $oldpage = $this->page; + $oldcol = $this->CurrCol; + if (($skipln == 1 || $skipln == -2) && !isset($objattr['float'])) { + $this->finishFlowingBlock(false,$objattr['type']); + $this->newFlowingBlock( $this->divwidth,$this->divheight,$align,$is_table,$is_list,$blockstate,false,$blockdir); + } + $thispage = $this->page; + if ($this->CurrCol!=$oldcol) { $changedcol = true; } + else { $changedcol=false; } + + // the previous lines can already have triggered page break or column change + if (!$changedcol && $skipln <0 && $this->AcceptPageBreak() && $thispage==$oldpage) { + + $this->AddPage($this->CurOrientation); + + // Added to correct Images already set on line before page advanced + // i.e. if second inline image on line is higher than first and forces new page + if (count($this->objectbuffer)) { + $yadj = $iby - $this->y; + foreach($this->objectbuffer AS $ib=>$val) { + if ($this->objectbuffer[$ib]['OUTER-Y'] ) $this->objectbuffer[$ib]['OUTER-Y'] -= $yadj; + if ($this->objectbuffer[$ib]['BORDER-Y']) $this->objectbuffer[$ib]['BORDER-Y'] -= $yadj; + if ($this->objectbuffer[$ib]['INNER-Y']) $this->objectbuffer[$ib]['INNER-Y'] -= $yadj; + } + } + } + + // Added to correct for OddEven Margins + if ($this->page != $oldpage) { + if (($this->page-$oldpage) % 2 == 1) { + $bak_x += $this->MarginCorrection; + } + $oldpage = $this->page; + $y = $this->tMargin - $paint_ht_corr ; + $this->oldy = $this->tMargin - $paint_ht_corr ; + $old_height = 0; + } + $this->x = $bak_x; +/*-- COLUMNS --*/ + // COLS + // OR COLUMN CHANGE + if ($this->CurrCol != $oldcolumn) { + if ($this->directionality == 'rtl') { // *RTL* + $bak_x -= ($this->CurrCol - $oldcolumn) * ($this->ColWidth+$this->ColGap); // *RTL* + } // *RTL* + else { // *RTL* + $bak_x += ($this->CurrCol - $oldcolumn) * ($this->ColWidth+$this->ColGap); + } // *RTL* + $this->x = $bak_x; + $oldcolumn = $this->CurrCol; + $y = $this->y0 - $paint_ht_corr ; + $this->oldy = $this->y0 - $paint_ht_corr ; + $old_height = 0; + } +/*-- END COLUMNS --*/ + +/*-- CSS-IMAGE-FLOAT --*/ + if ($objattr['type'] == 'image' && isset($objattr['float'])) { + $fy = $this->y; + + // DIV TOP MARGIN/BORDER/PADDING + if ($this->flowingBlockAttr['newblock'] && ($this->flowingBlockAttr['blockstate']==1 || $this->flowingBlockAttr['blockstate']==3) && $this->flowingBlockAttr['lineCount']== 0) { + $fy += $this->blk[$this->blklvl]['margin_top'] + $this->blk[$this->blklvl]['padding_top'] + $this->blk[$this->blklvl]['border_top']['w']; + } + + if ($objattr['float']=='R') { + $fx = $this->w - $this->rMargin - $objattr['width'] - ($this->blk[$this->blklvl]['outer_right_margin'] + $this->blk[$this->blklvl]['border_right']['w'] + $this->blk[$this->blklvl]['padding_right']); + + + } + else if ($objattr['float']=='L') { + $fx = $this->lMargin + ($this->blk[$this->blklvl]['outer_left_margin'] + $this->blk[$this->blklvl]['border_left']['w'] + $this->blk[$this->blklvl]['padding_left']); + } + $w = $objattr['width']; + $h = abs($objattr['height']); + + $widthLeft = $maxWidth - ($this->flowingBlockAttr['contentWidth']/_MPDFK); + $maxHeight = $this->h - ($this->tMargin + $this->margin_header + $this->bMargin + 10) ; + // For Images + $extraWidth = ($objattr['border_left']['w'] + $objattr['border_right']['w'] + $objattr['margin_left']+ $objattr['margin_right']); + $extraHeight = ($objattr['border_top']['w'] + $objattr['border_bottom']['w'] + $objattr['margin_top']+ $objattr['margin_bottom']); + + if ($objattr['itype'] == 'wmf' || $objattr['itype'] == 'svg') { + $file = $objattr['file']; + $info=$this->formobjects[$file]; + } + else { + $file = $objattr['file']; + $info=$this->images[$file]; + } + $img_w = $w - $extraWidth ; + $img_h = $h - $extraHeight ; + if ($objattr['border_left']['w']) { + $objattr['BORDER-WIDTH'] = $img_w + (($objattr['border_left']['w'] + $objattr['border_right']['w'])/2) ; + $objattr['BORDER-HEIGHT'] = $img_h + (($objattr['border_top']['w'] + $objattr['border_bottom']['w'])/2) ; + $objattr['BORDER-X'] = $fx + $objattr['margin_left'] + (($objattr['border_left']['w'])/2) ; + $objattr['BORDER-Y'] = $fy + $objattr['margin_top'] + (($objattr['border_top']['w'])/2) ; + } + $objattr['INNER-WIDTH'] = $img_w; + $objattr['INNER-HEIGHT'] = $img_h; + $objattr['INNER-X'] = $fx + $objattr['margin_left'] + ($objattr['border_left']['w']); + $objattr['INNER-Y'] = $fy + $objattr['margin_top'] + ($objattr['border_top']['w']) ; + $objattr['ID'] = $info['i']; + $objattr['OUTER-WIDTH'] = $w; + $objattr['OUTER-HEIGHT'] = $h; + $objattr['OUTER-X'] = $fx; + $objattr['OUTER-Y'] = $fy; + if ($objattr['float']=='R') { + // If R float already exists at this level + $this->floatmargins['R']['skipline'] = false; + if (isset($this->floatmargins['R']['y1']) && $this->floatmargins['R']['y1'] > 0 && $fy < $this->floatmargins['R']['y1']) { + $this->WriteFlowingBlock($vetor[0]); + } + // If L float already exists at this level + else if (isset($this->floatmargins['L']['y1']) && $this->floatmargins['L']['y1'] > 0 && $fy < $this->floatmargins['L']['y1']) { + // Final check distance between floats is not now too narrow to fit text + $mw = 2*$this->GetCharWidth('W',false); + if (($this->blk[$this->blklvl]['inner_width'] - $w - $this->floatmargins['L']['w']) < $mw) { + $this->WriteFlowingBlock($vetor[0]); + } + else { + $this->floatmargins['R']['x'] = $fx; + $this->floatmargins['R']['w'] = $w; + $this->floatmargins['R']['y0'] = $fy; + $this->floatmargins['R']['y1'] = $fy + $h; + if ($skipln == 1) { + $this->floatmargins['R']['skipline'] = true; + $this->floatmargins['R']['id'] = count($this->floatbuffer)+0; + $objattr['skipline'] = true; + } + $this->floatbuffer[] = $objattr; + } + } + else { + $this->floatmargins['R']['x'] = $fx; + $this->floatmargins['R']['w'] = $w; + $this->floatmargins['R']['y0'] = $fy; + $this->floatmargins['R']['y1'] = $fy + $h; + if ($skipln == 1) { + $this->floatmargins['R']['skipline'] = true; + $this->floatmargins['R']['id'] = count($this->floatbuffer)+0; + $objattr['skipline'] = true; + } + $this->floatbuffer[] = $objattr; + } + } + else if ($objattr['float']=='L') { + // If L float already exists at this level + $this->floatmargins['L']['skipline'] = false; + if (isset($this->floatmargins['L']['y1']) && $this->floatmargins['L']['y1'] > 0 && $fy < $this->floatmargins['L']['y1']) { + $this->floatmargins['L']['skipline'] = false; + $this->WriteFlowingBlock($vetor[0]); + } + // If R float already exists at this level + else if (isset($this->floatmargins['R']['y1']) && $this->floatmargins['R']['y1'] > 0 && $fy < $this->floatmargins['R']['y1']) { + // Final check distance between floats is not now too narrow to fit text + $mw = 2*$this->GetCharWidth('W',false); + if (($this->blk[$this->blklvl]['inner_width'] - $w - $this->floatmargins['R']['w']) < $mw) { + $this->WriteFlowingBlock($vetor[0]); + } + else { + $this->floatmargins['L']['x'] = $fx + $w; + $this->floatmargins['L']['w'] = $w; + $this->floatmargins['L']['y0'] = $fy; + $this->floatmargins['L']['y1'] = $fy + $h; + if ($skipln == 1) { + $this->floatmargins['L']['skipline'] = true; + $this->floatmargins['L']['id'] = count($this->floatbuffer)+0; + $objattr['skipline'] = true; + } + $this->floatbuffer[] = $objattr; + } + } + else { + $this->floatmargins['L']['x'] = $fx + $w; + $this->floatmargins['L']['w'] = $w; + $this->floatmargins['L']['y0'] = $fy; + $this->floatmargins['L']['y1'] = $fy + $h; + if ($skipln == 1) { + $this->floatmargins['L']['skipline'] = true; + $this->floatmargins['L']['id'] = count($this->floatbuffer)+0; + $objattr['skipline'] = true; + } + $this->floatbuffer[] = $objattr; + } + } + } + else { +/*-- END CSS-IMAGE-FLOAT --*/ + $this->WriteFlowingBlock($vetor[0]); +/*-- CSS-IMAGE-FLOAT --*/ + } +/*-- END CSS-IMAGE-FLOAT --*/ + } // *TABLES* + + } // END If special content + else { //THE text + if ($this->tableLevel) { $paint_ht_corr = 0; } // To move the y up when new column/page started if div border needed + else { $paint_ht_corr = $this->blk[$this->blklvl]['border_top']['w']; } + + if ($vetor[0] == "\n") { //We are reading a <BR> now turned into newline ("\n") + if ($this->flowingBlockAttr['content']) { + $this->finishFlowingBlock(false,'br'); + } + else if ($is_table) { + $this->y+= $this->_computeLineheight($this->table_lineheight); + } + else if (!$is_table) { + $this->DivLn($this->lineheight); + if ($this->ColActive) { $this->breakpoints[$this->CurrCol][] = $this->y; } // *COLUMNS* + } + // Added to correct for OddEven Margins + if ($this->page != $oldpage) { + if (($this->page-$oldpage) % 2 == 1) { + $bak_x += $this->MarginCorrection; + } + $oldpage = $this->page; + $y = $this->tMargin - $paint_ht_corr ; + $this->oldy = $this->tMargin - $paint_ht_corr ; + $old_height = 0; + } + $this->x = $bak_x; +/*-- COLUMNS --*/ + // COLS + // OR COLUMN CHANGE + if ($this->CurrCol != $oldcolumn) { + if ($this->directionality == 'rtl') { // *RTL* + $bak_x -= ($this->CurrCol - $oldcolumn) * ($this->ColWidth+$this->ColGap); // *RTL* + } // *RTL* + else { // *RTL* + $bak_x += ($this->CurrCol - $oldcolumn) * ($this->ColWidth+$this->ColGap); + } // *RTL* + $this->x = $bak_x; + $oldcolumn = $this->CurrCol; + $y = $this->y0 - $paint_ht_corr ; + $this->oldy = $this->y0 - $paint_ht_corr ; + $old_height = 0; + } +/*-- END COLUMNS --*/ + $this->newFlowingBlock( $this->divwidth,$this->divheight,$align,$is_table,$is_list,$blockstate,false,$blockdir); + } + else { + $this->WriteFlowingBlock( $vetor[0]); + + // Added to correct for OddEven Margins + if ($this->page != $oldpage) { + if (($this->page-$oldpage) % 2 == 1) { + $bak_x += $this->MarginCorrection; + $this->x = $bak_x; + } + $oldpage = $this->page; + $y = $this->tMargin - $paint_ht_corr ; + $this->oldy = $this->tMargin - $paint_ht_corr ; + $old_height = 0; + } +/*-- COLUMNS --*/ + // COLS + // OR COLUMN CHANGE + if ($this->CurrCol != $oldcolumn) { + if ($this->directionality == 'rtl') { // *RTL* + $bak_x -= ($this->CurrCol - $oldcolumn) * ($this->ColWidth+$this->ColGap); // *RTL* + } // *RTL* + else { // *RTL* + $bak_x += ($this->CurrCol - $oldcolumn) * ($this->ColWidth+$this->ColGap); + } // *RTL* + $this->x = $bak_x; + $oldcolumn = $this->CurrCol; + $y = $this->y0 - $paint_ht_corr ; + $this->oldy = $this->y0 - $paint_ht_corr ; + $old_height = 0; + } +/*-- END COLUMNS --*/ + } + + + } + + //Check if it is the last element. If so then finish printing the block + if ($i == ($array_size-1)) { + $this->finishFlowingBlock(true); // true = END of flowing block + // Added to correct for OddEven Margins + if ($this->page != $oldpage) { + if (($this->page-$oldpage) % 2 == 1) { + $bak_x += $this->MarginCorrection; + $this->x = $bak_x; + } + $oldpage = $this->page; + $y = $this->tMargin - $paint_ht_corr ; + $this->oldy = $this->tMargin - $paint_ht_corr ; + $old_height = 0; + } + +/*-- COLUMNS --*/ + // COLS + // OR COLUMN CHANGE + if ($this->CurrCol != $oldcolumn) { + if ($this->directionality == 'rtl') { // *RTL* + $bak_x -= ($this->CurrCol - $oldcolumn) * ($this->ColWidth+$this->ColGap); // *RTL* + } // *RTL* + else { // *RTL* + $bak_x += ($this->CurrCol - $oldcolumn) * ($this->ColWidth+$this->ColGap); + } // *RTL* + $this->x = $bak_x; + $oldcolumn = $this->CurrCol; + $y = $this->y0 - $paint_ht_corr ; + $this->oldy = $this->y0 - $paint_ht_corr ; + $old_height = 0; + } +/*-- END COLUMNS --*/ + + } + + // RESETTING VALUES + $this->SetTColor($this->ConvertColor(0)); + $this->SetDColor($this->ConvertColor(0)); + $this->SetFColor($this->ConvertColor(255)); + $this->colorarray = ''; + $this->spanbgcolorarray = ''; + $this->spanbgcolor = false; + $this->spanborder = false; + $this->spanborddet = array(); + $this->HREF = ''; + $this->textparam = array(); + $this->SetTextOutline(); + $this->SUP = false; + $this->SUB = false; + + $this->strike = false; + $this->textshadow = ''; + + $this->currentfontfamily = ''; + $this->currentfontsize = ''; + $this->currentfontstyle = ''; +/*-- TABLES --*/ + if ($this->tableLevel) { + $this->SetLineHeight('',$this->table_lineheight); // *TABLES* + } + else +/*-- END TABLES --*/ +/*-- LISTS --*/ + if ($is_list && $this->list_lineheight[$this->listlvl][$this->listOcc]) { + $this->SetLineHeight('',$this->list_lineheight[$this->listlvl][$this->listOcc]); // sets default line height + } + else +/*-- END LISTS --*/ + if (isset($this->blk[$this->blklvl]['line_height']) && $this->blk[$this->blklvl]['line_height']) { + $this->SetLineHeight('',$this->blk[$this->blklvl]['line_height']); // sets default line height + } + $this->ResetStyles(); + $this->toupper = false; + $this->tolower = false; + $this->capitalize = false; + $this->kerning = false; + $this->lSpacingCSS = ''; + $this->wSpacingCSS = ''; + $this->fixedlSpacing = false; + $this->minwSpacing = 0; + $this->SetDash(); + $this->dash_on = false; + $this->dotted_on = false; + + }//end of for(i=0;i<arraysize;i++) + + + // PAINT DIV BORDER // DISABLED IN COLUMNS AS DOESN'T WORK WHEN BROKEN ACROSS COLS?? + if ((isset($this->blk[$this->blklvl]['border']) || isset($this->blk[$this->blklvl]['bgcolor']) || isset($this->blk[$this->blklvl]['box_shadow'])) && $blockstate && ($this->y != $this->oldy)) { + $bottom_y = $this->y; // Does not include Bottom Margin + if (isset($this->blk[$this->blklvl]['startpage']) && $this->blk[$this->blklvl]['startpage'] != $this->page && $blockstate != 1) { + $this->PaintDivBB('pagetop',$blockstate); + } + + else if ($blockstate != 1) { + $this->PaintDivBB('',$blockstate); + } + $this->y = $bottom_y; + $this->x = $bak_x; + } + + // Reset Font + $this->SetFontSize($this->default_font_size,false); + + +} + +function _setDashBorder($style, $div, $cp, $side) { + if ($style == 'dashed' && (($side=='L' || $side=='R') || ($side=='T' && $div != 'pagetop' && !$cp) || ($side=='B' && $div!='pagebottom') )) { + $dashsize = 2; // final dash will be this + 1*linewidth + $dashsizek = 1.5; // ratio of Dash/Blank + $this->SetDash($dashsize,($dashsize/$dashsizek)+($this->LineWidth*2)); + } + else if ($style == 'dotted' || ($side=='T' && ($div == 'pagetop' || $cp)) || ($side=='B' && $div == 'pagebottom')) { + //Round join and cap + $this->SetLineJoin(1); + $this->SetLineCap(1); + $this->SetDash(0.001,($this->LineWidth*3)); + } +} + +function _setBorderLine($b, $k=1) { + $this->SetLineWidth($b['w']/$k); + $this->SetDColor($b['c']); + if ($b['c'][0]==5) { // RGBa + $this->SetAlpha($b['c'][4], 'Normal', false, 'S')."\n"; + } + else if ($b['c'][0]==6) { // CMYKa + $this->SetAlpha($b['c'][5], 'Normal', false, 'S')."\n"; + } +} + +// mPDF 5.6.52 +function PaintDivBB($divider='',$blockstate=0,$blvl=0) { + // Borders & backgrounds are done elsewhere for columns - messes up the repositioning in printcolumnbuffer + if ($this->ColActive) { return ; } // *COLUMNS* + $save_y = $this->y; + if (!$blvl) { $blvl = $this->blklvl; } + $x0 = $x1 = $y0 = $y1 = 0; + + // Added mPDF 3.0 Float DIV + if (isset($this->blk[$blvl]['bb_painted'][$this->page]) && $this->blk[$blvl]['bb_painted'][$this->page]) { return; } // *CSS-FLOAT* + + if (isset($this->blk[$blvl]['x0'])) { $x0 = $this->blk[$blvl]['x0']; } // left + if (isset($this->blk[$blvl]['y1'])) { $y1 = $this->blk[$blvl]['y1']; } // bottom + + // Added mPDF 3.0 Float DIV - ensures backgrounds/borders are drawn to bottom of page + if ($y1==0) { + if ($divider=='pagebottom') { $y1 = $this->h-$this->bMargin; } + else { $y1 = $this->y; } + } + + if (isset($this->blk[$blvl]['startpage']) && $this->blk[$blvl]['startpage'] != $this->page) { $continuingpage = true; } else { $continuingpage = false; } + + if (isset($this->blk[$blvl]['y0'])) { $y0 = $this->blk[$blvl]['y0']; } + $h = $y1 - $y0; + $w = $this->blk[$blvl]['width']; + $x1 = $x0 + $w; + + // Set border-widths as used here + $border_top = $this->blk[$blvl]['border_top']['w']; + $border_bottom = $this->blk[$blvl]['border_bottom']['w']; + $border_left = $this->blk[$blvl]['border_left']['w']; + $border_right = $this->blk[$blvl]['border_right']['w']; + if (!$this->blk[$blvl]['border_top'] || $divider == 'pagetop' || $continuingpage) { + $border_top = 0; + } + if (!$this->blk[$blvl]['border_bottom'] || $blockstate == 1 || $divider == 'pagebottom') { + $border_bottom = 0; + } + + $brTL_H = 0; + $brTL_V = 0; + $brTR_H = 0; + $brTR_V = 0; + $brBL_H = 0; + $brBL_V = 0; + $brBR_H = 0; + $brBR_V = 0; + + $brset = false; +/*-- BORDER-RADIUS --*/ + if (isset($this->blk[$blvl]['border_radius_TL_H'])) { $brTL_H = $this->blk[$blvl]['border_radius_TL_H']; $brset = true; } + if (isset($this->blk[$blvl]['border_radius_TL_V'])) { $brTL_V = $this->blk[$blvl]['border_radius_TL_V']; $brset = true; } + if (isset($this->blk[$blvl]['border_radius_TR_H'])) { $brTR_H = $this->blk[$blvl]['border_radius_TR_H']; $brset = true; } + if (isset($this->blk[$blvl]['border_radius_TR_V'])) { $brTR_V = $this->blk[$blvl]['border_radius_TR_V']; $brset = true; } + if (isset($this->blk[$blvl]['border_radius_BR_H'])) { $brBR_H = $this->blk[$blvl]['border_radius_BR_H']; $brset = true; } + if (isset($this->blk[$blvl]['border_radius_BR_V'])) { $brBR_V = $this->blk[$blvl]['border_radius_BR_V']; $brset = true; } + if (isset($this->blk[$blvl]['border_radius_BL_H'])) { $brBL_H = $this->blk[$blvl]['border_radius_BL_H']; $brset = true; } + if (isset($this->blk[$blvl]['border_radius_BL_V'])) { $brBL_V = $this->blk[$blvl]['border_radius_BL_V']; $brset = true; } + + // mPDF 5.4.17 + //if (!$this->blk[$blvl]['border_top'] || $divider == 'pagetop' || $continuingpage || $this->keep_block_together) { + if (!$this->blk[$blvl]['border_top'] || $divider == 'pagetop' || $continuingpage) { + $brTL_H = 0; + $brTL_V = 0; + $brTR_H = 0; + $brTR_V = 0; + } + // mPDF 5.4.17 + //if (!$this->blk[$blvl]['border_bottom'] || $blockstate == 1 || $divider == 'pagebottom' || $this->keep_block_together) { + if (!$this->blk[$blvl]['border_bottom'] || $blockstate == 1 || $divider == 'pagebottom') { + $brBL_H = 0; + $brBL_V = 0; + $brBR_H = 0; + $brBR_V = 0; + } + + // Disallow border-radius if it is smaller than the border width. + if ($brTL_H < min($border_left, $border_top)) { $brTL_H = $brTL_V = 0; } + if ($brTL_V < min($border_left, $border_top)) { $brTL_V = $brTL_H = 0; } + if ($brTR_H < min($border_right, $border_top)) { $brTR_H = $brTR_V = 0; } + if ($brTR_V < min($border_right, $border_top)) { $brTR_V = $brTR_H = 0; } + if ($brBL_H < min($border_left, $border_bottom)) { $brBL_H = $brBL_V = 0; } + if ($brBL_V < min($border_left, $border_bottom)) { $brBL_V = $brBL_H = 0; } + if ($brBR_H < min($border_right, $border_bottom)) { $brBR_H = $brBR_V = 0; } + if ($brBR_V < min($border_right, $border_bottom)) { $brBR_V = $brBR_H = 0; } + + // CHECK FOR radii that sum to > width or height of div ******** + $f = min($h/($brTL_V + $brBL_V + 0.001), $h/($brTR_V + $brBR_V + 0.001), $w/($brTL_H + $brTR_H + 0.001), $w/($brBL_H + $brBR_H + 0.001)); + if ($f < 1) { + $brTL_H *= $f; + $brTL_V *= $f; + $brTR_H *= $f; + $brTR_V *= $f; + $brBL_H *= $f; + $brBL_V *= $f; + $brBR_H *= $f; + $brBR_V *= $f; + } +/*-- END BORDER-RADIUS --*/ + + $tbcol = $this->ConvertColor(255); + for($l=0; $l <= $blvl; $l++) { + if ($this->blk[$l]['bgcolor']) { + $tbcol = $this->blk[$l]['bgcolorarray']; + } + } + + // BORDERS + if (isset($this->blk[$blvl]['y0']) && $this->blk[$blvl]['y0']) { $y0 = $this->blk[$blvl]['y0']; } + $h = $y1 - $y0; + $w = $this->blk[$blvl]['width']; + + //if ($this->blk[$blvl]['border_top']) { + // Reinstate line above for dotted line divider when block border crosses a page + if ($this->blk[$blvl]['border_top'] && $divider != 'pagetop' && !$continuingpage) { + $tbd = $this->blk[$blvl]['border_top']; + + // mPDF 5.4.18 + $legend = ''; + if (isset($this->blk[$blvl]['border_legend']) && $this->blk[$blvl]['border_legend']) { + $legend = $this->blk[$blvl]['border_legend']; // Same structure array as textbuffer + $txt = ltrim($legend[0]); + + //Set font, size, style, color + $this->SetFont($legend[4],$legend[2],$legend[11]); + if ($legend[3]) { + $cor = $legend[3]; + $this->SetTColor($cor); + } + $stringWidth = $this->GetStringWidth($txt ); + $save_x = $this->x; + $save_y = $this->y; + $save_currentfontfamily = $this->FontFamily; + $save_currentfontsize = $this->FontSizePt; + $save_currentfontstyle = $this->FontStyle.($this->U ? 'U' : '').($this->S ? 'S' : ''); + $this->y = $y0 - $this->FontSize/2 + $this->blk[$blvl]['border_top']['w']/2; + $this->x = $x0 + $this->blk[$blvl]['padding_left'] + $this->blk[$blvl]['border_left']['w']; + + // Set the distance from the border line to the text ? make configurable variable + $gap = 0.2 * $this->FontSize; + + $legbreakL = $this->x - $gap; + $legbreakR = $this->x + $stringWidth + $gap; + + $this->Cell( $stringWidth, $this->FontSize, $txt , '', 0, 'C', $fill, '', 0, 0,0,'M', $fill); + // Reset + $this->x = $save_x; + $this->y = $save_y; + $this->SetFont($save_currentfontfamily,$save_currentfontstyle,$save_currentfontsize); + $this->SetTColor($this->ConvertColor(0)); + } + + if (isset($tbd['s']) && $tbd['s']) { + if (!$brset && $tbd['style']!='dotted' && $tbd['style']!='dashed') { + $this->_out('q'); + $this->SetLineWidth(0); + $this->_out(sprintf('%.3F %.3F m ',($x0)*_MPDFK, ($this->h-($y0))*_MPDFK)); + $this->_out(sprintf('%.3F %.3F l ',($x0 + $border_left)*_MPDFK, ($this->h-($y0 + $border_top))*_MPDFK)); + $this->_out(sprintf('%.3F %.3F l ',($x0 + $w - $border_right)*_MPDFK, ($this->h-($y0 + $border_top))*_MPDFK)); + $this->_out(sprintf('%.3F %.3F l ',($x0 + $w)*_MPDFK, ($this->h-($y0))*_MPDFK)); + $this->_out(' h W n '); // Ends path no-op & Sets the clipping path + } + + $this->_setBorderLine($tbd); + if ($tbd['style']=='dotted' || $tbd['style']=='dashed') { + $legbreakL -= $border_top/2; // because line cap different + $legbreakR += $border_top/2; + $this->_setDashBorder($tbd['style'],$divider,$continuingpage,'T'); + } +/*-- BORDER-RADIUS --*/ + else if (($brTL_V && $brTL_H) || ($brTR_V && $brTR_H) || $tbd['style']=='solid' || $tbd['style']=='double' ) { // mPDF 5.6.58 + $this->SetLineJoin(0); + $this->SetLineCap(0); + } + $s = ''; + if ($brTR_H && $brTR_V) { + $s .= ($this->_EllipseArc($x0 + $w - $brTR_H, $y0 + $brTR_V, $brTR_H - $border_top/2 , $brTR_V - $border_top/2 , 1, 2, true))."\n"; + } + else +/*-- END BORDER-RADIUS --*/ + if ($tbd['style']=='solid' || $tbd['style']=='double') { + $s .= (sprintf('%.3F %.3F m ',($x0 + $w)*_MPDFK, ($this->h-($y0 + ($border_top/2)))*_MPDFK))."\n"; + } + else { + $s .= (sprintf('%.3F %.3F m ',($x0 + $w - ($border_top/2))*_MPDFK, ($this->h-($y0 + ($border_top/2)))*_MPDFK))."\n"; + } +/*-- BORDER-RADIUS --*/ + if ($brTL_H && $brTL_V ) { + // mPDF 5.4.18 + if ($legend) { + if ($legbreakR < ($x0 + $w - $brTR_H)) { + $s .= (sprintf('%.3F %.3F l ', $legbreakR*_MPDFK, ($this->h-($y0 + ($border_top/2)))*_MPDFK))."\n"; + } + if ($legbreakL > ($x0 + $brTL_H )) { + $s .= (sprintf('%.3F %.3F m ',$legbreakL*_MPDFK, ($this->h-($y0 + ($border_top/2)))*_MPDFK))."\n"; + $s .= (sprintf('%.3F %.3F l ',($x0 + $brTL_H )*_MPDFK, ($this->h-($y0 + ($border_top/2)))*_MPDFK)."\n"); + } + else { + $s .= (sprintf('%.3F %.3F m ',($x0 + $brTL_H )*_MPDFK, ($this->h-($y0 + ($border_top/2)))*_MPDFK))."\n"; + } + } + else { + $s .= (sprintf('%.3F %.3F l ',($x0 + $brTL_H )*_MPDFK, ($this->h-($y0 + ($border_top/2)))*_MPDFK))."\n"; + } + $s .= ($this->_EllipseArc($x0 + $brTL_H, $y0 + $brTL_V, $brTL_H - $border_top/2 , $brTL_V - $border_top/2 , 2, 1))."\n"; + } + else { +/*-- END BORDER-RADIUS --*/ + // mPDF 5.4.18 + if ($legend) { + if ($legbreakR < ($x0 + $w)) { + $s .= (sprintf('%.3F %.3F l ',$legbreakR*_MPDFK, ($this->h-($y0 + ($border_top/2)))*_MPDFK))."\n"; + } + if ($legbreakL > ($x0)) { + $s .= (sprintf('%.3F %.3F m ',$legbreakL*_MPDFK, ($this->h-($y0 + ($border_top/2)))*_MPDFK))."\n"; + if ($tbd['style']=='solid' || $tbd['style']=='double') { + $s .= (sprintf('%.3F %.3F l ',($x0)*_MPDFK, ($this->h-($y0 + ($border_top/2)))*_MPDFK))."\n"; + } + else { + $s .= (sprintf('%.3F %.3F l ',($x0 + ($border_top/2))*_MPDFK, ($this->h-($y0 + ($border_top/2)))*_MPDFK))."\n"; + } + } + else if ($tbd['style']=='solid' || $tbd['style']=='double') { + $s .= (sprintf('%.3F %.3F m ', ($x0)*_MPDFK, ($this->h-($y0 + ($border_top/2)))*_MPDFK))."\n"; + } + else { + $s .= (sprintf('%.3F %.3F m ', ($x0 + $border_top/2)*_MPDFK, ($this->h-($y0 + ($border_top/2)))*_MPDFK))."\n"; + } + } + else if ($tbd['style']=='solid' || $tbd['style']=='double') { + $s .= (sprintf('%.3F %.3F l ',($x0)*_MPDFK, ($this->h-($y0 + ($border_top/2)))*_MPDFK))."\n"; + } + else { + $s .= (sprintf('%.3F %.3F l ',($x0 + ($border_top/2))*_MPDFK, ($this->h-($y0 + ($border_top/2)))*_MPDFK))."\n"; + } +/*-- BORDER-RADIUS --*/ + } +/*-- END BORDER-RADIUS --*/ + $s .= 'S'."\n"; + $this->_out($s); + + if ($tbd['style']=='double') { + $this->SetLineWidth($tbd['w']/3); + $this->SetDColor($tbcol); + $this->_out($s); + } + if (!$brset && $tbd['style']!='dotted' && $tbd['style']!='dashed') { $this->_out('Q'); } + + // Reset Corners and Dash off + $this->SetLineWidth(0.1); // mPDF 5.6.57 + $this->SetDColor($this->ConvertColor(0)); + $this->SetLineJoin(2); + $this->SetLineCap(2); + $this->SetDash(); + } + } + //if ($this->blk[$blvl]['border_bottom'] && $blockstate != 1) { + // Reinstate line above for dotted line divider when block border crosses a page + if ($this->blk[$blvl]['border_bottom'] && $blockstate != 1 && $divider != 'pagebottom') { + $tbd = $this->blk[$blvl]['border_bottom']; + if (isset($tbd['s']) && $tbd['s']) { + if (!$brset && $tbd['style']!='dotted' && $tbd['style']!='dashed') { + $this->_out('q'); + $this->SetLineWidth(0); + $this->_out(sprintf('%.3F %.3F m ',($x0)*_MPDFK, ($this->h-($y0 + $h))*_MPDFK)); + $this->_out(sprintf('%.3F %.3F l ',($x0 + $border_left)*_MPDFK, ($this->h-($y0 + $h - $border_bottom))*_MPDFK)); + $this->_out(sprintf('%.3F %.3F l ',($x0 + $w - $border_right)*_MPDFK, ($this->h-($y0 + $h - $border_bottom))*_MPDFK)); + $this->_out(sprintf('%.3F %.3F l ',($x0 + $w)*_MPDFK, ($this->h-($y0 + $h))*_MPDFK)); + $this->_out(' h W n '); // Ends path no-op & Sets the clipping path + } + + $this->_setBorderLine($tbd); + if ($tbd['style']=='dotted' || $tbd['style']=='dashed') { $this->_setDashBorder($tbd['style'],$divider,$continuingpage,'B'); } +/*-- BORDER-RADIUS --*/ + else if (($brBL_V && $brBL_H) || ($brBR_V && $brBR_H) || $tbd['style']=='solid' || $tbd['style']=='double' ) { // mPDF 5.6.58 + $this->SetLineJoin(0); + $this->SetLineCap(0); + } + $s = ''; + if ($brBL_H && $brBL_V) { + $s .= ($this->_EllipseArc($x0 + $brBL_H, $y0 + $h - $brBL_V, $brBL_H - $border_bottom/2 , $brBL_V - $border_bottom/2 , 3, 2, true))."\n"; + } + else +/*-- END BORDER-RADIUS --*/ + if ($tbd['style']=='solid' || $tbd['style']=='double') { + $s .= (sprintf('%.3F %.3F m ',($x0)*_MPDFK, ($this->h-($y0 + $h - ($border_bottom/2)))*_MPDFK))."\n"; + } + else { + $s .= (sprintf('%.3F %.3F m ',($x0 + ($border_bottom/2))*_MPDFK, ($this->h-($y0 + $h - ($border_bottom/2)))*_MPDFK))."\n"; + } +/*-- BORDER-RADIUS --*/ + if ($brBR_H && $brBR_V ) { + $s .= (sprintf('%.3F %.3F l ',($x0 + $w - ($border_bottom/2) - $brBR_H )*_MPDFK, ($this->h-($y0 + $h - ($border_bottom/2)))*_MPDFK))."\n"; + $s .= ($this->_EllipseArc($x0 + $w - $brBR_H, $y0 + $h - $brBR_V, $brBR_H - $border_bottom/2 , $brBR_V - $border_bottom/2 , 4, 1))."\n"; + } + else +/*-- END BORDER-RADIUS --*/ + if ($tbd['style']=='solid' || $tbd['style']=='double') { + $s .= (sprintf('%.3F %.3F l ',($x0 + $w)*_MPDFK, ($this->h-($y0 + $h - ($border_bottom/2)))*_MPDFK))."\n"; + } + else { + $s .= (sprintf('%.3F %.3F l ',($x0 + $w - ($border_bottom/2))*_MPDFK, ($this->h-($y0 + $h - ($border_bottom/2)))*_MPDFK))."\n"; + } + $s .= 'S'."\n"; + $this->_out($s); + + if ($tbd['style']=='double') { + $this->SetLineWidth($tbd['w']/3); + $this->SetDColor($tbcol); + $this->_out($s); + } + if (!$brset && $tbd['style']!='dotted' && $tbd['style']!='dashed') { $this->_out('Q'); } + + + // Reset Corners and Dash off + $this->SetLineWidth(0.1); // mPDF 5.6.57 + $this->SetDColor($this->ConvertColor(0)); + $this->SetLineJoin(2); + $this->SetLineCap(2); + $this->SetDash(); + } + } + if ($this->blk[$blvl]['border_left']) { + $tbd = $this->blk[$blvl]['border_left']; + if (isset($tbd['s']) && $tbd['s']) { + if (!$brset && $tbd['style']!='dotted' && $tbd['style']!='dashed') { + $this->_out('q'); + $this->SetLineWidth(0); + $this->_out(sprintf('%.3F %.3F m ',($x0)*_MPDFK, ($this->h-($y0))*_MPDFK)); + $this->_out(sprintf('%.3F %.3F l ',($x0 + $border_left)*_MPDFK, ($this->h-($y0+$border_top))*_MPDFK)); + $this->_out(sprintf('%.3F %.3F l ',($x0 + $border_left)*_MPDFK, ($this->h-($y0 + $h - $border_bottom))*_MPDFK)); + $this->_out(sprintf('%.3F %.3F l ',($x0)*_MPDFK, ($this->h-($y0 + $h))*_MPDFK)); + $this->_out(' h W n '); // Ends path no-op & Sets the clipping path + } + + $this->_setBorderLine($tbd); + if ($tbd['style']=='dotted' || $tbd['style']=='dashed') { $this->_setDashBorder($tbd['style'],$divider,$continuingpage,'L'); } +/*-- BORDER-RADIUS --*/ + else if (($brTL_V && $brTL_H) || ($brBL_V && $brBL_H) || $tbd['style']=='solid' || $tbd['style']=='double' ) { // mPDF 5.6.58 + $this->SetLineJoin(0); + $this->SetLineCap(0); + } + $s = ''; + if ($brTL_V && $brTL_H) { + $s .= ($this->_EllipseArc($x0 + $brTL_H, $y0 + $brTL_V, $brTL_H - $border_left/2 , $brTL_V - $border_left/2, 2, 2, true))."\n"; + } + else +/*-- END BORDER-RADIUS --*/ + if ($tbd['style']=='solid' || $tbd['style']=='double') { + $s .= (sprintf('%.3F %.3F m ',($x0 + ($border_left/2))*_MPDFK, ($this->h-($y0))*_MPDFK))."\n"; + } + else { + $s .= (sprintf('%.3F %.3F m ',($x0 + ($border_left/2))*_MPDFK, ($this->h-($y0 + ($border_left/2)))*_MPDFK))."\n"; + } +/*-- BORDER-RADIUS --*/ + if ($brBL_V && $brBL_H ) { + $s .= (sprintf('%.3F %.3F l ',($x0 + ($border_left/2))*_MPDFK, ($this->h-($y0 + $h - ($border_left/2)- $brBL_V) )*_MPDFK))."\n"; + $s .= ($this->_EllipseArc($x0 + $brBL_H, $y0 + $h - $brBL_V, $brBL_H - $border_left/2 , $brBL_V - $border_left/2, 3, 1))."\n"; + } + else +/*-- END BORDER-RADIUS --*/ + if ($tbd['style']=='solid' || $tbd['style']=='double') { + $s .= (sprintf('%.3F %.3F l ',($x0 + ($border_left/2))*_MPDFK, ($this->h-($y0 + $h) )*_MPDFK))."\n"; + } + else { + $s .= (sprintf('%.3F %.3F l ',($x0 + ($border_left/2))*_MPDFK, ($this->h-($y0 + $h - ($border_left/2)) )*_MPDFK))."\n"; + } + $s .= 'S'."\n"; + $this->_out($s); + + if ($tbd['style']=='double') { + $this->SetLineWidth($tbd['w']/3); + $this->SetDColor($tbcol); + $this->_out($s); + } + if (!$brset && $tbd['style']!='dotted' && $tbd['style']!='dashed') { $this->_out('Q'); } + + // Reset Corners and Dash off + $this->SetLineWidth(0.1); // mPDF 5.6.57 + $this->SetDColor($this->ConvertColor(0)); + $this->SetLineJoin(2); + $this->SetLineCap(2); + $this->SetDash(); + } + } + if ($this->blk[$blvl]['border_right']) { + $tbd = $this->blk[$blvl]['border_right']; + if (isset($tbd['s']) && $tbd['s']) { + if (!$brset && $tbd['style']!='dotted' && $tbd['style']!='dashed') { + $this->_out('q'); + $this->SetLineWidth(0); + $this->_out(sprintf('%.3F %.3F m ',($x0 + $w)*_MPDFK, ($this->h-($y0))*_MPDFK)); + $this->_out(sprintf('%.3F %.3F l ',($x0 + $w - $border_right)*_MPDFK, ($this->h-($y0+$border_top))*_MPDFK)); + $this->_out(sprintf('%.3F %.3F l ',($x0 + $w - $border_right)*_MPDFK, ($this->h-($y0 + $h - $border_bottom))*_MPDFK)); + $this->_out(sprintf('%.3F %.3F l ',($x0 + $w)*_MPDFK, ($this->h-($y0 + $h))*_MPDFK)); + $this->_out(' h W n '); // Ends path no-op & Sets the clipping path + } + + $this->_setBorderLine($tbd); + if ($tbd['style']=='dotted' || $tbd['style']=='dashed') { $this->_setDashBorder($tbd['style'],$divider,$continuingpage,'R'); } +/*-- BORDER-RADIUS --*/ + else if (($brTR_V && $brTR_H) || ($brBR_V && $brBR_H) || $tbd['style']=='solid' || $tbd['style']=='double' ) { // mPDF 5.6.58 + $this->SetLineJoin(0); + $this->SetLineCap(0); + } + $s = ''; + if ($brBR_V && $brBR_H) { + $s .= ($this->_EllipseArc($x0 + $w - $brBR_H, $y0 + $h - $brBR_V, $brBR_H - $border_right/2 , $brBR_V - $border_right/2, 4, 2, true))."\n"; + } + else +/*-- END BORDER-RADIUS --*/ + if ($tbd['style']=='solid' || $tbd['style']=='double') { + $s .= (sprintf('%.3F %.3F m ',($x0 + $w - ($border_right/2))*_MPDFK, ($this->h-($y0 + $h))*_MPDFK))."\n"; + } + else { + $s .= (sprintf('%.3F %.3F m ',($x0 + $w - ($border_right/2))*_MPDFK, ($this->h-($y0 + $h - ($border_right/2)))*_MPDFK))."\n"; + } +/*-- BORDER-RADIUS --*/ + if ($brTR_V && $brTR_H ) { + $s .= (sprintf('%.3F %.3F l ',($x0 + $w - ($border_right/2))*_MPDFK, ($this->h-($y0 + ($border_right/2) + $brTR_V) )*_MPDFK))."\n"; + $s .= ($this->_EllipseArc($x0 + $w - $brTR_H, $y0 + $brTR_V, $brTR_H - $border_right/2 , $brTR_V - $border_right/2, 1, 1))."\n"; + } + else +/*-- END BORDER-RADIUS --*/ + if ($tbd['style']=='solid' || $tbd['style']=='double') { + $s .= (sprintf('%.3F %.3F l ',($x0 + $w - ($border_right/2))*_MPDFK, ($this->h-($y0) )*_MPDFK))."\n"; + } + else { + $s .= (sprintf('%.3F %.3F l ',($x0 + $w - ($border_right/2))*_MPDFK, ($this->h-($y0 + ($border_right/2)) )*_MPDFK))."\n"; + } + $s .= 'S'."\n"; + $this->_out($s); + + if ($tbd['style']=='double') { + $this->SetLineWidth($tbd['w']/3); + $this->SetDColor($tbcol); + $this->_out($s); + } + if (!$brset && $tbd['style']!='dotted' && $tbd['style']!='dashed') { $this->_out('Q'); } + + // Reset Corners and Dash off + $this->SetLineWidth(0.1); // mPDF 5.6.57 + $this->SetDColor($this->ConvertColor(0)); + $this->SetLineJoin(2); + $this->SetLineCap(2); + $this->SetDash(); + } + } + + + $this->SetDash(); + $this->y = $save_y; + + + // BACKGROUNDS are disabled in columns/kbt/headers - messes up the repositioning in printcolumnbuffer + if ($this->ColActive || $this->kwt || $this->keep_block_together) { return ; } + + + $bgx0 = $x0; + $bgx1 = $x1; + $bgy0 = $y0; + $bgy1 = $y1; + + // Defined br values represent the radius of the outer curve - need to take border-width/2 from each radius for drawing the borders + if (isset($this->blk[$blvl]['background_clip']) && $this->blk[$blvl]['background_clip'] == 'padding-box') { + $brbgTL_H = max(0, $brTL_H - $this->blk[$blvl]['border_left']['w']); + $brbgTL_V = max(0, $brTL_V - $this->blk[$blvl]['border_top']['w']); + $brbgTR_H = max(0, $brTR_H - $this->blk[$blvl]['border_right']['w']); + $brbgTR_V = max(0, $brTR_V - $this->blk[$blvl]['border_top']['w']); + $brbgBL_H = max(0, $brBL_H - $this->blk[$blvl]['border_left']['w']); + $brbgBL_V = max(0, $brBL_V - $this->blk[$blvl]['border_bottom']['w']); + $brbgBR_H = max(0, $brBR_H - $this->blk[$blvl]['border_right']['w']); + $brbgBR_V = max(0, $brBR_V - $this->blk[$blvl]['border_bottom']['w']); + $bgx0 += $this->blk[$blvl]['border_left']['w']; + $bgx1 -= $this->blk[$blvl]['border_right']['w']; + if ($this->blk[$blvl]['border_top'] && $divider != 'pagetop' && !$continuingpage) { + $bgy0 += $this->blk[$blvl]['border_top']['w']; + } + if ($this->blk[$blvl]['border_bottom'] && $blockstate != 1 && $divider != 'pagebottom') { + $bgy1 -= $this->blk[$blvl]['border_bottom']['w']; + } + } + // mPDF 5.6.09 + else if (isset($this->blk[$blvl]['background_clip']) && $this->blk[$blvl]['background_clip'] == 'content-box') { + $brbgTL_H = max(0, $brTL_H - $this->blk[$blvl]['border_left']['w'] - $this->blk[$blvl]['padding_left']); + $brbgTL_V = max(0, $brTL_V - $this->blk[$blvl]['border_top']['w'] - $this->blk[$blvl]['padding_top']); + $brbgTR_H = max(0, $brTR_H - $this->blk[$blvl]['border_right']['w'] - $this->blk[$blvl]['padding_right']); + $brbgTR_V = max(0, $brTR_V - $this->blk[$blvl]['border_top']['w'] - $this->blk[$blvl]['padding_top']); + $brbgBL_H = max(0, $brBL_H - $this->blk[$blvl]['border_left']['w'] - $this->blk[$blvl]['padding_left']); + $brbgBL_V = max(0, $brBL_V - $this->blk[$blvl]['border_bottom']['w'] - $this->blk[$blvl]['padding_bottom']); + $brbgBR_H = max(0, $brBR_H - $this->blk[$blvl]['border_right']['w'] - $this->blk[$blvl]['padding_right']); + $brbgBR_V = max(0, $brBR_V - $this->blk[$blvl]['border_bottom']['w'] - $this->blk[$blvl]['padding_bottom']); + $bgx0 += $this->blk[$blvl]['border_left']['w'] + $this->blk[$blvl]['padding_left']; + $bgx1 -= $this->blk[$blvl]['border_right']['w'] + $this->blk[$blvl]['padding_right']; + if (($this->blk[$blvl]['border_top']['w'] || $this->blk[$blvl]['padding_top']) && $divider != 'pagetop' && !$continuingpage) { + $bgy0 += $this->blk[$blvl]['border_top']['w'] + $this->blk[$blvl]['padding_top']; + } + if (($this->blk[$blvl]['border_bottom']['w'] || $this->blk[$blvl]['padding_bottom']) && $blockstate != 1 && $divider != 'pagebottom') { + $bgy1 -= $this->blk[$blvl]['border_bottom']['w'] + $this->blk[$blvl]['padding_bottom']; + } + } + else { + $brbgTL_H = $brTL_H; + $brbgTL_V = $brTL_V; + $brbgTR_H = $brTR_H; + $brbgTR_V = $brTR_V; + $brbgBL_H = $brBL_H; + $brbgBL_V = $brBL_V; + $brbgBR_H = $brBR_H; + $brbgBR_V = $brBR_V; + } + + // Set clipping path + $s = ' q 0 w '; // Line width=0 + $s .= sprintf('%.3F %.3F m ', ($bgx0+$brbgTL_H )*_MPDFK, ($this->h-$bgy0)*_MPDFK); // start point TL before the arc +/*-- BORDER-RADIUS --*/ + if ($brbgTL_H || $brbgTL_V) { + $s .= $this->_EllipseArc($bgx0+$brbgTL_H, $bgy0+$brbgTL_V, $brbgTL_H , $brbgTL_V , 2); // segment 2 TL + } +/*-- END BORDER-RADIUS --*/ + $s .= sprintf('%.3F %.3F l ', ($bgx0)*_MPDFK, ($this->h-($bgy1-$brbgBL_V ))*_MPDFK); // line to BL +/*-- BORDER-RADIUS --*/ + if ($brbgBL_H || $brbgBL_V) { + $s .= $this->_EllipseArc($bgx0+$brbgBL_H, $bgy1-$brbgBL_V, $brbgBL_H , $brbgBL_V , 3); // segment 3 BL + } +/*-- END BORDER-RADIUS --*/ + $s .= sprintf('%.3F %.3F l ', ($bgx1-$brbgBR_H )*_MPDFK, ($this->h-($bgy1))*_MPDFK); // line to BR +/*-- BORDER-RADIUS --*/ + if ($brbgBR_H || $brbgBR_V) { + $s .= $this->_EllipseArc($bgx1-$brbgBR_H, $bgy1-$brbgBR_V, $brbgBR_H , $brbgBR_V , 4); // segment 4 BR + } +/*-- END BORDER-RADIUS --*/ + $s .= sprintf('%.3F %.3F l ', ($bgx1)*_MPDFK, ($this->h-($bgy0+$brbgTR_V))*_MPDFK); // line to TR +/*-- BORDER-RADIUS --*/ + if ($brbgTR_H || $brbgTR_V) { + $s .= $this->_EllipseArc($bgx1-$brbgTR_H, $bgy0+$brbgTR_V, $brbgTR_H , $brbgTR_V , 1); // segment 1 TR + } +/*-- END BORDER-RADIUS --*/ + $s .= sprintf('%.3F %.3F l ', ($bgx0+$brbgTL_H )*_MPDFK, ($this->h-$bgy0)*_MPDFK); // line to TL + + + // Box Shadow + $shadow = ''; + if (isset($this->blk[$blvl]['box_shadow']) && $this->blk[$blvl]['box_shadow'] && $h > 0) { + foreach($this->blk[$blvl]['box_shadow'] AS $sh) { + // Colors + if ($sh['col']{0}==1) { + $colspace = 'Gray'; + if ($sh['col']{2}==1) { $col1 = '1'.$sh['col'][1].'1'.$sh['col'][3]; } + else { $col1 = '1'.$sh['col'][1].'1'.chr(100); } + $col2 = '1'.$sh['col'][1].'1'.chr(0); + } + else if ($sh['col']{0}==4) { // CMYK + $colspace = 'CMYK'; + $col1 = '6'.$sh['col'][1].$sh['col'][2].$sh['col'][3].$sh['col'][4].chr(100); + $col2 = '6'.$sh['col'][1].$sh['col'][2].$sh['col'][3].$sh['col'][4].chr(0); + } + else if ($sh['col']{0}==5) { // RGBa + $colspace = 'RGB'; + $col1 = '5'.$sh['col'][1].$sh['col'][2].$sh['col'][3].$sh['col'][4]; + $col2 = '5'.$sh['col'][1].$sh['col'][2].$sh['col'][3].chr(0); + } + else if ($sh['col']{0}==6) { // CMYKa + $colspace = 'CMYK'; + $col1 = '6'.$sh['col'][1].$sh['col'][2].$sh['col'][3].$sh['col'][4].$sh['col'][5]; + $col2 = '6'.$sh['col'][1].$sh['col'][2].$sh['col'][3].$sh['col'][4].chr(0); + } + else { + $colspace = 'RGB'; + $col1 = '5'.$sh['col'][1].$sh['col'][2].$sh['col'][3].chr(100); + $col2 = '5'.$sh['col'][1].$sh['col'][2].$sh['col'][3].chr(0); + } + + // Use clipping path as set above (and rectangle around page) to clip area outside box + $shadow .= $s; // Use the clipping path with W* + $shadow .= sprintf('0 %.3F m %.3F %.3F l ', $this->h*_MPDFK, $this->w*_MPDFK, $this->h*_MPDFK); + $shadow .= sprintf('%.3F 0 l 0 0 l 0 %.3F l ', $this->w*_MPDFK, $this->h*_MPDFK); + $shadow .= 'W n'."\n"; + + $sh['blur'] = abs($sh['blur']); // cannot have negative blur value + // Ensure spread/blur do not make effective shadow width/height < 0 + // Could do more complex things but this just adjusts spread value + if (-$sh['spread'] + $sh['blur']/2 > min($w/2, $h/2)) { + $sh['spread'] = $sh['blur']/2 - min($w/2, $h/2) + 0.01; + } + // Shadow Offset + if ($sh['x'] || $sh['y']) $shadow .= sprintf(' q 1 0 0 1 %.4F %.4F cm', $sh['x']*_MPDFK, -$sh['y']*_MPDFK)."\n"; + + // Set path for INNER shadow + $shadow .= ' q 0 w '; + $shadow .= $this->SetFColor($col1, true)."\n"; + if ($col1{0}==5 && ord($col1{4})<100) { // RGBa + $shadow .= $this->SetAlpha(ord($col1{4})/100, 'Normal', true, 'F')."\n"; + } + else if ($col1{0}==6 && ord($col1{5})<100) { // CMYKa + $shadow .= $this->SetAlpha(ord($col1{5})/100, 'Normal', true, 'F')."\n"; + } + else if ($col1{0}==1 && $col1{2}==1 && ord($col1{3})<100) { // Gray + $shadow .= $this->SetAlpha(ord($col1{3})/100, 'Normal', true, 'F')."\n"; + } + + // Blur edges + $mag = 0.551784; // Bezier Control magic number for 4-part spline for circle/ellipse + $mag2 = 0.551784; // Bezier Control magic number to fill in edge of blurred rectangle + $d1 = $sh['spread']+$sh['blur']/2; + $d2 = $sh['spread']-$sh['blur']/2; + $bl = $sh['blur']; + $x00 = $x0 - $d1; + $y00 = $y0 - $d1; + $w00 = $w + $d1*2; + $h00 = $h + $d1*2; + + // If any border-radius is greater width-negative spread(inner edge), ignore radii for shadow or screws up + $flatten = false; + if (max($brbgTR_H, $brbgTL_H, $brbgBR_H, $brbgBL_H) >= $w+$d2) { $flatten = true; } + if (max($brbgTR_V, $brbgTL_V, $brbgBR_V, $brbgBL_V) >= $h+$d2) { $flatten = true; } + + + // TOP RIGHT corner + $p1x = $x00+$w00-$d1-$brbgTR_H; $p1c2x = $p1x +($d2+$brbgTR_H)*$mag; + $p1y = $y00+$bl; + $p2x = $x00+$w00-$d1-$brbgTR_H; $p2c2x = $p2x + ($d1+$brbgTR_H)*$mag; + $p2y = $y00; $p2c1y = $p2y + $bl/2; + $p3x = $x00+$w00; $p3c2x = $p3x - $bl/2; + $p3y = $y00+$d1+$brbgTR_V; $p3c1y = $p3y - ($d1+$brbgTR_V)*$mag; + $p4x = $x00+$w00-$bl; + $p4y = $y00+$d1+$brbgTR_V; $p4c2y = $p4y - ($d2+$brbgTR_V)*$mag; + if (-$d2 > min($brbgTR_H, $brbgTR_V) || $flatten) { + $p1x = $x00+$w00-$bl; $p1c2x = $p1x; + $p2x = $x00+$w00-$bl; $p2c2x = $p2x + $bl*$mag2; + $p3y = $y00+$bl; $p3c1y = $p3y - $bl*$mag2; + $p4y = $y00+$bl; $p4c2y = $p4y ; + } + + $shadow .= sprintf('%.3F %.3F m ', ($p1x )*_MPDFK, ($this->h-($p1y ))*_MPDFK); + $shadow .= sprintf('%.3F %.3F %.3F %.3F %.3F %.3F c ', ($p1c2x)*_MPDFK, ($this->h-($p1y))*_MPDFK, ($p4x)*_MPDFK, ($this->h-($p4c2y))*_MPDFK, ($p4x)*_MPDFK, ($this->h-($p4y))*_MPDFK); + $patch_array[0]['f']=0; + $patch_array[0]['points']=array($p1x,$p1y, $p1x,$p1y, + $p2x,$p2c1y, $p2x,$p2y, $p2c2x,$p2y, + $p3x,$p3c1y, $p3x,$p3y, $p3c2x,$p3y, + $p4x,$p4y, $p4x,$p4y, $p4x,$p4c2y, + $p1c2x,$p1y); + $patch_array[0]['colors'] = array($col1,$col2,$col2,$col1); + + + // RIGHT + $p1x = $x00+$w00; // control point only matches p3 preceding + $p1y = $y00+$d1+$brbgTR_V; + $p2x = $x00+$w00-$bl; // control point only matches p4 preceding + $p2y = $y00+$d1+$brbgTR_V; + $p3x = $x00+$w00-$bl; + $p3y = $y00+$h00-$d1-$brbgBR_V; + $p4x = $x00+$w00; $p4c1x = $p4x-$bl/2; + $p4y = $y00+$h00-$d1-$brbgBR_V; + if (-$d2 > min($brbgTR_H, $brbgTR_V) || $flatten) { + $p1y = $y00+$bl; + $p2y = $y00+$bl; + } + if (-$d2 > min($brbgBR_H, $brbgBR_V) || $flatten) { + $p3y = $y00+$h00-$bl; + $p4y = $y00+$h00-$bl; + } + + $shadow .= sprintf('%.3F %.3F l ', ($p3x )*_MPDFK, ($this->h-($p3y ))*_MPDFK); + $patch_array[1]['f']=2; + $patch_array[1]['points']=array($p2x,$p2y, + $p3x,$p3y, $p3x,$p3y, $p3x,$p3y, + $p4c1x,$p4y, $p4x,$p4y, $p4x,$p4y, + $p1x,$p1y); + $patch_array[1]['colors'] = array($col1,$col2); + + + // BOTTOM RIGHT corner + $p1x = $x00+$w00-$bl; // control points only matches p3 preceding + $p1y = $y00+$h00-$d1-$brbgBR_V; $p1c2y = $p1y + ($d2+$brbgBR_V)*$mag; + $p2x = $x00+$w00; // control point only matches p4 preceding + $p2y = $y00+$h00-$d1-$brbgBR_V; $p2c2y = $p2y + ($d1+$brbgBR_V)*$mag; + $p3x = $x00+$w00-$d1-$brbgBR_H; $p3c1x = $p3x + ($d1+$brbgBR_H)*$mag; + $p3y = $y00+$h00; $p3c2y = $p3y - $bl/2; + $p4x = $x00+$w00-$d1-$brbgBR_H; $p4c2x = $p4x + ($d2+$brbgBR_H)*$mag; + $p4y = $y00+$h00-$bl; + + if (-$d2 > min($brbgBR_H, $brbgBR_V) || $flatten) { + $p1y = $y00+$h00-$bl; $p1c2y = $p1y; + $p2y = $y00+$h00-$bl; $p2c2y = $p2y + $bl*$mag2; + $p3x = $x00+$w00-$bl; $p3c1x = $p3x + $bl*$mag2; + $p4x = $x00+$w00-$bl; $p4c2x = $p4x; + } + + $shadow .= sprintf('%.3F %.3F %.3F %.3F %.3F %.3F c ', ($p1x)*_MPDFK, ($this->h-($p1c2y))*_MPDFK, ($p4c2x)*_MPDFK, ($this->h-($p4y))*_MPDFK, ($p4x)*_MPDFK, ($this->h-($p4y))*_MPDFK); + $patch_array[2]['f']=2; + $patch_array[2]['points']=array($p2x,$p2c2y, + $p3c1x,$p3y, $p3x,$p3y, $p3x,$p3c2y, + $p4x,$p4y, $p4x,$p4y, $p4c2x,$p4y, + $p1x,$p1c2y); + $patch_array[2]['colors'] = array($col2,$col1); + + + + // BOTTOM + $p1x = $x00+$w00-$d1-$brbgBR_H; // control point only matches p3 preceding + $p1y = $y00+$h00; + $p2x = $x00+$w00-$d1-$brbgBR_H; // control point only matches p4 preceding + $p2y = $y00+$h00-$bl; + $p3x = $x00+$d1+$brbgBL_H; + $p3y = $y00+$h00-$bl; + $p4x = $x00+$d1+$brbgBL_H; + $p4y = $y00+$h00; $p4c1y = $p4y - $bl/2; + + if (-$d2 > min($brbgBR_H, $brbgBR_V) || $flatten) { + $p1x = $x00+$w00-$bl; + $p2x = $x00+$w00-$bl; + } + if (-$d2 > min($brbgBL_H, $brbgBL_V) || $flatten) { + $p3x = $x00+$bl; + $p4x = $x00+$bl; + } + + $shadow .= sprintf('%.3F %.3F l ', ($p3x )*_MPDFK, ($this->h-($p3y ))*_MPDFK); + $patch_array[3]['f']=2; + $patch_array[3]['points']=array($p2x,$p2y, + $p3x,$p3y, $p3x,$p3y, $p3x,$p3y, + $p4x,$p4c1y, $p4x,$p4y, $p4x,$p4y, + $p1x,$p1y); + $patch_array[3]['colors'] = array($col1,$col2); + + // BOTTOM LEFT corner + $p1x = $x00+$d1+$brbgBL_H; $p1c2x = $p1x - ($d2+$brbgBL_H)*$mag; // control points only matches p3 preceding + $p1y = $y00+$h00-$bl; + $p2x = $x00+$d1+$brbgBL_H; $p2c2x = $p2x - ($d1+$brbgBL_H)*$mag; // control point only matches p4 preceding + $p2y = $y00+$h00; + $p3x = $x00; $p3c2x = $p3x + $bl/2; + $p3y = $y00+$h00-$d1-$brbgBL_V; $p3c1y = $p3y + ($d1+$brbgBL_V)*$mag; + $p4x = $x00+$bl; + $p4y = $y00+$h00-$d1-$brbgBL_V; $p4c2y = $p4y + ($d2+$brbgBL_V)*$mag; + if (-$d2 > min($brbgBL_H, $brbgBL_V) || $flatten) { + $p1x = $x00+$bl; $p1c2x = $p1x; + $p2x = $x00+$bl; $p2c2x = $p2x - $bl*$mag2; + $p3y = $y00+$h00-$bl; $p3c1y = $p3y + $bl*$mag2; + $p4y = $y00+$h00-$bl; $p4c2y = $p4y; + } + + $shadow .= sprintf('%.3F %.3F %.3F %.3F %.3F %.3F c ', ($p1c2x)*_MPDFK, ($this->h-($p1y))*_MPDFK, ($p4x)*_MPDFK, ($this->h-($p4c2y))*_MPDFK, ($p4x)*_MPDFK, ($this->h-($p4y))*_MPDFK); + $patch_array[4]['f']=2; + $patch_array[4]['points']=array($p2c2x,$p2y, + $p3x,$p3c1y, $p3x,$p3y, $p3c2x,$p3y, + $p4x,$p4y, $p4x,$p4y, $p4x,$p4c2y, + $p1c2x,$p1y); + $patch_array[4]['colors'] = array($col2,$col1); + + + // LEFT - joins on the right (C3-C4 of previous): f = 2 + $p1x = $x00; // control point only matches p3 preceding + $p1y = $y00+$h00-$d1-$brbgBL_V; + $p2x = $x00+$bl; // control point only matches p4 preceding + $p2y = $y00+$h00-$d1-$brbgBL_V; + $p3x = $x00+$bl; + $p3y = $y00+$d1+$brbgTL_V; + $p4x = $x00; $p4c1x = $p4x + $bl/2; + $p4y = $y00+$d1+$brbgTL_V; + if (-$d2 > min($brbgBL_H, $brbgBL_V) || $flatten) { + $p1y = $y00+$h00-$bl; + $p2y = $y00+$h00-$bl; + } + if (-$d2 > min($brbgTL_H, $brbgTL_V) || $flatten) { + $p3y = $y00+$bl; + $p4y = $y00+$bl; + } + + $shadow .= sprintf('%.3F %.3F l ', ($p3x )*_MPDFK, ($this->h-($p3y ))*_MPDFK); + $patch_array[5]['f']=2; + $patch_array[5]['points']=array($p2x,$p2y, + $p3x,$p3y, $p3x,$p3y, $p3x,$p3y, + $p4c1x,$p4y, $p4x,$p4y, $p4x,$p4y, + $p1x,$p1y); + $patch_array[5]['colors'] = array($col1,$col2); + + // TOP LEFT corner + $p1x = $x00+$bl; // control points only matches p3 preceding + $p1y = $y00+$d1+$brbgTL_V; $p1c2y = $p1y - ($d2+$brbgTL_V)*$mag; + $p2x = $x00; // control point only matches p4 preceding + $p2y = $y00+$d1+$brbgTL_V; $p2c2y = $p2y - ($d1+$brbgTL_V)*$mag; + $p3x = $x00+$d1+$brbgTL_H; $p3c1x = $p3x - ($d1+$brbgTL_H)*$mag; + $p3y = $y00; $p3c2y = $p3y + $bl/2; + $p4x = $x00+$d1+$brbgTL_H; $p4c2x = $p4x - ($d2+$brbgTL_H)*$mag; + $p4y = $y00+$bl; + + if (-$d2 > min($brbgTL_H, $brbgTL_V) || $flatten) { + $p1y = $y00+$bl; $p1c2y = $p1y; + $p2y = $y00+$bl; $p2c2y = $p2y - $bl*$mag2; + $p3x = $x00+$bl; $p3c1x = $p3x - $bl*$mag2; + $p4x = $x00+$bl; $p4c2x = $p4x ; + } + + $shadow .= sprintf('%.3F %.3F %.3F %.3F %.3F %.3F c ', ($p1x)*_MPDFK, ($this->h-($p1c2y))*_MPDFK, ($p4c2x)*_MPDFK, ($this->h-($p4y))*_MPDFK, ($p4x)*_MPDFK, ($this->h-($p4y))*_MPDFK); + $patch_array[6]['f']=2; + $patch_array[6]['points']=array($p2x,$p2c2y, + $p3c1x,$p3y, $p3x,$p3y, $p3x,$p3c2y, + $p4x,$p4y, $p4x,$p4y, $p4c2x,$p4y, + $p1x,$p1c2y); + $patch_array[6]['colors'] = array($col2,$col1); + + + // TOP - joins on the right (C3-C4 of previous): f = 2 + $p1x = $x00+$d1+$brbgTL_H; // control point only matches p3 preceding + $p1y = $y00; + $p2x = $x00+$d1+$brbgTL_H; // control point only matches p4 preceding + $p2y = $y00+$bl; + $p3x = $x00+$w00-$d1-$brbgTR_H; + $p3y = $y00+$bl; + $p4x = $x00+$w00-$d1-$brbgTR_H; + $p4y = $y00; $p4c1y = $p4y + $bl/2; + if (-$d2 > min($brbgTL_H, $brbgTL_V) || $flatten) { + $p1x = $x00+$bl; + $p2x = $x00+$bl; + } + if (-$d2 > min($brbgTR_H, $brbgTR_V) || $flatten) { + $p3x = $x00+$w00-$bl; + $p4x = $x00+$w00-$bl; + } + + $shadow .= sprintf('%.3F %.3F l ', ($p3x )*_MPDFK, ($this->h-($p3y ))*_MPDFK); + $patch_array[7]['f']=2; + $patch_array[7]['points']=array($p2x,$p2y, + $p3x,$p3y, $p3x,$p3y, $p3x,$p3y, + $p4x,$p4c1y, $p4x,$p4y, $p4x,$p4y, + $p1x,$p1y); + $patch_array[7]['colors'] = array($col1,$col2); + + $shadow .= ' h f Q '."\n"; // Close path and Fill the inner solid shadow + + if ($bl) $shadow .= $this->grad->CoonsPatchMesh($x00,$y00,$w00,$h00,$patch_array,$x00,$x00+$w00,$y00,$y00+$h00, $colspace, true); + + if ($sh['x'] || $sh['y']) $shadow .= ' Q'."\n"; // Shadow Offset + $shadow .= ' Q'."\n"; // Ends path no-op & Sets the clipping path + + } + } + + $s .= ' W n '; // Ends path no-op & Sets the clipping path + + if ($this->blk[$blvl]['bgcolor']) { + $this->pageBackgrounds[$blvl][] = array('x'=>$x0, 'y'=>$y0, 'w'=>$w, 'h'=>$h, 'col'=>$this->blk[$blvl]['bgcolorarray'], 'clippath'=>$s, 'visibility'=>$this->visibility, 'shadow'=>$shadow, 'z-index'=>$this->current_layer); // mPDF 5.6.01 + } + else if ($shadow) { + $this->pageBackgrounds[$blvl][] = array('shadowonly'=>true, 'col'=>'', 'clippath'=>'', 'visibility'=>$this->visibility, 'shadow'=>$shadow, 'z-index'=>$this->current_layer); // mPDF 5.6.01 + } + +/*-- BACKGROUNDS --*/ + if (isset($this->blk[$blvl]['gradient'])) { + $g = $this->grad->parseBackgroundGradient($this->blk[$blvl]['gradient']); + if ($g) { + $gx = $x0; + $gy = $y0; + $this->pageBackgrounds[$blvl][] = array('gradient'=>true, 'x'=>$gx, 'y'=>$gy, 'w'=>$w, 'h'=>$h, 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>$s, 'visibility'=>$this->visibility, 'z-index'=>$this->current_layer); // mPDF 5.6.01 + } + } + if (isset($this->blk[$blvl]['background-image'])) { + if ($this->blk[$blvl]['background-image']['gradient'] && preg_match('/(-moz-)*(repeating-)*(linear|radial)-gradient/', $this->blk[$blvl]['background-image']['gradient'] )) { + $g = $this->grad->parseMozGradient( $this->blk[$blvl]['background-image']['gradient'] ); + if ($g) { + $gx = $x0; + $gy = $y0; + // mPDF 5.6.11 + // origin specifies the background-positioning-area (bpa) + if ($this->blk[$blvl]['background-image']['origin'] == 'padding-box') { + $gx += $this->blk[$blvl]['border_left']['w']; + $w -= ($this->blk[$blvl]['border_left']['w'] + $this->blk[$blvl]['border_right']['w']); + if ($this->blk[$blvl]['border_top'] && $divider != 'pagetop' && !$continuingpage) { + $gy += $this->blk[$blvl]['border_top']['w']; + } + if ($this->blk[$blvl]['border_bottom'] && $blockstate != 1 && $divider != 'pagebottom') { + $gy1 = $y1 - $this->blk[$blvl]['border_bottom']['w']; + } + else { $gy1 = $y1; } + $h = $gy1 - $gy; + } + else if ($this->blk[$blvl]['background-image']['origin'] == 'content-box') { + $gx += $this->blk[$blvl]['border_left']['w'] + $this->blk[$blvl]['padding_left']; + $w -= ($this->blk[$blvl]['border_left']['w'] + $this->blk[$blvl]['padding_left'] + $this->blk[$blvl]['border_right']['w'] + $this->blk[$blvl]['padding_right']); + if ($this->blk[$blvl]['border_top'] && $divider != 'pagetop' && !$continuingpage) { + $gy += $this->blk[$blvl]['border_top']['w'] + $this->blk[$blvl]['padding_top']; + } + if ($this->blk[$blvl]['border_bottom'] && $blockstate != 1 && $divider != 'pagebottom') { + $gy1 = $y1 - ($this->blk[$blvl]['border_bottom']['w'] + $this->blk[$blvl]['padding_bottom']); + } + else { $gy1 = $y1 - $this->blk[$blvl]['padding_bottom']; } + $h = $gy1 - $gy; + } + + if (isset($this->blk[$blvl]['background-image']['size']['w']) && $this->blk[$blvl]['background-image']['size']['w']) { + $size = $this->blk[$blvl]['background-image']['size']; + if ($size['w']!='contain' && $size['w']!='cover') { + if (stristr($size['w'] ,'%')) { + $size['w'] += 0; + $size['w'] /= 100; + $w *= $size['w']; + } + else if ($size['w']!='auto') { + $w = $size['w']; + } + if (stristr($size['h'] ,'%')) { + $size['h'] += 0; + $size['h'] /= 100; + $h *= $size['h']; + } + else if ($size['h']!='auto') { + $h = $size['h']; + } + } + } + $this->pageBackgrounds[$blvl][] = array('gradient'=>true, 'x'=>$gx, 'y'=>$gy, 'w'=>$w, 'h'=>$h, 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>$s, 'visibility'=>$this->visibility, 'z-index'=>$this->current_layer); // mPDF 5.6.01 + } + } + else { + $image_id = $this->blk[$blvl]['background-image']['image_id']; + $orig_w = $this->blk[$blvl]['background-image']['orig_w']; + $orig_h = $this->blk[$blvl]['background-image']['orig_h']; + $x_pos = $this->blk[$blvl]['background-image']['x_pos']; + $y_pos = $this->blk[$blvl]['background-image']['y_pos']; + $x_repeat = $this->blk[$blvl]['background-image']['x_repeat']; + $y_repeat = $this->blk[$blvl]['background-image']['y_repeat']; + $resize = $this->blk[$blvl]['background-image']['resize']; + $opacity = $this->blk[$blvl]['background-image']['opacity']; + $itype = $this->blk[$blvl]['background-image']['itype']; + $size = $this->blk[$blvl]['background-image']['size']; // mPDF 5.6.10 + // mPDF 5.6.10 + // origin specifies the background-positioning-area (bpa) + $bpa = array('x'=>$x0, 'y'=>$y0, 'w'=>$w, 'h'=>$h); + if ($this->blk[$blvl]['background-image']['origin'] == 'padding-box') { + $bpa['x'] = $x0 + $this->blk[$blvl]['border_left']['w']; + $bpa['w'] = $w - ($this->blk[$blvl]['border_left']['w'] + $this->blk[$blvl]['border_right']['w']); + if ($this->blk[$blvl]['border_top'] && $divider != 'pagetop' && !$continuingpage) { + $bpa['y'] = $y0 + $this->blk[$blvl]['border_top']['w']; + } + else { $bpa['y'] = $y0; } + if ($this->blk[$blvl]['border_bottom'] && $blockstate != 1 && $divider != 'pagebottom') { + $bpay = $y1 - $this->blk[$blvl]['border_bottom']['w']; + } + else { $bpay = $y1; } + $bpa['h'] = $bpay - $bpa['y']; + } + // mPDF 5.6.09 + else if ($this->blk[$blvl]['background-image']['origin'] == 'content-box') { + $bpa['x'] = $x0 + $this->blk[$blvl]['border_left']['w'] + $this->blk[$blvl]['padding_left']; + $bpa['w'] = $w - ($this->blk[$blvl]['border_left']['w'] + $this->blk[$blvl]['padding_left'] + $this->blk[$blvl]['border_right']['w'] + $this->blk[$blvl]['padding_right']); + if ($this->blk[$blvl]['border_top'] && $divider != 'pagetop' && !$continuingpage) { + $bpa['y'] = $y0 + $this->blk[$blvl]['border_top']['w'] + $this->blk[$blvl]['padding_top']; + } + else { $bpa['y'] = $y0 + $this->blk[$blvl]['padding_top']; } + if ($this->blk[$blvl]['border_bottom'] && $blockstate != 1 && $divider != 'pagebottom') { + $bpay = $y1 - ($this->blk[$blvl]['border_bottom']['w'] + $this->blk[$blvl]['padding_bottom']); + } + else { $bpay = $y1 - $this->blk[$blvl]['padding_bottom']; } + $bpa['h'] = $bpay - $bpa['y']; + } + $this->pageBackgrounds[$blvl][] = array('x'=>$x0, 'y'=>$y0, 'w'=>$w, 'h'=>$h, 'image_id'=>$image_id, 'orig_w'=>$orig_w, 'orig_h'=>$orig_h, 'x_pos'=>$x_pos, 'y_pos'=>$y_pos, 'x_repeat'=>$x_repeat, 'y_repeat'=>$y_repeat, 'clippath'=>$s, 'resize'=>$resize, 'opacity'=>$opacity, 'itype'=>$itype, 'visibility'=>$this->visibility, 'z-index'=>$this->current_layer, 'size'=>$size, 'bpa'=>$bpa ); // mPDF 5.6.01 5.6.10 + } + } +/*-- END BACKGROUNDS --*/ + + // Float DIV + $this->blk[$blvl]['bb_painted'][$this->page] = true; + +} + +/*-- BORDER-RADIUS --*/ + +function _EllipseArc($x0, $y0, $rx, $ry, $seg = 1, $part=false, $start=false) { // Anticlockwise segment 1-4 TR-TL-BL-BR (part=1 or 2) + $s = ''; + if ($rx<0) { $rx = 0; } + if ($ry<0) { $ry = 0; } + $rx *= _MPDFK; + $ry *= _MPDFK; + $astart = 0; + if ($seg == 1) { // Top Right + $afinish = 90; + $nSeg = 4; + } + else if ($seg == 2) { // Top Left + $afinish = 180; + $nSeg = 8; + } + else if ($seg == 3) { // Bottom Left + $afinish = 270; + $nSeg = 12; + } + else { // Bottom Right + $afinish = 360; + $nSeg = 16; + } + $astart = deg2rad((float) $astart); + $afinish = deg2rad((float) $afinish); + $totalAngle = $afinish - $astart; + $dt = $totalAngle / $nSeg; // segment angle + $dtm = $dt/3; + $x0 *= _MPDFK; + $y0 = ($this->h - $y0) * _MPDFK; + $t1 = $astart; + $a0 = $x0 + ($rx * cos($t1)); + $b0 = $y0 + ($ry * sin($t1)); + $c0 = -$rx * sin($t1); + $d0 = $ry * cos($t1); + $op = false; + for ($i = 1; $i <= $nSeg; $i++) { + // Draw this bit of the total curve + $t1 = ($i * $dt) + $astart; + $a1 = $x0 + ($rx * cos($t1)); + $b1 = $y0 + ($ry * sin($t1)); + $c1 = -$rx * sin($t1); + $d1 = $ry * cos($t1); + if ($i>($nSeg-4) && (!$part || ($part == 1 && $i<=$nSeg-2) || ($part == 2 && $i>$nSeg-2))) { + if ($start && !$op) { + $s .= sprintf('%.3F %.3F m ', $a0, $b0); + } + $s .= sprintf('%.3F %.3F %.3F %.3F %.3F %.3F c ', ($a0 + ($c0 * $dtm)), ($b0 + ($d0 * $dtm)), ($a1 - ($c1 * $dtm)) , ($b1 - ($d1 * $dtm)), $a1 , $b1 ); + $op = true; + } + $a0 = $a1; + $b0 = $b1; + $c0 = $c1; + $d0 = $d1; + } + return $s; +} +/*-- END BORDER-RADIUS --*/ + + + +function PaintDivLnBorder($state=0,$blvl=0,$h) { + // $state = 0 normal; 1 top; 2 bottom; 3 top and bottom + $this->ColDetails[$this->CurrCol]['bottom_margin'] = $this->y + $h; + + $save_y = $this->y; + + $w = $this->blk[$blvl]['width']; + $x0 = $this->x; // left + $y0 = $this->y; // top + $x1 = $this->x + $w; // bottom + $y1 = $this->y + $h; // bottom + + if ($this->blk[$blvl]['border_top'] && ($state==1 || $state==3)) { + $tbd = $this->blk[$blvl]['border_top']; + if (isset($tbd['s']) && $tbd['s']) { + $this->_setBorderLine($tbd); + $this->y = $y0 + ($tbd['w']/2); + // mPDF 5.6.56 + if ($tbd['style']=='dotted' || $tbd['style']=='dashed') { + $this->_setDashBorder($tbd['style'],'',$continuingpage,'T'); + $this->Line($x0 + ($tbd['w']/2) , $this->y , $x0 + $w - ($tbd['w']/2), $this->y); + } + else { + $this->SetLineJoin(0); + $this->SetLineCap(0); + $this->Line($x0, $this->y , $x0 + $w, $this->y); + } + $this->y += $tbd['w']; + // Reset Corners and Dash off + $this->SetLineJoin(2); + $this->SetLineCap(2); + $this->SetDash(); + } + } + if ($this->blk[$blvl]['border_left']) { + $tbd = $this->blk[$blvl]['border_left']; + if (isset($tbd['s']) && $tbd['s']) { + $this->_setBorderLine($tbd); + // mPDF 5.6.56 + if ($tbd['style']=='dotted' || $tbd['style']=='dashed') { + $this->y = $y0 + ($tbd['w']/2); + $this->_setDashBorder($tbd['style'],'',$continuingpage,'L'); + $this->Line($x0 + ($tbd['w']/2), $this->y, $x0 + ($tbd['w']/2), $y0 + $h -($tbd['w']/2)); + } + else { + $this->y = $y0; + $this->SetLineJoin(0); + $this->SetLineCap(0); + $this->Line($x0 + ($tbd['w']/2), $this->y, $x0 + ($tbd['w']/2), $y0 + $h); + } + $this->y += $tbd['w']; + // Reset Corners and Dash off + $this->SetLineJoin(2); + $this->SetLineCap(2); + $this->SetDash(); + } + } + if ($this->blk[$blvl]['border_right']) { + $tbd = $this->blk[$blvl]['border_right']; + if (isset($tbd['s']) && $tbd['s']) { + $this->_setBorderLine($tbd); + // mPDF 5.6.56 + if ($tbd['style']=='dotted' || $tbd['style']=='dashed') { + $this->y = $y0 + ($tbd['w']/2); + $this->_setDashBorder($tbd['style'],'',$continuingpage,'R'); + $this->Line($x0 + $w - ($tbd['w']/2), $this->y, $x0 + $w - ($tbd['w']/2), $y0 + $h - ($tbd['w']/2)); + } + else { + $this->y = $y0; + $this->SetLineJoin(0); + $this->SetLineCap(0); + $this->Line($x0 + $w - ($tbd['w']/2), $this->y, $x0 + $w - ($tbd['w']/2), $y0 + $h); + } + $this->y += $tbd['w']; + // Reset Corners and Dash off + $this->SetLineJoin(2); + $this->SetLineCap(2); + $this->SetDash(); + } + } + if ($this->blk[$blvl]['border_bottom'] && $state > 1) { + $tbd = $this->blk[$blvl]['border_bottom']; + if (isset($tbd['s']) && $tbd['s']) { + $this->_setBorderLine($tbd); + $this->y = $y0 + $h - ($tbd['w']/2); + // mPDF 5.6.56 + if ($tbd['style']=='dotted' || $tbd['style']=='dashed') { + $this->_setDashBorder($tbd['style'],'',$continuingpage,'B'); + $this->Line($x0 + ($tbd['w']/2) , $this->y, $x0 + $w - ($tbd['w']/2), $this->y); + } + else { + $this->SetLineJoin(0); + $this->SetLineCap(0); + $this->Line($x0, $this->y, $x0 + $w, $this->y); + } + $this->y += $tbd['w']; + // Reset Corners and Dash off + $this->SetLineJoin(2); + $this->SetLineCap(2); + $this->SetDash(); + } + } + $this->SetDash(); + $this->y = $save_y; +} + + +function PaintImgBorder($objattr,$is_table) { + // Borders are disabled in columns - messes up the repositioning in printcolumnbuffer + if ($this->ColActive) { return ; } // *COLUMNS* + if ($is_table) { $k = $this->shrin_k; } else { $k = 1; } + $h = (isset($objattr['BORDER-HEIGHT']) ? $objattr['BORDER-HEIGHT'] : 0); + $w = (isset($objattr['BORDER-WIDTH']) ? $objattr['BORDER-WIDTH'] : 0); + $x0 = (isset($objattr['BORDER-X']) ? $objattr['BORDER-X'] : 0); + $y0 = (isset($objattr['BORDER-Y']) ? $objattr['BORDER-Y'] : 0); + + // BORDERS + if ($objattr['border_top']) { + $tbd = $objattr['border_top']; + if (!empty($tbd['s'])) { + $this->_setBorderLine($tbd,$k); + if ($tbd['style']=='dotted' || $tbd['style']=='dashed') { $this->_setDashBorder($tbd['style'],'','','T'); } + $this->Line($x0, $y0, $x0 + $w, $y0); + // Reset Corners and Dash off + $this->SetLineJoin(2); + $this->SetLineCap(2); + $this->SetDash(); + } + } + if ($objattr['border_left']) { + $tbd = $objattr['border_left']; + if (!empty($tbd['s'])) { + $this->_setBorderLine($tbd,$k); + if ($tbd['style']=='dotted' || $tbd['style']=='dashed') { $this->_setDashBorder($tbd['style'],'','','L'); } + $this->Line($x0, $y0, $x0, $y0 + $h); + // Reset Corners and Dash off + $this->SetLineJoin(2); + $this->SetLineCap(2); + $this->SetDash(); + } + } + if ($objattr['border_right']) { + $tbd = $objattr['border_right']; + if (!empty($tbd['s'])) { + $this->_setBorderLine($tbd,$k); + if ($tbd['style']=='dotted' || $tbd['style']=='dashed') { $this->_setDashBorder($tbd['style'],'','','R'); } + $this->Line($x0 + $w, $y0, $x0 + $w, $y0 + $h); + // Reset Corners and Dash off + $this->SetLineJoin(2); + $this->SetLineCap(2); + $this->SetDash(); + } + } + if ($objattr['border_bottom']) { + $tbd = $objattr['border_bottom']; + if (!empty($tbd['s'])) { + $this->_setBorderLine($tbd,$k); + if ($tbd['style']=='dotted' || $tbd['style']=='dashed') { $this->_setDashBorder($tbd['style'],'','','B'); } + $this->Line($x0, $y0 + $h, $x0 + $w, $y0 + $h); + // Reset Corners and Dash off + $this->SetLineJoin(2); + $this->SetLineCap(2); + $this->SetDash(); + } + } + $this->SetDash(); + $this->SetAlpha(1); +} + +/*-- END HTML-CSS --*/ + + + + +function Reset() { + $this->SetTColor($this->ConvertColor(0)); + $this->SetDColor($this->ConvertColor(0)); + $this->SetFColor($this->ConvertColor(255)); + $this->SetAlpha(1); + $this->colorarray = ''; + + $this->spanbgcolorarray = ''; + $this->spanbgcolor = false; + $this->spanborder = false; + $this->spanborddet = array(); + + $this->ResetStyles(); + + $this->HREF = ''; + $this->textparam = array(); + $this->SetTextOutline(); + + $this->SUP = false; + $this->SUB = false; + $this->strike = false; + $this->textshadow = ''; + + $this->SetFont($this->default_font,'',0,false); + $this->SetFontSize($this->default_font_size,false); + + $this->currentfontfamily = ''; + $this->currentfontsize = ''; + +/*-- TABLES --*/ + if ($this->tableLevel) { + $this->SetLineHeight('',$this->table_lineheight); // *TABLES* + } + else +/*-- END TABLES --*/ +/*-- LISTS --*/ + + if ($this->listlvl && $this->list_lineheight[$this->listlvl][$this->bulletarray['occur']]) { + $this->SetLineHeight('',$this->list_lineheight[$this->listlvl][$this->bulletarray['occur']]); // sets default line height + } + else +/*-- END LISTS --*/ + if (isset($this->blk[$this->blklvl]['line_height']) && $this->blk[$this->blklvl]['line_height']) { + $this->SetLineHeight('',$this->blk[$this->blklvl]['line_height']); // sets default line height + } + + $this->toupper = false; + $this->tolower = false; + $this->kerning = false; + $this->lSpacingCSS = ''; + $this->wSpacingCSS = ''; + $this->fixedlSpacing = false; + $this->minwSpacing = 0; + $this->capitalize = false; + $this->SetDash(); //restore to no dash + $this->dash_on = false; + $this->dotted_on = false; + $this->divwidth = 0; + $this->divheight = 0; + $this->divalign = ''; + $this->divrevert = false; + $this->oldy = -1; + + $bodystyle = array(); + if (isset($this->cssmgr->CSS['BODY']['FONT-STYLE'])) { $bodystyle['FONT-STYLE'] = $this->cssmgr->CSS['BODY']['FONT-STYLE']; } + if (isset($this->cssmgr->CSS['BODY']['FONT-WEIGHT'])) { $bodystyle['FONT-WEIGHT'] = $this->cssmgr->CSS['BODY']['FONT-WEIGHT']; } + if (isset($this->cssmgr->CSS['BODY']['COLOR'])) { $bodystyle['COLOR'] = $this->cssmgr->CSS['BODY']['COLOR']; } + if (isset($bodystyle)) { $this->setCSS($bodystyle,'BLOCK','BODY'); } + +} + +/*-- HTML-CSS --*/ +function ReadMetaTags($html) { + // changes anykey=anyvalue to anykey="anyvalue" (only do this when this happens inside tags) + $regexp = '/ (\\w+?)=([^\\s>"]+)/si'; + $html = preg_replace($regexp," \$1=\"\$2\"",$html); + if (preg_match('/<title>(.*?)<\/title>/si',$html,$m)) { + $this->SetTitle($m[1]); + } + preg_match_all('/<meta [^>]*?(name|content)="([^>]*?)" [^>]*?(name|content)="([^>]*?)".*?>/si',$html,$aux); + $firstattr = $aux[1]; + $secondattr = $aux[3]; + for( $i = 0 ; $i < count($aux[0]) ; $i++) { + + $name = ( strtoupper($firstattr[$i]) == "NAME" )? strtoupper($aux[2][$i]) : strtoupper($aux[4][$i]); + $content = ( strtoupper($firstattr[$i]) == "CONTENT" )? $aux[2][$i] : $aux[4][$i]; + switch($name) { + case "KEYWORDS": $this->SetKeywords($content); break; + case "AUTHOR": $this->SetAuthor($content); break; + case "DESCRIPTION": $this->SetSubject($content); break; + } + } +} + + +function ReadCharset($html) { + // Charset conversion + if ($this->allow_charset_conversion) { + if (preg_match('/<head.*charset=([^\'\"\s]*).*<\/head>/si',$html,$m)) { + if (strtoupper($m[1]) != 'UTF-8') { + $this->charset_in = strtoupper($m[1]); + } + } + } +} + +function setCSS($arrayaux,$type='',$tag='') { // type= INLINE | BLOCK | LIST // tag= BODY + if (!is_array($arrayaux)) return; //Removes PHP Warning + // Set font size first so that e.g. MARGIN 0.83em works on font size for this element + if (isset($arrayaux['FONT-SIZE'])) { + $v = $arrayaux['FONT-SIZE']; + if(is_numeric($v[0])) { + if ($type == 'BLOCK' && $this->blklvl>0 && isset($this->blk[$this->blklvl-1]['InlineProperties']) && isset($this->blk[$this->blklvl-1]['InlineProperties']['size'])) { + $mmsize = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['InlineProperties']['size']); + } + else { + $mmsize = $this->ConvertSize($v,$this->FontSize); + } + $this->SetFontSize( $mmsize*(_MPDFK),false ); //Get size in points (pt) + } + else{ + $v = strtoupper($v); + if (isset($this->fontsizes[$v])) { + $this->SetFontSize( $this->fontsizes[$v]* $this->default_font_size,false); + } + } + if ($tag == 'BODY') { $this->SetDefaultFontSize($this->FontSizePt); } + } + + + if ($this->useLang && !$this->usingCoreFont) { + if (isset($arrayaux['LANG']) && $arrayaux['LANG'] && $arrayaux['LANG'] != $this->default_lang && ((strlen($arrayaux['LANG']) == 5 && $arrayaux['LANG'] != 'UTF-8') || strlen($arrayaux['LANG']) == 2)) { + list ($coreSuitable,$mpdf_pdf_unifonts) = GetLangOpts($arrayaux['LANG'], $this->useAdobeCJK); + if ($mpdf_pdf_unifonts) { $this->RestrictUnicodeFonts($mpdf_pdf_unifonts); } + else { $this->RestrictUnicodeFonts($this->default_available_fonts ); } + if ($tag == 'BODY') { + $this->currentLang = $arrayaux['LANG']; + $this->default_lang = $arrayaux['LANG']; + if ($mpdf_pdf_unifonts) { $this->default_available_fonts = $mpdf_pdf_unifonts; } + } + } + else { + $this->RestrictUnicodeFonts($this->default_available_fonts ); + } + } + + // FOR INLINE and BLOCK OR 'BODY' + if (isset($arrayaux['FONT-FAMILY'])) { + $v = $arrayaux['FONT-FAMILY']; + //If it is a font list, get all font types + $aux_fontlist = explode(",",$v); + $found = 0; + foreach($aux_fontlist AS $f) { + $fonttype = trim($f); + $fonttype = preg_replace('/["\']*(.*?)["\']*/','\\1',$fonttype); + $fonttype = preg_replace('/ /','',$fonttype); + $v = strtolower(trim($fonttype)); + if (isset($this->fonttrans[$v]) && $this->fonttrans[$v]) { $v = $this->fonttrans[$v]; } + if ((!$this->onlyCoreFonts && in_array($v,$this->available_unifonts)) || + in_array($v,array('ccourier','ctimes','chelvetica')) || + ($this->onlyCoreFonts && in_array($v,array('courier','times','helvetica','arial'))) || + in_array($v, array('sjis','uhc','big5','gb'))) { + $fonttype = $v; + $found = 1; + break; + } + } + if (!$found) { + foreach($aux_fontlist AS $f) { + $fonttype = trim($f); + $fonttype = preg_replace('/["\']*(.*?)["\']*/','\\1',$fonttype); + $fonttype = preg_replace('/ /','',$fonttype); + $v = strtolower(trim($fonttype)); + if (isset($this->fonttrans[$v]) && $this->fonttrans[$v]) { $v = $this->fonttrans[$v]; } + if (in_array($v,$this->sans_fonts) || in_array($v,$this->serif_fonts) || in_array($v,$this->mono_fonts) ) { + $fonttype = $v; + break; + } + } + } + + if ($tag == 'BODY') { + $this->SetDefaultFont($fonttype); + } + $this->SetFont($fonttype,$this->currentfontstyle,0,false); + } + else { + $this->SetFont($this->currentfontfamily,$this->currentfontstyle,0,false); + } + + foreach($arrayaux as $k => $v) { + if ($type != 'INLINE' && $tag != 'BODY' && $type != 'LIST') { + switch($k){ + // BORDERS + case 'BORDER-TOP': + $this->blk[$this->blklvl]['border_top'] = $this->border_details($v); + if ($this->blk[$this->blklvl]['border_top']['s']) { $this->blk[$this->blklvl]['border'] = 1; } + break; + case 'BORDER-BOTTOM': + $this->blk[$this->blklvl]['border_bottom'] = $this->border_details($v); + if ($this->blk[$this->blklvl]['border_bottom']['s']) { $this->blk[$this->blklvl]['border'] = 1; } + break; + case 'BORDER-LEFT': + $this->blk[$this->blklvl]['border_left'] = $this->border_details($v); + if ($this->blk[$this->blklvl]['border_left']['s']) { $this->blk[$this->blklvl]['border'] = 1; } + break; + case 'BORDER-RIGHT': + $this->blk[$this->blklvl]['border_right'] = $this->border_details($v); + if ($this->blk[$this->blklvl]['border_right']['s']) { $this->blk[$this->blklvl]['border'] = 1; } + break; + + // PADDING + case 'PADDING-TOP': + $this->blk[$this->blklvl]['padding_top'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + break; + case 'PADDING-BOTTOM': + $this->blk[$this->blklvl]['padding_bottom'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + break; + case 'PADDING-LEFT': + $this->blk[$this->blklvl]['padding_left'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + break; + case 'PADDING-RIGHT': + $this->blk[$this->blklvl]['padding_right'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + break; + + // MARGINS + case 'MARGIN-TOP': + $tmp = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + if (isset($this->blk[$this->blklvl]['lastbottommargin'])) { + if ($tmp > $this->blk[$this->blklvl]['lastbottommargin']) { + $tmp -= $this->blk[$this->blklvl]['lastbottommargin']; + } + else { + $tmp = 0; + } + } + $this->blk[$this->blklvl]['margin_top'] = $tmp; + break; + case 'MARGIN-BOTTOM': + $this->blk[$this->blklvl]['margin_bottom'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + break; + case 'MARGIN-LEFT': + $this->blk[$this->blklvl]['margin_left'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + break; + case 'MARGIN-RIGHT': + $this->blk[$this->blklvl]['margin_right'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + break; + +/*-- BORDER-RADIUS --*/ + case 'BORDER-TOP-LEFT-RADIUS-H': + $this->blk[$this->blklvl]['border_radius_TL_H'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + break; + case 'BORDER-TOP-LEFT-RADIUS-V': + $this->blk[$this->blklvl]['border_radius_TL_V'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + break; + case 'BORDER-TOP-RIGHT-RADIUS-H': + $this->blk[$this->blklvl]['border_radius_TR_H'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + break; + case 'BORDER-TOP-RIGHT-RADIUS-V': + $this->blk[$this->blklvl]['border_radius_TR_V'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + break; + case 'BORDER-BOTTOM-LEFT-RADIUS-H': + $this->blk[$this->blklvl]['border_radius_BL_H'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + break; + case 'BORDER-BOTTOM-LEFT-RADIUS-V': + $this->blk[$this->blklvl]['border_radius_BL_V'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + break; + case 'BORDER-BOTTOM-RIGHT-RADIUS-H': + $this->blk[$this->blklvl]['border_radius_BR_H'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + break; + case 'BORDER-BOTTOM-RIGHT-RADIUS-V': + $this->blk[$this->blklvl]['border_radius_BR_V'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + break; +/*-- END BORDER-RADIUS --*/ + + case 'BOX-SHADOW': + $bs = $this->cssmgr->setCSSboxshadow($v); + if ($bs) { $this->blk[$this->blklvl]['box_shadow'] = $bs; } + break; + + case 'BACKGROUND-CLIP': + if (strtoupper($v) == 'PADDING-BOX') { $this->blk[$this->blklvl]['background_clip'] = 'padding-box'; } + else if (strtoupper($v) == 'CONTENT-BOX') { $this->blk[$this->blklvl]['background_clip'] = 'content-box'; } // mPDF 5.6.09 + break; + + case 'PAGE-BREAK-AFTER': + if (strtoupper($v) == 'AVOID') { $this->blk[$this->blklvl]['page_break_after_avoid'] = true; } + else if (strtoupper($v) == 'ALWAYS' || strtoupper($v) == 'LEFT' || strtoupper($v) == 'RIGHT') { $this->blk[$this->blklvl]['page_break_after'] = strtoupper($v) ; } + break; + + case 'WIDTH': + if (strtoupper($v) != 'AUTO') { + $this->blk[$this->blklvl]['css_set_width'] = $this->ConvertSize($v,$this->blk[$this->blklvl-1]['inner_width'],$this->FontSize,false); + } + break; + + case 'TEXT-INDENT': + // Left as raw value (may include 1% or 2em) + $this->blk[$this->blklvl]['text_indent'] = $v; + break; + + }//end of switch($k) + } + + + if ($type != 'INLINE' && $type != 'LIST') { // includes BODY tag + switch($k){ + + case 'MARGIN-COLLAPSE': // Custom tag to collapse margins at top and bottom of page + if (strtoupper($v) == 'COLLAPSE') { $this->blk[$this->blklvl]['margin_collapse'] = true; } + break; + + case 'LINE-HEIGHT': + $this->blk[$this->blklvl]['line_height'] = $this->fixLineheight($v); + if (!$this->blk[$this->blklvl]['line_height'] ) { $this->blk[$this->blklvl]['line_height'] = $this->normalLineheight; } + break; + + case 'TEXT-ALIGN': //left right center justify + switch (strtoupper($v)) { + case 'LEFT': + $this->blk[$this->blklvl]['align']="L"; + break; + case 'CENTER': + $this->blk[$this->blklvl]['align']="C"; + break; + case 'RIGHT': + $this->blk[$this->blklvl]['align']="R"; + break; + case 'JUSTIFY': + $this->blk[$this->blklvl]['align']="J"; + break; + } + break; + +/*-- BACKGROUNDS --*/ + case 'BACKGROUND-GRADIENT': + if ($type == 'BLOCK') { + $this->blk[$this->blklvl]['gradient'] = $v; + } + break; +/*-- END BACKGROUNDS --*/ + + case 'DIRECTION': + if ($v) { $this->blk[$this->blklvl]['direction'] = strtolower($v); } + break; + + }//end of switch($k) + } + + // FOR INLINE ONLY + if ($type == 'INLINE' || $type == 'LIST') { + switch($k){ + case 'DISPLAY': // Custom tag to collapse margins at top and bottom of page + if (strtoupper($v) == 'NONE') { $this->inlineDisplayOff = true; } + break; + case 'DIRECTION': + break; + }//end of switch($k) + } + // FOR INLINE ONLY + if ($type == 'INLINE') { + switch($k){ + // BORDERS + case 'BORDER-TOP': + $this->spanborddet['T'] = $this->border_details($v); + $this->spanborder = true; + break; + case 'BORDER-BOTTOM': + $this->spanborddet['B'] = $this->border_details($v); + $this->spanborder = true; + break; + case 'BORDER-LEFT': + $this->spanborddet['L'] = $this->border_details($v); + $this->spanborder = true; + break; + case 'BORDER-RIGHT': + $this->spanborddet['R'] = $this->border_details($v); + $this->spanborder = true; + break; + // mPDF 5.6.26 + case 'VISIBILITY': // block is set in OpenTag + $v = strtolower($v); + if ($v == 'visible' || $v == 'hidden' || $v == 'printonly' || $v == 'screenonly') { + $this->textparam['visibility'] = $v; + } + break; + }//end of switch($k) + } + + + // FOR INLINE and BLOCK + switch($k){ + case 'TEXT-ALIGN': //left right center justify + if (strtoupper($v) == 'NOJUSTIFY' && $this->blk[$this->blklvl]['align']=="J") { + $this->blk[$this->blklvl]['align']=""; + } + break; + // bgcolor only - to stay consistent with original html2fpdf + case 'BACKGROUND': + case 'BACKGROUND-COLOR': + $cor = $this->ConvertColor($v); + if ($cor) { + if ($tag == 'BODY') { + $this->bodyBackgroundColor = $cor; + } + else if ($type == 'INLINE' || $type == 'LIST') { + $this->spanbgcolorarray = $cor; + $this->spanbgcolor = true; + } + else { + $this->blk[$this->blklvl]['bgcolorarray'] = $cor; + $this->blk[$this->blklvl]['bgcolor'] = true; + } + } + else if ($type != 'INLINE' && $type != 'LIST') { + if ($this->ColActive || $this->keep_block_together) { + $this->blk[$this->blklvl]['bgcolorarray'] = $this->blk[$this->blklvl-1]['bgcolorarray'] ; + $this->blk[$this->blklvl]['bgcolor'] = $this->blk[$this->blklvl-1]['bgcolor'] ; + } + } + break; + + // auto | normal | none + case 'FONT-KERNING': + if ((strtoupper($v) == 'NORMAL' || strtoupper($v) == 'AUTO') && $this->useKerning) { $this->kerning = true; } + else if (strtoupper($v) == 'NONE') { $this->kerning = false; } + break; + + + // normal | <length> + case 'LETTER-SPACING': + $this->lSpacingCSS = $v; + if (($this->lSpacingCSS || $this->lSpacingCSS==='0') && strtoupper($this->lSpacingCSS) != 'NORMAL') { + $this->fixedlSpacing = $this->ConvertSize($this->lSpacingCSS,$this->FontSize); + } + break; + + // normal | <length> + case 'WORD-SPACING': + $this->wSpacingCSS = $v; + if ($this->wSpacingCSS && strtoupper($this->wSpacingCSS) != 'NORMAL') { + $this->minwSpacing = $this->ConvertSize($this->wSpacingCSS,$this->FontSize); + } + break; + + case 'FONT-STYLE': // italic normal oblique + switch (strtoupper($v)) { + case 'ITALIC': + case 'OBLIQUE': + $this->SetStyle('I',true); + break; + case 'NORMAL': + $this->SetStyle('I',false); + break; + } + break; + + case 'FONT-WEIGHT': // normal bold //Does not support: bolder, lighter, 100..900(step value=100) + switch (strtoupper($v)) { + case 'BOLD': + $this->SetStyle('B',true); + break; + case 'NORMAL': + $this->SetStyle('B',false); + break; + } + break; + + case 'VERTICAL-ALIGN': //super and sub only dealt with here e.g. <SUB> and <SUP> + switch (strtoupper($v)) { + case 'SUPER': + $this->SUP=true; + $this->SUB=false; // mPDF 5.6.07 + break; + case 'SUB': + $this->SUB=true; + $this->SUP=false; // mPDF 5.6.07 + break; + case 'BASELINE': // mPDF 5.6.07 + $this->SUB=false; + $this->SUP=false; + break; + } + break; + + case 'TEXT-DECORATION': // none underline line-through (strikeout) //Does not support: overline, blink + if (stristr($v,'LINE-THROUGH')) { + $this->strike = true; + } + else if (stristr($v,'UNDERLINE')) { + $this->SetStyle('U',true); + } + else if (stristr($v,'NONE')) { + $this->SetStyle('U',false); + $this->strike = false; // mPDF 5.6.07 + } + break; + + case 'FONT-VARIANT': + switch (strtoupper($v)) { + case 'SMALL-CAPS': + $this->SetStyle('S',true); + break; + case 'NORMAL': + $this->SetStyle('S',false); + break; + } + break; + + case 'TEXT-TRANSFORM': // none uppercase lowercase //Does support: capitalize + switch (strtoupper($v)) { //Not working 100% + case 'CAPITALIZE': + $this->capitalize=true; + break; + case 'UPPERCASE': + $this->toupper=true; + break; + case 'LOWERCASE': + $this->tolower=true; + break; + case 'NONE': break; + } + break; + + case 'TEXT-SHADOW': + $ts = $this->cssmgr->setCSStextshadow($v); + if ($ts) { $this->textshadow = $ts; } + break; + + case 'HYPHENS': // mPDF 5.6.08 + if (strtoupper($v)=='NONE') { + $this->textparam['hyphens'] = 2; + } + else if (strtoupper($v)=='AUTO') { + $this->textparam['hyphens'] = 1; + } + else if (strtoupper($v)=='MANUAL') { + $this->textparam['hyphens'] = 0; + } + break; + + case 'TEXT-OUTLINE': // mPDF 5.6.07 + if (strtoupper($v)=='NONE') { + $this->textparam['outline-s'] = false; + } + break; + + case 'TEXT-OUTLINE-WIDTH': // mPDF 5.6.07 + case 'OUTLINE-WIDTH': + switch(strtoupper($v)) { + case 'THIN': $v = '0.03em'; break; + case 'MEDIUM': $v = '0.05em'; break; + case 'THICK': $v = '0.07em'; break; + } + $w = $this->ConvertSize($v,$this->blk[$this->blklvl]['inner_width'],$this->FontSize); + if ($w) { + $this->textparam['outline-WIDTH'] = $w; + $this->textparam['outline-s'] = true; + } + else { $this->textparam['outline-s'] = false; } + break; + + case 'TEXT-OUTLINE-COLOR': // mPDF 5.6.07 + case 'OUTLINE-COLOR': + if (strtoupper($v) == 'INVERT') { + if ($this->colorarray) { + $cor = $this->colorarray; + $this->textparam['outline-COLOR'] = $this->_invertColor($cor); + } + else { + $this->textparam['outline-COLOR'] = $this->ConvertColor(255); + } + } + else { + $cor = $this->ConvertColor($v); + if ($cor) { $this->textparam['outline-COLOR'] = $cor ; } + } + break; + + case 'COLOR': // font color + $cor = $this->ConvertColor($v); + if ($cor) { + $this->colorarray = $cor; + $this->SetTColor($cor); + } + break; + + + }//end of switch($k) + + + }//end of foreach +} + +/*-- END HTML-CSS --*/ + + +function SetStyle($tag,$enable) { + $this->$tag=$enable; + $style=''; + foreach(array('B','I','U','S') as $s) { + if($this->$s) { + $style.=$s; + } + } + if ($this->S && empty($this->upperCase)) { @include(_MPDF_PATH.'includes/upperCase.php'); } + $this->currentfontstyle=$style; + $this->SetFont('',$style,0,false); +} + +// Set multiple styles at one $str e.g. "BIS" +function SetStylesArray($arr) { + $style=''; + foreach(array('B','I','U','S') as $s) { + if (isset($arr[$s])) { + if ($arr[$s]) { + $this->$s = true; + $style.=$s; + } + else { $this->$s = false; } + } + else if ($this->$s) { $style.=$s; } + } + $this->currentfontstyle=$style; + $this->SetFont('',$style,0,false); +} + +// Set multiple styles at one $str e.g. "BIS" +function SetStyles($str) { + $style=''; + foreach(array('B','I','U','S') as $s) { + if (strpos($str,$s) !== false) { + $this->$s = true; + $style.=$s; + } + else { $this->$s = false; } + } + $this->currentfontstyle=$style; + $this->SetFont('',$style,0,false); +} + +function ResetStyles() { + foreach(array('B','I','U','S') as $s) { + $this->$s = false; + } + $this->currentfontstyle=''; + $this->SetFont('','',0,false); +} + + +function DisableTags($str='') +{ + if ($str == '') //enable all tags + { + //Insert new supported tags in the long string below. + $this->enabledtags = "<span><s><strike><del><bdo><big><small><ins><cite><acronym><font><sup><sub><b><u><i><a><strong><em><code><samp><tt><kbd><var><q><table><thead><tfoot><tbody><tr><th><td><ol><ul><li><dl><dt><dd><form><input><select><textarea><option><div><p><h1><h2><h3><h4><h5><h6><pre><center><blockquote><address><hr><img><br><indexentry><indexinsert><bookmark><watermarktext><watermarkimage><tts><ttz><tta><column_break><columnbreak><newcolumn><newpage><page_break><pagebreak><formfeed><columns><toc><tocentry><tocpagebreak><pageheader><pagefooter><setpageheader><setpagefooter><sethtmlpageheader><sethtmlpagefooter><annotation><template><jpgraph><barcode><dottab><caption><textcircle><fieldset><legend><article><aside><figure><figcaption><footer><header><hgroup><nav><section><mark><details><summary><meter><progress><time>"; // mPDF 5.5.09 + } + else + { + $str = explode(",",$str); + foreach($str as $v) $this->enabledtags = str_replace(trim($v),'',$this->enabledtags); + } +} + + +/*-- TABLES --*/ + +function finaliseCellLineHeight($lhxt, $maxfontsize, $maxlineHeight, $lhfixed, $forceExactLineheight) { + $af = 0; // Above font + $bf = 0; // Below font + $mta = 0; // Maximum top-aligned + $mba = 0; // Maximum bottom-aligned + if ($lhxt['BS']) { + $af = max($af, ($lhxt['BS'] - ($maxfontsize * (0.5 + $this->baselineC)))); + } + if ($lhxt['M']) { + $af = max($af, ($lhxt['M'] - $maxfontsize)/2); + $bf = max($bf, ($lhxt['M'] - $maxfontsize)/2); + } + if ($lhxt['TT']) { + $bf = max($bf, ($lhxt['TT'] - $maxfontsize)); + } + if ($lhxt['TB']) { + $af = max($af, ($lhxt['TB'] - $maxfontsize)); + } + if ($lhxt['T']) { + $mta = max($mta, $lhxt['T']); + } + if ($lhxt['B']) { + $mba = max($mba, $lhxt['B']); + } + if ((!$lhfixed || !$forceExactLineheight) && ($af > (($maxlineHeight - $maxfontsize)/2) || $bf > (($maxlineHeight - $maxfontsize)/2))) { + $maxlineHeight = $maxfontsize + $af + $bf; + } + else if (!$lhfixed) { $af = $bf = ($maxlineHeight - $maxfontsize)/2; } + if ($mta > $maxlineHeight) { + $bf += ($mta - $maxlineHeight); + $maxlineHeight = $mta; + } + if ($mba > $maxlineHeight) { + $af += ($mba - $maxlineHeight); + $maxlineHeight = $mba; + } + return $maxlineHeight; +} + +function TableWordWrap($maxwidth, $forcewrap = 0, $textbuffer = '', $def_fontsize, $returnarray=false) { // NB ** returnarray used in flowchart + $biggestword=0; + $toonarrow=false; + + $textbuffer[0][0] = preg_replace('/^[ ]*/','',$textbuffer[0][0]); + if ((count($textbuffer) == 0) or ((count($textbuffer) == 1) && ($textbuffer[0][0] == ''))) { return 0; } + + $text = ''; + $lhfixed = false; + if (preg_match('/([0-9.,]+)mm/',$this->table_lineheight)) { $lhfixed = true; } + if ($lhfixed) { $def_lineheight = $this->_computeLineheight($this->table_lineheight, $def_fontsize);} + else { $def_lineheight = 0; } + // START OF NEW LINE + // Initialise lineheight variables + $maxfontsize = 0; + $forceExactLineheight = true; + $lhxt = array('BS'=>0, 'M'=>0, 'TT'=>0, 'TB'=>0, 'T'=>0, 'B'=>0); + $maxlineHeight = $def_lineheight ; + $ch = 0; + $width = 0; + $ln = 1; // Counts line number + $mxw = $this->GetCharWidth('W',false); + for($cctr=0;$cctr<count($textbuffer);$cctr++) { // mPDF 5.6.22 + $chunk = $textbuffer[$cctr]; // mPDF 5.6.22 + $line = $chunk[0]; + //IMAGE + if (substr($line,0,3) == "\xbb\xa4\xac") { //identifier has been identified! + $objattr = $this->_getObjAttr($line); + if ($objattr['type'] == 'nestedtable') { + // END OF LINE + // Finalise & add lineheight + $ch += $this->finaliseCellLineHeight($lhxt, $maxfontsize, $maxlineHeight, $lhfixed, $forceExactLineheight); + $level = $objattr['level']; + $ih = $this->table[($level+1)][$objattr['nestedcontent']]['h']; // nested table width + $ch += $ih; + // START OF NEW LINE + // Initialise lineheight variables + $ln++; + $maxfontsize = 0; + $forceExactLineheight = true; + $lhxt = array('BS'=>0, 'M'=>0, 'TT'=>0, 'TB'=>0, 'T'=>0, 'B'=>0); + $maxlineHeight = $def_lineheight ; + $width = 0; + $text = ""; + continue; + } + + list($skipln,$iw,$ih) = $this->inlineObject((isset($specialcontent['type']) ? $specialcontent['type'] : null),0,0, $objattr, $this->lMargin,$width,$maxwidth,$maxlineHeight,false,true); + if ($objattr['type'] == 'hr') { + // END OF LINE + // Finalise & add lineheight + $ch += $this->finaliseCellLineHeight($lhxt, $maxfontsize, $maxlineHeight, $lhfixed, $forceExactLineheight); + // Add HR height + $ch += $ih; + // START OF NEW LINE + // Initialise lineheight variables + $ln++; + $maxfontsize = 0; + $forceExactLineheight = true; + $lhxt = array('BS'=>0, 'M'=>0, 'TT'=>0, 'TB'=>0, 'T'=>0, 'B'=>0); + $maxlineHeight = $def_lineheight ; + $width = 0; + $text = ""; + continue; + } + + if ($skipln==1 || $skipln==-2) { + // Finish last line + // END OF LINE + // Finalise & add lineheight + $ch += $this->finaliseCellLineHeight($lhxt, $maxfontsize, $maxlineHeight, $lhfixed, $forceExactLineheight); + // START OF NEW LINE + // Initialise lineheight variables + $maxfontsize = 0; + $forceExactLineheight = true; + $lhxt = array('BS'=>0, 'M'=>0, 'TT'=>0, 'TB'=>0, 'T'=>0, 'B'=>0); + $maxlineHeight = $def_lineheight ; + $ln++; + $width = 0; + $text = ""; + } + $va = (isset($objattr['vertical-align']) ? $objattr['vertical-align'] : null); + if ($va) { + $lhxt[$va] = max($lhxt[$va], $ih); + } + if ($lhfixed && $ih > $def_fontsize) { $forceExactLineheight = false; } + $maxlineHeight = max($maxlineHeight ,$ih); + $width += $iw; + continue; + } + + // SET FONT SIZE/STYLE from $chunk[n] + // FONTSIZE + if(isset($chunk[11]) and $chunk[11] != '') { + if ($this->shrin_k) { + $this->SetFontSize($chunk[11]/$this->shrin_k,false); + } + else { + $this->SetFontSize($chunk[11],false); + } + } + if ($line == "\n") { + // END OF LINE + $maxfontsize = max($maxfontsize,$this->FontSize); + $fh = $this->_computeLineheight($this->table_lineheight); + if ($lhfixed && $this->FontSize > $def_fontsize) { + $fh = $this->FontSize; + $forceExactLineheight = false; + } + $maxlineHeight = max($maxlineHeight,$fh); + + // Finalise & add lineheight + $ch += $this->finaliseCellLineHeight($lhxt, $maxfontsize, $maxlineHeight, $lhfixed, $forceExactLineheight); + // START OF NEW LINE + // Initialise lineheight variables + $maxfontsize = 0; + $forceExactLineheight = true; + $lhxt = array('BS'=>0, 'M'=>0, 'TT'=>0, 'TB'=>0, 'T'=>0, 'B'=>0); + $maxlineHeight = $this->_computeLineheight($this->table_lineheight); + $ln++; + $text = ""; + $width = 0; + if(isset($chunk[11]) and $chunk[11] != '') { + $this->SetFontSize($this->default_font_size,false); + } + continue; + } + + $lbw = $rbw = 0; // Border widths + if(isset($chunk[16]) && !empty($chunk[16])) { //Border + $this->spanborddet = $chunk[16]; + if (isset($this->spanborddet['L'])) $lbw = $this->spanborddet['L']['w']; + if (isset($this->spanborddet['R'])) $rbw = $this->spanborddet['R']['w']; + } + if(isset($chunk[15])) { // Word spacing + $this->wSpacingCSS = $chunk[15]; + if ($this->wSpacingCSS && strtoupper($this->wSpacingCSS) != 'NORMAL') { + $this->minwSpacing = $this->ConvertSize($this->wSpacingCSS,$this->FontSize); + } + } + if(isset($chunk[14])) { // Letter spacing + $this->lSpacingCSS = $chunk[14]; + if (($this->lSpacingCSS || $this->lSpacingCSS==='0') && strtoupper($this->lSpacingCSS) != 'NORMAL') { + $this->fixedlSpacing = $this->ConvertSize($this->lSpacingCSS,$this->FontSize); + } + } + if(isset($chunk[13])) { // Font Kerning + $this->kerning = $chunk[13]; + } + if(isset($chunk[9])) { // Text params - Outline, hyphens // mPDF 5.6.08 + $this->textparam = $chunk[9]; + } + // FONTFAMILY + if(isset($chunk[4]) and $chunk[4] != '') { $font = $this->SetFont($chunk[4],$this->FontStyle,0,false); } + + // FONT STYLE B I U + if(isset($chunk[2]) and $chunk[2] != '') { + $this->SetStyles($chunk[2]); + } + + $space = $this->GetCharWidth(' ',false); + + if (mb_substr($line,0,1,$this->mb_enc ) == ' ') { // line (chunk) starts with a space + $width += $space; + $text .= ' '; + } + + if (mb_substr($line,(mb_strlen($line,$this->mb_enc )-1),1,$this->mb_enc ) == ' ') { $lsend = true; } // line (chunk) ends with a space + else { $lsend = false; } + $line= trim($line); + if ($line == '') { continue; } + + // mPDF ITERATION + if ($this->iterationCounter) $line = preg_replace('/{iteration ([a-zA-Z0-9_]+)}/','\\1', $line); + + $words = explode(' ', $line); + + foreach ($words as $k=>$word) { + $word = trim($word); + $wordwidth = $this->GetStringWidth($word); + if ($k==0) { $wordwidth += $lbw; } + if ($k==(count($words)-1)) { $wordwidth += $rbw; } + //maxwidth is insufficient for one word + if ($wordwidth > $maxwidth + 0.0001) { + $firstchunk=true; + while($wordwidth > $maxwidth + 0.0001) { + $chw = 0; // check width + $oneCJKorphan = false; + $mlen = mb_strlen($word, $this->mb_enc ); + for ( $i = 0; $i < $mlen; $i++ ) { + $chw = $this->GetStringWidth(mb_substr($word,0,$i+1,$this->mb_enc )); + if ($k==0) { $chw += $lbw; } + if ($k==(count($words)-1)) { $chw += $rbw; } + if ($chw > $maxwidth) { + if ($i==0 && $firstchunk) { + // If first letter of line does not fit + $wordwidth = $maxwidth - 0.0001; + if ($this->debug) { $this->Error("Table cell width calculated less than that needed for one character!"); } + break; + } +/*-- CJK-FONTS --*/ + // mPDF 5.6.40 mPDF 5.6.44 + if ($this->checkCJK && !$this->usingCoreFont && preg_match("/[".$this->pregCJKchars."]/u", $word)) { // mPDF 5.6.44 + if (!$oneCJKorphan && preg_match('/['.$this->CJKoverflow.']$/u',mb_substr($word,0,$i+1,$this->mb_enc )) && $this->allowCJKorphans) { + $wordwidth = $maxwidth - 0.0001; + $oneCJKorphan = true; + continue; + } + $cjkfix = 0; + // Last character that fits is not allowed to end a line - move lastchar(s) to start of next line + if ($i>0 && preg_match("/[".$this->CJKleading."$]/u", mb_substr($word,0,$i,$this->mb_enc ))) { + $cjkfix = 1; + } + // Next character is not allowed to start a new line + else if (preg_match("/[".$this->CJKfollowing."]/u", mb_substr($word,$i,1,$this->mb_enc ))) { + // try squeezing another character(s) onto this line = Oikomi + if ($this->allowCJKorphans && !$oneCJKorphan) { + //if lookahead is not another following char + if ($i==($mlen-1) || ($i<($mlen-1) && !preg_match("/[".$this->CJKfollowing."]/u", mb_substr($word,$i+1,1,$this->mb_enc )))) { + $wordwidth = $maxwidth - 0.0001; + $oneCJKorphan = true; + continue; + } + } + // or move lastchar(s) to next line + $cjkfix = 2; + } + // mPDF 5.6.42 + // CJK numerals kept together + else if (preg_match("/([".$this->pregCJKchars."]+[0-9\x{ff10}-\x{ff19}]+$)/u", mb_substr($word,0,$i,$this->mb_enc )) && preg_match("/^([0-9\x{ff10}-\x{ff19}]+[".$this->pregCJKchars."]+)/u", mb_substr($word,$i,16,$this->mb_enc ))) { + $cjkfix = 3; + } + if ($cjkfix) { + //move lastchar(s) to next line + $m0 = mb_substr($word,$i-1,1,$this->mb_enc ); // chars to move + $m1 = mb_substr($word,0,$i-1,$this->mb_enc ); // str after stripped chars to move + $mi = $i - 1; + if ($cjkfix == 3) { $match = "0-9\x{ff10}-\x{ff19}"; } + else { $match = $this->CJKleading; } + while(preg_match("/[".$match."$]/u", $m1) && mb_strlen($m1, $this->mb_enc)>2) { + $m0 = mb_substr($m1,$mi-1,1,$this->mb_enc ).$m0; // chars to move + $m1 = mb_substr($m1,0,$mi-1,$this->mb_enc ); // str after stripped chars to move + $mi--; + } + // Insert $m0 into $word at $i + $word = mb_substr($word,0,$i,$this->mb_enc ) . $m0 . mb_substr($word,$i,mb_strlen($word, $this->mb_enc )-$i,$this->mb_enc ); + $mlen = mb_strlen($word, $this->mb_enc ); // increment max for loop counter + } + + + + } +/*-- END CJK-FONTS --*/ + + if ($text && $firstchunk) { + // END OF LINE + // Finalise & add lineheight + $maxfontsize = max($maxfontsize,$this->FontSize); + $fh = $this->_computeLineheight($this->table_lineheight); + if ($lhfixed && $this->FontSize > $def_fontsize) { + $fh = $this->FontSize; + $forceExactLineheight = false; + } + $maxlineHeight = max($maxlineHeight,$fh); + $ch += $this->finaliseCellLineHeight($lhxt, $maxfontsize, $maxlineHeight, $lhfixed, $forceExactLineheight); + // START OF NEW LINE + // Initialise lineheight variables + $maxfontsize = $this->FontSize; + $forceExactLineheight = true; + $lhxt = array('BS'=>0, 'M'=>0, 'TT'=>0, 'TB'=>0, 'T'=>0, 'B'=>0); + $maxlineHeight = $this->_computeLineheight($this->table_lineheight); + $ln++; + } + // END OF LINE + // Finalise & add lineheight + $maxfontsize = max($maxfontsize,$this->FontSize); + $fh = $this->_computeLineheight($this->table_lineheight); + if ($lhfixed && $this->FontSize > $def_fontsize) { + $fh = $this->FontSize; + $forceExactLineheight = false; + } + $maxlineHeight = max($maxlineHeight,$fh); + $ch += $this->finaliseCellLineHeight($lhxt, $maxfontsize, $maxlineHeight, $lhfixed, $forceExactLineheight); + // START OF NEW LINE + // Initialise lineheight variables + $maxfontsize = $this->FontSize; + $forceExactLineheight = true; + $lhxt = array('BS'=>0, 'M'=>0, 'TT'=>0, 'TB'=>0, 'T'=>0, 'B'=>0); + $maxlineHeight = $this->_computeLineheight($this->table_lineheight); + $ln++; + $mxw = $maxwidth; + $text = mb_substr($word,0,$i,$this->mb_enc ); + $word = mb_substr($word,$i,mb_strlen($word, $this->mb_enc )-$i,$this->mb_enc ); + $wordwidth = $this->GetStringWidth($word); + $width = 0; + $firstchunk=false; + break; + } + } + if (mb_strlen($word, $this->mb_enc )<2 && $wordwidth > $maxwidth + 0.0001) { + $wordwidth = $maxwidth - 0.0001; + if ($this->debug) { $this->Error("Table cell width calculated less than that needed for single character!"); } + } + $firstchunk=false; + } + } + // Word fits on line... + if ($width + $wordwidth < $maxwidth + 0.0001) { + $mxw = max($mxw, ($width+$wordwidth)); + $width += $wordwidth + $space; + $text .= $word.' '; + } + // Word does not fit on line... + else { + // mPDF 5.6.21 hard hyphens + if ($this->textparam['hyphens'] != 2 && preg_match('/\-/',$word)) { + list($hardsuccess,$pre,$post,$prelength) = $this->hardHyphenate($word, ($maxwidth - $width)-$this->GetCharWidth("-", false)); + if ($hardsuccess) { + $text .= $pre.'-'; + $word = $post; + $wordwidth = $this->GetStringWidth($word); + if ($k==(count($words)-1)) { $wordwidth += $rbw; } + } + } +/*-- HYPHENATION --*/ + // Soft Hyphens chr(173) + else if ($this->textparam['hyphens'] != 2 && (!$this->usingCoreFont && preg_match("/\xc2\xad/",$word)) || ($this->usingCoreFont && preg_match("/".chr(173)."/",$word) && ($this->FontFamily!='csymbol' && $this->FontFamily!='czapfdingbats')) ) { // mPDF 5.6.06 5.6.08 + list($success,$pre,$post,$prelength) = $this->softHyphenate($word, ($maxwidth - $width)); + if ($success) { + $text .= $pre.'-'; + $word = $post; + $wordwidth = $this->GetStringWidth($word); + if ($k==(count($words)-1)) { $wordwidth += $rbw; } + } + } + else if ($this->textparam['hyphens'] == 1) { // mPDF 5.6.06 5.6.08 + list($success,$pre,$post,$prelength) = $this->hyphenateWord($word, ($maxwidth - $width)); + if ($success) { + $text .= $pre.'-'; + $word = $post; + $wordwidth = $this->GetStringWidth($word); + if ($k==(count($words)-1)) { $wordwidth += $rbw; } + } + } +/*-- END HYPHENATION --*/ + + + // mPDF 5.6.22 + if ( count($textbuffer)>1 && $cctr > 0 && $k==0 + && (substr($textbuffer[$cctr][0],0,3) != "\xbb\xa4\xac") + && (substr($textbuffer[$cctr-1][0],0,3) != "\xbb\xa4\xac") + && substr($textbuffer[$cctr-1][0],-1,1) != ' ' + && substr($textbuffer[$cctr][0],0,1) != ' ' + ) { + // Go back to find a space in a previous chunk of content + $found = false; + for ($ix=$cctr-1;$ix>=0;$ix--) { + if (preg_match('/[ ]/',$textbuffer[$ix][0])) { $found = $ix; break; } + } + if ($found !== false) { + $charpos = strrpos($textbuffer[$found][0],' '); + // mPDF 5.6.24 + $a1 = $a2 = $textbuffer[$found]; + $a1[0] = "\n"; + $a2[0] = substr($textbuffer[$found][0], $charpos+1, strlen($textbuffer[$found][0])-$charpos); + $textbuffer[$found][0] = substr($textbuffer[$found][0], 0, $charpos); + array_insert($textbuffer, $a1, $found+1); + array_insert($textbuffer, $a2, $found+2); + // Initialise all variables + $biggestword=0; + $toonarrow=false; + $lhfixed = false; + if (preg_match('/([0-9.,]+)mm/',$this->table_lineheight)) { $lhfixed = true; } + if ($lhfixed) { $def_lineheight = $this->_computeLineheight($this->table_lineheight, $def_fontsize);} + else { $def_lineheight = 0; } + $maxfontsize = 0; + $forceExactLineheight = true; + $lhxt = array('BS'=>0, 'M'=>0, 'TT'=>0, 'TB'=>0, 'T'=>0, 'B'=>0); + $maxlineHeight = $def_lineheight ; + $ch = 0; + $width = 0; + $ln = 1; // Counts line number + $mxw = $this->GetCharWidth('W',false); + $text = ''; + + $cctr = -1; + break; + } + } + + // END OF LINE + // Finalise & add lineheight + $maxfontsize = max($maxfontsize,$this->FontSize); + $fh = $this->_computeLineheight($this->table_lineheight); + if ($lhfixed && $this->FontSize > $def_fontsize) { + $fh = $this->FontSize; + $forceExactLineheight = false; + } + $maxlineHeight = max($maxlineHeight,$fh); + $ch += $this->finaliseCellLineHeight($lhxt, $maxfontsize, $maxlineHeight, $lhfixed, $forceExactLineheight); + $mxw = $maxwidth; + // START OF NEW LINE + // Initialise lineheight variables + $maxfontsize = $this->FontSize; + $forceExactLineheight = true; + $lhxt = array('BS'=>0, 'M'=>0, 'TT'=>0, 'TB'=>0, 'T'=>0, 'B'=>0); + $maxlineHeight = $this->_computeLineheight($this->table_lineheight); + $ln++; + $width = $wordwidth + $space; + $text = $word.' '; + } + $maxfontsize = max($maxfontsize,$this->FontSize); + $fh = $this->_computeLineheight($this->table_lineheight); + if ($lhfixed && $this->FontSize > $def_fontsize) { + $fh = $this->FontSize; + $forceExactLineheight = false; + } + $maxlineHeight = max($maxlineHeight,$fh); + } + + // End of textbuffer chunk + if (!$lsend) { + $width -= $space; + $text = rtrim($text); + } + + // RESET FONT SIZE/STYLE + // RESETTING VALUES + //Now we must deactivate what we have used + if(isset($chunk[2]) and $chunk[2] != '') { + $this->ResetStyles(); + } + if(isset($chunk[4]) and $chunk[4] != '') { + $this->SetFont($this->default_font,$this->FontStyle,0,false); + } + if(isset($chunk[11]) and $chunk[11] != '') { + $this->SetFontSize($this->default_font_size,false); + } + $this->spanborddet = array(); + $this->kerning = false; + $this->lSpacingCSS = ''; + $this->wSpacingCSS = ''; + $this->fixedlSpacing = false; + $this->minwSpacing = 0; + } + // Finalise lineheight if something output on line and add + if ($width) { + $ch += $this->finaliseCellLineHeight($lhxt, $maxfontsize, $maxlineHeight, $lhfixed, $forceExactLineheight); + } + if ($returnarray) { return array($ch,$ln,$mxw); } + else { return $ch; } + +} + + +function TableCheckMinWidth($maxwidth, $forcewrap = 0, $textbuffer) { + $biggestword=0; + $toonarrow=false; + if ((count($textbuffer) == 0) or ((count($textbuffer) == 1) && ($textbuffer[0][0] == ''))) { return 0; } + + foreach ($textbuffer as $chunk) { + + $line = $chunk[0]; + // mPDF ITERATION + if ($this->iterationCounter) $line = preg_replace('/{iteration ([a-zA-Z0-9_]+)}/','\\1', $line); + + // IMAGES & FORM ELEMENTS + if (substr($line,0,3) == "\xbb\xa4\xac") { //inline object - FORM element or IMAGE! + $objattr = $this->_getObjAttr($line); + if ($objattr['type']!='hr' && isset($objattr['width']) && ($objattr['width']/$this->shrin_k) > ($maxwidth + 0.0001) ) { + if (($objattr['width']/$this->shrin_k) > $biggestword) { $biggestword = ($objattr['width']/$this->shrin_k); } + $toonarrow=true; + } + continue; + } + + if ($line == "\n") { + continue; + } + $line = trim($line ); + // SET FONT SIZE/STYLE from $chunk[n] + + // FONTSIZE + if(isset($chunk[11]) and $chunk[11] != '') { + if ($this->shrin_k) { + $this->SetFontSize($chunk[11]/$this->shrin_k,false); + } + else { + $this->SetFontSize($chunk[11],false); + } + } + // FONTFAMILY + if(isset($chunk[4]) and $chunk[4] != '') { $font = $this->SetFont($chunk[4],$this->FontStyle,0,false); } + // B I U + if(isset($chunk[2]) and $chunk[2] != '') { + $this->SetStyles($chunk[2]); + } + + $lbw = $rbw = 0; // Border widths + if(isset($chunk[16]) && !empty($chunk[16])) { //Border + $this->spanborddet = $chunk[16]; + $lbw = $this->spanborddet['L']['w']; + $rbw = $this->spanborddet['R']['w']; + } + if(isset($chunk[15])) { // Word spacing + $this->wSpacingCSS = $chunk[15]; + if ($this->wSpacingCSS && strtoupper($this->wSpacingCSS) != 'NORMAL') { + $this->minwSpacing = $this->ConvertSize($this->wSpacingCSS,$this->FontSize); + } + } + if(isset($chunk[14])) { // Letter spacing + $this->lSpacingCSS = $chunk[14]; + if (($this->lSpacingCSS || $this->lSpacingCSS==='0') && strtoupper($this->lSpacingCSS) != 'NORMAL') { + $this->fixedlSpacing = $this->ConvertSize($this->lSpacingCSS,$this->FontSize); + } + } + if(isset($chunk[13])) { // Font Kerning + $this->kerning = $chunk[13]; + } + + $words = explode(' ', $line); + foreach ($words as $k=>$word) { + $word = trim($word); + $wordwidth = $this->GetStringWidth($word); + if ($k==0) { $wordwidth += $lbw; } + if ($k==(count($words)-1)) { $wordwidth += $rbw; } + + //Warn user that maxwidth is insufficient + if ($wordwidth > $maxwidth + 0.0001) { + if ($wordwidth > $biggestword) { $biggestword = $wordwidth; } + $toonarrow=true; + } + } + + // RESET FONT SIZE/STYLE + // RESETTING VALUES + //Now we must deactivate what we have used + if(isset($chunk[2]) and $chunk[2] != '') { + $this->ResetStyles(); + } + if(isset($chunk[4]) and $chunk[4] != '') { + $this->SetFont($this->default_font,$this->FontStyle,0,false); + } + if(isset($chunk[11]) and $chunk[11] != '') { + $this->SetFontSize($this->default_font_size,false); + } + $this->spanborddet = array(); + $this->kerning = false; + $this->lSpacingCSS = ''; + $this->wSpacingCSS = ''; + $this->fixedlSpacing = false; + $this->minwSpacing = 0; + } + + //Return -(wordsize) if word is bigger than maxwidth + // ADDED + if (($toonarrow) && ($this->table_error_report)) { + $this->Error("Word is too long to fit in table - ".$this->table_error_report_param); + } + if ($toonarrow) return -$biggestword; + else return 1; +} + +function shrinkTable(&$table,$k) { + $table['border_spacing_H'] /= $k; + $table['border_spacing_V'] /= $k; + + $table['padding']['T'] /= $k; + $table['padding']['R'] /= $k; + $table['padding']['B'] /= $k; + $table['padding']['L'] /= $k; + + $table['margin']['T'] /= $k; + $table['margin']['R'] /= $k; + $table['margin']['B'] /= $k; + $table['margin']['L'] /= $k; + + $table['border_details']['T']['w'] /= $k; + $table['border_details']['R']['w'] /= $k; + $table['border_details']['B']['w'] /= $k; + $table['border_details']['L']['w'] /= $k; + + if (isset($table['max_cell_border_width']['T'])) $table['max_cell_border_width']['T'] /= $k; + if (isset($table['max_cell_border_width']['R'])) $table['max_cell_border_width']['R'] /= $k; + if (isset($table['max_cell_border_width']['B'])) $table['max_cell_border_width']['B'] /= $k; + if (isset($table['max_cell_border_width']['L'])) $table['max_cell_border_width']['L'] /= $k; + + if ($this->simpleTables){ + $table['simple']['border_details']['T']['w'] /= $k; + $table['simple']['border_details']['R']['w'] /= $k; + $table['simple']['border_details']['B']['w'] /= $k; + $table['simple']['border_details']['L']['w'] /= $k; + } + + $table['miw'] /= $k; + $table['maw'] /= $k; + + if ($this->cacheTables) { $fh = fopen($table['cache'], "r+b"); } + + for($j = 0 ; $j < $table['nc'] ; $j++ ) { //columns + + $table['wc'][$j]['miw'] /= $k; + $table['wc'][$j]['maw'] /= $k; + + // mPDF 5.6.13 + if (isset($table['decimal_align'][$j]['maxs0']) && $table['decimal_align'][$j]['maxs0']) { $table['decimal_align'][$j]['maxs0'] /= $k; } + if (isset($table['decimal_align'][$j]['maxs1']) && $table['decimal_align'][$j]['maxs1']) { $table['decimal_align'][$j]['maxs1'] /= $k; } + + if (isset($table['wc'][$j]['absmiw']) && $table['wc'][$j]['absmiw'] ) $table['wc'][$j]['absmiw'] /= $k; + + for($i = 0 ; $i < $table['nr']; $i++ ) { //rows + if ($this->cacheTables) { + $c = $this->_uncacheCell($table['cells'][$i][$j], '', $fh); + } + else + $c = &$table['cells'][$i][$j]; + if (isset($c) && $c) { + if (!$this->simpleTables){ + if ($this->packTableData) { + $cell = $this->_unpackCellBorder($c['borderbin'] ); + $cell['border_details']['T']['w'] /= $k; + $cell['border_details']['R']['w'] /= $k; + $cell['border_details']['B']['w'] /= $k; + $cell['border_details']['L']['w'] /= $k; + $cell['border_details']['mbw']['TL'] /= $k; + $cell['border_details']['mbw']['TR'] /= $k; + $cell['border_details']['mbw']['BL'] /= $k; + $cell['border_details']['mbw']['BR'] /= $k; + $cell['border_details']['mbw']['LT'] /= $k; + $cell['border_details']['mbw']['LB'] /= $k; + $cell['border_details']['mbw']['RT'] /= $k; + $cell['border_details']['mbw']['RB'] /= $k; + $c['borderbin'] = $this->_packCellBorder($cell); + } + else { + $c['border_details']['T']['w'] /= $k; + $c['border_details']['R']['w'] /= $k; + $c['border_details']['B']['w'] /= $k; + $c['border_details']['L']['w'] /= $k; + $c['border_details']['mbw']['TL'] /= $k; + $c['border_details']['mbw']['TR'] /= $k; + $c['border_details']['mbw']['BL'] /= $k; + $c['border_details']['mbw']['BR'] /= $k; + $c['border_details']['mbw']['LT'] /= $k; + $c['border_details']['mbw']['LB'] /= $k; + $c['border_details']['mbw']['RT'] /= $k; + $c['border_details']['mbw']['RB'] /= $k; + } + } + $c['padding']['T'] /= $k; + $c['padding']['R'] /= $k; + $c['padding']['B'] /= $k; + $c['padding']['L'] /= $k; + $c['maxs'] /= $k; + if (isset($c['w'])) { $c['w'] /= $k; } + $c['s'] /= $k; + $c['maw'] /= $k; + $c['miw'] /= $k; + if (isset($c['absmiw'])) $c['absmiw'] /= $k; + if (isset($c['nestedmaw'])) $c['nestedmaw'] /= $k; + if (isset($c['nestedmiw'])) $c['nestedmiw'] /= $k; + if (isset($c['textbuffer'])) { + foreach($c['textbuffer'] AS $n=>$tb) { + if (!empty($tb[16])) { + $c['textbuffer'][$n][16]['T']['w'] /= $k; + $c['textbuffer'][$n][16]['B']['w'] /= $k; + $c['textbuffer'][$n][16]['L']['w'] /= $k; + $c['textbuffer'][$n][16]['R']['w'] /= $k; + } + } + } + if ($this->cacheTables) { + $this->_cacheCell($c, '', "W", $fh, $table['cells'][$i][$j]); + } + unset($c); + } + }//rows + }//columns + if ($this->cacheTables) { fclose($fh); } +} + +function _cacheCell($c, $file, $mode="A", $fh=null, $offset=0) { // mode = Append or (over)Write (needs offset and fh) + // Requires either $file OR $fh (file_handle) + if (!is_array($c) || !isset($c)) { return ''; } + + if(isset($c['w'])) { $cw = $c['w']; } else { $cw = -1; } + if(isset($c['w0'])) { $cw0 = $c['w0']; } else { $cw0 = -1; } + if(isset($c['h0'])) { $ch0 = $c['h0']; } else { $ch0 = -1; } + + $data = pack("n2d19A1A1n2sA32A128", + $c['colspan'], /* n (16 bit; 2 bytes) [pos 0] */ + $c['rowspan'], /* n (16 bit; 2 bytes) [pos 2] */ + $c['s'], /* d NB machine-dependent size (64 bit; 8 bytes on test winOS) [pos 4] */ + $c['maxs'], /* d NB machine-dependent size [pos 4 + 1*D] */ + $c['nestedmaw'], /* d NB machine-dependent size [pos 4 + 2*D] */ + $c['nestedmiw'], /* d NB machine-dependent size [pos 4 + 3*D] */ + $c['padding']['L'], /* d NB machine-dependent size [pos 4 + 4*D] */ + $c['padding']['R'], /* d NB machine-dependent size [pos 4 + 5*D] */ + $c['padding']['T'], /* d NB machine-dependent size [pos 4 + 6*D] */ + $c['padding']['B'], /* d NB machine-dependent size [pos 4 + 7*D] */ + $c['dfs'], /* d NB machine-dependent size [pos 4 + 8*D] */ + $cw, /* d NB machine-dependent size [pos 4 + 9*D] */ + $c['h'], /* d NB machine-dependent size [pos 4 + 10*D] */ + $c['absmiw'], /* d NB machine-dependent size [pos 4 + 11*D] */ + $c['maw'], /* d NB machine-dependent size [pos 4 + 12*D] */ + $c['miw'], /* d NB machine-dependent size [pos 4 + 13*D] */ + $c['mih'], /* d NB machine-dependent size [pos 4 + 14*D] */ + $c['x0'], /* d NB machine-dependent size [pos 4 + 15*D] */ + $cw0, /* d NB machine-dependent size [pos 4 + 16*D] */ + $c['y0'], /* d NB machine-dependent size [pos 4 + 17*D] */ + $ch0, /* d NB machine-dependent size [pos 4 + 18*D] */ + $c['a'], /* A1 (1 byte) [pos 4 + 19*D] */ + $c['va'], /* A1 (1 byte) [pos 5 + 19*D] */ + $c['nowrap'], /* 1 or blank n (16 bit; 2 bytes) [pos 6 + 19*D] */ + $c['wpercent'], /* 0 - 100 n (16 bit; 2 bytes) [pos 8 + 19*D] */ + $c['R'], /* 90 or -90 s (16 bit; 2 bytes) [pos 10 + 19*D] */ + $c['bgcolor'], /* A32 (32 bytes) [pos 12 + 19*D] */ + $c['gradient'] /* A128 (128 bytes) [pos 44 + 19*D] */ + ); + + if ($c['background-image']) { + $data .= pack("n2d2A6A6n3dA4A128", + strlen($data), /* offset in main data to start of bgimage data */ + $c['background-image']['image_id'], /* n */ + $c['background-image']['orig_w'], /* d NB machine-dependent size */ + $c['background-image']['orig_h'], /* d NB machine-dependent size */ + $c['background-image']['x_pos'], /* A6 calc size or "50%" */ + $c['background-image']['y_pos'], /* A6 calc size or "50%" */ + $c['background-image']['x_repeat'], /* n true or false*/ + $c['background-image']['y_repeat'], /* n true or false */ + $c['background-image']['resize'], /* n 0 - 6 */ + $c['background-image']['opacity'], /* d 0-1 */ + $c['background-image']['itype'], /* A4 jpg etc */ + $c['background-image']['gradient'] /* A128 CSS string */ + ); + } + else $data .= pack("n",0); + $tb_offset = 2 + 186 + 2 + strlen($data); + $stb = serialize($c['textbuffer']).' '; // buffer to allow updating in reverseTableDir + $lentb = strlen($stb); + $data2 = pack("nA".$lentb, $lentb, $stb); + + $tempfh = true; + if ($mode=="W" && $offset) { + if (!$fh) { $fh = fopen($file, "r+b"); } // Overwrite (but not truncate) + else $tempfh = false; + fseek($fh, $offset); + } + else { + $fh = fopen($file, "ab"); // APPEND + } + fwrite($fh, pack("n",$tb_offset)); // Offset to Text buffer 2 bytes + fwrite($fh, $c['borderbin']); // border details 186 bytes + fwrite($fh, pack("n",strlen($data))); // Length of Main data + fwrite($fh, $data); // Main data + fwrite($fh, $data2); // Text buffer (starts with "n" length of text buffer) + if ($tempfh) fclose($fh); + return ($tb_offset + 2 + $lentb); +} + +function _cacheUpdateTxB($c, $fh, $offset) { + fseek($fh, $offset); + $tb_offset = $this->read_short($fh); // First entry = Offset to Text buffer 2 bytes + fseek($fh, ($tb_offset-2), SEEK_CUR); + $lentb = $this->read_short($fh); // First entry in textbuffer = Length of serialized textbuffer - do not update + $stb = serialize($c['textbuffer']); + fwrite($fh, pack("A".$lentb, $stb)); +} + +function _cacheUpdateBorder($c, $fh, $offset) { + $offset += 2; + fseek($fh, $offset); + fwrite($fh, $c['borderbin']); +} + +function _cacheUpdateMtx($c, $fh, $offset, $var) { + if ($var=='mih') { $offset += (2 + 186 + 2 + 4 + 14*_DSIZE); } + else if ($var=='x0') { $offset += (2 + 186 + 2 + 4 + 15*_DSIZE); } // x0 and w0 + else if ($var=='y0') { $offset += (2 + 186 + 2 + 4 + 17*_DSIZE); } // y0 and h0 + fseek($fh, $offset); + if ($var=='mih') { fwrite($fh, pack("d",$c['mih'])); } + else if ($var=='x0') { fwrite($fh, pack("d2",$c['x0'],$c['w0'])); } + else if ($var=='y0') { fwrite($fh, pack("d2",$c['y0'],$c['h0'])); } +} + +function _uncacheCell($ptr, $file, $fh) { + // Requires either $file or $fh (file_handle) + if ($ptr==0) { return null; } + if (is_array($ptr)) { $this->Error("Probable cause - missing end tag </td>. You may be able to change the configurable variable: allow_html_optional_endtags "); } + $tempfh = true; + if (!$fh) { $fh = fopen($file, "rb"); } + else $tempfh = false; + fseek($fh, $ptr); + $c = array(); + $tb_offset = $this->read_short($fh); // First entry = Offset to Text buffer 2 bytes + $c['borderbin'] = fread($fh,186); // border details 186 bytes + $maindatalen = $this->read_short($fh); // Length of Main data (2 bytes) + $str = fread($fh,$maindatalen ); // Main data + $data = unpack("ncolspan/nrowspan/ds/dmaxs/dnmaw/dnmiw/dpl/dpr/dpt/dpb/ddfs/dw/dh/dabsmiw/dmaw/dmiw/dmih/dx0/dw0/dy0/dh0/A1a/A1va/nnowrap/nwpercent/sR/A32bgcol/A128grad/nbgimage", $str); + + if ($data['colspan']>0) $c['colspan'] = $data['colspan']; /* n */ + if ($data['rowspan']>0) $c['rowspan'] = $data['rowspan']; /* n */ + $c['s'] = $data['s']; /* d NB machine-dependent size */ + $c['maxs'] = $data['maxs']; /* d NB machine-dependent size */ + if ($data['nmaw']>0) $c['nestedmaw'] = $data['nmaw']; /* d NB machine-dependent size */ + if ($data['nmiw']>0) $c['nestedmiw'] = $data['nmiw']; /* d NB machine-dependent size */ + $c['padding']['L'] = $data['pl']; /* d NB machine-dependent size */ + $c['padding']['R'] = $data['pr']; /* d NB machine-dependent size */ + $c['padding']['T'] = $data['pt']; /* d NB machine-dependent size */ + $c['padding']['B'] = $data['pb']; /* d NB machine-dependent size */ + $c['dfs'] = $data['dfs']; /* d NB machine-dependent size */ + if ($data['w']>=0) $c['w'] = $data['w']; /* d NB machine-dependent size */ + if ($data['h']>0) $c['h'] = $data['h']; /* d NB machine-dependent size */ + if ($data['absmiw']>0) $c['absmiw'] = $data['absmiw']; /* d NB machine-dependent size */ + if ($data['maw']>0) $c['maw'] = $data['maw']; /* d NB machine-dependent size */ + if ($data['miw']>0) $c['miw'] = $data['miw']; /* d NB machine-dependent size */ + if ($data['mih']>0) $c['mih'] = $data['mih']; /* d NB machine-dependent size */ + if ($data['w0']>=0) { $c['w0'] = $data['w0']; /* d NB machine-dependent size */ + $c['x0'] = $data['x0']; } /* d NB machine-dependent size */ + if ($data['h0']>=0) { $c['h0'] = $data['h0']; /* d NB machine-dependent size */ + $c['y0'] = $data['y0']; } /* d NB machine-dependent size */ + $c['a'] = trim($data['a']); /* A1 */ + $c['va'] = trim($data['va']); /* A1 */ + if ($data['nowrap']) $c['nowrap'] = $data['nowrap']; /* 1 or blank n */ + else $c['nowrap'] = false; + if ($data['wpercent']>0) $c['wpercent'] = $data['wpercent']; /* 0 - 100 n */ + if ($data['R']<>0) $c['R'] = $data['R']; /* 90 or -90 s */ + else $c['R'] = false; + $c['bgcolor'] = trim($data['bgcol']); /* A32 */ + if (trim($data['grad'])) + $c['gradient'] = trim($data['grad']); /* A128 */ + else $c['gradient'] = false; + if ($data['bgimage']>0) { + $bgidata = substr($str, ($data['bgimage']+2)); + $c['background-image'] = unpack("nimage_id/dorig_w/dorig_h/A6x_pos/A6y_pos/nx_repeat/ny_repeat/nresize/dopacity/A4itype/A128gradient", $bgidata); + } + + $tblen = $this->read_short($fh); // Length of Textbuffer + $tbsp = fread($fh,$tblen); // Textbuffer (serialised and packed) + $tbs = unpack("A".$tblen."textbuffer",$tbsp); // Textbuffer unpacked + $c['textbuffer'] = unserialize(trim($tbs['textbuffer'])); // Textbuffer unserialized + + if ($tempfh) { fclose($fh); } + return ($c); +} +function read_short(&$fh) { + $s = fread($fh,2); + $a = (ord($s[0])<<8) + ord($s[1]); + if ($a & (1 << 15) ) { + $a = ($a - (1 << 16)); + } + return $a; +} +function _backupCacheFiles() { + foreach($this->table AS $lvl=>$t) { + foreach($this->table[$lvl] AS $c=>$t2) { +///////////////////////////if (!file_exists($t2['cache'])) { echo $lvl; echo $c; print_r($this->table); exit; } + copy( $t2['cache'], $t2['cache'].'.bak'); + } + } +} +function _restoreCacheFiles() { + foreach($this->table AS $lvl=>$t) { + foreach($this->table[$lvl] AS $c=>$t2) { + copy( $t2['cache'].'.bak', $t2['cache']); + } + } +} + + +function _packCellBorder($cell) { + if (!is_array($cell) || !isset($cell)) { return ''; } + + if (!$this->packTableData) { return $cell; } + // = 186 bytes + $bindata = pack("nnda6A10nnda6A10nnda6A10nnda6A10nd9", + $cell['border'], + $cell['border_details']['R']['s'], + $cell['border_details']['R']['w'], + $cell['border_details']['R']['c'], + $cell['border_details']['R']['style'], + $cell['border_details']['R']['dom'], + + $cell['border_details']['L']['s'], + $cell['border_details']['L']['w'], + $cell['border_details']['L']['c'], + $cell['border_details']['L']['style'], + $cell['border_details']['L']['dom'], + + $cell['border_details']['T']['s'], + $cell['border_details']['T']['w'], + $cell['border_details']['T']['c'], + $cell['border_details']['T']['style'], + $cell['border_details']['T']['dom'], + + $cell['border_details']['B']['s'], + $cell['border_details']['B']['w'], + $cell['border_details']['B']['c'], + $cell['border_details']['B']['style'], + $cell['border_details']['B']['dom'], + + $cell['border_details']['mbw']['BL'], + $cell['border_details']['mbw']['BR'], + $cell['border_details']['mbw']['RT'], + $cell['border_details']['mbw']['RB'], + $cell['border_details']['mbw']['TL'], + $cell['border_details']['mbw']['TR'], + $cell['border_details']['mbw']['LT'], + $cell['border_details']['mbw']['LB'], + + $cell['border_details']['cellposdom'] + ); + return $bindata; +} + + + +function _getBorderWidths($bindata) { + if (!$bindata) { return array(0,0,0,0); } + if (!$this->packTableData) { return array($bindata['border_details']['T']['w'], $bindata['border_details']['R']['w'], $bindata['border_details']['B']['w'], $bindata['border_details']['L']['w']); } + + $bd = unpack("nbord/nrs/drw/a6rca/A10rst/nrd/nls/dlw/a6lca/A10lst/nld/nts/dtw/a6tca/A10tst/ntd/nbs/dbw/a6bca/A10bst/nbd/dmbl/dmbr/dmrt/dmrb/dmtl/dmtr/dmlt/dmlb/dcpd", $bindata); + $cell['border_details']['R']['w'] = $bd['rw']; + $cell['border_details']['L']['w'] = $bd['lw']; + $cell['border_details']['T']['w'] = $bd['tw']; + $cell['border_details']['B']['w'] = $bd['bw']; + return array($bd['tw'], $bd['rw'], $bd['bw'], $bd['lw']); +} + + +function _unpackCellBorder($bindata) { + if (!$bindata) { return array(); } + if (!$this->packTableData) { return $bindata; } + + $bd = unpack("nbord/nrs/drw/a6rca/A10rst/nrd/nls/dlw/a6lca/A10lst/nld/nts/dtw/a6tca/A10tst/ntd/nbs/dbw/a6bca/A10bst/nbd/dmbl/dmbr/dmrt/dmrb/dmtl/dmtr/dmlt/dmlb/dcpd", $bindata); + + $cell['border'] = $bd['bord']; + $cell['border_details']['R']['s'] = $bd['rs']; + $cell['border_details']['R']['w'] = $bd['rw']; + $cell['border_details']['R']['c'] = $bd['rca']; + $cell['border_details']['R']['style'] = trim($bd['rst']); + $cell['border_details']['R']['dom'] = $bd['rd']; + + $cell['border_details']['L']['s'] = $bd['ls']; + $cell['border_details']['L']['w'] = $bd['lw']; + $cell['border_details']['L']['c'] = $bd['lca']; + $cell['border_details']['L']['style'] = trim($bd['lst']); + $cell['border_details']['L']['dom'] = $bd['ld']; + + $cell['border_details']['T']['s'] = $bd['ts']; + $cell['border_details']['T']['w'] = $bd['tw']; + $cell['border_details']['T']['c'] = $bd['tca']; + $cell['border_details']['T']['style'] = trim($bd['tst']); + $cell['border_details']['T']['dom'] = $bd['td']; + + $cell['border_details']['B']['s'] = $bd['bs']; + $cell['border_details']['B']['w'] = $bd['bw']; + $cell['border_details']['B']['c'] = $bd['bca']; + $cell['border_details']['B']['style'] = trim($bd['bst']); + $cell['border_details']['B']['dom'] = $bd['bd']; + + $cell['border_details']['mbw']['BL'] = $bd['mbl']; + $cell['border_details']['mbw']['BR'] = $bd['mbr']; + $cell['border_details']['mbw']['RT'] = $bd['mrt']; + $cell['border_details']['mbw']['RB'] = $bd['mrb']; + $cell['border_details']['mbw']['TL'] = $bd['mtl']; + $cell['border_details']['mbw']['TR'] = $bd['mtr']; + $cell['border_details']['mbw']['LT'] = $bd['mlt']; + $cell['border_details']['mbw']['LB'] = $bd['mlb']; + $cell['border_details']['cellposdom'] = $bd['cpd']; + + return($cell); +} + + +////////////////////////TABLE CODE (from PDFTable)///////////////////////////////////// +////////////////////////TABLE CODE (from PDFTable)///////////////////////////////////// +////////////////////////TABLE CODE (from PDFTable)///////////////////////////////////// +//table Array of (w, h, bc, nr, wc, hr, cells) +//w Width of table +//h Height of table +//nc Number column +//nr Number row +//hr List of height of each row +//wc List of width of each column +//cells List of cells of each rows, cells[i][j] is a cell in the table +function _tableColumnWidth(&$table,$firstpass=false){ + $cs = &$table['cells']; + + $nc = $table['nc']; + $nr = $table['nr']; + $listspan = array(); + + if ($table['borders_separate']) { + $tblbw = $table['border_details']['L']['w'] + $table['border_details']['R']['w'] + $table['margin']['L'] + $table['margin']['R'] + $table['padding']['L'] + $table['padding']['R'] + $table['border_spacing_H']; + } + else { $tblbw = $table['max_cell_border_width']['L']/2 + $table['max_cell_border_width']['R']/2 + $table['margin']['L'] + $table['margin']['R']; } + + if ($this->cacheTables) { $fh = fopen($table['cache'], "r+b"); } + else { $fh = null; } + + // ADDED table['l'][colno] + // = total length of text approx (using $c['s']) in that column - used to approximately distribute col widths in _tableWidth + // + for($j = 0 ; $j < $nc ; $j++ ) { //columns + $wc = &$table['wc'][$j]; + for($i = 0 ; $i < $nr ; $i++ ) { //rows + if (isset($cs[$i][$j]) && $cs[$i][$j]) { + if ($this->cacheTables) { + $c = $this->_uncacheCell($table['cells'][$i][$j], '', $fh); + } + else + $c = &$cs[$i][$j]; + + if ($this->simpleTables){ + if ($table['borders_separate']) { // NB twice border width + $extrcw = $table['simple']['border_details']['L']['w'] + $table['simple']['border_details']['R']['w'] + $c['padding']['L'] + $c['padding']['R'] + $table['border_spacing_H']; + } + else { + $extrcw = $table['simple']['border_details']['L']['w']/2 + $table['simple']['border_details']['R']['w']/2 + $c['padding']['L'] + $c['padding']['R']; + } + } + else { + if ($this->packTableData) { + list($bt,$br,$bb,$bl) = $this->_getBorderWidths($c['borderbin']); + } + else { + $br = $c['border_details']['R']['w']; + $bl = $c['border_details']['L']['w']; + } + if ($table['borders_separate']) { // NB twice border width + $extrcw = $bl + $br + $c['padding']['L'] + $c['padding']['R'] + $table['border_spacing_H']; + } + else { + $extrcw = $bl/2 + $br/2 + $c['padding']['L'] + $c['padding']['R']; + } + } + + //$mw = $this->GetStringWidth('W') + $extrcw ; + $mw = 0; + // mPDF 5.6.13 Decimal point alignment + if(substr($c['a'],0,1) == 'D') { + $mw = $table['decimal_align'][$j]['maxs0'] + $table['decimal_align'][$j]['maxs1'] + $extrcw ; + } + + $c['absmiw'] = $mw; + + if (isset($c['R']) && $c['R']) { + $c['maw'] = $c['miw'] = $this->FontSize + $extrcw ; + if (isset($c['w'])) { // If cell width is specified + if ($c['miw'] <$c['w']) { $c['miw'] = $c['w']; } + } + if (!isset($c['colspan'])) { + if ($wc['miw'] < $c['miw']) { $wc['miw'] = $c['miw']; } + if ($wc['maw'] < $c['maw']) { $wc['maw'] = $c['maw']; } + + if ($firstpass) { + if (isset($table['l'][$j]) ) { + $table['l'][$j] += $c['miw'] ; + } + else { + $table['l'][$j] = $c['miw'] ; + } + } + } + if ($c['miw'] > $wc['miw']) { $wc['miw'] = $c['miw']; } + if ($wc['miw'] > $wc['maw']) { $wc['maw'] = $wc['miw']; } + continue; + } + + if ($firstpass) { + if (isset($c['s'])) { $c['s'] += $extrcw; } + if (isset($c['maxs'])) { $c['maxs'] += $extrcw; } + if (isset($c['nestedmiw'])) { $c['nestedmiw'] += $extrcw; } + if (isset($c['nestedmaw'])) { $c['nestedmaw'] += $extrcw; } + } + + + // If minimum width has already been set by a nested table or inline object (image/form), use it + if (isset($c['nestedmiw']) && $this->table[1][1]['overflow']!='visible') { $miw = $c['nestedmiw']; } + else { $miw = $mw; } + + if (isset($c['maxs']) && $c['maxs'] != '') { $c['s'] = $c['maxs']; } + + // If maximum width has already been set by a nested table, use it + if (isset($c['nestedmaw'])) { $c['maw'] = $c['nestedmaw']; } + else $c['maw'] = $c['s']; + + if (isset($table['overflow']) && $table['overflow']=='visible' && $table['level']==1) { + if (($c['maw'] + $tblbw) > $this->blk[$this->blklvl]['inner_width']) { + $c['maw'] = $this->blk[$this->blklvl]['inner_width'] - $tblbw; + } + } + + if (isset($c['nowrap']) && $c['nowrap']) { $miw = $c['maw']; } + + if (isset($c['wpercent']) && $firstpass) { + if (isset($c['colspan'])) { // Not perfect - but % set on colspan is shared equally on cols. + for($k=0;$k<$c['colspan'];$k++) { + $table['wc'][($j+$k)]['wpercent'] = $c['wpercent'] / $c['colspan']; + } + } + else { + if (isset($table['w']) && $table['w']) { $c['w'] = $c['wpercent']/100 * ($table['w'] - $tblbw ); } + $wc['wpercent'] = $c['wpercent']; + } + } + + if (isset($table['overflow']) && $table['overflow']=='visible' && $table['level']==1) { + if (($c['w'] + $tblbw) > $this->blk[$this->blklvl]['inner_width']) { + $c['w'] = $this->blk[$this->blklvl]['inner_width'] - $tblbw; + } + } + + + if (isset($c['w'])) { // If cell width is specified + if ($miw<$c['w']) { $c['miw'] = $c['w']; } // Cell min width = that specified + if ($miw>$c['w']) { $c['miw'] = $c['w'] = $miw; } // If width specified is less than minimum allowed (W) increase it + if (!isset($wc['w'])) { $wc['w'] = 1; } // If the Col width is not specified = set it to 1 + + } + else { $c['miw'] = $miw; } // If cell width not specified -> set Cell min width it to minimum allowed (W) + + if ($c['maw'] < $c['miw']) { $c['maw'] = $c['miw']; } // If Cell max width < Minwidth - increase it to = + if (!isset($c['colspan'])) { + if ($wc['miw'] < $c['miw']) { $wc['miw'] = $c['miw']; } // Update Col Minimum and maximum widths + if ($wc['maw'] < $c['maw']) { $wc['maw'] = $c['maw']; } + if ((isset($wc['absmiw']) && $wc['absmiw'] < $c['absmiw']) || !isset($wc['absmiw'])) { $wc['absmiw'] = $c['absmiw']; } // Update Col Minimum and maximum widths + + if (isset($table['l'][$j]) ) { + $table['l'][$j] += $c['s']; + } + else { + $table['l'][$j] = $c['s']; + } + + } + else { + $listspan[] = array($i,$j); + } + + //Check if minimum width of the whole column is big enough for largest word to fit + if (isset($c['textbuffer']) && (!isset($table['overflow']) || $table['overflow']!='wrap')) { // mPDF 5.5.11 + $minwidth = $this->TableCheckMinWidth($wc['miw']- $extrcw ,0,$c['textbuffer']); + } + else { $minwidth = 0; } + if ($minwidth < 0) { + //increase minimum width + if (!isset($c['colspan'])) { + $wc['miw'] = max($wc['miw'],((-$minwidth) + $extrcw) ); + } + else { + $c['miw'] = max($c['miw'],((-$minwidth) + $extrcw) ); + } + } + if (!isset($c['colspan'])) { + if ($wc['miw'] > $wc['maw']) { $wc['maw'] = $wc['miw']; } //update maximum width, if needed + } + if ($this->cacheTables) { + $this->_cacheCell($c, '', "W", $fh, $table['cells'][$i][$j]); + } + } + unset($c); + }//rows + }//columns + + + // COLUMN SPANS + $wc = &$table['wc']; + foreach ($listspan as $span) { + list($i,$j) = $span; + if ($this->cacheTables) { + $c = $this->_uncacheCell($cs[$i][$j], '', $fh); + } + else + $c = &$cs[$i][$j]; + $lc = $j + $c['colspan']; + if ($lc > $nc) { $lc = $nc; } + $wis = $wisa = 0; + $was = $wasa = 0; + $list = array(); + for($k=$j;$k<$lc;$k++) { + if (isset($table['l'][$k]) ) { + if ($c['R']) { $table['l'][$k] += $c['miw']/$c['colspan'] ; } + else { $table['l'][$k] += $c['s']/$c['colspan']; } + } + else { + if ($c['R']) { $table['l'][$k] = $c['miw']/$c['colspan'] ; } + else { $table['l'][$k] = $c['s']/$c['colspan']; } + } + $wis += $wc[$k]['miw']; + $was += $wc[$k]['maw']; + if (!isset($c['w'])) { + $list[] = $k; + $wisa += $wc[$k]['miw']; + $wasa += $wc[$k]['maw']; + } + } + if ($c['miw'] > $wis) { + if (!$wis) { + for($k=$j;$k<$lc;$k++) { $wc[$k]['miw'] = $c['miw']/$c['colspan']; } + } + else if (!count($list)) { + $wi = $c['miw'] - $wis; + for($k=$j;$k<$lc;$k++) { $wc[$k]['miw'] += ($wc[$k]['miw']/$wis)*$wi; } + } + else { + $wi = $c['miw'] - $wis; + foreach ($list as $k) { $wc[$k]['miw'] += ($wc[$k]['miw']/$wisa)*$wi; } + } + } + if ($c['maw'] > $was) { + if (!$wis) { + for($k=$j;$k<$lc;$k++) { $wc[$k]['maw'] = $c['maw']/$c['colspan']; } + } + else if (!count($list)) { + $wi = $c['maw'] - $was; + for($k=$j;$k<$lc;$k++) { $wc[$k]['maw'] += ($wc[$k]['maw']/$was)*$wi; } + } + else { + $wi = $c['maw'] - $was; + foreach ($list as $k) { $wc[$k]['maw'] += ($wc[$k]['maw']/$wasa)*$wi; } + } + } + unset($c); + } + + if ($this->cacheTables) { fclose($fh); } + + $checkminwidth = 0; + $checkmaxwidth = 0; + $totallength = 0; + + for( $i = 0 ; $i < $nc ; $i++ ) { + $checkminwidth += $table['wc'][$i]['miw']; + $checkmaxwidth += $table['wc'][$i]['maw']; + $totallength += $table['l'][$i]; + } + + if (!isset($table['w']) && $firstpass) { + $sumpc = 0; + $notset = 0; + for( $i = 0 ; $i < $nc ; $i++ ) { + if (isset($table['wc'][$i]['wpercent']) && $table['wc'][$i]['wpercent']) { + $sumpc += $table['wc'][$i]['wpercent']; + } + else { $notset++; } + } + + // If sum of widths as % >= 100% and not all columns are set + // Set a nominal width of 1% for unset columns + if ($sumpc >= 100 && $notset) { + for( $i = 0 ; $i < $nc ; $i++ ) { + if ((!isset($table['wc'][$i]['wpercent']) || !$table['wc'][$i]['wpercent']) && + (!isset($table['wc'][$i]['w']) || !$table['wc'][$i]['w'])) { + $table['wc'][$i]['wpercent'] = 1; + } + } + } + + + if ($sumpc) { // if any percents are set + $sumnonpc = (100 - $sumpc); + $sumpc = max($sumpc,100); + $miwleft = 0; + $miwleftcount = 0; + $miwsurplusnonpc = 0; + $maxcalcmiw = 0; + $mawleft = 0; + $mawleftcount = 0; + $mawsurplusnonpc = 0; + $maxcalcmaw = 0; + for( $i = 0 ; $i < $nc ; $i++ ) { + if (isset($table['wc'][$i]['wpercent'])) { + $maxcalcmiw = max($maxcalcmiw, ($table['wc'][$i]['miw'] * $sumpc /$table['wc'][$i]['wpercent']) ); + $maxcalcmaw = max($maxcalcmaw, ($table['wc'][$i]['maw'] * $sumpc /$table['wc'][$i]['wpercent']) ); + } + else { + $miwleft += $table['wc'][$i]['miw']; + $mawleft += $table['wc'][$i]['maw']; + if (!isset($table['wc'][$i]['w'])) { $miwleftcount++; $mawleftcount++; } + } + } + if ($miwleft && $sumnonpc > 0) { $miwnon = $miwleft * 100 / $sumnonpc; } + if ($mawleft && $sumnonpc > 0) { $mawnon = $mawleft * 100 / $sumnonpc; } + if (($miwnon > $checkminwidth || $maxcalcmiw > $checkminwidth) && $this->keep_table_proportions) { + if ($miwnon > $maxcalcmiw) { + $miwsurplusnonpc = round((($miwnon * $sumnonpc / 100) - $miwleft),3); + $checkminwidth = $miwnon; + } + else { $checkminwidth = $maxcalcmiw; } + for( $i = 0 ; $i < $nc ; $i++ ) { + if (isset($table['wc'][$i]['wpercent'])) { + $newmiw = $checkminwidth * $table['wc'][$i]['wpercent']/100; + if ($table['wc'][$i]['miw'] < $newmiw) { + $table['wc'][$i]['miw'] = $newmiw; + } + $table['wc'][$i]['w'] = 1; + } + else if ($miwsurplusnonpc && !$table['wc'][$i]['w']) { + $table['wc'][$i]['miw'] += $miwsurplusnonpc / $miwleftcount; + } + } + } + if (($mawnon > $checkmaxwidth || $maxcalcmaw > $checkmaxwidth )) { + if ($mawnon > $maxcalcmaw) { + $mawsurplusnonpc = round((($mawnon * $sumnonpc / 100) - $mawleft),3); + $checkmaxwidth = $mawnon; + } + else { $checkmaxwidth = $maxcalcmaw; } + for( $i = 0 ; $i < $nc ; $i++ ) { + if (isset($table['wc'][$i]['wpercent'])) { + $newmaw = $checkmaxwidth * $table['wc'][$i]['wpercent']/100; + if ($table['wc'][$i]['maw'] < $newmaw) { + $table['wc'][$i]['maw'] = $newmaw; + } + $table['wc'][$i]['w'] = 1; + } + else if ($mawsurplusnonpc && !$table['wc'][$i]['w']) { + $table['wc'][$i]['maw'] += $mawsurplusnonpc / $mawleftcount; + } + if ($table['wc'][$i]['maw'] < $table['wc'][$i]['miw']) { $table['wc'][$i]['maw'] = $table['wc'][$i]['miw']; } + } + } + if ($checkminwidth > $checkmaxwidth) { $checkmaxwidth = $checkminwidth; } + } + } + + if (isset($table['wpercent']) && $table['wpercent']) { + $checkminwidth *= (100 / $table['wpercent']); + $checkmaxwidth *= (100 / $table['wpercent']); + } + + + $checkminwidth += $tblbw ; + $checkmaxwidth += $tblbw ; + + // Table['miw'] set by percent in first pass may be larger than sum of column miw + if ((isset($table['miw']) && $checkminwidth > $table['miw']) || !isset($table['miw'])) { $table['miw'] = $checkminwidth; } + if ((isset($table['maw']) && $checkmaxwidth > $table['maw']) || !isset($table['maw'])) { $table['maw'] = $checkmaxwidth; } + $table['tl'] = $totallength ; + + + if (!$this->tableCJK) { + if ($this->table_rotate) { + $mxw = $this->tbrot_maxw; + } + else { + $mxw = $this->blk[$this->blklvl]['inner_width']; + } + if(!isset($table['overflow'])) { $table['overflow'] = null; } + if ($table['overflow']=='visible') { + return array(0,0); + } + else if ($table['overflow']=='hidden' && !$this->table_rotate && !$this->ColActive && $checkminwidth > $mxw) { + $table['w'] = $table['miw']; + return array(0,0); + } + else if ($table['overflow']=='wrap') { return array(0,0); } + + if (isset($table['w']) && $table['w'] ) { + if ($table['w'] >= $checkminwidth && $table['w'] <= $mxw) { $table['maw'] = $mxw = $table['w']; } + else if ($table['w'] >= $checkminwidth && $table['w'] > $mxw && $this->keep_table_proportions) { $checkminwidth = $table['w']; } + else { + unset($table['w']); + } + } + $ratio = $checkminwidth/$mxw; + if ($checkminwidth > $mxw) { return array(($ratio +0.001),$checkminwidth); } // 0.001 to allow for rounded numbers when resizing + } + unset($cs); + return array(0,0); +} + + + +function _tableWidth(&$table){ + $widthcols = &$table['wc']; + $numcols = $table['nc']; + $tablewidth = 0; + if ($table['borders_separate']) { + $tblbw = $table['border_details']['L']['w'] + $table['border_details']['R']['w'] + $table['margin']['L'] + $table['margin']['R'] + $table['padding']['L'] + $table['padding']['R'] + $table['border_spacing_H']; + } + else { $tblbw = $table['max_cell_border_width']['L']/2 + $table['max_cell_border_width']['R']/2 + $table['margin']['L'] + $table['margin']['R']; } + + if ($table['level']>1 && isset($table['w'])) { + if (isset($table['wpercent']) && $table['wpercent']) { + $table['w'] = $temppgwidth = (($table['w']-$tblbw) * $table['wpercent'] / 100) + $tblbw ; + } + else { + $temppgwidth = $table['w'] ; + } + } + else if ($this->table_rotate) { + $temppgwidth = $this->tbrot_maxw; + // If it is less than 1/20th of the remaining page height to finish the DIV (i.e. DIV padding + table bottom margin) + // then allow for this + $enddiv = $this->blk[$this->blklvl]['padding_bottom'] + $this->blk[$this->blklvl]['border_bottom']['w']; + if ($enddiv/$temppgwidth <0.05) { $temppgwidth -= $enddiv; } + } + else { + if (isset($table['w']) && $table['w']< $this->blk[$this->blklvl]['inner_width']) { + $notfullwidth = 1; + $temppgwidth = $table['w'] ; + } + else if ($table['overflow']=='visible' && $table['level'] ==1) { + $temppgwidth = null; + } + else if ($table['overflow']=='hidden' && !$this->ColActive && isset($table['w']) && $table['w'] > $this->blk[$this->blklvl]['inner_width'] && $table['w']==$table['miw']) { + //$temppgwidth = $this->blk[$this->blklvl]['inner_width']; + $temppgwidth = $table['w'] ; + } + else { $temppgwidth = $this->blk[$this->blklvl]['inner_width']; } + } + + + $totaltextlength = 0; // Added - to sum $table['l'][colno] + $totalatextlength = 0; // Added - to sum $table['l'][colno] for those columns where width not set + $percentages_set = 0; + for ( $i = 0 ; $i < $numcols ; $i++ ) { + if (isset($widthcols[$i]['wpercent'])) { $tablewidth += $widthcols[$i]['maw']; $percentages_set = 1; } + else if (isset($widthcols[$i]['w'])) { $tablewidth += $widthcols[$i]['miw']; } + else { $tablewidth += $widthcols[$i]['maw']; } + $totaltextlength += $table['l'][$i]; + } + if (!$totaltextlength) { $totaltextlength =1; } + $tablewidth += $tblbw; // Outer half of table borders + + if ($tablewidth > $temppgwidth) { + $table['w'] = $temppgwidth; + } + // if any widths set as percentages and max width fits < page width + else if ($tablewidth < $temppgwidth && !isset($table['w']) && $percentages_set) { + $table['w'] = $table['maw']; + } + // if table width is set and is > allowed width + if (isset($table['w']) && $table['w'] > $temppgwidth) { $table['w'] = $temppgwidth; } + // IF the table width is now set - Need to distribute columns widths + if (isset($table['w'])) { + $wis = $wisa = 0; + $list = array(); + $notsetlist = array(); + for( $i = 0 ; $i < $numcols ; $i++ ) { + $wis += $widthcols[$i]['miw']; + if (!isset($widthcols[$i]['w']) || ($widthcols[$i]['w'] && $table['w'] > $temppgwidth && !$this->keep_table_proportions && !$notfullwidth )){ + $list[] = $i; + $wisa += $widthcols[$i]['miw']; + $totalatextlength += $table['l'][$i]; + } + } + if (!$totalatextlength) { $totalatextlength =1; } + + // Allocate spare (more than col's minimum width) across the cols according to their approx total text length + // Do it by setting minimum width here + if ($table['w'] > $wis + $tblbw) { + // First set any cell widths set as percentages + if ($table['w'] < $temppgwidth || $this->keep_table_proportions) { + for($k=0;$k<$numcols;$k++) { + if (isset($widthcols[$k]['wpercent'])) { + $curr = $widthcols[$k]['miw']; + $widthcols[$k]['miw'] = ($table['w']-$tblbw) * $widthcols[$k]['wpercent']/100; + $wis += $widthcols[$k]['miw'] - $curr; + $wisa += $widthcols[$k]['miw'] - $curr; + } + } + } + // Now allocate surplus up to maximum width of each column + $surplus = 0; $ttl = 0; // number of surplus columns + if (!count($list)) { + $wi = ($table['w']-($wis + $tblbw)); // i.e. extra space to distribute + for($k=0;$k<$numcols;$k++) { + $spareratio = ($table['l'][$k] / $totaltextlength); // gives ratio to divide up free space + // Don't allocate more than Maximum required width - save rest in surplus + if ($widthcols[$k]['miw'] + ($wi * $spareratio) > $widthcols[$k]['maw']) { + $surplus += ($wi * $spareratio) - ($widthcols[$k]['maw']-$widthcols[$k]['miw']); + $widthcols[$k]['miw'] = $widthcols[$k]['maw']; + } + else { + $notsetlist[] = $k; + $ttl += $table['l'][$k]; + $widthcols[$k]['miw'] += ($wi * $spareratio); + } + + } + } + else { + $wi = ($table['w'] - ($wis + $tblbw)); // i.e. extra space to distribute + foreach ($list as $k) { + $spareratio = ($table['l'][$k] / $totalatextlength); // gives ratio to divide up free space + // Don't allocate more than Maximum required width - save rest in surplus + if ($widthcols[$k]['miw'] + ($wi * $spareratio) > $widthcols[$k]['maw']) { + $surplus += ($wi * $spareratio) - ($widthcols[$k]['maw']-$widthcols[$k]['miw']); + $widthcols[$k]['miw'] = $widthcols[$k]['maw']; + } + else { + $notsetlist[] = $k; + $ttl += $table['l'][$k]; + $widthcols[$k]['miw'] += ($wi * $spareratio); + } + } + } + // If surplus still left over apportion it across columns + if ($surplus) { + // if some are set only add to remaining - otherwise add to all of them + if (count($notsetlist) && count($notsetlist) < $numcols) { + foreach ($notsetlist AS $i) { + if ($ttl) $widthcols[$i]['miw'] += $surplus * $table['l'][$i] / $ttl ; + } + } + // If some widths are defined, and others have been added up to their maxmum + else if (count($list) && count($list) < $numcols) { + foreach ($list AS $i) { + $widthcols[$i]['miw'] += $surplus / count($list) ; + } + } + else if ($numcols) { // If all columns + $ttl = array_sum($table['l']); + for ($i=0;$i<$numcols;$i++) { + $widthcols[$i]['miw'] += $surplus * $table['l'][$i] / $ttl; + } + } + } + + } + + // This sets the columns all to minimum width (which has been increased above if appropriate) + for ($i=0;$i<$numcols;$i++) { + $widthcols[$i] = $widthcols[$i]['miw']; + } + + // TABLE NOT WIDE ENOUGH EVEN FOR MINIMUM CONTENT WIDTH + // If sum of column widths set are too wide for table + $checktablewidth = 0; + for ( $i = 0 ; $i < $numcols ; $i++ ) { + $checktablewidth += $widthcols[$i]; + } + if ($checktablewidth > ($temppgwidth + 0.001 - $tblbw)) { + $usedup = 0; $numleft = 0; + for ($i=0;$i<$numcols;$i++) { + if ((isset($widthcols[$i]) && $widthcols[$i] > (($temppgwidth - $tblbw) / $numcols)) && (!isset($widthcols[$i]['w']))) { + $numleft++; + unset($widthcols[$i]); + } + else { $usedup += $widthcols[$i]; } + } + for ($i=0;$i<$numcols;$i++) { + if (!isset($widthcols[$i]) || !$widthcols[$i]) { + $widthcols[$i] = ((($temppgwidth - $tblbw) - $usedup)/ ($numleft)); + } + } + } + + } + else { //table has no width defined + $table['w'] = $tablewidth; + for ( $i = 0 ; $i < $numcols ; $i++) { + if (isset($widthcols[$i]['wpercent']) && $this->keep_table_proportions) { $colwidth = $widthcols[$i]['maw']; } + else if (isset($widthcols[$i]['w'])) { $colwidth = $widthcols[$i]['miw']; } + else { $colwidth = $widthcols[$i]['maw']; } + unset($widthcols[$i]); + $widthcols[$i] = $colwidth; + } + } + + if ($table['overflow']=='visible' && $table['level'] ==1) { + if ($tablewidth > $this->blk[$this->blklvl]['inner_width']) { + if ($this->cacheTables) { $fh = fopen($table['cache'], "r+b"); } + else { $fh = null; } + for ($j = 0 ; $j < $numcols; $j++) { //columns + for ($i = 0 ; $i < $table['nr']; $i++) { //rows + if (isset($table['cells'][$i][$j]) && $table['cells'][$i][$j]) { + if ($this->cacheTables) { + $cc = $this->_uncacheCell($table['cells'][$i][$j], '', $fh); + $colspan = $cc['colspan']; + } + else + $colspan = $table['cells'][$i][$j]['colspan']; + if ($colspan > 1) { + $w = 0; + for ($c = $j; $c < ($j + $colspan); $c++) { + $w += $widthcols[$c]; + } + if ($w > $this->blk[$this->blklvl]['inner_width']) { + $diff = $w - ($this->blk[$this->blklvl]['inner_width'] - $tblbw); + for ($c = $j; $c < ($j + $colspan); $c++) { + $widthcols[$c] -= $diff * ($widthcols[$c]/$w); + } + $table['w'] -= $diff; + $table['csp'][$j] = $w - $diff; + } + } + } + + } + } + if ($this->cacheTables) { fclose($fh); } + } + $pgNo = 0; + $currWc = 0; + for ($i = 0 ; $i < $numcols; $i++) { //columns + if (isset($table['csp'][$i])) { + $w = $table['csp'][$i]; + unset($table['csp'][$i]); + } + else { $w = $widthcols[$i]; } + if (($currWc + $w + $tblbw) > $this->blk[$this->blklvl]['inner_width']) { + $pgNo++; + $currWc = $widthcols[$i] ; + } + else { $currWc += $widthcols[$i] ; } + $table['colPg'][$i] = $pgNo; + } + } +} + + + +function _tableHeight(&$table){ + $level = $table['level']; + $levelid = $table['levelid']; + $cells = &$table['cells']; + $numcols = $table['nc']; + $numrows = $table['nr']; + $listspan = array(); + $checkmaxheight = 0; + $headerrowheight = 0; + $checkmaxheightplus = 0; + $headerrowheightplus = 0; + $firstrowheight = 0; + + $footerrowheight = 0; + $footerrowheightplus = 0; + if ($this->table_rotate) { + $temppgheight = $this->tbrot_maxh; + $remainingpage = $this->tbrot_maxh; + } + else { + $temppgheight = ($this->h - $this->bMargin - $this->tMargin) - $this->kwt_height; + $remainingpage = ($this->h - $this->bMargin - $this->y) - $this->kwt_height; + + // If it is less than 1/20th of the remaining page height to finish the DIV (i.e. DIV padding + table bottom margin) + // then allow for this + $enddiv = $this->blk[$this->blklvl]['padding_bottom'] + $this->blk[$this->blklvl]['border_bottom']['w'] + $table['margin']['B']; + if ($remainingpage > $enddiv && $enddiv/$remainingpage <0.05) { $remainingpage -= $enddiv; } + else if ($remainingpage == 0) { $remainingpage = 0.001; } + if ($temppgheight > $enddiv && $enddiv/$temppgheight <0.05) { $temppgheight -= $enddiv; } + else if ($temppgheight == 0) { $temppgheight = 0.001; } + } + if ($remainingpage < 0) { $remainingpage = 0.001; } // mPDF 5.6.64 + if ($temppgheight < 0) { $temppgheight = 0.001; } // mPDF 5.6.64 + + if ($this->cacheTables) { $fh = fopen($table['cache'], "r+b"); } + else { $fh = null; } + + for( $i = 0 ; $i < $numrows ; $i++ ) { //rows + $heightrow = &$table['hr'][$i]; + for( $j = 0 ; $j < $numcols ; $j++ ) { //columns + if (isset($cells[$i][$j]) && $cells[$i][$j]) { + if ($this->cacheTables) { + $c = $this->_uncacheCell($table['cells'][$i][$j], '', $fh); + } + else + $c = &$cells[$i][$j]; + + if ($this->simpleTables){ + if ($table['borders_separate']) { // NB twice border width + $extraWLR = ($table['simple']['border_details']['L']['w']+$table['simple']['border_details']['R']['w']) + ($c['padding']['L']+$c['padding']['R'])+$table['border_spacing_H']; + $extrh = ($table['simple']['border_details']['T']['w']+$table['simple']['border_details']['B']['w']) + ($c['padding']['T']+$c['padding']['B'])+$table['border_spacing_V']; + } + else { + $extraWLR = ($table['simple']['border_details']['L']['w']+$table['simple']['border_details']['R']['w'])/2 + ($c['padding']['L']+$c['padding']['R']); + $extrh = ($table['simple']['border_details']['T']['w']+$table['simple']['border_details']['B']['w'])/2 + ($c['padding']['T']+$c['padding']['B']); + } + } + else { + if ($this->packTableData) { + list($bt,$br,$bb,$bl) = $this->_getBorderWidths($c['borderbin']); + } + else { + $bt = $c['border_details']['T']['w']; + $bb = $c['border_details']['B']['w']; + $br = $c['border_details']['R']['w']; + $bl = $c['border_details']['L']['w']; + } + if ($table['borders_separate']) { // NB twice border width + $extraWLR = $bl + $br + $c['padding']['L'] + $c['padding']['R'] + $table['border_spacing_H']; + $extrh = $bt + $bb + $c['padding']['T'] + $c['padding']['B'] + $table['border_spacing_V']; + } + else { + $extraWLR = $bl/2 + $br/2 + $c['padding']['L'] + $c['padding']['R']; + $extrh = $bt/2 + $bb/2 + $c['padding']['T']+$c['padding']['B']; + } + } + + if ($table['overflow']=='visible' && $level==1) + list($x,$cw) = $this->_splitTableGetWidth($table, $i,$j, $fh); + else + list($x,$cw) = $this->_tableGetWidth($table, $i,$j, $fh); + + // Get CELL HEIGHT + // ++ extra parameter forces wrap to break word + if ($c['R'] && isset($c['textbuffer'])) { // mPDF 5.4.01 + $str = ''; + foreach($c['textbuffer'] AS $t) { $str .= $t[0].' '; } + $str = trim($str); + $s_fs = $this->FontSizePt; + $s_f = $this->FontFamily; + $s_st = $this->FontStyle; + $this->SetFont($c['textbuffer'][0][4],$c['textbuffer'][0][2],$c['textbuffer'][0][11] / $this->shrin_k,true,true); + $tempch = $this->GetStringWidth($str); + if ($c['R'] >= 45 && $c['R'] < 90) { + $tempch = ((sin(deg2rad($c['R']))) * $tempch ) + ((sin(deg2rad($c['R']))) * (($c['textbuffer'][0][11]/_MPDFK) / $this->shrin_k)); + } + $this->SetFont($s_f,$s_st,$s_fs,true,true); + $ch = ($tempch ) + $extrh ; + } + else { + if (isset($c['textbuffer'])) { + $tempch = $this->TableWordWrap(($cw-$extraWLR),1,$c['textbuffer'], $c['dfs']); + } + else { $tempch = 0; } + + // Added cellpadding top and bottom. (Lineheight already adjusted to table_lineheight) + $ch = $tempch + $extrh ; + } + //If height is defined and it is bigger than calculated $ch then update values + if (isset($c['h']) && $c['h'] > $ch) { + $c['mih'] = $ch; //in order to keep valign working + $ch = $c['h']; + } + else $c['mih'] = $ch; + if ($this->cacheTables) { + $this->_cacheUpdateMtx($c, $fh, $table['cells'][$i][$j], 'mih'); + } + if (isset($c['rowspan'])) $listspan[] = array($i,$j); + elseif ($heightrow < $ch) $heightrow = $ch; + + // this is the extra used in _tableWrite to determine whether to trigger a page change + if ($table['borders_separate']) { + if ($i == ($numrows-1) || (isset($c['rowspan']) && ($i+$c['rowspan']) == ($numrows)) ) { + $extra = $table['margin']['B'] + $table['padding']['B'] + $table['border_details']['B']['w'] + $table['border_spacing_V']/2; + } + else { + $extra = $table['border_spacing_V']/2; + } + } + else { + if (!$this->simpleTables){ + $extra = $bb/2; + } + else if ($this->simpleTables){ + $extra = $table['simple']['border_details']['B']['w'] /2; + } + } + if (isset($table['is_thead'][$i]) && $table['is_thead'][$i]) { + if ($j==0) { + $headerrowheight += $ch; + $headerrowheightplus += $ch+$extra; + } + } + else if (isset($table['is_tfoot'][$i]) && $table['is_tfoot'][$i]) { + if ($j==0) { + $footerrowheight += $ch; + $footerrowheightplus += $ch+$extra; + } + } + else { + $checkmaxheight = max($checkmaxheight,$ch); + $checkmaxheightplus = max($checkmaxheightplus,$ch+$extra); + } + if ($this->tableLevel==1 && $i == $table['headernrows']) { $firstrowheight = max($ch,$firstrowheight); } + unset($c); + } + }//end of columns + }//end of rows + + $heightrow = &$table['hr']; + foreach ($listspan as $span) { + list($i,$j) = $span; + if ($this->cacheTables) { + $c = $this->_uncacheCell($table['cells'][$i][$j], '', $fh); + } + else + $c = &$cells[$i][$j]; + $lr = $i + $c['rowspan']; + if ($lr > $numrows) $lr = $numrows; + $hs = $hsa = 0; + $list = array(); + for($k=$i;$k<$lr;$k++) { + $hs += $heightrow[$k]; + if (!isset($c['h'])) { + $list[] = $k; + $hsa += $heightrow[$k]; + } + } + + if ($table['borders_separate']) { + if ($i == ($numrows-1) || ($i+$c['rowspan']) == ($numrows) ) { + $extra = $table['margin']['B'] + $table['padding']['B'] + $table['border_details']['B']['w'] + $table['border_spacing_V']/2; + } + else { + $extra = $table['border_spacing_V']/2; + } + } + else { + if (!$this->simpleTables){ + if ($this->packTableData) { + list($bt,$br,$bb,$bl) = $this->_getBorderWidths($c['borderbin']); + } + else { + $bb = $c['border_details']['B']['w']; + } + $extra = $bb/2; + } + else if ($this->simpleTables){ + $extra = $table['simple']['border_details']['B']['w'] /2; + } + } + if (!empty($table['is_thead'][$i])) { + $headerrowheight = max($headerrowheight,$hs); + $headerrowheightplus = max($headerrowheightplus,$hs+$extra); + } + else if (!empty($table['is_tfoot'][$i])) { + $footerrowheight = max($footerrowheight,$hs); + $footerrowheightplus = max($footerrowheightplus,$hs+$extra); + } + else { + $checkmaxheight = max($checkmaxheight,$hs); + $checkmaxheightplus = max($checkmaxheightplus,$hs+$extra); + } + if ($this->tableLevel==1 && $i == $table['headernrows']) { $firstrowheight = max($hs,$firstrowheight); } + + if ($c['mih'] > $hs) { + if (!$hs) { + for($k=$i;$k<$lr;$k++) $heightrow[$k] = $c['mih']/$c['rowspan']; + } + elseif (!count($list)) { + $hi = $c['mih'] - $hs; + for($k=$i;$k<$lr;$k++) $heightrow[$k] += ($heightrow[$k]/$hs)*$hi; + } + else { + $hi = $c['mih'] - $hsa; + foreach ($list as $k) $heightrow[$k] += ($heightrow[$k]/$hsa)*$hi; + } + } + unset($c); + + // If rowspans overlap so that one or more rows do not have a height set... + // i.e. for one or more rows, the only cells (explicit) in that row have rowspan>1 + // so heightrow is still == 0 + if ($heightrow[$i]==0) { + // Get row extent to analyse above and below + $top = $i; + foreach ($listspan as $checkspan) { + list($cki,$ckj) = $checkspan; + if ($this->cacheTables) { + $c = $this->_uncacheCell($table['cells'][$cki][$ckj], '', $fh); + } + else + $c = &$cells[$cki][$ckj]; + if (isset($c['rowspan']) && $c['rowspan']>1) { + if (($cki + $c['rowspan']-1) >= $i) { $top = min($top, $cki); } + } + } + $bottom = $i + $c['rowspan']-1; + // Check for overconstrained conditions + for ($k=$top; $k<=$bottom; $k++) { + // if ['hr'] for any of the others is also 0, then abort (too complicated) + if ($k != $i && $heightrow[$k]==0) { break(1); } + // check again that top and bottom are not crossed by rowspans - or abort (too complicated) + if ($k==$top) { + // ???? take account of colspan as well??? + for( $m = 0 ; $m < $numcols ; $m++ ) { //columns + if (!isset($cells[$k][$m]) || $cells[$k][$m]==0) { + break(2); + } + } + } + else if ($k==$bottom) { + // ???? take account of colspan as well??? + for( $m = 0 ; $m < $numcols ; $m++ ) { //columns + if ($this->cacheTables) { + $c = $this->_uncacheCell($table['cells'][$k][$m], '', $fh); + } + else + $c = &$cells[$k][$m]; + if (isset($c['rowspan']) && $c['rowspan']>1) { + break(2); + } + } + } + } + // By columns add up col height using ['h'] if set or ['mih'] if not + // Intentionally do not substract border-spacing + $colH = array(); + $extH = 0; + $newhr = array(); + for( $m = 0 ; $m < $numcols ; $m++ ) { //columns + for ($k=$top; $k<=$bottom; $k++) { + if (isset($cells[$k][$m]) && $cells[$k][$m]!=0) { + if ($this->cacheTables) { + $c = $this->_uncacheCell($table['cells'][$k][$m], '', $fh); + } + else + $c = &$cells[$k][$m]; + if (isset($c['h']) && $c['h']) { + $useh = $c['h']; + } + // ???? take account of colspan as well??? + else { + $useh = $c['mih']; + } + $colH[$m] += $useh; + if (!isset($c['rowspan']) || $c['rowspan']<2) { $newhr[$k] = max($newhr[$k], $useh); } + } + } + $extH = max($tabH, $colH[$m]); + } + $newhr[$i] = $extH - array_sum($newhr); + for ($k=$top; $k<=$bottom; $k++) { $heightrow[$k] = $newhr[$k]; } + } + + + unset($c); + } + + $table['h'] = array_sum($heightrow); + unset($heightrow); + + if ($this->cacheTables) { fclose($fh); } + + if ($table['borders_separate']) { + $table['h'] += $table['margin']['T'] + $table['margin']['B'] + $table['border_details']['T']['w'] + $table['border_details']['B']['w'] + $table['border_spacing_V'] + $table['padding']['T'] + $table['padding']['B']; + } + else { + $table['h'] += $table['margin']['T'] + $table['margin']['B'] + $table['max_cell_border_width']['T']/2 + $table['max_cell_border_width']['B']/2; + } + + $maxrowheight = $checkmaxheightplus + $headerrowheightplus + $footerrowheightplus; + $maxfirstrowheight = $firstrowheight + $headerrowheightplus + $footerrowheightplus; // includes thead, 1st row and tfoot + return array($table['h'],$maxrowheight,$temppgheight,$remainingpage,$maxfirstrowheight); +} + +function _tableGetWidth(&$table, $i,$j, $fh){ + if ($this->cacheTables) { + $cell = $this->_uncacheCell($table['cells'][$i][$j], '', $fh); + } + else + $cell = &$table['cells'][$i][$j]; + if ($cell) { + if (isset($cell['x0'])) { return array($cell['x0'], $cell['w0']); } + $x = 0; + $widthcols = &$table['wc']; + for( $k = 0 ; $k < $j ; $k++ ) $x += $widthcols[$k]; + $w = $widthcols[$j]; + if (isset($cell['colspan'])) { + for ( $k = $j+$cell['colspan']-1 ; $k > $j ; $k-- ) $w += $widthcols[$k]; + } + $cell['x0'] = $x; + $cell['w0'] = $w; + if ($this->cacheTables) { + $this->_cacheUpdateMtx($cell, $fh, $table['cells'][$i][$j], 'x0'); + } + return array($x, $w); + } + return array(0,0); +} + +function _splitTableGetWidth(&$table, $i,$j, $fh){ + if ($this->cacheTables) { + $cell = $this->_uncacheCell($table['cells'][$i][$j], '', $fh); + } + else + $cell = &$table['cells'][$i][$j]; + if ($cell) { + if (isset($cell['x0'])) return array($cell['x0'], $cell['w0']); + $x = 0; + $widthcols = &$table['wc']; + $pg = $table['colPg'][$j]; + for( $k = 0 ; $k < $j ; $k++ ) { + if ($table['colPg'][$k]==$pg) $x += $widthcols[$k]; + } + $w = $widthcols[$j]; + if (isset($cell['colspan'])) { + for ( $k = $j+$cell['colspan']-1 ; $k > $j ; $k-- ) if ($table['colPg'][$k]==$pg) $w += $widthcols[$k]; + } + $cell['x0'] = $x; + $cell['w0'] = $w; + if ($this->cacheTables) { + $this->_cacheUpdateMtx($cell, $fh, $table['cells'][$i][$j], 'x0'); + } + return array($x, $w); + } + return array(0,0); +} + + +function _tableGetHeight(&$table, $i,$j, $fh){ + if ($this->cacheTables) { + $cell = $this->_uncacheCell($table['cells'][$i][$j], '', $fh); + } + else + $cell = &$table['cells'][$i][$j]; + if ($cell){ + if (isset($cell['y0'])) return array($cell['y0'], $cell['h0']); + $y = 0; + $heightrow = &$table['hr']; + for ($k=0;$k<$i;$k++) $y += $heightrow[$k]; + $h = $heightrow[$i]; + if (isset($cell['rowspan'])){ + for ($k=$i+$cell['rowspan']-1;$k>$i;$k--) + $h += $heightrow[$k]; + } + $cell['y0'] = $y; + $cell['h0'] = $h; + if ($this->cacheTables) { + $this->_cacheUpdateMtx($cell, $fh, $table['cells'][$i][$j], 'y0'); + } + return array($y, $h); + } + return array(0,0); +} + +function _tableGetMaxRowHeight($table, $row, $fh) { + if ($row==$table['nc']-1) { return $table['hr'][$row]; } + $maxrowheight = $table['hr'][$row]; + for ($i=$row+1;$i<$table['nr'];$i++) { + $cellsset = 0; + for ($j=0;$j<$table['nc'];$j++) { + if ($this->cacheTables) { + $cell = $this->_uncacheCell($table['cells'][$i][$j], '', $fh); + if ($cell) { + if (isset($cell['colspan'])) { $cellsset += $cell['colspan']; } + else $cellsset += 1; + } + } + else { + if ($table['cells'][$i][$j]) { + if (isset($table['cells'][$i][$j]['colspan'])) { $cellsset += $table['cells'][$i][$j]['colspan']; } + else $cellsset += 1; + } + } + } + if ($cellsset == $table['nc']) { return $maxrowheight; } + else { $maxrowheight += $table['hr'][$i]; } + } + return $maxrowheight; +} + + +// CHANGED TO ALLOW TABLE BORDER TO BE SPECIFIED CORRECTLY - added border_details +function _tableRect($x, $y, $w, $h, $bord=-1, $details=array(), $buffer=false, $bSeparate=false, $cort='cell', $tablecorner='', $bsv=0, $bsh=0) { + $cellBorderOverlay = array(); + + if ($bord==-1) { $this->Rect($x, $y, $w, $h); } + else if ($this->simpleTables && ($cort=='cell')) { + $this->SetLineWidth($details['L']['w']); + if ($details['L']['c']) { + $this->SetDColor($details['L']['c']); + } + else { $this->SetDColor($this->ConvertColor(0)); } + $this->SetLineJoin(0); + $this->Rect($x, $y, $w, $h); + } + else if ($bord){ + if (!$bSeparate && $buffer) { + $priority = 'LRTB'; + for($p=0;$p<strlen($priority);$p++) { + $side = $priority[$p]; + $details['p'] = $side ; + + $dom = 0; + if (isset($details[$side]['w'])) { $dom += ($details[$side]['w'] * 100000); } + if (isset($details[$side]['style'])) { $dom += (array_search($details[$side]['style'],$this->borderstyles)*100) ; } + if (isset($details[$side]['dom'])) { $dom += ($details[$side]['dom']*10); } + + // Precedence to darker colours at joins + $coldom = 0; + if (isset($details[$side]['c']) && is_array($details[$side]['c'])) { + if ($details[$side]['c']{0}==3) { // RGB + $coldom = 10-(((ord($details[$side]['c']{1})*1.00)+(ord($details[$side]['c']{2})*1.00)+(ord($details[$side]['c']{3})*1.00))/76.5); + } + } // 10 black - 0 white + if ($coldom) { $dom += $coldom; } + // Lastly precedence to RIGHT and BOTTOM cells at joins + if (isset($details['cellposdom'])) { $dom += $details['cellposdom']; } + + $save = false; + if ($side == 'T' && $this->issetBorder($bord, _BORDER_TOP)) { $cbord = _BORDER_TOP; $save = true; } + else if ($side == 'L' && $this->issetBorder($bord, _BORDER_LEFT)) { $cbord = _BORDER_LEFT; $save = true; } + else if ($side == 'R' && $this->issetBorder($bord, _BORDER_RIGHT)) { $cbord = _BORDER_RIGHT; $save = true; } + else if ($side == 'B' && $this->issetBorder($bord, _BORDER_BOTTOM)) { $cbord = _BORDER_BOTTOM; $save = true; } + + if ($save) { + $this->cellBorderBuffer[] = pack("A16nCnda6A10d14", + str_pad(sprintf("%08.7f", $dom),16,"0",STR_PAD_LEFT), + $cbord, + ord($side), + $details[$side]['s'], + $details[$side]['w'], + $details[$side]['c'], + $details[$side]['style'], + $x, $y, $w, $h, + $details['mbw']['BL'], + $details['mbw']['BR'], + $details['mbw']['RT'], + $details['mbw']['RB'], + $details['mbw']['TL'], + $details['mbw']['TR'], + $details['mbw']['LT'], + $details['mbw']['LB'], + $details['cellposdom'], + 0 + ); + if ($details[$side]['style'] == 'ridge' || $details[$side]['style'] == 'groove' || $details[$side]['style'] == 'inset' || $details[$side]['style'] == 'outset' || $details[$side]['style'] == 'double' ) { + $details[$side]['overlay'] = true; + $this->cellBorderBuffer[] = pack("A16nCnda6A10d14", + str_pad(sprintf("%08.7f", ($dom+4)),16,"0",STR_PAD_LEFT), + $cbord, + ord($side), + $details[$side]['s'], + $details[$side]['w'], + $details[$side]['c'], + $details[$side]['style'], + $x, $y, $w, $h, + $details['mbw']['BL'], + $details['mbw']['BR'], + $details['mbw']['RT'], + $details['mbw']['RB'], + $details['mbw']['TL'], + $details['mbw']['TR'], + $details['mbw']['LT'], + $details['mbw']['LB'], + $details['cellposdom'], + 1 + ); + } + } + } + return; + } + + if (isset($details['p']) && strlen($details['p'])>1) { $priority = $details['p']; } + else { $priority='LTRB'; } + $Tw = 0; + $Rw = 0; + $Bw = 0; + $Lw = 0; + if (isset($details['T']['w'])) { $Tw = $details['T']['w']; } + if (isset($details['R']['w'])) { $Rw = $details['R']['w']; } + if (isset($details['B']['w'])) { $Bw = $details['B']['w']; } + if (isset($details['L']['w'])) { $Lw = $details['L']['w']; } + + $x2 = $x + $w; $y2 = $y + $h; + $oldlinewidth = $this->LineWidth; + + for($p=0;$p<strlen($priority);$p++) { + $side = $priority[$p]; + $xadj = 0; + $xadj2 = 0; + $yadj = 0; + $yadj2 = 0; + $print = false; + if ($Tw && $side=='T' && $this->issetBorder($bord, _BORDER_TOP)) { // TOP + $ly1 = $y; + $ly2 = $y; + $lx1 = $x; + $lx2 = $x2; + $this->SetLineWidth($Tw); + if ($cort == 'cell' || strpos($tablecorner,'L')!==false) { + if ($Tw > $Lw) $xadj = ($Tw - $Lw)/2; + if ($Tw < $Lw) $xadj = ($Tw + $Lw)/2; + } + else { $xadj = $Tw/2 - $bsh/2; } + if ($cort == 'cell' || strpos($tablecorner,'R')!==false) { + if ($Tw > $Rw) $xadj2 = ($Tw - $Rw)/2; + if ($Tw < $Rw) $xadj2 = ($Tw + $Rw)/2; + } + else { $xadj2 = $Tw/2 - $bsh/2; } + if (!$bSeparate && $details['mbw']['TL']) { + $xadj = ($Tw - $details['mbw']['TL'])/2 ; + } + if (!$bSeparate && $details['mbw']['TR']) { + $xadj2 = ($Tw - $details['mbw']['TR'])/2; + } + $print = true; + } + if ($Lw && $side=='L' && $this->issetBorder($bord, _BORDER_LEFT)) { // LEFT + $ly1 = $y; + $ly2 = $y2; + $lx1 = $x; + $lx2 = $x; + $this->SetLineWidth($Lw); + if ($cort == 'cell' || strpos($tablecorner,'T')!==false) { + if ($Lw > $Tw) $yadj = ($Lw - $Tw)/2; + if ($Lw < $Tw) $yadj = ($Lw + $Tw)/2; + } + else { $yadj = $Lw/2 - $bsv/2; } + if ($cort == 'cell' || strpos($tablecorner,'B')!==false) { + if ($Lw > $Bw) $yadj2 = ($Lw - $Bw)/2; + if ($Lw < $Bw) $yadj2 = ($Lw + $Bw)/2; + } + else { $yadj2 = $Lw/2 - $bsv/2; } + if (!$bSeparate && $details['mbw']['LT']) { + $yadj = ($Lw - $details['mbw']['LT'])/2; + } + if (!$bSeparate && $details['mbw']['LB']) { + $yadj2 = ($Lw - $details['mbw']['LB'])/2; + } + $print = true; + } + if ($Rw && $side=='R' && $this->issetBorder($bord, _BORDER_RIGHT)) { // RIGHT + $ly1 = $y; + $ly2 = $y2; + $lx1 = $x2; + $lx2 = $x2; + $this->SetLineWidth($Rw); + if ($cort == 'cell' || strpos($tablecorner,'T')!==false) { + if ($Rw < $Tw) $yadj = ($Rw + $Tw)/2; + if ($Rw > $Tw) $yadj = ($Rw - $Tw)/2; + } + else { $yadj = $Rw/2 - $bsv/2; } + + if ($cort == 'cell' || strpos($tablecorner,'B')!==false) { + if ($Rw > $Bw) $yadj2 = ($Rw - $Bw)/2; + if ($Rw < $Bw) $yadj2 = ($Rw + $Bw)/2; + } + else { $yadj2 = $Rw/2 - $bsv/2; } + + if (!$bSeparate && $details['mbw']['RT']) { + $yadj = ($Rw - $details['mbw']['RT'])/2; + } + if (!$bSeparate && $details['mbw']['RB']) { + $yadj2 = ($Rw - $details['mbw']['RB'])/2; + } + $print = true; + } + if ($Bw && $side=='B' && $this->issetBorder($bord, _BORDER_BOTTOM)) { // BOTTOM + $ly1 = $y2; + $ly2 = $y2; + $lx1 = $x; + $lx2 = $x2; + $this->SetLineWidth($Bw); + if ($cort == 'cell' || strpos($tablecorner,'L')!==false) { + if ($Bw > $Lw) $xadj = ($Bw - $Lw)/2; + if ($Bw < $Lw) $xadj = ($Bw + $Lw)/2; + } + else { $xadj = $Bw/2 - $bsh/2; } + if ($cort == 'cell' || strpos($tablecorner,'R')!==false) { + if ($Bw > $Rw) $xadj2 = ($Bw - $Rw)/2; + if ($Bw < $Rw) $xadj2 = ($Bw + $Rw)/2; + } + else { $xadj2 = $Bw/2 - $bsh/2; } + if (!$bSeparate && $details['mbw']['BL']) { + $xadj = ($Bw - $details['mbw']['BL'])/2; + } + if (!$bSeparate && $details['mbw']['BR']) { + $xadj2 = ($Bw - $details['mbw']['BR'])/2; + } + $print = true; + } + + // Now draw line + if ($print) { +/*-- TABLES-ADVANCED-BORDERS --*/ + if ($details[$side]['style'] == 'double') { + if (!isset($details[$side]['overlay']) || !$details[$side]['overlay'] || $bSeparate) { + if ($details[$side]['c']) { + $this->SetDColor($details[$side]['c']); + } + else { $this->SetDColor($this->ConvertColor(0)); } + $this->Line($lx1 + $xadj, $ly1 + $yadj, $lx2 - $xadj2, $ly2 - $yadj2); + } + if ((isset($details[$side]['overlay']) && $details[$side]['overlay']) || $bSeparate) { + if ($bSeparate && $cort=='table') { + if ($side=='T') { + $xadj -= $this->LineWidth/2; + $xadj2 -= $this->LineWidth; + if ($this->issetBorder($bord, _BORDER_LEFT)) { + $xadj += $this->LineWidth/2; + } + if ($this->issetBorder($bord, _BORDER_RIGHT)) { + $xadj2 += $this->LineWidth; + } + } + if ($side=='L') { + $yadj -= $this->LineWidth/2; + $yadj2 -= $this->LineWidth; + if ($this->issetBorder($bord, _BORDER_TOP)) { + $yadj += $this->LineWidth/2; + } + if ($this->issetBorder($bord, _BORDER_BOTTOM)) { + $yadj2 += $this->LineWidth; + } + } + if ($side=='B') { + $xadj -= $this->LineWidth/2; + $xadj2 -= $this->LineWidth; + if ($this->issetBorder($bord, _BORDER_LEFT)) { + $xadj += $this->LineWidth/2; + } + if ($this->issetBorder($bord, _BORDER_RIGHT)) { + $xadj2 += $this->LineWidth; + } + } + if ($side=='R') { + $yadj -= $this->LineWidth/2; + $yadj2 -= $this->LineWidth; + if ($this->issetBorder($bord, _BORDER_TOP)) { + $yadj += $this->LineWidth/2; + } + if ($this->issetBorder($bord, _BORDER_BOTTOM)) { + $yadj2 += $this->LineWidth; + } + } + } + + $this->SetLineWidth($this->LineWidth/3); + + $tbcol = $this->ConvertColor(255); + for($l=0; $l <= $this->blklvl; $l++) { + if ($this->blk[$l]['bgcolor']) { + $tbcol = ($this->blk[$l]['bgcolorarray']); // mPDF 5.6.53 + } + } + + if ($bSeparate) { + $cellBorderOverlay[] = array( + 'x' => $lx1 + $xadj, + 'y' => $ly1 + $yadj, + 'x2' => $lx2 - $xadj2, + 'y2' => $ly2 - $yadj2, + 'col' => $tbcol, + 'lw' => $this->LineWidth, + ); + } + else { + $this->SetDColor($tbcol); + $this->Line($lx1 + $xadj, $ly1 + $yadj, $lx2 - $xadj2, $ly2 - $yadj2); + } + } + } + + + else if (isset($details[$side]['style']) && ($details[$side]['style'] == 'ridge' || $details[$side]['style'] == 'groove' || $details[$side]['style'] == 'inset' || $details[$side]['style'] == 'outset')) { + if (!isset($details[$side]['overlay']) || !$details[$side]['overlay'] || $bSeparate) { + if ($details[$side]['c']) { + $this->SetDColor($details[$side]['c']); + } + else { $this->SetDColor($this->ConvertColor(0)); } + if ($details[$side]['style'] == 'outset' || $details[$side]['style'] == 'groove') { + $nc = $this->_darkenColor($details[$side]['c']); + $this->SetDColor($nc); + } + else if ($details[$side]['style'] == 'ridge' || $details[$side]['style'] == 'inset') { + $nc = $this->_lightenColor($details[$side]['c']); + $this->SetDColor($nc); + } + $this->Line($lx1 + $xadj, $ly1 + $yadj, $lx2 - $xadj2, $ly2 - $yadj2); + } + if ((isset($details[$side]['overlay']) && $details[$side]['overlay']) || $bSeparate) { + if ($details[$side]['c']) { + $this->SetDColor($details[$side]['c']); + } + else { $this->SetDColor($this->ConvertColor(0)); } + $doubleadj = ($this->LineWidth)/3; + $this->SetLineWidth($this->LineWidth/2); + $xadj3 = $yadj3 = $wadj3 = $hadj3 = 0; + + if ($details[$side]['style'] == 'ridge' || $details[$side]['style'] == 'inset') { + $nc = $this->_darkenColor($details[$side]['c']); + + if ($bSeparate && $cort=='table') { + if ($side=='T') { + $yadj3 = $this->LineWidth/2; + $xadj3 = -$this->LineWidth/2; + $wadj3 = $this->LineWidth; + if ($this->issetBorder($bord, _BORDER_LEFT)) { + $xadj3 += $this->LineWidth; $wadj3 -= $this->LineWidth; + } + if ($this->issetBorder($bord, _BORDER_RIGHT)) { + $wadj3 -= $this->LineWidth*2; + } + } + if ($side=='L') { + $xadj3 = $this->LineWidth/2; + $yadj3 = -$this->LineWidth/2; + $hadj3 = $this->LineWidth; + if ($this->issetBorder($bord, _BORDER_TOP)) { + $yadj3 += $this->LineWidth; $hadj3 -= $this->LineWidth; + } + if ($this->issetBorder($bord, _BORDER_BOTTOM)) { + $hadj3 -= $this->LineWidth*2; + } + } + if ($side=='B') { + $yadj3 = $this->LineWidth/2; + $xadj3 = -$this->LineWidth/2; + $wadj3 = $this->LineWidth; + } + if ($side=='R') { + $xadj3 = $this->LineWidth/2; + $yadj3 = -$this->LineWidth/2; + $hadj3 = $this->LineWidth; + } + } + + else if ($side=='T') { $yadj3 = $this->LineWidth/2; $xadj3 = $this->LineWidth/2; $wadj3 = -$this->LineWidth*2; } + else if ($side=='L') { $xadj3 = $this->LineWidth/2; $yadj3 = $this->LineWidth/2; $hadj3 = -$this->LineWidth*2; } + + else if ($side=='B' && $bSeparate) { $yadj3 = $this->LineWidth/2; $wadj3 = $this->LineWidth/2; } + else if ($side=='R' && $bSeparate) { $xadj3 = $this->LineWidth/2; $hadj3 = $this->LineWidth/2; } + + else if ($side=='B') { $yadj3 = $this->LineWidth/2; $xadj3 = $this->LineWidth/2; } + else if ($side=='R') { $xadj3 = $this->LineWidth/2; $yadj3 = $this->LineWidth/2; } + } + else { + $nc = $this->_lightenColor($details[$side]['c']); + + if ($bSeparate && $cort=='table') { + if ($side=='T') { + $yadj3 = $this->LineWidth/2; + $xadj3 = -$this->LineWidth/2; + $wadj3 = $this->LineWidth; + if ($this->issetBorder($bord, _BORDER_LEFT)) { + $xadj3 += $this->LineWidth; $wadj3 -= $this->LineWidth; + } + } + if ($side=='L') { + $xadj3 = $this->LineWidth/2; + $yadj3 = -$this->LineWidth/2; + $hadj3 = $this->LineWidth; + if ($this->issetBorder($bord, _BORDER_TOP)) { + $yadj3 += $this->LineWidth; $hadj3 -= $this->LineWidth; + } + } + if ($side=='B') { + $yadj3 = $this->LineWidth/2; + $xadj3 = -$this->LineWidth/2; + $wadj3 = $this->LineWidth; + if ($this->issetBorder($bord, _BORDER_LEFT)) { + $xadj3 += $this->LineWidth; $wadj3 -= $this->LineWidth; + } + } + if ($side=='R') { + $xadj3 = $this->LineWidth/2; + $yadj3 = -$this->LineWidth/2; + $hadj3 = $this->LineWidth; + if ($this->issetBorder($bord, _BORDER_TOP)) { + $yadj3 += $this->LineWidth; $hadj3 -= $this->LineWidth; + } + } + } + + else if ($side=='T') { $yadj3 = $this->LineWidth/2; $xadj3 = $this->LineWidth/2; } + else if ($side=='L') { $xadj3 = $this->LineWidth/2; $yadj3 = $this->LineWidth/2; } + + else if ($side=='B' && $bSeparate) { $yadj3 = $this->LineWidth/2; $xadj3 = $this->LineWidth/2; } + else if ($side=='R' && $bSeparate) { $xadj3 = $this->LineWidth/2; $yadj3 = $this->LineWidth/2; } + + else if ($side=='B') { $yadj3 = $this->LineWidth/2; $xadj3 = -$this->LineWidth/2; $wadj3 = $this->LineWidth; } + else if ($side=='R') { $xadj3 = $this->LineWidth/2; $yadj3 = -$this->LineWidth/2; $hadj3 = $this->LineWidth; } + + } + + if ($bSeparate) { + $cellBorderOverlay[] = array( + 'x' => $lx1 + $xadj + $xadj3, + 'y' => $ly1 + $yadj + $yadj3, + 'x2' => $lx2 - $xadj2 + $xadj3 + $wadj3, + 'y2' => $ly2 - $yadj2 + $yadj3 + $hadj3, + 'col' => $nc, + 'lw' => $this->LineWidth, + ); + } + else { + $this->SetDColor($nc); + $this->Line($lx1 + $xadj + $xadj3, $ly1 + $yadj + $yadj3, $lx2 - $xadj2 + $xadj3 + $wadj3, $ly2 - $yadj2 + $yadj3 + $hadj3); + } + } + } + + + else { +/*-- END TABLES-ADVANCED-BORDERS --*/ + if ($details[$side]['style'] == 'dashed') { + $dashsize = 2; // final dash will be this + 1*linewidth + $dashsizek = 1.5; // ratio of Dash/Blank + $this->SetDash($dashsize,($dashsize/$dashsizek)+($this->LineWidth*2)); + } + else if ($details[$side]['style'] == 'dotted') { + $this->SetLineJoin(1); + $this->SetLineCap(1); + $this->SetDash(0.001,($this->LineWidth*2)); + } + if ($details[$side]['c']) { + $this->SetDColor($details[$side]['c']); + } + else { $this->SetDColor($this->ConvertColor(0)); } + $this->Line($lx1 + $xadj, $ly1 + $yadj, $lx2 - $xadj2, $ly2 - $yadj2); +/*-- TABLES-ADVANCED-BORDERS --*/ + } +/*-- END TABLES-ADVANCED-BORDERS --*/ + + // Reset Corners + $this->SetDash(); + //BUTT style line cap + $this->SetLineCap(2); + } + } + + if ($bSeparate && count($cellBorderOverlay)) { + foreach($cellBorderOverlay AS $cbo) { + $this->SetLineWidth($cbo['lw']); + $this->SetDColor($cbo['col']); + $this->Line($cbo['x'], $cbo['y'], $cbo['x2'], $cbo['y2']); + } + } + + // $this->SetLineWidth($oldlinewidth); + // $this->SetDColor($this->ConvertColor(0)); + } +} + + +/*-- TABLES --*/ +/*-- TABLES-ADVANCED-BORDERS --*/ +function _lightenColor($c) { + if (is_array($c)) { die('Color error in _lightencolor'); } + if ($c{0}==3 || $c{0}==5) { // RGB + list($h,$s,$l) = $this->rgb2hsl(ord($c{1})/255,ord($c{2})/255,ord($c{3})/255); + $l += ((1 - $l)*0.8); + list($r,$g,$b) = $this->hsl2rgb($h,$s,$l); + $ret = array(3,$r,$g,$b); + } + else if ($c{0}==4 || $c{0}==6) { // CMYK + $ret = array(4, max(0,(ord($c{1})-20)), max(0,(ord($c{2})-20)), max(0,(ord($c{3})-20)), max(0,(ord($c{4})-20)) ); + } + else if ($c{0}==1) { // Grayscale + $ret = array(1,min(255,(ord($c{1})+32))); + } + $c = array_pad($ret, 6, 0); + $cstr = pack("a1ccccc", $c[0], ($c[1] & 0xFF), ($c[2] & 0xFF), ($c[3] & 0xFF), ($c[4] & 0xFF), ($c[5] & 0xFF) ); + return $cstr; +} + + +function _darkenColor($c) { + if (is_array($c)) { die('Color error in _darkenColor'); } + if ($c{0}==3 || $c{0}==5) { // RGB + list($h,$s,$l) = $this->rgb2hsl(ord($c{1})/255,ord($c{2})/255,ord($c{3})/255); + $s *= 0.25; + $l *= 0.75; + list($r,$g,$b) = $this->hsl2rgb($h,$s,$l); + $ret = array(3,$r,$g,$b); + } + else if ($c{0}==4 || $c{0}==6) { // CMYK + $ret = array(4, min(100,(ord($c{1})+20)), min(100,(ord($c{2})+20)), min(100,(ord($c{3})+20)), min(100,(ord($c{4})+20)) ); + } + else if ($c{0}==1) { // Grayscale + $ret = array(1,max(0,(ord($c{1})-32))); + } + $c = array_pad($ret, 6, 0); + $cstr = pack("a1ccccc", $c[0], ($c[1] & 0xFF), ($c[2] & 0xFF), ($c[3] & 0xFF), ($c[4] & 0xFF), ($c[5] & 0xFF) ); + return $cstr; +} + +/*-- END TABLES-ADVANCED-BORDERS --*/ + + + +function setBorder(&$var, $flag, $set = true) { + $flag = intval($flag); + if ($set) { $set = true; } + $var = intval($var); + $var = $set ? ($var | $flag) : ($var & ~$flag); +} +function issetBorder($var, $flag) { + $flag = intval($flag); + $var = intval($var); + return (($var & $flag) == $flag); +} + + +function _table2cellBorder(&$tableb, &$cbdb, &$cellb, $bval) { + if ($tableb && $tableb['w'] > $cbdb['w']) { + $cbdb = $tableb; + $this->setBorder($cellb, $bval); + } + else if ($tableb && $tableb['w'] == $cbdb['w'] + && array_search($tableb['style'],$this->borderstyles) > array_search($cbdb['style'],$this->borderstyles)) { + $cbdb = $tableb; + $this->setBorder($cellb, $bval); + } +} + +// FIX BORDERS ******************************************** +function _fixTableBorders(&$table){ + if ($this->cacheTables) { $fh = fopen($table['cache'], "r+b"); } + else { $fh = null; } + + if (!$table['borders_separate'] && $table['border_details']['L']['w']) { + $table['max_cell_border_width']['L'] = $table['border_details']['L']['w']; + } + if (!$table['borders_separate'] && $table['border_details']['R']['w']) { + $table['max_cell_border_width']['R'] = $table['border_details']['R']['w']; + } + if (!$table['borders_separate'] && $table['border_details']['T']['w']) { + $table['max_cell_border_width']['T'] = $table['border_details']['T']['w']; + } + if (!$table['borders_separate'] && $table['border_details']['B']['w']) { + $table['max_cell_border_width']['B'] = $table['border_details']['B']['w']; + } + if ($this->simpleTables) { return; } + $cells = &$table['cells']; + $numcols = $table['nc']; + $numrows = $table['nr']; +/*-- TABLES-ADVANCED-BORDERS --*/ + if (isset($table['topntail']) && $table['topntail']) { $tntborddet = $this->border_details($table['topntail']); } + if (isset($table['thead-underline']) && $table['thead-underline']) { $thuborddet = $this->border_details($table['thead-underline']); } +/*-- END TABLES-ADVANCED-BORDERS --*/ + + for( $i = 0 ; $i < $numrows ; $i++ ) { //Rows + for( $j = 0 ; $j < $numcols ; $j++ ) { //Columns + if (isset($cells[$i][$j]) && $cells[$i][$j]) { + if ($this->cacheTables) { + $cell = $this->_uncacheCell($table['cells'][$i][$j], '', $fh); + } + else + $cell = &$cells[$i][$j]; + if ($this->packTableData) { // includes $this->cacheTables + $cbord = $this->_unpackCellBorder($cell['borderbin']); + } + else { + $cbord = &$cells[$i][$j]; + } + + if (!$cbord['border'] && isset($table['border']) && $table['border'] && $this->table_border_attr_set) { + $cbord['border'] = $table['border']; + $cbord['border_details'] = $table['border_details']; + } + + if (isset($cell['colspan']) && $cell['colspan']>1) { $ccolsp = $cell['colspan']; } + else { $ccolsp = 1; } + if (isset($cell['rowspan']) && $cell['rowspan']>1) { $crowsp = $cell['rowspan']; } + else { $crowsp = 1; } + + $cbord['border_details']['cellposdom'] = ((($i+1)/$numrows) / 10000 ) + ((($j+1)/$numcols) / 10 ); + // Inherit Cell border from Table border + if ($this->table_border_css_set && !$table['borders_separate']) { + if ($i == 0) { + $this->_table2cellBorder($table['border_details']['T'], $cbord['border_details']['T'], $cbord['border'], _BORDER_TOP); + } + if ($i == ($numrows-1) || ($i+$crowsp) == ($numrows) ) { + $this->_table2cellBorder($table['border_details']['B'], $cbord['border_details']['B'], $cbord['border'], _BORDER_BOTTOM); + } + if ($j == 0) { + $this->_table2cellBorder($table['border_details']['L'], $cbord['border_details']['L'], $cbord['border'], _BORDER_LEFT); + } + if ($j == ($numcols-1) || ($j+$ccolsp) == ($numcols) ) { + $this->_table2cellBorder($table['border_details']['R'], $cbord['border_details']['R'], $cbord['border'], _BORDER_RIGHT); + } + } + +/*-- TABLES-ADVANCED-BORDERS --*/ + $fixbottom = true; + if (isset($table['topntail']) && $table['topntail']) { + if ($i == 0) { + $cbord['border_details']['T'] = $tntborddet; + $this->setBorder($cbord['border'], _BORDER_TOP); + } + if ($this->tableLevel==1 && $table['headernrows']>0 && $i == $table['headernrows']-1) { + $cbord['border_details']['B'] = $tntborddet; + $this->setBorder($cbord['border'], _BORDER_BOTTOM); + $fixbottom = false; + } + else if ($this->tableLevel==1 && $table['headernrows']>0 && $i == $table['headernrows']) { + if (!$table['borders_separate']) { + $cbord['border_details']['T'] = $tntborddet; + $this->setBorder($cbord['border'], _BORDER_TOP); + } + } + if ($this->tableLevel==1 && $table['footernrows']>0 && $i == ($numrows-$table['footernrows']-1)) { + if (!$table['borders_separate']) { + $cbord['border_details']['B'] = $tntborddet; + $this->setBorder($cbord['border'], _BORDER_BOTTOM); + $fixbottom = false; + } + } + else if ($this->tableLevel==1 && $table['footernrows']>0 && $i == ($numrows-$table['footernrows'])) { + $cbord['border_details']['T'] = $tntborddet; + $this->setBorder($cbord['border'], _BORDER_TOP); + } + if ($this->tabletheadjustfinished) { // $this->tabletheadjustfinished called from tableheader + if (!$table['borders_separate']) { + $cbord['border_details']['T'] = $tntborddet; + $this->setBorder($cbord['border'], _BORDER_TOP); + } + } + if ($i == ($numrows-1) || ($i+$crowsp) == ($numrows) ) { + $cbord['border_details']['B'] = $tntborddet; + $this->setBorder($cbord['border'], _BORDER_BOTTOM); + } + } + if (isset($table['thead-underline']) && $table['thead-underline']) { + if ($table['borders_separate']) { + if ($i == 0) { + $cbord['border_details']['B'] = $thuborddet; + $this->setBorder($cbord['border'], _BORDER_BOTTOM); + $fixbottom = false; + } + } + else { + if ($this->tableLevel==1 && $table['headernrows']>0 && $i == $table['headernrows']-1) { + $cbord['border_details']['T'] = $thuborddet; + $this->setBorder($cbord['border'], _BORDER_TOP); + } + else if ($this->tabletheadjustfinished) { // $this->tabletheadjustfinished called from tableheader + $cbord['border_details']['T'] = $thuborddet; + $this->setBorder($cbord['border'], _BORDER_TOP); + } + } + } + + // Collapse Border - Algorithm for conflicting borders + // Hidden >> Width >> double>solid>dashed>dotted... >> style set on cell>table >> top/left>bottom/right + // Do not turn off border which is overridden + // Needed for page break for TOP/BOTTOM both to be defined in Collapsed borders + // Means it is painted twice. (Left/Right can still disable overridden border) + if (!$table['borders_separate']) { + if (($i < ($numrows-1) || ($i+$crowsp) < $numrows ) && $fixbottom ) { // Bottom + for ($cspi = 0; $cspi<$ccolsp; $cspi++) { + // already defined Top for adjacent cell below + if (isset($cells[($i+$crowsp)][$j+$cspi])) { + if ($this->packTableData) { + if ($this->cacheTables) { + $adjc = $this->_uncacheCell($table['cells'][$i+$crowsp][$j+$cspi], '', $fh); + } + else { $adjc = $cells[($i+$crowsp)][$j+$cspi]; } + $celladj = $this->_unpackCellBorder($adjc['borderbin']); + } + else { $celladj =& $cells[($i+$crowsp)][$j+$cspi]; } + } + else { $celladj = false; } + if ($celladj && $celladj['border_details']['T']['s'] == 1) { + $csadj = $celladj['border_details']['T']['w']; + $csthis = $cbord['border_details']['B']['w']; + // Hidden + if ($cbord['border_details']['B']['style']=='hidden') { + $celladj['border_details']['T'] = $cbord['border_details']['B']; + $this->setBorder($celladj['border'] , _BORDER_TOP, false); + $this->setBorder($cbord['border'] , _BORDER_BOTTOM , false); + } + else if ($celladj['border_details']['T']['style']=='hidden') { + $cbord['border_details']['B'] = $celladj['border_details']['T']; + $this->setBorder($cbord['border'] , _BORDER_BOTTOM , false); + $this->setBorder($celladj['border'] , _BORDER_TOP, false); + } + // Width + else if ($csthis > $csadj) { + if (!isset($cells[($i+$crowsp)][$j+$cspi]['colspan']) || (isset($cells[($i+$crowsp)][$j+$cspi]['colspan']) && $cells[($i+$crowsp)][$j+$cspi]['colspan']<2)) { // don't overwrite bordering cells that span + $celladj['border_details']['T'] = $cbord['border_details']['B']; + $this->setBorder($cbord['border'] , _BORDER_BOTTOM); + } + } + else if ($csadj > $csthis) { + if ($ccolsp < 2) { // don't overwrite this cell if it spans + $cbord['border_details']['B'] = $celladj['border_details']['T']; + $this->setBorder($celladj['border'] , _BORDER_TOP); + } + } + + // double>solid>dashed>dotted... + else if (array_search($cbord['border_details']['B']['style'],$this->borderstyles) > array_search($celladj['border_details']['T']['style'],$this->borderstyles)) { + if (!isset($cells[($i+$crowsp)][$j+$cspi]['colspan']) || (isset($cells[($i+$crowsp)][$j+$cspi]['colspan']) && $cells[($i+$crowsp)][$j+$cspi]['colspan']<2)) { // don't overwrite bordering cells that span + $celladj['border_details']['T'] = $cbord['border_details']['B']; + $this->setBorder($cbord['border'] , _BORDER_BOTTOM ); + } + } + else if (array_search($celladj['border_details']['T']['style'],$this->borderstyles) > array_search($cbord['border_details']['B']['style'],$this->borderstyles)) { + if ($ccolsp < 2) { // don't overwrite this cell if it spans + $cbord['border_details']['B'] = $celladj['border_details']['T']; + $this->setBorder($celladj['border'] , _BORDER_TOP); + } + } + + + + // Style set on cell vs. table + else if ($celladj['border_details']['T']['dom'] > $cbord['border_details']['B']['dom']) { + if ($ccolsp < 2) { // don't overwrite this cell if it spans + $cbord['border_details']['B'] = $celladj['border_details']['T']; + $this->setBorder($celladj['border'] , _BORDER_TOP); + } + } + // Style set on cell vs. table - OR - LEFT/TOP (cell) in preference to BOTTOM/RIGHT + else { + if (!isset($cells[($i+$crowsp)][$j+$cspi]['colspan']) || (isset($cells[($i+$crowsp)][$j+$cspi]['colspan']) && $cells[($i+$crowsp)][$j+$cspi]['colspan']<2)) { // don't overwrite bordering cells that span + $celladj['border_details']['T'] = $cbord['border_details']['B']; + $this->setBorder($cbord['border'] , _BORDER_BOTTOM ); + } + } + } + else if ($celladj) { + if (!isset($cells[($i+$crowsp)][$j+$cspi]['colspan']) || (isset($cells[($i+$crowsp)][$j+$cspi]['colspan']) && $cells[($i+$crowsp)][$j+$cspi]['colspan']<2)) { // don't overwrite bordering cells that span + $celladj['border_details']['T'] = $cbord['border_details']['B']; + } + } + if ($celladj && $this->packTableData) { + $celladj['borderbin'] = $this->_packCellBorder($celladj); + unset($celladj['border']); + unset($celladj['border_details']); + } + if ($this->cacheTables) { + $this->_cacheUpdateBorder($celladj, $fh, $table['cells'][$i+$crowsp][$j+$cspi]); + } + unset($celladj); + } + } + + if ($j < ($numcols-1) || ($j+$ccolsp) < $numcols ) { // Right-Left + for ($cspi = 0; $cspi<$crowsp; $cspi++) { + // already defined Left for adjacent cell to R + if (isset($cells[($i+$cspi)][$j+$ccolsp])) { + if ($this->packTableData) { + if ($this->cacheTables) { + $adjc = $this->_uncacheCell($table['cells'][$i+$cspi][$j+$ccolsp], '', $fh); + } + else { $adjc = $cells[($i+$cspi)][$j+$ccolsp]; } + $celladj = $this->_unpackCellBorder($adjc['borderbin']); + } + else { $celladj =& $cells[$i+$cspi][$j+$ccolsp]; } + } + else { $celladj = false; } + if ($celladj && $celladj['border_details']['L']['s'] == 1) { + $csadj = $celladj['border_details']['L']['w']; + $csthis = $cbord['border_details']['R']['w']; + // Hidden + if ($cbord['border_details']['R']['style']=='hidden') { + $celladj['border_details']['L'] = $cbord['border_details']['R']; + $this->setBorder($celladj['border'] , _BORDER_LEFT, false); + $this->setBorder($cbord['border'] , _BORDER_RIGHT , false); + } + else if ($celladj['border_details']['L']['style']=='hidden') { + $cbord['border_details']['R'] = $celladj['border_details']['L']; + $this->setBorder($cbord['border'] , _BORDER_RIGHT , false); + $this->setBorder($celladj['border'] , _BORDER_LEFT, false); + } + // Width + else if ($csthis > $csadj) { + if (!isset($cells[($i+$cspi)][$j+$ccolsp]['rowspan']) || (isset($cells[($i+$cspi)][$j+$ccolsp]['rowspan']) && $cells[($i+$cspi)][$j+$ccolsp]['rowspan']<2)) { // don't overwrite bordering cells that span + $celladj['border_details']['L'] = $cbord['border_details']['R']; + $this->setBorder($cbord['border'] , _BORDER_RIGHT); + $this->setBorder($celladj['border'] , _BORDER_LEFT, false); + } + } + else if ($csadj > $csthis) { + if ($crowsp < 2) { // don't overwrite this cell if it spans + $cbord['border_details']['R'] = $celladj['border_details']['L']; + $this->setBorder($cbord['border'] , _BORDER_RIGHT, false); + $this->setBorder($celladj['border'] , _BORDER_LEFT); + } + } + + // double>solid>dashed>dotted... + else if (array_search($cbord['border_details']['R']['style'],$this->borderstyles) > array_search($celladj['border_details']['L']['style'],$this->borderstyles)) { + if (!isset($cells[($i+$cspi)][$j+$ccolsp]['rowspan']) || (isset($cells[($i+$cspi)][$j+$ccolsp]['rowspan']) && $cells[($i+$cspi)][$j+$ccolsp]['rowspan']<2)) { // don't overwrite bordering cells that span + $celladj['border_details']['L'] = $cbord['border_details']['R']; + $this->setBorder($celladj['border'] , _BORDER_LEFT, false); + $this->setBorder($cbord['border'] , _BORDER_RIGHT); + } + } + else if (array_search($celladj['border_details']['L']['style'],$this->borderstyles) > array_search($cbord['border_details']['R']['style'],$this->borderstyles)) { + if ($crowsp < 2) { // don't overwrite this cell if it spans + $cbord['border_details']['R'] = $celladj['border_details']['L']; + $this->setBorder($cbord['border'] , _BORDER_RIGHT , false); + $this->setBorder($celladj['border'] , _BORDER_LEFT); + } + } + + + // Style set on cell vs. table + else if ($celladj['border_details']['L']['dom'] > $cbord['border_details']['R']['dom']) { + if ($crowsp < 2) { // don't overwrite this cell if it spans + $cbord['border_details']['R'] = $celladj['border_details']['L']; + $this->setBorder($celladj['border'] , _BORDER_LEFT); + } + } + // Style set on cell vs. table - OR - LEFT/TOP (cell) in preference to BOTTOM/RIGHT + else { + if (!isset($cells[($i+$cspi)][$j+$ccolsp]['rowspan']) || (isset($cells[($i+$cspi)][$j+$ccolsp]['rowspan']) && $cells[($i+$cspi)][$j+$ccolsp]['rowspan']<2)) { // don't overwrite bordering cells that span + $celladj['border_details']['L'] = $cbord['border_details']['R']; + $this->setBorder($cbord['border'] , _BORDER_RIGHT); + } + } + } + else if ($celladj) { + // if right-cell border is not set + if (!isset($cells[($i+$cspi)][$j+$ccolsp]['rowspan']) || (isset($cells[($i+$cspi)][$j+$ccolsp]['rowspan']) && $cells[($i+$cspi)][$j+$ccolsp]['rowspan']<2)) { // don't overwrite bordering cells that span + $celladj['border_details']['L'] = $cbord['border_details']['R']; + } + } + if ($celladj && $this->packTableData) { + $celladj['borderbin'] = $this->_packCellBorder($celladj); + unset($celladj['border']); + unset($celladj['border_details']); + } + if ($this->cacheTables) { + $this->_cacheUpdateBorder($celladj, $fh, $table['cells'][$i+$cspi][$j+$ccolsp]); + } + unset($celladj); + } + } + } + + + // Set maximum cell border width meeting at LRTB edges of cell - used for extended cell border + // ['border_details']['mbw']['LT'] = meeting border width - Left border - Top end + if (!$table['borders_separate']) { + $cbord['border_details']['mbw']['BL'] = max($cbord['border_details']['mbw']['BL'], $cbord['border_details']['L']['w']); + $cbord['border_details']['mbw']['BR'] = max($cbord['border_details']['mbw']['BR'], $cbord['border_details']['R']['w']); + $cbord['border_details']['mbw']['RT'] = max($cbord['border_details']['mbw']['RT'], $cbord['border_details']['T']['w']); + $cbord['border_details']['mbw']['RB'] = max($cbord['border_details']['mbw']['RB'], $cbord['border_details']['B']['w']); + $cbord['border_details']['mbw']['TL'] = max($cbord['border_details']['mbw']['TL'], $cbord['border_details']['L']['w']); + $cbord['border_details']['mbw']['TR'] = max($cbord['border_details']['mbw']['TR'], $cbord['border_details']['R']['w']); + $cbord['border_details']['mbw']['LT'] = max($cbord['border_details']['mbw']['LT'], $cbord['border_details']['T']['w']); + $cbord['border_details']['mbw']['LB'] = max($cbord['border_details']['mbw']['LB'], $cbord['border_details']['B']['w']); + if (($i+$crowsp) < $numrows && isset($cells[$i+$crowsp][$j])) { // Has Bottom adjoining cell + if ($this->packTableData) { + if ($this->cacheTables) { + $adjc = $this->_uncacheCell($table['cells'][$i+$crowsp][$j], '', $fh); + } + else { $adjc = $cells[$i+$crowsp][$j]; } + $celladj = $this->_unpackCellBorder($adjc['borderbin']); + } + else { $celladj =& $cells[$i+$crowsp][$j]; } + $cbord['border_details']['mbw']['BL'] = max($cbord['border_details']['mbw']['BL'], $celladj['border_details']['L']['w'], $celladj['border_details']['mbw']['TL']); + $cbord['border_details']['mbw']['BR'] = max($cbord['border_details']['mbw']['BR'], $celladj['border_details']['R']['w'], $celladj['border_details']['mbw']['TR']); + $cbord['border_details']['mbw']['LB'] = max($cbord['border_details']['mbw']['LB'], $celladj['border_details']['mbw']['LT']); + $cbord['border_details']['mbw']['RB'] = max($cbord['border_details']['mbw']['RB'], $celladj['border_details']['mbw']['RT']); + unset($celladj); + } + if (($j+$ccolsp) < $numcols && isset($cells[$i][$j+$ccolsp])) { // Has Right adjoining cell + if ($this->packTableData) { + if ($this->cacheTables) { + $adjc = $this->_uncacheCell($table['cells'][$i][$j+$ccolsp], '', $fh); + } + else { $adjc = $cells[$i][$j+$ccolsp]; } + $celladj = $this->_unpackCellBorder($adjc['borderbin']); + } + else { $celladj =& $cells[$i][$j+$ccolsp]; } + $cbord['border_details']['mbw']['RT'] = max($cbord['border_details']['mbw']['RT'], $celladj['border_details']['T']['w'], $celladj['border_details']['mbw']['LT']); + $cbord['border_details']['mbw']['RB'] = max($cbord['border_details']['mbw']['RB'], $celladj['border_details']['B']['w'], $celladj['border_details']['mbw']['LB']); + $cbord['border_details']['mbw']['TR'] = max($cbord['border_details']['mbw']['TR'], $celladj['border_details']['mbw']['TL']); + $cbord['border_details']['mbw']['BR'] = max($cbord['border_details']['mbw']['BR'], $celladj['border_details']['mbw']['BL']); + unset($celladj); + } + + if ($i > 0 && isset($cells[$i-1][$j]) && (($this->packTableData && $cells[$i-1][$j]['borderbin']) || $cells[$i-1][$j]['border'])) { // Has Top adjoining cell + if ($this->packTableData) { + if ($this->cacheTables) { + $adjc = $this->_uncacheCell($table['cells'][$i-1][$j], '', $fh); + } + else { $adjc = $cells[$i-1][$j]; } + $celladj = $this->_unpackCellBorder($adjc['borderbin']); + } + else { $celladj =& $cells[$i-1][$j]; } + $cbord['border_details']['mbw']['TL'] = max($cbord['border_details']['mbw']['TL'], $celladj['border_details']['L']['w'], $celladj['border_details']['mbw']['BL']); + $cbord['border_details']['mbw']['TR'] = max($cbord['border_details']['mbw']['TR'], $celladj['border_details']['R']['w'], $celladj['border_details']['mbw']['BR']); + $cbord['border_details']['mbw']['LT'] = max($cbord['border_details']['mbw']['LT'], $celladj['border_details']['mbw']['LB']); + $cbord['border_details']['mbw']['RT'] = max($cbord['border_details']['mbw']['RT'], $celladj['border_details']['mbw']['RB']); + + if ($celladj['border_details']['mbw']['BL']) { + $celladj['border_details']['mbw']['BL'] = max($cbord['border_details']['mbw']['TL'], $celladj['border_details']['mbw']['BL']); + } + if ($celladj['border_details']['mbw']['BR'] ) { + $celladj['border_details']['mbw']['BR'] = max($celladj['border_details']['mbw']['BR'], $cbord['border_details']['mbw']['TR']); + } + if ($this->packTableData) { $cells[$i-1][$j]['borderbin'] = $this->_packCellBorder($celladj); } + unset($celladj); + } + if ($j > 0 && isset($cells[$i][$j-1]) && (($this->packTableData && $cells[$i][$j-1]['borderbin']) || $cells[$i][$j-1]['border'])) { // Has Left adjoining cell + if ($this->packTableData) { + if ($this->cacheTables) { + $adjc = $this->_uncacheCell($table['cells'][$i][$j-1], '', $fh); + } + else { $adjc = $cells[$i][$j-1]; } + $celladj = $this->_unpackCellBorder($adjc['borderbin']); + } + else { $celladj =& $cells[$i][$j-1]; } + $cbord['border_details']['mbw']['LT'] = max($cbord['border_details']['mbw']['LT'], $celladj['border_details']['T']['w'], $celladj['border_details']['mbw']['RT']); + $cbord['border_details']['mbw']['LB'] = max($cbord['border_details']['mbw']['LB'], $celladj['border_details']['B']['w'], $celladj['border_details']['mbw']['RB']); + $cbord['border_details']['mbw']['BL'] = max($cbord['border_details']['mbw']['BL'], $celladj['border_details']['mbw']['BR']); + $cbord['border_details']['mbw']['TL'] = max($cbord['border_details']['mbw']['TL'], $celladj['border_details']['mbw']['TR']); + + if ($celladj['border_details']['mbw']['RT']) { + $celladj['border_details']['mbw']['RT'] = max($celladj['border_details']['mbw']['RT'], $cbord['border_details']['mbw']['LT']); + } + if ($celladj['border_details']['mbw']['RB']) { + $celladj['border_details']['mbw']['RB'] = max($celladj['border_details']['mbw']['RB'], $cbord['border_details']['mbw']['LB']); + } + if ($this->packTableData) { $cells[$i][$j-1]['borderbin'] = $this->_packCellBorder($celladj); } + unset($celladj); + } + + + // Update maximum cell border width at LRTB edges of table - used for overall table width + if ($j == 0 && $cbord['border_details']['L']['w']) { + $table['max_cell_border_width']['L'] = max($table['max_cell_border_width']['L'],$cbord['border_details']['L']['w']); + } + if (($j == ($numcols-1) || ($j+$ccolsp) == $numcols ) && $cbord['border_details']['R']['w']) { + $table['max_cell_border_width']['R'] = max($table['max_cell_border_width']['R'],$cbord['border_details']['R']['w']); + } + if ($i == 0 && $cbord['border_details']['T']['w']) { + $table['max_cell_border_width']['T'] = max($table['max_cell_border_width']['T'],$cbord['border_details']['T']['w']); + } + if (($i == ($numrows-1) || ($i+$crowsp) == $numrows ) && $cbord['border_details']['B']['w']) { + $table['max_cell_border_width']['B'] = max($table['max_cell_border_width']['B'],$cbord['border_details']['B']['w']); + } + } +/*-- END TABLES-ADVANCED-BORDERS --*/ + + if ($this->packTableData) { $cell['borderbin'] = $this->_packCellBorder($cbord); } + + if ($this->cacheTables) { + $this->_cacheUpdateBorder($cell, $fh, $table['cells'][$i][$j]); + } + unset($cbord ); + unset($cell ); + } + } + } + if ($this->cacheTables) { fclose($fh); } + unset($cell ); +} +// END FIX BORDERS ************************************************************************************ + + +function _reverseTableDir(&$table) { + if ($this->cacheTables) { $fh = fopen($table['cache'], "r+b"); } + $cells = &$table['cells']; + $numcols = $table['nc']; + $numrows = $table['nr']; + for( $i = 0 ; $i < $numrows ; $i++ ) { //Rows + $row = array(); + for( $j = ($numcols-1) ; $j >= 0 ; $j-- ) { //Columns + if (isset($cells[$i][$j]) && $cells[$i][$j]) { + if ($this->cacheTables) { + $cell = $this->_uncacheCell($table['cells'][$i][$j], '', $fh); + } + else + $cell = &$cells[$i][$j]; + $col = $numcols - $j - 1; + if (isset($cell['colspan']) && $cell['colspan'] > 1) { $col -= ($cell['colspan']-1); } + // Nested content + for ($n=0; $n < count($cell['textbuffer']); $n++) { + $t = $cell['textbuffer'][$n][0]; + if (substr($t,0,19) == "\xbb\xa4\xactype=nestedtable") { + $objattr = $this->_getObjAttr($t); + $objattr['col'] = $col; + $cell['textbuffer'][$n][0] = "\xbb\xa4\xactype=nestedtable,objattr=".serialize($objattr)."\xbb\xa4\xac"; + $this->table[($this->tableLevel+1)][$objattr['nestedcontent']]['nestedpos'][1] = $col; + if ($this->cacheTables) { + $this->_cacheUpdateTxB($cell, $fh, $table['cells'][$i][$j]); + } + } + } + $row[$col] = $cells[$i][$j]; + unset($cell); + } + } + for($f=0; $f < $numcols; $f++) { + if (!isset($row[$f])) { $row[$f] = 0; } + } + $table['cells'][$i] = $row; + } + if ($this->cacheTables) { fclose($fh); } +} + + +function _tableWrite(&$table, $split=false, $startrow=0, $startcol=0, $splitpg=0, $rety = 0){ + $level = $table['level']; + $levelid = $table['levelid']; + + $cells = &$table['cells']; + $numcols = $table['nc']; + $numrows = $table['nr']; + + if ($this->ColActive && $level==1) { $this->breakpoints[$this->CurrCol][] = $this->y; } // *COLUMNS* + + if (!$split || ($startrow==0 && $splitpg==0) || $startrow>0){ + // TABLE TOP MARGIN + if ($table['margin']['T']) { + if (!$this->table_rotate && $level==1) { + $this->DivLn($table['margin']['T'],$this->blklvl,true,1); // collapsible + } + else { + $this->y += ($table['margin']['T']); + } + } + // Advance down page by half width of top border + if ($table['borders_separate']) { + if ($startrow>0 && (!isset($table['is_thead']) || count($table['is_thead'])==0)) + $adv = $table['border_spacing_V']/2; + else + $adv = $table['padding']['T'] + $table['border_details']['T']['w'] + $table['border_spacing_V']/2; + } + else { + $adv = $table['max_cell_border_width']['T']/2; + } + if (!$this->table_rotate && $level==1) { $this->DivLn($adv); } + else { $this->y += $adv; } + } + + if ($level==1) { + $this->x = $this->lMargin + $this->blk[$this->blklvl]['outer_left_margin'] + $this->blk[$this->blklvl]['padding_left'] + $this->blk[$this->blklvl]['border_left']['w']; + $x0 = $this->x; + $y0 = $this->y; + $right = $x0 + $this->blk[$this->blklvl]['inner_width']; + $outerfilled = $this->y; // Keep track of how far down the outer DIV bgcolor is painted (NB rowspans) + $this->outerfilled = $this->y; + $this->colsums = array(); + } + else { + $x0 = $this->x; + $y0 = $this->y; + $right = $x0 + $table['w']; + } + + if ($this->table_rotate) { + $temppgwidth = $this->tbrot_maxw; + $this->PageBreakTrigger = $pagetrigger = $y0 + ($this->blk[$this->blklvl]['inner_width']); + if ($level==1) { + $this->tbrot_y0 = $this->y - $adv - $table['margin']['T'] ; + $this->tbrot_x0 = $this->x; + $this->tbrot_w = $table['w']; + if ($table['borders_separate']) { $this->tbrot_h = $table['margin']['T'] + $table['padding']['T'] + $table['border_details']['T']['w'] + $table['border_spacing_V']/2; } + else { $this->tbrot_h = $table['margin']['T'] + $table['padding']['T'] + $table['max_cell_border_width']['T']; } + } + } + else { + $this->PageBreakTrigger = $pagetrigger = ($this->h - $this->bMargin); + if ($level==1) { + $temppgwidth = $this->blk[$this->blklvl]['inner_width']; + if (isset($table['a']) and ($table['w'] < $this->blk[$this->blklvl]['inner_width'])) { + if ($table['a']=='C') { $x0 += ((($right-$x0) - $table['w'])/2); } + else if ($table['a']=='R') { $x0 = $right - $table['w']; } + } + } + else { + $temppgwidth = $table['w']; + } + } + if(!isset($table['overflow'])) { $table['overflow'] = null; } + if ($table['overflow']=='hidden' && $level==1 && !$this->table_rotate && !$this->ColActive) { + //Bounding rectangle to clip + $this->tableClipPath = sprintf('q %.3F %.3F %.3F %.3F re W n',$x0*_MPDFK,$this->h*_MPDFK,$this->blk[$this->blklvl]['inner_width']*_MPDFK,-$this->h*_MPDFK); + $this->_out($this->tableClipPath); + } + else { $this->tableClipPath = ''; } + + + if ($table['borders_separate']) { $indent = $table['margin']['L'] + $table['border_details']['L']['w'] + $table['padding']['L'] + $table['border_spacing_H']/2; } + else { $indent = $table['margin']['L'] + $table['max_cell_border_width']['L']/2; } + $x0 += $indent; + + $returny = 0; + $lastCol = 0; + $tableheader = array(); + $tablefooter = array(); + $tableheaderrowheight = 0; + $tablefooterrowheight = 0; + $footery = 0; + + // mPD 3.0 Set the Page & Column where table starts + if (($this->mirrorMargins) && (($this->page)%2==0)) { // EVEN + $tablestartpage = 'EVEN'; + } + else if (($this->mirrorMargins) && (($this->page)%2==1)) { // ODD + $tablestartpage = 'ODD'; + } + else { $tablestartpage = ''; } + if ($this->ColActive) { $tablestartcolumn = $this->CurrCol; } + else { $tablestartcolumn = ''; } + + if ($this->cacheTables) { $fh = fopen($table['cache'], "r+b"); } + else { $fh = null; } + + $y = $h = 0; + for( $i = 0; $i < $numrows ; $i++ ) { //Rows + if ($this->progressBar) { $this->UpdateProgressBar(7,intval(30 + ($i*40/$numrows)),' '); } // *PROGRESS-BAR* + if (isset($table['is_tfoot'][$i]) && $table['is_tfoot'][$i] && $level==1) { + $tablefooterrowheight += $table['hr'][$i]; + $tablefooter[$i][0]['trbackground-images'] = $table['trbackground-images'][$i]; + $tablefooter[$i][0]['trgradients'] = $table['trgradients'][$i]; + $tablefooter[$i][0]['trbgcolor'] = $table['bgcolor'][$i]; + for( $j = $startcol ; $j < $numcols ; $j++ ) { //Columns + if (isset($cells[$i][$j]) && $cells[$i][$j]) { + if ($this->cacheTables) { + $cell = $this->_uncacheCell($table['cells'][$i][$j], '', $fh); + } + else + $cell = &$cells[$i][$j]; + if ($split) { + if ($table['colPg'][$j] != $splitpg) { continue; } + list($x,$w) = $this->_splitTableGetWidth($table, $i, $j, $fh); + $js = $j - $startcol; + } + else { + list($x,$w) = $this->_tableGetWidth($table, $i, $j, $fh); + $js = $j; + } + + list($y,$h) = $this->_tableGetHeight($table, $i, $j, $fh); + $x += $x0; + $y += $y0; + //Get info of tfoot ==>> table footer + $tablefooter[$i][$js]['x'] = $x; + $tablefooter[$i][$js]['y'] = $y; + $tablefooter[$i][$js]['h'] = $h; + $tablefooter[$i][$js]['w'] = $w; + if (isset($cell['textbuffer'])) { $tablefooter[$i][$js]['textbuffer'] = $cell['textbuffer']; } + else { $tablefooter[$i][$js]['textbuffer'] = ''; } + $tablefooter[$i][$js]['a'] = $cell['a']; + $tablefooter[$i][$js]['R'] = $cell['R']; + $tablefooter[$i][$js]['va'] = $cell['va']; + $tablefooter[$i][$js]['mih'] = $cell['mih']; + $tablefooter[$i][$js]['gradient'] = $cell['gradient']; // *BACKGROUNDS* + $tablefooter[$i][$js]['background-image'] = $cell['background-image']; // *BACKGROUNDS* + //CELL FILL BGCOLOR + if (!$this->simpleTables){ + if ($this->packTableData) { + $c = $this->_unpackCellBorder($cell['borderbin']); + $tablefooter[$i][$js]['border'] = $c['border']; + $tablefooter[$i][$js]['border_details'] = $c['border_details']; + } + else { + $tablefooter[$i][$js]['border'] = $cell['border']; + $tablefooter[$i][$js]['border_details'] = $cell['border_details']; + } + } + else if ($this->simpleTables){ + $tablefooter[$i][$js]['border'] = $table['simple']['border']; + $tablefooter[$i][$js]['border_details'] = $table['simple']['border_details']; + } + $tablefooter[$i][$js]['bgcolor'] = $cell['bgcolor']; + $tablefooter[$i][$js]['padding'] = $cell['padding']; + $tablefooter[$i][$js]['rowspan'] = $cell['rowspan']; + $tablefooter[$i][$js]['colspan'] = $cell['colspan']; + } + } + } + } + + if ($level==1) { $this->_out('___TABLE___BACKGROUNDS'.date('jY')); } + $tableheaderadj = 0; + $tablefooteradj = 0; + + $tablestartpageno = $this->page; + + //Draw Table Contents and Borders + for( $i = 0; $i < $numrows ; $i++ ) { //Rows + if ($split && $startrow > 0) { + $thnr = (isset($table['is_thead']) ? count($table['is_thead']) : 0); + if ($i >= $thnr && $i < $startrow) { continue; } + if ($i == $startrow){ $returny = $rety - $tableheaderrowheight; } + } + + // Get Maximum row/cell height in row - including rowspan>1 + 1 overlapping + $maxrowheight = $this->_tableGetMaxRowHeight($table, $i, $fh); + + $skippage = false; + $newpagestarted = false; + for( $j = $startcol ; $j < $numcols ; $j++ ) { //Columns + if ($split) { + if ($table['colPg'][$j] > $splitpg) { break; } + $lastCol = $j; + } + if (isset($cells[$i][$j]) && $cells[$i][$j]) { + if ($this->cacheTables) { + $cell = $this->_uncacheCell($table['cells'][$i][$j], '', $fh); + } + else + $cell = &$cells[$i][$j]; + if ($split) { + $lastCol = $j + (isset($cell['colspan']) ? ($cell['colspan']-1) : 0) ; + list($x,$w) = $this->_splitTableGetWidth($table, $i, $j, $fh); + } + else { list($x,$w) = $this->_tableGetWidth($table, $i, $j, $fh); } + + list($y,$h) = $this->_tableGetHeight($table, $i, $j, $fh); + $x += $x0; + $y += $y0; + $y -= $returny; + + if ($table['borders_separate']) { + if (!empty($tablefooter) || $i == ($numrows-1) || (isset($cell['rowspan']) && ($i+$cell['rowspan']) == $numrows) || (!isset($cell['rowspan']) && ($i+1) == $numrows) ) { + $extra = $table['padding']['B'] + $table['border_details']['B']['w'] + $table['border_spacing_V']/2; + //$extra = $table['margin']['B'] + $table['padding']['B'] + $table['border_details']['B']['w'] + $table['border_spacing_V']/2; + } + else { + $extra = $table['border_spacing_V']/2; + } + } + else { $extra = $table['max_cell_border_width']['B']/2; } + + if ($j==$startcol && ((($y + $maxrowheight + $extra ) > ($pagetrigger+0.001)) || (($this->keepColumns || !$this->ColActive) && !empty($tablefooter) && ($y + $maxrowheight + $tablefooterrowheight + $extra) > $pagetrigger) && ($this->tableLevel==1 && $i < ($numrows - $table['headernrows']))) && ($y0 >0 || $x0 > 0) && !$this->InFooter && $this->autoPageBreak ) { + + if (!$skippage) { + $finalSpread = true; + $firstSpread = true; + if ($split) { + for($t=$startcol; $t<$numcols; $t++) { + // Are there more columns to print on a next page? + if ($table['colPg'][$t] > $splitpg) { + $finalSpread = false; + break; + } + } + if ($startcol>0) { $firstSpread = false; } + } + + if (($this->keepColumns || !$this->ColActive) && !empty($tablefooter) && $i > 0 ) { + $this->y = $y; + $ya = $this->y; + $this->TableHeaderFooter($tablefooter,$tablestartpage,$tablestartcolumn,'F',$level, $firstSpread, $finalSpread); + if ($this->table_rotate) { + $this->tbrot_h += $this->y - $ya ; + } + $tablefooteradj = $this->y - $ya ; + } + $y -= $y0; + $returny += $y; + + $oldcolumn = $this->CurrCol; + if ($this->AcceptPageBreak()) { + $newpagestarted = true; + $this->y = $y + $y0; + + // Move down to account for border-spacing or + // extra half border width in case page breaks in middle + if($i>0 && !$this->table_rotate && $level==1 && !$this->ColActive) { + if ($table['borders_separate']) { + $adv = $table['border_spacing_V']/2; + // If table footer + if (($this->keepColumns || !$this->ColActive) && !empty($tablefooter) && $i > 0 ) { + $adv += ($table['padding']['B'] + $table['border_details']['B']['w']); + } + } + else { + $maxbwtop = 0; + $maxbwbottom = 0; + if (!$this->simpleTables){ + if (!empty($tablefooter)) { $maxbwbottom = $table['max_cell_border_width']['B']; } + else { + $brow = $i-1; + for( $ctj = 0 ; $ctj < $numcols ; $ctj++ ) { + if (isset($cells[$brow][$ctj]) && $cells[$brow][$ctj]) { + if ($this->cacheTables) { + $cadj = $this->_uncacheCell($table['cells'][$brow][$ctj], '', $fh); + list($bt,$br,$bb,$bl) = $this->_getBorderWidths($cadj['borderbin']); + } + else if ($this->packTableData) { + list($bt,$br,$bb,$bl) = $this->_getBorderWidths($cells[$brow][$ctj]['borderbin']); + } + else { + $bb = $cells[$brow][$ctj]['border_details']['B']['w']; + } + $maxbwbottom = max($maxbwbottom , $bb); + } + } + } + if (!empty($tableheader)) { $maxbwtop = $table['max_cell_border_width']['T']; } + else { + $trow = $i-1; + for( $ctj = 0 ; $ctj < $numcols ; $ctj++ ) { + if (isset($cells[$trow][$ctj]) && $cells[$trow][$ctj]) { + if ($this->cacheTables) { + $cadj = $this->_uncacheCell($table['cells'][$trow][$ctj], '', $fh); + list($bt,$br,$bb,$bl) = $this->_getBorderWidths($cadj['borderbin']); + } + else if ($this->packTableData) { + list($bt,$br,$bb,$bl) = $this->_getBorderWidths($cells[$trow][$ctj]['borderbin']); + } + else { + $bt = $cells[$trow][$ctj]['border_details']['T']['w']; + } + $maxbwtop = max($maxbwtop , $bt); + } + } + } + } + else if ($this->simpleTables){ + $maxbwtop = $table['simple']['border_details']['T']['w']; + $maxbwbottom = $table['simple']['border_details']['B']['w']; + } + $adv = $maxbwbottom /2; + } + $this->y += $adv; + } + + // Rotated table split over pages - needs this->y for borders/backgrounds + if($i>0 && $this->table_rotate && $level==1) { + // $this->y = $y0 + $this->tbrot_w; + } + + if ($this->tableClipPath ) { $this->_out("Q"); } + + $bx = $x0; + $by = $y0; + + if ($table['borders_separate']) { + $bx -= ($table['padding']['L'] + $table['border_details']['L']['w'] + $table['border_spacing_H']/2); + if ($tablestartpageno != $this->page) { // IF already broken across a previous pagebreak + $by += $table['max_cell_border_width']['T']/2; + if (empty($tableheader)) { $by -= ($table['border_spacing_V']/2); } + } + else { + $by -= ($table['padding']['T'] + $table['border_details']['T']['w'] + $table['border_spacing_V']/2); + } + } + + else if ($tablestartpageno != $this->page && !empty($tableheader)) { $by += $maxbwtop /2; } + + $by -= $tableheaderadj; + $bh = $this->y - $by + $tablefooteradj; + if (!$table['borders_separate']) { $bh -= $adv ; } + if ($split) { + $bw = 0; + for($t=$startcol; $t<$numcols; $t++) { + if ($table['colPg'][$t] == $splitpg) { $bw += $table['wc'][$t]; } + if ($table['colPg'][$t] > $splitpg) { break; } + } + if ($table['borders_separate']) { + if ($firstSpread) { + $bw += $table['padding']['L'] + $table['border_details']['L']['w'] + $table['border_spacing_H']; + } + else { + $bx += ($table['padding']['L'] + $table['border_details']['L']['w']); + $bw += $table['border_spacing_H']; + } + if ($finalSpread) { + $bw += $table['padding']['R'] + $table['border_details']['R']['w']/2 + $table['border_spacing_H']; + } + } + } + else { + $bw = $table['w'] - ($table['max_cell_border_width']['L']/2) - ($table['max_cell_border_width']['R']/2) - $table['margin']['L'] - $table['margin']['R']; + } + + // mPDF 5.4.16 + if ($this->splitTableBorderWidth && ($this->keepColumns || !$this->ColActive) && empty($tablefooter) && $i > 0 && $table['border_details']['B']['w']) { + $prevDrawColor = $this->DrawColor; + $lw = $this->LineWidth; + $this->SetLineWidth($this->splitTableBorderWidth); + $this->SetDColor($table['border_details']['B']['c']); + $this->SetLineJoin(0); + $this->SetLineCap(0); + $blx = $bx; + $blw = $bw; + if (!$table['borders_separate']) { + $blx -= ($table['max_cell_border_width']['L']/2); + $blw += ($table['max_cell_border_width']['L']/2 + $table['max_cell_border_width']['R']/2); + } + $this->Line($blx,$this->y+($this->splitTableBorderWidth/2),$blx+$blw,$this->y+($this->splitTableBorderWidth/2)); + $this->DrawColor = $prevDrawColor; + $this->_out($this->DrawColor); + $this->SetLineWidth($lw); + $this->SetLineJoin(2); + $this->SetLineCap(2); + } + + if (!$this->ColActive && ($i > 0 || $j > 0)) { + if (isset($table['bgcolor'][-1])) { + $color = $this->ConvertColor($table['bgcolor'][-1]); + if ($color) { + if (!$table['borders_separate']) { $bh -= $table['max_cell_border_width']['B']/2; } + $this->tableBackgrounds[$level*9][] = array('gradient'=>false, 'x'=>$bx, 'y'=>$by, 'w'=>$bw, 'h'=>$bh, 'col'=>$color); + } + } + +/*-- BACKGROUNDS --*/ + if (isset($table['gradient'])) { + $g = $this->grad->parseBackgroundGradient($table['gradient']); + if ($g) { + $this->tableBackgrounds[$level*9+1][] = array('gradient'=>true, 'x'=>$bx, 'y'=>$by, 'w'=>$bw, 'h'=>$bh, 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>''); + } + } + + if (isset($table['background-image'])) { + if ($table['background-image']['gradient'] && preg_match('/(-moz-)*(repeating-)*(linear|radial)-gradient/', $table['background-image']['gradient'] )) { + $g = $this->grad->parseMozGradient( $table['background-image']['gradient'] ); + if ($g) { + $this->tableBackgrounds[$level*9+1][] = array('gradient'=>true, 'x'=>$bx, 'y'=>$by, 'w'=>$bw, 'h'=>$bh, 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>''); + } + } + else { + $image_id = $table['background-image']['image_id']; + $orig_w = $table['background-image']['orig_w']; + $orig_h = $table['background-image']['orig_h']; + $x_pos = $table['background-image']['x_pos']; + $y_pos = $table['background-image']['y_pos']; + $x_repeat = $table['background-image']['x_repeat']; + $y_repeat = $table['background-image']['y_repeat']; + $resize = $table['background-image']['resize']; + $opacity = $table['background-image']['opacity']; + $itype = $table['background-image']['itype']; + $this->tableBackgrounds[$level*9+2][] = array('x'=>$bx, 'y'=>$by, 'w'=>$bw, 'h'=>$bh, 'image_id'=>$image_id, 'orig_w'=>$orig_w, 'orig_h'=>$orig_h, 'x_pos'=>$x_pos, 'y_pos'=>$y_pos, 'x_repeat'=>$x_repeat, 'y_repeat'=>$y_repeat, 'clippath'=>'', 'resize'=>$resize, 'opacity'=>$opacity, 'itype'=>$itype); + } + } +/*-- END BACKGROUNDS --*/ + } + + // $this->AcceptPageBreak() has moved tablebuffer to $this->pages content + if ($this->tableBackgrounds) { + $s = $this->PrintTableBackgrounds(); + if ($this->bufferoutput) { + $this->headerbuffer = preg_replace('/(___TABLE___BACKGROUNDS'.date('jY').')/', '\\1'."\n".$s."\n", $this->headerbuffer); + $this->headerbuffer = preg_replace('/(___TABLE___BACKGROUNDS'.date('jY').')/', " ", $this->headerbuffer ); + } + else { + $this->pages[$this->page] = preg_replace('/(___TABLE___BACKGROUNDS'.date('jY').')/', '\\1'."\n".$s."\n", $this->pages[$this->page]); + $this->pages[$this->page] = preg_replace('/(___TABLE___BACKGROUNDS'.date('jY').')/', " ", $this->pages[$this->page]); + } + $this->tableBackgrounds = array(); + } + + if ($split) { + if ($i == 0 && $j == 0) { $y0 = -1; } + else if ($finalSpread) { + $splitpg = 0; + $startcol = 0; + $startrow = $i; + } + else { + $splitpg++; + $startcol = $t; + $returny -= $y; + } + return array(false, $startrow, $startcol, $splitpg, $returny, $y0); + } + + $this->AddPage($this->CurOrientation); + + $this->_out('___TABLE___BACKGROUNDS'.date('jY')); + + + if ($this->tableClipPath ) { $this->_out($this->tableClipPath); } + + // Added to correct for OddEven Margins + $x= $x + $this->MarginCorrection; + $x0= $x0 + $this->MarginCorrection; + + // mPDF 5.4.16 + if ($this->splitTableBorderWidth && ($this->keepColumns || !$this->ColActive) && empty($tableheader) && $i > 0 && $table['border_details']['T']['w'] ) { + $prevDrawColor = $this->DrawColor; + $lw = $this->LineWidth; + $this->SetLineWidth($this->splitTableBorderWidth); + $this->SetDColor($table['border_details']['T']['c']); + $this->SetLineJoin(0); + $this->SetLineCap(0); + $blx += $this->MarginCorrection; + $this->Line($blx,$this->y-($this->splitTableBorderWidth/2),$blx+$blw,$this->y-($this->splitTableBorderWidth/2)); + $this->DrawColor = $prevDrawColor; + $this->_out($this->DrawColor); + $this->SetLineWidth($lw); + $this->SetLineJoin(2); + $this->SetLineCap(2); + } + + // Move down to account for half of top border-spacing or + // extra half border width in case page was broken in middle + if($i>0 && !$this->table_rotate && $level==1 && $table['headernrows']==0) { + if ($table['borders_separate']) { $adv = $table['border_spacing_V']/2; } + else { + $maxbwtop = 0; + for( $ctj = 0 ; $ctj < $numcols ; $ctj++ ) { + if (isset($cells[$i][$ctj]) && $cells[$i][$ctj]) { + if (!$this->simpleTables){ + if ($this->cacheTables) { + $celltj = $this->_uncacheCell($table['cells'][$i][$ctj], '', $fh); + list($bt,$br,$bb,$bl) = $this->_getBorderWidths($celltj['borderbin']); + } + else if ($this->packTableData) { + list($bt,$br,$bb,$bl) = $this->_getBorderWidths($cells[$i][$ctj]['borderbin']); + } + else { + $bt = $cells[$i][$ctj]['border_details']['T']['w']; + } + $maxbwtop = max($maxbwtop, $bt); + } + else if ($this->simpleTables){ + $maxbwtop = max($maxbwtop, $table['simple']['border_details']['T']['w']); + } + } + } + $adv = $maxbwtop /2; + } + $this->y += $adv; + } + + + if ($this->table_rotate) { + $this->tbrot_x0 = $this->lMargin + $this->blk[$this->blklvl]['outer_left_margin'] + $this->blk[$this->blklvl]['padding_left'] + $this->blk[$this->blklvl]['border_left']['w']; + if ($table['borders_separate']) { $this->tbrot_h = $table['margin']['T'] + $table['padding']['T'] + $table['border_details']['T']['w'] + $table['border_spacing_V']/2; } + else { $this->tbrot_h = $table['margin']['T'] + $table['max_cell_border_width']['T'] ; } + $this->tbrot_y0 = $this->y; + $pagetrigger = $y0 - $tableheaderadj + ($this->blk[$this->blklvl]['inner_width']); + } + else { + $pagetrigger = $this->PageBreakTrigger; + } + + if ($this->kwt_saved && $level==1) { + $this->kwt_moved = true; + } + + + // Disable Table header repeat if Keep Block together + if (!$this->keep_block_together && !empty($tableheader)) { + $ya = $this->y; + $this->TableHeaderFooter($tableheader,$tablestartpage,$tablestartcolumn,'H',$level); + if ($this->table_rotate) { + $this->tbrot_h = $this->y - $ya ; + } + $tableheaderadj = $this->y - $ya ; + } + + else if ($i==0 && !$this->keep_block_together && !$this->table_rotate && $level==1 && !$this->ColActive) { + // Advance down page + if ($table['borders_separate']) { $adv = $table['border_spacing_V']/2 + $table['border_details']['T']['w'] + $table['padding']['T']; } + else { $adv = $table['max_cell_border_width']['T'] /2 ; } + if ($adv) { + if ($this->table_rotate) { + $this->y += ($adv); + } + else { + $this->DivLn($adv,$this->blklvl,true); + } + } + } + + $outerfilled = 0; + $y = $y0 = $this->y; + } + +/*-- COLUMNS --*/ + // COLS + // COLUMN CHANGE + if ($this->CurrCol != $oldcolumn) { + // Added to correct for Columns + $x += $this->ChangeColumn * ($this->ColWidth+$this->ColGap); + $x0 += $this->ChangeColumn * ($this->ColWidth+$this->ColGap); + if ($this->CurrCol == 0) { // just added a page - possibly with tableheader + $y0 = $this->y; // this->y0 is global used by Columns - $y0 is internal to tablewrite + } + else { + $y0 = $this->y0; // this->y0 is global used by Columns - $y0 is internal to tablewrite + } + $y = $y0; + $outerfilled = 0; + if ($this->CurrCol != 0 && ($this->keepColumns && $this->ColActive) && !empty($tableheader) && $i > 0 ) { + $this->x = $x; + $this->y = $y; + $this->TableHeaderFooter($tableheader,$tablestartpage,$tablestartcolumn,'H',$level); + $y0 = $y=$this->y; + } + } +/*-- END COLUMNS --*/ + } + $skippage = true; + } + + $this->x = $x; + $this->y = $y; + + if ($this->kwt_saved && $level==1) { + $this->printkwtbuffer(); + $x0 = $x = $this->x; + $y0 = $y = $this->y; + $this->kwt_moved = false; + $this->kwt_saved = false; + } + + + // Set the Page & Column where table actually starts + if ($i==0 && $j==0 && $level==1) { + if (($this->mirrorMargins) && (($this->page)%2==0)) { // EVEN + $tablestartpage = 'EVEN'; + } + else if (($this->mirrorMargins) && (($this->page)%2==1)) { // ODD + $tablestartpage = 'ODD'; + } + else { $tablestartpage = ''; } + $tablestartpageno = $this->page; + if ($this->ColActive) { $tablestartcolumn = $this->CurrCol; } // *COLUMNS* + } + + + //ALIGN + $align = $cell['a']; + + +/*-- COLUMNS --*/ + // If outside columns, this is done in PaintDivBB + if ($this->ColActive) { + //OUTER FILL BGCOLOR of DIVS + if ($this->blklvl > 0 && ($j==0) && !$this->table_rotate && $level==1) { + $firstblockfill = $this->GetFirstBlockFill(); + if ($firstblockfill && $this->blklvl >= $firstblockfill) { + $divh = $maxrowheight; + // Last row + if ((!isset($cell['rowspan']) && $i == $numrows-1) || (isset($cell['rowspan']) && (($i == $numrows-1 && $cell['rowspan']<2) || ($cell['rowspan']>1 && ($i + $cell['rowspan']-1) == $numrows-1)))) { // mPDF 5.6.54 + if ($table['borders_separate']) { + $adv = $table['margin']['B'] + $table['padding']['B'] + $table['border_details']['B']['w'] + $table['border_spacing_V']/2; + } + else { + $adv = $table['margin']['B'] + $table['max_cell_border_width']['B']/2; + } + $divh += $adv; //last row: fill bottom half of bottom border (y advanced at end) + } + + if (($this->y + $divh) > $outerfilled ) { // if not already painted by previous rowspan + $bak_x = $this->x; + $bak_y = $this->y; + if ($outerfilled > $this->y) { + $divh = ($this->y + $divh) - $outerfilled; + $this->y = $outerfilled; + } + + $this->DivLn($divh,-3,false); + $outerfilled = $this->y + $divh; + // Reset current block fill + $bcor = $this->blk[$this->blklvl]['bgcolorarray']; + if ($bcor ) $this->SetFColor($bcor); + $this->x = $bak_x; + $this->y = $bak_y; + } + } + } + } + + + //TABLE BACKGROUND FILL BGCOLOR - for cellSpacing + if ($this->ColActive) { + if ($table['borders_separate']) { + $fill = isset($table['bgcolor'][-1]) ? $table['bgcolor'][-1] : 0; + if ($fill) { + $color = $this->ConvertColor($fill); + if ($color) { + $xadj = ($table['border_spacing_H']/2); + $yadj = ($table['border_spacing_V']/2); + $wadj = $table['border_spacing_H']; + $hadj = $table['border_spacing_V']; + if ($i == 0) { // Top + $yadj += $table['padding']['T'] + $table['border_details']['T']['w'] ; + $hadj += $table['padding']['T'] + $table['border_details']['T']['w'] ; + } + if ($j == 0) { // Left + $xadj += $table['padding']['L'] + $table['border_details']['L']['w'] ; + $wadj += $table['padding']['L'] + $table['border_details']['L']['w'] ; + } + if ($i == ($numrows-1) || (isset($cell['rowspan']) && ($i+$cell['rowspan']) == $numrows) || (!isset($cell['rowspan']) && ($i+1) == $numrows)) { // Bottom + $hadj += $table['padding']['B'] + $table['border_details']['B']['w'] ; + } + if ($j == ($numcols-1) || (isset($cell['colspan']) && ($j+$cell['colspan']) == $numcols) || (!isset($cell['colspan']) && ($j+1) == $numcols)) { // Right + $wadj += $table['padding']['R'] + $table['border_details']['R']['w'] ; + } + $this->SetFColor($color); + $this->Rect($x - $xadj, $y - $yadj, $w + $wadj, $h + $hadj, 'F'); + } + } + } + } +/*-- END COLUMNS --*/ + + if ($table['empty_cells']!='hide' || !empty($cell['textbuffer']) || (isset($cell['nestedcontent']) && $cell['nestedcontent']) || !$table['borders_separate'] ) { $paintcell = true; } + else { $paintcell = false; } + + //Set Borders + $bord = 0; + $bord_det = array(); + + if (!$this->simpleTables){ + if ($this->packTableData) { + if ($cell['borderbin']) { + $c = $this->_unpackCellBorder($cell['borderbin']); + $bord = $c['border']; + $bord_det = $c['border_details']; + } + } + else if ($cell['border']) { + $bord = $cell['border']; + $bord_det = $cell['border_details']; + } + } + else if ($this->simpleTables){ + if ($table['simple']['border']) { + $bord = $table['simple']['border']; + $bord_det = $table['simple']['border_details']; + } + } + + //TABLE ROW OR CELL FILL BGCOLOR + $fill = 0; + if (isset($cell['bgcolor']) && $cell['bgcolor'] && $cell['bgcolor']!='transparent') { + $fill = $cell['bgcolor']; + $leveladj = 6; + } + else if (isset($table['bgcolor'][$i]) && $table['bgcolor'][$i] && $table['bgcolor'][$i]!='transparent') { // Row color + $fill = $table['bgcolor'][$i]; + $leveladj = 3; + } + if ($fill && $paintcell) { + $color = $this->ConvertColor($fill); + if ($color) { + if ($table['borders_separate']) { + if ($this->ColActive) { + $this->SetFColor($color); + $this->Rect($x+ ($table['border_spacing_H']/2), $y+ ($table['border_spacing_V']/2), $w- $table['border_spacing_H'], $h- $table['border_spacing_V'], 'F'); + } + else { + $this->tableBackgrounds[$level*9+$leveladj][] = array('gradient'=>false, 'x'=>($x + ($table['border_spacing_H']/2)), 'y'=>($y + ($table['border_spacing_V']/2)), 'w'=>($w - $table['border_spacing_H']), 'h'=>($h - $table['border_spacing_V']), 'col'=>$color); + } + } + else { + if ($this->ColActive) { + $this->SetFColor($color); + $this->Rect($x, $y, $w, $h, 'F'); + } + else { + $this->tableBackgrounds[$level*9+$leveladj][] = array('gradient'=>false, 'x'=>$x, 'y'=>$y, 'w'=>$w, 'h'=>$h, 'col'=>$color); + } + } + } + } + +/*-- BACKGROUNDS --*/ + if (isset($cell['gradient']) && $cell['gradient'] && $paintcell){ + $g = $this->grad->parseBackgroundGradient($cell['gradient']); + if ($g) { + if ($table['borders_separate']) { + $px = $x+ ($table['border_spacing_H']/2); + $py = $y+ ($table['border_spacing_V']/2); + $pw = $w- $table['border_spacing_H']; + $ph = $h- $table['border_spacing_V']; + } + else { + $px = $x; + $py = $y; + $pw = $w; + $ph = $h; + } + if ($this->ColActive) { + $this->grad->Gradient($px, $py, $pw, $ph, $g['type'], $g['stops'], $g['colorspace'], $g['coords'], $g['extend']); + } + else { + $this->tableBackgrounds[$level*9+7][] = array('gradient'=>true, 'x'=>$px, 'y'=>$py, 'w'=>$pw, 'h'=>$ph, 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>''); + } + } + } + + if (isset($cell['background-image']) && $paintcell) { + if ($cell['background-image']['gradient'] && preg_match('/(-moz-)*(repeating-)*(linear|radial)-gradient/', $cell['background-image']['gradient'] )) { + $g = $this->grad->parseMozGradient( $cell['background-image']['gradient'] ); + if ($g) { + if ($table['borders_separate']) { + $px = $x+ ($table['border_spacing_H']/2); + $py = $y+ ($table['border_spacing_V']/2); + $pw = $w- $table['border_spacing_H']; + $ph = $h- $table['border_spacing_V']; + } + else { + $px = $x; + $py = $y; + $pw = $w; + $ph = $h; + } + if ($this->ColActive) { + $this->grad->Gradient($px, $py, $pw, $ph, $g['type'], $g['stops'], $g['colorspace'], $g['coords'], $g['extend']); + } + else { + $this->tableBackgrounds[$level*9+7][] = array('gradient'=>true, 'x'=>$px, 'y'=>$py, 'w'=>$pw, 'h'=>$ph, 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>''); + } + } + } + else if ($cell['background-image']['image_id']) { // Background pattern + $n = count($this->patterns)+1; + if ($table['borders_separate']) { + $px = $x+ ($table['border_spacing_H']/2); + $py = $y+ ($table['border_spacing_V']/2); + $pw = $w- $table['border_spacing_H']; + $ph = $h- $table['border_spacing_V']; + } + else { + $px = $x; + $py = $y; + $pw = $w; + $ph = $h; + } + if ($this->ColActive) { + list($orig_w, $orig_h, $x_repeat, $y_repeat) = $this->_resizeBackgroundImage($cell['background-image']['orig_w'], $cell['background-image']['orig_h'], $pw, $ph, $cell['background-image']['resize'], $cell['background-image']['x_repeat'], $cell['background-image']['y_repeat']); + $this->patterns[$n] = array('x'=>$px, 'y'=>$py, 'w'=>$pw, 'h'=>$ph, 'pgh'=>$this->h, 'image_id'=>$cell['background-image']['image_id'], 'orig_w'=>$orig_w, 'orig_h'=>$orig_h, 'x_pos'=>$cell['background-image']['x_pos'] , 'y_pos'=>$cell['background-image']['y_pos'] , 'x_repeat'=>$x_repeat, 'y_repeat'=>$y_repeat); + if ($cell['background-image']['opacity']>0 && $cell['background-image']['opacity']<1) { $opac = $this->SetAlpha($cell['background-image']['opacity'],'Normal',true); } + else { $opac = ''; } + $this->_out(sprintf('q /Pattern cs /P%d scn %s %.3F %.3F %.3F %.3F re f Q', $n, $opac, $px*_MPDFK, ($this->h-$py)*_MPDFK, $pw*_MPDFK, -$ph*_MPDFK)); + } + else { + $image_id = $cell['background-image']['image_id']; + $orig_w = $cell['background-image']['orig_w']; + $orig_h = $cell['background-image']['orig_h']; + $x_pos = $cell['background-image']['x_pos']; + $y_pos = $cell['background-image']['y_pos']; + $x_repeat = $cell['background-image']['x_repeat']; + $y_repeat = $cell['background-image']['y_repeat']; + $resize = $cell['background-image']['resize']; + $opacity = $cell['background-image']['opacity']; + $itype = $cell['background-image']['itype']; + $this->tableBackgrounds[$level*9+8][] = array('x'=>$px, 'y'=>$py, 'w'=>$pw, 'h'=>$ph, 'image_id'=>$image_id, 'orig_w'=>$orig_w, 'orig_h'=>$orig_h, 'x_pos'=>$x_pos, 'y_pos'=>$y_pos, 'x_repeat'=>$x_repeat, 'y_repeat'=>$y_repeat, 'clippath'=>'', 'resize'=>$resize, 'opacity'=>$opacity, 'itype'=>$itype); + } + } + } +/*-- END BACKGROUNDS --*/ + + if (isset($cell['colspan']) && $cell['colspan']>1) { $ccolsp = $cell['colspan']; } + else { $ccolsp = 1; } + if (isset($cell['rowspan']) && $cell['rowspan']>1) { $crowsp = $cell['rowspan']; } + else { $crowsp = 1; } + + + // but still need to do this for repeated headers... + if (!$table['borders_separate'] && $this->tabletheadjustfinished && !$this->simpleTables){ + if (isset($table['topntail']) && $table['topntail']) { + $bord_det['T'] = $this->border_details($table['topntail']); + $bord_det['T']['w'] /= $this->shrin_k; + $this->setBorder($bord, _BORDER_TOP); + } + if (isset($table['thead-underline']) && $table['thead-underline']) { + $bord_det['T'] = $this->border_details($table['thead-underline']); + $bord_det['T']['w'] /= $this->shrin_k; + $this->setBorder($bord, _BORDER_TOP); + } + } + + + //Get info of first row ==>> table header + //Use > 1 row if THEAD + if (isset($table['is_thead'][$i]) && $table['is_thead'][$i] && $level==1) { + if ($j==0) $tableheaderrowheight += $table['hr'][$i]; + $tableheader[$i][0]['trbackground-images'] = (isset($table['trbackground-images'][$i]) ? $table['trbackground-images'][$i] : null); + $tableheader[$i][0]['trgradients'] = (isset($table['trgradients'][$i]) ? $table['trgradients'][$i] : null); + $tableheader[$i][0]['trbgcolor'] = (isset($table['bgcolor'][$i]) ? $table['bgcolor'][$i] : null); + $tableheader[$i][$j]['x'] = $x; + $tableheader[$i][$j]['y'] = $y; + $tableheader[$i][$j]['h'] = $h; + $tableheader[$i][$j]['w'] = $w; + if (isset($cell['textbuffer'])) { $tableheader[$i][$j]['textbuffer'] = $cell['textbuffer']; } + else { $tableheader[$i][$j]['textbuffer'] = ''; } + $tableheader[$i][$j]['a'] = $cell['a']; + $tableheader[$i][$j]['R'] = $cell['R']; + + $tableheader[$i][$j]['va'] = $cell['va']; + $tableheader[$i][$j]['mih'] = $cell['mih']; + $tableheader[$i][$j]['gradient'] = (isset($cell['gradient']) ? $cell['gradient'] : null); // *BACKGROUNDS* + $tableheader[$i][$j]['background-image'] = (isset($cell['background-image']) ? $cell['background-image'] : null); // *BACKGROUNDS* + $tableheader[$i][$j]['rowspan'] = (isset($cell['rowspan']) ? $cell['rowspan'] : null); + $tableheader[$i][$j]['colspan'] = (isset($cell['colspan']) ? $cell['colspan'] : null); + $tableheader[$i][$j]['bgcolor'] = $cell['bgcolor']; + + if (!$this->simpleTables){ + $tableheader[$i][$j]['border'] = $bord; + $tableheader[$i][$j]['border_details'] = $bord_det; + } + else if ($this->simpleTables){ + $tableheader[$i][$j]['border'] = $table['simple']['border']; + $tableheader[$i][$j]['border_details'] = $table['simple']['border_details']; + } + $tableheader[$i][$j]['padding'] = $cell['padding']; + } + + // CELL BORDER + if ($bord || $bord_det) { + if ($table['borders_separate'] && $paintcell) { + $this->_tableRect($x + ($table['border_spacing_H']/2)+($bord_det['L']['w'] /2), $y+ ($table['border_spacing_V']/2)+($bord_det['T']['w'] /2), $w-$table['border_spacing_H']-($bord_det['L']['w'] /2)-($bord_det['R']['w'] /2), $h- $table['border_spacing_V']-($bord_det['T']['w'] /2)-($bord_det['B']['w']/2), $bord, $bord_det, false, $table['borders_separate']); + } + else if (!$table['borders_separate']) { + $this->_tableRect($x, $y, $w, $h, $bord, $bord_det, true, $table['borders_separate']); // true causes buffer + } + + } + + //VERTICAL ALIGN + if ($cell['R'] && INTVAL($cell['R']) > 0 && INTVAL($cell['R']) < 90 && isset($cell['va']) && $cell['va']!='B') { $cell['va']='B';} + if (!isset($cell['va']) || $cell['va']=='M') $this->y += ($h-$cell['mih'])/2; + elseif (isset($cell['va']) && $cell['va']=='B') $this->y += $h-$cell['mih']; + + // NESTED CONTENT + + // TEXT (and nested tables) + $this->divalign=$align; + + $this->divwidth=$w; + if (!empty($cell['textbuffer'])) { + if ($level==1) { + if (isset($table['is_tfoot'][$i]) && $table['is_tfoot'][$i]) { + if (preg_match('/{colsum([0-9]*)[_]*}/', $cell['textbuffer'][0][0], $m)) { + $rep = sprintf("%01.".intval($m[1])."f", $this->colsums[$j]); + $cell['textbuffer'][0][0] = preg_replace('/{colsum[0-9_]*}/', $rep ,$cell['textbuffer'][0][0]); + } + } + else if (!isset($table['is_thead'][$i])) { $this->colsums[$j] += floatval(preg_replace('/^[^0-9\.\,]*/','',$cell['textbuffer'][0][0])); } // mPDF 5.6.66 + } + $opy = $this->y; + // mPDF ITERATION + if ($this->iterationCounter) { + foreach($cell['textbuffer'] AS $k=>$t) { + if (preg_match('/{iteration ([a-zA-Z0-9_]+)}/',$t[0], $m)) { + $vname = '__'.$m[1].'_'; + if (!isset($this->$vname)) { $this->$vname = 1; } + else { $this->$vname++; } + $cell['textbuffer'][$k][0] = preg_replace('/{iteration '.$m[1].'}/', $this->$vname, $cell['textbuffer'][$k][0]); + } + } + } + + + if ($cell['R']) { + $cellPtSize = $cell['textbuffer'][0][11] / $this->shrin_k; + if (!$cellPtSize) { $cellPtSize = $this->default_font_size; } + $cellFontHeight = ($cellPtSize/_MPDFK); + $opx = $this->x; + $angle = INTVAL($cell['R']); + // Only allow 45 to 89 degrees (when bottom-aligned) or exactly 90 or -90 + if ($angle > 90) { $angle = 90; } + else if ($angle > 0 && $angle <45) { $angle = 45; } + else if ($angle < 0) { $angle = -90; } + $offset = ((sin(deg2rad($angle))) * 0.37 * $cellFontHeight); + if (isset($cell['a']) && $cell['a']=='R') { + $this->x += ($w) + ($offset) - ($cellFontHeight/3) - ($cell['padding']['R'] + ($table['border_spacing_H']/2)); + } + else if (!isset($cell['a']) || $cell['a']=='C') { + $this->x += ($w/2) + ($offset); + } + else { + $this->x += ($offset) + ($cellFontHeight/3)+($cell['padding']['L'] +($table['border_spacing_H']/2)); + } + $str = ''; + foreach($cell['textbuffer'] AS $t) { $str .= $t[0].' '; } + $str = trim($str); + if (!isset($cell['va']) || $cell['va']=='M') { + $this->y -= ($h-$cell['mih'])/2; //Undo what was added earlier VERTICAL ALIGN + if ($angle > 0) { $this->y += (($h-$cell['mih'])/2) + $cell['padding']['T'] + ($cell['mih']-($cell['padding']['T'] + $cell['padding']['B'])); } + else if ($angle < 0) { $this->y += (($h-$cell['mih'])/2)+ ($cell['padding']['T'] + ($table['border_spacing_V']/2)); } + } + elseif (isset($cell['va']) && $cell['va']=='B') { + $this->y -= $h-$cell['mih']; //Undo what was added earlier VERTICAL ALIGN + if ($angle > 0) { $this->y += $h-($cell['padding']['B'] + ($table['border_spacing_V']/2)); } + else if ($angle < 0) { $this->y += $h-$cell['mih'] + ($cell['padding']['T'] + ($table['border_spacing_V']/2)); } + } + elseif (isset($cell['va']) && $cell['va']=='T') { + if ($angle > 0) { $this->y += $cell['mih']-($cell['padding']['B'] + ($table['border_spacing_V']/2)); } + else if ($angle < 0) { $this->y += ($cell['padding']['T'] + ($table['border_spacing_V']/2)); } + } + $this->Rotate($angle,$this->x,$this->y); + $s_fs = $this->FontSizePt; + $s_f = $this->FontFamily; + $s_st = $this->FontStyle; + if (!empty($cell['textbuffer'][0][3])) { //Font Color + $cor = $cell['textbuffer'][0][3]; + $this->SetTColor($cor); + } + $s_str = $this->strike; + $this->strike = $cell['textbuffer'][0][8]; //Strikethrough + $this->SetFont($cell['textbuffer'][0][4],$cell['textbuffer'][0][2],$cellPtSize,true,true); + $this->Text($this->x,$this->y,$str); + $this->Rotate(0); + $this->SetFont($s_f,$s_st,$s_fs,true,true); + $this->SetTColor(0); + $this->strike = $s_str; + $this->x = $opx; + } + else { + + if (!$this->simpleTables){ + if ($bord_det) { + $btlw = $bord_det['L']['w']; + $btrw = $bord_det['R']['w']; + $bttw = $bord_det['T']['w']; + } + else { + $btlw = 0; + $btrw = 0; + $bttw = 0; + } + if ($table['borders_separate']) { + $xadj = $btlw + $cell['padding']['L'] +($table['border_spacing_H']/2); + $wadj = $btlw + $btrw + $cell['padding']['L'] +$cell['padding']['R'] + $table['border_spacing_H']; + $yadj = $bttw + $cell['padding']['T'] + ($table['border_spacing_H']/2); + } + else { + $xadj = $btlw/2 + $cell['padding']['L']; + $wadj = ($btlw + $btrw)/2 + $cell['padding']['L'] + $cell['padding']['R']; + $yadj = $bttw/2 + $cell['padding']['T']; + } + } + else if ($this->simpleTables){ + if ($table['borders_separate']) { // NB twice border width + $xadj = $table['simple']['border_details']['L']['w'] + $cell['padding']['L'] +($table['border_spacing_H']/2); + $wadj = $table['simple']['border_details']['L']['w'] + $table['simple']['border_details']['R']['w'] + $cell['padding']['L'] +$cell['padding']['R'] + $table['border_spacing_H']; + $yadj = $table['simple']['border_details']['T']['w'] + $cell['padding']['T'] + ($table['border_spacing_H']/2); + } + else { + $xadj = $table['simple']['border_details']['L']['w']/2 + $cell['padding']['L']; + $wadj = ($table['simple']['border_details']['L']['w'] + $table['simple']['border_details']['R']['w'])/2 + $cell['padding']['L'] + $cell['padding']['R']; + $yadj = $table['simple']['border_details']['T']['w']/2 + $cell['padding']['T']; + } + } + // mPDF 5.6.13 + $this->decimal_offset = 0; + if(substr($cell['a'],0,1) == 'D') { + if ($cell['colspan'] > 1) { $this->divalign = $c['a'] = substr($cell['a'],2,1); } + else { + $smax = $table['decimal_align'][$j]['maxs0']; + $d_content = $table['decimal_align'][$j]['maxs0'] + $table['decimal_align'][$j]['maxs1']; + $this->decimal_offset = $smax; + $extra = ($w - $d_content - $wadj); + if ($extra > 0) { + if(substr($cell['a'],2,1) == 'R') { $this->decimal_offset += $extra; } + else if(substr($cell['a'],2,1) == 'C') { $this->decimal_offset += ($extra)/2; } + } + } + } + $this->divwidth=$w-$wadj; + if ($this->divwidth == 0) { $this->divwidth = 0.0001; } + $this->x += $xadj; + $this->y += $yadj; + $this->printbuffer($cell['textbuffer'],'',true); + } + $this->y = $opy; + } + +/*-- BACKGROUNDS --*/ + if (!$this->ColActive) { + if (isset($table['trgradients'][$i]) && ($j==0 || $table['borders_separate'])) { + $g = $this->grad->parseBackgroundGradient($table['trgradients'][$i]); + if ($g) { + $gx = $x0; + $gy = $y; + $gh = $h; + $gw = $table['w'] - ($table['max_cell_border_width']['L']/2) - ($table['max_cell_border_width']['R']/2) - $table['margin']['L'] - $table['margin']['R']; + if ($table['borders_separate']) { + $gw -= ($table['padding']['L'] + $table['border_details']['L']['w'] + $table['padding']['R'] + $table['border_details']['R']['w'] + $table['border_spacing_H']); + $s = ''; + $clx = $x+ ($table['border_spacing_H']/2); + $cly = $y+ ($table['border_spacing_V']/2); + $clw = $w- $table['border_spacing_H']; + $clh = $h- $table['border_spacing_V']; + // Set clipping path + $s = ' q 0 w '; // Line width=0 + $s .= sprintf('%.3F %.3F m ', ($clx)*_MPDFK, ($this->h-($cly))*_MPDFK); // start point TL before the arc + $s .= sprintf('%.3F %.3F l ', ($clx)*_MPDFK, ($this->h-($cly+$clh))*_MPDFK); // line to BL + $s .= sprintf('%.3F %.3F l ', ($clx+$clw)*_MPDFK, ($this->h-($cly+$clh))*_MPDFK); // line to BR + $s .= sprintf('%.3F %.3F l ', ($clx+$clw)*_MPDFK, ($this->h-($cly))*_MPDFK); // line to TR + $s .= sprintf('%.3F %.3F l ', ($clx)*_MPDFK, ($this->h-($cly))*_MPDFK); // line to TL + $s .= ' W n '; // Ends path no-op & Sets the clipping path + $this->tableBackgrounds[$level*9+4][] = array('gradient'=>true, 'x'=>$gx + ($table['border_spacing_H']/2), 'y'=>$gy + ($table['border_spacing_V']/2), 'w'=>$gw - $table['border_spacing_V'], 'h'=>$gh - $table['border_spacing_H'], 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>$s); + } + else { + $this->tableBackgrounds[$level*9+4][] = array('gradient'=>true, 'x'=>$gx, 'y'=>$gy, 'w'=>$gw, 'h'=>$gh, 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>''); + } + } + } + if (isset($table['trbackground-images'][$i]) && ($j==0 || $table['borders_separate'])) { + if ($table['trbackground-images'][$i]['gradient'] && preg_match('/(-moz-)*(repeating-)*(linear|radial)-gradient/', $table['trbackground-images'][$i]['gradient'] )) { + $g = $this->grad->parseMozGradient( $table['trbackground-images'][$i]['gradient'] ); + if ($g) { + $gx = $x0; + $gy = $y; + $gh = $h; + $gw = $table['w'] - ($table['max_cell_border_width']['L']/2) - ($table['max_cell_border_width']['R']/2) - $table['margin']['L'] - $table['margin']['R']; + if ($table['borders_separate']) { + $gw -= ($table['padding']['L'] + $table['border_details']['L']['w'] + $table['padding']['R'] + $table['border_details']['R']['w'] + $table['border_spacing_H']); + $s = ''; + $clx = $x+ ($table['border_spacing_H']/2); + $cly = $y+ ($table['border_spacing_V']/2); + $clw = $w- $table['border_spacing_H']; + $clh = $h- $table['border_spacing_V']; + // Set clipping path + $s = ' q 0 w '; // Line width=0 + $s .= sprintf('%.3F %.3F m ', ($clx)*_MPDFK, ($this->h-($cly))*_MPDFK); // start point TL before the arc + $s .= sprintf('%.3F %.3F l ', ($clx)*_MPDFK, ($this->h-($cly+$clh))*_MPDFK); // line to BL + $s .= sprintf('%.3F %.3F l ', ($clx+$clw)*_MPDFK, ($this->h-($cly+$clh))*_MPDFK); // line to BR + $s .= sprintf('%.3F %.3F l ', ($clx+$clw)*_MPDFK, ($this->h-($cly))*_MPDFK); // line to TR + $s .= sprintf('%.3F %.3F l ', ($clx)*_MPDFK, ($this->h-($cly))*_MPDFK); // line to TL + $s .= ' W n '; // Ends path no-op & Sets the clipping path + $this->tableBackgrounds[$level*9+4][] = array('gradient'=>true, 'x'=>$gx + ($table['border_spacing_H']/2), 'y'=>$gy + ($table['border_spacing_V']/2), 'w'=>$gw - $table['border_spacing_V'], 'h'=>$gh - $table['border_spacing_H'], 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>$s); + } + else { + $this->tableBackgrounds[$level*9+4][] = array('gradient'=>true, 'x'=>$gx, 'y'=>$gy, 'w'=>$gw, 'h'=>$gh, 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>''); + } + } + } + else { + $image_id = $table['trbackground-images'][$i]['image_id']; + $orig_w = $table['trbackground-images'][$i]['orig_w']; + $orig_h = $table['trbackground-images'][$i]['orig_h']; + $x_pos = $table['trbackground-images'][$i]['x_pos']; + $y_pos = $table['trbackground-images'][$i]['y_pos']; + $x_repeat = $table['trbackground-images'][$i]['x_repeat']; + $y_repeat = $table['trbackground-images'][$i]['y_repeat']; + $resize = $table['trbackground-images'][$i]['resize']; + $opacity = $table['trbackground-images'][$i]['opacity']; + $itype = $table['trbackground-images'][$i]['itype']; + $clippath = ''; + $gx = $x0; + $gy = $y; + $gh = $h; + $gw = $table['w'] - ($table['max_cell_border_width']['L']/2) - ($table['max_cell_border_width']['R']/2) - $table['margin']['L'] - $table['margin']['R']; + if ($table['borders_separate']) { + $gw -= ($table['padding']['L'] + $table['border_details']['L']['w'] + $table['padding']['R'] + $table['border_details']['R']['w'] + $table['border_spacing_H']); + $s = ''; + $clx = $x + ($table['border_spacing_H']/2); + $cly = $y + ($table['border_spacing_V']/2); + $clw = $w - $table['border_spacing_H']; + $clh = $h - $table['border_spacing_V']; + // Set clipping path + $s = ' q 0 w '; // Line width=0 + $s .= sprintf('%.3F %.3F m ', ($clx)*_MPDFK, ($this->h-($cly))*_MPDFK); // start point TL + $s .= sprintf('%.3F %.3F l ', ($clx)*_MPDFK, ($this->h-($cly+$clh))*_MPDFK); // line to BL + $s .= sprintf('%.3F %.3F l ', ($clx+$clw)*_MPDFK, ($this->h-($cly+$clh))*_MPDFK); // line to BR + $s .= sprintf('%.3F %.3F l ', ($clx+$clw)*_MPDFK, ($this->h-($cly))*_MPDFK); // line to TR + $s .= sprintf('%.3F %.3F l ', ($clx)*_MPDFK, ($this->h-($cly))*_MPDFK); // line to TL + $s .= ' W n '; // Ends path no-op & Sets the clipping path + $this->tableBackgrounds[$level*9+5][] = array('x'=>$gx + ($table['border_spacing_H']/2), 'y'=>$gy + ($table['border_spacing_V']/2), 'w'=>$gw - $table['border_spacing_V'], 'h'=>$gh - $table['border_spacing_H'], 'image_id'=>$image_id, 'orig_w'=>$orig_w, 'orig_h'=>$orig_h, 'x_pos'=>$x_pos, 'y_pos'=>$y_pos, 'x_repeat'=>$x_repeat, 'y_repeat'=>$y_repeat, 'clippath'=>$s, 'resize'=>$resize, 'opacity'=>$opacity, 'itype'=>$itype); + } + else { + $this->tableBackgrounds[$level*9+5][] = array('x'=>$gx, 'y'=>$gy, 'w'=>$gw, 'h'=>$gh, 'image_id'=>$image_id, 'orig_w'=>$orig_w, 'orig_h'=>$orig_h, 'x_pos'=>$x_pos, 'y_pos'=>$y_pos, 'x_repeat'=>$x_repeat, 'y_repeat'=>$y_repeat, 'clippath'=>'', 'resize'=>$resize, 'opacity'=>$opacity, 'itype'=>$itype); + } + } + } + } + +/*-- END BACKGROUNDS --*/ + + // TABLE BORDER - if separate + if (($table['borders_separate'] || ($this->simpleTables && !$table['simple']['border'])) && $table['border']) { + $halfspaceL = $table['padding']['L'] + ($table['border_spacing_H']/2); + $halfspaceR = $table['padding']['R'] + ($table['border_spacing_H']/2); + $halfspaceT = $table['padding']['T'] + ($table['border_spacing_V']/2); + $halfspaceB = $table['padding']['B'] + ($table['border_spacing_V']/2); + $tbx = $x; + $tby = $y; + $tbw = $w; + $tbh = $h; + $tab_bord = 0; + + $corner = ''; + if ($i == 0) { // Top + $tby -= $halfspaceT + ($table['border_details']['T']['w']/2); + $tbh += $halfspaceT + ($table['border_details']['T']['w']/2); + $this->setBorder($tab_bord , _BORDER_TOP); + $corner .= 'T'; + } + if ($i == ($numrows-1) || (isset($cell['rowspan']) && ($i+$cell['rowspan']) == $numrows)) { // Bottom + $tbh += $halfspaceB + ($table['border_details']['B']['w']/2); + $this->setBorder($tab_bord , _BORDER_BOTTOM); + $corner .= 'B'; + } + if ($j == 0) { // Left + $tbx -= $halfspaceL + ($table['border_details']['L']['w']/2); + $tbw += $halfspaceL + ($table['border_details']['L']['w']/2); + $this->setBorder($tab_bord , _BORDER_LEFT); + $corner .= 'L'; + } + if ($j == ($numcols-1) || (isset($cell['colspan']) && ($j+$cell['colspan']) == $numcols)) { // Right + $tbw += $halfspaceR + ($table['border_details']['R']['w']/2); + $this->setBorder($tab_bord , _BORDER_RIGHT); + $corner .= 'R'; + } + $this->_tableRect($tbx, $tby, $tbw, $tbh, $tab_bord , $table['border_details'], false, $table['borders_separate'], 'table', $corner, $table['border_spacing_V'], $table['border_spacing_H'] ); + } + + unset($cell ); + //Reset values + $this->Reset(); + + }//end of (if isset(cells)...) + }// end of columns + + $newpagestarted = false; + $this->tabletheadjustfinished = false; + + if ($this->ColActive && $i < $numrows-1 && $level==1) { $this->breakpoints[$this->CurrCol][] = $y + $h; } // *COLUMNS* + +/*-- COLUMNS --*/ + if ($this->ColActive) { + if (count($this->cellBorderBuffer)) { $this->printcellbuffer(); } + } +/*-- END COLUMNS --*/ + + if ($i == $numrows-1) { $this->y = $y + $h; } //last row jump (update this->y position) + if ($this->table_rotate && $level==1) { + $this->tbrot_h += $h; + } + + + + }// end of rows + + if ($this->progressBar) { $this->UpdateProgressBar(7,70,' '); } // *PROGRESS-BAR* + + if (count($this->cellBorderBuffer)) { $this->printcellbuffer(); } + + + if ($this->tableClipPath ) { $this->_out("Q"); } + $this->tableClipPath = ''; + + // Advance down page by half width of bottom border + if ($table['borders_separate']) { $this->y += $table['padding']['B'] + $table['border_details']['B']['w'] + $table['border_spacing_V']/2; } + else { $this->y += $table['max_cell_border_width']['B']/2; } + + if ($table['borders_separate'] && $level==1) { $this->tbrot_h += $table['margin']['B'] + $table['padding']['B'] + $table['border_details']['B']['w'] + $table['border_spacing_V']/2; } + else if ($level==1) { $this->tbrot_h += $table['margin']['B'] + $table['max_cell_border_width']['B']/2; } + + $bx = $x0; + $by = $y0; + if ($table['borders_separate']) { + $bx -= ($table['padding']['L'] + $table['border_details']['L']['w'] + $table['border_spacing_H']/2); + if ($tablestartpageno != $this->page) { // IF broken across page + $by += $table['max_cell_border_width']['T']/2; + if (empty($tableheader)) { $by -= ($table['border_spacing_V']/2); } + } + else if ($split && $startrow > 0 && empty($tableheader)) { + $by -= ($table['border_spacing_V']/2); + } + else { + $by -= ($table['padding']['T'] + $table['border_details']['T']['w'] + $table['border_spacing_V']/2); + } + } + else if ($tablestartpageno != $this->page && !empty($tableheader)) { $by += $maxbwtop /2; } + $by -= $tableheaderadj; + $bh = $this->y - $by; + if (!$table['borders_separate']) { $bh -= $table['max_cell_border_width']['B']/2; } + + if ($split) { + $bw = 0; + $finalSpread = true; + for($t=$startcol; $t<$numcols; $t++) { + if ($table['colPg'][$t] == $splitpg) { $bw += $table['wc'][$t]; } + if ($table['colPg'][$t] > $splitpg) { $finalSpread = false; break; } + } + if ($startcol==0) { $firstSpread = true; } + else { $firstSpread = false; } + if ($table['borders_separate']) { + $bw += $table['border_spacing_H']; + if ($firstSpread) { + $bw += $table['padding']['L'] + $table['border_details']['L']['w']; + } + else { + $bx += ($table['padding']['L'] + $table['border_details']['L']['w']); + } + if ($finalSpread) { + $bw += $table['padding']['R'] + $table['border_details']['R']['w']; + } + } + } + else { + $bw = $table['w'] - ($table['max_cell_border_width']['L']/2) - ($table['max_cell_border_width']['R']/2) - $table['margin']['L'] - $table['margin']['R']; + } + + if (!$this->ColActive) { + if (isset($table['bgcolor'][-1])) { + $color = $this->ConvertColor($table['bgcolor'][-1]); + if ($color) { + $this->tableBackgrounds[$level*9][] = array('gradient'=>false, 'x'=>$bx, 'y'=>$by, 'w'=>$bw, 'h'=>$bh, 'col'=>$color); + } + } + +/*-- BACKGROUNDS --*/ + if (isset($table['gradient'])) { + $g = $this->grad->parseBackgroundGradient($table['gradient']); + if ($g) { + $this->tableBackgrounds[$level*9+1][] = array('gradient'=>true, 'x'=>$bx, 'y'=>$by, 'w'=>$bw, 'h'=>$bh, 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>''); + } + } + + if (isset($table['background-image'])) { + if ($table['background-image']['gradient'] && preg_match('/(-moz-)*(repeating-)*(linear|radial)-gradient/', $table['background-image']['gradient'] )) { + $g = $this->grad->parseMozGradient( $table['background-image']['gradient'] ); + if ($g) { + $this->tableBackgrounds[$level*9+1][] = array('gradient'=>true, 'x'=>$bx, 'y'=>$by, 'w'=>$bw, 'h'=>$bh, 'gradtype'=>$g['type'], 'stops'=>$g['stops'], 'colorspace'=>$g['colorspace'], 'coords'=>$g['coords'], 'extend'=>$g['extend'], 'clippath'=>''); + } + } + else { + $image_id = $table['background-image']['image_id']; + $orig_w = $table['background-image']['orig_w']; + $orig_h = $table['background-image']['orig_h']; + $x_pos = $table['background-image']['x_pos']; + $y_pos = $table['background-image']['y_pos']; + $x_repeat = $table['background-image']['x_repeat']; + $y_repeat = $table['background-image']['y_repeat']; + $resize = $table['background-image']['resize']; + $opacity = $table['background-image']['opacity']; + $itype = $table['background-image']['itype']; + $this->tableBackgrounds[$level*9+2][] = array('x'=>$bx, 'y'=>$by, 'w'=>$bw, 'h'=>$bh, 'image_id'=>$image_id, 'orig_w'=>$orig_w, 'orig_h'=>$orig_h, 'x_pos'=>$x_pos, 'y_pos'=>$y_pos, 'x_repeat'=>$x_repeat, 'y_repeat'=>$y_repeat, 'clippath'=>'', 'resize'=>$resize, 'opacity'=>$opacity, 'itype'=>$itype); + } + } +/*-- END BACKGROUNDS --*/ + } + + if ($this->tableBackgrounds && $level == 1) { + $s = $this->PrintTableBackgrounds(); + if ($this->table_rotate && !$this->processingHeader && !$this->processingFooter) { + $this->tablebuffer = preg_replace('/(___TABLE___BACKGROUNDS'.date('jY').')/', '\\1'."\n".$s."\n", $this->tablebuffer); + if ($level == 1) { $this->tablebuffer = preg_replace('/(___TABLE___BACKGROUNDS'.date('jY').')/', " ", $this->tablebuffer); } + } + else if ($this->bufferoutput) { + $this->headerbuffer = preg_replace('/(___TABLE___BACKGROUNDS'.date('jY').')/', '\\1'."\n".$s."\n", $this->headerbuffer); + if ($level == 1) { $this->headerbuffer = preg_replace('/(___TABLE___BACKGROUNDS'.date('jY').')/', " ", $this->headerbuffer ); } + } + else { + $this->pages[$this->page] = preg_replace('/(___TABLE___BACKGROUNDS'.date('jY').')/', '\\1'."\n".$s."\n", $this->pages[$this->page]); + if ($level == 1) { $this->pages[$this->page] = preg_replace('/(___TABLE___BACKGROUNDS'.date('jY').')/', " ", $this->pages[$this->page]); } + } + $this->tableBackgrounds = array(); + } + + + // TABLE BOTTOM MARGIN + if ($table['margin']['B']) { + if (!$this->table_rotate && $level==1) { + $this->DivLn($table['margin']['B'],$this->blklvl,true); // collapsible + } + else { + $this->y += ($table['margin']['B']); + } + } + + if ($this->ColActive && $level==1) { $this->breakpoints[$this->CurrCol][] = $this->y; } // *COLUMNS* + + if ($this->cacheTables) { fclose($fh); } + + if ($split) { + // Are there more columns to print on a next page? + if ($lastCol < $numcols-1) { + $splitpg++; + $startcol = $lastCol + 1; + return array(false, $startrow, $startcol, $splitpg, $returny, $y0); + } + else { + if ($this->cacheTables) { + unlink($table['cache']); + @unlink($table['cache'].'.bak'); + } + return array(true,0,0,0); + } + } + if ($this->cacheTables) { + unlink($table['cache']); + @unlink($table['cache'].'.bak'); + } + +}//END OF FUNCTION _tableWrite() + + +/////////////////////////END OF TABLE CODE////////////////////////////////// +/*-- END TABLES --*/ + +function _putextgstates() { + for ($i = 1; $i <= count($this->extgstates); $i++) { + $this->_newobj(); + $this->extgstates[$i]['n'] = $this->n; + $this->_out('<</Type /ExtGState'); + foreach ($this->extgstates[$i]['parms'] as $k=>$v) + $this->_out('/'.$k.' '.$v); + $this->_out('>>'); + $this->_out('endobj'); + } +} + +function _putocg() { + if ($this->hasOC) { // mPDF 5.6.01 + $this->_newobj(); + $this->n_ocg_print=$this->n; + $this->_out('<</Type /OCG /Name '.$this->_textstring('Print only')); + $this->_out('/Usage <</Print <</PrintState /ON>> /View <</ViewState /OFF>>>>>>'); + $this->_out('endobj'); + $this->_newobj(); + $this->n_ocg_view=$this->n; + $this->_out('<</Type /OCG /Name '.$this->_textstring('Screen only')); + $this->_out('/Usage <</Print <</PrintState /OFF>> /View <</ViewState /ON>>>>>>'); + $this->_out('endobj'); + $this->_newobj(); + $this->n_ocg_hidden=$this->n; + $this->_out('<</Type /OCG /Name '.$this->_textstring('Hidden')); + $this->_out('/Usage <</Print <</PrintState /OFF>> /View <</ViewState /OFF>>>>>>'); + $this->_out('endobj'); + } + // mPDF 5.6.01 Add Layers + if (count($this->layers)) { + ksort($this->layers); + foreach($this->layers as $id=>$layer) { + $this->_newobj(); + $this->layers[$id]['n'] = $this->n; + // mPDF 5.6.28 + if (isset($this->layerDetails[$id]['name']) && $this->layerDetails[$id]['name']) { + $name = $this->layerDetails[$id]['name']; + } + else { $name = $layer['name']; } + $this->_out('<</Type /OCG /Name '.$this->_UTF16BEtextstring($name).'>>'); + $this->_out('endobj'); + } + } +} + + +/*-- IMPORTS --*/ + + // from mPDFI + function _putimportedobjects() { + if (is_array($this->parsers) && count($this->parsers) > 0) { + foreach($this->parsers AS $filename => $p) { + $this->current_parser =& $this->parsers[$filename]; + if (is_array($this->_obj_stack[$filename])) { + while($n = key($this->_obj_stack[$filename])) { + $nObj = $this->current_parser->pdf_resolve_object($this->current_parser->c,$this->_obj_stack[$filename][$n][1]); + $this->_newobj($this->_obj_stack[$filename][$n][0]); + if ($nObj[0] == PDF_TYPE_STREAM) { + $this->pdf_write_value($nObj); + } + else { + $this->pdf_write_value($nObj[1]); + } + $this->_out('endobj'); + $this->_obj_stack[$filename][$n] = null; // free memory + unset($this->_obj_stack[$filename][$n]); + reset($this->_obj_stack[$filename]); + } + } + } + } + } + + + function _putformxobjects() { + $filter=($this->compress) ? '/Filter /FlateDecode ' : ''; + reset($this->tpls); + foreach($this->tpls AS $tplidx => $tpl) { + $p=($this->compress) ? gzcompress($tpl['buffer']) : $tpl['buffer']; + $this->_newobj(); + $this->tpls[$tplidx]['n'] = $this->n; + $this->_out('<<'.$filter.'/Type /XObject'); + $this->_out('/Subtype /Form'); + $this->_out('/FormType 1'); + // Left/Bottom/Right/Top + $this->_out(sprintf('/BBox [%.2F %.2F %.2F %.2F]', + $tpl['box']['x']*_MPDFK, + $tpl['box']['y']*_MPDFK, + ($tpl['box']['x'] + $tpl['box']['w'])*_MPDFK, + ($tpl['box']['y'] + $tpl['box']['h'])*_MPDFK ) + ); + + + if (isset($tpl['box'])) + $this->_out(sprintf('/Matrix [1 0 0 1 %.5F %.5F]',-$tpl['box']['x']*_MPDFK, -$tpl['box']['y']*_MPDFK)); + $this->_out('/Resources '); + + if (isset($tpl['resources'])) { + $this->current_parser =& $tpl['parser']; + $this->pdf_write_value($tpl['resources']); + } else { + $this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'); + if (isset($this->_res['tpl'][$tplidx]['fonts']) && count($this->_res['tpl'][$tplidx]['fonts'])) { + $this->_out('/Font <<'); + foreach($this->_res['tpl'][$tplidx]['fonts'] as $font) + $this->_out('/F'.$font['i'].' '.$font['n'].' 0 R'); + $this->_out('>>'); + } + if(isset($this->_res['tpl'][$tplidx]['images']) && count($this->_res['tpl'][$tplidx]['images']) || + isset($this->_res['tpl'][$tplidx]['tpls']) && count($this->_res['tpl'][$tplidx]['tpls'])) + { + $this->_out('/XObject <<'); + if (isset($this->_res['tpl'][$tplidx]['images']) && count($this->_res['tpl'][$tplidx]['images'])) { + foreach($this->_res['tpl'][$tplidx]['images'] as $image) + $this->_out('/I'.$image['i'].' '.$image['n'].' 0 R'); + } + if (isset($this->_res['tpl'][$tplidx]['tpls']) && count($this->_res['tpl'][$tplidx]['tpls'])) { + foreach($this->_res['tpl'][$tplidx]['tpls'] as $i => $itpl) + $this->_out($this->tplprefix.$i.' '.$itpl['n'].' 0 R'); + } + $this->_out('>>'); + } + $this->_out('>>'); + } + + $this->_out('/Length '.strlen($p).' >>'); + $this->_putstream($p); + $this->_out('endobj'); + } + } + +/*-- END IMPORTS --*/ + + +function _putpatterns() { + for ($i = 1; $i <= count($this->patterns); $i++) { + $x = $this->patterns[$i]['x']; + $y = $this->patterns[$i]['y']; + $w = $this->patterns[$i]['w']; + $h = $this->patterns[$i]['h']; + $pgh = $this->patterns[$i]['pgh']; + $orig_w = $this->patterns[$i]['orig_w']; + $orig_h = $this->patterns[$i]['orig_h']; + $image_id = $this->patterns[$i]['image_id']; + $itype = $this->patterns[$i]['itype']; + $bpa = $this->patterns[$i]['bpa']; // mPDF 5.6.10 background positioning area + + if ($this->patterns[$i]['x_repeat']) { $x_repeat = true; } + else { $x_repeat = false; } + if ($this->patterns[$i]['y_repeat']) { $y_repeat = true; } + else { $y_repeat = false; } + $x_pos = $this->patterns[$i]['x_pos']; + if (stristr($x_pos ,'%') ) { + $x_pos += 0; + $x_pos /= 100; + if (isset($bpa['w']) && $bpa['w']) $x_pos = ($bpa['w'] * $x_pos) - ($orig_w/_MPDFK * $x_pos); // mPDF 5.6.10 + else $x_pos = ($w * $x_pos) - ($orig_w/_MPDFK * $x_pos); + } + $y_pos = $this->patterns[$i]['y_pos']; + if (stristr($y_pos ,'%') ) { + $y_pos += 0; + $y_pos /= 100; + if (isset($bpa['h']) && $bpa['h']) $y_pos = ($bpa['h'] * $y_pos) - ($orig_h/_MPDFK * $y_pos); // mPDF 5.6.10 + else $y_pos = ($h * $y_pos) - ($orig_h/_MPDFK * $y_pos); + } + if (isset($bpa['x']) && $bpa['x']) $adj_x = ($x_pos + $bpa['x']) *_MPDFK; // mPDF 5.6.10 + else $adj_x = ($x_pos + $x) *_MPDFK; + if (isset($bpa['y']) && $bpa['y']) $adj_y = (($pgh - $y_pos - $bpa['y'])*_MPDFK) - $orig_h ; // mPDF 5.6.10 + else $adj_y = (($pgh - $y_pos - $y)*_MPDFK) - $orig_h ; + $img_obj = false; + if ($itype == 'svg' || $itype == 'wmf') { + foreach($this->formobjects AS $fo) { + if ($fo['i'] == $image_id) { + $img_obj = $fo['n']; + $fo_w = $fo['w']; + $fo_h = -$fo['h']; + $wmf_x = $fo['x']; + $wmf_y = $fo['y']; + break; + } + } + } + else { + foreach($this->images AS $img) { + if ($img['i'] == $image_id) { $img_obj = $img['n']; break; } + } + } + if (!$img_obj ) { echo "Problem: Image object not found for background pattern ".$img['i']; exit; } + + $this->_newobj(); + $this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'); + if ($itype == 'svg' || $itype == 'wmf') { + $this->_out('/XObject <</FO'.$image_id.' '.$img_obj.' 0 R >>'); + // ******* ADD ANY ExtGStates, Shading AND Fonts needed for the FormObject + // Set in classes/svg array['fo'] = true + // Required that _putshaders comes before _putpatterns in _putresources + // This adds any resources associated with any FormObject to every Formobject - overkill but works! + if (count($this->extgstates)) { + $this->_out('/ExtGState <<'); + foreach($this->extgstates as $k=>$extgstate) + if (isset($extgstate['fo']) && $extgstate['fo']) { + if (isset($extgstate['trans'])) $this->_out('/'.$extgstate['trans'].' '.$extgstate['n'].' 0 R'); + else $this->_out('/GS'.$k.' '.$extgstate['n'].' 0 R'); + } + $this->_out('>>'); + } +/*-- BACKGROUNDS --*/ + if (isset($this->gradients) AND (count($this->gradients) > 0)) { + $this->_out('/Shading <<'); + foreach ($this->gradients as $id => $grad) { + if (isset($grad['fo']) && $grad['fo']) { + $this->_out('/Sh'.$id.' '.$grad['id'].' 0 R'); + } + } + $this->_out('>>'); + } +/*-- END BACKGROUNDS --*/ + $this->_out('/Font <<'); + foreach($this->fonts as $font) { + if (!$font['used'] && $font['type']=='TTF') { continue; } + if (isset($font['fo']) && $font['fo']) { + if ($font['type']=='TTF' && ($font['sip'] || $font['smp'])) { + foreach($font['n'] AS $k => $fid) { + $this->_out('/F'.$font['subsetfontids'][$k].' '.$font['n'][$k].' 0 R'); + } + } + else { + $this->_out('/F'.$font['i'].' '.$font['n'].' 0 R'); + } + } + } + $this->_out('>>'); + } + else { + $this->_out('/XObject <</I'.$image_id.' '.$img_obj.' 0 R >>'); + } + $this->_out('>>'); + $this->_out('endobj'); + + $this->_newobj(); + $this->patterns[$i]['n'] = $this->n; + $this->_out('<< /Type /Pattern /PatternType 1 /PaintType 1 /TilingType 2'); + $this->_out('/Resources '. ($this->n-1) .' 0 R'); + + $this->_out(sprintf('/BBox [0 0 %.3F %.3F]',$orig_w,$orig_h)); + if ($x_repeat) { $this->_out(sprintf('/XStep %.3F',$orig_w)); } + else { $this->_out(sprintf('/XStep %d',99999)); } + if ($y_repeat) { $this->_out(sprintf('/YStep %.3F',$orig_h)); } + else { $this->_out(sprintf('/YStep %d',99999)); } + + if ($itype == 'svg' || $itype == 'wmf') { + $this->_out(sprintf('/Matrix [1 0 0 -1 %.3F %.3F]', $adj_x, ($adj_y+$orig_h))); + $s = sprintf("q %.3F 0 0 %.3F %.3F %.3F cm /FO%d Do Q",($orig_w/$fo_w), (-$orig_h/$fo_h), -($orig_w/$fo_w)*$wmf_x, ($orig_w/$fo_w)*$wmf_y, $image_id); + } + else { + $this->_out(sprintf('/Matrix [1 0 0 1 %.3F %.3F]',$adj_x,$adj_y)); + $s = sprintf("q %.3F 0 0 %.3F 0 0 cm /I%d Do Q",$orig_w,$orig_h,$image_id); + } + + if ($this->compress) { + $this->_out('/Filter /FlateDecode'); + $s = gzcompress($s); + } + $this->_out('/Length '.strlen($s).'>>'); + $this->_putstream($s); + $this->_out('endobj'); + } +} + +/*-- BACKGROUNDS --*/ +function _putshaders() { + $maxid = count($this->gradients); //index for transparency gradients + foreach ($this->gradients as $id => $grad) { + if (($grad['type'] == 2 || $grad['type'] == 3) && empty($grad['is_mask'])) { + $this->_newobj(); + $this->_out('<<'); + $this->_out('/FunctionType 3'); + $this->_out('/Domain [0 1]'); + $fn = array(); + $bd = array(); + $en = array(); + for($i=0; $i<(count($grad['stops'])-1); $i++) { + $fn[] = ($this->n+1+$i).' 0 R'; + $en[] = '0 1'; + if ($i>0) { $bd[] = sprintf('%.3F', $grad['stops'][$i]['offset']); } + } + $this->_out('/Functions ['.implode(' ',$fn).']'); + $this->_out('/Bounds ['.implode(' ',$bd).']'); + $this->_out('/Encode ['.implode(' ',$en).']'); + $this->_out('>>'); + $this->_out('endobj'); + $f1 = $this->n; + for($i=0; $i<(count($grad['stops'])-1); $i++) { + $this->_newobj(); + $this->_out('<<'); + $this->_out('/FunctionType 2'); + $this->_out('/Domain [0 1]'); + $this->_out('/C0 ['.$grad['stops'][$i]['col'].']'); + $this->_out('/C1 ['.$grad['stops'][$i+1]['col'].']'); + $this->_out('/N 1'); + $this->_out('>>'); + $this->_out('endobj'); + } + } + if ($grad['type'] == 2 || $grad['type'] == 3) { + if (isset($grad['trans']) && $grad['trans']) { + $this->_newobj(); + $this->_out('<<'); + $this->_out('/FunctionType 3'); + $this->_out('/Domain [0 1]'); + $fn = array(); + $bd = array(); + $en = array(); + for($i=0; $i<(count($grad['stops'])-1); $i++) { + $fn[] = ($this->n+1+$i).' 0 R'; + $en[] = '0 1'; + if ($i>0) { $bd[] = sprintf('%.3F', $grad['stops'][$i]['offset']); } + } + $this->_out('/Functions ['.implode(' ',$fn).']'); + $this->_out('/Bounds ['.implode(' ',$bd).']'); + $this->_out('/Encode ['.implode(' ',$en).']'); + $this->_out('>>'); + $this->_out('endobj'); + $f2 = $this->n; + for($i=0; $i<(count($grad['stops'])-1); $i++) { + $this->_newobj(); + $this->_out('<<'); + $this->_out('/FunctionType 2'); + $this->_out('/Domain [0 1]'); + $this->_out(sprintf('/C0 [%.3F]', $grad['stops'][$i]['opacity'])); + $this->_out(sprintf('/C1 [%.3F]', $grad['stops'][$i+1]['opacity'])); + $this->_out('/N 1'); + $this->_out('>>'); + $this->_out('endobj'); + } + } + } + + if (empty($grad['is_mask'])) { + $this->_newobj(); + $this->_out('<<'); + $this->_out('/ShadingType '.$grad['type']); + if (isset($grad['colorspace'])) { + $this->_out('/ColorSpace /Device'.$grad['colorspace']); // Can use CMYK if all C0 and C1 above have 4 values + } else { + $this->_out('/ColorSpace /DeviceRGB'); + } + if ($grad['type'] == 2) { + $this->_out(sprintf('/Coords [%.3F %.3F %.3F %.3F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3])); + $this->_out('/Function '.$f1.' 0 R'); + $this->_out('/Extend ['.$grad['extend'][0].' '.$grad['extend'][1].'] '); + $this->_out('>>'); + } + else if ($grad['type'] == 3) { + //x0, y0, r0, x1, y1, r1 + //at this this time radius of inner circle is 0 + $ir = 0; + if (isset($grad['coords'][5]) && $grad['coords'][5]) { $ir = $grad['coords'][5]; } + $this->_out(sprintf('/Coords [%.3F %.3F %.3F %.3F %.3F %.3F]', $grad['coords'][0], $grad['coords'][1], $ir, $grad['coords'][2], $grad['coords'][3], $grad['coords'][4])); + $this->_out('/Function '.$f1.' 0 R'); + $this->_out('/Extend ['.$grad['extend'][0].' '.$grad['extend'][1].'] '); + $this->_out('>>'); + } + else if ($grad['type']==6) { + $this->_out('/BitsPerCoordinate 16'); + $this->_out('/BitsPerComponent 8'); + if ($grad['colorspace'] == 'CMYK') { $this->_out('/Decode[0 1 0 1 0 1 0 1 0 1 0 1]'); } + else if ($grad['colorspace'] == 'Gray') { $this->_out('/Decode[0 1 0 1 0 1]'); } + else { $this->_out('/Decode[0 1 0 1 0 1 0 1 0 1]'); } + $this->_out('/BitsPerFlag 8'); + $this->_out('/Length '.strlen($grad['stream'])); + $this->_out('>>'); + $this->_putstream($grad['stream']); + } + $this->_out('endobj'); + } + + $this->gradients[$id]['id'] = $this->n; + + // set pattern object + $this->_newobj(); + $out = '<< /Type /Pattern /PatternType 2'; + $out .= ' /Shading '.$this->gradients[$id]['id'].' 0 R'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + + + $this->gradients[$id]['pattern'] = $this->n; + + if (isset($grad['trans']) && $grad['trans']) { + // luminosity pattern + $transid = $id + $maxid; + $this->_newobj(); + $this->_out('<<'); + $this->_out('/ShadingType '.$grad['type']); + $this->_out('/ColorSpace /DeviceGray'); + if ($grad['type'] == 2) { + $this->_out(sprintf('/Coords [%.3F %.3F %.3F %.3F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3])); + $this->_out('/Function '.$f2.' 0 R'); + $this->_out('/Extend ['.$grad['extend'][0].' '.$grad['extend'][1].'] '); + $this->_out('>>'); + } + else if ($grad['type'] == 3) { + //x0, y0, r0, x1, y1, r1 + //at this this time radius of inner circle is 0 + $ir = 0; + if (isset($grad['coords'][5]) && $grad['coords'][5]) { $ir = $grad['coords'][5]; } + $this->_out(sprintf('/Coords [%.3F %.3F %.3F %.3F %.3F %.3F]', $grad['coords'][0], $grad['coords'][1], $ir, $grad['coords'][2], $grad['coords'][3], $grad['coords'][4])); + $this->_out('/Function '.$f2.' 0 R'); + $this->_out('/Extend ['.$grad['extend'][0].' '.$grad['extend'][1].'] '); + $this->_out('>>'); + } + else if ($grad['type']==6) { + $this->_out('/BitsPerCoordinate 16'); + $this->_out('/BitsPerComponent 8'); + $this->_out('/Decode[0 1 0 1 0 1]'); + $this->_out('/BitsPerFlag 8'); + $this->_out('/Length '.strlen($grad['stream_trans'])); + $this->_out('>>'); + $this->_putstream($grad['stream_trans']); + } + $this->_out('endobj'); + + $this->gradients[$transid]['id'] = $this->n; + $this->_newobj(); + $this->_out('<< /Type /Pattern /PatternType 2'); + $this->_out('/Shading '.$this->gradients[$transid]['id'].' 0 R'); + $this->_out('>>'); + $this->_out('endobj'); + $this->gradients[$transid]['pattern'] = $this->n; + $this->_newobj(); + // Need to extend size of viewing box in case of transformations + $str = 'q /a0 gs /Pattern cs /p'.$transid.' scn -'.($this->wPt/2).' -'.($this->hPt/2).' '.(2*$this->wPt).' '.(2*$this->hPt).' re f Q'; + $filter=($this->compress) ? '/Filter /FlateDecode ' : ''; + $p=($this->compress) ? gzcompress($str) : $str; + $this->_out('<< /Type /XObject /Subtype /Form /FormType 1 '.$filter); + $this->_out('/Length '.strlen($p)); + $this->_out('/BBox [-'.($this->wPt/2).' -'.($this->hPt/2).' '.(2*$this->wPt).' '.(2*$this->hPt).']'); + $this->_out('/Group << /Type /Group /S /Transparency /CS /DeviceGray >>'); + $this->_out('/Resources <<'); + $this->_out('/ExtGState << /a0 << /ca 1 /CA 1 >> >>'); + $this->_out('/Pattern << /p'.$transid.' '.$this->gradients[$transid]['pattern'].' 0 R >>'); + $this->_out('>>'); + $this->_out('>>'); + $this->_putstream($p); + $this->_out('endobj'); + $this->_newobj(); + $this->_out('<< /Type /Mask /S /Luminosity /G '.($this->n - 1).' 0 R >>'."\n".'endobj'); + $this->_newobj(); + $this->_out('<< /Type /ExtGState /SMask '.($this->n - 1).' 0 R /AIS false >>'."\n".'endobj'); + if ($grad['fo']) { $this->extgstates[] = array('n' => $this->n, 'trans' => 'TGS'.$id, 'fo'=>true); } + else { $this->extgstates[] = array('n' => $this->n, 'trans' => 'TGS'.$id); } + } + } +} +/*-- END BACKGROUNDS --*/ + +function _putspotcolors() { + foreach($this->spotColors as $name=>$color) { + $this->_newobj(); + $this->_out('[/Separation /'.str_replace(' ','#20',$name)); + $this->_out('/DeviceCMYK <<'); + $this->_out('/Range [0 1 0 1 0 1 0 1] /C0 [0 0 0 0] '); + $this->_out(sprintf('/C1 [%.3F %.3F %.3F %.3F] ',$color['c']/100,$color['m']/100,$color['y']/100,$color['k']/100)); + $this->_out('/FunctionType 2 /Domain [0 1] /N 1>>]'); + $this->_out('endobj'); + $this->spotColors[$name]['n']=$this->n; + } +} + + +function _putresources() { + if ($this->hasOC || count($this->layers)) // mPDF 5.6.01 + $this->_putocg(); + $this->_putextgstates(); + $this->_putspotcolors(); + if ($this->progressBar) { $this->UpdateProgressBar(2,'40','Compiling Fonts'); } // *PROGRESS-BAR* + $this->_putfonts(); + if ($this->progressBar) { $this->UpdateProgressBar(2,'50','Compiling Images'); } // *PROGRESS-BAR* + $this->_putimages(); + $this->_putformobjects(); // *IMAGES-CORE* + +/*-- IMPORTS --*/ + if ($this->enableImports) { + $this->_putformxobjects(); + $this->_putimportedobjects(); + } +/*-- END IMPORTS --*/ + +/*-- BACKGROUNDS --*/ + $this->_putshaders(); + $this->_putpatterns(); +/*-- END BACKGROUNDS --*/ + + + //Resource dictionary + $this->offsets[2]=strlen($this->buffer); + $this->_out('2 0 obj'); + $this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'); + + $this->_out('/Font <<'); + foreach($this->fonts as $font) { + if (!$font['used'] && $font['type']=='TTF') { continue; } + if ($font['type']=='TTF' && ($font['sip'] || $font['smp'])) { + foreach($font['n'] AS $k => $fid) { + $this->_out('/F'.$font['subsetfontids'][$k].' '.$font['n'][$k].' 0 R'); + } + } + else { + $this->_out('/F'.$font['i'].' '.$font['n'].' 0 R'); + } + } + $this->_out('>>'); + + if (count($this->spotColors)) { + $this->_out('/ColorSpace <<'); + foreach($this->spotColors as $color) + $this->_out('/CS'.$color['i'].' '.$color['n'].' 0 R'); + $this->_out('>>'); + } + + if (count($this->extgstates)) { + $this->_out('/ExtGState <<'); + foreach($this->extgstates as $k=>$extgstate) + if (isset($extgstate['trans'])) $this->_out('/'.$extgstate['trans'].' '.$extgstate['n'].' 0 R'); + else $this->_out('/GS'.$k.' '.$extgstate['n'].' 0 R'); + $this->_out('>>'); + } + +/*-- BACKGROUNDS --*/ + if (isset($this->gradients) AND (count($this->gradients) > 0)) { + $this->_out('/Shading <<'); + foreach ($this->gradients as $id => $grad) { + $this->_out('/Sh'.$id.' '.$grad['id'].' 0 R'); + } + $this->_out('>>'); + +/* + // ??? Not needed !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + $this->_out('/Pattern <<'); + foreach ($this->gradients as $id => $grad) { + $this->_out('/P'.$id.' '.$grad['pattern'].' 0 R'); + } + $this->_out('>>'); +*/ + } +/*-- END BACKGROUNDS --*/ + + if(count($this->images) || count($this->formobjects) || ($this->enableImports && count($this->tpls))) { + $this->_out('/XObject <<'); + foreach($this->images as $image) + $this->_out('/I'.$image['i'].' '.$image['n'].' 0 R'); + foreach($this->formobjects as $formobject) + $this->_out('/FO'.$formobject['i'].' '.$formobject['n'].' 0 R'); +/*-- IMPORTS --*/ + if ($this->enableImports && count($this->tpls)) { + foreach($this->tpls as $tplidx => $tpl) { + $this->_out($this->tplprefix.$tplidx.' '.$tpl['n'].' 0 R'); + } + } +/*-- END IMPORTS --*/ + $this->_out('>>'); + } + +/*-- BACKGROUNDS --*/ + + if (count($this->patterns)) { + $this->_out('/Pattern <<'); + foreach($this->patterns as $k=>$patterns) + $this->_out('/P'.$k.' '.$patterns['n'].' 0 R'); + $this->_out('>>'); + } +/*-- END BACKGROUNDS --*/ + + // mPDF 5.6.01 + if ($this->hasOC || count($this->layers)) { + $this->_out('/Properties <<'); + if ($this->hasOC) { + $this->_out('/OC1 '.$this->n_ocg_print.' 0 R /OC2 '.$this->n_ocg_view.' 0 R /OC3 '.$this->n_ocg_hidden.' 0 R '); + } + if (count($this->layers)) { + foreach($this->layers as $id=>$layer) + $this->_out('/ZI'.$id.' '.$layer['n'].' 0 R'); + } + $this->_out('>>'); + } + + $this->_out('>>'); + $this->_out('endobj'); // end resource dictionary + + $this->_putbookmarks(); // *BOOKMARKS* + + if (isset($this->js) && $this->js) { + $this->_putjavascript(); + } + +/*-- ENCRYPTION --*/ + if ($this->encrypted) { + $this->_newobj(); + $this->enc_obj_id = $this->n; + $this->_out('<<'); + $this->_putencryption(); + $this->_out('>>'); + $this->_out('endobj'); + } +/*-- END ENCRYPTION --*/ +} + + +function _putjavascript() { + $this->_newobj(); + $this->n_js = $this->n; + $this->_out('<<'); + $this->_out('/Names [(EmbeddedJS) '.(1 + $this->n).' 0 R ]'); + $this->_out('>>'); + $this->_out('endobj'); + + $this->_newobj(); + $this->_out('<<'); + $this->_out('/S /JavaScript'); + $this->_out('/JS '.$this->_textstring($this->js)); + $this->_out('>>'); + $this->_out('endobj'); +} + + + + +/*-- ENCRYPTION --*/ +function _putencryption() { + $this->_out('/Filter /Standard'); + if ($this->useRC128encryption) { + $this->_out('/V 2'); + $this->_out('/R 3'); + $this->_out('/Length 128'); + } + else { + $this->_out('/V 1'); + $this->_out('/R 2'); + } + $this->_out('/O ('.$this->_escape($this->Ovalue).')'); + $this->_out('/U ('.$this->_escape($this->Uvalue).')'); + $this->_out('/P '.$this->Pvalue); +} +/*-- END ENCRYPTION --*/ + +function _puttrailer() { + $this->_out('/Size '.($this->n+1)); + $this->_out('/Root '.$this->n.' 0 R'); + $this->_out('/Info '.$this->InfoRoot.' 0 R'); +/*-- ENCRYPTION --*/ + if ($this->encrypted) { + $this->_out('/Encrypt '.$this->enc_obj_id.' 0 R'); + $this->_out('/ID [<'.$this->uniqid.'> <'.$this->uniqid.'>]'); + } + else { +/*-- END ENCRYPTION --*/ + $uniqid = md5(time() . $this->buffer); + $this->_out('/ID [<'.$uniqid.'> <'.$uniqid.'>]'); +/*-- ENCRYPTION --*/ + } +/*-- END ENCRYPTION --*/ +} + +/*-- ENCRYPTION --*/ +function SetProtection($permissions=array(),$user_pass='',$owner_pass=null, $length=40) { + $this->encrypted=false; + if (is_string($permissions) && strlen($permissions)>0) { $permissions = array($permissions); } + else if (!is_array($permissions)) { return 0; } + $this->last_rc4_key=''; + $this->padding="\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08". + "\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A"; + + $options = array( + 'print' => 4, // bit 3 + 'modify' => 8, // bit 4 + 'copy' => 16, // bit 5 + 'annot-forms' => 32, // bit 6 + 'fill-forms' => 256, // bit 9 + 'extract' => 512, // bit 10 + 'assemble' => 1024,// bit 11 + 'print-highres' => 2048 // bit 12 + ); + // bit 31 = 1073741824 + // bit 32 = 2147483648 + // bits 13-31 = 2147479552 + // bits 13-32 = 4294963200 + 192 = 4294963392 + $protection = 4294963392; // bits 7,8,13-32 + foreach ($permissions as $permission) { + if (!isset($options[$permission])) + $this->Error('Incorrect permission: '.$permission); + if ($options[$permission] > 32) { $this->useRC128encryption = true; } + if (isset($options[$permission])) $protection += $options[$permission]; + } + if ($length==128) { $this->useRC128encryption = true; } + if ($owner_pass === null) + $owner_pass = uniqid(rand()); + $this->encrypted = true; + $this->_generateencryptionkey($user_pass, $owner_pass, $protection); +} + + +// Compute key depending on object number where the encrypted data is stored +function _objectkey($n) { + if ($this->useRC128encryption) + $len = 16; + else + $len = 10; + return substr($this->_md5_16($this->encryption_key.pack('VXxx',$n)),0,$len); +} + +// RC4 is the standard encryption algorithm used in PDF format +function _RC4($key, $text) { + if ($this->last_rc4_key != $key) { + $k = str_repeat($key, 256/strlen($key)+1); + $rc4 = range(0,255); + $j = 0; + for ($i=0; $i<256; $i++){ + $t = $rc4[$i]; + $j = ($j + $t + ord($k[$i])) % 256; + $rc4[$i] = $rc4[$j]; + $rc4[$j] = $t; + } + $this->last_rc4_key = $key; + $this->last_rc4_key_c = $rc4; + } else { + $rc4 = $this->last_rc4_key_c; + } + + $len = strlen($text); + $a = 0; + $b = 0; + $out = ''; + for ($i=0; $i<$len; $i++){ + $a = ($a+1)%256; + $t= $rc4[$a]; + $b = ($b+$t)%256; + $rc4[$a] = $rc4[$b]; + $rc4[$b] = $t; + $k = $rc4[($rc4[$a]+$rc4[$b])%256]; + $out.= chr(ord($text[$i]) ^ $k); + } + return $out; +} + +// Get MD5 as binary string +function _md5_16($string) { + return pack('H*',md5($string)); +} + +// Compute O value +function _Ovalue($user_pass, $owner_pass) { + $tmp = $this->_md5_16($owner_pass); + if ($this->useRC128encryption) { + for ($i = 0; $i < 50; ++$i) { + $tmp = $this->_md5_16($tmp); + } + } + if ($this->useRC128encryption) + $keybytelen = (128 / 8); + else + $keybytelen = (40 / 8); + $owner_RC4_key = substr($tmp,0,$keybytelen); + $enc = $this->_RC4($owner_RC4_key, $user_pass); + if ($this->useRC128encryption) { + $len = strlen($owner_RC4_key); + for ($i = 1; $i <= 19; ++$i) { + $key = ''; + for ($j = 0; $j < $len; ++$j) { + $key .= chr(ord($owner_RC4_key{$j}) ^ $i); + } + $enc = $this->_RC4($key, $enc); + } + } + return $enc; +} + +// Compute U value +function _Uvalue() { + if ($this->useRC128encryption) { + $tmp = $this->_md5_16($this->padding.$this->_hexToString($this->uniqid)); + $enc = $this->_RC4($this->encryption_key, $tmp); + $len = strlen($tmp); + for ($i=1; $i<=19; ++$i) { + $key = ''; + for ($j=0; $j<$len; ++$j) { + $key .= chr(ord($this->encryption_key{$j}) ^ $i); + } + $enc = $this->_RC4($key, $enc); + } + $enc .= str_repeat("\x00", 16); + return substr($enc, 0, 32); + } + else { + return $this->_RC4($this->encryption_key, $this->padding); + } +} + +// Compute encryption key +function _generateencryptionkey($user_pass, $owner_pass, $protection) { + // Pad passwords + $user_pass = substr($user_pass.$this->padding,0,32); + $owner_pass = substr($owner_pass.$this->padding,0,32); + $chars = 'ABCDEF1234567890'; + $id = ''; + for ($i=0; $i<32; $i++) { $id .= $chars{rand(0, 15)}; } + $this->uniqid = md5($id); + // Compute O value + $this->Ovalue = $this->_Ovalue($user_pass,$owner_pass); + // Compute encyption key + if ($this->useRC128encryption) + $keybytelen = (128/8); + else + $keybytelen = (40/8); + $prot = sprintf('%032b', $protection); + $perms = chr(bindec(substr($prot,24,8))); + $perms .= chr(bindec(substr($prot,16,8))); + $perms .= chr(bindec(substr($prot,8,8))); + $perms .= chr(bindec(substr($prot,0,8))); + $tmp = $this->_md5_16($user_pass.$this->Ovalue.$perms.$this->_hexToString($this->uniqid)); + if ($this->useRC128encryption) { + for ($i=0; $i<50; ++$i) { + $tmp = $this->_md5_16(substr($tmp, 0, $keybytelen)); + } + } + $this->encryption_key = substr($tmp,0,$keybytelen); + // Compute U value + $this->Uvalue = $this->_Uvalue(); + // Compute P value + $this->Pvalue = $protection; +} + + +function _hexToString($hs) { + $s = ''; + $len = strlen($hs); + if (($len % 2) != 0) { + $hs .= '0'; + ++$len; + } + for ($i = 0; $i < $len; $i += 2) { + $s .= chr(hexdec($hs{$i}.$hs{($i + 1)})); + } + return $s; +} + +/*-- END ENCRYPTION --*/ + +//========================================= +/*-- BOOKMARKS --*/ +// FROM class PDF_Bookmark + +function Bookmark($txt,$level=0,$y=0) { + $txt = $this->purify_utf8_text($txt); + if ($this->text_input_as_HTML) { + $txt = $this->all_entities_to_utf8($txt); + } + if($y==-1) { + if (!$this->ColActive){ $y=$this->y; } + else { $y = $this->y0; } // If columns are on - mark top of columns + } + // else y is used as set, or =0 i.e. top of page + // DIRECTIONALITY RTL + $bmo = array('t'=>$txt,'l'=>$level,'y'=>$y,'p'=>$this->page); + if ($this->keep_block_together) { + $this->ktBMoutlines[]= $bmo; + } +/*-- TABLES --*/ + else if ($this->table_rotate) { + $this->tbrot_BMoutlines[]= $bmo; + } + else if ($this->kwt) { + $this->kwt_BMoutlines[]= $bmo; + } +/*-- END TABLES --*/ + else if ($this->ColActive) { // *COLUMNS* + $this->col_BMoutlines[]= $bmo; // *COLUMNS* + } // *COLUMNS* + else { + $this->BMoutlines[]= $bmo; + } +} + + +function _putbookmarks() +{ + $nb=count($this->BMoutlines); + if($nb==0) + return; + + // mPDF 5.6.36 + $bmo = $this->BMoutlines; + $this->BMoutlines = array(); + $lastlevel = -1; + for($i=0;$i<count($bmo);$i++) { + if ($bmo[$i]['l']>0) { + while($bmo[$i]['l']-$lastlevel > 1) { // If jump down more than one level, insert a new entry + $new = $bmo[$i]; + $new['t']="[".$new['t']."]"; // Put [] around text/title to highlight + $new['l']=$lastlevel+1; + $lastlevel++; + $this->BMoutlines[] = $new; + } + } + $this->BMoutlines[] = $bmo[$i]; + $lastlevel = $bmo[$i]['l']; + } + $nb=count($this->BMoutlines); + + $lru=array(); + $level=0; + foreach($this->BMoutlines as $i=>$o) { + if($o['l']>0) { + $parent=$lru[$o['l']-1]; + //Set parent and last pointers + $this->BMoutlines[$i]['parent']=$parent; + $this->BMoutlines[$parent]['last']=$i; + if($o['l']>$level) { + //Level increasing: set first pointer + $this->BMoutlines[$parent]['first']=$i; + } + } + else { + $this->BMoutlines[$i]['parent']=$nb; + } + if($o['l']<=$level and $i>0) { + //Set prev and next pointers + $prev=$lru[$o['l']]; + $this->BMoutlines[$prev]['next']=$i; + $this->BMoutlines[$i]['prev']=$prev; + } + $lru[$o['l']]=$i; + $level=$o['l']; + } + + + //Outline items + $n=$this->n+1; + foreach($this->BMoutlines as $i=>$o) { + $this->_newobj(); + $this->_out('<</Title '.$this->_UTF16BEtextstring($o['t'])); + $this->_out('/Parent '.($n+$o['parent']).' 0 R'); + if(isset($o['prev'])) + $this->_out('/Prev '.($n+$o['prev']).' 0 R'); + if(isset($o['next'])) + $this->_out('/Next '.($n+$o['next']).' 0 R'); + if(isset($o['first'])) + $this->_out('/First '.($n+$o['first']).' 0 R'); + if(isset($o['last'])) + $this->_out('/Last '.($n+$o['last']).' 0 R'); + + + if (isset($this->pageDim[$o['p']]['h'])) { $h=$this->pageDim[$o['p']]['h']; } + else { $h = 0; } + + $this->_out(sprintf('/Dest [%d 0 R /XYZ 0 %.3F null]',1+2*($o['p']),($h-$o['y'])*_MPDFK)); + if (isset($this->bookmarkStyles) && isset($this->bookmarkStyles[$o['l']])) { + // font style + $bms = $this->bookmarkStyles[$o['l']]['style']; + $style = 0; + if (strpos($bms,'B') !== false) { $style += 2; } + if (strpos($bms,'I') !== false) { $style += 1; } + $this->_out(sprintf('/F %d', $style)); + // Colour + $col = $this->bookmarkStyles[$o['l']]['color']; + if (isset($col) && is_array($col) && count($col)==3) { + $this->_out(sprintf('/C [%.3F %.3F %.3F]', ($col[0]/255), ($col[1]/255), ($col[2]/255))); + } + } + + $this->_out('/Count 0>>'); + $this->_out('endobj'); + } + //Outline root + $this->_newobj(); + $this->OutlineRoot=$this->n; + $this->_out('<</Type /BMoutlines /First '.$n.' 0 R'); + $this->_out('/Last '.($n+$lru[0]).' 0 R>>'); + $this->_out('endobj'); +} +/*-- END BOOKMARKS --*/ + + + +//====================================================== + + +// DEPRACATED but included for backwards compatability +function startPageNums() { +} + +//====================================================== +/*-- TOC --*/ +// ToC TABLE OF CONTENTS + +// Initiate, and Mark a place for the Table of Contents to be inserted +function TOC($tocfont='', $tocfontsize=0, $tocindent=0, $resetpagenum='', $pagenumstyle='', $suppress='', $toc_orientation='', $TOCusePaging=true, $TOCuseLinking=false, $toc_id=0, $tocoutdent='') { // mPDF 5.6.19 + if (!class_exists('tocontents', false)) { include(_MPDF_PATH.'classes/tocontents.php'); } + if (empty($this->tocontents)) { $this->tocontents = new tocontents($this); } + $this->tocontents->TOC($tocfont, $tocfontsize, $tocindent, $resetpagenum, $pagenumstyle, $suppress, $toc_orientation, $TOCusePaging, $TOCuseLinking, $toc_id, $tocoutdent); // mPDF 5.6.19 +} + + +function TOCpagebreakByArray($a) { + if (!is_array($a)) { $a = array(); } + if (!class_exists('tocontents', false)) { include(_MPDF_PATH.'classes/tocontents.php'); } + if (empty($this->tocontents)) { $this->tocontents = new tocontents($this); } + $tocoutdent = (isset($a['tocoutdent']) ? $a['tocoutdent'] : (isset($a['outdent']) ? $a['outdent'] : '')); + $TOCusePaging = (isset($a['TOCusePaging']) ? $a['TOCusePaging'] : (isset($a['paging']) ? $a['paging'] : true)); + $TOCuseLinking = (isset($a['TOCuseLinking']) ? $a['TOCuseLinking'] : (isset($a['links']) ? $a['links'] : '')); + $toc_orientation = (isset($a['toc_orientation']) ? $a['toc_orientation'] : (isset($a['toc-orientation']) ? $a['toc-orientation'] : '')); + $toc_mgl = (isset($a['toc_mgl']) ? $a['toc_mgl'] : (isset($a['toc-margin-left']) ? $a['toc-margin-left'] : '')); + $toc_mgr = (isset($a['toc_mgr']) ? $a['toc_mgr'] : (isset($a['toc-margin-right']) ? $a['toc-margin-right'] : '')); + $toc_mgt = (isset($a['toc_mgt']) ? $a['toc_mgt'] : (isset($a['toc-margin-top']) ? $a['toc-margin-top'] : '')); + $toc_mgb = (isset($a['toc_mgb']) ? $a['toc_mgb'] : (isset($a['toc-margin-bottom']) ? $a['toc-margin-bottom'] : '')); + $toc_mgh = (isset($a['toc_mgh']) ? $a['toc_mgh'] : (isset($a['toc-margin-header']) ? $a['toc-margin-header'] : '')); + $toc_mgf = (isset($a['toc_mgf']) ? $a['toc_mgf'] : (isset($a['toc-margin-footer']) ? $a['toc-margin-footer'] : '')); + $toc_ohname = (isset($a['toc_ohname']) ? $a['toc_ohname'] : (isset($a['toc-odd-header-name']) ? $a['toc-odd-header-name'] : '')); + $toc_ehname = (isset($a['toc_ehname']) ? $a['toc_ehname'] : (isset($a['toc-even-header-name']) ? $a['toc-even-header-name'] : '')); + $toc_ofname = (isset($a['toc_ofname']) ? $a['toc_ofname'] : (isset($a['toc-odd-footer-name']) ? $a['toc-odd-footer-name'] : '')); + $toc_efname = (isset($a['toc_efname']) ? $a['toc_efname'] : (isset($a['toc-even-footer-name']) ? $a['toc-even-footer-name'] : '')); + $toc_ohvalue = (isset($a['toc_ohvalue']) ? $a['toc_ohvalue'] : (isset($a['toc-odd-header-value']) ? $a['toc-odd-header-value'] : 0)); + $toc_ehvalue = (isset($a['toc_ehvalue']) ? $a['toc_ehvalue'] : (isset($a['toc-even-header-value']) ? $a['toc-even-header-value'] : 0)); + $toc_ofvalue = (isset($a['toc_ofvalue']) ? $a['toc_ofvalue'] : (isset($a['toc-odd-footer-value']) ? $a['toc-odd-footer-value'] : 0)); + $toc_efvalue = (isset($a['toc_efvalue']) ? $a['toc_efvalue'] : (isset($a['toc-even-footer-value']) ? $a['toc-even-footer-value'] : 0)); + $toc_preHTML = (isset($a['toc_preHTML']) ? $a['toc_preHTML'] : (isset($a['toc-preHTML']) ? $a['toc-preHTML'] : '')); + $toc_postHTML = (isset($a['toc_postHTML']) ? $a['toc_postHTML'] : (isset($a['toc-postHTML']) ? $a['toc-postHTML'] : '')); + $toc_bookmarkText = (isset($a['toc_bookmarkText']) ? $a['toc_bookmarkText'] : (isset($a['toc-bookmarkText']) ? $a['toc-bookmarkText'] : '')); + $resetpagenum = (isset($a['resetpagenum']) ? $a['resetpagenum'] : ''); + $pagenumstyle = (isset($a['pagenumstyle']) ? $a['pagenumstyle'] : ''); + $suppress = (isset($a['suppress']) ? $a['suppress'] : ''); + $orientation = (isset($a['orientation']) ? $a['orientation'] : ''); + $mgl = (isset($a['mgl']) ? $a['mgl'] : (isset($a['margin-left']) ? $a['margin-left'] : '')); + $mgr = (isset($a['mgr']) ? $a['mgr'] : (isset($a['margin-right']) ? $a['margin-right'] : '')); + $mgt = (isset($a['mgt']) ? $a['mgt'] : (isset($a['margin-top']) ? $a['margin-top'] : '')); + $mgb = (isset($a['mgb']) ? $a['mgb'] : (isset($a['margin-bottom']) ? $a['margin-bottom'] : '')); + $mgh = (isset($a['mgh']) ? $a['mgh'] : (isset($a['margin-header']) ? $a['margin-header'] : '')); + $mgf = (isset($a['mgf']) ? $a['mgf'] : (isset($a['margin-footer']) ? $a['margin-footer'] : '')); + $ohname = (isset($a['ohname']) ? $a['ohname'] : (isset($a['odd-header-name']) ? $a['odd-header-name'] : '')); + $ehname = (isset($a['ehname']) ? $a['ehname'] : (isset($a['even-header-name']) ? $a['even-header-name'] : '')); + $ofname = (isset($a['ofname']) ? $a['ofname'] : (isset($a['odd-footer-name']) ? $a['odd-footer-name'] : '')); + $efname = (isset($a['efname']) ? $a['efname'] : (isset($a['even-footer-name']) ? $a['even-footer-name'] : '')); + $ohvalue = (isset($a['ohvalue']) ? $a['ohvalue'] : (isset($a['odd-header-value']) ? $a['odd-header-value'] : 0)); + $ehvalue = (isset($a['ehvalue']) ? $a['ehvalue'] : (isset($a['even-header-value']) ? $a['even-header-value'] : 0)); + $ofvalue = (isset($a['ofvalue']) ? $a['ofvalue'] : (isset($a['odd-footer-value']) ? $a['odd-footer-value'] : 0)); + $efvalue = (isset($a['efvalue']) ? $a['efvalue'] : (isset($a['even-footer-value']) ? $a['even-footer-value'] : 0)); + $toc_id = (isset($a['toc_id']) ? $a['toc_id'] : (isset($a['name']) ? $a['name'] : 0)); + $pagesel = (isset($a['pagesel']) ? $a['pagesel'] : (isset($a['pageselector']) ? $a['pageselector'] : '')); + $toc_pagesel = (isset($a['toc_pagesel']) ? $a['toc_pagesel'] : (isset($a['toc-pageselector']) ? $a['toc-pageselector'] : '')); + $sheetsize = (isset($a['sheetsize']) ? $a['sheetsize'] : (isset($a['sheet-size']) ? $a['sheet-size'] : '')); + $toc_sheetsize = (isset($a['toc_sheetsize']) ? $a['toc_sheetsize'] : (isset($a['toc-sheet-size']) ? $a['toc-sheet-size'] : '')); + + $this->TOCpagebreak($tocfont, $tocfontsize, $tocindent, $TOCusePaging, $TOCuseLinking, $toc_orientation, $toc_mgl, $toc_mgr, $toc_mgt, $toc_mgb, $toc_mgh, $toc_mgf, $toc_ohname, $toc_ehname, $toc_ofname, $toc_efname, $toc_ohvalue, $toc_ehvalue, $toc_ofvalue, $toc_efvalue, $toc_preHTML, $toc_postHTML, $toc_bookmarkText, $resetpagenum, $pagenumstyle, $suppress, $orientation, $mgl, $mgr, $mgt, $mgb, $mgh, $mgf, $ohname, $ehname, $ofname, $efname, $ohvalue, $ehvalue, $ofvalue, $efvalue, $toc_id, $pagesel, $toc_pagesel, $sheetsize, $toc_sheetsize, $tocoutdent); // mPDF 5.6.19 + +} + +function TOCpagebreak($tocfont='', $tocfontsize='', $tocindent='', $TOCusePaging=true, $TOCuseLinking='', $toc_orientation='', $toc_mgl='',$toc_mgr='',$toc_mgt='',$toc_mgb='',$toc_mgh='',$toc_mgf='',$toc_ohname='',$toc_ehname='',$toc_ofname='',$toc_efname='',$toc_ohvalue=0,$toc_ehvalue=0,$toc_ofvalue=0, $toc_efvalue=0, $toc_preHTML='', $toc_postHTML='', $toc_bookmarkText='', $resetpagenum='', $pagenumstyle='', $suppress='', $orientation='', $mgl='',$mgr='',$mgt='',$mgb='',$mgh='',$mgf='',$ohname='',$ehname='',$ofname='',$efname='',$ohvalue=0,$ehvalue=0,$ofvalue=0,$efvalue=0, $toc_id=0, $pagesel='', $toc_pagesel='', $sheetsize='', $toc_sheetsize='', $tocoutdent='') { // mPDF 5.6.19) { + if (!class_exists('tocontents', false)) { include(_MPDF_PATH.'classes/tocontents.php'); } + if (empty($this->tocontents)) { $this->tocontents = new tocontents($this); } + //Start a new page + if($this->state==0) $this->AddPage(); + if ($this->y == $this->tMargin && (!$this->mirrorMargins ||($this->mirrorMargins && $this->page % 2==1))) { + // Don't add a page + if ($this->page==1 && count($this->PageNumSubstitutions)==0) { + if (!$suppress) { $suppress = 'off'; } + if (!$resetpagenum) { $resetpagenum= 1; } + //$this->PageNumSubstitutions[] = array('from'=>1, 'reset'=> $resetpagenum, 'type'=>$pagenumstyle, 'suppress'=> $suppress); + } + $this->PageNumSubstitutions[] = array('from'=>$this->page, 'reset'=> $resetpagenum, 'type'=>$pagenumstyle, 'suppress'=> $suppress); + } + else { + $this->AddPage($orientation,'NEXT-ODD', $resetpagenum, $pagenumstyle, $suppress,$mgl,$mgr,$mgt,$mgb,$mgh,$mgf,$ohname,$ehname,$ofname,$efname,$ohvalue,$ehvalue,$ofvalue,$efvalue,$pagesel,$sheetsize); + } + + $this->tocontents->TOCpagebreak($tocfont, $tocfontsize, $tocindent, $TOCusePaging, $TOCuseLinking, $toc_orientation, $toc_mgl, $toc_mgr, $toc_mgt, $toc_mgb, $toc_mgh, $toc_mgf, $toc_ohname, $toc_ehname, $toc_ofname, $toc_efname, $toc_ohvalue, $toc_ehvalue, $toc_ofvalue, $toc_efvalue, $toc_preHTML, $toc_postHTML, $toc_bookmarkText, $resetpagenum, $pagenumstyle, $suppress, $orientation, $mgl, $mgr, $mgt, $mgb, $mgh, $mgf, $ohname, $ehname, $ofname, $efname, $ohvalue, $ehvalue, $ofvalue, $efvalue, $toc_id, $pagesel, $toc_pagesel, $sheetsize, $toc_sheetsize, $tocoutdent); // mPDF 5.6.19 +} + +function TOC_Entry($txt, $level=0, $toc_id=0) { + $txt = $this->purify_utf8_text($txt); + if ($this->text_input_as_HTML) { + $txt = $this->all_entities_to_utf8($txt); + } + if ($this->usingCoreFont) { $txt = mb_convert_encoding($txt,$this->mb_enc,'UTF-8'); } + if ($this->ColActive) { $ily = $this->y0; } else { $ily = $this->y; } // use top of columns + + // mPDF 5.6.19 mPDF 5.6.25 mPDF 5.6.37 + if (!class_exists('tocontents', false)) { include(_MPDF_PATH.'classes/tocontents.php'); } + if (empty($this->tocontents)) { $this->tocontents = new tocontents($this); } + $linkn = $this->AddLink(); + $uid = '__mpdfinternallink_' . $linkn ; + if ($this->keep_block_together) { $this->internallink[$uid] = array("Y"=>$ily,"PAGE"=>$this->page, "kt"=>true ); } + else if ($this->table_rotate) { $this->internallink[$uid] = array("Y"=>$ily,"PAGE"=>$this->page, "tbrot"=>true ); } + else if ($this->kwt) { $this->internallink[$uid] = array("Y"=>$ily,"PAGE"=>$this->page, "kwt"=>true ); } + else if ($this->ColActive) { $this->internallink[$uid] = array("Y"=>$ily,"PAGE"=>$this->page, "col"=>$this->CurrCol ); } + else $this->internallink[$uid] = array("Y"=>$ily,"PAGE"=>$this->page ); + $this->internallink['#'.$uid] = $linkn; + $this->SetLink($linkn,$ily,$this->page); + +/*-- RTL --*/ + if ($this->biDirectional) { + $txt = preg_replace("/([".$this->pregRTLchars."]+)/ue", '$this->ArabJoin(stripslashes(\'\\1\'))', $txt ); + } +/*-- END RTL --*/ + if (strtoupper($toc_id)=='ALL') { $toc_id = '_mpdf_all'; } + else if (!$toc_id) { $toc_id = 0; } + else { $toc_id = strtolower($toc_id); } + $btoc = array('t'=>$txt,'l'=>$level,'p'=>$this->page, 'link'=>$linkn, 'toc_id'=>$toc_id); + if ($this->keep_block_together) { + $this->_kttoc[]= $btoc; + } +/*-- TABLES --*/ + else if ($this->table_rotate) { + $this->tbrot_toc[]= $btoc; + } + else if ($this->kwt) { + $this->kwt_toc[]= $btoc; + } +/*-- END TABLES --*/ + else if ($this->ColActive) { // *COLUMNS* + $this->col_toc[]= $btoc; // *COLUMNS* + } // *COLUMNS* + else { + $this->tocontents->_toc[]= $btoc; + } +} + +/*-- END TOC --*/ + +//====================================================== +function MovePages($target_page, $start_page, $end_page=-1) { + // move a page/pages EARLIER in the document + if ($end_page<1) { $end_page = $start_page; } + $n_toc = $end_page - $start_page + 1; + + // Set/Update PageNumSubstitutions changes before moving anything + if (count($this->PageNumSubstitutions)) { + $tp_present = false; + $sp_present = false; + $ep_present = false; + foreach($this->PageNumSubstitutions AS $k=>$v) { + if ($this->PageNumSubstitutions[$k]['from']==$target_page) { + $tp_present = true; + if ($this->PageNumSubstitutions[$k]['suppress']!='on' && $this->PageNumSubstitutions[$k]['suppress']!=1) { + $this->PageNumSubstitutions[$k]['suppress']='off'; + } + } + if ($this->PageNumSubstitutions[$k]['from']==$start_page) { + $sp_present = true; + if ($this->PageNumSubstitutions[$k]['suppress']!='on' && $this->PageNumSubstitutions[$k]['suppress']!=1) { + $this->PageNumSubstitutions[$k]['suppress']='off'; + } + } + if ($this->PageNumSubstitutions[$k]['from']==($end_page+1)) { + $ep_present = true; + if ($this->PageNumSubstitutions[$k]['suppress']!='on' && $this->PageNumSubstitutions[$k]['suppress']!=1) { + $this->PageNumSubstitutions[$k]['suppress']='off'; + } + } + } + + if (!$tp_present) { + list($tp_type, $tp_suppress, $tp_reset) = $this->docPageSettings($target_page); + } + if (!$sp_present) { + list($sp_type, $sp_suppress, $sp_reset) = $this->docPageSettings($start_page); + } + if (!$ep_present) { + list($ep_type, $ep_suppress, $ep_reset) = $this->docPageSettings($start_page-1); + } + + } + + $last = array(); + //store pages + for($i = $start_page;$i <= $end_page ;$i++) + $last[]=$this->pages[$i]; + //move pages + for($i=$start_page - 1;$i>=($target_page);$i--) { + $this->pages[$i+$n_toc]=$this->pages[$i]; + } + //Put toc pages at insert point + for($i = 0;$i < $n_toc;$i++) { + $this->pages[$target_page + $i]=$last[$i]; + } + +/*-- BOOKMARKS --*/ + // Update Bookmarks + foreach($this->BMoutlines as $i=>$o) { + if($o['p']>=$target_page) { + $this->BMoutlines[$i]['p'] += $n_toc; + } + } +/*-- END BOOKMARKS --*/ + + // Update Page Links + if (count($this->PageLinks)) { + $newarr = array(); + foreach($this->PageLinks as $i=>$o) { + foreach($this->PageLinks[$i] as $key => $pl) { + if (strpos($pl[4],'@')===0) { + $p=substr($pl[4],1); + if($p>=$start_page && $p<=$end_page) { + $this->PageLinks[$i][$key][4] = '@'.($p + ($target_page - $start_page)); + } + else if($p>=$target_page && $p<$start_page) { + $this->PageLinks[$i][$key][4] = '@'.($p+$n_toc); + } + } + } + if($i>=$start_page && $i<=$end_page) { + $newarr[($i + ($target_page - $start_page))] = $this->PageLinks[$i]; + } + else if($i>=$target_page && $i<$start_page) { + $newarr[($i + $n_toc)] = $this->PageLinks[$i]; + } + else { + $newarr[$i] = $this->PageLinks[$i]; + } + } + $this->PageLinks = $newarr; + } + + // OrientationChanges + if (count($this->OrientationChanges)) { + $newarr = array(); + foreach($this->OrientationChanges AS $p=>$v) { + if($p>=$start_page && $p<=$end_page) { $newarr[($p + ($target_page - $start_page))] = $this->OrientationChanges[$p]; } + else if($p>=$target_page && $p<$start_page) { $newarr[$p+$n_toc] = $this->OrientationChanges[$p]; } + else { $newarr[$p] = $this->OrientationChanges[$p]; } + } + ksort($newarr); + $this->OrientationChanges = $newarr; + } + + // Page Dimensions + if (count($this->pageDim)) { + $newarr = array(); + foreach($this->pageDim AS $p=>$v) { + if($p>=$start_page && $p<=$end_page) { $newarr[($p + ($target_page - $start_page))] = $this->pageDim[$p]; } + else if($p>=$target_page && $p<$start_page) { $newarr[$p+$n_toc] = $this->pageDim[$p]; } + else { $newarr[$p] = $this->pageDim[$p]; } + } + ksort($newarr); + $this->pageDim = $newarr; + } + + // HTML Headers & Footers + if (count($this->saveHTMLHeader)) { + $newarr = array(); + foreach($this->saveHTMLHeader AS $p=>$v) { + if($p>=$start_page && $p<=$end_page) { $newarr[($p + ($target_page - $start_page))] = $this->saveHTMLHeader[$p]; } + else if($p>=$target_page && $p<$start_page) { $newarr[$p+$n_toc] = $this->saveHTMLHeader[$p]; } + else { $newarr[$p] = $this->saveHTMLHeader[$p]; } + } + ksort($newarr); + $this->saveHTMLHeader = $newarr; + } + if (count($this->saveHTMLFooter)) { + $newarr = array(); + foreach($this->saveHTMLFooter AS $p=>$v) { + if($p>=$start_page && $p<=$end_page) { $newarr[($p + ($target_page - $start_page))] = $this->saveHTMLFooter[$p]; } + else if($p>=$target_page && $p<$start_page) { $newarr[$p+$n_toc] = $this->saveHTMLFooter[$p]; } + else { $newarr[$p] = $this->saveHTMLFooter[$p]; } + } + ksort($newarr); + $this->saveHTMLFooter = $newarr; + } + + // Update Internal Links + if (count($this->internallink)) { + foreach($this->internallink as $key=>$o) { + if($o['PAGE']>=$start_page && $o['PAGE']<=$end_page) { + $this->internallink[$key]['PAGE'] += ($target_page - $start_page); + } + else if($o['PAGE']>=$target_page && $o['PAGE']<$start_page) { + $this->internallink[$key]['PAGE'] += $n_toc; + } + } + } + + // Update Links + if (count($this->links)) { + foreach($this->links as $key=>$o) { + if($o[0]>=$start_page && $o[0]<=$end_page) { + $this->links[$key][0] += ($target_page - $start_page); + } + if($o[0]>=$target_page && $o[0]<$start_page) { + $this->links[$key][0] += $n_toc; + } + } + } + + // Update Form fields + if (count($this->form->forms)) { + foreach($this->form->forms as $key=>$f) { + if($f['page']>=$start_page && $f['page']<=$end_page) { + $this->form->forms[$key]['page'] += ($target_page - $start_page); + } + if($f['page']>=$target_page && $f['page']<$start_page) { + $this->form->forms[$key]['page'] += $n_toc; + } + } + } + +/*-- ANNOTATIONS --*/ + // Update Annotations + if (count($this->PageAnnots)) { + $newarr = array(); + foreach($this->PageAnnots as $p=>$anno) { + if($p>=$start_page && $p<=$end_page) { + $np = $p + ($target_page - $start_page); + foreach($anno as $o) { + $newarr[$np][] = $o; + } + } + else if($p>=$target_page && $p<$start_page) { + $np = $p + $n_toc; + foreach($anno as $o) { + $newarr[$np][] = $o; + } + } + else { + $newarr[$p] = $this->PageAnnots[$p]; + } + } + $this->PageAnnots = $newarr; + unset($newarr); + } +/*-- END ANNOTATIONS --*/ + + // Update PageNumSubstitutions + if (count($this->PageNumSubstitutions)) { + $newarr = array(); + foreach($this->PageNumSubstitutions AS $k=>$v) { + if($this->PageNumSubstitutions[$k]['from']>=$start_page && $this->PageNumSubstitutions[$k]['from']<=$end_page) { + $this->PageNumSubstitutions[$k]['from'] += ($target_page - $start_page); + $newarr[$this->PageNumSubstitutions[$k]['from']] = $this->PageNumSubstitutions[$k]; + } + else if($this->PageNumSubstitutions[$k]['from']>=$target_page && $this->PageNumSubstitutions[$k]['from']<$start_page) { + $this->PageNumSubstitutions[$k]['from'] += $n_toc; + $newarr[$this->PageNumSubstitutions[$k]['from']] = $this->PageNumSubstitutions[$k]; + } + else { + $newarr[$this->PageNumSubstitutions[$k]['from']] = $this->PageNumSubstitutions[$k]; + } + } + + if (!$sp_present) { + $newarr[$target_page] = array('from'=>$target_page, 'suppress'=>$sp_suppress, 'reset'=>$sp_reset, 'type'=>$sp_type); + } + if (!$tp_present) { + $newarr[($target_page + $n_toc)] = array('from'=>($target_page+$n_toc), 'suppress'=>$tp_suppress, 'reset'=>$tp_reset, 'type'=>$tp_type); + } + if (!$ep_present && $end_page>count($this->pages)) { + $newarr[($end_page+1)] = array('from'=>($end_page+1), 'suppress'=>$ep_suppress, 'reset'=>$ep_reset, 'type'=>$ep_type); + } + ksort($newarr); + $this->PageNumSubstitutions = array(); + foreach($newarr as $v) { + $this->PageNumSubstitutions[] = $v; + } + } +} + +//====================================================== +function DeletePages($start_page, $end_page=-1) { + // move a page/pages EARLIER in the document + if ($end_page<1) { $end_page = $start_page; } + $n_tod = $end_page - $start_page + 1; + $last_page = count($this->pages); + $n_atend = $last_page - $end_page + 1; + + //move pages + for($i=0;$i<$n_atend;$i++) { + $this->pages[$start_page+$i]=$this->pages[$end_page+1+$i]; + } + //delete pages + for($i = 0;$i < $n_tod ;$i++) + unset($this->pages[$last_page-$i]); + + +/*-- BOOKMARKS --*/ + // Update Bookmarks + foreach($this->BMoutlines as $i=>$o) { + if($o['p']>=$end_page) { $this->BMoutlines[$i]['p'] -= $n_tod; } + else if($p<$start_page) { unset($this->BMoutlines[$i]); } + } +/*-- END BOOKMARKS --*/ + + // Update Page Links + if (count($this->PageLinks)) { + $newarr = array(); + foreach($this->PageLinks as $i=>$o) { + foreach($this->PageLinks[$i] as $key => $pl) { + if (strpos($pl[4],'@')===0) { + $p=substr($pl[4],1); + if($p>$end_page) { $this->PageLinks[$i][$key][4] = '@'.($p - $n_tod); } + else if($p<$start_page) { unset($this->PageLinks[$i][$key]); } + } + } + if($i>$end_page) { $newarr[($i - $n_tod)] = $this->PageLinks[$i]; } + else if($p<$start_page) { $newarr[$i] = $this->PageLinks[$i]; } + } + $this->PageLinks = $newarr; + } + + // OrientationChanges + if (count($this->OrientationChanges)) { + $newarr = array(); + foreach($this->OrientationChanges AS $p=>$v) { + if($p>$end_page) { $newarr[($p - $t_tod)] = $this->OrientationChanges[$p]; } + else if($p<$start_page) { $newarr[$p] = $this->OrientationChanges[$p]; } + } + ksort($newarr); + $this->OrientationChanges = $newarr; + } + + // Page Dimensions + if (count($this->pageDim)) { + $newarr = array(); + foreach($this->pageDim AS $p=>$v) { + if($p>$end_page) { $newarr[($p - $n_tod)] = $this->pageDim[$p]; } + else if($p<$start_page) { $newarr[$p] = $this->pageDim[$p]; } + } + ksort($newarr); + $this->pageDim = $newarr; + } + + // HTML Headers & Footers + if (count($this->saveHTMLHeader)) { + foreach($this->saveHTMLHeader AS $p=>$v) { + if($p>end_page) { $newarr[($p - $n_tod)] = $this->saveHTMLHeader[$p]; } + else if($p<$start_page) { $newarr[$p] = $this->saveHTMLHeader[$p]; } + } + ksort($newarr); + $this->saveHTMLHeader = $newarr; + } + if (count($this->saveHTMLFooter)) { + $newarr = array(); + foreach($this->saveHTMLFooter AS $p=>$v) { + if($p>$end_page) { $newarr[($p - $n_tod)] = $this->saveHTMLFooter[$p]; } + else if($p<$start_page) { $newarr[$p] = $this->saveHTMLFooter[$p]; } + } + ksort($newarr); + $this->saveHTMLFooter = $newarr; + } + + // Update Internal Links + foreach($this->internallink as $key=>$o) { + if($o['PAGE']>$end_page) { $this->internallink[$key]['PAGE'] -= $n_tod; } + else if($o['PAGE']<$start_page) { unset($this->internallink[$key]); } + } + + // Update Links + foreach($this->links as $key=>$o) { + if($o[0]>$end_page) { $this->links[$key][0] -= $n_tod; } + else if($o[0]<$start_page) { unset($this->links[$key]); } + } + + // Update Form fields + foreach($this->form->forms as $key=>$f) { + if($f['page']>$end_page) { $this->form->forms[$key]['page'] -= $n_tod; } + else if($f['page']<$start_page) { unset($this->form->forms[$key]); } + } + +/*-- ANNOTATIONS --*/ + // Update Annotations + if (count($this->PageAnnots)) { + $newarr = array(); + foreach($this->PageAnnots as $p=>$anno) { + if($p>$end_page) { foreach($anno as $o) { $newarr[($p - $n_tod)][] = $o; } } + else if($p<$start_page) { $newarr[$p] = $this->PageAnnots[$p]; } + } + ksort($newarr); + $this->PageAnnots = $newarr; + } +/*-- END ANNOTATIONS --*/ + + // Update PageNumSubstitutions + foreach($this->PageNumSubstitutions AS $k=>$v) { + if($this->PageNumSubstitutions[$k]['from']>$end_page) { $this->PageNumSubstitutions[$k]['from'] -= $n_tod; } + else if($this->PageNumSubstitutions[$k]['from']<$start_page) { unset($this->PageNumSubstitutions[$k]); } + } + + unset($newarr); + $this->page = count($this->pages); +} + + +//====================================================== +/*-- INDEX --*/ +// FROM class PDF_Ref == INDEX + +function Reference($txt) { + $this->IndexEntry($txt); +} + + +function IndexEntry($txt, $xref='') { + if ($xref) { + $this->IndexEntrySee($txt,$xref); + return; + } + $txt = strip_tags($txt); + $txt = $this->purify_utf8_text($txt); + if ($this->text_input_as_HTML) { + $txt = $this->all_entities_to_utf8($txt); + } + if ($this->usingCoreFont) { $txt = mb_convert_encoding($txt,$this->mb_enc,'UTF-8'); } + + $Present=0; + $size=sizeof($this->Reference); + + if ($this->directionality == 'rtl') { // *RTL* + $txt = str_replace(':',' - ',$txt); // *RTL* + } // *RTL* + else { // *RTL* + $txt = str_replace(':',', ',$txt); + } // *RTL* + + + //Search the reference (AND Ref/PageNo) in the array + for ($i=0;$i<$size;$i++){ + if ($this->keep_block_together) { + if (isset($this->ktReference[$i]['t']) && $this->ktReference[$i]['t']==$txt){ + $Present=1; + if (!in_array($this->page,$this->ktReference[$i]['p'])) { + $this->ktReference[$i]['op'] = $this->page; + } + } + } +/*-- TABLES --*/ + else if ($this->table_rotate) { + if (isset($this->tbrot_Reference[$i]['t']) && $this->tbrot_Reference[$i]['t']==$txt){ + $Present=1; + if (!in_array($this->page,$this->tbrot_Reference[$i]['p'])) { + $this->tbrot_Reference[$i]['op'] = $this->page; + } + } + } + else if ($this->kwt) { + if (isset($this->kwt_Reference[$i]['t']) && $this->kwt_Reference[$i]['t']==$txt){ + $Present=1; + if (!in_array($this->page,$this->kwt_Reference[$i]['p'])) { + $this->kwt_Reference[$i]['op'] = $this->page; + } + } + } +/*-- END TABLES --*/ +/*-- COLUMNS --*/ + else if ($this->ColActive) { + if (isset($this->col_Reference[$i]['t']) && $this->col_Reference[$i]['t']==$txt){ + $Present=1; + if (!in_array($this->page,$this->col_Reference[$i]['p'])) { + $this->col_Reference[$i]['op'] = $this->page; + } + } + } +/*-- END COLUMNS --*/ + else { + if (isset($this->Reference[$i]['t']) && $this->Reference[$i]['t']==$txt){ + $Present=1; + if (!in_array($this->page,$this->Reference[$i]['p'])) { + $this->Reference[$i]['p'][] = $this->page; + } + } + } + } + //If not found, add it + if ($Present==0) { + $opr = array('t'=>$txt, 'op'=>$this->page); + if ($this->keep_block_together) { + $this->ktReference[]= $opr; + } +/*-- TABLES --*/ + else if ($this->table_rotate) { + $this->tbrot_Reference[]= $opr; + } + else if ($this->kwt) { + $this->kwt_Reference[]= $opr; + } +/*-- END TABLES --*/ +/*-- COLUMNS --*/ + else if ($this->ColActive) { + $this->col_Reference[]= $opr; + } +/*-- END COLUMNS --*/ + else { + $this->Reference[]=array('t'=>$txt,'p'=>array($this->page)); + } + } +} + +// Added function to add a reference "Elephants. See Chickens" +function ReferenceSee($txta,$txtb) { + $this->IndexEntrySee($txta,$txtb); +} + +function IndexEntrySee($txta,$txtb) { + $txta = strip_tags($txta); + $txtb = strip_tags($txtb); + $txta = $this->purify_utf8_text($txta); + $txtb = $this->purify_utf8_text($txtb); + if ($this->text_input_as_HTML) { + $txta = $this->all_entities_to_utf8($txta); + $txtb = $this->all_entities_to_utf8($txtb); + } + if ($this->usingCoreFont) { + $txta = mb_convert_encoding($txta,$this->mb_enc,'UTF-8'); + $txtb = mb_convert_encoding($txtb,$this->mb_enc,'UTF-8'); + } + if ($this->directionality == 'rtl') { // *RTL* + $txta = str_replace(':',' - ',$txta); // *RTL* + $txtb = str_replace(':',' - ',$txtb); // *RTL* + } // *RTL* + else { // *RTL* + $txta = str_replace(':',', ',$txta); + $txtb = str_replace(':',', ',$txtb); + } // *RTL* + $this->Reference[]=array('t'=>$txta.' - see '.$txtb,'p'=>array()); +} + +function CreateReference($NbCol=1, $reffontsize='', $linespacing='', $offset=3, $usedivletters=1, $divlettfontsize='', $gap=5, $reffont='',$divlettfont='', $useLinking=false) { + $this->CreateIndex($NbCol, $reffontsize, $linespacing, $offset, $usedivletters, $divlettfontsize, $gap, $reffont, $divlettfont, $useLinking); +} + +function CreateIndex($NbCol=1, $reffontsize='', $linespacing='', $offset=3, $usedivletters=1, $divlettfontsize='', $gap=5, $reffont='',$divlettfont='', $useLinking=false) { + if (!$reffontsize) { $reffontsize = $this->default_font_size; } + if (!$divlettfontsize) { $divlettfontsize = ($this->default_font_size * 1.8); } + if (!$reffont) { $reffont = $this->default_font; } + if (!$divlettfont) { $divlettfont = $reffont; } + if (!$linespacing) { $linespacing= $this->default_lineheight_correction; } + if ($this->ColActive) { $this->SetColumns(0); } // *COLUMNS* + $size=sizeof($this->Reference); + if ($size == 0) { return false; } + + + if ($NbCol<2) { + $NbCol = 1; + $colWidth = $this->pgwidth; + } + else { + $this->SetColumns($NbCol,'',$gap); + $colWidth = $this->ColWidth; + } + if ($this->directionality == 'rtl') { $align = 'R'; } + else { $align = 'L'; } + $lett = ''; + if (!function_exists('cmp')) { + function cmp ($a, $b) { + return strnatcmp(strtolower($a['t']), strtolower($b['t'])); + } + } + //Alphabetic sort of the references + usort($this->Reference, 'cmp'); + $size=sizeof($this->Reference); + $this->breakpoints[$this->CurrCol][] = $this->y; // *COLUMNS* + + $divlettjuststarted = false; + + $this->OpenTag('DIV',array('STYLE'=>'line-height: '.$linespacing.'; font-family: '.$reffont.'; font-size: '.$reffontsize.'pt; ')); + + $last_lett = ''; + for ($i=0;$i<$size;$i++){ + if ($this->Reference[$i]['t']) { + if ($usedivletters) { + + $lett = mb_strtoupper(mb_substr($this->Reference[$i]['t'],0,1,$this->mb_enc ),$this->mb_enc ); + if ($lett != $last_lett) { + + $save_bp = $this->breakpoints[$this->CurrCol]; // *COLUMNS* + $divlettjuststarted = true; + + if ($i>0) { + $this->OpenTag('DIV',array('STYLE'=>'line-height: '.$linespacing.'; font-family: '.$divlettfont.'; font-size: '.$divlettfontsize.'pt; font-weight: bold; page-break-after: avoid; margin-top: 0.5em; margin-collapse: collapse; ')); + } + else { + $this->OpenTag('DIV',array('STYLE'=>'line-height: '.$linespacing.'; font-family: '.$divlettfont.'; font-size: '.$divlettfontsize.'pt; font-weight: bold; page-break-after: avoid; ')); + } + $this->_saveTextBuffer($lett); + $this->CloseTag('DIV'); + } + } + + $this->OpenTag('DIV',array('STYLE'=>'text-indent: -'.$offset.'mm; line-height: '.$linespacing.'; font-family: '.$reffont.'; font-size: '.$reffontsize.'pt; ')); + +/*-- RTL --*/ + // Change Arabic + Persian. to Presentation Forms + if ($this->biDirectional) { + $this->Reference[$i]['t'] = preg_replace("/([".$this->pregRTLchars."]+)/ue", '$this->ArabJoin(stripslashes(\'\\1\'))', $this->Reference[$i]['t'] ); + } +/*-- END RTL --*/ + + // Font-specific ligature substitution for Indic fonts + if (isset($this->CurrentFont['indic']) && $this->CurrentFont['indic']) $this->ConvertIndic($this->Reference[$i]['t']); // *INDIC* + + $this->_saveTextBuffer($this->Reference[$i]['t']); + $ppp = $this->Reference[$i]['p']; // = array of page numbers to point to + if (count($ppp)) { + sort($ppp); + $newarr = array(); + $range_start = $ppp[0]; + $range_end = 0; + + if (!$this->usingCoreFont) { $spacer = "\xc2\xa0 "; } + else { $spacer = chr(160).' '; } + $this->_saveTextBuffer($spacer); + if ($this->directionality == 'rtl') { $sep = '.'; $joiner = '-'; } + else { $sep = ', '; $joiner = '-'; } + for ($zi=1;$zi<count($ppp);$zi++) { + // RTL - Each number separately + if ($this->directionality == 'rtl') { +/*-- RTL --*/ + if ($zi<count($ppp)-1) { + $txt = $sep . $this->docPageNum($ppp[$zi]); + if ($useLinking) { $href = '@'.$ppp[$zi]; } + else { $href = ''; } + $this->_saveTextBuffer($txt, $href); + } +/*-- END RTL --*/ + } + + else if ($ppp[$zi] == ($ppp[($zi-1)]+1)) { + $range_end = $ppp[$zi]; + } + else { + if ($range_end) { + if ($range_end == $range_start+1) { + if ($useLinking) { $href = '@'.$range_start; } + else { $href = ''; } + $txt = $this->docPageNum($range_start) . $sep; + $this->_saveTextBuffer($txt, $href); + if ($useLinking) { $href = '@'.$ppp[$zi-1]; } + else { $href = ''; } + $txt = $this->docPageNum($ppp[$zi-1]) . $sep; + $this->_saveTextBuffer($txt, $href); + } + else { + if ($useLinking) { $href = '@'.$range_start; } + else { $href = ''; } + } + } + else { + if ($useLinking) { $href = '@'.$ppp[$zi-1]; } + else { $href = ''; } + $txt = $this->docPageNum($ppp[$zi-1]) . $sep; + $this->_saveTextBuffer($txt, $href); + } + $range_start = $ppp[$zi]; + $range_end = 0; + } + } + + if ($range_end) { + if ($range_end == $range_start+1) { + if ($useLinking) { $href = '@'.$range_start; } + else { $href = ''; } + $txt = $this->docPageNum($range_start) . $sep; + $this->_saveTextBuffer($txt, $href); + if ($useLinking) { $href = '@'.$range_end; } + else { $href = ''; } + $txt = $this->docPageNum($range_end); + $this->_saveTextBuffer($txt, $href); + } + else { + if ($useLinking) { $href = '@'.$range_start; } + else { $href = ''; } + $txt = $this->docPageNum($range_start) . $joiner; + $this->_saveTextBuffer($txt, $href); + if ($useLinking) { $href = '@'.$range_end; } + else { $href = ''; } + $txt = $this->docPageNum($range_end); + $this->_saveTextBuffer($txt, $href); + } + } + else { + if ($useLinking) { $href = '@'.$ppp[(count($ppp)-1)]; } + else { $href = ''; } + $txt = $this->docPageNum($ppp[(count($ppp)-1)]); + $this->_saveTextBuffer($txt, $href); + } + } + } + $this->CloseTag('DIV'); + + if ($divlettjuststarted) { $this->breakpoints[$this->CurrCol] = $save_bp; } // *COLUMNS* + $divlettjuststarted = false; + + $this->breakpoints[$this->CurrCol][] = $this->y; // *COLUMNS* + $last_lett = $lett; + } + $this->CloseTag('DIV'); + $this->breakpoints[$this->CurrCol][] = $this->y; // *COLUMNS* + if ($this->ColActive) { $this->SetColumns(0); } // *COLUMNS* +} +/*-- END INDEX --*/ + + +function AcceptPageBreak() { + if (count($this->cellBorderBuffer)) { $this->printcellbuffer(); } // *TABLES* +/*-- COLUMNS --*/ + if ($this->ColActive==1) { + if($this->CurrCol<$this->NbCol-1) { + //Go to the next column + $this->CurrCol++; + $this->SetCol($this->CurrCol); + $this->y=$this->y0; + $this->ChangeColumn=1; // Number (and direction) of columns changed +1, +2, -2 etc. + // DIRECTIONALITY RTL + if ($this->directionality == 'rtl') { $this->ChangeColumn = -($this->ChangeColumn); } // *RTL* + + //Stay on the page + return false; + } + else { + //Go back to the first column - NEW PAGE + if (count($this->columnbuffer)) { $this->printcolumnbuffer(); } + $this->SetCol(0); + $this->y0 = $this->tMargin; + $this->ChangeColumn= -($this->NbCol-1); + // DIRECTIONALITY RTL + if ($this->directionality == 'rtl') { $this->ChangeColumn = -($this->ChangeColumn); } // *RTL* + //Page break + return true; + } + } +/*-- END COLUMNS --*/ +/*-- TABLES --*/ + else if ($this->table_rotate) { + if ($this->tablebuffer) { $this->printtablebuffer(); } + return true; + } +/*-- END TABLES --*/ + else { // *COLUMNS* + $this->ChangeColumn=0; + return $this->autoPageBreak; + } // *COLUMNS* + return $this->autoPageBreak; +} + + +//----------- COLUMNS --------------------- +/*-- COLUMNS --*/ + +function SetColumns($NbCol,$vAlign='',$gap=5) { +// NbCol = number of columns +// CurrCol = Number of the current column starting at 0 +// Called externally to set columns on/off and number +// Integer 2 upwards sets columns on to that number +// Anything less than 2 turns columns off + if ($NbCol<2) { // SET COLUMNS OFF + if ($this->ColActive) { + $this->ColActive=0; + if (count($this->columnbuffer)) { $this->printcolumnbuffer(); } + $this->NbCol=1; + $this->ResetMargins(); + $this->pgwidth = $this->w - $this->lMargin - $this->rMargin; + $this->divwidth = 0; + $this->Ln(); + } + $this->ColActive=0; + $this->columnbuffer = array(); + $this->ColDetails = array(); + $this->columnLinks = array(); + $this->columnAnnots = array(); + $this->columnForms = array(); + $this->col_Reference = array(); + $this->col_BMoutlines = array(); + $this->col_toc = array(); + $this->breakpoints = array(); + } + else { // SET COLUMNS ON + if ($this->ColActive) { + $this->ColActive=0; + if (count($this->columnbuffer)) { $this->printcolumnbuffer(); } + $this->ResetMargins(); + } + if (isset($this->y) && $this->y>$this->tMargin) $this->Ln(); + $this->NbCol=$NbCol; + $this->ColGap = $gap; + $this->divwidth = 0; + $this->ColActive=1; + $this->ColumnAdjust = true; // enables column height adjustment for the page + $this->columnbuffer = array(); + $this->ColDetails = array(); + $this->columnLinks = array(); + $this->columnAnnots = array(); + $this->columnForms = array(); + $this->col_Reference = array(); + $this->col_BMoutlines = array(); + $this->col_toc = array(); + $this->breakpoints = array(); + if ((strtoupper($vAlign) == 'J') || (strtoupper($vAlign) == 'JUSTIFY')) { $vAlign = 'J'; } + else { $vAlign = ''; } + $this->colvAlign = $vAlign; + //Save the ordinate + $absL = $this->DeflMargin-($gap/2); + $absR = $this->DefrMargin-($gap/2); + $PageWidth = $this->w-$absL-$absR; // virtual pagewidth for calculation only + $ColWidth = (($PageWidth - ($gap * ($NbCol)))/$NbCol); + $this->ColWidth = $ColWidth; +/*-- RTL --*/ + + if ($this->directionality == 'rtl') { + for ($i=0;$i<$this->NbCol;$i++) { + $this->ColL[$i] = $absL + ($gap/2) + (($NbCol - ($i+1))*($PageWidth/$NbCol)) ; + $this->ColR[$i] = $this->ColL[$i] + $ColWidth; // NB This is not R margin -> R pos + } + } + else { +/*-- END RTL --*/ + for ($i=0;$i<$this->NbCol;$i++) { + $this->ColL[$i] = $absL + ($gap/2) + ($i* ($PageWidth/$NbCol) ); + $this->ColR[$i] = $this->ColL[$i] + $ColWidth; // NB This is not R margin -> R pos + } + } // *RTL* + $this->pgwidth = $ColWidth; + $this->SetCol(0); + $this->y0=$this->y; + } + $this->x = $this->lMargin; +} + +function SetCol($CurrCol) { +// Used internally to set column by number: 0 is 1st column + //Set position on a column + $this->CurrCol=$CurrCol; + $x = $this->ColL[$CurrCol]; + $xR = $this->ColR[$CurrCol]; // NB This is not R margin -> R pos + if (($this->mirrorMargins) && (($this->page)%2==0)) { // EVEN + $x += $this->MarginCorrection ; + $xR += $this->MarginCorrection ; + } + $this->SetMargins($x,($this->w - $xR),$this->tMargin); +} + +function AddColumn() { + $this->NewColumn(); + $this->ColumnAdjust = false; // disables all column height adjustment for the page. +} +function NewColumn() { + if ($this->ColActive==1) { + if($this->CurrCol<$this->NbCol-1) { + //Go to the next column + $this->CurrCol++; + $this->SetCol($this->CurrCol); + $this->y = $this->y0; + $this->ChangeColumn=1; + // DIRECTIONALITY RTL + if ($this->directionality == 'rtl') { $this->ChangeColumn = -($this->ChangeColumn); } // *RTL* + //Stay on the page + } + else { + //Go back to the first column + //Page break + if (count($this->columnbuffer)) { $this->printcolumnbuffer(); } + $this->AddPage($this->CurOrientation); + $this->SetCol(0); + $this->y0 = $this->tMargin; + $this->ChangeColumn= -($this->NbCol-1); + // DIRECTIONALITY RTL + if ($this->directionality == 'rtl') { $this->ChangeColumn = -($this->ChangeColumn); } // *RTL* + } + $this->x = $this->lMargin; + } + else { + $this->AddPage($this->CurOrientation); + } +} + +function printcolumnbuffer() { + // Columns ended (but page not ended) -> try to match all columns - unless disabled by using a custom column-break + if (!$this->ColActive && $this->ColumnAdjust && !$this->keepColumns) { + // Calculate adjustment to add to each column to calculate rel_y value + $this->ColDetails[0]['add_y'] = 0; + $last_col = 0; + // Recursively add previous column's height + for($i=1;$i<$this->NbCol;$i++) { + if (isset($this->ColDetails[$i]['bottom_margin']) && $this->ColDetails[$i]['bottom_margin']) { // If any entries in the column + $this->ColDetails[$i]['add_y'] = ($this->ColDetails[$i-1]['bottom_margin'] - $this->y0) + $this->ColDetails[$i-1]['add_y']; + $last_col = $i; // Last column actually printed + } + } + + // Calculate value for each position sensitive entry as though for one column + foreach($this->columnbuffer AS $key=>$s) { + $t = $s['s']; + if ($t == 'ACROFORM') { + $this->columnbuffer[$key]['rel_y'] = $s['y'] + $this->ColDetails[$s['col']]['add_y'] - $this->y0; + $this->columnbuffer[$key]['s'] = ''; + } + else if (preg_match('/BT \d+\.\d\d+ (\d+\.\d\d+) Td/',$t)) { + $this->columnbuffer[$key]['rel_y'] = $s['y'] + $this->ColDetails[$s['col']]['add_y'] - $this->y0; + } + else if (preg_match('/\d+\.\d\d+ (\d+\.\d\d+) \d+\.\d\d+ [\-]{0,1}\d+\.\d\d+ re/',$t)) { + $this->columnbuffer[$key]['rel_y'] = $s['y'] + $this->ColDetails[$s['col']]['add_y'] - $this->y0; + } + else if (preg_match('/\d+\.\d\d+ (\d+\.\d\d+) m/',$t)) { + $this->columnbuffer[$key]['rel_y'] = $s['y'] + $this->ColDetails[$s['col']]['add_y'] - $this->y0; + } + else if (preg_match('/\d+\.\d\d+ (\d+\.\d\d+) l/',$t)) { + $this->columnbuffer[$key]['rel_y'] = $s['y'] + $this->ColDetails[$s['col']]['add_y'] - $this->y0; + } + else if (preg_match('/q \d+\.\d\d+ 0 0 \d+\.\d\d+ \d+\.\d\d+ (\d+\.\d\d+) cm \/(I|FO)\d+ Do Q/',$t)) { + $this->columnbuffer[$key]['rel_y'] = $s['y'] + $this->ColDetails[$s['col']]['add_y'] - $this->y0; + } + else if (preg_match('/\d+\.\d\d+ (\d+\.\d\d+) \d+\.\d\d+ \d+\.\d\d+ \d+\.\d\d+ \d+\.\d\d+ c/',$t)) { + $this->columnbuffer[$key]['rel_y'] = $s['y'] + $this->ColDetails[$s['col']]['add_y'] - $this->y0; + } + } + foreach($this->internallink AS $key => $f) { + if (is_array($f) && isset($f['col'])) { + $this->internallink[$key]['rel_y'] = $f['Y'] + $this->ColDetails[$f['col']]['add_y'] - $this->y0; + } + } + + $breaks = array(); + foreach($this->breakpoints AS $c => $bpa) { + foreach($bpa AS $rely) { + $breaks[] = $rely + $this->ColDetails[$c]['add_y'] - $this->y0; + } + } + + if (isset($this->ColDetails[$last_col]['bottom_margin'])) { $lcbm = $this->ColDetails[$last_col]['bottom_margin']; } + else { $lcbm = 0; } + $sum_h = $this->ColDetails[$last_col]['add_y'] + $lcbm - $this->y0; + //$sum_h = max($this->ColDetails[$last_col]['add_y'] + $this->ColDetails[$last_col]['bottom_margin'] - $this->y0, end($breaks)); + $target_h = ($sum_h / $this->NbCol); + + $cbr = array(); + for($i=1;$i<$this->NbCol;$i++) { + $th = ($sum_h * $i / $this->NbCol); + foreach($breaks AS $bk=>$val) { + if ($val > $th) { + if (($val-$th) < ($th-$breaks[$bk-1])) { $cbr[$i-1] = $val; } + else { $cbr[$i-1] = $breaks[$bk-1]; } + break; + } + } + } + $cbr[($this->NbCol-1)] = $sum_h; + + // Now update the columns - divide into columns of approximately equal value + $last_new_col = 0; + $yadj = 0; // mm + $xadj = 0; + $last_col_bottom = 0; + $lowest_bottom_y = 0; + $block_bottom = 0; + $newcolumn = 0; + foreach($this->columnbuffer AS $key=>$s) { + if (isset($s['rel_y'])) { // only process position sensitive data + if ($s['rel_y'] >= $cbr[$newcolumn]) { + $newcolumn++; + } + else { + $newcolumn = $last_new_col ; + } + + + $block_bottom = max($block_bottom,($s['rel_y']+$s['h'])); + + if ($this->directionality == 'rtl') { // *RTL* + $xadj = -(($newcolumn - $s['col']) * ($this->ColWidth + $this->ColGap)); // *RTL* + } // *RTL* + else { // *RTL* + $xadj = ($newcolumn - $s['col']) * ($this->ColWidth + $this->ColGap); + } // *RTL* + + if ($last_new_col != $newcolumn) { // Added new column + $last_col_bottom = $this->columnbuffer[$key]['rel_y']; + $block_bottom = 0; + } + $yadj = ($s['rel_y'] - $s['y']) - ($last_col_bottom)+$this->y0; + // callback function + $t = $s['s']; + $t = preg_replace('/BT (\d+\.\d\d+) (\d+\.\d\d+) Td/e',"\$this->columnAdjustAdd('Td',_MPDFK,$xadj,$yadj,'\\1','\\2')",$t); + $t = preg_replace('/(\d+\.\d\d+) (\d+\.\d\d+) (\d+\.\d\d+) ([\-]{0,1}\d+\.\d\d+) re/e',"\$this->columnAdjustAdd('re',_MPDFK,$xadj,$yadj,'\\1','\\2','\\3','\\4')",$t); + $t = preg_replace('/(\d+\.\d\d+) (\d+\.\d\d+) l/e',"\$this->columnAdjustAdd('l',_MPDFK,$xadj,$yadj,'\\1','\\2')",$t); + $t = preg_replace('/q (\d+\.\d\d+) 0 0 (\d+\.\d\d+) (\d+\.\d\d+) (\d+\.\d\d+) cm \/(I|FO)/e',"\$this->columnAdjustAdd('img',_MPDFK,$xadj,$yadj,'\\1','\\2','\\3','\\4','\\5')",$t); + $t = preg_replace('/(\d+\.\d\d+) (\d+\.\d\d+) m/e',"\$this->columnAdjustAdd('draw',_MPDFK,$xadj,$yadj,'\\1','\\2')",$t); + $t = preg_replace('/(\d+\.\d\d+) (\d+\.\d\d+) (\d+\.\d\d+) (\d+\.\d\d+) (\d+\.\d\d+) (\d+\.\d\d+) c/e',"\$this->columnAdjustAdd('bezier',_MPDFK,$xadj,$yadj,'\\1','\\2','\\3','\\4','\\5','\\6')",$t); + + $this->columnbuffer[$key]['s'] = $t; + $this->columnbuffer[$key]['newcol'] = $newcolumn; + $this->columnbuffer[$key]['newy'] = $s['y'] + $yadj; + $last_new_col = $newcolumn; + $clb = $s['y'] + $yadj + $s['h'] ; // bottom_margin of current + if ((isset($this->ColDetails[$newcolumn]['max_bottom']) && $clb > $this->ColDetails[$newcolumn]['max_bottom']) || (!isset($this->ColDetails[$newcolumn]['max_bottom']) && $clb)) { $this->ColDetails[$newcolumn]['max_bottom'] = $clb; } + if ($clb > $lowest_bottom_y) { $lowest_bottom_y = $clb; } + // Adjust LINKS + if (isset($this->columnLinks[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])])) { + $ref = $this->columnLinks[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]; + $this->PageLinks[$this->page][$ref][0] += ($xadj*_MPDFK); + $this->PageLinks[$this->page][$ref][1] -= ($yadj*_MPDFK); + unset($this->columnLinks[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]); + } + // Adjust FORM FIELDS + if (isset($this->columnForms[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])])) { + $ref = $this->columnForms[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]; + $this->form->forms[$ref]['x'] += ($xadj); + $this->form->forms[$ref]['y'] += ($yadj); + unset($this->columnForms[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]); + } +/*-- ANNOTATIONS --*/ + if (isset($this->columnAnnots[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])])) { + $ref = $this->columnAnnots[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]; + if ($this->PageAnnots[$this->page][$ref]['x'] < 0) { + $this->PageAnnots[$this->page][$ref]['x'] -= ($xadj); + } + else { + $this->PageAnnots[$this->page][$ref]['x'] += ($xadj); + } + $this->PageAnnots[$this->page][$ref]['y'] += ($yadj); // unlike PageLinks, Page annots has y values from top in mm + unset($this->columnAnnots[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]); + } +/*-- END ANNOTATIONS --*/ + } + } + +/*-- BOOKMARKS --*/ + // Adjust Bookmarks + foreach($this->col_BMoutlines AS $v) { + $this->BMoutlines[]=array('t'=>$v['t'],'l'=>$v['l'],'y'=>$this->y0,'p'=>$v['p']); + } +/*-- END BOOKMARKS --*/ + +/*-- INDEX --*/ + // Adjust Reference (index) + foreach($this->col_Reference AS $v) { + $Present=0; + //Search the reference (AND Ref/PageNo) in the array + for ($i=0;$i<count($this->Reference);$i++){ + if ($this->Reference[$i]['t']==$v['t']){ + $Present=1; + if (!in_array($v['op'],$this->Reference[$i]['p'])) { + $this->Reference[$i]['p'][] = $v['op']; + } + } + } + if ($Present==0) { + $this->Reference[]=array('t'=>$v['t'],'p'=>array($v['op'])); + } + } +/*-- END INDEX --*/ + +/*-- TOC --*/ + + // Adjust ToC + foreach($this->col_toc AS $v) { + $this->tocontents->_toc[]=array('t'=>$v['t'],'l'=>$v['l'],'p'=>$v['p'],'link'=>$v['link'],'toc_id'=>$v['toc_id']); + $this->links[$v['link']][1] = $this->y0; + } +/*-- END TOC --*/ + + // Adjust column length to be equal + if ($this->colvAlign == 'J') { + foreach($this->columnbuffer AS $key=>$s) { + if (isset($s['rel_y'])) { // only process position sensitive data + // Set ratio to expand y values or heights + if (isset($this->ColDetails[$s['newcol']]['max_bottom']) && $this->ColDetails[$s['newcol']]['max_bottom'] && $this->ColDetails[$s['newcol']]['max_bottom']!=$this->y0) { + $ratio = ($lowest_bottom_y - ($this->y0)) / ($this->ColDetails[$s['newcol']]['max_bottom'] - ($this->y0)); + } + else { $ratio = 1; } + if (($ratio > 1) && ($ratio <= $this->max_colH_correction)) { + $yadj = ($s['newy'] - $this->y0) * ($ratio - 1); + + // Adjust LINKS + if (isset($this->columnLinks[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])])) { + $ref = $this->columnLinks[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]; + $this->PageLinks[$this->page][$ref][1] -= ($yadj*_MPDFK); // y value + $this->PageLinks[$this->page][$ref][3] *= $ratio; // height + unset($this->columnLinks[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]); + } + // Adjust FORM FIELDS + if (isset($this->columnForms[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])])) { + $ref = $this->columnForms[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]; + $this->form->forms[$ref]['x'] += ($xadj); + $this->form->forms[$ref]['y'] += ($yadj); + unset($this->columnForms[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]); + } +/*-- ANNOTATIONS --*/ + if (isset($this->columnAnnots[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])])) { + $ref = $this->columnAnnots[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]; + $this->PageAnnots[$this->page][$ref]['y'] += ($yadj); + unset($this->columnAnnots[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]); + } +/*-- END ANNOTATIONS --*/ + } + } + } + foreach($this->internallink AS $key => $f) { + if (is_array($f) && isset($f['col'])) { + $last_col_bottom = 0; + for ($nbc=0; $nbc<$this->NbCol; $nbc++) { + if ($f['rel_y'] >= $cbr[$nbc]) { $last_col_bottom = $cbr[$nbc]; } + } + $yadj = ($f['rel_y'] - $f['Y']) - $last_col_bottom + $this->y0; + $f['Y'] += $yadj; + unset($f['col']); + unset($f['rel_y']); + $this->internallink[$key] = $f; + } + } + + $last_col = -1; + $trans_on = false; + foreach($this->columnbuffer AS $key=>$s) { + if (isset($s['rel_y'])) { // only process position sensitive data + // Set ratio to expand y values or heights + if (isset($this->ColDetails[$s['newcol']]['max_bottom']) && $this->ColDetails[$s['newcol']]['max_bottom'] && $this->ColDetails[$s['newcol']]['max_bottom']!=$this->y0) { + $ratio = ($lowest_bottom_y - ($this->y0)) / ($this->ColDetails[$s['newcol']]['max_bottom'] - ($this->y0)); + } + else { $ratio = 1; } + if (($ratio > 1) && ($ratio <= $this->max_colH_correction)) { + //Start Transformation + $this->pages[$this->page] .= $this->StartTransform(true)."\n"; + $this->pages[$this->page] .= $this->transformScale(100, $ratio*100, $x='', $this->y0, true)."\n"; + $trans_on = true; + } + } + // Now output the adjusted values + $this->pages[$this->page] .= $s['s']."\n"; + if (isset($s['rel_y']) && ($ratio > 1) && ($ratio <= $this->max_colH_correction)) { // only process position sensitive data + //Stop Transformation + $this->pages[$this->page] .= $this->StopTransform(true)."\n"; + $trans_on = false; + } + } + if ($trans_on) { $this->pages[$this->page] .= $this->StopTransform(true)."\n"; } + } + else { // if NOT $this->colvAlign == 'J' + // Now output the adjusted values + foreach($this->columnbuffer AS $s) { + $this->pages[$this->page] .= $s['s']."\n"; + } + } + if ($lowest_bottom_y > 0) { $this->y = $lowest_bottom_y ; } + } + + // Columns not ended but new page -> align columns (can leave the columns alone - just tidy up the height) + else if ($this->colvAlign == 'J' && $this->ColumnAdjust && !$this->keepColumns) { + // calculate the lowest bottom margin + $lowest_bottom_y = 0; + foreach($this->columnbuffer AS $key=>$s) { + // Only process output data + $t = $s['s']; + if ($t == 'ACROFORM' || (preg_match('/BT \d+\.\d\d+ (\d+\.\d\d+) Td/',$t)) || (preg_match('/\d+\.\d\d+ (\d+\.\d\d+) \d+\.\d\d+ [\-]{0,1}\d+\.\d\d+ re/',$t)) || + (preg_match('/\d+\.\d\d+ (\d+\.\d\d+) l/',$t)) || + (preg_match('/q \d+\.\d\d+ 0 0 \d+\.\d\d+ \d+\.\d\d+ (\d+\.\d\d+) cm \/(I|FO)\d+ Do Q/',$t)) || + (preg_match('/\d+\.\d\d+ (\d+\.\d\d+) m/',$t)) || + (preg_match('/\d+\.\d\d+ (\d+\.\d\d+) \d+\.\d\d+ \d+\.\d\d+ \d+\.\d\d+ \d+\.\d\d+ c/',$t)) ) { + + $clb = $s['y'] + $s['h']; + if ((isset($this->ColDetails[$s['col']]['max_bottom']) && $clb > $this->ColDetails[$s['col']]['max_bottom']) || !isset($this->ColDetails[$s['col']]['max_bottom'])) { $this->ColDetails[$s['col']]['max_bottom'] = $clb; } + if ($clb > $lowest_bottom_y) { $lowest_bottom_y = $clb; } + $this->columnbuffer[$key]['rel_y'] = $s['y']; // Marks position sensitive data to process later + if ($t == 'ACROFORM') { $this->columnbuffer[$key]['s'] = ''; } + } + } + // Adjust column length equal + foreach($this->columnbuffer AS $key=>$s) { + // Set ratio to expand y values or heights + if (isset($this->ColDetails[$s['col']]['max_bottom']) && $this->ColDetails[$s['col']]['max_bottom']) { + $ratio = ($lowest_bottom_y - ($this->y0)) / ($this->ColDetails[$s['col']]['max_bottom'] - ($this->y0)); + } + else { $ratio = 1; } + if (($ratio > 1) && ($ratio <= $this->max_colH_correction)) { + $yadj = ($s['y'] - $this->y0) * ($ratio - 1); + + // Adjust LINKS + if (isset($s['rel_y'])) { // only process position sensitive data + // otherwise triggers for all entries in column buffer (.e.g. formatting) and makes below adjustments more than once + if (isset($this->columnLinks[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])])) { + $ref = $this->columnLinks[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]; + $this->PageLinks[$this->page][$ref][1] -= ($yadj*_MPDFK); // y value + $this->PageLinks[$this->page][$ref][3] *= $ratio; // height + unset($this->columnLinks[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]); + } + // Adjust FORM FIELDS + if (isset($this->columnForms[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])])) { + $ref = $this->columnForms[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]; + $this->form->forms[$ref]['x'] += ($xadj); + $this->form->forms[$ref]['y'] += ($yadj); + unset($this->columnForms[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]); + } +/*-- ANNOTATIONS --*/ + if (isset($this->columnAnnots[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])])) { + $ref = $this->columnAnnots[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]; + $this->PageAnnots[$this->page][$ref]['y'] += ($yadj); + unset($this->columnAnnots[$s['col']][INTVAL($s['x'])][INTVAL($s['y'])]); + } +/*-- END ANNOTATIONS --*/ + } + } + } + +/*-- BOOKMARKS --*/ + + // Adjust Bookmarks + foreach($this->col_BMoutlines AS $v) { + $this->BMoutlines[]=array('t'=>$v['t'],'l'=>$v['l'],'y'=>$this->y0,'p'=>$v['p']); + } +/*-- END BOOKMARKS --*/ + +/*-- INDEX --*/ + + // Adjust Reference (index) + foreach($this->col_Reference AS $v) { + $Present=0; + //Search the reference (AND Ref/PageNo) in the array + for ($i=0;$i<count($this->Reference);$i++){ + if ($this->Reference[$i]['t']==$v['t']){ + $Present=1; + if (!in_array($v['op'],$this->Reference[$i]['p'])) { + $this->Reference[$i]['p'][] = $v['op']; + } + } + } + if ($Present==0) { + $this->Reference[]=array('t'=>$v['t'],'p'=>array($v['op'])); + } + } +/*-- END INDEX --*/ + +/*-- TOC --*/ + + // Adjust ToC + foreach($this->col_toc AS $v) { + $this->tocontents->_toc[]=array('t'=>$v['t'],'l'=>$v['l'],'p'=>$v['p'],'link'=>$v['link'],'toc_id'=>$v['toc_id']); + $this->links[$v['link']][1] = $this->y0; + } +/*-- END TOC --*/ + $trans_on = false; + foreach($this->columnbuffer AS $key=>$s) { + if (isset($s['rel_y'])) { // only process position sensitive data + // Set ratio to expand y values or heights + if ($this->ColDetails[$s['col']]['max_bottom']) { + $ratio = ($lowest_bottom_y - ($this->y0)) / ($this->ColDetails[$s['col']]['max_bottom'] - ($this->y0)); + } + else { $ratio = 1; } + if (($ratio > 1) && ($ratio <= $this->max_colH_correction)) { + //Start Transformation + $this->pages[$this->page] .= $this->StartTransform(true)."\n"; + $this->pages[$this->page] .= $this->transformScale(100, $ratio*100, $x='', $this->y0, true)."\n"; + $trans_on = true; + } + } + // Now output the adjusted values + $this->pages[$this->page] .= $s['s']."\n"; + if (isset($s['rel_y']) && ($ratio > 1) && ($ratio <= $this->max_colH_correction)) { + //Stop Transformation + $this->pages[$this->page] .= $this->StopTransform(true)."\n"; + $trans_on = false; // mPDF 5.1.001 + } + } + if ($trans_on) { $this->pages[$this->page] .= $this->StopTransform(true)."\n"; } + + if ($lowest_bottom_y > 0) { $this->y = $lowest_bottom_y ; } + } + + + // Just reproduce the page as it was + else { + // If page has not ended but height adjustment was disabled by custom column-break - adjust y + $lowest_bottom_y = 0; + if (!$this->ColActive && (!$this->ColumnAdjust || $this->keepColumns)) { + // calculate the lowest bottom margin + foreach($this->columnbuffer AS $key=>$s) { + // Only process output data + $t = $s['s']; + if ($t == 'ACROFORM' || (preg_match('/BT \d+\.\d\d+ (\d+\.\d\d+) Td/',$t)) || (preg_match('/\d+\.\d\d+ (\d+\.\d\d+) \d+\.\d\d+ [\-]{0,1}\d+\.\d\d+ re/',$t)) || + (preg_match('/\d+\.\d\d+ (\d+\.\d\d+) l/',$t)) || + (preg_match('/q \d+\.\d\d+ 0 0 \d+\.\d\d+ \d+\.\d\d+ (\d+\.\d\d+) cm \/(I|FO)\d+ Do Q/',$t)) || + (preg_match('/\d+\.\d\d+ (\d+\.\d\d+) m/',$t)) || + (preg_match('/\d+\.\d\d+ (\d+\.\d\d+) \d+\.\d\d+ \d+\.\d\d+ \d+\.\d\d+ \d+\.\d\d+ c/',$t)) ) { + + $clb = $s['y'] + $s['h']; + if ($clb > $this->ColDetails[$s['col']]['max_bottom']) { $this->ColDetails[$s['col']]['max_bottom'] = $clb; } + if ($clb > $lowest_bottom_y) { $lowest_bottom_y = $clb; } + } + } + } + foreach($this->columnbuffer AS $key=>$s) { + if ($s['s'] != 'ACROFORM') + $this->pages[$this->page] .= $s['s']."\n"; + } + if ($lowest_bottom_y > 0) { $this->y = $lowest_bottom_y ; } +/*-- INDEX --*/ + + // Output Reference (index) + foreach($this->col_Reference AS $v) { + $Present=0; + for ($i=0;$i<count($this->Reference);$i++){ + if ($this->Reference[$i]['t']==$v['t']){ + $Present=1; + if (!in_array($v['op'],$this->Reference[$i]['p'])) { + $this->Reference[$i]['p'][] = $v['op']; + } + } + } + if ($Present==0) { + $this->Reference[]=array('t'=>$v['t'],'p'=>array($v['op'])); + } + } +/*-- END INDEX --*/ +/*-- BOOKMARKS --*/ + // Output Bookmarks + foreach($this->col_BMoutlines AS $v) { + $this->BMoutlines[]=array('t'=>$v['t'],'l'=>$v['l'],'y'=>$v['y'],'p'=>$v['p']); + } +/*-- END BOOKMARKS --*/ +/*-- TOC --*/ + // Output ToC + foreach($this->col_toc AS $v) { + $this->tocontents->_toc[]=array('t'=>$v['t'],'l'=>$v['l'],'p'=>$v['p'],'link'=>$v['link'],'toc_id'=>$v['toc_id']); + } +/*-- END TOC --*/ + } + foreach($this->internallink AS $key => $f) { + if (isset($this->internallink[$key]['col'])) unset($this->internallink[$key]['col']); + if (isset($this->internallink[$key]['rel_y'])) unset($this->internallink[$key]['rel_y']); + } + + $this->columnbuffer = array(); + $this->ColDetails = array(); + $this->columnLinks = array(); + $this->columnAnnots = array(); + $this->columnForms = array(); + + $this->col_Reference = array(); + $this->col_BMoutlines = array(); + $this->col_toc = array(); + $this->breakpoints = array(); +} + +/*-- END COLUMNS --*/ + + +//================================================================== +/*-- TABLES --*/ +function printcellbuffer() { + if (count($this->cellBorderBuffer )) { + sort($this->cellBorderBuffer); + foreach($this->cellBorderBuffer AS $cbb) { + $cba = unpack("A16dom/nbord/A1side/ns/dbw/a6ca/A10style/dx/dy/dw/dh/dmbl/dmbr/dmrt/dmrb/dmtl/dmtr/dmlt/dmlb/dcpd/dover/", $cbb); + $side = $cba['side']; + $details = array(); + $details[$side]['dom'] = (float) $cba['dom']; + $details[$side]['s'] = $cba['s']; + $details[$side]['w'] = $cba['bw']; + $details[$side]['c'] = $cba['ca']; + $details[$side]['style'] = trim($cba['style']); + $details['mbw']['BL'] = $cba['mbl']; + $details['mbw']['BR'] = $cba['mbr']; + $details['mbw']['RT'] = $cba['mrt']; + $details['mbw']['RB'] = $cba['mrb']; + $details['mbw']['TL'] = $cba['mtl']; + $details['mbw']['TR'] = $cba['mtr']; + $details['mbw']['LT'] = $cba['mlt']; + $details['mbw']['LB'] = $cba['mlb']; + $details['cellposdom'] = $cba['cpd']; + $details['p'] = $side; + if ($cba['over']==1) { $details[$side]['overlay'] = true; } + else { $details[$side]['overlay'] = false; } + $this->_tableRect($cba['x'],$cba['y'],$cba['w'],$cba['h'],$cba['bord'],$details, false, false); + + } + $this->cellBorderBuffer = array(); + } +} +//================================================================== +function printtablebuffer() { + + if (!$this->table_rotate) { + $this->pages[$this->page] .= $this->tablebuffer; + foreach($this->tbrot_Links AS $p => $l) { + foreach($l AS $v) { + $this->PageLinks[$p][] = $v; + } + } + $this->tbrot_Links = array(); +/*-- ANNOTATIONS --*/ + foreach($this->tbrot_Annots AS $p => $l) { + foreach($l AS $v) { + $this->PageAnnots[$p][] = $v; + } + } + $this->tbrot_Annots = array(); +/*-- END ANNOTATIONS --*/ + +/*-- INDEX --*/ + // Output Reference (index) + foreach($this->tbrot_Reference AS $v) { + $Present=0; + for ($i=0;$i<count($this->Reference);$i++){ + if ($this->Reference[$i]['t']==$v['t']){ + $Present=1; + if (!in_array($v['op'],$this->Reference[$i]['p'])) { + $this->Reference[$i]['p'][] = $v['op']; + } + } + } + if ($Present==0) { + $this->Reference[]=array('t'=>$v['t'],'p'=>array($v['op'])); + } + } + $this->tbrot_Reference = array(); +/*-- END INDEX --*/ + +/*-- BOOKMARKS --*/ + // Output Bookmarks + foreach($this->tbrot_BMoutlines AS $v) { + $this->BMoutlines[]=array('t'=>$v['t'],'l'=>$v['l'],'y'=>$v['y'],'p'=>$v['p']); + } + $this->tbrot_BMoutlines = array(); +/*-- END BOOKMARKS --*/ + +/*-- TOC --*/ + // Output ToC + foreach($this->tbrot_toc AS $v) { + $this->tocontents->_toc[]=array('t'=>$v['t'],'l'=>$v['l'],'p'=>$v['p'],'link'=>$v['link'],'toc_id'=>$v['toc_id']); + } + $this->tbrot_toc = array(); +/*-- END TOC --*/ + + return; + } + // else if rotated + $lm = $this->lMargin + $this->blk[$this->blklvl]['outer_left_margin'] + $this->blk[$this->blklvl]['border_left']['w'] + $this->blk[$this->blklvl]['padding_left']; + $pw = $this->blk[$this->blklvl]['inner_width']; + //Start Transformation + $this->pages[$this->page] .= $this->StartTransform(true)."\n"; + + if ($this->table_rotate > 1) { // clockwise + if ($this->tbrot_align == 'L') { + $xadj = $this->tbrot_h ; // align L (as is) + } + else if ($this->tbrot_align == 'R') { + $xadj = $lm-$this->tbrot_x0+($pw) ; // align R + } + else { + $xadj = $lm-$this->tbrot_x0+(($pw + $this->tbrot_h)/2) ; // align C + } + $yadj = 0; + } + else { // anti-clockwise + if ($this->tbrot_align == 'L') { + $xadj = 0 ; // align L (as is) + } + else if ($this->tbrot_align == 'R') { + $xadj = $lm-$this->tbrot_x0+($pw - $this->tbrot_h) ; // align R + } + else { + $xadj = $lm-$this->tbrot_x0+(($pw - $this->tbrot_h)/2) ; // align C + } + $yadj = $this->tbrot_w; + } + + + $this->pages[$this->page] .= $this->transformTranslate($xadj, $yadj , true)."\n"; + $this->pages[$this->page] .= $this->transformRotate($this->table_rotate, $this->tbrot_x0 , $this->tbrot_y0 , true)."\n"; + + // Now output the adjusted values + $this->pages[$this->page] .= $this->tablebuffer; + + + foreach($this->tbrot_Links AS $p => $l) { + foreach($l AS $v) { + $w = $v[2]/_MPDFK; + $h = $v[3]/_MPDFK; + $ax = ($v[0]/_MPDFK) - $this->tbrot_x0; + $ay = (($this->hPt-$v[1])/_MPDFK) - $this->tbrot_y0; + if ($this->table_rotate > 1) { // clockwise + $bx = $this->tbrot_x0+$xadj-$ay-$h; + $by = $this->tbrot_y0+$yadj+$ax; + } + else { + $bx = $this->tbrot_x0+$xadj+$ay; + $by = $this->tbrot_y0+$yadj-$ax-$w; + } + $v[0] = $bx*_MPDFK; + $v[1] = ($this->h-$by)*_MPDFK; + $v[2] = $h*_MPDFK; // swap width and height + $v[3] = $w*_MPDFK; + $this->PageLinks[$p][] = $v; + } + } + $this->tbrot_Links = array(); + foreach($this->internallink AS $key => $f) { + if (is_array($f) && isset($f['tbrot'])) { + $f['Y'] = $this->tbrot_y0; + $f['PAGE'] = $this->page; + unset($f['tbrot']); + $this->internallink[$key] = $f; + } + } +/*-- ANNOTATIONS --*/ + foreach($this->tbrot_Annots AS $p => $l) { + foreach($l AS $v) { + $ax = abs($v['x']) - $this->tbrot_x0; // abs because -ve values are internally set and held for reference if annotMargin set + $ay = $v['y'] - $this->tbrot_y0; + if ($this->table_rotate > 1) { // clockwise + $bx = $this->tbrot_x0+$xadj-$ay; + $by = $this->tbrot_y0+$yadj+$ax; + } + else { + $bx = $this->tbrot_x0+$xadj+$ay; + $by = $this->tbrot_y0+$yadj-$ax; + } + if ($v['x'] < 0) { + $v['x'] = -$bx; + } + else { + $v['x'] = $bx; + } + $v['y'] = ($by); + $this->PageAnnots[$p][] = $v; + } + } + $this->tbrot_Annots = array(); +/*-- END ANNOTATIONS --*/ + + +/*-- BOOKMARKS --*/ + + // Adjust Bookmarks + foreach($this->tbrot_BMoutlines AS $v) { + $v['y'] = $this->tbrot_y0; + $this->BMoutlines[]=array('t'=>$v['t'],'l'=>$v['l'],'y'=>$v['y'],'p'=>$this->page); + } +/*-- END BOOKMARKS --*/ + +/*-- INDEX --*/ + + // Adjust Reference (index) + foreach($this->tbrot_Reference AS $v) { + $Present=0; + //Search the reference (AND Ref/PageNo) in the array + for ($i=0;$i<count($this->Reference);$i++){ + if ($this->Reference[$i]['t']==$v['t']){ + $Present=1; + if (!in_array($this->page,$this->Reference[$i]['p'])) { + $this->Reference[$i]['p'][] = $this->page; + } + } + } + if ($Present==0) { + $this->Reference[]=array('t'=>$v['t'],'p'=>array($this->page)); + } + } +/*-- END INDEX --*/ + +/*-- TOC --*/ + + // Adjust ToC - uses document page number + foreach($this->tbrot_toc AS $v) { + $this->tocontents->_toc[]=array('t'=>$v['t'],'l'=>$v['l'],'p'=>$this->page,'link'=>$v['link'],'toc_id'=>$v['toc_id']); + $this->links[$v['link']][1] = $this->tbrot_y0; + } +/*-- END TOC --*/ + + + + $this->tbrot_Reference = array(); + $this->tbrot_BMoutlines = array(); + $this->tbrot_toc = array(); + + //Stop Transformation + $this->pages[$this->page] .= $this->StopTransform(true)."\n"; + + + $this->y = $this->tbrot_y0 + $this->tbrot_w; + $this->x = $this->lMargin; + + $this->tablebuffer = ''; +} + +//================================================================== +// Keep-with-table This buffers contents of h1-6 to keep on page with table +function printkwtbuffer() { + if (!$this->kwt_moved) { + foreach($this->kwt_buffer AS $s) { $this->pages[$this->page] .= $s['s']."\n"; } + foreach($this->kwt_Links AS $p => $l) { + foreach($l AS $v) { + $this->PageLinks[$p][] = $v; + } + } + $this->kwt_Links = array(); +/*-- ANNOTATIONS --*/ + foreach($this->kwt_Annots AS $p => $l) { + foreach($l AS $v) { + $this->PageAnnots[$p][] = $v; + } + } + $this->kwt_Annots = array(); +/*-- END ANNOTATIONS --*/ + +/*-- INDEX --*/ + // Output Reference (index) + foreach($this->kwt_Reference AS $v) { + $Present=0; + for ($i=0;$i<count($this->Reference);$i++){ + if ($this->Reference[$i]['t']==$v['t']){ + $Present=1; + if (!in_array($v['op'],$this->Reference[$i]['p'])) { + $this->Reference[$i]['p'][] = $v['op']; + } + } + } + if ($Present==0) { + $this->Reference[]=array('t'=>$v['t'],'p'=>array($v['op'])); + } + } + $this->kwt_Reference = array(); +/*-- END INDEX --*/ + +/*-- BOOKMARKS --*/ + // Output Bookmarks + foreach($this->kwt_BMoutlines AS $v) { + $this->BMoutlines[]=array('t'=>$v['t'],'l'=>$v['l'],'y'=>$v['y'],'p'=>$v['p']); + } + $this->kwt_BMoutlines = array(); +/*-- END BOOKMARKS --*/ + +/*-- TOC --*/ + // Output ToC + foreach($this->kwt_toc AS $v) { + $this->tocontents->_toc[]=array('t'=>$v['t'],'l'=>$v['l'],'p'=>$v['p'],'link'=>$v['link'],'toc_id'=>$v['toc_id']); + } + $this->kwt_toc = array(); +/*-- END TOC --*/ + + return; + } + + //Start Transformation + $this->pages[$this->page] .= $this->StartTransform(true)."\n"; + $xadj = $this->lMargin - $this->kwt_x0 ; + //$yadj = $this->y - $this->kwt_y0 ; + $yadj = $this->tMargin - $this->kwt_y0 ; + + $this->pages[$this->page] .= $this->transformTranslate($xadj, $yadj , true)."\n"; + + // Now output the adjusted values + foreach($this->kwt_buffer AS $s) { $this->pages[$this->page] .= $s['s']."\n"; } + + // Adjust hyperLinks + foreach($this->kwt_Links AS $p => $l) { + foreach($l AS $v) { + $bx = $this->kwt_x0+$xadj; + $by = $this->kwt_y0+$yadj; + $v[0] = $bx*_MPDFK; + $v[1] = ($this->h-$by)*_MPDFK; + $this->PageLinks[$p][] = $v; + } + } + foreach($this->internallink AS $key => $f) { + if (is_array($f) && isset($f['kwt'])) { + $f['Y'] += $yadj; + $f['PAGE'] = $this->page; + unset($f['kwt']); + $this->internallink[$key] = $f; + } + } +/*-- ANNOTATIONS --*/ + foreach($this->kwt_Annots AS $p => $l) { + foreach($l AS $v) { + $bx = $this->kwt_x0+$xadj; + $by = $this->kwt_y0+$yadj; + if ($v['x'] < 0) { + $v['x'] = -$bx; + } + else { + $v['x'] = $bx; + } + $v['y'] = $by; + $this->PageAnnots[$p][] = $v; + } + } +/*-- END ANNOTATIONS --*/ + +/*-- BOOKMARKS --*/ + + // Adjust Bookmarks + foreach($this->kwt_BMoutlines AS $v) { + if ($v['y'] != 0) { $v['y'] += $yadj; } + $this->BMoutlines[]=array('t'=>$v['t'],'l'=>$v['l'],'y'=>$v['y'],'p'=>$this->page); + } +/*-- END BOOKMARKS --*/ + +/*-- INDEX --*/ + + // Adjust Reference (index) + foreach($this->kwt_Reference AS $v) { + $Present=0; + //Search the reference (AND Ref/PageNo) in the array + for ($i=0;$i<count($this->Reference);$i++){ + if ($this->Reference[$i]['t']==$v['t']){ + $Present=1; + if (!in_array($this->page,$this->Reference[$i]['p'])) { + $this->Reference[$i]['p'][] = $this->page; + } + } + } + if ($Present==0) { + $this->Reference[]=array('t'=>$v['t'],'p'=>array($this->page)); + } + } +/*-- END INDEX --*/ + +/*-- TOC --*/ + + // Adjust ToC + foreach($this->kwt_toc AS $v) { + $this->tocontents->_toc[]=array('t'=>$v['t'],'l'=>$v['l'],'p'=>$this->page,'link'=>$v['link'],'toc_id'=>$v['toc_id']); + $this->links[$v['link']][0] = $this->page; + $this->links[$v['link']][1] += $yadj; + } +/*-- END TOC --*/ + + + $this->kwt_Links = array(); + $this->kwt_Annots = array(); + + $this->kwt_Reference = array(); + $this->kwt_BMoutlines = array(); + $this->kwt_toc = array(); + //Stop Transformation + $this->pages[$this->page] .= $this->StopTransform(true)."\n"; + + $this->kwt_buffer = array(); + + $this->y += $this->kwt_height; +} + +/*-- END TABLES --*/ + + +//================================================================== + +function printfloatbuffer() { + if (count($this->floatbuffer)) { + $this->objectbuffer = $this->floatbuffer; + $this->printobjectbuffer(false); + $this->objectbuffer = array(); + $this->floatbuffer = array(); + $this->floatmargins = array(); + } +} +//================================================================== + +function printdivbuffer() { + $p1 = $this->blk[$this->blklvl]['startpage']; + $p2 = $this->page; + $bottom[$p1] = $this->ktBlock[$p1]['bottom_margin']; + $bottom[$p2] = $this->y; // $this->ktBlock[$p2]['bottom_margin']; + $top[$p1] = $this->kt_y00; + + $top2 = $this->h; + foreach($this->divbuffer AS $key=>$s) { + if ($s['page'] == $p2) { + $top2 = MIN($s['y'], $top2); + } + } + $top[$p2] = $top2; + $height[$p1] = ($bottom[$p1] - $top[$p1]); + $height[$p2] = ($bottom[$p2] - $top[$p2]); + $xadj[$p1] = $this->MarginCorrection; + $yadj[$p1] = -($top[$p1] - $top[$p2]); + $xadj[$p2] = 0; + $yadj[$p2] = $height[$p1]; + + // Output without any transformation + if ($this->ColActive || !$this->keep_block_together || $this->blk[$this->blklvl]['startpage'] == $this->page || ($this->page - $this->blk[$this->blklvl]['startpage']) > 1 || ($height[$p1]+$height[$p2]) > $this->h) { + foreach($this->divbuffer AS $s) { $this->pages[$s['page']] .= $s['s']."\n"; } + foreach($this->ktLinks AS $p => $l) { + foreach($l AS $v) { + $this->PageLinks[$p][] = $v; + } + } + foreach($this->ktForms AS $key => $f) { + $this->form->forms[$f['n']] = $f; + } +/*-- ANNOTATIONS --*/ + foreach($this->ktAnnots AS $p => $l) { + foreach($l AS $v) { + $this->PageAnnots[$p][] = $v; + } + } +/*-- END ANNOTATIONS --*/ +/*-- INDEX --*/ + // Adjust Reference (index) + foreach($this->ktReference AS $v) { + $Present=0; + //Search the reference (AND Ref/PageNo) in the array + for ($i=0;$i<count($this->Reference);$i++){ + if ($this->Reference[$i]['t']==$v['t']){ + $Present=1; + if (!in_array($p2,$this->Reference[$i]['p'])) { + $this->Reference[$i]['p'][] = $p2; + } + } + } + //If not found, add it + if ($Present==0) { + $this->Reference[]=array('t'=>$v['t'],'p'=>array($p2)); + } + } +/*-- END INDEX --*/ + +/*-- BOOKMARKS --*/ + // Adjust Bookmarks + foreach($this->ktBMoutlines AS $v) { + $this->BMoutlines[]=array('t'=>$v['t'],'l'=>$v['l'],'y'=>$v['y'],'p'=>$v['p']); + } +/*-- END BOOKMARKS --*/ + +/*-- TOC --*/ + // Adjust ToC + foreach($this->_kttoc AS $v) { + $this->tocontents->_toc[]=array('t'=>$v['t'],'l'=>$v['l'],'p'=>$v['p'],'link'=>$v['link'],'toc_id'=>$v['toc_id']); + } +/*-- END TOC --*/ + + $this->divbuffer = array(); + $this->ktLinks = array(); + $this->ktAnnots = array(); + $this->ktForms = array(); + $this->ktBlock = array(); + $this->ktReference = array(); + $this->ktBMoutlines = array(); + $this->_kttoc = array(); + $this->keep_block_together = 0; + return; + } + else { + // Output with transformation + // mPDF 5.6.17 + $np = ''; + $lastpage = -1; + foreach($this->divbuffer AS $key=>$s) { + // callback function + $t = $s['s']; + $p = $s['page']; + if ($p != $lastpage) { + $q = ''; + if ($lastpage != -1) { $q = ' Q'."\n"; } + $t = $q . $this->StartTransform(true)."\n" . $this->transformTranslate($xadj[$p], $yadj[$p] , true)."\n" . $t; + $lastpage = $p; + } + $np .= $t."\n"; + } + if ($lastpage != -1) { $np .= ' Q'."\n"; } + + $this->pages[$this->page] .= $np; + + // Adjust hyperLinks + foreach($this->ktLinks AS $p => $l) { + foreach($l AS $v) { + $v[0] += ($xadj[$p]*_MPDFK); + $v[1] -= ($yadj[$p]*_MPDFK); + $this->PageLinks[$p2][] = $v; + } + } + foreach($this->ktForms AS $key => $f) { + $p = $f['page']; + $f['x'] += ($xadj[$p]); + $f['y'] += ($yadj[$p]); + $f['page'] = $p2; + $this->form->forms[$f['n']] = $f; + } + foreach($this->internallink AS $key => $f) { + if (is_array($f) && isset($f['kt'])) { + $f['Y'] += ($yadj[$f['PAGE']]); + $f['PAGE'] = $p2; + unset($f['kt']); + $this->internallink[$key] = $f; + } + } +/*-- ANNOTATIONS --*/ + foreach($this->ktAnnots AS $p => $l) { + foreach($l AS $v) { + if ($v['x']>0) { $v['x'] += $xadj[$p]; } + else if ($v['x']<0) { $v['x'] -= $xadj[$p]; } + $v['y'] += $yadj[$p]; + $this->PageAnnots[$p2][] = $v; + } + } +/*-- END ANNOTATIONS --*/ + +/*-- BOOKMARKS --*/ + // Adjust Bookmarks + foreach($this->ktBMoutlines AS $v) { + if ($v['y'] != 0) { $v['y'] += ($yadj[$v['p']]); } + $this->BMoutlines[]=array('t'=>$v['t'],'l'=>$v['l'],'y'=>$v['y'],'p'=>$p2); + } +/*-- END BOOKMARKS --*/ + +/*-- INDEX --*/ + // Adjust Reference (index) + foreach($this->ktReference AS $v) { + $Present=0; + //Search the reference (AND Ref/PageNo) in the array + for ($i=0;$i<count($this->Reference);$i++){ + if ($this->Reference[$i]['t']==$v['t']){ + $Present=1; + if (!in_array($p2,$this->Reference[$i]['p'])) { + $this->Reference[$i]['p'][] = $p2; + } + } + } + //If not found, add it + if ($Present==0) { + $this->Reference[]=array('t'=>$v['t'],'p'=>array($p2)); + } + } +/*-- END INDEX --*/ + +/*-- TOC --*/ + // Adjust ToC + foreach($this->_kttoc AS $v) { + $this->tocontents->_toc[]=array('t'=>$v['t'],'l'=>$v['l'],'p'=>$p2,'link'=>$v['link'],'toc_id'=>$v['toc_id']); + $this->links[$v['link']][0] = $p2; + $this->links[$v['link']][1] += $yadj[$v['p']]; + } +/*-- END TOC --*/ + + $this->y = $top[$p2] + $height[$p1] + $height[$p2]; + $this->x = $this->lMargin; + + $this->divbuffer = array(); + $this->ktLinks = array(); + $this->ktAnnots = array(); + $this->ktForms = array(); + $this->ktBlock = array(); + $this->ktReference = array(); + $this->ktBMoutlines = array(); + $this->_kttoc = array(); + $this->keep_block_together = 0; + } +} + + +//================================================================== +// Added ELLIPSES and CIRCLES +function Circle($x,$y,$r,$style='S') { + $this->Ellipse($x,$y,$r,$r,$style); +} + +function Ellipse($x,$y,$rx,$ry,$style='S') { + if($style=='F') { $op='f'; } + elseif($style=='FD' or $style=='DF') { $op='B'; } + else { $op='S'; } + $lx=4/3*(M_SQRT2-1)*$rx; + $ly=4/3*(M_SQRT2-1)*$ry; + $h=$this->h; + $this->_out(sprintf('%.3F %.3F m %.3F %.3F %.3F %.3F %.3F %.3F c', ($x+$rx)*_MPDFK,($h-$y)*_MPDFK, ($x+$rx)*_MPDFK,($h-($y-$ly))*_MPDFK, ($x+$lx)*_MPDFK,($h-($y-$ry))*_MPDFK, $x*_MPDFK,($h-($y-$ry))*_MPDFK)); + $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F c', ($x-$lx)*_MPDFK,($h-($y-$ry))*_MPDFK, ($x-$rx)*_MPDFK,($h-($y-$ly))*_MPDFK, ($x-$rx)*_MPDFK,($h-$y)*_MPDFK)); + $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F c', ($x-$rx)*_MPDFK,($h-($y+$ly))*_MPDFK, ($x-$lx)*_MPDFK,($h-($y+$ry))*_MPDFK, $x*_MPDFK,($h-($y+$ry))*_MPDFK)); + $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F c %s', ($x+$lx)*_MPDFK,($h-($y+$ry))*_MPDFK, ($x+$rx)*_MPDFK,($h-($y+$ly))*_MPDFK, ($x+$rx)*_MPDFK,($h-$y)*_MPDFK, $op)); +} + +/*-- DIRECTW --*/ +// Added adaptation of shaded_box = AUTOSIZE-TEXT +function AutosizeText($text,$w,$font,$style,$szfont=72) { + $text = $this->purify_utf8_text($text); + if ($this->text_input_as_HTML) { + $text = $this->all_entities_to_utf8($text); + } + if ($this->usingCoreFont) { $text = mb_convert_encoding($text,$this->mb_enc,'UTF-8'); } + $text = ' '.$text.' '; + $width = $this->ConvertSize($w); + $loop = 0; + while ( $loop == 0 ) { + $this->SetFont($font,$style,$szfont); + $sz = $this->GetStringWidth( $text ); + if ( $sz > $w ) { $szfont --; } + else { $loop ++; } + } + $this->SetFont($font,$style,$szfont); + $this->Cell($w, 0, $text, 0, 0, "C"); +} +/*-- END DIRECTW --*/ + + + + + +// ==================================================== +// ==================================================== +/*-- RTL --*/ +function reverse_letters($str) { + $str = strtr($str, '{}[]()', '}{][)('); + return $this->mb_strrev($str, $this->mb_enc); +} + +function magic_reverse_dir(&$chunk, $join=true, $dir) { + if ($this->usingCoreFont) { return 0; } + if ($this->biDirectional) { + // mPDF 5.4.05 Include PUA for non-indexed Arabic glyphs + $pregRTLchars = $this->pregRTLchars; + if ($this->CurrentFont['unAGlyphs']) { $pregRTLchars .= "\x{F500}-\x{F7FF}"; } + + // Change Arabic + Persian. to Presentation Forms + if ($join) { + $chunk = preg_replace("/([".$pregRTLchars."]+)/ue", '$this->ArabJoin(stripslashes(\'\\1\'))', $chunk ); + } + $contains_rtl = false; + $all_rtl = true; + $initSpace = false; + $endSpace = false; + $nonDirchars = "\x{A0}\"\'\(\)\{\}\[\].,:\\/-="; // mPDF 5.6.32 + // mPDF 5.6.43 + $bdo=array(); + preg_match_all('/([\x{202A}\x{202B}])(.*?)([\x{202C}])/u',$chunk,$m); + if (count($m[0])) { + for($i=0;$i<count($m[0]);$i++) { + if ($m[1][$i]=="\xe2\x80\xab") { // Right-to-Left Embedding [RLE] U+202B ‫ + $mark = code2utf(0xf800+$i); + $bdo[$i] = $this->reverse_letters($m[2][$i]); + } + else if ($m[1][$i]=="\xe2\x80\xaa") { // Left-to-Right Embedding [LRE] U+202A ‪ + $mark = code2utf(0xf880+$i); + $bdo[$i] = $m[2][$i]; + } + $chunk = preg_replace('/'.preg_quote($m[0][$i],'/').'/u',$mark,$chunk); + } + $pregRTLchars .= "\x{F800}-\x{F87F}"; + } + if (preg_match("/[".$pregRTLchars."]/u",$chunk)) { // Chunk contains RTL characters + if (preg_match("/^[ ]/",$chunk)) { $initSpace = true; $chunk = preg_replace("/^[ ]/",'',$chunk); } + if (preg_match("/[ ]$/",$chunk)) { $endSpace = true; $chunk = preg_replace("/[ ]$/",'',$chunk); } + + if (preg_match("/[^".$pregRTLchars.$nonDirchars." ]/u",$chunk)) { // Chunk also contains LTR characters + $all_rtl = false; + if ($dir == 'rtl') { + $chunk = preg_replace("/([^".$pregRTLchars.$nonDirchars."][".$nonDirchars."]*) ([".$nonDirchars."]*[^".$pregRTLchars.$nonDirchars."])/u","\\1\x07\\2",$chunk); + } + $chunk = preg_replace("/([".$pregRTLchars."][".$nonDirchars."]*) ([".$nonDirchars."]*[".$pregRTLchars."])/u","\\1\x07\\2",$chunk); + $bits = explode(' ',$chunk); + foreach($bits AS $bitkey=>$bit) { + $bit = preg_replace("/\x07/"," ",$bit); + if (preg_match("/^[".$pregRTLchars.$nonDirchars." ]*$/u",$bit)) { + $bits[$bitkey] = $this->reverse_letters($bit); + } + else if (preg_match("/[".$pregRTLchars."]/u",$bit)) { + if ($dir == 'rtl') { + $bit = preg_replace("/([^".$pregRTLchars.$nonDirchars." ])([".$nonDirchars."]*[".$pregRTLchars."])/u","\\1\x07\\2",$bit ); + $bit = preg_replace("/([".$pregRTLchars."][".$nonDirchars."]*)([^".$pregRTLchars.$nonDirchars." ])/u","\\1\x07\\2",$bit ); + } + else { + $bit = preg_replace("/([^".$pregRTLchars." ][".$nonDirchars."]*)([".$pregRTLchars." ])/u","\\1\x07\\2",$bit ); + $bit = preg_replace("/([".$pregRTLchars." ])([".$nonDirchars."]*[^".$pregRTLchars." ])/u","\\1\x07\\2",$bit ); + } + $sbits = explode("\x07",$bit ); + foreach($sbits AS $sbitkey=>$sbit) { + $sbit = preg_replace("/\x07/","",$sbit); + if (preg_match("/^[".$pregRTLchars.$nonDirchars." ]*$/u",$sbit)) { + $sbits[$sbitkey] = $this->reverse_letters($sbit); + } + else if (preg_match("/[".$pregRTLchars."]/u",$sbit) && $dir=='rtl') { + $sbits[$sbitkey] = $this->reverse_letters($sbit); + } + else { + // Reverse numerals only to RTL + $sbit = preg_replace("/([\x{0660}-\x{066C}0-9]+[\x{0660}-\x{066C}0-9\.,:\/]*[\x{0660}-\x{066C}0-9]+)/ue", '$this->reverse_letters(\'\\1\')', $sbit ); // mPDF 5.6.32 // mPDF 5.6.46 + $sbits[$sbitkey] = $sbit; + } + } + if ($dir == 'rtl') { $sbits = array_reverse($sbits,false); } + $bits[$bitkey] = implode('',$sbits); + } + else if (preg_match("/[".$pregRTLchars."]/u",$bit) && $dir=='rtl') { + $bits[$bitkey] = $this->reverse_letters($bit); + } + else { + // Reverse numerals only to RTL + $bit = preg_replace("/([\x{0660}-\x{066C}0-9]+[\x{0660}-\x{066C}0-9\.,:\/]*[\x{0660}-\x{066C}0-9]+)/ue", '$this->reverse_letters(\'\\1\')', $bit ); // mPDF 5.6.32 // mPDF 5.6.46 + $bits[$bitkey] = $bit; + } + } + if ($dir == 'rtl') { $bits = array_reverse($bits,false); } + $chunk = implode(' ',$bits); + } + else { $chunk = $this->reverse_letters($chunk); } + $contains_rtl = true; + + // Un-Reverse numerals back to ltr + $chunk = preg_replace("/([\x{0660}-\x{066C}0-9]+[\x{0660}-\x{066C}0-9\.,:\/]*[\x{0660}-\x{066C}0-9]+)/ue", '$this->reverse_letters(\'\\1\')', $chunk ); // mPDF 5.6.13 // mPDF 5.6.32 // mPDF 5.6.46 + if ($dir == 'rtl') { + if ($endSpace) { $chunk = ' '.$chunk; } + if ($initSpace) { $chunk .= ' '; } + } + else { + if ($initSpace) { $chunk = ' '.$chunk; } + if ($endSpace) { $chunk .= ' '; } + } + } + else { $all_rtl = false; } + + // mPDF 5.6.43 + if (count($bdo)) { + for($i=0;$i<count($bdo);$i++) { + $chunk = preg_replace('/[\x{'.dechex(intval(0xf800+$i)).'}\x{'.dechex(intval(0xf880+$i)).'}]/u',$bdo[$i],$chunk); + } + } + + if ($all_rtl) { return 2; } + else if ($contains_rtl) { return 1; } + else { return 0; } + } + return 0; +} +/*-- END RTL --*/ + +// +// **************************** +// **************************** + + +function SetSubstitutions() { + $subsarray = array(); + @include(_MPDF_PATH.'includes/subs_win-1252.php'); + $this->substitute = array(); + foreach($subsarray AS $key => $val) { + $this->substitute[code2utf($key)] = $val; + } +} + + +function SubstituteChars($html) { + // only substitute characters between tags + if (count($this->substitute)) { + $a=preg_split('/(<.*?>)/ms',$html,-1,PREG_SPLIT_DELIM_CAPTURE); + $html = ''; + foreach($a as $i => $e) { + if($i%2==0) { + $e = strtr($e, $this->substitute); + } + $html .= $e; + } + } + return $html; +} + + +function SubstituteCharsSIP(&$writehtml_a, &$writehtml_i, &$writehtml_e) { + if (preg_match("/^(.*?)([\x{20000}-\x{2FFFF}]+)(.*)/u", $writehtml_e, $m)) { + if (isset($this->CurrentFont['sipext']) && $this->CurrentFont['sipext']) { + $font = $this->CurrentFont['sipext']; + if (!in_array($font, $this->available_unifonts)) { return 0; } + $writehtml_a[$writehtml_i] = $writehtml_e = $m[1]; + array_splice($writehtml_a, $writehtml_i+1, 0, array('span style="font-family: '.$font.'"', $m[2], '/span', $m[3])); + $this->subPos = $writehtml_i; + return 4; + } + } + return 0; +} + +// If core font is selected in document which is not onlyCoreFonts - substitute with non-core font +function SubstituteCharsNonCore(&$writehtml_a, &$writehtml_i, &$writehtml_e) { + if (mb_convert_encoding(mb_convert_encoding($writehtml_e, $this->mb_enc, "UTF-8"), "UTF-8", $this->mb_enc) == $writehtml_e) { + return 0; + } + $cw = &$this->CurrentFont['cw']; + $unicode = $this->UTF8StringToArray($writehtml_e, false); + $start = -1; + $end = 0; + $flag = 0; + $ftype = ''; + $u = array(); + if (!$this->subArrMB) { + include(_MPDF_PATH.'includes/subs_core.php'); + $this->subArrMB['a'] = $aarr; + $this->subArrMB['s'] = $sarr; + $this->subArrMB['z'] = $zarr; + } + foreach($unicode AS $c => $char) { + if (($char> 127 || ($flag==1 && $char==32)) && $char != 173 && (!isset($this->subArrMB['a'][$char]) || ($flag==1 && $char==32)) && ($char<1536 || ($char>1791 && $char < 2304) || $char>3455)) { + if ($flag==0) { $start=$c; } + $flag=1; + $u[] = $char; + } + else if ($flag>0) { $end=$c-1; break; } + } + if ($flag>0 && !$end) { $end=count($unicode)-1; } + if ($start==-1) { return 0; } + // TRY IN BACKUP SUBS FONT + if (!is_array($this->backupSubsFont)) { $this->backupSubsFont = array("$this->backupSubsFont"); } + foreach($this->backupSubsFont AS $bsfctr=>$bsf) { + if ($this->fonttrans[$bsf] == 'chelvetica' || $this->fonttrans[$bsf] == 'ctimes' || $this->fonttrans[$bsf] == 'ccourier') { continue; } + $font = $bsf; + unset($cw); + $cw = ''; + if (isset($this->fonts[$font])) { $cw = &$this->fonts[$font]['cw']; } + else if (file_exists(_MPDF_TTFONTDATAPATH.$font.'.cw.dat')) { $cw = @file_get_contents(_MPDF_TTFONTDATAPATH.$font.'.cw.dat'); } + else { + + $prevFontFamily = $this->FontFamily; + $prevFontStyle = $this->currentfontstyle; + $prevFontSizePt = $this->FontSizePt; + $this->SetFont($bsf, '', '', false); + $cw = @file_get_contents(_MPDF_TTFONTDATAPATH.$font.'.cw.dat'); + $this->SetFont($prevFontFamily, $prevFontStyle, $prevFontSizePt, false); + } + if (!$cw) { continue; } + $l = 0; + foreach($u AS $char) { + if ($char == 173 || $this->_charDefined($cw,$char) || ($char>1536 && $char<1791) || ($char>2304 && $char<3455 )) { + $l++; + } + else { + if ($l==0 && $bsfctr == (count($this->backupSubsFont)-1)) { // Not found even in last backup font + $cont = mb_substr($writehtml_e, $start+1); + $writehtml_e = mb_substr($writehtml_e, 0, $start+1, 'UTF-8'); + array_splice($writehtml_a, $writehtml_i+1, 0, array('', $cont)); + $this->subPos = $writehtml_i+1; + return 2; + } + else { break; } + } + } + if ($l > 0) { + $patt = mb_substr($writehtml_e, $start, $l, 'UTF-8'); + if (preg_match("/(.*?)(".preg_quote($patt,'/').")(.*)/u", $writehtml_e, $m)) { + $writehtml_e = $m[1]; + array_splice($writehtml_a, $writehtml_i+1, 0, array('span style="font-family: '.$font.'"', $m[2], '/span', $m[3])); + $this->subPos = $writehtml_i+3; + return 4; + } + } + } + + unset($cw); + return 0; +} + + +function SubstituteCharsMB(&$writehtml_a, &$writehtml_i, &$writehtml_e) { + $cw = &$this->CurrentFont['cw']; + $unicode = $this->UTF8StringToArray($writehtml_e, false); + $start = -1; + $end = 0; + $flag = 0; + $ftype = ''; + $u = array(); + foreach($unicode AS $c => $char) { + if (($flag == 0 || $flag==2) && (!$this->_charDefined($cw,$char) || ($flag==2 && $char==32)) && $this->checkSIP && $char > 131071) { // Unicode Plane 2 (SIP) + if (in_array($this->FontFamily ,$this->available_CJK_fonts)) { return 0; } + if ($flag==0) { $start=$c; } + $flag=2; + $u[] = $char; + } + //else if (($flag == 0 || $flag==1) && $char != 173 && !$this->_charDefined($cw,$char) && ($char<1423 || ($char>3583 && $char < 11263))) { + else if (($flag == 0 || $flag==1) && $char != 173 && (!$this->_charDefined($cw,$char) || ($flag==1 && $char==32)) && ($char<1536 || ($char>1791 && $char < 2304) || $char>3455)) { + if ($flag==0) { $start=$c; } + $flag=1; + $u[] = $char; + } + else if ($flag>0) { $end=$c-1; break; } + } + if ($flag>0 && !$end) { $end=count($unicode)-1; } + if ($start==-1) { return 0; } + if ($flag == 2) { // SIP + // Check if current CJK font has a ext-B related font + if (isset($this->CurrentFont['sipext']) && $this->CurrentFont['sipext']) { + $font = $this->CurrentFont['sipext']; + unset($cw); + $cw = ''; + if (isset($this->fonts[$font])) { $cw = &$this->fonts[$font]['cw']; } + else if (file_exists(_MPDF_TTFONTDATAPATH.$font.'.cw.dat')) { $cw = @file_get_contents(_MPDF_TTFONTDATAPATH.$font.'.cw.dat'); } + else { + $prevFontFamily = $this->FontFamily; + $prevFontStyle = $this->currentfontstyle; + $prevFontSizePt = $this->FontSizePt; + $this->SetFont($font, '', '', false); + $cw = @file_get_contents(_MPDF_TTFONTDATAPATH.$font.'.cw.dat'); + $this->SetFont($prevFontFamily, $prevFontStyle, $prevFontSizePt, false); + } + if (!$cw) { return 0; } + $l = 0; + foreach($u AS $char) { + if ($this->_charDefined($cw,$char) || $char > 131071) { + $l++; + } + else { break; } + } + if ($l > 0) { + $patt = mb_substr($writehtml_e, $start, $l); + if (preg_match("/(.*?)(".preg_quote($patt,'/').")(.*)/u", $writehtml_e, $m)) { + $writehtml_e = $m[1]; + array_splice($writehtml_a, $writehtml_i+1, 0, array('span style="font-family: '.$font.'"', $m[2], '/span', $m[3])); + $this->subPos = $writehtml_i+3; + return 4; + } + } + } + // Check Backup SIP font (defined in config_fonts.php) + if (isset($this->backupSIPFont) && $this->backupSIPFont) { + if ($this->currentfontfamily != $this->backupSIPFont) { $font = $this->backupSIPFont; } + else { unset($cw); return 0; } + unset($cw); + $cw = ''; + if (isset($this->fonts[$font])) { $cw = &$this->fonts[$font]['cw']; } + else if (file_exists(_MPDF_TTFONTDATAPATH.$font.'.cw.dat')) { $cw = @file_get_contents(_MPDF_TTFONTDATAPATH.$font.'.cw.dat'); } + else { + $prevFontFamily = $this->FontFamily; + $prevFontStyle = $this->currentfontstyle; + $prevFontSizePt = $this->FontSizePt; + $this->SetFont($this->backupSIPFont, '', '', false); + $cw = @file_get_contents(_MPDF_TTFONTDATAPATH.$font.'.cw.dat'); + $this->SetFont($prevFontFamily, $prevFontStyle, $prevFontSizePt, false); + } + if (!$cw) { return 0; } + $l = 0; + foreach($u AS $char) { + if ($this->_charDefined($cw,$char) || $char > 131071) { + $l++; + } + else { break; } + } + if ($l > 0) { + $patt = mb_substr($writehtml_e, $start, $l); + if (preg_match("/(.*?)(".preg_quote($patt,'/').")(.*)/u", $writehtml_e, $m)) { + $writehtml_e = $m[1]; + array_splice($writehtml_a, $writehtml_i+1, 0, array('span style="font-family: '.$font.'"', $m[2], '/span', $m[3])); + $this->subPos = $writehtml_i+3; + return 4; + } + } + } + return 0; + } + + + // FIRST TRY CORE FONTS + if (!$this->PDFA && !$this->PDFX) { + $repl = array(); + if (!$this->subArrMB) { + include(_MPDF_PATH.'includes/subs_core.php'); + $this->subArrMB['a'] = $aarr; + $this->subArrMB['s'] = $sarr; + $this->subArrMB['z'] = $zarr; + } + if (isset($this->subArrMB['a'][$u[0]])) { + $font = 'tta'; $ftype = 'C'; + foreach($u AS $char) { + if ($this->subArrMB['a'][$char]) { $repl[] = $this->subArrMB['a'][$char]; } + else { break; } + } + } + else if (isset($this->subArrMB['z'][$u[0]])) { + $font = 'ttz'; $ftype = 'C'; + foreach($u AS $char) { + if ($this->subArrMB['z'][$char]) { $repl[] = $this->subArrMB['z'][$char]; } + else { break; } + } + } + else if (isset($this->subArrMB['s'][$u[0]])) { + $font = 'tts'; $ftype = 'C'; + foreach($u AS $char) { + if ($this->subArrMB['s'][$char]) { $repl[] = $this->subArrMB['s'][$char]; } + else { break; } + } + } + if ($ftype=='C') { + $patt = mb_substr($writehtml_e, $start, count($repl)); + if (preg_match("/(.*?)(".preg_quote($patt,'/').")(.*)/u", $writehtml_e, $m)) { + $writehtml_e = $m[1]; + array_splice($writehtml_a, $writehtml_i+1, 0, array($font, implode('|', $repl), '/'.$font, $m[3])); // e.g. <tts> + $this->subPos = $writehtml_i+3; + return 4; + } + return 0; + } + } + + // FIND IN DEFAULT FONT - removed mPDF 5.0 + + // LASTLY TRY IN BACKUP SUBS FONT + if (!is_array($this->backupSubsFont)) { $this->backupSubsFont = array("$this->backupSubsFont"); } + foreach($this->backupSubsFont AS $bsfctr=>$bsf) { + if ($this->currentfontfamily != $bsf) { $font = $bsf; } + else { continue; } + unset($cw); + $cw = ''; + if (isset($this->fonts[$font])) { $cw = &$this->fonts[$font]['cw']; } + else if (file_exists(_MPDF_TTFONTDATAPATH.$font.'.cw.dat')) { $cw = @file_get_contents(_MPDF_TTFONTDATAPATH.$font.'.cw.dat'); } + else { + $prevFontFamily = $this->FontFamily; + $prevFontStyle = $this->currentfontstyle; + $prevFontSizePt = $this->FontSizePt; + $this->SetFont($bsf, '', '', false); + $cw = @file_get_contents(_MPDF_TTFONTDATAPATH.$font.'.cw.dat'); + $this->SetFont($prevFontFamily, $prevFontStyle, $prevFontSizePt, false); + } + if (!$cw) { continue; } + $l = 0; + foreach($u AS $char) { + if ($char == 173 || $this->_charDefined($cw,$char) || ($char>1536 && $char<1791) || ($char>2304 && $char<3455 )) { // Arabic and Indic + $l++; + } + else { + if ($l==0 && $bsfctr == (count($this->backupSubsFont)-1)) { // Not found even in last backup font + $cont = mb_substr($writehtml_e, $start+1); + $writehtml_e = mb_substr($writehtml_e, 0, $start+1); + array_splice($writehtml_a, $writehtml_i+1, 0, array('', $cont)); + $this->subPos = $writehtml_i+1; + return 2; + } + else { break; } + } + } + if ($l > 0) { + $patt = mb_substr($writehtml_e, $start, $l); + if (preg_match("/(.*?)(".preg_quote($patt,'/').")(.*)/u", $writehtml_e, $m)) { + $writehtml_e = $m[1]; + array_splice($writehtml_a, $writehtml_i+1, 0, array('span style="font-family: '.$font.'"', $m[2], '/span', $m[3])); + $this->subPos = $writehtml_i+3; + return 4; + } + } + } + + unset($cw); + return 0; +} + + +function setHiEntitySubstitutions() { + $entarr = array ( + 'nbsp' => '160', 'iexcl' => '161', 'cent' => '162', 'pound' => '163', 'curren' => '164', 'yen' => '165', 'brvbar' => '166', 'sect' => '167', + 'uml' => '168', 'copy' => '169', 'ordf' => '170', 'laquo' => '171', 'not' => '172', 'shy' => '173', 'reg' => '174', 'macr' => '175', + 'deg' => '176', 'plusmn' => '177', 'sup2' => '178', 'sup3' => '179', 'acute' => '180', 'micro' => '181', 'para' => '182', 'middot' => '183', + 'cedil' => '184', 'sup1' => '185', 'ordm' => '186', 'raquo' => '187', 'frac14' => '188', 'frac12' => '189', 'frac34' => '190', + 'iquest' => '191', 'Agrave' => '192', 'Aacute' => '193', 'Acirc' => '194', 'Atilde' => '195', 'Auml' => '196', 'Aring' => '197', + 'AElig' => '198', 'Ccedil' => '199', 'Egrave' => '200', 'Eacute' => '201', 'Ecirc' => '202', 'Euml' => '203', 'Igrave' => '204', + 'Iacute' => '205', 'Icirc' => '206', 'Iuml' => '207', 'ETH' => '208', 'Ntilde' => '209', 'Ograve' => '210', 'Oacute' => '211', + 'Ocirc' => '212', 'Otilde' => '213', 'Ouml' => '214', 'times' => '215', 'Oslash' => '216', 'Ugrave' => '217', 'Uacute' => '218', + 'Ucirc' => '219', 'Uuml' => '220', 'Yacute' => '221', 'THORN' => '222', 'szlig' => '223', 'agrave' => '224', 'aacute' => '225', + 'acirc' => '226', 'atilde' => '227', 'auml' => '228', 'aring' => '229', 'aelig' => '230', 'ccedil' => '231', 'egrave' => '232', + 'eacute' => '233', 'ecirc' => '234', 'euml' => '235', 'igrave' => '236', 'iacute' => '237', 'icirc' => '238', 'iuml' => '239', + 'eth' => '240', 'ntilde' => '241', 'ograve' => '242', 'oacute' => '243', 'ocirc' => '244', 'otilde' => '245', 'ouml' => '246', + 'divide' => '247', 'oslash' => '248', 'ugrave' => '249', 'uacute' => '250', 'ucirc' => '251', 'uuml' => '252', 'yacute' => '253', + 'thorn' => '254', 'yuml' => '255', 'OElig' => '338', 'oelig' => '339', 'Scaron' => '352', 'scaron' => '353', 'Yuml' => '376', + 'fnof' => '402', 'circ' => '710', 'tilde' => '732', 'Alpha' => '913', 'Beta' => '914', 'Gamma' => '915', 'Delta' => '916', + 'Epsilon' => '917', 'Zeta' => '918', 'Eta' => '919', 'Theta' => '920', 'Iota' => '921', 'Kappa' => '922', 'Lambda' => '923', + 'Mu' => '924', 'Nu' => '925', 'Xi' => '926', 'Omicron' => '927', 'Pi' => '928', 'Rho' => '929', 'Sigma' => '931', 'Tau' => '932', + 'Upsilon' => '933', 'Phi' => '934', 'Chi' => '935', 'Psi' => '936', 'Omega' => '937', 'alpha' => '945', 'beta' => '946', 'gamma' => '947', + 'delta' => '948', 'epsilon' => '949', 'zeta' => '950', 'eta' => '951', 'theta' => '952', 'iota' => '953', 'kappa' => '954', + 'lambda' => '955', 'mu' => '956', 'nu' => '957', 'xi' => '958', 'omicron' => '959', 'pi' => '960', 'rho' => '961', 'sigmaf' => '962', + 'sigma' => '963', 'tau' => '964', 'upsilon' => '965', 'phi' => '966', 'chi' => '967', 'psi' => '968', 'omega' => '969', + 'thetasym' => '977', 'upsih' => '978', 'piv' => '982', 'ensp' => '8194', 'emsp' => '8195', 'thinsp' => '8201', 'zwnj' => '8204', + 'zwj' => '8205', 'lrm' => '8206', 'rlm' => '8207', 'ndash' => '8211', 'mdash' => '8212', 'lsquo' => '8216', 'rsquo' => '8217', + 'sbquo' => '8218', 'ldquo' => '8220', 'rdquo' => '8221', 'bdquo' => '8222', 'dagger' => '8224', 'Dagger' => '8225', 'bull' => '8226', + 'hellip' => '8230', 'permil' => '8240', 'prime' => '8242', 'Prime' => '8243', 'lsaquo' => '8249', 'rsaquo' => '8250', 'oline' => '8254', + 'frasl' => '8260', 'euro' => '8364', 'image' => '8465', 'weierp' => '8472', 'real' => '8476', 'trade' => '8482', 'alefsym' => '8501', + 'larr' => '8592', 'uarr' => '8593', 'rarr' => '8594', 'darr' => '8595', 'harr' => '8596', 'crarr' => '8629', 'lArr' => '8656', + 'uArr' => '8657', 'rArr' => '8658', 'dArr' => '8659', 'hArr' => '8660', 'forall' => '8704', 'part' => '8706', 'exist' => '8707', + 'empty' => '8709', 'nabla' => '8711', 'isin' => '8712', 'notin' => '8713', 'ni' => '8715', 'prod' => '8719', 'sum' => '8721', + 'minus' => '8722', 'lowast' => '8727', 'radic' => '8730', 'prop' => '8733', 'infin' => '8734', 'ang' => '8736', 'and' => '8743', + 'or' => '8744', 'cap' => '8745', 'cup' => '8746', 'int' => '8747', 'there4' => '8756', 'sim' => '8764', 'cong' => '8773', + 'asymp' => '8776', 'ne' => '8800', 'equiv' => '8801', 'le' => '8804', 'ge' => '8805', 'sub' => '8834', 'sup' => '8835', 'nsub' => '8836', + 'sube' => '8838', 'supe' => '8839', 'oplus' => '8853', 'otimes' => '8855', 'perp' => '8869', 'sdot' => '8901', 'lceil' => '8968', + 'rceil' => '8969', 'lfloor' => '8970', 'rfloor' => '8971', 'lang' => '9001', 'rang' => '9002', 'loz' => '9674', 'spades' => '9824', + 'clubs' => '9827', 'hearts' => '9829', 'diams' => '9830', + ); + foreach($entarr AS $key => $val) { + $this->entsearch[] = '&'.$key.';'; + $this->entsubstitute[] = code2utf($val); + } +} + +function SubstituteHiEntities($html) { + // converts html_entities > ASCII 127 to unicode + // Leaves in particular < to distinguish from tag marker + if (count($this->entsearch)) { + $html = str_replace($this->entsearch,$this->entsubstitute,$html); + } + return $html; +} + + +// Edited v1.2 Pass by reference; option to continue if invalid UTF-8 chars +function is_utf8(&$string) { + if ($string === mb_convert_encoding(mb_convert_encoding($string, "UTF-32", "UTF-8"), "UTF-8", "UTF-32")) { + return true; + } + else { + if ($this->ignore_invalid_utf8) { + $string = mb_convert_encoding(mb_convert_encoding($string, "UTF-32", "UTF-8"), "UTF-8", "UTF-32") ; + return true; + } + else { + return false; + } + } +} + + +function purify_utf8($html,$lo=true) { + // For HTML + // Checks string is valid UTF-8 encoded + // converts html_entities > ASCII 127 to UTF-8 + // Only exception - leaves low ASCII entities e.g. < & etc. + // Leaves in particular < to distinguish from tag marker + if (!$this->is_utf8($html)) { + $e = new Exception(); + print $e->getTraceAsString(); + echo "<p><b>HTML contains invalid UTF-8 character(s)</b></p>"; + while (mb_convert_encoding(mb_convert_encoding($html, "UTF-32", "UTF-8"), "UTF-8", "UTF-32") != $html) { + $a = iconv('UTF-8', 'UTF-8', $html); + echo ($a); + $pos = $start = strlen($a); + $err = ''; + while ( ord(substr($html,$pos,1)) > 128 ) { + $err .= '[[#'.ord(substr($html,$pos,1)).']]'; + $pos++; + } + echo '<span style="color:red; font-weight:bold">'.$err.'</span>'; + $html = substr($html, $pos); + } + echo $html; + $this->Error(""); + } + $html = preg_replace("/\r/", "", $html ); + + // converts html_entities > ASCII 127 to UTF-8 + // Leaves in particular < to distinguish from tag marker + $html = $this->SubstituteHiEntities($html); + + // converts all &#nnn; or &#xHHH; to UTF-8 multibyte + // If $lo==true then includes ASCII < 128 + $html = strcode2utf($html,$lo); + return ($html); +} + +function purify_utf8_text($txt) { + // For TEXT + // Make sure UTF-8 string of characters + if ($txt === null) $txt = ''; + if (!$this->is_utf8($txt)) { + $e = new Exception(); + print $e->getTraceAsString(); + $this->Error("Text contains invalid UTF-8 character(s)"); } + + $txt = preg_replace("/\r/", "", $txt ); + + return ($txt); +} +function all_entities_to_utf8($txt) { + // converts txt_entities > ASCII 127 to UTF-8 + // Leaves in particular < to distinguish from tag marker + $txt = $this->SubstituteHiEntities($txt); + + // converts all &#nnn; or &#xHHH; to UTF-8 multibyte + $txt = strcode2utf($txt); + + $txt = $this->lesser_entity_decode($txt); + return ($txt); +} + + +// ==================================================== +/*-- BARCODES --*/ +// UPC/EAN barcode +// EAN13, EAN8, UPCA, UPCE, ISBN, ISSN +// Accepts 12 or 13 digits with or without - hyphens +function WriteBarcode($code, $showtext=1, $x='', $y='', $size=1, $border=0, $paddingL=1, $paddingR=1, $paddingT=2, $paddingB=2, $height=1, $bgcol=false, $col=false, $btype='ISBN', $supplement='0', $supplement_code='', $k=1) { + if (empty($code)) { + return; + } + $codestr = $code; + $code = preg_replace('/\-/','',$code); + + if (!class_exists('PDFBarcode', false)) { + include(_MPDF_PATH.'classes/barcode.php'); + } + $this->barcode = new PDFBarcode(); + if ($btype == 'ISSN' || $btype == 'ISBN') { + $arrcode = $this->barcode->getBarcodeArray($code, 'EAN13'); + } + else { $arrcode = $this->barcode->getBarcodeArray($code, $btype); } + + if ($arrcode === false) { $this->Error('Error in barcode string: '.$codestr); } + if((($btype=='EAN13' || $btype=='ISBN' || $btype=='ISSN') && strlen($code) == 12) || ($btype=='UPCA' && strlen($code) == 11) + || ($btype=='UPCE' && strlen($code) == 11) || ($btype=='EAN8' && strlen($code) == 7)) { + $code .= $arrcode['checkdigit']; + if (stristr($codestr,'-')) { $codestr .= '-' . $arrcode['checkdigit']; } + else { $codestr .= $arrcode['checkdigit']; } + } + if ($btype == 'ISBN') { $codestr = 'ISBN '.$codestr; } + if ($btype == 'ISSN') { $codestr = 'ISSN '.$codestr; } + + if (empty($x)) { + $x = $this->x; + } + if (empty($y)) { + $y = $this->y; + } + // set foreground color + $prevDrawColor = $this->DrawColor; + $prevTextColor = $this->TextColor; + $prevFillColor = $this->FillColor; + $lw = $this->LineWidth; + $this->SetLineWidth(0.01); + + $size /= $k; // in case resized in a table + + $xres = $arrcode['nom-X'] * $size; + $llm = $arrcode['lightmL'] * $arrcode['nom-X'] * $size; // Left Light margin + $rlm = $arrcode['lightmR'] * $arrcode['nom-X'] * $size; // Right Light margin + + $bcw = ($arrcode["maxw"] * $xres); // Barcode width = Should always be 31.35mm * $size + + $fbw = $bcw + $llm + $rlm; // Full barcode width incl. light margins + $ow = $fbw + $paddingL + $paddingR; // Full overall width incl. user-defined padding + + $fbwi = $fbw - 2; // Full barcode width incl. light margins - 2mm - for isbn string + + // cf. http://www.gs1uk.org/downloads/bar_code/Bar coding getting it right.pdf + $num_height = 3 * $size; // Height of numerals + $fbh = $arrcode['nom-H'] * $size * $height; // Full barcode height incl. numerals + $bch = $fbh - (1.5 * $size); // Barcode height of bars (3mm for numerals) + + if (($btype=='EAN13' && $showtext) || $btype == 'ISSN' || $btype == 'ISBN') { // Add height for ISBN string + margin from top of bars + $tisbnm = 1.5 * $size; // Top margin between isbn (if shown) & bars + $codestr_fontsize = 2.1 * $size; + $paddingT += $codestr_fontsize + $tisbnm ; + } + $oh = $fbh + $paddingT + $paddingB; // Full overall height incl. user-defined padding + + // PRINT border background color + $xpos = $x; + $ypos = $y; + if ($col) { + $this->SetDColor($col); + $this->SetTColor($col); + } + else { + $this->SetDColor($this->ConvertColor(0)); + $this->SetTColor($this->ConvertColor(0)); + } + if ($bgcol) { + $this->SetFColor($bgcol); + } + else { $this->SetFColor($this->ConvertColor(255)); } + if (!$bgcol && !$col) { // fn. called directly - not via HTML + if ($border) { $fillb = 'DF'; } else { $fillb = 'F'; } + $this->Rect($xpos, $ypos, $ow, $oh, $fillb); + } + + + // PRINT BARS + $xpos = $x + $paddingL + $llm ; + $ypos = $y + $paddingT; + if ($col) { $this->SetFColor($col); } + else { $this->SetFColor($this->ConvertColor(0)); } + if ($arrcode !== false) { + foreach ($arrcode["bcode"] AS $v) { + $bw = ($v["w"] * $xres); + if ($v["t"]) { + // draw a vertical bar + $this->Rect($xpos, $ypos, $bw, $bch, 'F'); + } + $xpos += $bw; + } + } + + + // print text + $prevFontFamily = $this->FontFamily; + $prevFontStyle = $this->FontStyle; + $prevFontSizePt = $this->FontSizePt; + + // ISBN string + if (($btype=='EAN13' && $showtext) || $btype=='ISBN' || $btype=='ISSN') { + if ($this->onlyCoreFonts) { + $this->SetFont('chelvetica'); + } + else { + $this->SetFont('sans'); + } + + if ($bgcol) { $this->SetFColor($bgcol); } + else { $this->SetFColor($this->ConvertColor(255)); } + $this->x = $x + $paddingL + 1; // 1mm left margin (cf. $fbwi above) + // max width is $fbwi + $loop = 0; + while ( $loop == 0 ) { + $this->SetFontSize($codestr_fontsize*1.4*_MPDFK, false); // don't write + $sz = $this->GetStringWidth( $codestr ); + if ($sz > $fbwi) + $codestr_fontsize -= 0.1; + else + $loop ++; + } + $this->SetFont('','',$codestr_fontsize*1.4*_MPDFK, true, true); // * 1.4 because font height is only 7/10 of given mm + // WORD SPACING + if ($fbwi > $sz) { + $xtra = $fbwi - $sz; + $charspacing = $xtra / (strlen($codestr)-1); + if ($charspacing) { $this->_out(sprintf('BT %.3F Tc ET',$charspacing*_MPDFK)); } + } + $this->y = $y + $paddingT - ($codestr_fontsize ) - $tisbnm ; + $this->Cell($fbw , $codestr_fontsize, $codestr); + if ($charspacing) { $this->_out('BT 0 Tc ET'); } + } + + + // Bottom NUMERALS + if ($this->onlyCoreFonts) { + $this->SetFont('mono'); + } + else { + if (in_array('ocrb',$this->available_unifonts)) { $this->SetFont('ocrb'); } + else { $this->SetFont('mono'); } + } + if (isset($this->CurrentFont['desc']['CapHeight'])) { $fh = (1000/$this->CurrentFont['desc']['CapHeight']); } + else if (isset($this->CurrentFont['desc']['Ascent'])) { $fh = (1000/$this->CurrentFont['desc']['Ascent']); } + else { $fh = 1.2; } + + $charRO = ''; + if ($btype=='EAN13' || $btype=='ISBN' || $btype=='ISSN') { + $outerfontsize = 3; // Inner fontsize = 3 + $outerp = $xres * 4; + $innerp = $xres * 2.5; + $textw = ($bcw*0.5) - $outerp - $innerp; + $chars = 6; // number of numerals in each half + $charLO = substr($code,0,1); // Left Outer + $charLI = substr($code,1,6); // Left Inner + $charRI = substr($code,7,6); // Right Inner + if (!$supplement) $charRO = '>'; // Right Outer + } + else if ($btype=='UPCA') { + $outerfontsize = 2.3; // Inner fontsize = 3 + $outerp = $xres * 10; + $innerp = $xres * 2.5; + $textw = ($bcw*0.5) - $outerp - $innerp; + $chars = 5; + $charLO = substr($code,0,1); // Left Outer + $charLI = substr($code,1,5); // Left Inner + $charRI = substr($code,6,5); // Right Inner + $charRO = substr($code,11,1); // Right Outer + } + else if ($btype=='UPCE') { + $outerfontsize = 2.3; // Inner fontsize = 3 + $outerp = $xres * 4; + $innerp = 0; + $textw = ($bcw*0.5) - $outerp - $innerp; + $chars = 3; + $upce_code = $arrcode['code']; + $charLO = substr($code,0,1); // Left Outer + $charLI = substr($upce_code,0,3); // Left Inner + $charRI = substr($upce_code,3,3); // Right Inner + $charRO = substr($code,11,1); // Right Outer + } + else if ($btype=='EAN8') { + $outerfontsize = 3; // Inner fontsize = 3 + $outerp = $xres * 4; + $innerp = $xres * 2.5; + $textw = ($bcw*0.5) - $outerp - $innerp; + $chars = 4; + $charLO = '<'; // Left Outer + $charLI = substr($code,0,4); // Left Inner + $charRI = substr($code,4,4); // Right Inner + if (!$supplement) $charRO = '>'; // Right Outer + } + + $this->SetFontSize(($outerfontsize/3)*3*$fh*$size*_MPDFK); // 3mm numerals (FontSize is larger to account for space above/below characters) + + if (!$this->usingCoreFont) { $cw = $this->_getCharWidth($this->CurrentFont['cw'],32)*3*$fh*$size/1000; } // character width at 3mm + else { $cw = $this->_getCharWidth($this->CurrentFont['cw'],48)*3*$fh*$size/1000; } // 48 == char "0" + + // Outer left character + $y_text = $y + $paddingT + $bch - ($num_height/2); + $y_text_outer = $y + $paddingT + $bch - ($num_height*($outerfontsize/3)/2); + + $this->x = $x + $paddingL - ($cw*($outerfontsize/3)*0.1); // 0.1 is correction as char does not fill full width; + $this->y = $y_text_outer; + $this->Cell($cw, $num_height, $charLO ); + + // WORD SPACING for inner chars + $xtra = $textw - ($cw*$chars); + $charspacing = $xtra / ($chars-1); + if ($charspacing) { $this->_out(sprintf('BT %.3F Tc ET',$charspacing*_MPDFK)); } + + if ($bgcol) { $this->SetFColor($bgcol); } + else { $this->SetFColor($this->ConvertColor(255)); } + + $this->SetFontSize(3*$fh*$size*_MPDFK); // 3mm numerals (FontSize is larger to account for space above/below characters) + + // Inner left half characters + $this->x = $x + $paddingL + $llm + $outerp; + $this->y = $y_text; + $this->Cell($textw, $num_height, $charLI , 0, 0, '', 1); + + // Inner right half characters + $this->x = $x + $paddingL + $llm + ($bcw*0.5) + $innerp; + $this->y = $y_text; + $this->Cell($textw, $num_height, $charRI , 0, 0, '', 1); + + if ($charspacing) { $this->_out('BT 0 Tc ET'); } + + // Outer Right character + $this->SetFontSize(($outerfontsize/3)*3*$fh*$size*_MPDFK); // 3mm numerals (FontSize is larger to account for space above/below characters) + + $this->x = $x + $paddingL + $llm + $bcw + $rlm - ($cw*($outerfontsize/3)*0.9); // 0.9 is correction as char does not fill full width + $this->y = $y_text_outer; + $this->Cell($cw*($outerfontsize/3), $num_height, $charRO , 0, 0, 'R'); + + if ($supplement) { // EAN-2 or -5 Supplement + // PRINT BARS + $supparrcode = $this->barcode->getBarcodeArray($supplement_code, 'EAN'.$supplement); + if ($supparrcode === false) { $this->Error('Error in barcode string (supplement): '.$codestr.' '.$supplement_code); } + if(strlen($supplement_code) != $supplement) { + $this->Error('Barcode supplement incorrect: '.$supplement_code); + } + $llm = $fbw - (($arrcode['lightmR'] - $supparrcode['sepM']) * $arrcode['nom-X'] * $size); // Left Light margin + $rlm = $arrcode['lightmR'] * $arrcode['nom-X'] * $size; // Right Light margin + + $bcw = ($supparrcode["maxw"] * $xres); // Barcode width = Should always be 31.35mm * $size + + $fbw = $bcw + $llm + $rlm; // Full barcode width incl. light margins + $ow = $fbw + $paddingL + $paddingR; // Full overall width incl. user-defined padding + $bch = $fbh - (1.5 * $size) - ($num_height + 0.5); // Barcode height of bars (3mm for numerals) + + $xpos = $x + $paddingL + $llm ; + $ypos = $y + $paddingT + $num_height + 0.5; + if ($col) { $this->SetFColor($col); } + else { $this->SetFColor($this->ConvertColor(0)); } + if ($supparrcode !== false) { + foreach ($supparrcode["bcode"] AS $v) { + $bw = ($v["w"] * $xres); + if ($v["t"]) { + // draw a vertical bar + $this->Rect($xpos, $ypos, $bw, $bch, 'F'); + } + $xpos += $bw; + } + } + + // Characters + if ($bgcol) { $this->SetFColor($bgcol); } + else { $this->SetFColor($this->ConvertColor(255)); } + $this->SetFontSize(3*$fh*$size*_MPDFK); // 3mm numerals (FontSize is larger to account for space above/below characters) + $this->x = $x + $paddingL + $llm; + $this->y = $y + $paddingT; + $this->Cell($bcw, $num_height, $supplement_code, 0, 0, 'C'); + + // Outer Right character (light margin) + $this->SetFontSize(($outerfontsize/3)*3*$fh*$size*_MPDFK); // 3mm numerals (FontSize is larger to account for space above/below characters) + $this->x = $x + $paddingL + $llm + $bcw + $rlm - ($cw*0.9); // 0.9 is correction as char does not fill full width + $this->y = $y + $paddingT; + $this->Cell($cw*($outerfontsize/3), $num_height, '>', 0, 0, 'R'); + } + + + + // Restore ************** + $this->SetFont($prevFontFamily, $prevFontStyle, $prevFontSizePt); + $this->DrawColor = $prevDrawColor; + $this->TextColor = $prevTextColor; + $this->FillColor = $prevFillColor; + $this->SetLineWidth($lw); + $this->SetY($y); +} + + + +// ==================================================== +// POSTAL and OTHER barcodes +function WriteBarcode2($code, $x='', $y='', $size=1, $height=1, $bgcol=false, $col=false, $btype='IMB', $print_ratio='', $k=1) { + if (empty($code)) { return; } + if (!class_exists('PDFBarcode', false)) { + include(_MPDF_PATH.'classes/barcode.php'); + } + $this->barcode = new PDFBarcode(); + $arrcode = $this->barcode->getBarcodeArray($code, $btype, $print_ratio); + + if ($arrcode === false) { $this->Error('Error in barcode string: '.$code); } + if (empty($x)) { $x = $this->x; } + if (empty($y)) { $y = $this->y; } + $prevDrawColor = $this->DrawColor; + $prevTextColor = $this->TextColor; + $prevFillColor = $this->FillColor; + $lw = $this->LineWidth; + $this->SetLineWidth(0.01); + $size /= $k; // in case resized in a table + $xres = $arrcode['nom-X'] * $size; + + if ($btype == 'IMB' || $btype == 'RM4SCC' || $btype == 'KIX' || $btype == 'POSTNET' || $btype == 'PLANET') { + $llm = $arrcode['quietL'] / $k; // Left Quiet margin + $rlm = $arrcode['quietR'] / $k; // Right Quiet margin + $tlm = $blm = $arrcode['quietTB'] / $k; + $height=1; // Overrides + } + else if (in_array($btype, array('C128A','C128B','C128C','EAN128A','EAN128B','EAN128C','C39','C39+','C39E','C39E+','S25','S25+','I25','I25+','I25B','I25B+','C93','MSI','MSI+','CODABAR','CODE11'))) { + $llm = $arrcode['lightmL'] * $xres; // Left Quiet margin + $rlm = $arrcode['lightmR'] * $xres; // Right Quiet margin + $tlm = $blm = $arrcode['lightTB'] * $xres * $height; + } + + + $bcw = ($arrcode["maxw"] * $xres); + $fbw = $bcw + $llm + $rlm; // Full barcode width incl. light margins + + $bch = ($arrcode["nom-H"] * $size * $height); + $fbh = $bch + $tlm + $blm; // Full barcode height + + // PRINT border background color + $xpos = $x; + $ypos = $y; + if ($col) { + $this->SetDColor($col); + $this->SetTColor($col); + } + else { + $this->SetDColor($this->ConvertColor(0)); + $this->SetTColor($this->ConvertColor(0)); + } + if ($bgcol) { + $this->SetFColor($bgcol); + } + else { $this->SetFColor($this->ConvertColor(255)); } + + // PRINT BARS + if ($col) { $this->SetFColor($col); } + else { $this->SetFColor($this->ConvertColor(0)); } + $xpos = $x + $llm ; + + if ($arrcode !== false) { + foreach ($arrcode["bcode"] AS $v) { + $bw = ($v["w"] * $xres); + if ($v["t"]) { + $ypos = $y + $tlm + ($bch * $v['p'] / $arrcode['maxh']); + $this->Rect($xpos, $ypos, $bw, ($v['h'] * $bch / $arrcode['maxh']), 'F'); + } + $xpos += $bw; + } + } + + // PRINT BEARER BARS + if ($btype == 'I25B' || $btype == 'I25B+') { + $this->Rect($x, $y, $fbw, ($arrcode['lightTB'] * $xres * $height), 'F'); + $this->Rect($x, $y+$tlm+$bch, $fbw, ($arrcode['lightTB'] * $xres * $height), 'F'); + } + + // Restore ************** + $this->SetFont($prevFontFamily, $prevFontStyle, $prevFontSizePt); + $this->DrawColor = $prevDrawColor; + $this->TextColor = $prevTextColor; + $this->FillColor = $prevFillColor; + $this->SetLineWidth($lw); + $this->SetY($y); +} + +/*-- END BARCODES --*/ + +// ==================================================== +// ==================================================== + +function StartTransform($returnstring=false) { + if ($returnstring) { return('q'); } + else { $this->_out('q'); } +} +function StopTransform($returnstring=false) { + if ($returnstring) { return('Q'); } + else { $this->_out('Q'); } +} +function transformScale($s_x, $s_y, $x='', $y='', $returnstring=false) { + if ($x === '') { + $x=$this->x; + } + if ($y === '') { + $y=$this->y; + } + if (($s_x == 0) OR ($s_y == 0)) { + $this->Error('Please do not use values equal to zero for scaling'); + } + $y = ($this->h - $y) * _MPDFK; + $x *= _MPDFK; + //calculate elements of transformation matrix + $s_x /= 100; + $s_y /= 100; + $tm[0] = $s_x; + $tm[1] = 0; + $tm[2] = 0; + $tm[3] = $s_y; + $tm[4] = $x * (1 - $s_x); + $tm[5] = $y * (1 - $s_y); + //scale the coordinate system + if ($returnstring) { return($this->_transform($tm, true)); } + else { $this->_transform($tm); } +} +function transformTranslate($t_x, $t_y, $returnstring=false) { + //calculate elements of transformation matrix + $tm[0] = 1; + $tm[1] = 0; + $tm[2] = 0; + $tm[3] = 1; + $tm[4] = $t_x * _MPDFK; + $tm[5] = -$t_y * _MPDFK; + //translate the coordinate system + if ($returnstring) { return($this->_transform($tm, true)); } + else { $this->_transform($tm); } +} +function transformRotate($angle, $x='', $y='', $returnstring=false) { + if ($x === '') { + $x=$this->x; + } + if ($y === '') { + $y=$this->y; + } + $angle = -$angle; + $y = ($this->h - $y) * _MPDFK; + $x *= _MPDFK; + //calculate elements of transformation matrix + $tm[0] = cos(deg2rad($angle)); + $tm[1] = sin(deg2rad($angle)); + $tm[2] = -$tm[1]; + $tm[3] = $tm[0]; + $tm[4] = $x + $tm[1] * $y - $tm[0] * $x; + $tm[5] = $y - $tm[0] * $y - $tm[1] * $x; + //rotate the coordinate system around ($x,$y) + if ($returnstring) { return($this->_transform($tm, true)); } + else { $this->_transform($tm); } +} +function _transform($tm, $returnstring=false) { + if ($returnstring) { return(sprintf('%.4F %.4F %.4F %.4F %.4F %.4F cm', $tm[0], $tm[1], $tm[2], $tm[3], $tm[4], $tm[5])); } + else { $this->_out(sprintf('%.4F %.4F %.4F %.4F %.4F %.4F cm', $tm[0], $tm[1], $tm[2], $tm[3], $tm[4], $tm[5])); } +} + + + +/*-- INDIC --*/ +// INDIC ============================ +// This conversion can only be done when font is set +function ConvertIndic(&$str) { + if (preg_match('/^ind_([a-z]{2})_/',$this->currentfontfamily, $m)) { + if (!class_exists('indic', false)) { include(_MPDF_PATH.'classes/indic.php'); } + if (empty($this->indic)) { $this->indic = new indic($this); } + $earr = $this->UTF8StringToArray($str, false); + $str = $this->indic->substituteIndic($earr, $m[1], $this->currentfontfamily); + } +} +/*-- END INDIC --*/ + +// AUTOFONT ========================= +function AutoFont($html) { + if ($this->onlyCoreFonts) { return $html; } + $this->useLang = true; + if ($this->autoFontGroupSize == 1) { $extra = $this->pregASCIIchars1; } + else if ($this->autoFontGroupSize == 3) { $extra = $this->pregASCIIchars3; } + else { $extra = $this->pregASCIIchars2; } + $n = ''; + $a=preg_split('/<(.*?)>/ms',$html,-1,PREG_SPLIT_DELIM_CAPTURE); + foreach($a as $i => $e) { + if($i%2==0) { + $e = strcode2utf($e); + $e = $this->lesser_entity_decode($e); + + // Use U=FFF0 and U+FFF1 to mark start and end of span tags to prevent nesting occurring + // "\xef\xbf\xb0" ##lthtmltag## "\xef\xbf\xb1" ##gthtmltag## + +/*-- CJK-FONTS --*/ + if ($this->autoFontGroups & AUTOFONT_CJK) { + $e = preg_replace("/([".$this->pregCJKchars.$extra."]*[".$this->pregCJKchars."][".$this->pregCJKchars.$extra."]*)/ue", '$this->replaceCJK(stripslashes(\'\\1\'))', $e); + } +/*-- END CJK-FONTS --*/ + +/*-- RTL --*/ + if ($this->autoFontGroups & AUTOFONT_RTL) { + // HEBREW + $e = preg_replace("/([".$this->pregHEBchars .$extra."]*[".$this->pregHEBchars ."][".$this->pregHEBchars .$extra."]*)/u", "\xef\xbf\xb0span lang=\"he\"\xef\xbf\xb1\\1\xef\xbf\xb0/span\xef\xbf\xb1", $e); + // All Arabic + $e = preg_replace("/([".$this->pregARABICchars .$extra."]*[".$this->pregARABICchars ."][".$this->pregARABICchars .$extra."]*)/ue", '$this->replaceArabic(stripslashes(\'\\1\'))', $e); + } +/*-- END RTL --*/ + +/*-- INDIC --*/ + // INDIC + if ($this->autoFontGroups & AUTOFONT_INDIC) { + // Bengali + $e = preg_replace("/([".$this->pregBNchars .$this->pregINDextra."]*[".$this->pregBNchars ."][".$this->pregBNchars .$this->pregINDextra."]*)/u", "\xef\xbf\xb0span lang=\"bn\"\xef\xbf\xb1\\1\xef\xbf\xb0/span\xef\xbf\xb1", $e); + // Devanagari (= script for Hindi, Nepali + Sindhi) + $e = preg_replace("/([".$this->pregHIchars .$this->pregINDextra."]*[".$this->pregHIchars ."][".$this->pregHIchars .$this->pregINDextra."]*)/u", "\xef\xbf\xb0span lang=\"hi\"\xef\xbf\xb1\\1\xef\xbf\xb0/span\xef\xbf\xb1", $e); + // Gujarati + $e = preg_replace("/([".$this->pregGUchars .$this->pregINDextra."]*[".$this->pregGUchars ."][".$this->pregGUchars .$this->pregINDextra."]*)/u", "\xef\xbf\xb0span lang=\"gu\"\xef\xbf\xb1\\1\xef\xbf\xb0/span\xef\xbf\xb1", $e); + // Malayalam + $e = preg_replace("/([".$this->pregMLchars .$this->pregINDextra."]*[".$this->pregMLchars ."][".$this->pregMLchars .$this->pregINDextra."]*)/u", "\xef\xbf\xb0span lang=\"ml\"\xef\xbf\xb1\\1\xef\xbf\xb0/span\xef\xbf\xb1", $e); + // Kannada + $e = preg_replace("/([".$this->pregKNchars .$this->pregINDextra."]*[".$this->pregKNchars ."][".$this->pregKNchars .$this->pregINDextra."]*)/u", "\xef\xbf\xb0span lang=\"kn\"\xef\xbf\xb1\\1\xef\xbf\xb0/span\xef\xbf\xb1", $e); + // Oriya + $e = preg_replace("/([".$this->pregORchars .$this->pregINDextra."]*[".$this->pregORchars ."][".$this->pregORchars .$this->pregINDextra."]*)/u", "\xef\xbf\xb0span lang=\"or\"\xef\xbf\xb1\\1\xef\xbf\xb0/span\xef\xbf\xb1", $e); + // Punjabi ?= Gurmuhki + $e = preg_replace("/([".$this->pregPAchars .$this->pregINDextra."]*[".$this->pregPAchars ."][".$this->pregPAchars .$this->pregINDextra."]*)/u", "\xef\xbf\xb0span lang=\"pa\"\xef\xbf\xb1\\1\xef\xbf\xb0/span\xef\xbf\xb1", $e); + // Tamil + $e = preg_replace("/([".$this->pregTAchars .$this->pregINDextra."]*[".$this->pregTAchars ."][".$this->pregTAchars .$this->pregINDextra."]*)/u", "\xef\xbf\xb0span lang=\"ta\"\xef\xbf\xb1\\1\xef\xbf\xb0/span\xef\xbf\xb1", $e); + // Telugu + $e = preg_replace("/([".$this->pregTEchars .$this->pregINDextra."]*[".$this->pregTEchars ."][".$this->pregTEchars .$this->pregINDextra."]*)/u", "\xef\xbf\xb0span lang=\"te\"\xef\xbf\xb1\\1\xef\xbf\xb0/span\xef\xbf\xb1", $e); + } +/*-- END INDIC --*/ + + + if ($this->autoFontGroups & AUTOFONT_THAIVIET) { + // THAI + $e = preg_replace("/([\x{0E00}-\x{0E7F}".$extra."]*[\x{0E00}-\x{0E7F}][\x{0E00}-\x{0E7F}".$extra."]*)/u", "\xef\xbf\xb0span lang=\"th\"\xef\xbf\xb1\\1\xef\xbf\xb0/span\xef\xbf\xb1", $e); + // Vietnamese + $e = preg_replace("/([".$this->pregVIETchars .$this->pregVIETPluschars ."]*[".$this->pregVIETchars ."][".$this->pregVIETchars .$this->pregVIETPluschars ."]*)/u", "\xef\xbf\xb0span lang=\"vi\"\xef\xbf\xb1\\1\xef\xbf\xb0/span\xef\xbf\xb1", $e); + } + + $e = preg_replace('/[&]/','&',$e); + $e = preg_replace('/[<]/','<',$e); + $e = preg_replace('/[>]/','>',$e); + $e = preg_replace("/(\xef\xbf\xb0span lang=\"([a-z\-A-Z]{2,5})\"\xef\xbf\xb1)\s+/",' \\1',$e); + $e = preg_replace("/[ ]+(\xef\xbf\xb0\/span\xef\xbf\xb1)/",'\\1 ',$e); + + $e = preg_replace("/\xef\xbf\xb0span lang=\"([a-z\-A-Z]{2,5})\"\xef\xbf\xb1/","\xef\xbf\xb0span lang=\"\\1\" class=\"lang_\\1\"\xef\xbf\xb1",$e); + + $e = preg_replace("/\xef\xbf\xb0/",'<',$e); + $e = preg_replace("/\xef\xbf\xb1/",'>',$e); + + $a[$i] = $e; + } + else { + $a[$i] = '<'.$e.'>'; + } + } + $n = implode('',$a); + return $n; +} + + +/*-- CJK-FONTS --*/ +function replaceCJK($str) { + // Use U=FFF0 and U+FFF1 to mark start and end of span tags to prevent nesting occurring + // "\xef\xbf\xb0" ##lthtmltag## "\xef\xbf\xb1" ##gthtmltag## + if (preg_match("/[".$this->pregUHCchars."]/u", $str)) { + return "\xef\xbf\xb0span lang=\"ko\"\xef\xbf\xb1" . $str ."\xef\xbf\xb0/span\xef\xbf\xb1"; + } + else if (preg_match("/[".$this->pregSJISchars."]/u", $str)) { + return "\xef\xbf\xb0span lang=\"ja\"\xef\xbf\xb1" . $str ."\xef\xbf\xb0/span\xef\xbf\xb1"; + } + // if in Unicode Plane 2, probably HKCS (incl in BIG5) if not Japanese + else if (preg_match("/[\x{20000}-\x{2FFFF}]/u", $str)) { + return "\xef\xbf\xb0span lang=\"zh-HK\"\xef\xbf\xb1" . $str ."\xef\xbf\xb0/span\xef\xbf\xb1"; + } + else{ + return "\xef\xbf\xb0span lang=\"zh-CN\"\xef\xbf\xb1" . $str ."\xef\xbf\xb0/span\xef\xbf\xb1"; + } + return $str; +} +/*-- END CJK-FONTS --*/ + +/*-- RTL --*/ +function replaceArabic($str) { + // PASHTO, SINDHI, URDU, ARABIC, PERSIAN + $persian = "\x{067E}\x{0686}\x{0698}\x{06AF}"; + + $urdu = "\x{0679}\x{0688}\x{0691}\x{06BA}\x{06BE}\x{06C1}\x{06D2}"; + $pashto = "\x{067C}\x{0681}\x{0685}\x{0689}\x{0693}\x{0696}\x{069A}\x{06BC}\x{06D0}"; // ? and U+06AB, U+06CD + $sindhi = "\x{067A}\x{067B}\x{067D}\x{067F}\x{0680}\x{0684}\x{068D}\x{068A}\x{068F}\x{068C}\x{0687}\x{0683}\x{0699}\x{06AA}\x{06A6}\x{06BB}\x{06B1}\x{06B3}"; + // Use U=FFF0 and U+FFF1 to mark start and end of span tags to prevent nesting occurring + // "\xef\xbf\xb0" ##lthtmltag## "\xef\xbf\xb1" ##gthtmltag## + + if (preg_match("/[".$this->pregNonARABICchars ."]/u", $str) ) { + if (preg_match("/[".$sindhi ."]/u", $str) ) { + return "\xef\xbf\xb0span lang=\"sd\"\xef\xbf\xb1".$str."\xef\xbf\xb0/span\xef\xbf\xb1"; + } + else if (preg_match("/[".$urdu ."]/u", $str) ) { + return "\xef\xbf\xb0span lang=\"ur\"\xef\xbf\xb1".$str."\xef\xbf\xb0/span\xef\xbf\xb1"; + } + else if (preg_match("/[".$pashto ."]/u", $str) ) { + return "\xef\xbf\xb0span lang=\"ps\"\xef\xbf\xb1".$str."\xef\xbf\xb0/span\xef\xbf\xb1"; + } + else if (preg_match("/[".$persian ."]/u", $str) ) { + return "\xef\xbf\xb0span lang=\"fa\"\xef\xbf\xb1".$str."\xef\xbf\xb0/span\xef\xbf\xb1"; + } + else { + return "\xef\xbf\xb0span lang=\"ar\"\xef\xbf\xb1".$str."\xef\xbf\xb0/span\xef\xbf\xb1"; + } + } + if (preg_match("/[".$persian ."]/u", $str) ) { + return "\xef\xbf\xb0span lang=\"fa\"\xef\xbf\xb1".$str."\xef\xbf\xb0/span\xef\xbf\xb1"; + } + else { + return "\xef\xbf\xb0span lang=\"ar\"\xef\xbf\xb1".$str."\xef\xbf\xb0/span\xef\xbf\xb1"; + } + return $str; +} + +// ARABIC =========================== +// mPDF 5.4.08 +function InitArabic() { + + // JOIN TO FOLLOWING LETTER IN LOGICAL ORDER (i.e. AS INITIAL) + $this->arabPrevLink = ""; + // U+060c; U+061b; U+061f; U+0626; U+0628; + $this->arabPrevLink .= "\xd8\x8c\xd8\x9b\xd8\x9f\xd8\xa6\xd8\xa8"; + // U+062a; U+062b; U+062c; U+062d; U+062e; + $this->arabPrevLink .= "\xd8\xaa\xd8\xab\xd8\xac\xd8\xad\xd8\xae"; + // U+0633; U+0634; U+0635; U+0636; U+0637; U+0638; U+0639; U+063a; + $this->arabPrevLink .= "\xd8\xb3\xd8\xb4\xd8\xb5\xd8\xb6\xd8\xb7\xd8\xb8\xd8\xb9\xd8\xba"; + // U+0640; U+0641; U+0642; U+0643; U+0644; U+0645; U+0646; U+0647; U+0649; U+064a; + $this->arabPrevLink .= "\xd9\x80\xd9\x81\xd9\x82\xd9\x83\xd9\x84\xd9\x85\xd9\x86\xd9\x87\xd9\x89\xd9\x8a"; + // U+0678; U+0679; U+067a; U+067b; U+067c; U+067d; U+067e; U+067f; + $this->arabPrevLink .= "\xd9\xb8\xd9\xb9\xd9\xba\xd9\xbb\xd9\xbc\xd9\xbd\xd9\xbe\xd9\xbf"; + // U+0680; U+0681; U+0682; U+0683; U+0684; U+0685; U+0686; U+0687; + $this->arabPrevLink .= "\xda\x80\xda\x81\xda\x82\xda\x83\xda\x84\xda\x85\xda\x86\xda\x87"; + // U+069a; U+069b; U+069c; U+069d; U+069e; U+069f; + $this->arabPrevLink .= "\xda\x9a\xda\x9b\xda\x9c\xda\x9d\xda\x9e\xda\x9f"; + // U+06a0; U+06a1; U+06a2; U+06a3; U+06a4; U+06a5; U+06a6; U+06A7; U+06A8; + $this->arabPrevLink .= "\xda\xa0\xda\xa1\xda\xa2\xda\xa3\xda\xa4\xda\xa5\xda\xa6\xda\xa7\xda\xa8"; + // U+06a9; U+06aa; U+06ab; U+06ac; U+06ad; U+06ae; U+06af; + $this->arabPrevLink .= "\xda\xa9\xda\xaa\xda\xab\xda\xac\xda\xad\xda\xae\xda\xaf"; + // U+06b0; U+06b1; U+06b2; U+06b3; U+06b4; U+06b5; U+06b6; U+06b7; U+06b8; U+06b9; + $this->arabPrevLink .= "\xda\xb0\xda\xb1\xda\xb2\xda\xb3\xda\xb4\xda\xb5\xda\xb6\xda\xb7\xda\xb8\xda\xb9"; + // U+06ba; U+06bb; U+06bc; U+06be; U+06bf; + $this->arabPrevLink .= "\xda\xba\xda\xbb\xda\xbc\xda\xbe\xda\xbf"; + // U+06c1; U+06cc; U+06ce; U+06d0; U+06d1; + $this->arabPrevLink .= "\xdb\x81\xdb\x8c\xdb\x8e\xdb\x90\xdb\x91"; + + + + + // JOIN TO PREVIOUS LETTER IN LOGICAL ORDER (i.e. AS FINAL FORM) + $this->arabNextLink = ""; + // U+0622; U+0623; U+0624; U+0625; U+0626; U+0627; U+0628; U+0629; + $this->arabNextLink .= "\xd8\xa2\xd8\xa3\xd8\xa4\xd8\xa5\xd8\xa6\xd8\xa7\xd8\xa8\xd8\xa9"; + // U+062A; U+062B; U+062C; U+062D; U+062E; U+062F; + $this->arabNextLink .= "\xd8\xaa\xd8\xab\xd8\xac\xd8\xad\xd8\xae\xd8\xaf"; + // U+0630; U+0631; U+0632; U+0633; U+0634; U+0635; U+0636; U+0637; U+0638; U+0639; U+063A; + $this->arabNextLink .= "\xd8\xb0\xd8\xb1\xd8\xb2\xd8\xb3\xd8\xb4\xd8\xb5\xd8\xb6\xd8\xb7\xd8\xb8\xd8\xb9\xd8\xba"; + // U+0640; U+0641; U+0642; U+0643; U+0644; U+0645; U+0646; U+0647; U+0648; U+0649; U+064A; + $this->arabNextLink .= "\xd9\x80\xd9\x81\xd9\x82\xd9\x83\xd9\x84\xd9\x85\xd9\x86\xd9\x87\xd9\x88\xd9\x89\xd9\x8a"; + // U+0671; U+0672; U+0675; U+0676; U+0677; U+0678; U+0679; + $this->arabNextLink .= "\xd9\xb1\xd9\xb2\xd9\xb5\xd9\xb6\xd9\xb7\xd9\xb8\xd9\xb9"; + // U+067A; U+067B; U+067C; U+067D; U+067E; U+067F; + $this->arabNextLink .= "\xd9\xba\xd9\xbb\xd9\xbc\xd9\xbd\xd9\xbe\xd9\xbf"; + // U+0680; U+0681; U+0682; U+0683; U+0684; U+0685; U+0686; U+0687; U+0688; U+0689; + $this->arabNextLink .= "\xda\x80\xda\x81\xda\x82\xda\x83\xda\x84\xda\x85\xda\x86\xda\x87\xda\x88\xda\x89"; + // U+068A; U+068B; U+068C; U+068D; U+068F;U+068F; + $this->arabNextLink .= "\xda\x8a\xda\x8b\xda\x8c\xda\x8d\xda\x8e\xda\x8f"; + // U+0690; U+0691; U+0692; U+0693; U+0694; U+0695; U+0696; U+0697; U+0698; U+0699; + $this->arabNextLink .= "\xda\x90\xda\x91\xda\x92\xda\x93\xda\x94\xda\x95\xda\x96\xda\x97\xda\x98\xda\x99"; + // U+069A; U+069B; U+069C; U+069D; U+069E; U+069F; + $this->arabNextLink .= "\xda\x9a\xda\x9b\xda\x9c\xda\x9d\xda\x9e\xda\x9f"; + // U+06A0; U+06A1; U+06A2; U+06A3; U+06A4; U+06A5; U+06A6; U+06A7; U+06A8; U+06A9; + $this->arabNextLink .= "\xda\xa0\xda\xa1\xda\xa2\xda\xa3\xda\xa4\xda\xa5\xda\xa6\xda\xa7\xda\xa8\xda\xa9"; + // U+06AA; U+06AB; U+06AC; U+06AD; U+06AE; U+06AF; + $this->arabNextLink .= "\xda\xaa\xda\xab\xda\xac\xda\xad\xda\xae\xda\xaf"; + // U+06B0; U+06B1; U+06B2; U+06B3; U+06B4; U+06B5; U+06B6; U+06B7; U+06B8; U+06B9; + $this->arabNextLink .= "\xda\xb0\xda\xb1\xda\xb2\xda\xb3\xda\xb4\xda\xb5\xda\xb6\xda\xb7\xda\xb8\xda\xb9"; + // U+06BA; U+06BB; U+06BC; U+06BE; U+06BF; + $this->arabNextLink .= "\xda\xba\xda\xbb\xda\xbc\xda\xbe\xda\xbf"; + // U+06C0; U+06C1; U+06C2; U+06C3; U+06C4; U+06C5; U+06C6; U+06C7; U+06C8; U+06C9; + $this->arabNextLink .= "\xdb\x80\xdb\x81\xdb\x82\xdb\x83\xdb\x84\xdb\x85\xdb\x86\xdb\x87\xdb\x88\xdb\x89"; + // U+06CA; U+06CB; U+06CC; U+06CD; U+06CE; U+06CF; + $this->arabNextLink .= "\xdb\x8a\xdb\x8b\xdb\x8c\xdb\x8d\xdb\x8e\xdb\x8f"; + // U+06D0; U+06d1; U+06D2; U+06D3; + $this->arabNextLink .= "\xdb\x90\xdb\x91\xdb\x92\xdb\x93"; + + + // VOWELS ++ + + // U+064b U+064c; U+064d; U+064e; U+064f; U+0650; U+0651; U+0652; + $this->arabVowels = "\xd9\x8b\xd9\x8c\xd9\x8d\xd9\x8e\xd9\x8f\xd9\x90\xd9\x91\xd9\x92"; + + // Added chars that may not be vowels but should not interrupt joining + // U+0670; U+0653; + $this->arabVowels .= "\xd9\xb0\xd9\x93"; + // ? should also add - U+615, 616, 617-61A, 653-65E, 6D6-6DC, 6DF-6E4, 6E7, 6E8, 6EA-6ED + + + + // ISOLATED FORM :: FINAL :: INITIAL :: MEDIAL + // FB** - FE** = Arabic presentation Forms + // F5** F6** F7** = Private use area used by unAGlyphs in mPDF + $this->arabGlyphs = array( + "\xd8\x8c"=>array("\xd8\x8c", "\xd8\x8c", "\xd8\x8c", "\xd8\x8c"), /* 060C, 060C, 060C, 060C */ + "\xd8\x9b"=>array("\xd8\x9b", "\xd8\x9b", "\xd8\x9b", "\xd8\x9b"), /* 061B, 061B, 061B, 061B */ + "\xd8\x9f"=>array("\xd8\x9f", "\xd8\x9f", "\xd8\x9f", "\xd8\x9f"), /* 061F, 061F, 061F, 061F */ + "\xd8\xa1"=>array("\xd8\xa1", "\xd8\xa1", "\xd8\xa1", "\xd8\xa1"), /* 0621, 0621, 0621, 0621 */ + "\xd8\xa2"=>array("\xd8\xa2", "\xef\xba\x82", "\xd8\xa2", "\xef\xba\x82"), /* 0622, FE82, 0622, FE82 */ + "\xd8\xa3"=>array("\xd8\xa3", "\xef\xba\x84", "\xd8\xa3", "\xef\xba\x84"), /* 0623, FE84, 0623, FE84 */ + "\xd8\xa4"=>array("\xd8\xa4", "\xef\xba\x86", "\xd8\xa4", "\xef\xba\x86"), /* 0624, FE86, 0624, FE86 */ + "\xd8\xa5"=>array("\xd8\xa5", "\xef\xba\x88", "\xd8\xa5", "\xef\xba\x88"), /* 0625, FE88, 0625, FE88 */ + "\xd8\xa6"=>array("\xd8\xa6", "\xef\xba\x8a", "\xef\xba\x8b", "\xef\xba\x8c"), /* 0626, FE8A, FE8B, FE8C */ + "\xd8\xa7"=>array("\xd8\xa7", "\xef\xba\x8e", "\xd8\xa7", "\xef\xba\x8e"), /* 0627, FE8E, 0627, FE8E */ + "\xd8\xa8"=>array("\xd8\xa8", "\xef\xba\x90", "\xef\xba\x91", "\xef\xba\x92"), /* 0628, FE90, FE91, FE92 */ + "\xd8\xa9"=>array("\xd8\xa9", "\xef\xba\x94", "\xd8\xa9", "\xef\xba\x94"), /* 0629, FE94, 0629, FE94 */ + "\xd8\xaa"=>array("\xd8\xaa", "\xef\xba\x96", "\xef\xba\x97", "\xef\xba\x98"), /* 062A, FE96, FE97, FE98 */ + "\xd8\xab"=>array("\xd8\xab", "\xef\xba\x9a", "\xef\xba\x9b", "\xef\xba\x9c"), /* 062B, FE9A, FE9B, FE9C */ + "\xd8\xac"=>array("\xd8\xac", "\xef\xba\x9e", "\xef\xba\x9f", "\xef\xba\xa0"), /* 062C, FE9E, FE9F, FEA0 */ + "\xd8\xad"=>array("\xd8\xad", "\xef\xba\xa2", "\xef\xba\xa3", "\xef\xba\xa4"), /* 062D, FEA2, FEA3, FEA4 */ + "\xd8\xae"=>array("\xd8\xae", "\xef\xba\xa6", "\xef\xba\xa7", "\xef\xba\xa8"), /* 062E, FEA6, FEA7, FEA8 */ + "\xd8\xaf"=>array("\xd8\xaf", "\xef\xba\xaa", "\xd8\xaf", "\xef\xba\xaa"), /* 062F, FEAA, 062F, FEAA */ + "\xd8\xb0"=>array("\xd8\xb0", "\xef\xba\xac", "\xd8\xb0", "\xef\xba\xac"), /* 0630, FEAC, 0630, FEAC */ + "\xd8\xb1"=>array("\xd8\xb1", "\xef\xba\xae", "\xd8\xb1", "\xef\xba\xae"), /* 0631, FEAE, 0631, FEAE */ + "\xd8\xb2"=>array("\xd8\xb2", "\xef\xba\xb0", "\xd8\xb2", "\xef\xba\xb0"), /* 0632, FEB0, 0632, FEB0 */ + "\xd8\xb3"=>array("\xd8\xb3", "\xef\xba\xb2", "\xef\xba\xb3", "\xef\xba\xb4"), /* 0633, FEB2, FEB3, FEB4 */ + "\xd8\xb4"=>array("\xd8\xb4", "\xef\xba\xb6", "\xef\xba\xb7", "\xef\xba\xb8"), /* 0634, FEB6, FEB7, FEB8 */ + "\xd8\xb5"=>array("\xd8\xb5", "\xef\xba\xba", "\xef\xba\xbb", "\xef\xba\xbc"), /* 0635, FEBA, FEBB, FEBC */ + "\xd8\xb6"=>array("\xd8\xb6", "\xef\xba\xbe", "\xef\xba\xbf", "\xef\xbb\x80"), /* 0636, FEBE, FEBF, FEC0 */ + "\xd8\xb7"=>array("\xd8\xb7", "\xef\xbb\x82", "\xef\xbb\x83", "\xef\xbb\x84"), /* 0637, FEC2, FEC3, FEC4 */ + "\xd8\xb8"=>array("\xd8\xb8", "\xef\xbb\x86", "\xef\xbb\x87", "\xef\xbb\x88"), /* 0638, FEC6, FEC7, FEC8 */ + "\xd8\xb9"=>array("\xd8\xb9", "\xef\xbb\x8a", "\xef\xbb\x8b", "\xef\xbb\x8c"), /* 0639, FECA, FECB, FECC */ + "\xd8\xba"=>array("\xd8\xba", "\xef\xbb\x8e", "\xef\xbb\x8f", "\xef\xbb\x90"), /* 063A, FECE, FECF, FED0 */ + "\xd9\x80"=>array("\xd9\x80", "\xd9\x80", "\xd9\x80", "\xd9\x80"), /* 0640, 0640, 0640, 0640 */ + "\xd9\x81"=>array("\xd9\x81", "\xef\xbb\x92", "\xef\xbb\x93", "\xef\xbb\x94"), /* 0641, FED2, FED3, FED4 */ + "\xd9\x82"=>array("\xd9\x82", "\xef\xbb\x96", "\xef\xbb\x97", "\xef\xbb\x98"), /* 0642, FED6, FED7, FED8 */ + "\xd9\x83"=>array("\xd9\x83", "\xef\xbb\x9a", "\xef\xbb\x9b", "\xef\xbb\x9c"), /* 0643, FEDA, FEDB, FEDC */ + "\xd9\x84"=>array("\xd9\x84", "\xef\xbb\x9e", "\xef\xbb\x9f", "\xef\xbb\xa0"), /* 0644, FEDE, FEDF, FEE0 */ + "\xd9\x85"=>array("\xd9\x85", "\xef\xbb\xa2", "\xef\xbb\xa3", "\xef\xbb\xa4"), /* 0645, FEE2, FEE3, FEE4 */ + "\xd9\x86"=>array("\xd9\x86", "\xef\xbb\xa6", "\xef\xbb\xa7", "\xef\xbb\xa8"), /* 0646, FEE6, FEE7, FEE8 */ + "\xd9\x87"=>array("\xd9\x87", "\xef\xbb\xaa", "\xef\xbb\xab", "\xef\xbb\xac"), /* 0647, FEEA, FEEB, FEEC */ + "\xd9\x88"=>array("\xd9\x88", "\xef\xbb\xae", "\xd9\x88", "\xef\xbb\xae"), /* 0648, FEEE, 0648, FEEE */ + +/* 0649 Alef Maksura should only appear at end of word (in Arabic) So Initial and medial are shown as isolated/final */ + "\xd9\x89"=>array("\xd9\x89", "\xef\xbb\xb0", "\xd9\x89", "\xef\xbb\xb0"), /* 0649, FEF0, 0649, FEF0 */ + +/* 0649 Alef Maksura Initial and Medial forms as given in Unicode FBE8 and FBE9 for Uighur Kazakh (not in some fonts) */ + "\xd9\x89"=>array("\xd9\x89", "\xef\xbb\xb0", "\xef\xaf\xa8", "\xef\xaf\xa9"), /* 0649, FEF0, FBE8, FBE9 not in most fonts */ + + "\xd9\x8a"=>array("\xd9\x8a", "\xef\xbb\xb2", "\xef\xbb\xb3", "\xef\xbb\xb4"), /* 064A, FEF2, FEF3, FEF4 */ + "\xd9\x8b"=>array("\xd9\x8b", "\xd9\x8b", "\xd9\x8b", "\xd9\x8b"), /* 064B, 064B, 064B, 064B */ + "\xd9\x8c"=>array("\xd9\x8c", "\xd9\x8c", "\xd9\x8c", "\xd9\x8c"), /* 064C, 064C, 064C, 064C */ + "\xd9\x8d"=>array("\xd9\x8d", "\xd9\x8d", "\xd9\x8d", "\xd9\x8d"), /* 064D, 064D, 064D, 064D */ + "\xd9\x8e"=>array("\xd9\x8e", "\xd9\x8e", "\xd9\x8e", "\xd9\x8e"), /* 064E, 064E, 064E, 064E */ + "\xd9\x8f"=>array("\xd9\x8f", "\xd9\x8f", "\xd9\x8f", "\xd9\x8f"), /* 064F, 064F, 064F, 064F */ + "\xd9\x90"=>array("\xd9\x90", "\xd9\x90", "\xd9\x90", "\xd9\x90"), /* 0650, 0650, 0650, 0650 */ + "\xd9\x91"=>array("\xd9\x91", "\xd9\x91", "\xd9\x91", "\xd9\x91"), /* 0651, 0651, 0651, 0651 */ + "\xd9\x92"=>array("\xd9\x92", "\xd9\x92", "\xd9\x92", "\xd9\x92"), /* 0652, 0652, 0652, 0652 */ + "\xd9\xb1"=>array("\xd9\xb1", "\xef\xad\x91", "\xd9\xb1", "\xef\xad\x91"), /* 0671, FB51, 0671, FB51 */ + "\xd9\xb2"=>array("\xd9\xb2", "\xef\x95\xb2", "\xd9\xb2", "\xef\x95\xb2"), /* 0672, F572, 0672, F572 */ + "\xd9\xb5"=>array("\xd9\xb5", "\xef\x95\xb5", "\xd9\xb5", "\xef\x95\xb5"), /* 0675, F575, 0675, F575 */ + "\xd9\xb8"=>array("\xd9\xb8", "\xef\x95\xb8", "\xef\xba\x8b", "\xef\xba\x8c"), /* 0678, F578, FE8B, FE8C ( as 0626 ) */ + "\xd9\xb9"=>array("\xd9\xb9", "\xef\xad\xa7", "\xef\xad\xa8", "\xef\xad\xa9"), /* 0679, FB67, FB68, FB69 */ + "\xd9\xba"=>array("\xd9\xba", "\xef\xad\x9f", "\xef\xad\xa0", "\xef\xad\xa1"), /* 067A, FB5F, FB60, FB61 */ + "\xd9\xbb"=>array("\xd9\xbb", "\xef\xad\x93", "\xef\xad\x94", "\xef\xad\x95"), /* 067B, FB53, FB54, FB55 */ + "\xd9\xbc"=>array("\xd9\xbc", "\xef\x95\xbc", "\xef\x99\xbc", "\xef\x9d\xbc"), /* 067C, F57C, F67C, F77C */ + "\xd9\xbd"=>array("\xd9\xbd", "\xef\x95\xbd", "\xef\x99\xbd", "\xef\x9d\xbd"), /* 067D, F57D, F67D, F77D */ + "\xd9\xbe"=>array("\xd9\xbe", "\xef\xad\x97", "\xef\xad\x98", "\xef\xad\x99"), /* 067E, FB57, FB58, FB59 */ + "\xd9\xbf"=>array("\xd9\xbf", "\xef\xad\xa3", "\xef\xad\xa4", "\xef\xad\xa5"), /* 067F, FB63, FB64, FB65 */ + "\xda\x80"=>array("\xda\x80", "\xef\xad\x9b", "\xef\xad\x9c", "\xef\xad\x9d"), /* 0680, FB5B, FB5C, FB5D */ + "\xda\x81"=>array("\xda\x81", "\xef\x96\x81", "\xef\x9a\x81", "\xef\x9e\x81"), /* 0681, F581, F681, F781 */ + "\xda\x82"=>array("\xda\x82", "\xef\x96\x82", "\xef\x9a\x82", "\xef\x9e\x82"), /* 0682, F582, F682, F782 */ + "\xda\x83"=>array("\xda\x83", "\xef\xad\xb7", "\xef\xad\xb8", "\xef\xad\xb9"), /* 0683, FB77, FB78, FB79 */ + "\xda\x84"=>array("\xda\x84", "\xef\xad\xb3", "\xef\xad\xb4", "\xef\xad\xb5"), /* 0684, FB73, FB74, FB75 */ + "\xda\x85"=>array("\xda\x85", "\xef\x96\x85", "\xef\x9a\x85", "\xef\x9e\x85"), /* 0685, F585, F685, F785 */ + "\xda\x86"=>array("\xda\x86", "\xef\xad\xbb", "\xef\xad\xbc", "\xef\xad\xbd"), /* 0686, FB7B, FB7C, FB7D */ + "\xda\x87"=>array("\xda\x87", "\xef\xad\xbf", "\xef\xae\x80", "\xef\xae\x81"), /* 0687, FB7F, FB80, FB81 */ + "\xda\x88"=>array("\xda\x88", "\xef\xae\x89", "\xda\x88", "\xda\x88"), /* 0688, FB89, 0688, 0688 */ + "\xda\x89"=>array("\xda\x89", "\xef\x96\x89", "\xda\x89", "\xda\x89"), /* 0689, F589, 0689, 0689 */ + "\xda\x91"=>array("\xda\x91", "\xef\xae\x8d", "\xda\x91", "\xef\xae\x8d"), /* 0691, FB8D, 0691, FB8D */ + "\xda\x93"=>array("\xda\x93", "\xef\x96\x93", "\xda\x93", "\xda\x93"), /* 0693, F593, 0693, 0693 */ + "\xda\x96"=>array("\xda\x96", "\xef\x96\x96", "\xda\x96", "\xda\x96"), /* 0696, F596, 0696, 0696 */ + "\xda\x98"=>array("\xda\x98", "\xef\xae\x8b", "\xda\x98", "\xef\xae\x8b"), /* 0698, FB8B, 0698, FB8B */ + "\xda\x9a"=>array("\xda\x9a", "\xef\x96\x9a", "\xef\x9a\x9a", "\xef\x9e\x9a"), /* 069A, F59A, F69A, F79A */ + "\xda\x9b"=>array("\xda\x9b", "\xef\x96\x9b", "\xef\x9a\x9b", "\xef\x9e\x9b"), /* 069B, F59B, F69B, F79B */ + "\xda\x9c"=>array("\xda\x9c", "\xef\x96\x9c", "\xef\x9a\x9c", "\xef\x9e\x9c"), /* 069C, F59C, F69C, F79C */ + "\xda\x9d"=>array("\xda\x9d", "\xef\x96\x9d", "\xef\x9a\x9d", "\xef\x9e\x9d"), /* 069D, F59D, F69D, F79D */ + "\xda\x9e"=>array("\xda\x9e", "\xef\x96\x9e", "\xef\x9a\x9e", "\xef\x9e\x9e"), /* 069E, F59E, F69E, F79E */ + "\xda\xa0"=>array("\xda\xa0", "\xef\x96\xa0", "\xef\x9a\xa0", "\xef\x9e\xa0"), /* 06A0, F5A0, F6A0, F7A0 */ + "\xda\xa1"=>array("\xda\xa1", "\xef\x96\xa1", "\xef\x9a\xa1", "\xef\x9e\xa1"), /* 06A1, F5A1, F6A1, F7A1 */ + "\xda\xa2"=>array("\xda\xa2", "\xef\x96\xa2", "\xef\x9a\xa2", "\xef\x9e\xa2"), /* 06A2, F5A2, F6A2, F7A2 */ + "\xda\xa3"=>array("\xda\xa3", "\xef\x96\xa3", "\xef\x9a\xa3", "\xef\x9e\xa3"), /* 06A3, F5A3, F6A3, F7A3 */ + "\xda\xa4"=>array("\xda\xa4", "\xef\xad\xab", "\xef\xad\xac", "\xef\xad\xad"), /* 06A4, FB6B, FB6C, FB6D */ + "\xda\xa5"=>array("\xda\xa5", "\xef\x96\xa5", "\xef\x9a\xa5", "\xef\x9e\xa5"), /* 06A5, F5A5, F6A5, F7A5 */ + "\xda\xa6"=>array("\xda\xa6", "\xef\xad\xaf", "\xef\xad\xb0", "\xef\xad\xb1"), /* 06A6, FB6F, FB70, FB71 */ + "\xda\xa9"=>array("\xda\xa9", "\xef\xae\x8f", "\xef\xae\x90", "\xef\xae\x91"), /* 06A9, FB8F, FB90, FB91 */ + "\xda\xaa"=>array("\xda\xaa", "\xef\x96\xaa", "\xef\x9a\xaa", "\xef\x9e\xaa"), /* 06AA, F5AA, F6AA, F7AA */ + "\xda\xab"=>array("\xda\xab", "\xef\x96\xab", "\xef\x9a\xab", "\xef\x9e\xab"), /* 06AB, F5AB, F6AB, F7AB */ + "\xda\xac"=>array("\xda\xac", "\xef\x96\xac", "\xef\x9a\xac", "\xef\x9e\xac"), /* 06AC, F5AC, F6AC, F7AC */ + "\xda\xad"=>array("\xda\xad", "\xef\xaf\x94", "\xef\xaf\x95", "\xef\xaf\x96"), /* 06AD, FBD4, FBD5, FBD6 */ + "\xda\xae"=>array("\xda\xae", "\xef\x96\xae", "\xef\x9a\xae", "\xef\x9e\xae"), /* 06AE, F5AE, F6AE, F7AE */ + "\xda\xaf"=>array("\xda\xaf", "\xef\xae\x93", "\xef\xae\x94", "\xef\xae\x95"), /* 06Af, FB93, FB94, FB95 */ + "\xda\xb0"=>array("\xda\xb0", "\xef\x96\xb0", "\xef\x9a\xb0", "\xef\x9e\xb0"), /* 06B0, F5B0, F6B0, F7B0 */ + "\xda\xb1"=>array("\xda\xb1", "\xef\xae\x9b", "\xef\xae\x9c", "\xef\xae\x9d"), /* 06B1, FB9B, FB9C, FB9D */ + "\xda\xb2"=>array("\xda\xb2", "\xef\x96\xb2", "\xef\x9a\xb2", "\xef\x9e\xb2"), /* 06B2, F5B2, F6B2, F7B2 */ + "\xda\xb3"=>array("\xda\xb3", "\xef\xae\x97", "\xef\xae\x98", "\xef\xae\x99"), /* 06B3, FB97, FB98, FB99 */ + "\xda\xb4"=>array("\xda\xb4", "\xef\x96\xb4", "\xef\x9a\xb4", "\xef\x9e\xb4"), /* 06B4, F5B4, F6B4, F7B4 */ + "\xda\xb5"=>array("\xda\xb5", "\xef\x96\xb5", "\xef\x9a\xb5", "\xef\x9e\xb5"), /* 06B5, F5B5, F6B5, F7B5 */ + "\xda\xb6"=>array("\xda\xb6", "\xef\x96\xb6", "\xef\x9a\xb6", "\xef\x9e\xb6"), /* 06B6, F5B6, F6B6, F7B6 */ + "\xda\xb7"=>array("\xda\xb7", "\xef\x96\xb7", "\xef\x9a\xb7", "\xef\x9e\xb7"), /* 06B7, F5B7, F6B7, F7B7 */ + "\xda\xb8"=>array("\xda\xb8", "\xef\x96\xb8", "\xef\x9a\xb8", "\xef\x9e\xb8"), /* 06B8, F5B8, F6B8, F7B8 */ + "\xda\xb9"=>array("\xda\xb9", "\xef\x96\xb9", "\xef\x9a\xb9", "\xef\x9e\xb9"), /* 06B9, F5B9, F6B9, F7B9 */ + "\xda\xba"=>array("\xda\xba", "\xef\xae\x9f", "\xda\xba", "\xda\xba"), /* 06BA, FB9F, 06BA, 06BA */ + "\xda\xbb"=>array("\xda\xbb", "\xef\xae\xa1", "\xef\xae\xa2", "\xef\xae\xa3"), /* 06BB, FBA1, FBA2, FBA3 */ + "\xda\xbc"=>array("\xda\xbc", "\xef\x96\xbc", "\xef\x9a\xbc", "\xef\x9e\xbc"), /* 06BC, F5BC, F6BC, F7BC */ + "\xda\xbe"=>array("\xda\xbe", "\xef\xae\xab", "\xef\xae\xac", "\xef\xae\xad"), /* 06BE, FBAB, FBAC, FBAD */ + "\xda\xbf"=>array("\xda\xbf", "\xef\x96\xbf", "\xef\x9a\xbf", "\xef\x9e\xbf"), /* 06BF, F5BF, F6BF, F7BF */ + "\xdb\x80"=>array("\xdb\x80", "\xef\xae\xa5", "\xdb\x80", "\xef\xae\xa5"), /* 06C0, FBA5, 06C0, FBA5 */ + "\xdb\x81"=>array("\xdb\x81", "\xef\xae\xa7", "\xef\xae\xa8", "\xef\xae\xa9"), /* 06C1, FBA7, FBA8, FBA9 */ + "\xdb\x8c"=>array("\xdb\x8c", "\xef\xaf\xbd", "\xef\xaf\xbe", "\xef\xaf\xbf"), /* 06CC, FBFD, FBFE, FBFF */ + "\xdb\x8d"=>array("\xdb\x8d", "\xef\x97\x8d", "\xdb\x8d", "\xef\x97\x8d"), /* 06CD, F5CD, 06CD, F5CD */ + "\xdb\x8e"=>array("\xdb\x8e", "\xef\x97\x8e", "\xef\x9b\x8e", "\xef\x9f\x8e"), /* 06CE, F5CE, F6CE, F7CE */ + "\xdb\x90"=>array("\xdb\x90", "\xef\xaf\xa5", "\xef\xaf\xa6", "\xef\xaf\xa7"), /* 06D0, FBE5, FBE6, FBE7 */ + "\xdb\x91"=>array("\xdb\x91", "\xef\x97\x91", "\xef\xad\x98", "\xef\xad\x99"), /* 06D1, F5D1, FB58, FB59 Fudge borrows from 067E */ + "\xdb\x92"=>array("\xdb\x92", "\xef\xae\xaf", "\xdb\x92", "\xef\xae\xaf"), /* 06D2, FBAF, 06D2, FBAF */ + "\xdb\x93"=>array("\xdb\x93", "\xef\xae\xb1", "\xdb\x93", "\xef\xae\xb1"), /* 06D3, FBB1, 06D3, FBB1 */ + ); + + + // LAM with ALEF ligatures (Mandatory ligatures) + + // U+0644; U+0622; U+0644; U+0623; U+0644; U+0625; U+0644; U+0627; + $this->arabLigGlyphs = "\xd9\x84\xd8\xa2\xd9\x84\xd8\xa3\xd9\x84\xd8\xa5\xd9\x84\xd8\xa7"; + $this->arabLigHex = 'FEF5FEF6FEF5FEF6FEF7FEF8FEF7FEF8FEF9FEFAFEF9FEFAFEFBFEFCFEFBFEFC'; + +} + +// mPDF 5.4.08 +function ArabJoin($str) { + if (!$this->arabGlyphs) { $this->InitArabic(); } + $crntChar = null; + $prevChar = null; + $nextChar = null; + $output = array(); + $chars = preg_split('//u', $str); + $max = count($chars); + for ($i = $max - 1; $i >= 0; $i--) { + $crntChar = $chars[$i]; + if ($i > 0){ $prevChar = $chars[$i - 1]; } + else{ $prevChar = NULL; } + if ($prevChar && mb_strpos($this->arabVowels, $prevChar, 0, 'utf-8') !== false) { + $prevChar = $chars[$i - 2]; + if ($prevChar && mb_strpos($this->arabVowels, $prevChar, 0, 'utf-8') !== false) { + $prevChar = $chars[$i - 3]; + } + } + if ($crntChar && mb_strpos($this->arabVowels, $crntChar, 0, 'utf-8') !== false) { + // If next_char = nextLink && prev_char = prevLink: + // Added && $prevchar (defined) else error on mb_strpos() + if ($chars[$i + 1] && (mb_strpos($this->arabNextLink, $chars[$i + 1], 0, 'utf-8') !== false) && $prevChar && (mb_strpos($this->arabPrevLink, $prevChar, 0, 'utf-8') !== false)) { + $output[] = $this->get_arab_glyphs($crntChar, 1); // <final> form + } + else { + $output[] = $this->get_arab_glyphs($crntChar, 0); // <isolated> form + } + continue; + } + // NB = آ أ إ ا ل + if (isset($chars[$i + 1]) && in_array($chars[$i + 1], array("\xd8\xa2","\xd8\xa3","\xd8\xa5","\xd8\xa7")) && $crntChar == "\xd9\x84"){ + continue; + } + if (ord($crntChar) < 128) { + $output[] = $crntChar; + $nextChar = $crntChar; + continue; + } + $form = 0; + if ($prevChar == "\xd9\x84" && ($crntChar == "\xd8\xa2" || $crntChar == "\xd8\xa3" || $crntChar == "\xd8\xa5" || $crntChar == "\xd8\xa7")) { + if ($chars[$i - 2] && mb_strpos($this->arabPrevLink, $chars[$i - 2], 0, 'utf-8') !== false) { + $form++; // <final> form + } + $pos = mb_strpos($this->arabLigGlyphs, ($prevChar . $crntChar), 0, 'utf-8'); + $pos = $pos*8 + $form*4; + $pres = (mb_substr($this->arabLigHex, $pos, 4, 'utf-8')); + // If presentation forms for mandatory ligatures with diacritics not present (even if remapped from e.g. uni0644uni0625) + // try replacing with mandatory ligature Alef/lam isolated/final FEFB/FEFC + diacritic glyph + if (!$this->_charDefined($this->CurrentFont['cw'], hexdec($pres)) && $this->_charDefined($this->CurrentFont['cw'], hexdec('FEFB'))) { + if ($pres=='FEF5') { $output[] = strcode2utf('ﻻٓ'); } + else if ($pres=='FEF6') { $output[] = strcode2utf('ﻼٓ'); } + else if ($pres=='FEF7') { $output[] = strcode2utf('ﻻٔ'); } + else if ($pres=='FEF8') { $output[] = strcode2utf('ﻼٔ'); } + else if ($pres=='FEF9') { $output[] = strcode2utf('ﻻٕ'); } + else if ($pres=='FEFA') { $output[] = strcode2utf('ﻼٕ'); } + } + else { + $output[] = strcode2utf('&#x' . $pres . ';'); + } + $nextChar = $prevChar; + continue; + } + if ($prevChar && mb_strpos($this->arabPrevLink, $prevChar, 0, 'utf-8') !== false) { + $form++; + } + if ($nextChar && mb_strpos($this->arabNextLink, $nextChar, 0, 'utf-8') !== false) { + $form += 2; + } + $output[] = $this->get_arab_glyphs($crntChar, $form) ; + $nextChar = $crntChar; + } + $ra = array_reverse($output); + $s = implode($ra); + return $s; +} + +// mPDF 5.4.08 +function get_arab_glyphs($char, $type) { + if ($type>0 && isset($this->arabGlyphs[$char])) { + // If presentation form specified FB** - FE** = Arabic presentation Forms + if (preg_match("/[\x{FB50}-\x{FEFF}]/u",$this->arabGlyphs[$char][$type])) { + $unicode = $this->UTF8StringToArray($this->arabGlyphs[$char][$type], false); + if ($this->_charDefined($this->CurrentFont['cw'],$unicode[0])) { return $this->arabGlyphs[$char][$type]; } + else if (isset($this->CurrentFont['unAGlyphs'])) { + $uni = $this->UTF8StringToArray($char, false); + $pua = $uni[0] - 1536 + 62464 + 256*$type ; + if ($this->_charDefined($this->CurrentFont['cw'], $pua)) { return strcode2utf('&#x' . dechex($pua) . ';'); } + else return $char; + } + else return $char; + } + // If PUA form specified and unAGlphs font set F5** F6** F7** = Private use area used by unAGlyphs in mPDF + if (preg_match("/[\x{F500}-\x{F7FF}]/u",$this->arabGlyphs[$char][$type]) && isset($this->CurrentFont['unAGlyphs'])) { + $unicode = $this->UTF8StringToArray($this->arabGlyphs[$char][$type], false); + if ($this->_charDefined($this->CurrentFont['cw'],$unicode[0])) { return $this->arabGlyphs[$char][$type]; } + else return $char; + } + return $this->arabGlyphs[$char][$type]; + } + else return $char; +} +/*-- END RTL --*/ + + + +//=========================== +// Functions originally in htmltoolkit - moved mPDF 4.0 + +// Call-back function Used for usort in fn _tableWrite + +function _cmpdom($a, $b) { + return ($a["dom"] < $b["dom"]) ? -1 : 1; +} + +function mb_strrev($str, $enc = 'utf-8'){ + $ch = array(); + $ch = preg_split('//u',$str); + $revch = array_reverse($ch); + return implode('',$revch); +} + +/*-- COLUMNS --*/ +// Callback function from function printcolumnbuffer in mpdf +function columnAdjustAdd($type,$k,$xadj,$yadj,$a,$b,$c=0,$d=0,$e=0,$f=0) { + if ($type == 'Td') { // xpos,ypos + $a += ($xadj * $k); + $b -= ($yadj * $k); + return 'BT '.sprintf('%.3F %.3F',$a,$b).' Td'; + } + else if ($type == 're') { // xpos,ypos,width,height + $a += ($xadj * $k); + $b -= ($yadj * $k); + return sprintf('%.3F %.3F %.3F %.3F',$a,$b,$c,$d).' re'; + } + else if ($type == 'l') { // xpos,ypos,x2pos,y2pos + $a += ($xadj * $k); + $b -= ($yadj * $k); + return sprintf('%.3F %.3F l',$a,$b); + } + else if ($type == 'img') { // width,height,xpos,ypos + $c += ($xadj * $k); + $d -= ($yadj * $k); + return sprintf('q %.3F 0 0 %.3F %.3F %.3F',$a,$b,$c,$d).' cm /'.$e; + } + else if ($type == 'draw') { // xpos,ypos + $a += ($xadj * $k); + $b -= ($yadj * $k); + return sprintf('%.3F %.3F m',$a,$b); + } + else if ($type == 'bezier') { // xpos,ypos,x2pos,y2pos,x3pos,y3pos + $a += ($xadj * $k); + $b -= ($yadj * $k); + $c += ($xadj * $k); + $d -= ($yadj * $k); + $e += ($xadj * $k); + $f -= ($yadj * $k); + return sprintf('%.3F %.3F %.3F %.3F %.3F %.3F',$a,$b,$c,$d,$e,$f).' c'; + } +} +/*-- END COLUMNS --*/ + + + +function ConvertColor($color="#000000"){ + $color = trim(strtolower($color)); + $c = false; + if ($color=='transparent') { return false; } + else if ($color=='inherit') { return false; } + else if (isset($this->SVGcolors[$color])) $color = $this->SVGcolors[$color]; + + if (preg_match('/^[\d]+$/',$color)) { $c = (array(1,$color)); } // i.e. integer only + else if ($color[0] == '#') { //case of #nnnnnn or #nnn + $cor = preg_replace('/\s+.*/','',$color); // in case of Background: #CCC url() x-repeat etc. + if (strlen($cor) == 4) { // Turn #RGB into #RRGGBB + $cor = "#" . $cor[1] . $cor[1] . $cor[2] . $cor[2] . $cor[3] . $cor[3]; + } + $r = hexdec(substr($cor, 1, 2)); + $g = hexdec(substr($cor, 3, 2)); + $b = hexdec(substr($cor, 5, 2)); + $c = array(3,$r,$g,$b); + } + else if (preg_match('/(rgba|rgb|device-cmyka|cmyka|device-cmyk|cmyk|hsla|hsl|spot)\((.*?)\)/',$color,$m)) { // mPDF 5.6.05 + $type= $m[1]; + $cores = explode(",", $m[2]); + $ncores = count($cores); + if (stristr($cores[0],'%') ) { + $cores[0] += 0; + if ($type=='rgb' || $type=='rgba') { $cores[0] = intval($cores[0]*255/100); } + } + if ($ncores>1 && stristr($cores[1],'%') ) { + $cores[1] += 0; + if ($type=='rgb' || $type=='rgba') { $cores[1] = intval($cores[1]*255/100); } + if ($type=='hsl' || $type=='hsla') { $cores[1] = $cores[1]/100; } + } + if ($ncores>2 && stristr($cores[2],'%') ) { + $cores[2] += 0; + if ($type=='rgb' || $type=='rgba') { $cores[2] = intval($cores[2]*255/100); } + if ($type=='hsl' || $type=='hsla') { $cores[2] = $cores[2]/100; } + } + if ($ncores>3 && stristr($cores[3],'%') ) { + $cores[3] += 0; + } + + if ($type=='rgb') { $c = array(3,$cores[0],$cores[1],$cores[2]); } + else if ($type=='rgba') { $c = array(5,$cores[0],$cores[1],$cores[2],$cores[3]*100); } + else if ($type=='cmyk' || $type=='device-cmyk') { $c = array(4,$cores[0],$cores[1],$cores[2],$cores[3]); } // mPDF 5.6.05 + else if ($type=='cmyka' || $type=='device-cmyka') { $c = array(6,$cores[0],$cores[1],$cores[2],$cores[3],$cores[4]*100); } // mPDF 5.6.05 + else if ($type=='hsl' || $type=='hsla') { + $conv = $this->hsl2rgb($cores[0]/360,$cores[1],$cores[2]); + if ($type=='hsl') { $c = array(3,$conv[0],$conv[1],$conv[2]); } + else if ($type=='hsla') { $c = array(5,$conv[0],$conv[1],$conv[2],$cores[3]*100); } + } + else if ($type=='spot') { + $name = strtoupper(trim($cores[0])); + // mPDF 5.6.59 + if(!isset($this->spotColors[$name])) { + if (isset($cores[5])) { $this->AddSpotColor($cores[0],$cores[2],$cores[3],$cores[4],$cores[5]); } + else { $this->Error('Undefined spot color: '.$name); } + } + $c = array(2,$this->spotColors[$name]['i'],$cores[1]); + } + } + + + // $this->restrictColorSpace + // 1 - allow GRAYSCALE only [convert CMYK/RGB->gray] + // 2 - allow RGB / SPOT COLOR / Grayscale [convert CMYK->RGB] + // 3 - allow CMYK / SPOT COLOR / Grayscale [convert RGB->CMYK] + if ($this->PDFA || $this->PDFX || $this->restrictColorSpace) { + if ($c[0]==1) { // GRAYSCALE + } + else if ($c[0]==2) { // SPOT COLOR + if (!isset($this->spotColorIDs[$c[1]])) { die('Error: Spot colour has not been defined - '.$this->spotColorIDs[$c[1]]); } + if ($this->PDFA) { + if ($this->PDFA && !$this->PDFAauto) { $this->PDFAXwarnings[] = "Spot color specified '".$this->spotColorIDs[$c[1]]."' (converted to process color)"; } + if ($this->restrictColorSpace!=3) { + $sp = $this->spotColors[$this->spotColorIDs[$c[1]]]; + $c = $this->cmyk2rgb(array(4,$sp['c'],$sp['m'],$sp['y'],$sp['k'])); + } + } + else if ($this->restrictColorSpace==1) { + $sp = $this->spotColors[$this->spotColorIDs[$c[1]]]; + $c = $this->cmyk2gray(array(4,$sp['c'],$sp['m'],$sp['y'],$sp['k'])); + } + } + else if ($c[0]==3) { // RGB + if ($this->PDFX || ($this->PDFA && $this->restrictColorSpace==3)) { + if (($this->PDFA && !$this->PDFAauto) || ($this->PDFX && !$this->PDFXauto)) { $this->PDFAXwarnings[] = "RGB color specified '".$color."' (converted to CMYK)"; } + $c = $this->rgb2cmyk($c); + } + else if ($this->restrictColorSpace==1) { $c = $this->rgb2gray($c); } + else if ($this->restrictColorSpace==3) { $c = $this->rgb2cmyk($c); } + } + else if ($c[0]==4) { // CMYK + if ($this->PDFA && $this->restrictColorSpace!=3) { + if ($this->PDFA && !$this->PDFAauto) { $this->PDFAXwarnings[] = "CMYK color specified '".$color."' (converted to RGB)"; } + $c = $this->cmyk2rgb($c); + } + else if ($this->restrictColorSpace==1) { $c = $this->cmyk2gray($c); } + else if ($this->restrictColorSpace==2) { $c = $this->cmyk2rgb($c); } + } + else if ($c[0]==5) { // RGBa + if ($this->PDFX || ($this->PDFA && $this->restrictColorSpace==3)) { + if (($this->PDFA && !$this->PDFAauto) || ($this->PDFX && !$this->PDFXauto)) { $this->PDFAXwarnings[] = "RGB color with transparency specified '".$color."' (converted to CMYK without transparency)"; } + $c = $this->rgb2cmyk($c); + $c = array(4, $c[1], $c[2], $c[3], $c[4]); + } + else if ($this->PDFA && $this->restrictColorSpace!=3) { + if (!$this->PDFAauto) { $this->PDFAXwarnings[] = "RGB color with transparency specified '".$color."' (converted to RGB without transparency)"; } + $c = $this->rgb2cmyk($c); + $c = array(4, $c[1], $c[2], $c[3], $c[4]); + } + else if ($this->restrictColorSpace==1) { $c = $this->rgb2gray($c); } + else if ($this->restrictColorSpace==3) { $c = $this->rgb2cmyk($c); } + } + else if ($c[0]==6) { // CMYKa + if ($this->PDFA && $this->restrictColorSpace!=3) { + if (($this->PDFA && !$this->PDFAauto) || ($this->PDFX && !$this->PDFXauto)) { $this->PDFAXwarnings[] = "CMYK color with transparency specified '".$color."' (converted to RGB without transparency)"; } + $c = $this->cmyk2rgb($c); + $c = array(3, $c[1], $c[2], $c[3]); + } + else if ($this->PDFX || ($this->PDFA && $this->restrictColorSpace==3)) { + if (($this->PDFA && !$this->PDFAauto) || ($this->PDFX && !$this->PDFXauto)) { $this->PDFAXwarnings[] = "CMYK color with transparency specified '".$color."' (converted to CMYK without transparency)"; } + $c = $this->cmyk2rgb($c); + $c = array(3, $c[1], $c[2], $c[3]); + } + else if ($this->restrictColorSpace==1) { $c = $this->cmyk2gray($c); } + else if ($this->restrictColorSpace==2) { $c = $this->cmyk2rgb($c); } + } + } + if (is_array($c)) { + $c = array_pad($c, 6, 0); + $cstr = pack("a1ccccc", $c[0], ($c[1] & 0xFF), ($c[2] & 0xFF), ($c[3] & 0xFF), ($c[4] & 0xFF), ($c[5] & 0xFF) ); + } + return $cstr; +} + +function rgb2gray($c) { + if (isset($c[4])) { return array(1,(($c[1] * .21) + ($c[2] * .71) + ($c[3] * .07)), ord(1), $c[4]); } + else { return array(1,(($c[1] * .21) + ($c[2] * .71) + ($c[3] * .07))); } +} + +function cmyk2gray($c) { + $rgb = $this->cmyk2rgb($c); + return $this->rgb2gray($rgb); +} + +function rgb2cmyk($c) { + $cyan = 1 - ($c[1] / 255); + $magenta = 1 - ($c[2] / 255); + $yellow = 1 - ($c[3] / 255); + $min = min($cyan, $magenta, $yellow); + + if ($min == 1) { + if ($c[0]==5) { return array (6,100,100,100,100, $c[4]); } + else { return array (4,100,100,100,100); } + // For K-Black + //if ($c[0]==5) { return array (6,0,0,0,100, $c[4]); } + //else { return array (4,0,0,0,100); } + } + $K = $min; + $black = 1 - $K; + if ($c[0]==5) { return array (6,($cyan-$K)*100/$black, ($magenta-$K)*100/$black, ($yellow-$K)*100/$black, $K*100, $c[4]); } + else { return array (4,($cyan-$K)*100/$black, ($magenta-$K)*100/$black, ($yellow-$K)*100/$black, $K*100); } +} + + +function cmyk2rgb($c) { + $rgb = array(); + $colors = 255 - ($c[4]*2.55); + $rgb[0] = intval($colors * (255 - ($c[1]*2.55))/255); + $rgb[1] = intval($colors * (255 - ($c[2]*2.55))/255); + $rgb[2] = intval($colors * (255 - ($c[3]*2.55))/255); + if ($c[0]==6) { return array (5,$rgb[0],$rgb[1],$rgb[2], $c[5]); } + else { return array (3,$rgb[0],$rgb[1],$rgb[2]); } +} + +function rgb2hsl($var_r, $var_g, $var_b) { + $var_min = min($var_r,$var_g,$var_b); + $var_max = max($var_r,$var_g,$var_b); + $del_max = $var_max - $var_min; + $l = ($var_max + $var_min) / 2; + if ($del_max == 0) { + $h = 0; + $s = 0; + } + else { + if ($l < 0.5) { $s = $del_max / ($var_max + $var_min); } + else { $s = $del_max / (2 - $var_max - $var_min); } + $del_r = ((($var_max - $var_r) / 6) + ($del_max / 2)) / $del_max; + $del_g = ((($var_max - $var_g) / 6) + ($del_max / 2)) / $del_max; + $del_b = ((($var_max - $var_b) / 6) + ($del_max / 2)) / $del_max; + if ($var_r == $var_max) { $h = $del_b - $del_g; } + elseif ($var_g == $var_max) { $h = (1 / 3) + $del_r - $del_b; } + elseif ($var_b == $var_max) { $h = (2 / 3) + $del_g - $del_r; }; + if ($h < 0) { $h += 1; } + if ($h > 1) { $h -= 1; } + } + return array($h,$s,$l); +} + + +function hsl2rgb($h2,$s2,$l2) { + // Input is HSL value of complementary colour, held in $h2, $s, $l as fractions of 1 + // Output is RGB in normal 255 255 255 format, held in $r, $g, $b + // Hue is converted using function hue_2_rgb, shown at the end of this code + if ($s2 == 0) { + $r = $l2 * 255; + $g = $l2 * 255; + $b = $l2 * 255; + } + else { + if ($l2 < 0.5) { $var_2 = $l2 * (1 + $s2); } + else { $var_2 = ($l2 + $s2) - ($s2 * $l2); } + $var_1 = 2 * $l2 - $var_2; + $r = round(255 * $this->hue_2_rgb($var_1,$var_2,$h2 + (1 / 3))); + $g = round(255 * $this->hue_2_rgb($var_1,$var_2,$h2)); + $b = round(255 * $this->hue_2_rgb($var_1,$var_2,$h2 - (1 / 3))); + } + return array($r,$g,$b); +} + +function hue_2_rgb($v1,$v2,$vh) { + // Function to convert hue to RGB, called from above + if ($vh < 0) { $vh += 1; }; + if ($vh > 1) { $vh -= 1; }; + if ((6 * $vh) < 1) { return ($v1 + ($v2 - $v1) * 6 * $vh); }; + if ((2 * $vh) < 1) { return ($v2); }; + if ((3 * $vh) < 2) { return ($v1 + ($v2 - $v1) * ((2 / 3 - $vh) * 6)); }; + return ($v1); +} + +function _invertColor($cor) { + if ($cor[0]==3 || $cor[0]==5) { // RGB + return array(3, (255-$cor[1]), (255-$cor[2]), (255-$cor[3])); + } + else if ($cor[0]==4 || $cor[0]==6) { // CMYK + return array(4, (100-$cor[1]), (100-$cor[2]), (100-$cor[3]), (100-$cor[4])); + } + else if ($cor[0]==1) { // Grayscale + return array(1, (255-$cor[1])); + } + // Cannot cope with non-RGB colors at present + die('Error in _invertColor - trying to invert non-RGB color'); +} + +function _colAtoString($cor) { + $s = ''; + if ($cor{0}==1) $s = 'rgb('.ord($cor{1}).','.ord($cor{1}).','.ord($cor{1}).')'; + else if ($cor{0}==2) $s = 'spot('.ord($cor{1}).','.ord($cor{2}).')'; // SPOT COLOR + else if ($cor{0}==3) $s = 'rgb('.ord($cor{1}).','.ord($cor{2}).','.ord($cor{3}).')'; + else if ($cor{0}==4) $s = 'cmyk('.ord($cor{1}).','.ord($cor{2}).','.ord($cor{3}).','.ord($cor{4}).')'; + else if ($cor{0}==5) $s = 'rgba('.ord($cor{1}).','.ord($cor{2}).','.ord($cor{3}).','.sprintf('%0.2F',ord($cor{4})/100).')'; + else if ($cor{0}==6) $s = 'cmyka('.ord($cor{1}).','.ord($cor{2}).','.ord($cor{3}).','.ord($cor{4}).','.sprintf('%0.2F',ord($cor{5})/100).')'; + return $s; +} + +function ConvertSize($size=5,$maxsize=0,$fontsize=false,$usefontsize=true){ +// usefontsize - setfalse for e.g. margins - will ignore fontsize for % values +// Depends of maxsize value to make % work properly. Usually maxsize == pagewidth +// For text $maxsize = Fontsize +// Setting e.g. margin % will use maxsize (pagewidth) and em will use fontsize + //Identify size (remember: we are using 'mm' units here) + $size = trim(strtolower($size)); + + if ( $size == 'thin' ) $size = 1*(25.4/$this->dpi); //1 pixel width for table borders + elseif ( stristr($size,'px') ) $size *= (25.4/$this->dpi); //pixels + elseif ( stristr($size,'cm') ) $size *= 10; //centimeters + elseif ( stristr($size,'mm') ) $size += 0; //millimeters + elseif ( stristr($size,'pt') ) $size *= 25.4/72; //72 pts/inch + elseif ( stristr($size,'rem') ) { // mPDF 5.6.12 + $size += 0; //make "0.83rem" become simply "0.83" + $size *= ($this->default_font_size / _MPDFK); + } + elseif ( stristr($size,'em') ) { + $size += 0; //make "0.83em" become simply "0.83" + if ($fontsize) { $size *= $fontsize; } + else { $size *= $maxsize; } + } + elseif ( stristr($size,'%') ) { + $size += 0; //make "90%" become simply "90" + if ($fontsize && $usefontsize) { $size *= $fontsize/100; } + else { $size *= $maxsize/100; } + } + elseif ( stristr($size,'in') ) $size *= 25.4; //inches + elseif ( stristr($size,'pc') ) $size *= 38.1/9; //PostScript picas + elseif ( stristr($size,'ex') ) { // Approximates "ex" as half of font height + $size += 0; //make "3.5ex" become simply "3.5" + if ($fontsize) { $size *= $fontsize/2; } + else { $size *= $maxsize/2; } + } + elseif ( $size == 'medium' ) $size = 3*(25.4/$this->dpi); //3 pixel width for table borders + elseif ( $size == 'thick' ) $size = 5*(25.4/$this->dpi); //5 pixel width for table borders + elseif ($size == 'xx-small') { + if ($fontsize) { $size *= $fontsize*0.7; } + else { $size *= $maxsize*0.7; } + } + elseif ($size == 'x-small') { + if ($fontsize) { $size *= $fontsize*0.77; } + else { $size *= $maxsize*0.77; } + } + elseif ($size == 'small') { + if ($fontsize) { $size *= $fontsize*0.86; } + else { $size *= $maxsize*0.86; } + } + elseif ($size == 'medium') { + if ($fontsize) { $size *= $fontsize; } + else { $size *= $maxsize; } + } + elseif ($size == 'large') { + if ($fontsize) { $size *= $fontsize*1.2; } + else { $size *= $maxsize*1.2; } + } + elseif ($size == 'x-large') { + if ($fontsize) { $size *= $fontsize*1.5; } + else { $size *= $maxsize*1.5; } + } + elseif ($size == 'xx-large') { + if ($fontsize) { $size *= $fontsize*2; } + else { $size *= $maxsize*2; } + } + else $size *= (25.4/$this->dpi); //nothing == px + + return $size; +} + + +function lesser_entity_decode($html) { + //supports the most used entity codes (only does ascii safe characters) + //$html = str_replace(" "," ",$html); // mPDF 5.3.59 + $html = str_replace("<","<",$html); + $html = str_replace(">",">",$html); + + $html = str_replace("'","'",$html); + $html = str_replace(""",'"',$html); + $html = str_replace("&","&",$html); + return $html; +} + +function AdjustHTML($html, $tabSpaces=8) { + //Try to make the html text more manageable (turning it into XHTML) + if (PHP_VERSION_ID < 50307) { + if (strlen($html) > 100000) { + if (PHP_VERSION_ID < 50200) $this->Error("The HTML code is more than 100,000 characters. You should use WriteHTML() with smaller string lengths."); + else ini_set("pcre.backtrack_limit","1000000"); + } + } + +/*-- ANNOTATIONS --*/ + preg_match_all("/(<annotation.*?>)/si", $html, $m); + if (count($m[1])) { + for($i=0;$i<count($m[1]);$i++) { + $sub = preg_replace("/\n/si", "\xbb\xa4\xac", $m[1][$i]); + $html = preg_replace('/'.preg_quote($m[1][$i], '/').'/si', $sub, $html); + } + } +/*-- END ANNOTATIONS --*/ + + preg_match_all("/(<svg.*?<\/svg>)/si", $html, $svgi); + if (count($svgi[0])) { + for($i=0;$i<count($svgi[0]);$i++) { + $file = _MPDF_TEMP_PATH.'_tempSVG'.RAND(1,10000).'_'.$i.'.svg'; + //Save to local file + file_put_contents($file, $svgi[0][$i]); + $html = str_replace($svgi[0][$i], '<img src="'.$file.'" />', $html); // mPDF 5.5.18 + } + } + + //Remove javascript code from HTML (should not appear in the PDF file) + $html = preg_replace('/<script.*?<\/script>/is','',$html); + + //Remove special comments + $html = preg_replace('/<!--mpdf/i','',$html); + $html = preg_replace('/mpdf-->/i','',$html); + + //Remove comments from HTML (should not appear in the PDF file) + $html = preg_replace('/<!--.*?-->/s','',$html); + + $html = preg_replace('/\f/','',$html); //replace formfeed by nothing + $html = preg_replace('/\r/','',$html); //replace carriage return by nothing + + // Well formed XHTML end tags + $html = preg_replace('/<(br|hr)\/>/i',"<\\1 />",$html); + // Get rid of empty <thead></thead> + $html = preg_replace('/<thead>\s*<\/thead>/i','',$html); + $html = preg_replace('/<tfoot>\s*<\/tfoot>/i','',$html); + $html = preg_replace('/<table[^>]*>\s*<\/table>/i','',$html); + $html = preg_replace('/<tr>\s*<\/tr>/i','',$html); + + // Remove spaces at end of table cells + $html = preg_replace("/[ \n\r]+<\/t(d|h)/",'</t\\1',$html); // mPDF 5.5.09 + + $html = preg_replace("/[ ]*<dottab\s*[\/]*>[ ]*/",'<dottab />',$html); + + // Concatenates any Substitute characters from symbols/dingbats + $html = str_replace('</tts><tts>','|',$html); + $html = str_replace('</ttz><ttz>','|',$html); + $html = str_replace('</tta><tta>','|',$html); + + $html = preg_replace('/<br \/>\s*/is',"<br />",$html); + + $html = preg_replace('/<wbr[ \/]*>\s*/is',"­",$html); // mPDF 5.6.04 + + // Preserve '\n's in content between the tags <pre> and </pre> + if (preg_match('/<pre/',$html)) { + $html_a = preg_split('/(\<\/?pre[^\>]*\>)/', $html, -1, 2); + $h = array(); + $c=0; + foreach($html_a AS $s) { + if ($c>1 && preg_match('/^<\/pre/i',$s)) { $c--; $s=preg_replace('/<\/pre/i','</innerpre',$s); } + else if ($c>0 && preg_match('/^<pre/i',$s)) { $c++; $s=preg_replace('/<pre/i','<innerpre',$s); } + else if (preg_match('/^<pre/i',$s)) { $c++; } + else if (preg_match('/^<\/pre/i',$s)) { $c--; } + array_push($h, $s); + } + $html = implode("", $h); + } + $thereispre = preg_match_all('#<pre(.*?)>(.*?)</pre>#si',$html,$temp); + // Preserve '\n's in content between the tags <textarea> and </textarea> + $thereistextarea = preg_match_all('#<textarea(.*?)>(.*?)</textarea>#si',$html,$temp2); + $html = preg_replace('/[\n]/',' ',$html); //replace linefeed by spaces + $html = preg_replace('/[\t]/',' ',$html); //replace tabs by spaces + + // Converts < to < when not a tag + $html = preg_replace('/<([^!\/a-zA-Z])/i','<\\1',$html); + $html = preg_replace("/[ ]+/",' ',$html); + + $html = preg_replace('/\/li>\s+<\/(u|o)l/i','/li></\\1l',$html); + $html = preg_replace('/\/(u|o)l>\s+<\/li/i','/\\1l></li',$html); + $html = preg_replace('/\/li>\s+<\/(u|o)l/i','/li></\\1l',$html); + $html = preg_replace('/\/li>\s+<li/i','/li><li',$html); + $html = preg_replace('/<(u|o)l([^>]*)>[ ]+/i','<\\1l\\2>',$html); + $html = preg_replace('/[ ]+<(u|o)l/i','<\\1l',$html); + + $iterator = 0; + while($thereispre) //Recover <pre attributes>content</pre> + { + $temp[2][$iterator] = preg_replace("/^([^\n\t]*?)\t/me", "stripslashes('\\1') . str_repeat(' ', ( $tabSpaces - (mb_strlen(stripslashes('\\1')) % $tabSpaces)) )",$temp[2][$iterator]); + $temp[2][$iterator] = preg_replace('/\t/',str_repeat(" ",$tabSpaces),$temp[2][$iterator]); + + $temp[2][$iterator] = preg_replace('/\n/',"<br />",$temp[2][$iterator]); + $temp[2][$iterator] = str_replace('\\',"\\\\",$temp[2][$iterator]); + $html = preg_replace('#<pre(.*?)>(.*?)</pre>#si','<erp'.$temp[1][$iterator].'>'.$temp[2][$iterator].'</erp>',$html,1); + $thereispre--; + $iterator++; + } + $iterator = 0; + while($thereistextarea) //Recover <textarea attributes>content</textarea> + { + $temp2[2][$iterator] = preg_replace('/\t/',str_repeat(" ",$tabSpaces),$temp2[2][$iterator]); + $temp2[2][$iterator] = str_replace('\\',"\\\\",$temp2[2][$iterator]); // mPDF 5.3.88 + $html = preg_replace('#<textarea(.*?)>(.*?)</textarea>#si','<aeratxet'.$temp2[1][$iterator].'>'.trim($temp2[2][$iterator]) .'</aeratxet>',$html,1); + $thereistextarea--; + $iterator++; + } + //Restore original tag names + $html = str_replace("<erp","<pre",$html); + $html = str_replace("</erp>","</pre>",$html); + $html = str_replace("<aeratxet","<textarea",$html); + $html = str_replace("</aeratxet>","</textarea>",$html); + $html = str_replace("</innerpre","</pre",$html); + $html = str_replace("<innerpre","<pre",$html); + + $html = preg_replace('/<textarea([^>]*)><\/textarea>/si','<textarea\\1> </textarea>',$html); + $html = preg_replace('/(<table[^>]*>)\s*(<caption)(.*?<\/caption>)(.*?<\/table>)/si','\\2 position="top"\\3\\1\\4\\2 position="bottom"\\3',$html); // *TABLES* + $html = preg_replace('/<(h[1-6])([^>]*)(>(?:(?!h[1-6]).)*?<\/\\1>\s*<table)/si','<\\1\\2 keep-with-table="1"\\3',$html); // *TABLES* + $html = preg_replace("/\xbb\xa4\xac/", "\n", $html); + + return $html; +} + +/*-- LISTS --*/ +function dec2other($num, $cp) { + $nstr = (string) $num; + $rnum = ''; + for ($i=0;$i<strlen($nstr);$i++) { + if ($this->_charDefined($this->CurrentFont['cw'],$cp+intval($nstr[$i]))) { // contains arabic-indic numbers + $rnum .= code2utf($cp+intval($nstr[$i])); + } + else { $rnum .= $nstr[$i]; } + } + return $rnum; +} + +function dec2alpha($valor,$toupper="true"){ +// returns a string from A-Z to AA-ZZ to AAA-ZZZ +// OBS: A = 65 ASCII TABLE VALUE + if (($valor < 1) || ($valor > 18278)) return "?"; //supports 'only' up to 18278 + $c1 = $c2 = $c3 = ''; + if ($valor > 702) // 3 letters (up to 18278) + { + $c1 = 65 + floor(($valor-703)/676); + $c2 = 65 + floor((($valor-703)%676)/26); + $c3 = 65 + floor((($valor-703)%676)%26); + } + elseif ($valor > 26) // 2 letters (up to 702) + { + $c1 = (64 + (int)(($valor-1) / 26)); + $c2 = (64 + (int)($valor % 26)); + if ($c2 == 64) $c2 += 26; + } + else // 1 letter (up to 26) + { + $c1 = (64 + $valor); + } + $alpha = chr($c1); + if ($c2 != '') $alpha .= chr($c2); + if ($c3 != '') $alpha .= chr($c3); + if (!$toupper) $alpha = strtolower($alpha); + return $alpha; +} + + +function dec2roman($valor,$toupper=true){ + //returns a string as a roman numeral + $r1=$r2=$r3=$r4=''; + if (($valor >= 5000) || ($valor < 1)) return "?"; //supports 'only' up to 4999 + $aux = (int)($valor/1000); + if ($aux!==0) + { + $valor %= 1000; + while($aux!==0) + { + $r1 .= "M"; + $aux--; + } + } + $aux = (int)($valor/100); + if ($aux!==0) + { + $valor %= 100; + switch($aux){ + case 3: $r2="C"; + case 2: $r2.="C"; + case 1: $r2.="C"; break; + case 9: $r2="CM"; break; + case 8: $r2="C"; + case 7: $r2.="C"; + case 6: $r2.="C"; + case 5: $r2="D".$r2; break; + case 4: $r2="CD"; break; + default: break; + } + } + $aux = (int)($valor/10); + if ($aux!==0) + { + $valor %= 10; + switch($aux){ + case 3: $r3="X"; + case 2: $r3.="X"; + case 1: $r3.="X"; break; + case 9: $r3="XC"; break; + case 8: $r3="X"; + case 7: $r3.="X"; + case 6: $r3.="X"; + case 5: $r3="L".$r3; break; + case 4: $r3="XL"; break; + default: break; + } + } + switch($valor){ + case 3: $r4="I"; + case 2: $r4.="I"; + case 1: $r4.="I"; break; + case 9: $r4="IX"; break; + case 8: $r4="I"; + case 7: $r4.="I"; + case 6: $r4.="I"; + case 5: $r4="V".$r4; break; + case 4: $r4="IV"; break; + default: break; + } + $roman = $r1.$r2.$r3.$r4; + if (!$toupper) $roman = strtolower($roman); + return $roman; +} +/*-- END LISTS --*/ + + +//=========================== +/*-- IMPORTS --*/ +function SetImportUse() { + $this->enableImports = true; + ini_set('auto_detect_line_endings',1); + require_once(_MPDF_PATH."mpdfi/pdf_context.php"); + require_once(_MPDF_PATH."mpdfi/pdf_parser.php"); + require_once(_MPDF_PATH."mpdfi/fpdi_pdf_parser.php"); +} + +// from mPDFI +function hex2str($hex) { + return pack("H*", str_replace(array("\r","\n"," "),"", $hex)); +} + +function str2hex($str) { + return current(unpack("H*",$str)); +} + + +function pdf_write_value(&$value) { + switch ($value[0]) { + case PDF_TYPE_NUMERIC : + case PDF_TYPE_TOKEN : + // A numeric value or a token. + // Simply output them + $this->_out($value[1]." ", false); + break; + + case PDF_TYPE_ARRAY : + // An array. Output the proper + // structure and move on. + $this->_out("[",false); + for ($i = 0; $i < count($value[1]); $i++) { + $this->pdf_write_value($value[1][$i]); + } + $this->_out("]"); + break; + + case PDF_TYPE_DICTIONARY : + // A dictionary. + $this->_out("<<",false); + reset ($value[1]); + while (list($k, $v) = each($value[1])) { + $this->_out($k . " ",false); + $this->pdf_write_value($v); + } + $this->_out(">>"); + break; + + case PDF_TYPE_OBJREF : + // An indirect object reference + // Fill the object stack if needed + $cpfn =& $this->current_parser->filename; + if (!isset($this->_don_obj_stack[$cpfn][$value[1]])) { + $this->_newobj(false,true); + $this->_obj_stack[$cpfn][$value[1]] = array($this->n, $value); + $this->_don_obj_stack[$cpfn][$value[1]] = array($this->n, $value); + } + $objid = $this->_don_obj_stack[$cpfn][$value[1]][0]; + $this->_out("{$objid} 0 R"); //{$value[2]} + break; + + case PDF_TYPE_STRING : + if ($this->encrypted) { + $value[1] = $this->_RC4($this->_objectkey($this->_current_obj_id), $value[1]); + $value[1] = $this->_escape($value[1]); + } + // A string. + $this->_out('('.$value[1].')'); + break; + + case PDF_TYPE_STREAM : + // A stream. First, output the + // stream dictionary, then the + // stream data itself. + $this->pdf_write_value($value[1]); + if ($this->encrypted) { + $value[2][1] = $this->_RC4($this->_objectkey($this->_current_obj_id), $value[2][1]); + } + $this->_out("stream"); + $this->_out($value[2][1]); + $this->_out("endstream"); + break; + + case PDF_TYPE_HEX : + if ($this->encrypted) { + $value[1] = $this->hex2str($value[1]); + $value[1] = $this->_RC4($this->_objectkey($this->_current_obj_id), $value[1]); + // remake hexstring of encrypted string + $value[1] = $this->str2hex($value[1]); + } + $this->_out("<".$value[1].">"); + break; + + case PDF_TYPE_NULL : + // The null object. + $this->_out("null"); + break; + } +} + +// ========== OVERWRITE SEARCH STRING IN A PDF FILE ================ +function OverWrite($file_in, $search, $replacement, $dest="D", $file_out="mpdf" ) { + $pdf = file_get_contents($file_in); + + if (!is_array($search)) { + $x = $search; + $search = array($x); + } + if (!is_array($replacement)) { + $x = $replacement; + $search = array($x); + } + + if (!$this->onlyCoreFonts && !$this->usingCoreFont) { + foreach($search AS $k=>$val) { + $search[$k] = $this->UTF8ToUTF16BE($search[$k] , false); + $search[$k] = $this->_escape($search[$k]); + $replacement[$k] = $this->UTF8ToUTF16BE($replacement[$k], false); + $replacement[$k] = $this->_escape($replacement[$k]); + } + } + else { + foreach($replacement AS $k=>$val) { + $replacement[$k] = mb_convert_encoding($replacement[$k],$this->mb_enc,'utf-8'); + $replacement[$k] = $this->_escape($replacement[$k]); + } + } + + // Get xref into array + $xref = array(); + preg_match("/xref\n0 (\d+)\n(.*?)\ntrailer/s",$pdf,$m); + $xref_objid = $m[1]; + preg_match_all('/(\d{10}) (\d{5}) (f|n)/',$m[2],$x); + for($i=0; $i<count($x[0]); $i++) { + $xref[] = array(intval($x[1][$i]), $x[2][$i], $x[3][$i]); + } + + $changes = array(); + preg_match("/<<\s*\/Type\s*\/Pages\s*\/Kids\s*\[(.*?)\]\s*\/Count/s",$pdf,$m); + preg_match_all("/(\d+) 0 R /s",$m[1],$o); + $objlist = $o[1]; + foreach($objlist AS $obj) { + if ($this->compress) { + preg_match("/".($obj+1)." 0 obj\n<<\s*\/Filter\s*\/FlateDecode\s*\/Length (\d+)>>\nstream\n(.*?)\nendstream\n/s",$pdf,$m); + } + else { + preg_match("/".($obj+1)." 0 obj\n<<\s*\/Length (\d+)>>\nstream\n(.*?)\nendstream\n/s",$pdf,$m); + } + $s = $m[2]; + if (!$s) { continue; } + $oldlen = $m[1]; + if ($this->encrypted) { + $s = $this->_RC4($this->_objectkey($obj+1), $s); + } + if ($this->compress) { + $s = gzuncompress($s); + } + foreach($search AS $k=>$val) { + $s = str_replace($search[$k],$replacement[$k],$s); + } + if ($this->compress) { + $s = gzcompress($s); + } + if ($this->encrypted) { + $s = $this->_RC4($this->_objectkey($obj+1), $s); + } + $newlen = strlen($s); + $changes[($xref[$obj+1][0])] = ($newlen - $oldlen) + (strlen($newlen) - strlen($oldlen )); + if ($this->compress) { + $newstr = ($obj+1) . " 0 obj\n<</Filter /FlateDecode /Length ".$newlen.">>\nstream\n".$s."\nendstream\n"; + } + else { + $newstr = ($obj+1) . " 0 obj\n<</Length ".$newlen.">>\nstream\n".$s."\nendstream\n"; + } + $pdf = str_replace($m[0],$newstr,$pdf); + } + + // Update xref in PDF + krsort($changes); + $newxref = "xref\n0 ".$xref_objid."\n"; + foreach($xref AS $v) { + foreach($changes AS $ck => $cv) { + if ($v[0] > $ck) { $v[0] += $cv; } + } + $newxref .= sprintf('%010d',$v[0]) . ' ' . $v[1] . ' ' .$v[2] . " \n"; + } + $newxref .= "trailer"; + $pdf = preg_replace("/xref\n0 \d+\n.*?\ntrailer/s",$newxref,$pdf); + + // Update startxref in PDF + preg_match("/startxref\n(\d+)\n%%EOF/s", $pdf, $m); + $startxref = $m[1]; + $startxref += array_sum($changes); + $pdf = preg_replace("/startxref\n(\d+)\n%%EOF/s","startxref\n".$startxref."\n%%EOF",$pdf); + + // OUTPUT + switch($dest) { + case 'I': + //Send to standard output + if(isset($_SERVER['SERVER_NAME'])) + { + //We send to a browser + Header('Content-Type: application/pdf'); + Header('Content-Length: '.strlen($pdf)); + Header('Content-disposition: inline; filename='.$file_out); + } + echo $pdf; + break; + case 'F': + //Save to local file + if (!$file_out) { $file_out = 'mpdf.pdf'; } + $f=fopen($file_out,'wb'); + if(!$f) die('Unable to create output file: '.$file_out); + fwrite($f,$pdf,strlen($pdf)); + fclose($f); + break; + case 'S': + //Return as a string + return $pdf; + case 'D': + default: + //Download file + if(isset($_SERVER['HTTP_USER_AGENT']) and strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')) + Header('Content-Type: application/force-download'); + else + Header('Content-Type: application/octet-stream'); + Header('Content-Length: '.strlen($pdf)); + Header('Content-disposition: attachment; filename='.$file_out); + echo $pdf; + break; + } +} + + +function GetTemplateSize($tplidx, $_w=0, $_h=0) { + if (!$this->tpls[$tplidx]) + return false; + $w = $this->tpls[$tplidx]['box']['w']; + $h = $this->tpls[$tplidx]['box']['h']; + if ($_w == 0 and $_h == 0) { + $_w = $w; + $_h = $h; + } + if($_w==0) + $_w=$_h*$w/$h; + if($_h==0) + $_h=$_w*$h/$w; + return array("w" => $_w, "h" => $_h); +} + +// Thumbnails +function Thumbnail($file, $npr=3, $spacing=10) { //$npr = number per row + $w = (($this->pgwidth + $spacing)/$npr) - $spacing; + $oldlinewidth = $this->LineWidth; + $this->SetLineWidth(0.02); + $this->SetDColor($this->ConvertColor(0)); + $h = 0; + $maxh = 0; + $x = $_x = $this->lMargin; + $_y = $this->tMargin; + if ($this->y==0) { $y = $_y; } else { $y = $this->y; } + $pagecount = $this->SetSourceFile($file); + for ($n = 1; $n <= $pagecount; $n++) { + $tplidx = $this->ImportPage($n); + $size = $this->useTemplate($tplidx, $x, $y, $w); + $this->Rect($x, $y, $size['w'], $size['h']); + $h = max($h, $size['h']); + $maxh = max($h, $maxh); + if ($n % $npr == 0) { + if (($y + $h + $spacing + $maxh)>$this->PageBreakTrigger && $n != $pagecount) { + $this->AddPage(); + $x = $_x; + $y = $_y; + } + else { + $y += $h+$spacing ; + $x = $_x; + $h = 0; + } + } + else { + $x += $w+$spacing ; + } + } + $this->SetLineWidth($oldlinewidth); +} + +function SetSourceFile($filename) { + $this->current_filename = $filename; + $fn =& $this->current_filename; + if (!isset($this->parsers[$fn])) + // $this->parsers[$fn] =& new fpdi_pdf_parser($fn,$this); + $this->parsers[$fn] = new fpdi_pdf_parser($fn,$this); + if (!$this->parsers[$fn]->success) { + $this->Error($this->parsers[$fn]->errormsg); // Delete this line to return false on fail + return false; + } + $this->current_parser =& $this->parsers[$fn]; + return $this->parsers[$fn]->getPageCount(); +} +function ImportPage($pageno=1, $crop_x=null, $crop_y=null, $crop_w=0, $crop_h=0, $boxName='/CropBox') { + $fn =& $this->current_filename; + $parser =& $this->parsers[$fn]; + $parser->setPageno($pageno); + + $this->tpl++; + $this->tpls[$this->tpl] = array(); + $tpl =& $this->tpls[$this->tpl]; + $tpl['parser'] =& $parser; + $tpl['resources'] = $parser->getPageResources(); + $tpl['buffer'] = $parser->getContent(); + if (!in_array($boxName, $parser->availableBoxes)) + return $this->Error(sprintf("Unknown box: %s", $boxName)); + $pageboxes = $parser->getPageBoxes($pageno); + /** + * MediaBox + * CropBox: Default -> MediaBox + * BleedBox: Default -> CropBox + * TrimBox: Default -> CropBox + * ArtBox: Default -> CropBox + */ + if (!isset($pageboxes[$boxName]) && ($boxName == "/BleedBox" || $boxName == "/TrimBox" || $boxName == "/ArtBox")) + $boxName = "/CropBox"; + if (!isset($pageboxes[$boxName]) && $boxName == "/CropBox") + $boxName = "/MediaBox"; + if (!isset($pageboxes[$boxName])) + return false; + $box = $pageboxes[$boxName]; + + $tpl['box'] = $box; + // To build an array that can be used by useTemplate() + $this->tpls[$this->tpl] = array_merge($this->tpls[$this->tpl],$box); + // An imported page will start at 0,0 everytime. Translation will be set in _putformxobjects() + $tpl['x'] = 0; + $tpl['y'] = 0; + $tpl['w'] = $tpl['box']['w'] ; + $tpl['h'] = $tpl['box']['h'] ; + if ($crop_w) { $tpl['box']['w'] = $crop_w; } + if ($crop_h) { $tpl['box']['h'] = $crop_h; } + if (isset($crop_x)) { $tpl['box']['x'] = $crop_x; } + if (isset($crop_y)) {$tpl['box']['y'] = $tpl['h'] - $crop_y - $crop_h ; } + + $page =& $parser->pages[$parser->pageno]; + // fix for rotated pages + $rotation = $parser->getPageRotation($pageno); + + if (isset($rotation[1]) && ($angle = $rotation[1] % 360) != 0 && $tpl['box']['w'] == $tpl['w']) { + $steps = $angle / 90; + + $_w = $tpl['w']; + $_h = $tpl['h']; + $tpl['w'] = $steps % 2 == 0 ? $_w : $_h; + $tpl['h'] = $steps % 2 == 0 ? $_h : $_w; + if ($steps % 2 != 0) { + $x = $y = ($steps == 1 || $steps == -3) ? $tpl['h'] : $tpl['w']; + } else { + $x = $tpl['w']; + $y = $tpl['h']; + } + $cx=($x/2+$tpl['box']['x'])*_MPDFK; + $cy=($y/2+$tpl['box']['y'])*_MPDFK; + $angle*=-1; + $angle*=M_PI/180; + $c=cos($angle); + $s=sin($angle); + $tpl['box']['w'] = $tpl['w'] ; + $tpl['box']['h'] = $tpl['h'] ; + $tpl['buffer'] = sprintf('q %.5F %.5F %.5F %.5F %.2F %.2F cm 1 0 0 1 %.2F %.2F cm %s Q',$c,$s,-$s,$c,$cx,$cy,-$cx,-$cy, $tpl['buffer']); + } + return $this->tpl; +} +function UseTemplate($tplidx, $_x=null, $_y=null, $_w=0, $_h=0) { + if (!isset($this->tpls[$tplidx])) + $this->Error("Template does not exist!"); + if($this->state==0) { $this->AddPage(); } + $out = 'q 0 J 1 w 0 j 0 G'."\n"; // reset standard values + $x = $this->tpls[$tplidx]['x']; + $y = $this->tpls[$tplidx]['y']; + $w = $this->tpls[$tplidx]['w']; + $h = $this->tpls[$tplidx]['h']; + if ($_x == null) { $_x = $x; } + if ($_y == null) { $_y = $y; } + if ($_x === -1) { $_x = $this->x; } + if ($_y === -1) { $_y = $this->y; } + + $wh = $this->getTemplateSize($tplidx,$_w,$_h); + $_w = $wh['w']; + $_h = $wh['h']; + $out .= sprintf("q %.4F 0 0 %.4F %.2F %.2F cm", ($_w/$this->tpls[$tplidx]['box']['w']), ($_h/$this->tpls[$tplidx]['box']['h']), $_x*_MPDFK, ($this->h-($_y+$_h))*_MPDFK)."\n"; + $out .= $this->tplprefix.$tplidx." Do Q\n"; + + $s = array("w" => $_w, "h" => $_h); + $out .= "Q\n"; + $this->pages[$this->page] = $out . $this->pages[$this->page]; + return $s; +} +function SetPageTemplate($tplidx='') { + if (!isset($this->tpls[$tplidx])) { + $this->pageTemplate = ''; + return false; + } + $this->pageTemplate = $tplidx; +} +function SetDocTemplate($file='', $continue=0) { + $this->docTemplate = $file; + $this->docTemplateContinue = $continue; +} +/*-- END IMPORTS --*/ + + +/* ---------------------------------------------- */ +/* ---------------------------------------------- */ +/* ---------------------------------------------- */ +/* ---------------------------------------------- */ +/* ---------------------------------------------- */ + +// JAVASCRIPT +function _set_object_javascript ($string) { + $this->_newobj(); + $this->_out('<<'); + $this->_out('/S /JavaScript '); + $this->_out('/JS '.$this->_textstring($string)); + $this->_out('>>'); + $this->_out('endobj'); +} + +function SetJS($script) { + $this->js = $script; +} + + + + +}//end of Class + + + + +?> diff --git a/include/mpdf/patterns/de.php b/include/mpdf/patterns/de.php new file mode 100755 index 0000000000000000000000000000000000000000..01548ed8e4cb3a242dd1d26192b7e1869dc670b4 --- /dev/null +++ b/include/mpdf/patterns/de.php @@ -0,0 +1,9 @@ +<?php +/* + Adapted from Hyphenator 1.0.2 + http://code.google.com/p/hyphenator/ +*/ + +$patterns="_a6 _ab3b _aben2 _ab5l _abo4 _ab3ol _ab1or _ab5r _ab3s2 _ack2 _ag4r _ag2u _ai2s _al3br _al2e _al5l4en _alt3s _amt6s3 _an3d _ang4 _an1gl _ang6li _an5go _angs4 _an3k _an3s _an4si_ _ans2p _an4tag _ap3s2 _ar3k2a _ar4m3ac _ar4s _ar4t3ei _as1t _as4ta _au3d _au4f5 _au4s1 _aus3p _\xc3\xa44 _\xc3\xa4t2s _b6 _bau1s _be1er _be3r2e _ber4g3a _ber4g3r _bi4o _boge2 _c2 _ch2 _che4f _d4 _da4r1 _dar3in _dar2m _da4te_ _da4tes _de4al _de1i _de3r4en _de1s _de3sk _de3s2t _di2a _do3b _do2mo _do1pe _d\xc3\xbc1b _e4 _ebe2 _ei3e2 _ei3k _ei4ne _ei5ner _ei5nes _ei4sp _ei4st _ei2tr _el2bi _els7t _em3m2 _en2 _end3er _en4d3r _en3du _enn2 _en3s _en4t3 _en5te_ _en3z _er4der _er1e _er1i _er8stein _es1p _es1ta _est4e _es1th _es3tr _et4s _eu3 _eu1c _f6 _fi3est _fi4le_ _fi4len _fin6s _fi2s _fs4 _fu2sc _g6 _ga4me _ga4t _gd2 _gel2d _gen4a _ge3nar _ge3ne _ge3r2a _ge3r2e _ge3s4a _ge1u _gus4s3 _h4 _ha3bi _haft5s _hal2s _hau4t1 _he2 _he3cke _he3ri _he6r5inn _he5xe _his1 _ho4met _i4 _ia4 _in3 _ink4 _inu3 _is2a _is2tr _jor5 _k6 _ka2b5l _ka2i _klan4 _ko3b _ks2 _k\xc3\xbc1b _l4 _le4ar _lo4g3in _lo3ver _m4 _ma3d _ma5ge _ma3la _ma4st _men8schw _mi2s _mi4t _n4 _n\xc3\xa4s3c _ne4s _nich2 _ni4e _nob4 _no6th _nus4 _o6 _oa3 _ob1a _obe2 _ob3l _oper4 _or2a _ort4 _orts3e _oste4 _os8t7ende _ost3r _ozo4 _\xc3\xb64 _p4 _pat4s _pf4 _ph2 _poka2 _pro1 _r4 _reb3s2 _re3cha _rein4t _reli1 _reli3e _re3sti _res4tr _ro6a _ro3be _ro2h _ro3m2a _rut2 _r\xc3\xbc1b _s6 _sch4 _sen5s _ser2u _se2t _si2e _sim3p4 _si4te _ski3e _spra2 _st6 _sto4re _t6 _ta5ge4s _ta3mi _ta2to _tehe3 _te3le _te4st _ti2s _to2n _to4ni _to4st _to2w _tri3es _tro4s _ts4 _tu3ra _tu3ri _u6 _uf2e2 _ul4mei _um3 _umo2 _un3d _un3g _uni4t _un3s _un5s4t _ur1 _urin4 _ur3o2m _uro2p _ut2a _ut3r _\xc3\xbc2 _v2 _ve4r _vol2 _voll3e _vo4r _w2 _wah6l _wa3re _we2 _weg3 _wi4e _wor2 _wor6t5en _x4 _xe1 _y4 _ya4l _z4 _zah4n _za4s _zi2e _zwe4 6a_ 2aa a1ab aa2be aa1c aa2gr aa4l\xc3\xb6 a1an aa2r1a aa3re aar3f4 aar3k4 aar3tr aas3t aat6s3 a3au a1\xc3\xa4 2aba ab1ar a2b1au ab1\xc3\xa4 1abbi 1abd a1be ab1eb abe1e abei3 ab1eil 2a3bel abe2la abe2na ab1erk ab1err ab1erz ab3esse 4abet 3abf 5abfa 1abg 1abh 2abi ab1ins ab1ir ab1iso ab1it 1abk ab3l 1a2b5la 3a2b5l\xc3\xa4 2able ab4le_ a3blis a2b7lu 3abn a2bo_ 1a2bon ab3r ab5re 1absc ab3s2i ab5sp abs4t6 ab7sta ab5st\xc3\xa4 ab3sz 1abtei 2a1bu ab3ur 2ab\xc3\xbc 1abw 2aby 1abz 2ac_ 4aca a1cem ach1a ach3ak a1chal ach3au a1che a2ch1e2c ach1ei a4ch3erf ach3erw a3ches a3chet 4achf a1chi ach5l ach3m a1cho ach1o4b ach3r achs2p acht1o 4a1chu ach1u2f ach3\xc3\xbc 4achv ach1w ac1in a1cka ack2en a3cki a4ckin ack3sl ack7sta4 acon4n 2acu a1\xc3\xa7 2a1d 4ad_ ada1b a4d1ac a2d1an 3ad5ap a3dar3 4adav 3a2d\xc3\xa4 3add adefi4 ad1ein ade1ra 4ades ade3s2p ades4s ade3st ade1u 4ad2i adi3en adi3er_ ad2ob a2dr 4ad3rec ad4res a3dro ad5ru ads2 ad3s\xc3\xa4 ad3sp ad3st ad4t1 adt3a adt5r 2ae a1e2b a1e2d a1ei a1el_ a2ela a2ele a2eli a1els a1em ae2o3 a1e2p ae1r aes1 a1e2x a2f1a a3fah a3fal af3an af2ar a3fat 2afe a2f1ec a2fent af1erl af4f3l 2a3fi af5l a3f2o af3ra af4rag af1rau af3r\xc3\xa4 af3re af3r\xc3\xb6 af3ru af2sp afs4t 2aft af2t1a af3tab af2tei af2t3r af4t5re af2tur 2a1g 4aga ag1a2b ag3a2d ag1ar ag1au ag2du a4gem a7gen_ age2na a4gent age2nu a5ger age4se age4s3p ages3s a4g5esse age4sti ag3gl 3aggr 4agi 5a2git 4a2g3l ag4lei ag7lo a3g4n a4g5na a5gnat ag6nu a2go a3gon_ a3gons a3gor a2g3re a2g3ri a3gru agsa2 ag4sam ag4set ag6s5p ag7spi ag3sta ag3ste ags3tr a2g1und 2ah_ 2a1ha 2a1he a2h1erh a1hi ahl5a4 ah2l1ei ah5len ah4l3erh ah3li ahl1o ah4l\xc3\xb6 ahl3sz ah3ma ah3me ah4n3a ah1os a2h1\xc3\xb6 ahr1a ah3r2e ah4rei ah1ri ahrta2 ahr4t3ag 2ahs aht3sp a1hu ah1w 2ai ai1a aib3l ai1er aif2 ai3g4 a3ik_ ai3ku ai2lo ai3n a1ind ain4e a3ing ain3sp ai4nu ai3o ai2sa a3isch_ ais2e ais3s a2it a3iv_ a3ivl a3ivs a1j aje4 2ak_ a2ka3d 2a3kam ak4at 2akb akbe4 2akc 2akd 4a1ke a2kef 2a1ki 2ak3l ak4li ak3n 2ako 2a1kr ak3rau 2aks 2akta ak3t2an 2aktb ak5ten 2aktm ak2t3r 2aktst 2a1ku 4a3k\xc3\xbc 1akz 2al al1ab al3abi al3abs a1lac ala5ch al3ade al1af ala6g al3age a3l4a1l al3am al5amp al1ana a1lanc al1ans al3anz a2lar a3lar_ al2arm ala4s al3asi al3ass a1lat al1au al3aug a1l\xc3\xa4 al1\xc3\xa4m al1\xc3\xa4r al4berh al4b3erw al2b3l al2boh al2br alb3ru alb3s al2da al2d\xc3\xa4 al3dri ald3s2t al3du 4ale 5a2l1e2b 5a2l1ef a4l1eh a2l1ei a2l1el a3len_ al3ends 6aler_ a2l1erb 5a2l1erf a2l1erh a2l1ert 5alerz a2l1esk ale4t al3eta al3eth a2l1eu 5alex alf2e 3algi al2gli 1algo 4ali a2lim ali4nal al1ins a2linv al2k1ar alk1l al2kla alk3s4 al2lab all1an al2l3a6r al2l1au al2lec 5allee al3lend alli5er_ alli7ers_ 3almb a2l1ob a3log al1ope al1\xc3\xb6 al2\xc3\xb6s 3alph al4schi al3sp al4spal al5s6terb al2ta alt1ak al3tam al2tel alt4ere al4t3erf 4alth al2tri 3alty a1lu al2uf a2lum al1ur a3lus 4aly 2am 4am2a amab4 ama3d ama5g 4ambiq am4e 6ame_ a2meb ame2n amer2 ame3ra a2meri ame3ru a4mese a5met a3mie a3mil amil5l 4a3mir ami3t2a ami5ti am4m\xc3\xa4 am2min ammu2 4amo 3a4m\xc3\xb6 ampf3a2 am3pr am2s am3sa am3str 3amt_ am2t1a am4t3ern am4th am2to am2t\xc3\xb6 am2t3r am4tre am2tu 4amu am3unt a1na 6ana_ ana3c a3na3d anadi1 2anan 4ana5s2 2anat an1\xc3\xa4s 4and_ ande4s an2d5r\xc3\xbc an2d1ur 4ane an1e4c an1ek 5a4n1erb an3eth anft5s 4ang_ 3angeb ang5erl ang5erz ang3l an2gla an2gl\xc3\xa4 an3go ang3ra 1angri 4angs_ ang5sc ang6s5po ang3str 3an3h 4anho 4a3n2i ani3els ani5ers_ 5a4nim a4n3ins 6anj an2kan an3k4l an4kl\xc3\xb6 an2k3no an2k1r ank3ra ank3r\xc3\xa4 ank5ti an2ky 1anl 3anli 4anmo 2ann 3an3n2a 3ann\xc3\xa4 an5ne an3od 2anom an1or a1n\xc3\xb6 3anr 3ans\xc3\xa4 1ansc an3s2en an2seu an2s1pa 1anspr an3s2t an5stei an3s2z 1ant\xc3\xa1 1antei 3antenn an3th 2anto 1antr an2tro 3antw 6anu a3nus a1n\xc3\xbc 1anw 3anw\xc3\xa4 2anx 2anz 3anzah 3anzei anz5erst an2z1i4n 3anzo 3anzu 3anz\xc3\xbc an2zwi ao1i a1op a1o4s5 a3ot_ 2ap_ 4a1pa a1p\xc3\xa4 a1pe a2pe_ ap2fa a3pfl a5ph\xc3\xa4 a1pi 2a2p3l ap2n apo5s ap3pl 2a1pr ap2sc 2apu 2ar_ 2a1ra ar2ab4 ara3d2 a2r3al ar1ans ar3anz 4arar a2r1au a1r\xc3\xa4 2arb_ 2arba ar2bau ar2bec arb3eie 2arben 2arbi ar2b5l 2arbr 2arbs2 arb3sp 2arbt 2arbu ar2b3un ar1c 2are a2rea are5b a2ref ar1eff a4reg a2rein a5ren a2rena a2rene ar2ent ar2erf a2r1erh are3u ar2ew 2arf ar2f3r ar2gl ar4gn 2arh 4a3ri ar2ia a4r1im a4r1ind a4r1int a5riu ar3kad ar2k1ar ark3aue ar2kl ark1r ar2kra ar2kr\xc3\xa4 ar6kri ark3sa ar2les arma5g arm2\xc3\xa4 3armee arm3erk 2arn ar2nan ar5n2e 2a1ro ar1ob ar3o2d a3rol a2rop a2ror 2arp ar4p3f 4arren ar2rh arr3he 4arrt 2ar2s ar4schl ar4schr ar5se ar3s2h ar3su ar2tau art2ho 2arto ar2t3r 2arts 2a1ru a4r1u4f ar3\xc3\xbc 2arv 2a1ry ar2z\xc3\xa4 2arze 1arzt ar2z1w 2as as4al as1au as3aug a2s1\xc3\xa4 6asc a6sca a4schec a2sch3l a2schm 6as2e a2seb aseli5 a2s3e2m a3ses 6ash as2hi a5si_ as3m as1o2f a3sol a3som as1or a2s1\xc3\xb6 a2s1p as3pan as5pe a4s2ph as3pi a4spl as2po as3s2a as5sac as4sei as5s2i as2s1p as2st as4sti as4sto as3str a2st a4s1ta a5s4tas as2tau as3te as3ti ast3rau as4t3re a2s\xc3\xbc 3asyl a1\xc3\x9f a\xc3\x9fe4 a\xc3\x9fen1 2a1t 4ata at1a2be at2a1f at4ag ata3go a4t1akt ata1la at1apf ata3s a2t3au2 a2t1\xc3\xa4 at2c 4a3te a4teb at2en aters4 ater3st a4tew 4atf 4atg at2he 5athl a4thr 4a3ti at1int 3atm 4atmus ato4man at1ort 4atp 4atr atra6t at3r\xc3\xa4 at3re at2s at3sc at4set ats1p 5attac at2t1ak att3ang atta3s at2tei at5th\xc3\xa4 at4t3r\xc3\xa4 4atu atu4n atu4rer at3w 4atz atz1a atz3erk at4z3erw at2z1in atzt2 atz3th a2u 2au_ au3a2 2aub au2bl 2auc auch4se auch3ta 2aud au3di au2dr 2aue aue2b aue3re au5erein aue4s au3et au2fa auf1an auf1er au5fer_ au4ferl 3aufn 2aug au5g6e 4au1i au3in au2is 4auj au2kl 2aul aule6s aul3ese aul4s au3l\xc3\xbc 4aum au2mal au2mer au2m1o aum3p2 6au3n2 au1na aun3s a4unz au1o aup4ter 2au1r4 au3re ausan8ne_ au2sau 2au2sc au3schl au3schw aus3erp au4s3erw au2so au2s1p aus3s6 3aussag aus4se_ au2st aus3tri 2aut_ au2ta au3tan au2t\xc3\xa4 2aute aut5erkr 3auto aut2o3f 2auts 2aux auz2w 2a1v av4a a2vr 2a1w awi3e a1x ax4a ax5an ax2e 2a1ya a1yeu ays2 aysi1e ay1ste 2a1z az4a a3z2i az2u \xc3\xa41a \xc3\xa43am \xc3\xa41b \xc3\xa42b3l \xc3\xa4b2s \xc3\xa41che \xc3\xa4che1e \xc3\xa41chi \xc3\xa4ch3l \xc3\xa42chr \xc3\xa4ch2sp \xc3\xa4ch4st \xc3\xa41chu \xc3\xa41ck \xc3\xa4ck4e \xc3\xa41d \xc3\xa43di \xc3\xa44d1ia \xc3\xa43do \xc3\xa42d3r 2\xc3\xa43e \xc3\xa4f2fl \xc3\xa4f5l \xc3\xa4f3r \xc3\xa4f2s \xc3\xa4ft4s3 \xc3\xa41g \xc3\xa4ge1i \xc3\xa4ges4 \xc3\xa42g3l \xc3\xa4g2n \xc3\xa44g3na \xc3\xa42g3r \xc3\xa4g3s2tr 1\xc3\xa42gy \xc3\xa4h1a 2\xc3\xa43he \xc3\xa41hi \xc3\xa4h5l2e \xc3\xa4h3li \xc3\xa4h5ne \xc3\xa4h5ri 2\xc3\xa4hs 2\xc3\xa4ht4 \xc3\xa4h3tr \xc3\xa41hu \xc3\xa4h1w \xc3\xa41im \xc3\xa43isch_ \xc3\xa41j \xc3\xa41k \xc3\xa42k3l \xc3\xa42k3r \xc3\xa41la \xc3\xa4lbe2 \xc3\xa4l2bl \xc3\xa4le3ru \xc3\xa4l2p3 \xc3\xa4l2s \xc3\xa4l3se \xc3\xa4lt4e \xc3\xa41lu \xc3\xa43me \xc3\xa4mi3en 2\xc3\xa4ml 2\xc3\xa4n_ \xc3\xa41na \xc3\xa4n2dr 2\xc3\xa43ne \xc3\xa4ne2n1 \xc3\xa4n2f5 \xc3\xa4n2gl \xc3\xa4n2gr 2\xc3\xa43n2i \xc3\xa4n5k2e \xc3\xa4n2k3l \xc3\xa4n2kr \xc3\xa4nk2s 2\xc3\xa4nn \xc3\xa4n5n4e2 2\xc3\xa4ns \xc3\xa4n4s3c \xc3\xa4nse3h \xc3\xa41on \xc3\xa41pa \xc3\xa4p2pr \xc3\xa4p2st 1\xc3\xa4q \xc3\xa42r5a2 \xc3\xa4r1\xc3\xa4 \xc3\xa4r1c 2\xc3\xa4re \xc3\xa42r1ei \xc3\xa4re2n \xc3\xa42r3ene \xc3\xa4rg5l \xc3\xa4r2gr \xc3\xa41ri \xc3\xa4r1int \xc3\xa4r2k3l \xc3\xa4rk2s \xc3\xa4r3me \xc3\xa4r1o2 \xc3\xa41r\xc3\xb6 \xc3\xa4r2s \xc3\xa4rt4e \xc3\xa4rt2s3 \xc3\xa41ru \xc3\xa4r2z1w \xc3\xa4s2a \xc3\xa4s2e \xc3\xa4se3g \xc3\xa4se3ri \xc3\xa4skop2 \xc3\xa43s2kr \xc3\xa42s1p \xc3\xa4s6s3c \xc3\xa4s4s3erk \xc3\xa4s2st \xc3\xa44s3t \xc3\xa4s5ti \xc3\xa4s4tr \xc3\xa41\xc3\x9f 2\xc3\xa4t \xc3\xa4t1a2 \xc3\xa45te \xc3\xa4te1i \xc3\xa4te2n \xc3\xa4t2ha \xc3\xa41to \xc3\xa4t1ob \xc3\xa4t1r \xc3\xa4t3ro \xc3\xa4t2s\xc3\xa4 \xc3\xa4t4schl \xc3\xa4t4schr \xc3\xa4t2s1i \xc3\xa4ts3l \xc3\xa4t3so \xc3\xa4t4sof \xc3\xa4t2s1p \xc3\xa4t4st \xc3\xa4ts3te \xc3\xa4t2tr \xc3\xa43tu \xc3\xa4t3v \xc3\xa42u \xc3\xa4u2br \xc3\xa4u1c \xc3\xa4u3el \xc3\xa44uf \xc3\xa4uf2e \xc3\xa4ug3l 2\xc3\xa4ul 2\xc3\xa4um \xc3\xa4u2ma \xc3\xa4um2s \xc3\xa4un2 \xc3\xa4u3nu 2\xc3\xa4u5r 2\xc3\xa43us_ \xc3\xa4u2sc \xc3\xa4u6sch\xc3\xa4 \xc3\xa4u4schm \xc3\xa4u5se \xc3\xa43usk \xc3\xa43usn \xc3\xa4u4sp 1\xc3\xa4u\xc3\x9f \xc3\xa4u2tr \xc3\xa41v 1\xc3\xa4x \xc3\xa41z \xc3\xa21t \xc3\xa11n 4b_ 1ba b1abs ba1cha bach5t4e backs4 2b3adr 3bah bah2nu bah5re bais4 b2ak ba2ka ba2k3er ba2k1i ba2kra 3bal ba1la bal6lerg bal3th 2b3am ban2a 3b2and ban2dr ba3n4e ba5ner 2bang ban2k1a ban4kl 2banl 2b1ans b3anz ba2ran bar3b b2ard bar3de ba2rei bar3ins b2arr bar3zw 3bas ba5sa ba4st ba2to bau3b bau1fr bau3g 3b2auk 3baur bau3s bau1s2k ba1yo 3b2\xc3\xa41c b\xc3\xa45cke 1b\xc3\xa4e 1b2\xc3\xa4r 1b2\xc3\xa4s b1\xc3\xa4ug b\xc3\xa4u3s 4b1b b5ba b5bi b2bli bb3lin b3blo b3bl\xc3\xb6 bbru2c bb2s bbu1 2b3c 2b5d bde1st bdo3 bdu3s 1be_ 5be3a be5an be4at_ be4au_ b2ebe 1be1c be2del bedi4 be1eh be3eta be3g6 2beier bei1f beil2 bei3la 3b2ein bei5na be1ind be1in2h bei3sc beis2e bei3st beit2s1 be3las be3lei be2l1en be2let be3li bel3la bel3sp belt4 bel3ta bel3tr be5lu 1bem 1ben_ be1na be2nal be2nau ben2dr be3ne be4ners be3ni ben2se ben2sp ben2su 3b2enti b1ents ben1un ben5z4 ben3ze be1o be1ra ber3am be2ran ber3as ber1\xc3\xa4 berd4 bere4s ber3esc ber4in_ ber3iss ber3na b1ernt be1rop ber3sta ber3th be3rum 1be1s2 be3sa be4s3er be3slo be3spo bes5s4e b3esst_ bes3sz 3bet be3th be1ur 3bew 2b1ex 1bez 2b5f4 bfal2 2b5g4 bge3 bges4 2b5h 1bi bi2e bi3ens bi3ent bie2s bi2ke_ bi2kes bi3ki bil4a 2b1illu bi1l\xc3\xb6 bi2lu bi1na 2b1inb bin2e 2b1inf 2b3int bi2o bi3on biri1 3bis bi5se bi2sol bis4s3c bi4st bi2t b2i3ta bi3te bi3to 2bi4tu b2i5tus biz2 bi3za 4b3j 2b5k4 b2l2 2bl_ b4la_ bla3b6 4b3lad b3lag b6lanc 6blasser b6latt bl\xc3\xa4s3c 3blea b3lee 2b5leg b3leh b5lein ble3l b4lem b4ler b5lese 3b4let 2blich 3blick b5lief 2b3lis 3blitz 1b4lo b6loc b5lok 2b3lun blu4ter 3bl\xc3\xbc 2b5m bmu2 6b5n2 bni2s1 1bo bo5as bo2b3l bo3b4r bo2c bo3ch bo3cke bo3d2 bo2e3i 2b3of bo1is bo2lan 3bon_ bon2d1e bo2ne 3bons b1op bo1r2a bor2d3i bo2rei bor2s b1ort bor4tei bor2t3r bo2sc bos5p 3bot bo3te bo3th bour4n b\xc3\xb62b3 2b3\xc3\xb6f b\xc3\xb63sc 2b3p2 bpa4g b1q b2r4 2br_ b4ra_ 2b3rad b6rah b6ra3k bra3st4 2bre_ 6brechte 2b3ref 2breg b3reif b3rek 2b3rep b6rer b6res b4ri 2b5riem bri2er 2b5rig b5ris b5roh 2b3rol b4ruc 4b1s b2s3ad b3sand bs1ang b5sat2 bsatz1 b5sc b7scha bs4cu b3se b5se_ bs1e2b b5sel b5sen bs1er b4serf b5ses b5set bs1ex b2s1of bs1op bso2r bs2pl b3spu bs5s2 bs2t bst1ac bst1ak bst3auf bs3t\xc3\xa4t bst1er bst1h b3sto b3stu b3st\xc3\xbc bs3ty b2s1un b3s\xc3\xbc bs2ze 4b1t b3ta btast3r b3t\xc3\xa4 b5te b2t1h b3to b3tr b3tu bt\xc3\xbc1 b2u bu2chi bu2e bu2f 3bui bul2la 2b3umk bu3na 2bunk b4urg bu3r4i bu2s bus3cha bu3se bu4s1er bu4s3p bus1u bu3\xc3\x9fe 1b2\xc3\xbc b\xc3\xbc1c b\xc3\xbcge2 b\xc3\xbcgel3e 2b3v 2b5w 1by by1a by1n by3p by4t 2b5z2 bzei2t1 2c_ 1c4a 2ca1b ca1ch cae3 3caf ca3g4 ca1h 3cal ca1la cal3t 3cam 3car car3n ca3s2a3 ca3th ca1y2 c\xc3\xa43 4c1c cch2 4cd c1do 1ceb 2cec ce2dr 2cef ce1i 1cen ce3nu 1cer ce1ro ce1st 1cet ce3ta ce3ty ce1u 1c\xc3\xa9 2c1f c2h 4ch_ 2chab ch3abi ch1ah ch1ak 5chanc ch3anst 4chanz 3chao ch1ap 4char_ ch5atm 3chato ch1\xc3\xa4rm ch1\xc3\xa4s 1ch\xc3\xa2 2chb 2chc 2chd che4be ch3eben ch3echt 3chef 4chei ch1eim 4chentw che3rei 2cher\xc3\xb6 ch1ess ch1ex 1ch\xc3\xa9 2chf 2chg 2chh 1chia ch1inf 2ch1inh ch1ins ch1int 2ch1inv 3chiru 2chj 2chk 2ch2l2 ch3lein 2ch2m ch4mu 2chn4 ch2na ch5ner 2chob cho2f ch1off ch1oh ch1orc 2chp ch2r2 2chre ch3rh 3chron 4chs 4cht 2chuf 2chuh 2chum 2chunt 4ch\xc3\xbc 2chv 2chw 2chz 1ci ci1c ci2s c1j c4k 4ck_ ck1a 3cka_ ck3aa 2ckac 2ck3al ck5am 2ck3an 2ckau ck1\xc3\xa4 4ckb 2ckc 2ckd 1cke 3cked 2ck1ei 3cken ck1ent cke2ra ck1erh 4ckerh\xc3\xb6 4ck3erle 2ckero 2ck1err 2ckese 2ckex 4ckf 2ckg 2ckh 1cki 2ck1id ck1im ck1in 2ckk 2ck3l 2ckm 2ck3n 2ck1o2 ck1\xc3\xb6 2ckp 2ck5r 4cks 4ckt ck5t2e ck3ther 1cku 2ck1um5 2ck1up 2ckv 4ckw 1cky 4ckz 3c4l2 cla1q clet4 clo1 c2m 3co2 co3b co3ch co3cke co4det co3di coi2 co3it co3la co5l2o co3ma co3mec com4te_ comtes4 co3mu con2n co3ra co4re co3ri co4te co3th co3v c\xc3\xb44 2c2p 2c1q c4r2 cry2 2c2s cst4 c3s2tr 2c1t cte3e c3ti4 c3to ctur6 3cu cu2p3 cussi4 1cy 2c1z 4d_ 3da_ da1a 2dab d2ab\xc3\xa4 da2ben 3d2a1b4l 3dac da2cho 4dachse da2de da3der da3dr da1er 2d1af d3ag dago3 da3gob da1ho da1is da1l4a 2d3alar dal3b4 da1l\xc3\xb6 2d3alt 2d3amma 2d3amm\xc3\xa4 damo3 d4amp 2d3amt d2an_ dan4ce_ 2d1and 2d1ang 3dank dan4kl dan5kla dan4k1o 2danl 4d1ans 2danw 3danz_ 4danzi 2d1ap d2aph da2r dar3a 2darb6 da3re 3d2arl 2darr dar3s 2dart d2arte d2arw das2 da3sh da5st 3dat date4 4d3atl 4datm 3dau3e4 2d1au2f 2d1aus 2d1\xc3\xa4h 2d1\xc3\xa4mt 2d1\xc3\xa4ng 2d1\xc3\xa4p d\xc3\xa43us 2d7b6 dbu2 2d1c 4d1d2 d3da d3de d3dh 1de de3an de5a4t de3b6 3de1c de2cka de1e2 d1eff deg4 de3gl dehe2 2d1ehr 2dei d2eic 3d2e1im de4l1\xc3\xa4n de2l1ec de3l2ei 2delem de2len 2d1elfm del4la del4lei de2l1o de3lor de2l\xc3\xb6 del4san del2s5e del2so del2s1p del5ster delt4 del3ta del3tr 2d1emp d2en_ de2nal de4n3end 4denerg den4k3li den3sc 4densem dens5tau den5th 2dentw de1on d4er_ de1ram de2r3ap der2bl 2derdb de2r1e2b der3eck de2rei de3reis de3r4erb der4erw 4d3erh\xc3\xb6h de5ric de3rik 4d3erkl\xc3\xa4 de1ro de2rop d3ersat dert2s de3ru de4ruh de4rum de2s de4s3a desa2g des1\xc3\xa4 3desc de4seh de4sei des3eil de4s3en de4s3et des1in des1or des1p des3s4 des5sen dest5alt de5stang de4sto dest5rat de3stri des1u 3det deten4t 4d3etw de1un de1us 2dexp 2d3f dfi2s 2d1g dga2 d4ge_ dge6t1e dge2tr d3gl 2d1h2 d2his 1di 3di_ di4a di5as di4\xc3\xa4 di1ce 2d1i2de di2e die3ner di3eni dien4s di3ens_ dienst5r di3ers_ die4s3c die2t5 3dig di3gn dil2s3 2d1imb di1n2a 2d1ind 2d1inf 2d1inh 2d1init 2d1ins 2d1int di2ob di3o2d di3ph di2ra di4re_ di2ren di2ris 2d1irl 2d1isr dist4 di4ste di2ta di3te di4tei di4t3erl di4t3erm di4t3ers di2t3r di2tu diz2 di3zi 2d1j 2d1k4 4d1l d3le dle2r3a 2d1m d3me 4d1n2 d3ne d3ni2 dnis1 3do_ 2dob 3doba d1o2be 3dobr 3doby do2c 3dog do3ha dol3l2 3dom do2mar do3n4a doni1e do2o 4d1opf 3dopo d2opp do3ra 4d1orc 2d1ord dor2f1a dor2fl dor2fr 4d1org 2d1ort d2os_ do3sp dos3s do4sta 3dot do3un do1y2 2d\xc3\xb6 d1\xc3\xb6f d1\xc3\xb6l1 3d\xc3\xb6r d\xc3\xb64s3c 2d3p2 2d1q d2r2 3d4ra_ 2d3rad drag4 d4rah 2d5rahm 3d4ram d3rand 2drat d3raub 3drauf d3raum 2d3r\xc3\xa4d 2d3r\xc3\xa4t 2d3r\xc3\xa4u 4dre_ d4rea d5real d4reck 3dreh 2d3reic 3d4rein drei3t d4reiv 4drem 4d3ren 2d3rep 4d3rer dre2s3t 2d3rh d4ria 2d3ric d3rieg d4rif 3d4rit 4dritu 2drob 2d3roc 2d3rod 3droh 2drol 2d3rot 2d3rov 2dr\xc3\xb6 3d4ru d5rub 4d5ruf 4d5ruh 4d5rut d4r\xc3\xbc dr\xc3\xbc1b dr\xc3\xbc5cke 2ds d4s1amt d2s3an d2s1au2 d2s1\xc3\xa4n d2s1e2b d5s4eig d2sein d2s1eng d2s1ent d2s1erf d2serh d2s1erk d2s1erz dse4t d4s3eta d3s2ha ds3han d3sho d2s1im ds2inf d3s2kan 4dsl d2s1op dso2r ds1ori d2s\xc3\xb6 d2s1par d2s1pas d2s1p\xc3\xa4 d3s2po d4spro dss2 dst2 d2s1tab d4s3t\xc3\xa4ti d5stell d3s4tern ds1th d3s2ti d4st\xc3\xb6c d5stre ds2tri d1s2tu ds1ums d2sun d1sy ds2zen 2dt d1ta dt3a2d dt3am d1t\xc3\xa4 d5tea d2thei d3ti d1to4 d1t\xc3\xb6 dt3r dtran2 dt3sa dt5sc dt5str dt3t d1t\xc3\xbc1 1du du3alv du1ar du2b3l du3e du2f 2d1ufe 2d1uh du1i 2dumd 2dumf 2dumg 4d3umk 2duml d2ump 2dumr 2d1ums 3d2ums_ 2d1umv dun3d 2d1unf dun2kl dun2st 2dunt du1os dur2 2d1url du2s du3scha du3se 3d\xc3\xbcf 3d\xc3\xbcn 3d\xc3\xbcr d\xc3\xbcrn3 2d1v2 2d1w dwa4 dwes4 dwest1 dy1 2d1z 4e_ 2e1a e5a2b ea2c eadli4 ea3g6 ea4ge eakt4 e3al_ e3alb e5alei e3alf e3alg e3al3k e3all e3aln e3alp e3als e3alta e3alv e3alw e3alz e3am eam3a e4ame eam5ti e4ano e3anz e2ap e3ar_ e3a2ra e3arb eare2 e3a6rene e3arm e3arp e3arsp e3art e3at_ e4atl e4at3s2 eat5t4 eatu4 e3auf e3aug e3\xc3\xa44 e1b 2eba e3bak ebe2i e3beng eben4s5e 2ebet eb4leu e3blie eb5lo eb2o eb\xc3\xb64s 2ebr e3b4ra eb4rea eb2s ebs1au eb3s\xc3\xa4 eb6sche eb4se ebs1i ebs3in ebs1o ebs1p ebs3pa ebs3t2h eb3str ebs1u e3bu eb3\xc3\xbcb 2e5ca e1ce ech1\xc3\xa4 2e3che ech1ei e1chi ech3l ech3m ech3n e2cho_ ech1o4b e2ch3r ech3ta ech3t4ei e1chu ech1uh ech1w eci6a e1cka eck2ar eck3se 2ecl e5cr ecs1 2ect e1d ed4am ed2dr ed4e e3dei ede3n2e eden2s ede2r ed4ge e3d2o e3d\xc3\xb6 ed2s1o ed2s1p ed2s1tr ed2su e3dy 6ee ee5a2 eeb4l ee1c ee2ce eed3a eede3 eed3s2 ee1e ee3ei e1eff e1ei eei4g ee1im ee3ing eel2e e1e2lek ee3len e1emp e1en e2en\xc3\xa4 e3end e3eng ee3ni e2eno e3ent e2e1ra e1erd ee3r2e ee4r3eng eere4s ee4ret e1erm e2e1ro ee1r2\xc3\xb6 e1ertr e1erz ees2 ee3sh ee3st ee2tat ee2th ee1u2 eewa4r e1e2x e1f 2ef_ 2efa e3fab ef3ad ef1ana ef1ank ef1aus ef1\xc3\xa4u 2efe e2f1e2b e2f1em e2fent ef2er 2eff_ 1effi ef2fl ef2fr 2e3fi e4f1i2d e4f1ins efi2s 1efku 2efl ef7l\xc3\xa4n 2e3f2o e3f4ra ef3rea ef4rie ef3rom ef3rot ef3so ef2tan ef1um e1g eg3ast eg1aus eg1d ege4n3a2 ege2ra ege1u eg3lo eg3lu eg5n eg3ni egs4pe egs2t6 eg1ste eg4sto 2e3gu egus3 e1ha eh1ach eh3aka e3hal eh1ap eh2aus e1h\xc3\xa4 e1he ehe3in ehen2t3 1e2hep ehe1ra eher4an ehe3str e3h2i eh3int eh1lam eh1l\xc3\xa4 ehl2e2 ehl3ein ehl3ent eh5ler eh3lo ehl2se eh3ma eh3mi eh3mu eh1na e3ho e5hol ehr1a ehr1\xc3\xa4 ehr1e2c eh4rei eh1ri eh1ro ehr1ob ehr5sch ehs2 eh3sh eh3sp e1hu e2hunt e1h\xc3\xbc eh3\xc3\xbcb e3h\xc3\xbct eh1w e1hy 2ei_ 2ei3a2 4eib ei2bl ei2cho eich5te e2id ei2d1a ei3de 2eidn ei1e ei3el 2eien eien3st ei3et 1eifr ei3g2a eig6e ei5gen ei5ger 2eigew ei3gl 1eig3n 2eigru 2eigt 2eigu ei3k2a ei3kla 2eil_ 2eilb eil3d eile2n1 eil3f6 eil2i eil3ins 2eiln eim3ag ei2mor e1imp ei4mun ei2n3a ei4nas ein3dr 2eindu ei5ne_ ein1g ein2i e1init ein3k ein6karn 3einna ein1ob 3einsat ei3o2 ei3p eip2p5 2eir ei3re e1irr e2is_ ei2sa ei2s\xc3\xa4 ei3so ei3sp eis2pe ei3sto ei2sum ei2t1a ei3tak 2eit\xc3\xa4 eit1h eit2sp eit3t ei4t3um 2eiu 2e1j e1k e3k2a 1ekd eke2 e3ke_ eke3ri e3kes e3key ek4l ek5lip e3k4n e3k2o ek1s eks4t 2ekt ekt3erf ekt3erg ek4t3erz e3k2w e1la el3a4ben el1af el5agi ela2h el1aho e2l1ak el3a2m el1ans e2lant e2l3anz el1ap e2l1ar ela4s el3asi el3asp e3law 2e1l\xc3\xa4 el2da el4d3erp eld5erst eld3erw el3des el3dr elds2 elea4 ele4c 2elei e3leie e6l5eier_ el3eig e2l1ein e4l3einh e2l1el 1e2lem e3lem_ 2e3len_ e2l1ent e3ler_ e2l1erd e2l1erg e4l3ern\xc3\xa4 e2lerr e3let_ e2l3eta e3lex elf4l elgi5er_ elgi5ers e2lim eli4ne el1ita elk4l el3l2an ell3\xc3\xa4nd el5le_ el2l1e2b el4l3ein el3len el3lin ell3sp 2eln 2elo el1of e2l1or elo2ri e3los e1l\xc3\xb6 el2ser el2spr els6tern el2su el2ta el3tak elt3erb el4t3in el2to el2t3r el3tri el3tro elts2 elt3sk elt3sp 2e1lu e7luc el1ur elu2s el1use e1l\xc3\xbc e2lya 2elz el3zwe 2ema e2m3ag ema2k e3mann em1ans e2m1arc e5m\xc3\xa4 em4d3a2 2eme eme2n emen4t3h e2m1erw eme2s em1im em1int emi5ti 2emm emma3u em2mei e3mon e2mop emo5s 3empf em3pfl em2p3le em2sa em5se em3spo em2spr emt2 em3th 2em\xc3\xbc 4ena_ ena2b e1nac enadi4 4enah e2nak en3al ena3l2i en3am en5ana e2nand e3nann en3anz en1ap e2nar en3arr 4enat e3nati en3att e1naue en3auf e2n\xc3\xa4 e3n\xc3\xa4c en1\xc3\xa4r en1\xc3\xa4u en2ce_ en3del end3ess en3do end4ort end3ras end7si end3s2p end3sz en3d2um 2ene e3ne4c en1ech e2nef en1ehr e4nein e2n1el e4nelt e2n3ema 4enen e4n1ent en1epo 4e3n4er_ e4n1erd 3e4nerg e4n3erh 4eneri e2nerk e2n1erl 4enern en3erne ene2ro 4en1ers e4nerst e2n3ert e2n3eru e4n1erw en3erwe en3erz e4n3ess en3eta en3eth en1eup e4nex en3fa en3ga 1engad 1engag en3gi 1engp eng5sc en3gue 2eni e4n1id e5nie eni3er_ eni5ers_ e5nik e2n1im e5nis e3nit enks2 en3k2\xc3\xbc 1enniu en1ob enob4le e2n3oh e3nol eno2ma en1on e2n1op en1o2r e3not e3now 2e1n\xc3\xb6 4enpe en2san en3sec 1ensem ens3eng en3sho en2sid en3s2po enst5alt en4s3t\xc3\xa4t 4ensto ent4ag 1entd ente2n en6t5erb 1entla 1entna 1entsp 1entw 1entz e2n1uf e2n1um e4nums en1unf en1ur e3nus 2enut e1n\xc3\xbc 4enw\xc3\xbc e1ny en4z3erf enz3erg enz3ert en3z2i e1\xc3\xb1 eo5a e1o2b1 eo3ben eo3bi e1of eo3g e1oh e1on_ eo3na e1ond e1onf e1onl e1onr e1ons e1ope e3opf eop2t e1or e3or_ e3ord e3ort eo3s4 e3os_ eo1st eo3u e1o2v e1\xc3\xb62 e1p e3pa epa4g e3p2f4 ep2pa ep4pl ep2pr ept2 ep3ta ep4tal ep5ti 2e1q er1a e5ra_ era2be e1rabi er3abs er3abt e3rad_ er3adm er3adr era3f4a era1fr era2g er5agi e1rai er3aic e2rak er3akr e3rald er3all er3ana er3and e3rane e1rap er3apf er3ar e3rari e1ras e2r3a4si era2\xc3\x9f e2r5atm e1raub er3aue er3aug e1raum e1raz 2e1r\xc3\xa4 e3r\xc3\xa4d er1\xc3\xa4h er1\xc3\xa4m er3\xc3\xa4tz erb2e er3br er3bu er1c erd3anz 1erdb erd3erw er4d3inn 2ere 4e5re_ e3rech er3echs ere4ck er1eff er1e2h 4e3rei_ e3reie er1eig e3reih e2rein er3eis_ ere2l e2r1ele e3rem e5rem_ er3emu 4e5ren_ e5rena e4rense e4r3entf e3reo 4e5rer_ e4r3erf e2r1erh e2rerk er1err er1ers e4rersc e2r1erw 4eres e5res_ er1ess er3e4ti er1eul ere3us 4erf\xc3\xbcr 3ergebn 4ergeh\xc3\xa4 4erget erg3ise er3gl erg3s2 e2r3h 3erhab 2erh\xc3\xbc 4e1ri e2riat e3rib e3rie eri5e4n1 erien5e e5rif erik4 e3rin_ er1ind e4r1ini er1ink er1ins er1int e3rio er1ita erk5te erk5tr 4erlag er3le 4erln erm2a erm3ers er2n1os e1ro_ er3oa er1ob er1of e1rog e2r1oh ero2l e3role er3oly e1rom e5ron er1o2p e4ro2r e1ros e1rou e1row er1\xc3\xb62 er\xc3\xb64d e1r\xc3\xb6h 2er\xc3\xb6k er5p 2err\xc3\xbc er3s2a ers2e er5sen ers3ers er3sk er3smo er3sn er5s4to er3ta er3t\xc3\xa4 er6terei er4tho 4erti ert3ins er3t2o 2e1ru er1uhr er1um er1uns e3rus er1uz e1r\xc3\xbc er3\xc3\xbc2b e5r\xc3\xbcg 3erweck 4erweis e1ry 2erzy e5saa e4s3ab es3ad es3ak e5s4as esa2t es3aus es3av e4s1\xc3\xa42c e3sc es3cap e5s4ce esch4 e6schan e4scu e3se e5se_ e4seb es1ebe es3ehr es3ein es3erz es3eva 2esf 6es3h es1il es1imm es1ini e3sir es3k es5ke es5ki es5kor e4s5ky es3l es4log es3m e3sof e3sol es1op es1ori es2ort es6pei e3s2pek e3s2por e5s4pra 2esr es5sac es3sc es5sec 6essem ess4e3re es4s3erg es2sof es2sp ess1pa es2st ess3tie es3str est1ak e3star es2tau e3stec est5eink e3stel est3erh es4t3ess e1stil est3o4ri es2tri es2tu es3tus e3st\xc3\xbc e2s1um es3umf es3ums es3w e3sy es3z e1\xc3\x9f e\xc3\x9fer2 e\xc3\x9fe3re 2et e1ta eta3b et4ag et3am et4at e1t\xc3\xa4 et1\xc3\xa4h e3te e5te_ et1ein e5t2en etend4 e1t2h et3hai et3hal et3h\xc3\xa4 et3h\xc3\xbc e3ti e4t1i2m e3to eto4b e4t1of eto4s e1t\xc3\xb6 4e1tr et3rah e4t3raum et3rec et3res et4ri et2s et3sc et5schu etsch5wu et3se et3so et3sp ets3t et3sto et3s4tr et2ta et4t3au et2tei ette4n1 ett1h et4t3r et1ups e1t\xc3\xbc etz1a et3zo eu1a eub4 eude3s eu3erei eu3err eu3erz eu2esc eu2g1a euge4n eug6er eugs4 euho2 euil4 eu1in3 eu2k\xc3\xa4 e1um e3um_ eu3ma e3uml e3um4s eums1p eum5st 2eun eu3n2e eu4nei e3ung eu4nio eun3k eu1o2 eu3p eu2rau eu3r2e 1eu3ro e4ust 2eut eu5te eut6schn 2eux eu2zw e3\xc3\xbc 2e1v 4eve e2vela e1w 2e3wa ewa3s e3w\xc3\xa4 2ewe e2we_ ew3et_ ewi2s e3wit e5wo ew2s 4ex_ 1exam 1e6xem e4x1er 3exp ex2tin 2exu 4ey e1z e3z2a ez2\xc3\xa4 ezen3 ezin4 ezi2s \xc3\xa91b \xc3\xa91c \xc3\xa91h \xc3\xa91l \xc3\xa9lu2 \xc3\xa91o \xc3\xa91p \xc3\xa91r \xc3\xa91t \xc3\xa91u4 \xc3\xa91v \xc3\xa91z2 \xc3\x8b1c \xc3\x8b1m \xc3\x8b1n \xc3\xaa1p \xc3\xaa4t 6f_ 1fa 3fa_ fa1b f2abr 3fac fa2ch3i fa2cho 2fad fa2da fade4s 3fa1e fa3fa fa3g f2ah fa1la fal6l5erk fal2s fal3te falt4s fal2z1 2fanb 2fanr 2fanw 2f3anz 2f1ap farr3s 3f2art f1arz 3fas fa3s2a fa3sh 2fat 2f1auf f3aug 3fav 1f\xc3\xa4 f\xc3\xa41c f\xc3\xa4h2r1u 2f1\xc3\xa4rm f1\xc3\xa4rz 2f\xc3\xa4u 2f1b4 2f1c 2f1d f3dr 1fe 3fe_ fe4c fe5che fe2dr fe2ei fe1em f4eie 2feinh fei2nu 2feinw fek2ta fe2l1a fel4dr f1e2lek fe2l1er fe2l1es fe2l1o fel4soh fel3to 3f2em_ 2femi fem4me_ fen3a fe4n\xc3\xa4 3fend fe2no fenst2 f1ent f2er_ fe1r2a fe4rang fe4ranz fe2r3au 3ferei fer3eis fer2er fer3erz f1erfa f2ern 4f3erneu fe1ro f4erpa f2ers_ f2ert f1erw 3fe2s fe4st1a fes3tat fest3ei 4f3e4ta fet4t1a 2f3ex 3f\xc3\xa9 4f1f \xc3\x9f1au \xc3\x9f2e \xc3\x9fe2e f2f3ef \xc3\x9f3ei \xc3\x9fe3in \xc3\x9fe2m \xc3\x9f3emi \xc3\x9fi3k \xc3\x9f5li f3flu f3fl\xc3\xbc f3f4r\xc3\xa4 \xc3\x9f3r\xc3\xb6 \xc3\x9f3ru \xc3\x9f2s \xc3\x9f3s2h 2f3g4 fge1 2f1h 1fi 3fi_ fi3at fi1erf fi2ki fi3kl fi2k1o fi2l3an fil3d fi2les fi5li fi6lin fil2ip 5fin_ f2i1n4a fi3ni 5finn fin4s3 2f1int fi3ol fi2r fis2a fi5s2p fi4s3t fi3te fito2 fi2t1or 5fiz 2f1j 2f1k4 f2l4 2fl_ f3lad 1f6l\xc3\xa4 3fl\xc3\xa4c 2fl\xc3\xa4d f5l\xc3\xa4n 2f3leb 2f3lein f3ler f4li f6lim fli4n f3lon 1f6lot flo2w f6lug flug1a f6l\xc3\xbc 2f1m 2f3n2 fni2s 1fo 2f1ob fob4l fo2na fo2nu 2f1op fo1ra 4f3org fo3rin 3form for4m3a4g forni7er_ for4st for2t for4te for4th fort3r for3tu 2f1\xc3\xb6f f1\xc3\xb6k f\xc3\xb6rs3 2f3p2 fper1 2f1q f2r4 f4rac f5rad f1rah fra4m f3rand 2f5re_ f5ref 2freg frei3ba f3rep f3ric fri3d fri2e 2frig fri3k 1f4ris f3roc f4ron fro2s fr\xc3\xb65s4c fru2 4fs f5saa fs3all f2s1an f2s3as fs1auf f2saut f3sc f5schl fs1e2b f2s1em f3send fs1ent f2s1er fse4t f4s3eta f3si fsi2d f2s1o2 fs3ol f3span f2s1pas f3s2pl f3s2por f2s1pr fs2pra fs2pri fs3s2 f1s2t fs3tak f2stas fs3t\xc3\xa4t f4st\xc3\xa4ti f4stech f3stei f5stel f3str fs4tro f3st\xc3\xbc f4s3t\xc3\xbcte f2s1un f2s\xc3\xbc f5sy 4f1t f4ta_ ft1a2be ft1af ft3al ft1an ft3anz ft1ar f3tat ft1e2h ft1eig ft1ein ft1eis f4t1ent f2t3eti f2t1h ft3hei f3ti ft3rau ft3ro ft3r\xc3\xb6 f3t4ru ft2s1 ft4s3a ft3sc ft6sche ftse2 fts3i ft3st ft4s3t\xc3\xa4 ft5sti f2tum ft1url ft3z 1fu 2fum 2f1unf fun4ko fun2k3r 2funt furch2 fu4re_ fus2sa fus2s1p fus2st fu2\xc3\x9f1er 3fut 1f\xc3\xbc 2f\xc3\xbcb f\xc3\xbc2r 2f1v 2f1w fwa3s 1fy 2f1z fz2a fz2s 6g_ 1ga 7ga_ gabe4n 2gabf gab5l ga1br ga3bu 2gabz ga1c ga3di gadi4e ga1e 3ga5g ga1k ga2ka ga1la 5gamo 2g3amt 2g1anb gan3d g1anf gan2g1a gan2gr gang4st 2ganh 2g3ank 2ganl g3anla 3gano ga1ny ga3pe 2g1arb 2g1arc 3gard ga3re 2g1arm ga3r2o g1arti ga2s1a gas3ei ga2s1i ga2so gas3s ga4ste gas4t3el ga3th 2gatm gat4r gau1c 2g1auf g2auk 2g1aut 1g\xc3\xa4 2g1\xc3\xa4p g\xc3\xa4s5 6g1b4 g5be gber4 2g1c 2gd g1da g2d1au g2d1er g1do g3d\xc3\xb6 gd3r gds2 gd3sz gd1ur 3g4e ge3a2 ge3ba gebe4am ge1c ge3d ge1e2 ge2es geg4 ge3gl ge2ig ge1im ge1ins ge1ir ge2is 6geise2 gei3sh gel6ders ge4l3ers gels2t gel3sz gel3t2a ge3l\xc3\xbc gel3z2 gem4 5gema 5gem\xc3\xa4 5gem\xc3\xb6 ge1na gen2au gen2d3r gen3eid ge4ners gen3g gen3k ge3nor 5gens gens4ei gen7stern gen3sz g1entf gen3th ge3ou 5ger_ ge1ra ge2rab ger3amp ger2an g5ereig ge4reng ge4rens ger2er germ4 ger3no ge1ro ge1r2\xc3\xb6 5gerw ges2 ges4am ges3auf ge5s4c ges3elt ge5sen ge4ser ge5si ge3sp gess4t ge1st2 ge3ste ge5stei ges4tem ge4s3ter get2a 4getap ge1ul 4g5ex 2g1f 2g1g g5ge gge3n2e g2g3l gg4lo gg3n gg4r g3gr\xc3\xa4 2g1h 4gh_ 3g2hi gh3l 3gh2r gh3te g2hu gh1w 1gi gie3f gie3g gi2e1i gie3l4 gi2m gi4mes 2g1ind gi3ne gin2ga 2g1ins gi2o gi3os gi3ro 2gisel git4a gi3tu gi2us 2g1j 2g5k g2l 4gl_ 1gla 3g4lad 2g3lag 5glanz 3g4laub 4g5lauf 1gl\xc3\xa4 gl\xc3\xa4s3c 2gl\xc3\xa4uf 1gl4e 2g5le_ 2g3leb g5lec g3leg 2g3leh g4leic 4g5lein glei4t5r g3lenk 4g5ler g3lese g3lev g3li g4lia 2glib 5g4lie 4g5lif 1g4lik g4lim g5lis 1g4lit 1g4liz 2glo 3g4loa 3g6loc g7loch 3g4lok g6lom 3g4lot 2gls 2glu glu2t 1gl\xc3\xbc 3gly 2g1m2 2g1n2 4gn_ 3g2na g6na_ 4gnah g6nat 3g2n\xc3\xa4 g5neh 4g3neu 4gn3g gni2 g2nie g2nif 4g5nis1 g2no g3not 4gns 4gnt g5nu g6n\xc3\xbc g2ny 4gn3z 1go 3go_ go6a goa3li 2gob 2g1of 4g1oh go1i go3in go3l4a 2g1opf g2o1ra 3gos go3t2h go3tr 3gou 3go1y 1g\xc3\xb6 g1\xc3\xb6f 2g3p2 2g5q 1g2r4 gra2bi g3rah 3grai 2g3rak gram8m7end 3gran g3r\xc3\xa4d 2gr\xc3\xa4u 2g5re_ g4reb g3rec g3rede g4ree 2g3reic g3reit g3rek g4rem 2g3renn gre3no gren6z5ei 2gret 2g3ric gri2e 2grig 2g3ring gro3be gron4 g4ros gros6s5el 2g3r\xc3\xb6h g4ruf 2g3rui 2grum 3g4runs 3g4rup 2g3rut gr\xc3\xbc1b 2g3r\xc3\xbcc 3g4r\xc3\xbcn 6g2s1 g4s3ac gs3ad g4s3a4g g3s2ah gs5a2k gs3all gs5ama gs3amb gs3an gs3as gs3aug g3sc g6sca gsch4 g4schan g6schef gs3cr gse2 g3s2eil gs3en g4s3er gse4t gs3eta gsi2d gs3in g4sl gso2 g5soz gs3p gs5pal gs4pi gs6pie g4s5pin g4s5pl g5s4por gsr\xc3\xbc2 gs5s4 g3stan g3star gs2t1au gs3tauf g4st\xc3\xa4 g5st\xc3\xa4m g3stel gst3err g3s2to g4s3tor gs2t\xc3\xb6 gs2tro gst3ros gs3tr\xc3\xbc g3stu gs2t\xc3\xbcc g4sw g3sy 2g1t2 g5te g2t3h g5ti gti2m gt4s3 gt3w 1gu gu1an_ gu1ant gu2e guet4 2g1uh gu1ins gu1is gu5me gun2e 2g1unf g2ung_ g2unge 2g1ungl 3g2uns 4gunt gu4s gus3a gu5sc gu5se gus5se_ gus2sp gus2st 5gu2t1 1g\xc3\xbc 2g\xc3\xbcb g\xc3\xbcr1 g\xc3\xbcs1 2g1v 4g1w 1gy 2g3z2 6h_ 2ha_ hab2a hab2e hade2 ha2del h3adle ha3dri ha1el haft4s hafts3p ha3go ha3ha hai1es h2aka haki3 4hal_ hal1a halan4c hal2ba halb5s 2ha3le ha3li hal2la h3alp halt3r h3amt h2an_ 2hana h2and h1angr 2h5anr 2hant 2hap ha2pr ha3ra 2h1arb h2ard har3ma har5te h1arti 2has_ 4ha3sa hasi1 h4at hatt2 hau3f6li 2h1aufm h1aukt hau2sa hau4sc hau4spa hau2tr h1\xc3\xa4ff h1\xc3\xa4rz h\xc3\xa46s5chen h\xc3\xa4u4s3c h\xc3\xa43usp 2h5b6 hba2r3a 2h1c h1d 2hea 1heb he3be he2bl he3br he5che he1cho he2el hee3le hee2s he2f he3fe hef3erm hef3ing hef3l hef3r he3fri he2i h1eie h1eif h1eig heine2 hei4neh h1eink he3ism he3ist heit6s3 h1eiw hekt5a he2l3au he2l1ec he3l2ei he3len he3li hel4l3au he3lo he4l\xc3\xb6 he3ma he3mi 1hemm 2h1emp h2en_ he6n3a he4n\xc3\xa4 h4ene he2n1e2b hen3end he2no h1ents he2nu hen3z 2he2o he3on he3op her3a2b her3al her3an 2herap he3ras her4eig he4r3eis he2rel he6r5innu h1erke 2herm he3ro h1er\xc3\xb6 her5th her2z1w he2str he3th he5ti he3t6s he2u heu3g he3x he1x4a he1y2 1h\xc3\x8b 2h5f4 hfel2l1 hfi2s 2h3g2 h5ga hge1 hgin4s 2h1h 2hi_ 2hia h1iat hi1ce 2hi3d h1i4di hi2e hi3ens hie4r3in hif3f6r h2ig hi2kr h2il hi2l5a4 hil2fr hi2n hi3nat hi3nel hin2en hi3n2i hin5n hi3no hin2t5a 2hio hi4on hi3or hi3os 2hip hi2p1h hi2r hi3ra 2hi3re hi3ri hir4ner hi3ro his2a hi4se hi3sp hi4st hi1th hit2s h1j 2h1k4 2hl h3lad h4laf h3lai hl3anz hl1ar h3las h3laug h3laut h3law h3l\xc3\xa4d h3l\xc3\xa4s h3l\xc3\xa4u hl3d4 h5le_ h3leb hle3e h3leh h2lein hle3l h7len_ h2lent h3ler hle2r3a h4l1erg h6l3ern\xc3\xa4 h4l1erw h3les h4lesi hle5ta h3lex h2li h3lik hl1ind h2lo h5loc hl1of hl1op h6lor h3losi h3l\xc3\xb6 h5l\xc3\xb6c h4l\xc3\xb6s hl2san hl2ser hl3slo hl3sp h3luf h3l\xc3\xbcf 2h1m h2ma h3mag h3man h3mar h4m\xc3\xa4c h4m\xc3\xa4h h4m\xc3\xa4l h4m\xc3\xa4u h3me_ hme1e hmen2s h2mi h3mir_ h2mo h3mot hm2s1p h2mu h5musi h2m\xc3\xbc 2hn hn2a h3nac hn3ad h3nam hn3an h3nati h2n\xc3\xa4 hn1\xc3\xa4r h3n\xc3\xa4s hn3d4 hn2e hn3eig hn3ein hne3k h2nel hne4n h2nep h3ner hn4erg h5nerz h2neu hn1g h2nic h2nie hn3im h2nip hn3kl hn2k3n hn3s2k hn4th hnts2 h2nul h3nunge ho3be ho2bl ho2c ho4ch3 ho3ck hoe4 ho2ef ho2fa ho2f3r hohen3 hol2au ho2l1ei 2holo ho4lor 1hols 3holz hom2e ho2med ho5mu h2on 2hop ho1ra hor3d h1org ho3sl ho4sp ho4st 2hot_ ho5th 2hots 1hou2 4ho2w how1e h1o2x ho1y2 1h\xc3\xb6 h\xc3\xb62c h\xc3\xb63ck h2\xc3\xb6r h\xc3\xb64s h\xc3\xb6s3c 2h3p2 h1q 2hr hr1ac hr3a2d h1rai h1rane h3rat h3raum h3r\xc3\xa4u hr1c hr3d h2rec h3rech h3red h3ref h4rei_ h3reic hr3eig h3rel h3ren hr2erg hr2erk hr2erm hr2erz h3re6s3 hre2t hr3eta h3ric hri4e h3riesl h3rin hr1ind h4rine hr1ins h4ris h2rob h3roh h4rom h4ron h2ror h3rou hrr4 hr4s3ac hr2s3an hrs1au hr4s1en hr4ser hr6s1in hr4s1of hr2su hr4sw hrs3z hr4tab hr2t3r hr3tra hrt2s h1ru h3ruh h3rut h3r\xc3\xbc hr3\xc3\xbcb 4hs h4s3ach h2s1an h2s1au hs1e4c hs2ein hs3eins hs1eis h3sel hse4ler h3sen h3ser h2s3ing h2s1of h2s1par h3spen h2spr\xc3\xa4 h2spu hs3s2 hst2a hst3alt h2stau h1stec h3s4terb h4steu hs1the h1s2ti h2s3tie hs4tief h2stor hs2tr h1stun h2s1un h1sy 4h1t h2t1a htab2s h3t4akt_ h3takts h3tal h4t3am ht3a4n ht5ane h4t3ass h4tasy ht3a2t h5te_ h2t1e4c h3tech h2t1ef ht1e2h h2teif h2t1eim ht1ein h2t1eis h4t3elit h4temp h4t3entf h4tents ht3erf\xc3\xbc h4t3ergr h2t1erh h2t1erk ht4erko ht3erre ht3ersc h4t3ersp h4t3erst h2t1erz hte2s h4t3ese h4t3ess h5tet ht1eu h2t1ex h4t1h h3ti h4t1in hti2s hto2 h2t3oly h2top h2torg h2t\xc3\xb6 h3t\xc3\xb6p ht5rak ht3rand h2t3rat ht3rel h3t4ri h2t3ro h3t4roc h3trom h2t3r\xc3\xb6 h2t3ru h2t3r\xc3\xbc ht2sen ht4s3ess ht2sp ht3spa ht4s3par ht4stab ht4s5tur ht3t htue3 ht1und htwa5r ht3z4 hu2b hub1a hu4b3ei hu4b1en hub3l hub5r hu1c hu2h1a hu2h1i huko3 hu2l3a hu2l\xc3\xa4 hu2l3ei hu2ler hu2let hu2l3in hu2lo h1ums h1una huni1 h1up_ h1ups 2hur hur4e hu3sa hu2sc hu2st hu3t2h hu2ti hut4zen hut4z3er h2\xc3\xbc h\xc3\xbc1bel h\xc3\xbch3 h\xc3\xbchne4 h\xc3\xbcs3 2h1v hvil4 2hw hwe1c h1weib 1hyp hy2pe_ hy2t h1z hz2s 2i_ i4aa ia1b4 iab5s i1ach_ i5ad_ i3adn ia1f6 ia3g i5ak_ i1akt i3al i5al_ i5al3a ia2l\xc3\xa4 i5al3b ial3d i5alei i5alent i5a4l3erm i5a2let i5alf i5alg i5alh i5a2lia i5al3k i5all i5alm i5aln ia2lor i5alp i5alr i5als i5al3t4 ia2lu i5alv i5alz i5an_ i1ana i1anc i5and i6a3n2e i6ani i3ann i2ano i5ans i5ant i3anz ia3p2f ia1q i5ar ia2ra iard2 i6ari i3as i5as_ ia3sh i4asi i6a3sp iat2 i5at_ i3ath 1iatr i5ats i5au ia3un i1\xc3\xa4m i5\xc3\xa4r_ i1\xc3\xa4rs i5\xc3\xa4t_ i5\xc3\xa4t3s i1b i2b1ar i2b1auf ib2bl i2b1ei ibe2n1 ibi4k i3bla i3b4le i2b1\xc3\xb6 ib1ra i2b3r\xc3\xa4 ib3ren ib2s ib3sa ib3sp i2b3unt ibus3 4ic ich1a ich3al ich3\xc3\xa4 i1che ich3ei i3cher i1chi i2chin ich3l ich5m i1cho i2ch3r ich2t3r i1chu ich1w i2cka ick2e i1cr i5cu i1d id2an i2d1au i2dee ide5l2\xc3\xa4 ide3le iden3g ide1ra ide3re ide3so 1i2dio 1i2dol i2d3r i3d4ra id1t4 1i2dy ie3a4 ie2b\xc3\xa4 ie2b3l ie2b3r ieb4sto ie1c ie4ck ie2dr ie1e2 ie2f1ak ie2f1an ie2fau ief3f6 ie2f5l ie2f1r ie2ga ie2g5l ie2g3r iegs3c ie3he i1ei i2e2l3a2 iel3d i2ele ie2l1ec i2eli i1ell i2els iel3sp iel3sz ielt4 iel3ta i3e2met i1en i3en_ i3ena i3e4n\xc3\xa4 i3end ie2n1e2b ien2er ien3ere ie3nern ie3ners i3enf i3en1g i3enh i3enj i3enk i3enm i3enn i3e2no i3en\xc3\xb6 i3enp i3enr ien5sc ien3s2e ien5sp ien2st ienst5r\xc3\xa4 ien5sz i3env i3enw i3enz ie1o2 ier3a2 ie2rap ie2r1ec ie3rel ie3r2er ie4r3erz i3ereu i1ergr ier3k2 i1ern i3ern_ ier5ni ier4s3eh ier3sta ier3sz iesen3s4 ies5ser i1esti ie1stu ie3su ie2t1a ie4tei ie4t3erh ie2t3ho ie4t1o ie2t3\xc3\xb64 iet4se iets4t i3ett ie1un i1eura 2if if1ab i2f1arm if1au i5f2en if1erh ife4s if2fl i3fi if5l i1f6la if1l\xc3\xb6 i1flug i1fl\xc3\xbc if3r if4ra i1frau i1f4re if4r\xc3\xbc if2s if3se if2ta ift3erk if2tro ift3s2p i1g iga1i i2g1ang ig1art iga5s i4g5ei ig7eise ige2na i4g5erz ig2gr i2g1im i2g3l ig4le i4gli ig1l\xc3\xb6 ig1lu 2igm i4gn\xc3\xa4 ig4no i3g4ra ig4sal ig5s\xc3\xa4 ig4s3e ig3so ig3s4p ig4spa ig3stei ig4s3to ig4st\xc3\xb6 ig3str ig5stu i1h i2h1ar ihe1e ihe4n ihis3 ih3l ih3m ih1n ih1r i2h1um ihu3s ih1w 2i1i4 ii6g i2i5t i1j i1k i4k3a4k ik5amt i2k1ano i2k3anz i2k1ar ik3att i2k1au ik3aufr i2k1\xc3\xa4r 2ike i2k1ei i2k1erz i2k3eta i2k1in i2k3l ik4lan i2k3n ik2o3p6 i4k\xc3\xb6l ik3ra ik3r\xc3\xa4 ik3re i3kri ik1s2 ik3sh ik3so ik3sz ikt3erk ik2t3r i2kun i3kus i1la i2l5ab il3a2d i2l1ak i2l5a4m il1ans i2lant il3asp i2l1au il4aufb il5aus i1l\xc3\xa43 il2c il2da il4d3ent il2d1o ild5r i2l1e4c ile2h il1ehe il1ein i2l1el i2l1ent i2l1erf i2l1erg i2lerr il2f5l ilf3le il2f3re ilf4s ilg4r ili3en il1ind i2l1ip i3lip_ i3lips ill2a il3l4an il5l2er il3l2i il2mak il2m5at il2m1au il2min 2ilo i2l1or il1\xc3\xb6f il2san il3tr i1lu2 i2lum il3v2 2im_ i2mag ima4ge ima2to ima4tur 2ime i2m1elf i2m1erf i2m1erz 2imi i2m1ins im2mei im4m3ent 1immo im1org 1impo 1impu im2str 2imt 2imu im3unt 2in_ in3ab in1a4c in3ad in2af i4n5a2m i3nara i6narb ina4s i2n3au inau4s in1\xc3\xa4s in1\xc3\xa4u in3dau 3index in3do in2dro 1indus 4ine i2n1e2be i3nec in1ehe in3ei i5nen_ i5nend in1eng i5ner_ i4n3erbe i3n2erh i3nerl i4n3erl\xc3\xb6 i5ners i2n1eu ine3un ine2x inf4 2ing ing1af in4g3a6g ing5sc ing3ska 1inhab 2inhar 2inhau 2inhe i3ni3d i5nie 2inig 2inis i3nitz 3inkarn ink4ste in4nei in4n3erm 1innta 2ino in3od in1or ino3st ino3t i1n\xc3\xb6 in1\xc3\xb62d 2inr ins2 ins4am ins3\xc3\xa4n insch4 in7schl 2insen ins3ent ins3ert ins3h in3sku in5spe in3st 3instal in4s3t\xc3\xa4t in5s4tr 1insuf in3sze int4 1integ in3t2h i2n1uf i3n2um in1unz invil4 i1ny in3ze in3z4w i1\xc3\xb1 4i1o io5a io1c io3e4 i2o3h i3ol_ i3om_ i3oms ion4 i3on_ io3na i3ons3 i2ony i2o1p i3opt i2or i3or_ i3orc i3orp i3ors i2os i3os_ io5se io3sp io3st i3ot_ i3ots i2ov io2x i3oz_ i1\xc3\xb64k i3\xc3\xb6n i1\xc3\xb6s_ 2ip_ i1pa i1p\xc3\xa4 i1pe i3per ipf2 ip3fa iph6 2i1pi ipi3el ipi2s ip4l i1pr 2ips 2ipu i1q i1r4a i3ra_ i3ras i1r\xc3\xa4 ir2bl ir1c ir2e i5ree 2irek i5r\xc3\xa9 irg4 ir2gl i1r2i 2irig 2irk ir2k5l irli4n ir2mau ir4m\xc3\xa4 irme4 ir2m1ei ir2mum ir4m3unt irn3ers i1ro i2ron iro2s i1r\xc3\xb6 irpla4 ir4s ir5se ir5sh i1ru iru2s1 i4s3amt is1an is1au is1\xc3\xa4n 2isb i2sca isch3ar i4sch3e4h i4sch3ei isch6er i4schin i5sching i2sch3l i2schm isch3ob isch3ot isch3re isch3ru isch3wu is3chy i2s3cr 2i3se ise3e ise3ha ise5hi ise2n ise1ra i4serh i4s1erm iser2u i4s1erw i5ses i4s1ex isi2a i2s1id i2s1of iso2n iso6nend is1op 3i2sot i2sp is1pa i4spar is1pe is2ph is3pic i4spo i4spro is3sa is4sau is4s3che is4s1pe is2spr is2st iss1tr is2sum i2st is1t2a is2t3ab i3star is2tat i3stel iste2n is1th i1stil is1to is1tr is2t3re i3st\xc3\xbc isum3p i2s\xc3\xbc i1sy i1\xc3\x9f i\xc3\x9f3ersc 2it_ i1ta it1ac it4akte ital1a it3alt it3am it1ang i3tat it1au i4t1ax 4i3t\xc3\xa4 i4t1\xc3\xa4s it\xc3\xa4t2 2ite i2t1eig it1ein 4itel ite4la itens2 iten3st i4tex it1he i5thr i3ti 1itia i4t1id 1itii i4t1in i1to i5toc i2t1of i1t\xc3\xb6 i1tr it3raf it3rah i2t3ran it3ras it3rau it3r\xc3\xa4u it3re it3ric it4ron i3tru it3run it4s3a2g it2s\xc3\xa4 it2s1e2 it4s5er1 it2s1id it2s1pe it2sti its3tie it2sto it2tar it2teb it2tr it1uh i2t1um i2tuns itu5re_ i1t\xc3\xbc i3t\xc3\xbcl i3ty 2i1u4 ium2s iu5se i1\xc3\xbc 2i1v iv1ang i2veb i2v1ei iv1elt ive4n i2v3ene i2v1ent i3vol i2vr i2v1ur 2i1w ix2em i3xi i1xo ix3tu i1z i2zan iz1ap iz1au ize2n i2z3ene i3zer i2z1ir iz1ob i2z1\xc3\xb6 izt2 iz3th i2z1w \xc3\xad1l 2j_ ja1c jahr3ei jahr4s ja3la ja3ne ja3st 2jat 5j\xc3\xa4 je2a jean4s je1c je2g jek4ter jek2t1o2 jek2tr je2p jes1t je2t jet1a jet5r jets4 jet3st jet5t jet1u4 je5v ji2v j2o joa3 jo2b1 jo2i joni1 jo1ra jord2 jo2sc jou4 joy1 4j\xc3\xb6 j2u ju2bl juden3 jugen6 jugend5 ju2k jung5s jur2o ju2s jute1 2j1v 4k_ 1ka 3ka_ ka2a ka3ar kab2bl ka2ben 2kabh ka1bl 2kabla 2kabl\xc3\xa4 kab4le 2k1a2bo ka3b6r 4k3abs ka1c k4ade 3kadi k3adr ka1fr kaf3t ka3g kai5 ka1in ka3ka ka1la ka2lan kal3bl ka3lei ka4lens kal5eri kal2ka 2kall kal4tr k4am k5a2ma kamp2 ka2nau k1anb kan3d4 2kanda kan2e 2k1ang 2kanl 2k1ans 6kantenn ka3nu 2kanw k4anz_ ka2o 2kapf 3kara k2ard 3ka3re k2arg kari3es 2karm k2arr kar3t 2karti k2arw ka3se kasi1 ka4sp kas1t ka4sti ka3ta ka3th ka2t3r 2katt kau2f1o 4kaufr 2kaus k1ausg k1ausw kau3t4 2kauto 1k\xc3\xa4 k1\xc3\xa4mi k\xc3\xa4r2 k\xc3\xa44s3c k\xc3\xa43se k\xc3\xa41th 2k1b4 k5be kbo4n 2k3c 2k3d kdamp2 ke1c ke3d kefi4 kege2 ke2gl kehr4s 2k1eic 4kein ke1ind keit2 ke2la ke3lag kel1au ke2l\xc3\xa4 4k1e2lek ke3let kel3sk kelt4e 4k1emp ken3a ke4n3ei 4kengag ken3s2k ken5stei ken3sz k2ente k3enten ken3th 4k1ents 2kentw 2keo 4ke2p3 k2er_ ke1ra ke2ran ke2rau ke3reig k3erh\xc3\xb6 ke6r5innu k2erl k4erl_ k2ern ker4neu k1ero k2ers_ ker3z2 k1e4se ke5sen ke4t3a keten3 ke2t3h ket3z2 2k1e2x 2k5f kfi2s kfr\xc3\xb65 2k1g4 kge1 2k1h4 kho3m ki3a6 ki1c ki2d ki3da ki3d4r ki2e ki3ern ki1f6l ki1fr ki3k4 ki3l2a ki3lo 3kin_ 2kinh k2ini ki3n4o 2k1inse kin3sh 2k1int ki3o 3kirc ki5s2p kis2to 2kiz ki3zi 2k5j 2k1k k2l4 4kl_ 2kla_ klan2 k4lar k5last 2k5le_ kle5ari 4k5leh 4k5leit k3lem_ 2k3ler kle2r3a 2k3leu kle3us k5lich 3klim klit2s 4k5liz klo2i3 k3lu k3l\xc3\xbcc k3ly 2k1m k2n2 k4nei kni4en_ kno2bl 2knor 3k4n\xc3\xbc 1ko ko5a ko4al 2kobj koff4 koh3lu ko1i2 3kom ko2min k2on kon3s2 ko3nu ko1pe kop4f3en kopf5err kop2t ko1r2a ko3ran 4k1orc kor4d3er ko3ri kor3m kor4ner ko3str 3kot ko3ta kots2 kot3sp k3ou 3kow k1o2x 3k\xc3\xb6 k\xc3\xb62f 2k3p4 k1q k2r4 2k3rad k3rats 2k1raum k4raz 2kr\xc3\xa4t 4k5re_ 2krea 2k3rec 2krede k3reic kre1i2e k3reih 2k3rh k3ric 4krip k4ron kr\xc3\xbc1b 4ks ks3all ks3amt k2s1an k2s1au ksch4 ks1e2b k2s1em k2s1ers ks1ex k2s1in k2s1o2 k3sof k5son ks1pa k3spe ks5s4 ks2t2 k4s3tanz kstat4 k3stau k1ste k2stea k5stei ks3ter k1sti ks3tie k2stor k2str\xc3\xa4 k1stu k2stum k2s1u k1sy ks2zen 4k1t kt1abs k2t3ad k3taf kt1akt k3tal kt3am kt1an kt3anz k2t3a2r kta4re k2t1au k3te kte3en k4t1ei k4temp k4tent k4t3erfo k4tex k2t1h k2t1id kt1im k2t3ing kt1ins k2t1of k3top kt1ope kt4ran kt3ras kt3run kts4 kt3se kt3st kt3t2 k2tuns kt3z ku1c ku3la 4kulp 2k3uml kum4s k2u3n2a kun6s4 kunst3 2kunt 2k1up_ kuri2 kuri4er ku2ro kur4sp kur4zen ku4schl ku2so ku2sp ku2s1t 1k\xc3\xbc 2k\xc3\xbcb k\xc3\xbc1bel k\xc3\xbc1c k\xc3\xbcr4s 2k1v 2k1w 2k5z2 kze3l 6l_ 5la_ la3ba 2laben 2labf 2labg 2labh 2l1abl lab2o l2a1b4r la3bra 2l1abs 3labu 2labw la3che 1lad la7den la3di l3adl 4ladm 2l3adr 5ladu l3adv 1lae la2ga la5ge lag5eis la4gl la4gn lag1ob la2gr lag5se lahn3 2la1ho 1lai 1laj la2k1i la1k4l 2l3al la3ma l4ami l4amp 2l3amt 1lamu la4mun la2na l2anc 5l4and lan2d3a lan6d5erw lan6d5erz lan4d3in lan2dr 2l1anf langs4 2lanh 4lanl 2l3ann l1ano l1anp 2lans 1lanx lan2z1w la1or l1a2po6 lap4pl la2r1an 2l1arb la2r1ei la6rene 2larm lar3st 2l1art lar3th la3ru la2sau la3se 2lash la2so 2la4sp 5lasseri 5lassern 5lassers lat2a 2l3ath la2t3ra lat4s lat4tan lat4t3r lau4fer lau2fo l2aufz l1ausg 2l1ausl 2l1ausr 2l1auss l1ausz 2lauto 2law lawa4 1lax l\xc3\xa41c 7l\xc3\xa4ds 7l\xc3\xa4dt 4l\xc3\xa4f 2l1\xc3\xa4hn 3l\xc3\xa4nd l2\xc3\xa4r_ l\xc3\xa4r2ma l\xc3\xa44sc l\xc3\xa43se2 4l\xc3\xa4t 4l\xc3\xa4ub 4l\xc3\xa4uc 4l\xc3\xa4ue 7l\xc3\xa4uf 1l\xc3\xa0 4l1b2 l3bac lb3ang lb3arb lb3b l2b3ede l2b3id l2b3ins lb4lat l3bl\xc3\xa4 l2bli l4bre_ lb4ro l3br\xc3\xbc lbs4 lb3sp lbst1e lb4sti lb4sto lb4stu l2b3uf 4l1c l3che l5chi lch3l lch3r lch3\xc3\xbc lch1w 4l1d ld3a2b ld3ad l2d1ak l3dam l2d1an ld1a4r ld5ari ld1au ld1\xc3\xa4r l3de_ ld1ei l3der_ lde3re l3dern l2d1e4se l2dex l2d1im ldo2r l3d\xc3\xb64 l2d3r ld1ra l4dran ld1r\xc3\xa4 l4dre ld1ri ld1ro ld1r\xc3\xb6 ld3sa ld3ska ld3sp ld1st ld1t4 l2d1um l2d\xc3\xbc 1le 3le_ le2au le3ba le3ben_ leben4s3 le2bl lech1a le2chi lech5t4e 3led 4ledd le3de le2e le3ei le3en_ le3f4a le2gas le2gau le2gl le3gr 3lehr leh3r2e 3lei_ lei2br l2eid 4l1eig l2ein_ lei2no l2eint lei2s leis6s5er lei3su lei4\xc3\x9fer l2eit lei8t7ersc leit3st lekt2a 3l2ela le2le 2l1elek le3len le3ler le3les 3l2eli lel3s le2m1o2 2lemp l4en_ le2nal le4n\xc3\xa4 3lene le4n3end 4lenerg l2enf le3ni len3kl l2e2no len3st len3sz l1ents 2l3entw le2nu le1os 2lepo lepositi8 l4er_ l2e1r2a le2r3a6g le2r3au ler5b4 4l3ereig le4r3eim l4erem l4eren l4erer le4rers 4l3erfas 4l1erfo 3lergeh 3l4ergew 2l1ergi ler3k 3lerm le1ro l1err l4ers_ lers4k ler3sz le2ru le3rung 4l1erz les4am le5s4e 2lesel le3sh lesi1 le3s4k les2t le3ste3 4lesw 2lesy le4tag le2tat 2le3th 2leto lets4 le2u 4leud 3leut 2lex 4le5xe l1exz 3ley 2l1f l3fa l2f1ec lfe1e lf1ein lfen2s l3fl\xc3\xa4 lf3lo lf3ram lfr\xc3\xb65 lf2s lfs3tau lfs3tr lf2tr lf4u lfur1 2l1g lg1d lge3ra lg3lo lg3re l3gro 2l1h 3lhi_ 1li 5li_ li1ac li1ak 3lib 3li1c 5lichem 5licher li3chi 4lick li3da 2lido liebe4s lie2n li3ene li5enp lien3st lie4s3c lie2st li3fa li4fe 5lig li2g1a2b li3ke li3ki li3kli li2kr lik4ter li3li li3m2a 2limb 2limp li3n4a 2l1indu li4nef li2nep li4nes 2l1inf ling4s 2l1inh li3ni li4nit 2l1inj lin2ka li2n3ol l2ins_ l2insc 2linsp 2linst 2l1int l1inv li2o lione2 li2p5a 5lipt li3s2a li4schu 2l1isl liss2 3list li2tal li3te li1t2h lits2 lit3sz li3tu 3liu2 2lixi 2l1j 2l1k lk3alp l3k2an l3kar_ lk1arm l3ke lkir5 lk3lo l3k4ra lk3ro l2k3ru lk2s3 l3k2\xc3\xbc lk\xc3\xbc1b 4l1l ll1a2be ll3aben l2l1abt ll1akt l2l3a4m ll5ama ll2anw l2l3anz l3lap ll1arm ll3aug l2l1aus l2l1\xc3\xa4m ll3b ll3d ll1ech l2l1ef ll1eim ll3eise l3l4em l5len_ ll3endl ll3endu l4lents l3ler_ lle2r3a l6l5ergen ll3ernt ll2err l3l4es llg4 ll1imb ll1imp l2l1ind lli5ne l2l1ins ll3l4 ll5m lln2 l2l1ob ll1of ll1opf l2l1o2r l2l3ou ll1ov l3low l4l1\xc3\xb6f ll3\xc3\xb64se ll3s2k ll2spr llt4 ll3th llti2 ll3tr llt5s2 ll1ur llust6 llus5tr ll3z2 2l1m lm3a2b lm1aka l2m1arc lm1ind lm1ins l4m\xc3\xb6l lm3p lmpf6 lm3s2z lm3th 2ln l1na lna6r ln3are l3n2e l3ni l3no l1n\xc3\xbc 1lo 3lobb 2lobj lo2bl l2obr lo3bri 2lof4 4lo2fe 3logi loh2e l1oh4r 3lok lol2a lo2min lo4n1o lo2o 2lopf 2lopt lo1ra lo4r\xc3\xa4 l2orc 4l1or5g6 lo3ro 3lorq l2os 3los_ lo4sa 3lose lost4 lo4ste lo4s1tr lo3sze lo2ta lo3th loti4o lot2s 2lo2v lo3vi 2lox l\xc3\xb62b l\xc3\xb63du 3l\xc3\xb62f 4l1\xc3\xb6fe l3\xc3\xb6hr 2l1\xc3\xb6l 5l\xc3\xb6sc 6l\xc3\xb6\xc3\x9f 2l1p lpe2n1 l3p2f l2p1ho l3prei l3pro lpt4 lp3tr 2l1q lque3r 2l5r2 lru3t2 lr\xc3\xbc1b 4ls l2s3a2d l5s4al ls1anf ls1ang ls1ann l2s1au ls1ec l2s1em ls3ere ls1erg l2serh l2s1ers l3ses l3sex lsho2 l2s1imp ls2kal ls2log ls3ohne l3s2po l2spro l3spu ls5s4 lst2a lst2e l1stec l5stei l5stel l1sti ls2tie l2stit ls2tr l1s2tu ls1um l3sur l1sy ls2zen 4l1t lt1abs lt3ala lt3all lt3alt lt3am l4tame lt3and lt1ang l3tar lt3art l3tat l4t3ato lt1au l5tef lt1eh l2t1eig lt1ein l2t1eis l5t2en lter3a lt3erei l3t2erg lter4sp lte3str lt3e2th l2t1h lt5hei lt2hem l3ti ltimo4 l3toc lt1of l2t1\xc3\xb6 l3t\xc3\xb6r lt3\xc3\xb6t ltra1l l3tr\xc3\xa4 lt3r\xc3\xa4u l2t3re l2tro lt3roc lt3ros l2t3r\xc3\xb6 lt5sc lt2s1e lt4stab lt4stoc lt2s3t\xc3\xbc lt3t lt1uh l2t1um ltu4rer ltu2ri lt3z2w 1lu_ lu1an 4lu2b1 lub3l lub3sz 6luc lu2dr lu2es luf2 2l1ufe luft1a luft1e 4lug lu2ga lu4g5e2b lu4ger lug5erp lu4g3l lu2go lu2g3r lug3sa lug3sp lu2gu 2l1uh lu1is_ lume2 2lumf 2luml l1ums l1umw 1lu4n 2l1una l1unf 2l1uni 4lunt 2lunw lu4pf 2lur lur1c l1urn l1urt 2luse lu2sp lus4ser lus2s1o lus2s3p lus4st lu2st lus2t3a lust3re lu2s1u lu2t1a lu4tal lu2t\xc3\xa4 lut3erg lu2top lu4t5r 3lux 2l\xc3\xbcb 7l\xc3\xbcd l\xc3\xbch1l l\xc3\xbc2s 2l1v l3vo l2vr 2l1w l5wa 1ly ly1ar lye2 ly3et 2lymp 3lyn ly3no ly1o ly3u 2l1z l3z2an lz1ar lz1erz lz1ind lz1o2f lzt2 lz3th l2z1w lz2w\xc3\xa4 lz2wec l4zwer 4m_ 1ma 2m1ab m2abe ma1bl 3m2a1b4r ma2ci mad4 ma3de ma1e2 ma1f ma4ge_ ma4geg ma4gek ma4gep ma4ges ma4get ma4gev ma4gew 2magg magi5er_ magi5ers ma5g6n 3mah ma3ha 2m1akt ma1la ma4l3akt ma2lan ma2lau ma3law mal3d ma3l2er mali3er mal3lo 2m1anal ma2nau 2m1anb man2ce mand4 man3ds ma2net 3mang2 4mangr m4anh 2manl 2mans\xc3\xa4 manu3 m2anw 2manz 2m1arb mar3g2 ma5ri 3m2ark 4mar4o maro3d 4marr mar3st mart2 mar5te ma3ru 3mas ma3s2p ma3sto ma3s2tr 3ma\xc3\x9f m4at ma2tab ma2tan mat4c ma4tel mat3sp 2m1auf ma3un 2mausg ma1yo ma3zu 3m\xc3\xa4 m1\xc3\xa4hn 6m1\xc3\xa4nd 5m\xc3\xa4nn m\xc3\xa41t m\xc3\xa4u4s3c 2m1b4 mb2a mbe2e mbe2n m3br 2m3c 2m1d md1ar m2d1\xc3\xa4 md1ei md3s2e m2d1um 1me meb6 me1c 2meco medi3 medie4 me3e2n meg4 mega5 3meh 2m1eif 2mej me3lant 3meld me2lek 2m1elf_ mell2 melt4 6m5eltern mel3tr 3men men3au me3nor m2ens men3st men6tanz 4m1entn ment6sc 4mentsp 4mentw me1o 3mer_ me1ra me2rab me2r3ap mer2e mer3ein me4r3ens 4m3erg\xc3\xa4n me5ric 3merin mer2kl 3mers mer3z4en 3mes me5si mes2sa messe4r mes2s1o mess1p meste2 me3ta mete2 me3th me5ti 3metr meu1 2mew 2mex 1m\xc3\xa9 2m3f mfan2 mfi4l 4m3g mge1 2m1h 1mi mi1ak mi1an mibi3e 3mi1c mi3da mi2e1i mi2er 3mig mi3gn mi2ki mi2ku mi3l2a 3mil4c milch1 mil4len 2m1imp mi1n2a mi3nal min2e min2ga ming3st mi3ni 3minik mi3n2o 3mirs mir5sc 3mirw mi2sa mise1 mi3sp mis2s3c mi4ste 3mi2t1 mit3es mit3s4 mit5sa mi5tsu 4mitz 2m1j 2m1k4 2m1l m3la m3le ml\xc3\xb63 2m1m m2m1ak m2m1ans mm1anz mma3s4t m2m1au mm1\xc3\xa4n mm1ein mm1eis mme2ra mmer3k mm1inb mm1ins mm1int mmi3sc mmi3s2t mmm2 mm3p mm3sp m2m3um mm\xc3\xbcl2 2m1n m4nesi m3ni 1mo mo4a3 2mobj 3mod mo2dr 2mog_ mo2gal 3moh mo2i moi5r mo2k1l 3mom m2on mo3ne mo4n1er mon2s1 mon4st mon3su mont4a 3mo2o 2mo1pe mo2per 2mopt mo1ra mor4d3a mo2rer morgens6 mo4sk mo3sp mo5s2ta moster4 mo3ti mo1y 3m\xc3\xb6 m\xc3\xb6be2 m\xc3\xb62c 4m\xc3\xb6k 6m1p mpf3erg mpf3erp mpf3err mpf3erz mp2fl mpf7l\xc3\xa4 mpf5li mpf1or mp3lu mp3ta mp3te 2m1q 4m3r 4ms m2s3an m4s1ap ms3as m2s1au m3se m6s1ef ms1erf ms1erw m4s1ex m3so m3spa m2sp\xc3\xa4 ms2po ms3s2 m2stal m1stec m1s2ti ms2tr m2str\xc3\xa4 m1s2tu m3s2t\xc3\xbc ms1um m2s\xc3\xbc m1sy 4m1t mt1ab mt1ak mt3alt m3tam mt1ar mt3are mt1ein m2t1erf m2t1erg m2t1erl m2t1ers m4t1ert m4t3eta mt1eu m2t1h m3ti m4t1im m4t1in mti2s mt1\xc3\xb6s mt2s mt3sc mts1e mt3s2k mts1p mt3spa mt3st mt4s3t\xc3\xa4 mt3su mt3t mt1um mt1urt mt3z 1m2u mu3a mu3cke 2m3uh mu3la 2muls m3umg 3mun mu3na mund3a mu3ne 4m3ungeb mu3no mu3ra mu5ru 5musk mu2s1o mu2s1t mu2su mut1au mut2s3 1m\xc3\xbc 2m\xc3\xbcb m\xc3\xbcl4len 3m\xc3\xbcn 3m\xc3\xbct 2m1v mvol2 mvoll1 2m1w2 mwa4 mwel4 1my my4s3 2m1z 6n_ 3na_ 2n1ab 3n4aba na3ber n3abh n2abo n3abs n3abt 4nabw na2c nach1 nach5s na3cke 1nade na2der 1nadi n3adr 1na1e n1af na1f4r 3nag 5n4ah na2h1a n5ahn n3aig n3air 1nais n1ak 3nako n3akt 1nal n4al_ nal1a2 na2lad na2l\xc3\xa4 3n4ald n6ale na4lent na2lin nal3k nal3l2a nalmo2 2nalo na2lop n4als_ nal5sc nal3t4 na2lu 2naly n6am_ 3n4ame 5na3me_ 5n6amen na3m4n 3namo 2n3amt n1an 2nan_ 2n3a2na n3anb n2anc 2n3ang4 2nank 2n3anl na3no 2nanr 2n3ans 2n3antr 2n3anw n1ar 3n4ar_ 2n3a2ra 1n4ard 3nare 3nari n2ark 2n3arm n2arr 2n3art n4arta na3ru 3nas na4schw 4n3asp n3asy 1nat 3nat_ na3t2h nats1 nat4sa nat6sc 2natt n1au 2nauf n3aug 5naui 1naul 2n3ausb nau3sc 2n3ausg n3ausl 2n3auss 2n3ausw nau5te 1nav navi5er_ navi5ers 1nax 1n\xc3\xa4 n2\xc3\xa4c 3n\xc3\xa4e 3n\xc3\xa4h n1\xc3\xa4hn 2n1\xc3\xa42m n3\xc3\xa4n n\xc3\xa4r4s 2n\xc3\xa4s n\xc3\xa44sc 2n\xc3\xa4u 4n7b4 nber2e 4n1c nc5ab n3cen n3ces n3che nch3m n3chu n2ck 6n1d nd1ab n3daf nd4ag n2d1ak n4dakt nd1ann n2d1anz nd1arb nd1arr nd1art nda3ru n2d1au n3de_ nde3alt nd1ei nd3ei_ ndel4st n3den nden3sk n4d3ents n5der_ n5deri nde2ro nder5ste n3des_ nde4se n3dest ndi2a ndo3c n2d1op ndo3st nd3rat n2d3re n4dres nd3rob nd3rol nd3ros nd3r\xc3\xb6 n4drui n4d5run nd2sor nd2spr nds3tau nd2sum nd3te nd1th nd1t4r n2d1und n2d\xc3\xbc 1ne 3ne_ ne2a ne3an ne3as ne3at ne3au ne2bl 2n1ebn 2nec 5neca 4nech 2ne2e1 neei6 ne3en nee3t n1ef 3nefe 4neff ne3g6 3n2eh n3ehe 4ne2he_ 6n3ehr 2n1ei 3nei_ n2eid 4neif 3neigt 5neigu 4n3eing ne2k nek3t ne2l nel3b 4n1ele ne3len ne3li nel4la 3ne3lo ne3lu 5n2em_ 2n1emb nem2e n1e2mi 2n3emp 2n1ems 3nen n2en_ ne2n3a 4n1endb n1endg 4n1endh 4n1endu 4n1endw ne2n1e2b nen3ei ne4nene nen3erb 4nengu nen3k ne2no nen5s4e 5n2en3ta n1entb 4n1entn nen2tr 4n3ents 4n3entw 4nentz ne2n1u n2env ne1op ne1os ne4p3f 2nepo ne2pos n2er_ ne1ra ne5r4al ne2r3am ne2r3ap ne2rau 2n1erbi ner5eier 2n1erf 4nerfo nerfor4 4n3erf\xc3\xbc n3erg 2n1erh 4n3erh\xc3\xb6 3ne3ri n1erk n3erm\xc3\xa4 2n1ermo 2n1ernt ne1r\xc3\xb6s 2n1err n2ers_ 4n3ersa 3n4ert_ 2n1ertr ne2rup 4n1erwa 4n1erz 3n2es n4es_ ne2s\xc3\xa4 nes4c 4nesia nesi1e 4ne3s4k ne2s1o ne2s1p 4n3essi 5ne2st ne3sta ne2t1an ne2tap ne2t1au ne2th ne2tre nett6sc 2n3e2tu ne2u neu3c neu3g 2neup 5n2ew 2n1ex 3nez 1n\xc3\xa9 4n1f nf1anb n3f\xc3\xa4 n3f2er n5fi nfi3le nf5lin n3f2o nfo3s nft4s3 4ng n2g1ac n2g3ad nga4ge n2g1ak n2g3a2m ng1anz n3gap n4garb n3gas n3g\xc3\xa4 n4g1\xc3\xa4l ng1d4 n4g5ein nge3le n5gen nge5nerw nge4ram n4g5erse n5ges6 ng5hu n2glan ng3lo ng3l\xc3\xb6 ng3lu n4gm ng3ne n4g1or ng3rat ng3r\xc3\xa4u ng3rein ng4sc ng4s3e4h ng4spo ng5s4tel ng3ts n2gue 6n1h n3ha_ n3har n3hau n3h\xc3\xa4 n3he nhe2r n3ho 1ni 3ni_ 3ni4a ni5as ni3ba nib3b 2nid ni2de ni3de_ n2ie nie3b4 ni1el nie3l4a nie4n ni3fa nifi3 3nig nig2a 4n3i4gel ni2g3r nig4s5p nik3ing ni3k4l ni2kr ni3lo n2imm nim2o 2n3imp 2n1in 4n3ind 3ning 4n3inh nin1i n2ins_ 4n3inse n3int n3inv 3nio ni3ok ni3ol ni3os 3n2is ni4schw ni4s1e ni5se_ niso2 nis3s2 nis3th nis3tr ni2s1u 2nit ni1th ni4ti ni3t4r 2n1j 4n1k n2k3ad n2k1ak n3kal n4k3alg nk3anz nk1apf nk1arb nk1arm nk3arti nk1aus n2k1\xc3\xa4h n2k1\xc3\xa4r n3ke nk1ein n4k3erfa n2k1id nk1inh n2k1ins n3kir n3kla nk3len nk3les n2kli nk3lie n3klin nk4lu nk5lun n2k3ne nk3nor n3ko nk1ort nk3r\xc3\xa4t nk3rede n3kri nk3ro nk4sal nks2ei nk2spa nk3spo nk2ta nk4t3it nk4top nk2t3ri nk2tru 4n3l 4n3m6 nmen2 4n1n nna2b n2nada n2nan nn2ar n2nau nn3d n3n2e nn3ein n4n3eis nn3ele nne2r\xc3\xb6 nn3erwa nn3erz nne4s nnes1e n5neu nn3f nn3g n3n2i n3no3b nn1o2r nn3se nn3s2p nn3ste nns2tr nn4th nn1ur 1no 5no_ 2nob no2bla n2oble 3noblo n3obs 3noby no1c 2no2d no3dr 2n1of no2fe 4n3o4ke no2leu n4om nom4e n2on_ no3n4a 2nonk 3n2opa 2nopt 2nor 3nor_ no1r4a nor2d3r 3norh 3nors n1ort 3n2os_ no3sh 3n2oste n1osth no5tab no2t\xc3\xa4 no4t1ei no5th no6tha no2t1op no2tr 3nov 4n1o4x 2n\xc3\xb6d 2n1\xc3\xb62f 4n1\xc3\xb6l 4n5p2 npir5 npsy3 2n3q 4n3r4 nre2s3t nre3sz n5ru 6n1s ns3ab n2s3ad ns3ak n4s3all ns1an n3sand ns3ans n2s1ap ns3art ns1au ns3auf ns3aus n2s1\xc3\xa4n n2s1\xc3\xa4us n6schlic n3schr n4schro nsch7werd ns1e2d n3sem nsen4sp n2s1ent n2s1e2p ns1erf n2s1erg n2s3erh n2s1erk ns1erw n3sex ns3ha ns3he nsho2f ns1id n2simp ns1ini ns3int n3s2kal ns3ki ns3ko ns3ky ns3l ns3m ns3ob n2s1op nsp4 n3spal ns6pei ns3ph n2spr\xc3\xa4 n2spro nsr\xc3\xbc2 ns5s4 n5stad nst1ak n5star n4s3tate n5stati ns2t1au n2ste n3stei nst3eif n3stel n4stem n3step n5s6terbe n5s6terne n5s6terns n5steu ns2tie n5stif ns2tin ns2to n3stoc nst3ort n4strie ns2tu n4s3ty n3suf ns1uh ns2um n2s1un n3sung ns2unr ns3w 4n1t nta3c n3t4al ntal1a nta3m nt2an nt3ang nt3ant n3t2arb nt1ark n3tarz nt4at n2t1auf nt1\xc3\xa4m nt1\xc3\xa4u n3te nte3a nte5au n5t4eb nte1e nte3g6 nt1eh n4teig n4t1ein ntem3p4 n5t4en nten4te nt5ents n5t4er nte3ru n4t5ess nte3v n2th n3the nt1hi nt1ho n3t2hol n5t4hu n3ti nti3c n4tinf n4t1inh ntini1 n5ti3t ntmo2 n5to nto5me nton2s3 n3t\xc3\xb6 nt3rec n5tree nt3reif n5trep nt3rin n5trop nt3r\xc3\xbc nt3sa nt3s2o nts2p nt4s3par nt5sta nt3t n3tu nt3z2 1nu nu1a nu3ar nubi3 2nu1c 3nue nu2es nu3et nuf2 nu2fe 2n1uh nu3k4 n2um_ 2n1umb 2numf 3numm 2numr 2n1um1s 2numz nu4n n1una 2n1und 3nung_ n1ungl 2n1uni 2nunt 2nup 2nur n2u2s nu3sc nu3se 3nut nu2t1a nu5te nu2t3r 3n\xc3\xbc_ 2n\xc3\xbc2b n\xc3\xbcr1c 1n\xc3\xbct 4n1v2 n3vi 4n3w 1ny_ 2nymu n1yo 1nyr 1nys 1nyw 4n1z n2zad n2zan n2z1au n2z\xc3\xa4n n2z1\xc3\xa4r n2z1ec n4zense n4zentz n3zep nz3erha nz3erwe nzi2ga nz3imp nz1of n2z1or nz3th n2z3wa n2z1w\xc3\xa4 nz1wer nzzol3 \xc3\xb1o1 4o_ 2o3a2 o5abs o4ac oa3che oa3chi o4ad oa3de o4ah o4a3i oa3ke oa4kl o5al o6a3la o4a3mi oanne4 o4ar o4as oa3se o4at o1b 2oban 2o3b2\xc3\xa4 2obb ob2e 2o3be_ ob3ein 2oben oben3se o2ber ober3in obe4sp 2ob2i 1obj ob1l ob3la o2b3li 2oblo 1obm 2obo o3bra o2b3re ob6ri ob3ro ob2s2 ob3sh ob3sk ob3so ob3sp 2o3bu 2ob\xc3\xbc 2oc o3ca o1ce och1a ocha2b o1che o2ch1ec och1ei och3l och5m och1o och1\xc3\xb62 och3r och5te och3to o1ch2u och1w o1ck ock2e o3cki ock3sz o1cr o1\xc3\xa7 2o1d od2dr o3deb o3de3i ode2n oden1e odes1e ode3sp o3dex o3dir 4odr o2dre 4o3du 2o1e2 o2ec o3en1 o2es oe3t o3et_ o3ets o1\xc3\x8e 2ofa of3am o2f1ei of2en o3fer ofes3 of2f1a of2f1in of2f3l of2f3r of2fu 2ofi ofi3k of3l of1la of5li 2ofo 2o1fr of3ra of2s of4s3a of4s1p of3st 2oft of2tei of3th 2o1g o2g1ab og3ala oga4t3 o2g1au o4g5ei o3gh ogi2er o2gl o3glo o3g4n ogs4 og3sp o1h4a o1h\xc3\xa4 o1he o3he_ oh1eis o3heit o3hem o3hen o3her_ o3here oh1ert oh1erz o3hes o1hi ohl1a ohl1ei oh3lem oh3len oh4l3erh oh3li oh3lo ohls2e oh2lu oh3m 2ohn ohn3a oh2ni 3ohnm o3ho o2h1\xc3\xb6 ohr1a oh4rin oh1s oh3ta o1hu oh1w o1hy 2oi o1i2d o3ie o1im o1in oi4r o2isc o3isch_ o1ism oi1th 2o1j 2o1k oka3i oka2la okale2 ok2e o3ki oki4o ok3lau ok3l\xc3\xa4 okna3 ok2s1p okt2 2ol o1la o2lab o2l1ak ol1ant ol2ar olars4 ol1auf o1l\xc3\xa4 ol4d5r ol1eie ol1eis o1l\xc3\xa9 ol4fa ol2f3l olf1r ol2fra olf3sp ol2gl ol2gr olib6 oli5en oli5f olik4 ol2kl ol2k3r olk4s ol2lak ol2l1au ol2l1ei ol3ler ol4l3erk ol3lo o3lo o5lof olo3p2 ol1ort o1l\xc3\xb6 ol2pr ol2str o3lu olu2th ol2z1a ol2zin olz3w 2om om1art o2m1au ombe4n o3me_ o2meb ome3c o2m1ei o3m2eis o2mel om3ene o2mep o2meru om1erz omie4t1 o2m1ind om3ing om1int om3ma om1org om3pf omp6l oms2 om3sp o4m3un 2o1n2a on3ab o2nae on3ak o3nal on3ap o2n3ar o3nat on3aus 2o3n\xc3\xa4 onbe3 2one on4eh onens2 onen3st o2n1erb on1erd on1er\xc3\xb6 on5f 4ong4 on3gl ong5sc 4o3n2i o5ni_ oni3d o5nik o4n3im on3ing onli4 onlo2c on3nan onn4e o3no3 ons3a onsa2g onse2l onsi2 ons1p on3ta on6t5end ont5erw on2t1ri on5v 1ony o1o2b oof4 oo2k ook3l o1op o1or oo2tr oot2st 2o1\xc3\xb6 o1pa opa1b4 opa3u4 o1p\xc3\xa4 o1ped o1pei o1pen op2f1a opf3l op1flu op1fl\xc3\xbc 4oph2 o1pi opi3er_ opi5ers_ opin2 op3le op3li 2o3po op4pl 1oppo op2pr 2o1pr 1opsi op3sz 1opt4 op3tr o1q 2or_ or1a or3a2b o1rad 2orak o2r3alm o2r3alp o2ram orani1 or3arb or5att o2rau o3r2\xc3\xa4 or3\xc3\xa4nd or3\xc3\xa4t orb4 or2bar or1c 2orca or2ce 4or2da ord3am or4d3eng or2deu or2d1ir 1ordn or2do ord3s2t 2ordw 4ore ore4a o2r1eck o2r1ef ore2h or1eig o3r\xc3\xa9 orf3ein or2fle or3g4a 2orget 2orgia or2g5l or3gle or4gn 2orgr 2orh o1ri 4o5ril 2orin or1ins 2orit or3k2a or4k3ar ork2s 2orm or2mor or3na or5ne_ or3no orn3st o1ro 2o1r\xc3\xb6 2orq or3rh 2ors2 or5sa orsch5li or3sz ort3an or2t1au ort3eig ort3ein or4tem or4tent or4t3ere or4t3erf or3th or4the or4t3off or2t\xc3\xb6 ort3rau or4t3r\xc3\xa4u ort3re ort3ric ort5sch or2t1um o3ru o4r3un o5rus or3\xc3\xbc o1ry o3s2a os3ad os4an osa3s os4co 2o3se ose3ei o4s1ei ose2ne os4er os2hi o3sho 4o3s2i osi3tr o3s2k os3ka os3ke os3ki os2lo o2s3p o4sper os4po os4pr os2sa os4s\xc3\xa4 os4sei os4s3enk os4s3o os4s3p os4st oss1ta o2st os4ta ost1ab ost3all ost3am ost3ang os5tarr os2t1au o3stei oste2n oster3e os6t5er6we os4t1h os3til o6s1to ost3ran ost3rat ost3r\xc3\xa4 ost3re ost1uf osu4 o1sy os2ze o2\xc3\x9f1el o2\xc3\x9f1enk o\xc3\x9fe2r o2\xc3\x9f3ere o2\xc3\x9f1erf 2o1t o5tari o3tark o5tat o2t1au ot1\xc3\xa4r 4ote o2teb o3tei ote3in_ ote3ins ote4l1a ote5ner o2t1erw ot2he ot3hel o6t1hi o4thr ot2i ot3im otli4 4oto ot1opf ot2or o3tra o2t3re o2t3ri ot3se ot3s2o ot2s1p ot2tau ot3te ot4t3erk ot2t3r ott3se ot3z2e 2o2u oub4 ou2ce ou3e ou1f6l ou4ge o3uh ou4le_ o3um oun4ge_ ouri4 our2ne ou5s2i outu4 2o1\xc3\xbc o1v ove3s oviso3 o3vo 2o1w o3wec owe2r1 o1x ox2e o2xu 1oxy o3xy_ o1yo oys2 oy1st 2o1z2 o3zi ozon3a \xc3\xb4r3 \xc3\xb61b \xc3\xb6be4li \xc3\xb62ble \xc3\xb62b3r \xc3\xb6b2s3 2\xc3\xb61c \xc3\xb64ch3l \xc3\xb62chr \xc3\xb6ch2s \xc3\xb6chst3r \xc3\xb6chs4tu \xc3\xb61d \xc3\xb6de1r \xc3\xb6di3en \xc3\xb62du \xc3\xb61e \xc3\xb6f2fl \xc3\xb6f5l \xc3\xb6g3 \xc3\xb6ge3le \xc3\xb6gen4s1 \xc3\xb62gl \xc3\xb62gr \xc3\xb6g4s \xc3\xb6g4u 2\xc3\xb6h \xc3\xb61he \xc3\xb6h3m \xc3\xb6h1ri \xc3\xb61hu \xc3\xb62k \xc3\xb63ke \xc3\xb6ko3 \xc3\xb6k3r \xc3\xb66l 3\xc3\xb6l_ \xc3\xb6l1a \xc3\xb6l1ei \xc3\xb6l1em \xc3\xb6l2fei \xc3\xb6l1im \xc3\xb6l1in \xc3\xb6l2k3l \xc3\xb6l4nar \xc3\xb6l1o2 \xc3\xb6ls2 \xc3\xb6l1st \xc3\xb6l3sz 2\xc3\xb6n \xc3\xb6n2e \xc3\xb63ni \xc3\xb6n2s \xc3\xb6n3sc \xc3\xb6o1 \xc3\xb61pe \xc3\xb6pf5l \xc3\xb6p2s3t \xc3\xb6r3a2 \xc3\xb6r1c \xc3\xb6r2dr \xc3\xb62r3ec \xc3\xb62r1ei \xc3\xb62r1e2l \xc3\xb6r2erg \xc3\xb6r2f5l \xc3\xb6r2gl \xc3\xb61ri \xc3\xb62r1im \xc3\xb6r2kl \xc3\xb6r1o2 \xc3\xb6rs2e \xc3\xb6r3sk \xc3\xb6r2st \xc3\xb6r5t2e \xc3\xb6r2tr \xc3\xb61ru6 \xc3\xb62r1une \xc3\xb62sa \xc3\xb62sc \xc3\xb6sch3ei \xc3\xb6sch1w 2\xc3\xb6se \xc3\xb62s1ei \xc3\xb62sp \xc3\xb6s4s3c \xc3\xb6s2st \xc3\xb62st \xc3\xb6s3te \xc3\xb6s1tr \xc3\xb61\xc3\x9f 2\xc3\xb61t \xc3\xb64t3a \xc3\xb63te \xc3\xb6t2sc \xc3\xb6t2tr \xc3\xb61v \xc3\xb61w \xc3\xb61z \xc3\xb6ze3 \xc3\xb6zes4 4p_ p4a 1pa_ 5paa 3pack pa3da pa1fra pa3g2 pa1ho 1pak pak2to 1pa1la palat5 1pal\xc3\xa4 2palt pan3d pan4ds pa2neu pan3k4 pans4 pan3sl 3pan3z4 3pap papie8r7end 1parad 1parco pa5reg pa3r2er 1park_ par4kau par4k3l 1pa2ro par5p4 1partn par3z pa4s pa5sa pa5sc pa5se pa5si pa5s2p pa5str pa5su 2pa\xc3\x9f pat4c 1pat4r 1pau3 p5auf pau4st p\xc3\xa42 p\xc3\xa43cke 1p\xc3\xa4d p\xc3\xa43de p\xc3\xa43\xc3\x9f p\xc3\xa46t1e2h p\xc3\xa4t1h p\xc3\xa4t5s 2p1b 2p3c 4p1d pda4 1pe_ pe4a pea4r 1ped4a peed1 2pef pei1 pe1im 5peit 4pek pekt2s 1pel pe2l3a6 pel5d pe2let pe3lin pe4l3ink pel3l2e 1pem pen4al pen3da pe4nen 3pensi pe2nu pen3z4 pe1ra per4an pere2 per4na per4r3a 5pers perwa4 pe3sa pes5s2 pe2st 3pet 1p\xc3\xa9 2pf 4pf_ p2f1ab p2faf p2f1ak pf1ans p2fa6r pf3are p2f1au p2fei pf1eim pf1ein p2fent p3fer_ pf2erw pff6 pf5l\xc3\xa4 pf3lei pf3li pf5lie pf3lo pf3l\xc3\xb6 pf3lu p2for pf3r pf1ra pf1ri pfs2 pf3sp pf3sz pft2 pf3th 2p1g pgra2 1ph 6ph_ ph4a 4ph\xc3\xa4 2phb 2p1hei 2ph1ers 2phf 4phg phi2ka 4phk ph2l 2ph3m 2phn p3hop ph4r 2phs 2ph5t2 4ph7the phu4s 2p1h\xc3\xbc 2phz pi4a5 pi2e pi3en 5pier pi3gn 1pil pin2e 3pinse pi2o pi2pe pi5ri 1pis pit4a pi1th pit2s p1je 2p1k4 pku2 pkur1 1p2l4 4pl_ 3p4la p5lad plan3g 3pl\xc3\xa4 2ple_ ple1c ple4e ple3n 2plerm p5lic p5lif 4plig p4lis p4lo 2p1m 2p1n 1p2o po1c po2i po3id 3pol po2lau po2p5ak po1pe po2pl po3pt po1ral 2porn por3s por4tra por4tri po5s2e po3sp po4st post3ag po6ste pos4tr po3ta 3pote pot2h po2t1u po2w po3x p\xc3\xb62bl p\xc3\xb62c 4p1p p2p5ab ppe1e ppe2n1 pp1f4 p2p1h p3p2ho p2p3l p4ple pp4li p2p3re p2pri pp3sa pp3sp ppt2 pp3ta pp3to p2r4 3prak 3prax 1pr\xc3\xa4d 3pr\xc3\xa4m 3pr\xc3\xa4s 4pre_ 2prec 1pred pre2e1 1prei 2p3rer 3pres pri4e 1prinz 1priv 1pro 3prob pro3be 2proc 3prod 3prog 3proj pro3st 3prot 1pr\xc3\xbcf 2pr\xc3\xbcn 2ps 4ps_ ps2a3n p3s2h p2s1id p2s1\xc3\xb6 ps2po p1stea p1s2ti ps2tu 3psy ps2ze 2p1t p2t1a pt3alb pt3am pt3as pt3at5 p2t3ec p2t1ei p4t1ent pt3erei p2t1erw p2t1erz p2t1h p3ti p4t1in pto5me p2tos p2t3r pt5re pts2 pt3so pt3sp pt3su pt3t pt1um pt1urs p2t\xc3\xbc 3p2ty pt3z2 1pu 3pub4 pu2dr 3puf 2p1uh pu3la 3pulv 3pum 3pun 4pund pun2k pun2s 3pup pu2s pu4s3t 3put put2s 1p\xc3\xbcf 2p1v 2p1w pwa4r 3py1 py3t 4p1z q2u4 que3rel quer5n 4r_ 1ra_ 2r3aac r3aal ra1ar r1ab rab2bl 2rabd ra3ber 2rabf ra1bl rab4le ra2bli rab5r 2rabs 2rabt 2r3abw 1raby ra1ce ra3che_ ra4cheb ra3chen rach4t3r ra2chu r2ack 2radap 3radf ra3di ra4d3r 1rae ra1er r2af raf3ar ra2fer raf1r ra2ga ra5ge ra3gle ra4g5n ra3go r2ahm 2raic rail4l r3air 3ra1k4l ra2kro 3rak\xc3\xbc r4al_ rala2 ral3ab r3alar ral3b 1r4ald 4r1alg rali5er_ rali5ers rall2e 2r3alm_ ra2lo ra3lop r4als r3alt ra2lu 3raly ra3ma ra2mer ram4man ram6m5ers ram4m3u r3amn ram3ste 4r3amt ramt6s r2an_ 2rana 6ranc r2and r4anda r4ande ran4d3er 2r3anf r3angr 4r3anl 2r3anm 2r1anp 2ranr 2rans r4ans_ ran3skr r2ansp ran4th 2ranw ra1or r2ap 2rapf 2r1ar ra4r3in r2ar3k r4as_ ras4a ra3sp 2ra\xc3\x9f 1r4at ra2t1a ra4t3\xc3\xa4 ra5te 2ratta 4rau_ 3raub_ rau2br 4raud rau3en 2rau2f 2raug rau4m3ag rau4man rau2mi ra3umsa 2rausg rau4sp raus5se rau2th raut5s r2ax r2\xc3\xa4d 4r\xc3\xa4f 4r\xc3\xa4g r\xc3\xa43gn 4r\xc3\xa4h 2r\xc3\xa4m 3r\xc3\xa4n_ 3r\xc3\xa4ni 2r1\xc3\xa4r r\xc3\xa44s3c 4r\xc3\xa4ut 2r1b rba2l3a rba3re rb5art rb1auf rb3b4 rb1ech r2b1ent rbe3r2e r3bla rbla2d rb7lasser r4b3last r2ble_ rb5ler rb2o rb6ri rb2s rb4sei rb3ska rbs1o rbst3a rb4st\xc3\xa4 4rc r1ce rcha2 r1che_ r1chen r1chi rch3l rch3m rch3r rch1s4 rch1w r2ck r1cr 2r1d rd1ab rd5achse rd3al r3dan rdani1 r4d1ant r2danz rd1arb rd1ei r2d1elb r2d1e2le r3den rde3nar r5der_ rde3re rd3ernt rde3sp rde3sta rd1ira rd1iri r2d1it r3don rd1os rd1\xc3\xb6s rd3rat rd3rau rdt4 rd1th rd1tr rdvi3 1re 3re_ re3ad rea5g re5aler re4am re3as re2b1a re2b3l reb1r re4b5ra re2b\xc3\xbc r2ech rech3ar 4rechs 3rechte 2reck_ 3rede_ re1el re2en re3er 5refe 2reff 5refl 5refo 3reg 5reg_ rege4l3\xc3\xa4 4reh re2hac re4h3ent re4h1o r2eie 2reig rei5ge rei3l2a rei5mu r1ein re1ind 4reing 4reinn 4reinr rein6sta rein8s7tre re1in2v 2reis_ re2ke re3la 2r1elb re3lei 2r1elf re3lo 2r1elt relu2 r2em re3m4a 4rempf rem2sp 4remu r2en_ r2ena re1nad re3n\xc3\xa4u 3rendit ren3dr ren4gl 2rengp ren3sa ren4sei 2r1entl 2rentn 2r1ents 2rentw 2rentz r2enz re3or 5repe 5repo 3r2er_ re2ra 2r1erb r2erbr 2r1erd 3rere 2r1erf r1erg r1erk 4r3erken 2r1erl 4r3erla 5rerlag 2r1erm r1ern\xc3\xa4 4r3erns 4r3ernt 3re1ro r1er\xc3\xb6 3r2ers_ 2r1ersa r2erse 2rersp r1ert r2erte 2rertr 2r1erz 3r2es_ re2sa res1au 3rese re3s2p 2ress ress2e res5sei 3resu 2reta re2u reu3g2 2reul re3uni 2r1eur r1e2w 2rewa4 re3we 4r3e2x1 3rez 4rezi 1r\xc3\xa9 2r1f r3f\xc3\xa4 r2fent rfi4le_ rfin6s rf5lic r3fl\xc3\xbc r3f4re rfr\xc3\xb65 rf2s rfs1\xc3\xa4 rf4s1id rfs3pr rf3sto rf2ta rf3tau rft4r r3fu 4r1g r2g1ah r2g1ak rg2an rge4an rge2bl rge4ral rg5e4tap r4geto rgi3er_ rgi4sel rg4l r3gla r4glan rg6lei r4g5leu rg5lo r4g5lu r3gn rg2ne r4gno rg1ob r2greg r2g3res rg3ret rg3rin rgs2p rg3str rgt4 rg3th r1h4 2rh_ 2r3ha r4ha_ 2r3h\xc3\xa4 3r4he_ 3r4hen r3hof rho2i3 2r3hol 2rh\xc3\xb6 2rhs 1r2hy ri3am ri1an ri3at ri1ce ri1cha ri3chl 4rick rid4 ri2d5an 2ridol ri1el ri3els ri4em riene4 ri3eni rie2nu ri1er_ ri4e3re ri3ers_ ri1eu ri2fa ri2f1ei ri2fer ri2f1o ri2f5r rif3st rif4ter 3r2ig ri4g5ene 4rigg 5rigj 7rigk 4rigr r2ik ri3kle ri3le ri3ma r2imb ri2met 2rimp rim2s ri5n4a r1inb 2rind r2inde ri5n4e rine1i 2r1inf rin2g3l rin2gr 4r1inh r3init 2rink 1rinn 4r3inner 2rins 3r4ins_ 4rinse r4inspi 2rint rin2t5r 4r1ir r2is ris4a ri4scho ri4schw 3risik ri3so ri4s1p 3riss ris4sa 4rissi ris4st ri4st r2it r3i2tal ri5ti ri3t4r 5ritu ri2x1 1r\xc3\xad 2r1j rjo1 2r1k r2k3ad rk3all r3kla rk4lo rk4lu rk3nor r2k3nu rk3rau rk3r\xc3\xa4u rk3rea r5kri rk3rin rk2s1e rk3sen rk3shi rk2sp rkstati6 rk4stec rk2ta rk4t3eng rk4t3erf rk4t3erw rk2tin rk2t1o2 rkto4b rk2t3r rk3tra rk4tre r2k1uh rk2um rku4n rk1uni 2r1l r3la rla5m rle2a r3l2i rli2s rl\xc3\xb6s3s rl2s1p rl2sto rl3th r5lu 4r1m r2m3ald rm3anz rma2p r2m3aph rm1arm rm1aus r2m1ef rmen2s r2m1ide rm1ope rm1o2ri rmo3s rmt2 rmt3h rm3ums 4rn r1n2a rn3a2b r2n3anz rna4r rn5ari r2n3au rn4aue rnd4 rn3dr r3ne r4nef rn4eh rn2ei rn3eif r4n3eis rne2n r4n3ene r4nerf r4nerg rn4erhi r4nerk r4n1ert r5nes rn4et r4nex rn1g r3ni r4nin r3nod r2n1op rn1or rn1\xc3\xb6 rn3s2\xc3\xa4 rn3s2z rn5t2e rn3th r1n\xc3\xbc r1ny ro5ar ro5as ro4bei 2robj 1robo ro2br ro1c 3rock_ r4o3de roe4 ro3et 2rof roh1l 3r2ohr 1roi ro3in ro3le roll4en 2roly ro2mad ro2mer 4romm r2on 3ronn ron4tan ro1ny ro1pe 2ropf ro5ph rop2s r1or r2ora ro2rat ro3rau ro2r1o ror5th ro1s\xc3\xa9 ro3sh ro5si ro5sk ro3smo ro3sp ros4s3c ro3stu 4ro\xc3\x9f ro4ta ro3tu 3rout ro3z r\xc3\xb63ch r1\xc3\xb6f 4r\xc3\xb6g r1\xc3\xb6k r2\xc3\xb6l r\xc3\xb67le r1\xc3\xb6r r2\xc3\xb6s_ r\xc3\xb64s3c r\xc3\xb63se 2r3p2 rpe2re rpf4 r5p4fl r4pli rpro1 r4ps rp3se r4p3t r1q 2r1r r3r2a rr1amt r5r\xc3\xa4 rrb6 rr1c r3r2e rrer4s rre2st r4rew rr2h rr3h\xc3\xb6 rri3k2 rr2o r2r3ob rro3m rr2st r3ru r5r\xc3\xbc rr\xc3\xbc1b 4r1s r2s3a2d r4s3amt rs1ang r4s3ar r3sc r5sch2e r6scherl rsch4l r5schu r3se rse4ne rs3ere rs1er\xc3\xb6 rs1ers rs1erz r4sex r3sho r5si rs2ka r5skal rs3kat rs2kie rs2kis rs2kl r4sko r4skr r4sku rs3l rs4no r3so r4s1op r4s3ort_ r3s2p rs5s2 rs2t rs4temp rs3ter r3s4terb r3stie r2stin r3sto r4stot r3str r4st3ran r3stu r5st\xc3\xbc r3s2wi r3sy rs2zen r4szi 4r1t r3tab rt3aben rt1abs r2t1ac r2t3ad rt2akt rtal2 rtals1 rt3am r2t1an r2t1ar rt3a6re rt3att rt1auf r2t1\xc3\xa4r r3te r5te_ rtee2 r5teh rt2ei rtei3la rtei3s2 rte5m2e rte2n1 rtens2 rten3st rte1ra rte4ran rt3erei r4t1erh r4t1erk r4t1erl rter4re r4t3ersc rte3s4k r2th r4tha rt1he r4t1hi r3tho rt1hol r3thy r3ti rto3p r2t1o2r rt4rad rt5rak rt3rec r2t3res rtr\xc3\xbc2 r4ts rt4sam rt3sc rts1pa rt2spr rtt4 r2t1urt r3t\xc3\xbcn rt5w r3ty rt3z2 rtz4w ru1a ru3a2r rube2 ru3che ru3cker ru2cku ru2dr 3ruf ru2fa ru3fe ruf4s rufs1p ru3ga 2ruhr 5ruin ru1ins ru1is 2rum 4rumf 4ruml r2ums_ ru4n r1una run2d1a run4d3er 2rundz ru5ne 2r1unf 2rungl 2r1uni r1unm 4runn ru5no 2runs 4runt ru3pr 4r1ur r3u2r1e ru2si rus2s1p rus4st ru4st ru2t1h ru2to ru2t3r rut2s 6ruz ru2z1w r2\xc3\xbc 4r\xc3\xbcb r\xc3\xbc1ben r\xc3\xbc1ch 4r\xc3\xbcg 4r\xc3\xbcmm 2r1v 2r3w 2r1x ry2c 2r1z rz2a rz3a2c rz4ach r2z3ar r2z3as r2z1eng r2z1erf rz1erg r2z1erk rz1erq rz1id r3zof r2z1op rz1or r2z1os rz5te rz4th rzu3gu rz1urs rz1wa r3z2w\xc3\xa4 r3z2wec 6s_ 1sa 5sa_ 3s4aa 2s1ab sa2be 3sabet sa1b4le 4sabs 3s2ac 5saca sa1cr 2sada 2s3adr sa3fa sa4fe 4s3aff sa1f4r 3sag s3a2gr 5s4ai sa1ik sail4 2s1ak sa2ka 3saki s4akr 4sakt 3sal sa1la 5s4alo 4s3alt 5s4alz 3sam 5s4amm 6s5amma 4s3amp s2an_ 2s1a2na sa3nat 2s3anb san2c s2and san4d3ri 3sang_ 2sanh 5sani 2s3anl 2s1anp 2s1ans san3sp 4s3anw s3anz sa2po 2sapp 3sapr 2s1ar 3sar_ 3sara 4s3arb 3s2ard s4are 3sari s3arm 3sars 4sart s3arz s3a4sp sa3stu 3sat sat2a 4s3ath 4s3atl 4satm sa2tr 5satz sat4z3en 3saue 2sauf 4s3aufb 3saum 3saur sauri1 2s1aus s4ause s1au\xc3\x9f sa2vo 3s2ax 1s\xc3\xa4 3s\xc3\xa4c s3\xc3\xa4hn 3s2\xc3\xa4l 2s1\xc3\xa4m 2s1\xc3\xa4nd 5s\xc3\xa4nge 2s1\xc3\xa4r 3s\xc3\xa4t 3s\xc3\xa4ul 2s\xc3\xa4u\xc3\x9f 4s5b6 sba4n sber2 sbe3re sby5 1s2c 2sc_ sca2 4scar 4s3ce 6sch_ 2schak sch4al 5schanz 6schao 5sch\xc3\xa4 6schb 4schc 3sche s4che_ 4schef sch3ei_ 5scheib 4schemp sch5erla 4schess 4schex 4schf 4schg 2schh 3schi s3chia schi4e s4chim 4schk 4schle_ 6schlein 4schmus 4schn_ 5sch\xc3\xb6 6sch\xc3\xb6l 2schp 4schre_ sch5rom 6schs schs4e sch3s2k sch3sti 6scht sch3t4a sch5te 3s4chu 4schunt 5sch\xc3\xbc 4schz 2scj 4scl 4sco 5s4cop 2scs 2scu 6s3d sda3me sde3s 1se 3se_ se3a 4s1e2ben 2sec s1echo sech2s 4s1echt se2ck 5secl 4sede 5see se2e1i4 se1er 3sefa 3seg se2gal se2gl seg4r 3s2eh se2h1a4 seh3ag se3he se4h3erk se4hin seh1l seh3re seh1s se2h\xc3\xbc 2s3ei_ 3sei3b 4s3eig s1ein 7s4ein_ 4seinb sei5n2e 2seing 2s3einh 2s3eink 2seinl 2s3einn s4eins_ 4seinst 4seint 2seinw 4seis 5s2eit 5sek 3s2el_ se2l1a6 sel3ag se3lam se2l1ec 4selem sel3erk se4l3erl sel3ers s1elix 3seln se4l1\xc3\xb6 3s2els sel3sz sel3tr s4e3ma 4s1emp s2en_ 3s2ena se3nac se4nag 4s1endl se4n1ec se4ners 5s4eni 3senk 3s4ens s2ent_ sent4a 4s1entf 2s3entg s2enti 4s1ents 4s3entw 4s3entz se2n1u seo2 3seq 5s2er_ ser3a2d se2r3al se3ref 4s3ereig se4r3eim se4r3enk ser2er 4s3erfo 4s3erf\xc3\xbc ser5g s2ergr s1erh 4serh\xc3\xb6 3seri s1erm\xc3\xa4 s1ern\xc3\xa4 4s3ernt se1rol se1rot s4ers_ 2s1ersa ser5sk seru4 se4r1uf se3rum 5s2erv 4s3erwei se1stu se3su 3set 4s3e4tap se2tat 4s3e2th se1u4n 2sex 5sex_ 4sexa se2xe 4sexp 4s3f4 sfi3le 4s3g4 sge3s4a 2s1h 3sha_ sha2k 4shan 1shas s3h\xc3\xa4 sh2i 3shi_ 3shid 1shi4r sh1n 4shof 3s4hop sho4r shor4n1 shorn3e 3show s3h\xc3\xb6 sh4r s3hy 1si 5siak si3am_ si3b4 3si1c s2ide_ si2deo s2ido 3s2ie si3ene si3err sie2s 3si1f6 3s2ig si3g6n si2g3r sig4s si2k1ab si4k3erl si2ki siko3b si4kr sik3t4 si2ku 3si3lo si3n4a 4s1ind 6s1inf sin2g1a sin3gh sin3g6l sin2gr sing3sa 2s1inh 2sin1i1 4s1inq 4s1ins 2s1int 4s1inv 3sio si3os 3s2is si2sa si4s1e si2so sis1p sis3s 7s2it si2tau si3te si2t3r si3tu six3 1s\xc3\xad 4s5j 2s1k4 4sk_ s2kala s3kam 4s3kas ska4te_ ska4tes 4skb 4sk2e 4ski 5s4ki_ 5skiz s3klas s3kn skna3 4skom 4skor 4s5k\xc3\xb6 s5kra 4sks 4sk5t s7kun 2s1l4 3s4lal 4slan s3l\xc3\xa4 sl5b s3le s3li 3s4lip s3lo_ slo3be s3loe s5l2u s3ly 2s1m2 s3me s3mi s3mu s3m\xc3\xbc 2s3n2 4sna sna1b4 sni1er 4s5not 4sn\xc3\xb6 1so 3so_ 4s1o2b so1c 3soft 3sog so3gl so2h s1ohe 4s5ohng 2s1ohr so3la so4l3ei so3li 4s3oly 3s2on son3au son5ende so2ny so3o 3sor_ so1ral s1orc 4s3ord so2rei s1orga 2s1o2rie so2r1o 3sors so4ru 3sos 5s4os_ s1ost 5sota so3tr so3unds so3unt s1o2ve s1ox s4oz 1s\xc3\xb6 s\xc3\xb62f 2s1\xc3\xb6k 2s\xc3\xb6l s1\xc3\xb6s 1sp2 4sp_ 4spaa 4spak s2pan spani7er_ 4spap 2spara spar5sc 3spa\xc3\x9f 2spat 4s3pau s2paz 3spee 3s4pei 4spel 2s1peri 3s4perr 2spers 2spet 3s6pez 4s3pf 2sph 3s2ph\xc3\xa4 s3phe 3s2pi s4pi4e 5spiel spier4 spi2k 4s5pil 4spip 4s5pis 2spl 4spla 4spl\xc3\xa4 3s2pli 2spo 4s3pod 3s2poi 4s5pok 4spol 4s3pos 4spr_ 3s4prac 2sprax 4spr\xc3\xa4m 4spr\xc3\xa4s 5s4prec 2spred 2sprob 2sprop 2sprot 3spru 5sprun 2spr\xc3\xbcf 3spr\xc3\xbcn 4s3ps s4p3t s2pu 4spun 3s4pur 4sput 4spy 2s1q 6s3r4 srat6s sret3 sr\xc3\xbc2d 4s1s ssa3bo s4s3ac ss1aj s4s3ala s4s3ang ss1ano s4sanz ss1app s3sas2 ss3att ss1au s3s2\xc3\xa4 s3se s4s1ec s4s1ega sse3ha s4sein sse3inf sse3int ss1eis s5sen_ ss2er sser5att ss3erh\xc3\xb6 s4s3er\xc3\xb6 s4s3erse s5s4es sse3ta s3si s5sie s4sint ss3la ss1off s2s1ori s3spe s5s2pek s3s2po ss5re ss5s4 s3sta s5stad sst6e s3stel ss2ti s3sto s3stu ss2tur s3st\xc3\xbc ss1ums 4st_ 1sta 2sta_ 3staa sta2bl stab6s 3s2tad 3staff 6stag 3stah 2stak s5tal_ 2stale st3alp 2s3tan_ st3ana 5s4tand 2stani 2stans 2stanw s2tar 3s4tar_ 3s4tars st3a2s sta4si 3stat 4stat_ s2tati 2st1auf 2staum 2staus 3st\xc3\xa4 4st\xc3\xa4g 4stb 2stc st3ch 2std 4ste_ 3steck ste5cke 1s2teg ste2g5r 3steh 1s2te2i 3steig 4steil 4steing 1s2tel 2stel_ 2s3tele 2stels 2stem 4stem_ 4sten s4t3ends s4t3engl s5tens s4t3entf 2ster 6ster_ s3tera st6erb s3ters 4stes stes6se_ ste4st 2stet 4stet_ 3steti 3s4tett 3steu 5steue st3ev 4s3tex 2stf 2stg 4sth st3ha st1hi st1ho s4t1hu 2stia 2stib 2stie_ 3s2tiel 2stien 3sties 3stie\xc3\x9f 3s2tif 4stig 2stik 3s2til 4stilg 3s4tim st1ins st1int 2stio 2stip 3s2tir st1iro 2stis 2stiv 2stj 2stk 4stl st3le 4stm 2stn 1sto 4sto_ 4stod sto3de s2t3om 4ston 2stopo 2stor_ 2store 2storg 2stori sto1s2t 3sto\xc3\x9f 4stou 4stow 3st\xc3\xb6 4st\xc3\xb6n 4s3t\xc3\xb6t 2stp 1str 2strad 5straf 3s2trah 6strai 4stral 4strans 3strap 3s2tras 3stra\xc3\x9f 4str\xc3\xa4g 4str\xc3\xa4ne 3streb 4stref 3streif st3renn s2tric 4s2trig 3s2tri2k 2s3tris st3roll 3stro2m 2strop 3stru 4strua 4strun 4strup 4sts4 st5sa st3se st3sl st3so st3st st3su st3sz 2st3t 5stub 2stuc 3stud 3stuf 3stuh stum4sc stu4n 4stun_ 3stund s2t1uni 4stunt stu5re st1url stur4s 4st1urt 2stus 1st2\xc3\xbc 4st\xc3\xbcb 3st\xc3\xbcc 4st\xc3\xbcch 2st\xc3\xbcr_ s2t\xc3\xbct 4stv 4stw 5styl 2st3z2 1su 3su_ su1an 3su2b3 4su3bi 5su1c 2s1u2f su3fi 2suh 3sui su3it_ su3la sul2i su2mau 3sume su2m1el 3summ s3umsa s3umst su4n 3sun_ sun6derh s1unf 2s1uni 2s3unt 3s2up su2ra 2s1url s1urs s1urt 3su2s1 su3sa su3sh su3si 3suv 1s\xc3\xbc 4s3\xc3\xbc2b 3s\xc3\xbcc 3s\xc3\xbc2d1 3s\xc3\xbcn 2s3v 2s1w s3we sweh2 4s3wie 4s3wil s3wir s3wo s2y 3sy_ sy2l syl1a sy4n3 1sy2s5 2s1z s3za s3zei 5s4zene s3zent 4s3zet s2zis s3z\xc3\xb6 4s3zu s3z\xc3\xbc 2\xc3\x9f_ 2\xc3\x9f3a2 2\xc3\x9f1b 4\xc3\x9f1c 2\xc3\x9f1d 1\xc3\x9fe 2\xc3\x9f1ec 2\xc3\x9f1e2g 2\xc3\x9f1ei \xc3\x9fe2la \xc3\x9fe2n3a \xc3\x9fen3st \xc3\x9fen3sz \xc3\x9fe2nu \xc3\x9fe3rin 2\xc3\x9f1erk 2\xc3\x9f1erse 2\xc3\x9f1f 2\xc3\x9f3g2 \xc3\x9fge2bl 2\xc3\x9f1h 1\xc3\x9fi \xc3\x9fig4s 2\xc3\x9f1in \xc3\x9f1j 2\xc3\x9f1k4 2\xc3\x9f1l 2\xc3\x9f1m 2\xc3\x9f1n \xc3\x9f1o2 2\xc3\x9f3p2 2\xc3\x9f1r2 2\xc3\x9f3s2 2\xc3\x9f1t 2\xc3\x9f1um 2\xc3\x9f1\xc3\xbc 2\xc3\x9f1v 2\xc3\x9f1w \xc3\x9fwa3 2\xc3\x9f1z 6t_ 3ta_ 2taa 3taan tab4 2tab_ ta2b5an 3tabel 4taben ta4bend 4tabf 4tabg 4tabk ta1bl 2tabn 4tabs t1abst 4t1abt 4tabz ta1c tach3te 3tacu 2t3ada 2t3adr 1taf_ taf2e 3tafel 4taff t1af4r 3tag 5tag_ ta2ga ta4g5ei 4t3agent ta3gl t3ago ta2gr tag4s tag5sc tah4 3tai ta1i2k tai2l ta1ins tai4r 4t1a2ka tak4ta 3taktb 3t2aktu 2takz 3tal_ tal3d 1t6ale tal2en ta4l3ens 5talis tal2l\xc3\xb6 1talo ta2lop ta2lu 2ta2m 3tam_ ta3ma 3tame 3tamg t3amin_ ta3mo t3ampl t3amt 1t2an_ t1a2na t1anb 2t2and tan3da tand4st ta3ne 4t1anf 3tani t2ank tan4k5l tan3kr 4t3anl 2t3anm 2t1anna t4anr t1ans 1tans_ 4t3ansi 2t3ansp t4ant_ 2tantr ta2nu 2tanw\xc3\xa4 t4anz_ 2tanza t5anzu ta3o ta2pes 2tapf t4ar_ 2t1arb 3tard ta6rens 3tari 2tark t1arm t1arti ta2ru 5tary 2t1arz 3tas t4as_ ta3sa 1ta3sc 2ta3se 1t4ast ta3sta ta4ste 1tat_ ta4t1ei ta4tem ta4t1er ta2th tat3he t3atl ta2tom 2tatt tat4t3r t2aufe 2taufw 3taug 3taume 1taus t1ausb tau6schw t1ausd 3t2ause t1ausg t1ausk 2t1auss 2t1ausw 1tav ta3va 3tax 1taz t\xc3\xa41c 1t\xc3\xa4g 2t\xc3\xa4gy 2t\xc3\xa4h 4t1\xc3\xa4lt 2t\xc3\xa4m t1\xc3\xa4mt 3t\xc3\xa4nz 3t2\xc3\xa4p t2\xc3\xa4r_ t\xc3\xa42s4 4t\xc3\xa4tt t1\xc3\xa4ug 1t\xc3\xa4u3s 4t\xc3\xa4x 1t\xc3\xa0 4t3b4 tbe3r2e tblock7en 4t1c t3cha t3che tch2i tch3l t2chu tch1w t2ck t3cr 2t3d4 tdun2 1te 3te_ te4a4 2teak te5al 3team te5an 2t1e2ben t2ech 3techn 2teck te2cka teck4e te2cki te2di 3tee te1ele te1em te2en 4tefe 4teff te2fl teg4 teg3re 4teh 5tei_ teik4 3teil 4teilhe 2tein t1eing 4t1einn 4teinr 4teinz t1eisb teit2 t2ek tek5te 3tel_ 3te2la tel1ab tel1ac te3lan tel1au 3telb tel1e2b 3telei tel1en 3telf 4t1elf_ 3telg tel1in te2lit 3telk tel4l\xc3\xa4n tel3l2e 4tellu 3teln te4l3ost te2l1\xc3\xb6 3telp 3tels 3telt tel3ta te3lu 3tem 5tem_ te2man te2m1ei te2mi te3mis 4temm te2m1o2r 5temper 4tempf tem1st te4m3u 3ten 7t6en_ te2n3a2 te3nac te4nag te4nas t2enb 6t5endf 4t1endl 6t5endp ten3dr te2n1e2b te4n1ec ten3eid 4tenerg ten4erw t1eng_ ten3im ten3in tenk4 t2enl t2eno t2ens tens2e ten3si tens3th 4tentd 4t1entg t1entn t1ents 4t3entw te2nu ten4zer ten3zw te2o te3ob 2teph 5t6er_ te1ral ter3am te3ran_ te2r3as t2erb 6t5erbs 6t5erbt ter3d te2r1e2b te2rel ter3end 4terf\xc3\xbcl ter5g t4ergru te5ria 3t2erka 4t3erkl\xc3\xa4 t2erlu 3term ter4mer ter4n3ar t3erneu t1er\xc3\xb6 ter4re_ t6ers_ t6erscha ter4ser ter4sk 5t4erspr t4erst_ 5t4erstu 3tert2 teru4 te4r1uf ter3z4a 2t1erzb 3t2es tesa2 tes3ac te5sc te4sel te2spr 5te2st tes3tan tes3t\xc3\xa4t test3ei tes6terg 3tet te2tat 4teth 4teti te4tik 6tetl 2teu teu3ere 3teuf 3teum te1un 3teur_ t5euro te2vi te2x te3xa 4t1exe 4texp 3t2ext tex2tr 2t1exz 1t\xc3\xa9 2t5f tfi4l 2t1g4 t3gl 4th_ 2t1h4a 5tha_ 5t2hag t2hak 3thal_ thalt2 t3hap t2har t3hau 4t1h\xc3\xa4 2thc t2he_ 5thea 4theb t2hec 4t1hei t2hein t1hel 3them t2hema 5t2heme 1then 3theni 3theo t1herd t1herr t1herz 1these 3thia 2t1hil t1him t1hin 4th3l 4th3m 2th3n 4t1hoc 4t3hot thou4 t3hov 4t3h\xc3\xb6 3thr2 5thrine 4ths 3thu 4t1hub 4thun 4t1h\xc3\xbc 4thv 1ti 3ti4a ti5a2m ti5an ti6are ti5as tib4 3tibe 3tibl 2tic ti1ce ti6chent ti2d1en t2ie 3tie_ tie3br 3tief_ tieg4 ti1el ti2el_ 3ti3e2n1 ti2er 3tiera 4tie\xc3\x9f ti3et ti1eu ti3fa ti3fe ti1fr 3tig 3tik ti2kam ti3k2an tiko2 ti2kr ti2lei 3tilg ti2lin ti4l\xc3\xb6 tilt4 2tim 3tim_ tim2ma t1imp 5tin_ ti1na t1inb 4t1ind ti5n4e t1inf tin2g1a tin2g3l tings2 ting3st t1init t2inn 3t2ins_ 4tint 4t1inv 5tio ti3or 3tip_ ti3pl 3tipp 3tips ti4que_ 3ti3ra 5t2is tisch3w t2it tit2a 3tite ti2ter tit2h 2ti3tu 5tiv ti2van ti2vel ti2v1o ti4v1r ti2za 2t1j 2t3k4 tk\xc3\xbc1b 4t1l2 t3la 6t5li tlings3 t3lo tl\xc3\xb63s 2t1m2 t5me tmen2s tmen6t tmin4s tmo4de_ tmo4des tm\xc3\xbcll4s3 2t5n4 tna5me tnes4s 3to_ toa4 to5ar to5at 1tob to3be 2tobj tob4l to1c 3tocht to6ckent 3tod tode4 to2d1er todes1 t1o2fe 1tok to3la 3tole tome2 to4men to5men_ 3ton tons4t to3ny to2pat to3phe to2pl 1topo 2topp 1tor 3tor_ to1ra to4r\xc3\xa4n t1ord 3tore to3ren t1org 3torh tor3int to2r\xc3\xb6 3tors to4ru 2tory to5sc to4sk to3s4p 2toss 1to3st to7sto to1stu 2to\xc3\x9f to1\xc3\x9fu 3tote to2tho 1totr 5t4ou to3un 3tow 3t\xc3\xb6ch 2t1\xc3\xb6f 3t\xc3\xb6n t2\xc3\xb6r t\xc3\xb6r3ste t1\xc3\xb6st 1t\xc3\xb6t 4t3p2 tpf4 tport4 2t1q t2r4 2tr_ 5tra_ tra3bl t4rac 3trach tra3cha 3trag 5t4rai t4rak 1tral 3t4ran_ 2trand 3trank t3rann 1trans t3rase 2tra\xc3\x9f 3tr\xc3\xa4c t3r\xc3\xa4d 3tr\xc3\xa4g 1tr\xc3\xa4ne 2tr\xc3\xa4s 2tr\xc3\xa4\xc3\x9f t3r\xc3\xa4ts t4r\xc3\xa4ts_ 4t5re_ 2treb 2trec t3rech t4reck 2t3red t4ree 3t4ref 4trefe 2treg t4rei_ 3t4reib 2treic 2treif 2t3reih t3rein 2t3reis t3reiz 2t3rek 2trel t4rem t4ren_ 3trend_ t3rent t4rep 2trepe 2trepo t4rer 3t4res_ t4ret tre2t3r t4reu 3treuh t3rev 2trez 5t4r\xc3\xa9 2t3rh 1tri 3tri4er 3trigg t3rind 2tring 3trio t4rip trizi1 1tro_ tro3b 3t4rog 1troi tro2ke 2troml 1tron 2t3roo t4rop 3tropf 1tros 1troy 3tr\xc3\xb6g 1tr\xc3\xb6s 1trua 2truk trum4 trums1 t3rund 3trunk 3t4rup tr\xc3\xbc1be tr\xc3\xbc1bu 2t3r\xc3\xbcc try1 2ts 4ts_ t2s1a t4sab ts3ad t3saf t4s3al t4s3amt t4sar ts3as t4sau t5sau_ ts1\xc3\xa4n t4s3char t5sche t6schef tsch4li t6schro ts1e2b t4s3e4h t3seil t4seind ts1em t3sen_ ts1eng ts1ent t2s1er ts3eta ts1ex tsi2d ts1ini t2s1ir t3skala ts3ke t4s3ko ts5kr t2s1o2 t3sol t3som t3soz t2s\xc3\xb6 t3span t3spas t2sp\xc3\xa4 t3s2pon t3s2por t2spu ts5s4 t1s2t ts3taf ts3tak t2stea t5steu ts3th t6stit ts4top ts3tor ts3trad ts3trak t4s3trau t4str\xc3\xa4 t3strec t2s3tri ts3tr\xc3\xbc t3s4tu t2s3t\xc3\xbcr t2s1u 1tsub t4sun t3sy 4t1t t2t1a2b tt3ad t3tal t3tan t4tanb tt1art tt1auf tt1ebe tt1eif tt1ein tt1eis t3te2l tte4la tte4s t2teti t3teu t2th tt3ha tt2h\xc3\xa4u tt1ho t3ti tto1p t3tra tt3ras t3tr\xc3\xa4 t3tro tt3ru tt3r\xc3\xbc tt2se tt3so tt2s1pa tt2spe tt2spr tt2s3ti ttt4 t3tu tt3z4 1tu tu1an 2tub 3tuch tu2chi 2tud tue3re tu3et 2tuf t1u2fer 2tuh 2tu2k t1ukr 3t2um_ 5tume 2tumf 2tumg 2tumk tum2sp 2t1umt 5tun_ 2t1una 2tund 3tu3ne 2t1unf 3tung tun2gl 2tunif 2t1u4nio 2tunt t1up_ tu2ra tu3rat tur3b tur1c tu4re_ tu2rei tu2r1er tu4res ture4t 3turn tu2ro tu3rol tur3s tu2ru t2us tu2sa tu4schl tu2so 2t\xc3\xbcb t3\xc3\xbcbe 3t\xc3\xbcch t\xc3\xbcck2s 1t\xc3\xbcf 1t\xc3\xbcm 1t\xc3\xbcr_ t\xc3\xbcr1c 1t\xc3\xbcre t\xc3\xbcr3s 2t1v t5ve 2t1w twa4r twi4e 1ty 2tyl ty4le ty2pa ty1st 2t1z t2za4 tz3ag tz3al tz3an tz1ar t2z1\xc3\xa4 t3ze_ t2z1e2c t2z1eie tze2n tz4ene tz3ents tz1erg t3ze4s tz1imp tz1ind t2zo tz1of t3zon tz1or tz2tin t2z1w tz3wa 2u_ u1a2b u1a2c ua3d uad4r u3al_ u5alet u3alf u3alr u3als ua2lu u3am u1ans u3ar_ uara2 uar3ab u3ars ua3sa ua2t3h u3au u1ay u1\xc3\xa4m u1\xc3\xa4u 2u1b u3be u4bent ub4i ub5los u3bl\xc3\xb6 ub3lu ub3ra ub3r\xc3\xa4 ub5rit ub2san ub2s1o ub2s1p ub3um u2b3\xc3\xbcb 4uc u1ce2 u2ch1a uch3an uch1\xc3\xa4 u1che u2ch1e2c uch1ei u3ches u1chi uch1in uch3l uch5m uch3n u2ch3r uch2so uch2sp uch2tr u1chu uch3\xc3\xbc uch1w u2ckem u4ckent uck2er u4ck3erl u2cki u1cr u1d u5d2a ude2a udens2 ude3r2e udi3en u2don ud3ra u1e ue4ck u2ed ue2en u4ela ue2le ueli4 ue2mi uen2gl u3eni uen3k ue2nu uen2zu u2ep ue2r5a u3ereh ue2rei uer5eife u3erer ue4rerg u3erex uer3g2 u5erinf u5erint uerk4 uer4ne uern3s4t uer3o uert2 u3erum u3erunt u3erur ue2ta ue4tek uet4s uf1ab u3fah uf1ak uf1ar uf1au u2f1\xc3\xa4s u2f1\xc3\xa42\xc3\x9f u2f1ei u2f1em u3fen_ u2fent u2f1erh 2uff uf3fe uff6l uf5l uf7l\xc3\xa4d ufo2r uf1ori u1f\xc3\xb6 uf3r uf5s\xc3\xa4 uft1eb uft3s2 2u1g u4gabte ug1af ug1ak u2g1ap ug1au ug3d u6g7e2i uge3ne u4g5ent ug5erf ug5erl uge7sc ugge4st u2g1l ug3la ug3l\xc3\xa4 ug5lo u3gl\xc3\xb6 u4g3lu u4g3n ugo3 ug1or u2g\xc3\xb6 u2g3ro ug3rum ug5sc ug3s2e ug3si ug3s4pa ugs2t ug3str ug3st\xc3\xbc u1h uhe1ra uhe1s uhe3st uh1la uh1l\xc3\xa4 uh3ma uh3mi uhr1a uh1ri uh4rin uh2ru uh1w 4ui u1ie ui1em u1ig u2ige u3in_ u3isch_ u3ischs uisi4n ui4s3t u1j uk\xc3\xa42 u3k\xc3\xa4u u1ke u1ki u1kl u3kla ukle1i u3klo u3kl\xc3\xb6 uk4n ukni4 u1kr uk2ta uk2t3in u1ku uku2s u1l ul1ab ul3am ul2ar ula2s ul1\xc3\xa4m ulb4 u2l1el ule4n ul1erf ule2t ul3eta ulg4 uli2k uli5ne ul1ins ul3ka ul4les ull1s ulm3ein ulo2i ul3or ul\xc3\xb63s ul2p1h ul2sa ul2sei ul3sp ult2a ul4tar ul3th ul2to ul2tri ul3tro u2l\xc3\xbc ul3zw um3all uman4s um1anz u2m1ar u2m1aus 1umd 2ume um2en umer2a um1erg um1erw 1umf 3umfe 1umg um1ins 1umk 1uml 2umm u3mon umpf6li um2pl ump3le 1umr 1umsat um3sc um4ser um2sim um2spe um2su umt2 um3th u2m3ur 1umz u2n 2un_ 2u5na_ 1unab un1ac u5nam u4n3an un1ap 2u5nas un3at unau2 un1\xc3\xa4 4unc un4dei und3erf und5erha un2d3r 4unds_ und3se und3sp un2d1um 1undzw un1e2 un3eid un3ein une3re unes4 un3et un1gl 1ungl\xc3\xbc un2g1r ung3ra ung4s3 u3ni 1u4nif 1u4niv un2k1a unks2 unk3sp unk2tr 3unku un2n3ad un1o un2os 1unr uns2 un3se 1unsi un3sk un3sp un2stu 1unt un3ta unte2 un3th unt4r 2untu un1u unvol2 unvoll3 1unw u1o2b u3of u3or_ u1or3c u1os_ u1pa up5ab u1pe2 uper1 upf2e up2f1i u3pfl u1pi up2pr u1pr upra3 up1sl up4t3a2 up2tel up2t1o up4tr up2tu u1q 2ur_ u1ra u3ra_ u3raba u3ral u2r3am ur1ana ur2anb u3rand ur1ang ur1ans u3rant ur5atm ur1au ur1\xc3\xa4n urb2 ur3ba ur2ble urch1 ur3di 2ure ur1eff u2rele ure2n u5ren_ ur3erei ur1erh ur1erw ure2t ur3eta ur2gri urgros4 urgs2 u1r2i uri2c u2r3im ur3ind ur1ini ur3ins ur3int u2r3inv urk2s 1urlau ur3no 2u1ro u1r\xc3\xb6 ur5p ur2san urs1au ur4sei ur4s1er ur2st ur3sta ur5st4r ur3s2z urt2 ur5t4e ur3th u1ru ur\xc3\xbc2 u1ry ur2za urz3ent ur2zi ur2zo ur2z1w u4saf us1ang us4ann u2s1ap us1au u6schent usch5wer usch3wi us1ec u2s1ef u2s1ei u3seid use1ra u2serp usi3er_ usi5ers_ u3soh u3sol us1op us3ou u3sov u3sow u3s2pa us3part us3pas us1pe u3s2pek us3pic us4sat us4sei usse2n uss5erfa uss3erk uss5ersu us4sez us2sof uss3t\xc3\xa4t ust1a2b u3stal u3stein u3stel ust2i us1tr us4tris u3stu u4stun u4stur us2ur u2s\xc3\xbc u1sy u1\xc3\x9f 4u1t u3taf u3tal ut3alk ut5a4m u2t1ap ut1ar ut1\xc3\xa4r u3t\xc3\xa4t u3te u5te_ u4t1e4g ute2l ut2em ute2n1 uten3e u4tent ut2er ute5r4er u5tet u2thei u2t1hi u2t1ho u4t1hu uto4ber ut1opf u2tops u3tos ut3r\xc3\xbc ut5sa ut2s1\xc3\xa4 ut4schl ut4schm ut3so ut3sp ut5t2l utt4le utu3ru utz1a utz3eng ut2z1in u1u4 uufe2 u1\xc3\xbc2 u1v4 u2ve_ uve3r\xc3\xa4 u1w uwa3s u1x2 ux5t u1ya u1z u3ze uzi5n uz1we uzz4 1\xc3\xbcb 2\xc3\xbcbd \xc3\xbcbe2 \xc3\xbcbe3c \xc3\xbcbe4r1 \xc3\xbc2b5l 3\xc3\xbcb5r \xc3\xbcb2st 3\xc3\xbcbu 2\xc3\xbcc \xc3\xbc1che \xc3\xbcch3l \xc3\xbcch4s3c \xc3\xbcch5t4e \xc3\xbcck1e2r \xc3\xbc4ck5eri \xc3\xbc4ckerk \xc3\xbc4ckers \xc3\xbc4d3a4 \xc3\xbc3den_ \xc3\xbc3d2ens \xc3\xbcd1o4 \xc3\xbcd1\xc3\xb6 \xc3\xbc4d5r \xc3\xbcd3s2 \xc3\xbcdsa1 \xc3\xbcd1t4 \xc3\xbc2f3a \xc3\xbc2f1ei \xc3\xbc2f1erg \xc3\xbcf2fl \xc3\xbc2f3i \xc3\xbcf5l \xc3\xbcf2t1o \xc3\xbc1g \xc3\xbc2g3l \xc3\xbcg3s \xc3\xbcg4st \xc3\xbch1a \xc3\xbc1he \xc3\xbc2h1ei \xc3\xbc2h1eng \xc3\xbc2h1erk \xc3\xbc2h1erz \xc3\xbch1i \xc3\xbchla2 \xc3\xbchl1ac \xc3\xbch5l2e \xc3\xbch3li \xc3\xbch3mi \xc3\xbch3mo \xc3\xbch5ne \xc3\xbch3r2e \xc3\xbchr3ei_ \xc3\xbch5ro \xc3\xbchr5ta \xc3\xbch1s \xc3\xbch3s2p \xc3\xbc1hu \xc3\xbch1w \xc3\xbc1k 2\xc3\xbcl \xc3\xbcl1a \xc3\xbcl2c \xc3\xbc5l2e \xc3\xbcl2la \xc3\xbcll1au \xc3\xbcl2l1ei \xc3\xbcl2lo \xc3\xbcl4l\xc3\xb6 \xc3\xbc1lu \xc3\xbc4ment 2\xc3\xbcn \xc3\xbc2n3a \xc3\xbcn2c \xc3\xbcn2da \xc3\xbcn2dr \xc3\xbcnd1s \xc3\xbcn2f1 \xc3\xbcn3fl \xc3\xbcn4fli \xc3\xbcnf3r \xc3\xbcn2g3l \xc3\xbcnn4s \xc3\xbcnn5sc \xc3\xbcn4s \xc3\xbcn5sc \xc3\xbcn5se \xc3\xbcn5sp \xc3\xbcn5sta \xc3\xbcn5str \xc3\xbcn3th \xc3\xbc1pe \xc3\xbc1pi \xc3\xbcr1a \xc3\xbc2r1ei \xc3\xbcr2fl \xc3\xbcr4g5eng \xc3\xbc1ri \xc3\xbc1r2o \xc3\xbc3rofe \xc3\xbcro3r \xc3\xbcrr2 \xc3\xbcr2s \xc3\xbcrs3tin \xc3\xbcrt2h \xc3\xbcr3the \xc3\xbc1ru \xc3\xbc2schl \xc3\xbcse3h \xc3\xbcse3l \xc3\xbcs4s3c \xc3\xbcs2st \xc3\xbc2st \xc3\xbcste3ne \xc3\xbc1\xc3\x9f \xc3\xbc1ta \xc3\xbc2t3al \xc3\xbcte3d \xc3\xbct3r \xc3\xbct2s1 \xc3\xbct2tr \xc3\xbc1v \xc3\xbc1z 2v_ 2v1ab va5g val2s 2vang 2v1arb va3st v4at va2t3a6 va4t1ei va2t3h va4t1in vati8ons_ va2t3r vat3s vat3t va2t1u 2v1au 2v1b 2v1d ve2 3vea ve3b ve3d ve3g ve3h veit4 veits3 ve3la ve3le ve3li veli5ne ve3lo ve3ma ve3mu ven2c ve3ne ve3ni ven3k ve3n\xc3\xb6 ve3nu ve3o ver1 ver3a ve3rad ve5rand ve5ras ver3b4 ver3d2 vere2 ve3ren verf6 verg4 ve3ri ve5rit ver3sta 2vese ves1p ves3ti ve3ta vete1 ve3tr 2ve\xc3\xbc ve3v ve5x2 ve7xe 2v1f4 2v1g 2v1h vi1an vi4a3t vi2c vid3s2t vi2e vie2h3a vi3en vie2w1 vi3g2 vi3k vi2leh vin2s 2v1int 3vio vise4 vi3s2o vis2u 2v1k 2v1l2 2v1m 2v1n 2v1ob vo2gu vol2a voll1a vo2n 2v1op vo2r1 vor3a vor3d vor3e vor3g6 vo3ri vo5rig vor3o vo4ru v\xc3\xb62c 2v1p v1ra 3vri 2vs vs2e 2v1t 2v1v 2v1w 2v1z 2w_ w4a wab2bl wa5che wa3d wa5ge wa4g5n wa2gr wa3gra 1wah wahl5ent wai2b 1wald wal2t1o wa5na wan4s wa2p wa2r 1war2e ware1i war3ste wart4e wa3ru 1wa2s wa3sa wa3se wa3sh wa3si was5s4 1w\xc3\xa4h 1w\xc3\xa4s w\xc3\xa4s4c w\xc3\xa45sche 2w1b 2w1c wco3 2w1d we3be web3l we3cke we5cke_ we5cken_ we5ckes we3d we2e2 we2fl 3weg we2g3l we4gn we4g3r wegs2 weg3s4p 1weh we3he wei4bl 2weie wei3k4 wei4tr weit3s wel6schl wel6schr wel3se wel2t1 wel4ta wel6t5end wel4tr we3ni wen4k3ri we2r5a wer2bl 1werbu 5werdens 1werdu wer2fl 2werg 1werk_ 1werke wer2kl wer2ku wer2s wer4t3a wer6t5erm 1werts 1wese wes1p we4st west3a wes2t1o2 west3r wet4s wet4ta wett3s 2w1g 2wh w5ho wi3cka wi2e wie3l wien2 wie5ne wie2st wi3k wim2ma wim4m3u win4d3e4c win2e wi2r 1wirt wi5s2e 1wiss wi3th 3wj 2wk 2w1l 2w1m 2wn wn3sh w4o 1wo1c wo2cha woche4 1woh woh2l 1wolf wol4ler wor3a wo2r3i wor2tr wo4r3u wot2 1w\xc3\xb6c w\xc3\xb6rt2h w\xc3\xb6r3the 2w1p w1ro 2ws w3s2k w1s2t 2w1t w3ti2 w2u 1wuc wul2 wul3se wun2s wur4s 1wurst wus2 wus3te wu4t1 1w\xc3\xbch w\xc3\xbcl2 w\xc3\xbcn5 2w1w 6x_ x3a 1xa_ 1x4ad 1x4a3g xa4m xa3me xa5mer 2xan 3x4as x4at 2x1b x1c 4x1d 1xe x1e4g xe2l xe3lei x1em 7x2em_ 3x2en xe3no x2er_ 5xere xers2 3xes 2x3eu 2x1f 2x1g xge1 2x3h 1xi xib4 xi1c xich2 2xid xide2 xi2d1em x1i2do xie3l xi3g4 xi2l xi3la xi3le xi3li xil1u x2i2s1 xi3sc xi4se xiso2 xis3s xis2t\xc3\xa4 x1i2tu x1j 2x1k4 2x3l 2x1m 2x1n x1or 4x3p x1q 2x1r 2x3s2 4x1t x2t3a x2t1\xc3\xa4 x3t\xc3\xa4t xtblo4 x2t1ed x2t1ei x2t1erf xt3ran xts4 xt5sa x2t1u x3tur 1xu xu3a x1u4n xu2s1 2x1v 2x1w 2xy x1z 2y1ab 1yac y3al_ y3a2m y1b yb6r y1c y2chi y3chis ych3n y1d y3dr y1e yen4n y2es_ y1f y1g ygie3 y3gl y1ha yhr2 y1hu y3i4 y1j y1k4 y1l yl5a2m y3l4ant_ y3l4ante y5len y5ler yli4n yloni1 y2l1u yma4t ym3p4 ympi3e y2n3o yn3t y1of yom4 yon4i y3ou y1p ypa2 yp5an ype2 y5ph y2p1in ypo3 y4ps yp3t y1r y3r2e y3ri yri1e y5s4c y1s\xc3\xa9 y3s2p yst4 y1s2ty y3s2z y1t yt2h yu2r yure3 y1w y1z2 6z_ 2z3a2b za1c z3a2d za3de 2z3af za3gr 3z2ah 2z3a2k 2z3am 3zambiq z1an za2na 2z3anf z3anl za3re 2z1arz za3st4 2z3at 3zaub z3auf z3aug 3zaun z1aut 2z1\xc3\xa42c z2\xc3\xa4h 2z1\xc3\xa4m z1\xc3\xa4n z1\xc3\xa4rg 4z3b6 zbe2st zb\xc3\xbc1b zb\xc3\xbcbe5 4z3c 2z3d zd\xc3\xa41 ze3a ze1e 2z1eff zeik4 3zeil zei3la zeile4 2z1ein zei3s2 zeist4 zei4ta zei4t3er zei2tr zeit3sp 3zel ze2l3a2 ze2len ze2l1er ze2l1in zel5la ze2lo ze5m2e 5zen_ ze2n1ac zens2e zen2ta 5z4entr zent3sk 2zentw zen4zer zer3a ze2r1e2b z1erfo 2zerg z3ergeb z1erh\xc3\xb6 zer3k 2z1erke 2zerkl 2z1erl\xc3\xb6 zer4n3ei 2zerq 5zerr 2z1ersa 4zerste zer3sz zer2t2a2 zer4t3ag zer4ter zer4tin 2zerz z2es ze2s\xc3\xa4 ze5sc ze2s1i ze3sku ze2sp ze5sta zes1tr ze2tr 2z1ex 2z1f 2z1g 2z1h z2hen zhir5 3zia 3zie zi1erh zi1es_ zig4s 4zimp 3zin4e 4z3inf 4z3inh zin4ser 4zinsuf 2z1int 2z1inv zi2o zi3op zirk4 zirk6s zi3s2z zi1t2h 2z1j 2z1k4 2z1l2 z3la 4z3ly 2z1m 2z3n2 2zob 2zof z1oh 3zol zon6ter zo2r zo3re zor4ne zo5se 2z1\xc3\xb6f z\xc3\xb67li 2z3p2 2z1q 4z3r2 2z1s2 z3sh z3sk z3sp z3ste z3sz 2z1t z2t1au z6tehe zte3o zte3str z2t1h zt3hei z5t2her zt1ins z2t3ro zt3so zu1 zu3a zub4 zu5cke zud4 zu2el zu3f6 zu2g1ar zu3gl zu3gr zu2g1un 2z1uhr zuk4 2z1um_ zu3ma zumen2 2zumf 2zumg 2z1ums zu3n\xc3\xa4 zu3n2e 2zunt zu3n\xc3\xbc 2z1urk 2z1url 2zurs 2z1urt zu3s4 zuz2 2z\xc3\xbcb z\xc3\xbcr1c 2z1v zw2 z2wan zwan2d1 4z3w\xc3\xa4l 2zweg z2weig 2z1wel 2z1wen 2zwer 2z1wes 2zwir z2wit 2z1wo 2zw\xc3\xb6 z1wur z1w\xc3\xbc 3zy zy1ank 6z1z z3z4a z3zi zzi3s2 z3z2l zzoll2"; + +?> \ No newline at end of file diff --git a/include/mpdf/patterns/dictionary.txt b/include/mpdf/patterns/dictionary.txt new file mode 100755 index 0000000000000000000000000000000000000000..22418408941a90532516965303b81fdf41cca94a --- /dev/null +++ b/include/mpdf/patterns/dictionary.txt @@ -0,0 +1 @@ +dis/es/tab/lish/men/tar/i/an/ism diff --git a/include/mpdf/patterns/en.php b/include/mpdf/patterns/en.php new file mode 100755 index 0000000000000000000000000000000000000000..21d8baa50a55ce3c23372fc04e55495a6a435a4c --- /dev/null +++ b/include/mpdf/patterns/en.php @@ -0,0 +1,10 @@ +<?php +/* + Adapted from Hyphenator 1.0.2 + http://code.google.com/p/hyphenator/ +*/ + +$patterns="_ach4 _ad4der _af1t _al3t _am5at _an5c _ang4 _ani5m _ant4 _an3te _anti5s _ar5s _ar4tie _ar4ty _as3c _as1p _as1s _aster5 _atom5 _au1d _av4i _awn4 _ba4g _ba5na _bas4e _ber4 _be5ra _be3sm _be5sto _bri2 _but4ti _cam4pe _can5c _capa5b _car5ol _ca4t _ce4la _ch4 _chill5i _ci2 _cit5r _co3e _co4r _cor5ner _de4moi _de3o _de3ra _de3ri _des4c _dictio5 _do4t _du4c _dumb5 _earth5 _eas3i _eb4 _eer4 _eg2 _el5d _el3em _enam3 _en3g _en3s _eq5ui5t _er4ri _es3 _eu3 _eye5 _fes3 _for5mer _ga2 _ge2 _gen3t4 _ge5og _gi5a _gi4b _go4r _hand5i _han5k _he2 _hero5i _hes3 _het3 _hi3b _hi3er _hon5ey _hon3o _hov5 _id4l _idol3 _im3m _im5pin _in1 _in3ci _ine2 _in2k _in3s _ir5r _is4i _ju3r _la4cy _la4m _lat5er _lath5 _le2 _leg5e _len4 _lep5 _lev1 _li4g _lig5a _li2n _li3o _li4t _mag5a5 _mal5o _man5a _mar5ti _me2 _mer3c _me5ter _mis1 _mist5i _mon3e _mo3ro _mu5ta _muta5b _ni4c _od2 _odd5 _of5te _or5ato _or3c _or1d _or3t _os3 _os4tl _oth3 _out3 _ped5al _pe5te _pe5tit _pi4e _pio5n _pi2t _pre3m _ra4c _ran4t _ratio5na _ree2 _re5mit _res2 _re5stat _ri4g _rit5u _ro4q _ros5t _row5d _ru4d _sci3e _self5 _sell5 _se2n _se5rie _sh2 _si2 _sing4 _st4 _sta5bl _sy2 _ta4 _te4 _ten5an _th2 _ti2 _til4 _tim5o5 _ting4 _tin5k _ton4a _to4p _top5i _tou5s _trib5ut _un1a _un3ce _under5 _un1e _un5k _un5o _un3u _up3 _ure3 _us5a _ven4de _ve5ra _wil5i _ye4 4ab_ a5bal a5ban abe2 ab5erd abi5a ab5it5ab ab5lat ab5o5liz 4abr ab5rog ab3ul a4car ac5ard ac5aro a5ceou ac1er a5chet 4a2ci a3cie ac1in a3cio ac5rob act5if ac3ul ac4um a2d ad4din ad5er_ 2adi a3dia ad3ica adi4er a3dio a3dit a5diu ad4le ad3ow ad5ran ad4su 4adu a3duc ad5um ae4r aeri4e a2f aff4 a4gab aga4n ag5ell age4o 4ageu ag1i 4ag4l ag1n a2go 3agog ag3oni a5guer ag5ul a4gy a3ha a3he ah4l a3ho ai2 a5ia a3ic_ ai5ly a4i4n ain5in ain5o ait5en a1j ak1en al5ab al3ad a4lar 4aldi 2ale al3end a4lenti a5le5o al1i al4ia_ ali4e al5lev 4allic 4alm a5log_ a4ly_ 4alys 5a5lyst 5alyt 3alyz 4ama am5ab am3ag ama5ra am5asc a4matis a4m5ato am5era am3ic am5if am5ily am1in ami4no a2mo a5mon amor5i amp5en a2n an3age 3analy a3nar an3arc anar4i a3nati 4and ande4s an3dis an1dl an4dow a5nee a3nen an5est_ a3neu 2ang ang5ie an1gl a4n1ic a3nies an3i3f an4ime a5nimi a5nine an3io a3nip an3ish an3it a3niu an4kli 5anniz ano4 an5ot anoth5 an2sa an4sco an4sn an2sp ans3po an4st an4sur antal4 an4tie 4anto an2tr an4tw an3ua an3ul a5nur 4ao apar4 ap5at ap5ero a3pher 4aphi a4pilla ap5illar ap3in ap3ita a3pitu a2pl apoc5 ap5ola apor5i apos3t aps5es a3pu aque5 2a2r ar3act a5rade ar5adis ar3al a5ramete aran4g ara3p ar4at a5ratio ar5ativ a5rau ar5av4 araw4 arbal4 ar4chan ar5dine ar4dr ar5eas a3ree ar3ent a5ress ar4fi ar4fl ar1i ar5ial ar3ian a3riet ar4im ar5inat ar3io ar2iz ar2mi ar5o5d a5roni a3roo ar2p ar3q arre4 ar4sa ar2sh 4as_ as4ab as3ant ashi4 a5sia_ a3sib a3sic 5a5si4t ask3i as4l a4soc as5ph as4sh as3ten as1tr asur5a a2ta at3abl at5ac at3alo at5ap ate5c at5ech at3ego at3en_ at3era ater5n a5terna at3est at5ev 4ath ath5em a5then at4ho ath5om 4ati_ a5tia at5i5b at1ic at3if ation5ar at3itu a4tog a2tom at5omiz a4top a4tos a1tr at5rop at4sk at4tag at5te at4th a2tu at5ua at5ue at3ul at3ura a2ty au4b augh3 au3gu au4l2 aun5d au3r au5sib aut5en au1th a2va av3ag a5van ave4no av3era av5ern av5ery av1i avi4er av3ig av5oc a1vor 3away aw3i aw4ly aws4 ax4ic ax4id ay5al aye4 ays4 azi4er azz5i 5ba_ bad5ger ba4ge bal1a ban5dag ban4e ban3i barbi5 bari4a bas4si 1bat ba4z 2b1b b2be b3ber bbi4na 4b1d 4be_ beak4 beat3 4be2d be3da be3de be3di be3gi be5gu 1bel be1li be3lo 4be5m be5nig be5nu 4bes4 be3sp be5str 3bet bet5iz be5tr be3tw be3w be5yo 2bf 4b3h bi2b bi4d 3bie bi5en bi4er 2b3if 1bil bi3liz bina5r4 bin4d bi5net bi3ogr bi5ou bi2t 3bi3tio bi3tr 3bit5ua b5itz b1j bk4 b2l2 blath5 b4le_ blen4 5blesp b3lis b4lo blun4t 4b1m 4b3n bne5g 3bod bod3i bo4e bol3ic bom4bi bon4a bon5at 3boo 5bor_ 4b1ora bor5d 5bore 5bori 5bos4 b5ota both5 bo4to bound3 4bp 4brit broth3 2b5s2 bsor4 2bt bt4l b4to b3tr buf4fer bu4ga bu3li bumi4 bu4n bunt4i bu3re bus5ie buss4e 5bust 4buta 3butio b5uto b1v 4b5w 5by_ bys4 1ca cab3in ca1bl cach4 ca5den 4cag4 2c5ah ca3lat cal4la call5in 4calo can5d can4e can4ic can5is can3iz can4ty cany4 ca5per car5om cast5er cas5tig 4casy ca4th 4cativ cav5al c3c ccha5 cci4a ccompa5 ccon4 ccou3t 2ce_ 4ced_ 4ceden 3cei 5cel_ 3cell 1cen 3cenc 2cen4e 4ceni 3cent 3cep ce5ram 4cesa 3cessi ces5si5b ces5t cet4 c5e4ta cew4 2ch 4ch_ 4ch3ab 5chanic ch5a5nis che2 cheap3 4ched che5lo 3chemi ch5ene ch3er_ ch3ers 4ch1in 5chine_ ch5iness 5chini 5chio 3chit chi2z 3cho2 ch4ti 1ci 3cia ci2a5b cia5r ci5c 4cier 5cific_ 4cii ci4la 3cili 2cim 2cin c4ina 3cinat cin3em c1ing c5ing_ 5cino cion4 4cipe ci3ph 4cipic 4cista 4cisti 2c1it cit3iz 5ciz ck1 ck3i 1c4l4 4clar c5laratio 5clare cle4m 4clic clim4 cly4 c5n 1co co5ag coe2 2cog co4gr coi4 co3inc col5i 5colo col3or com5er con4a c4one con3g con5t co3pa cop3ic co4pl 4corb coro3n cos4e cov1 cove4 cow5a coz5e co5zi c1q cras5t 5crat_ 5cratic cre3at 5cred 4c3reta cre4v cri2 cri5f c4rin cris4 5criti cro4pl crop5o cros4e cru4d 4c3s2 2c1t cta4b ct5ang c5tant c2te c3ter c4ticu ctim3i ctu4r c4tw cud5 c4uf c4ui cu5ity 5culi cul4tis 3cultu cu2ma c3ume cu4mi 3cun cu3pi cu5py cur5a4b cu5ria 1cus cuss4i 3c4ut cu4tie 4c5utiv 4cutr 1cy cze4 1d2a 5da_ 2d3a4b dach4 4daf 2dag da2m2 dan3g dard5 dark5 4dary 3dat 4dativ 4dato 5dav4 dav5e 5day d1b d5c d1d4 2de_ deaf5 deb5it de4bon decan4 de4cil de5com 2d1ed 4dee_ de5if deli4e del5i5q de5lo d4em 5dem_ 3demic dem5ic_ de5mil de4mons demor5 1den de4nar de3no denti5f de3nu de1p de3pa depi4 de2pu d3eq d4erh 5derm dern5iz der5s des2 d2es_ de1sc de2s5o des3ti de3str de4su de1t de2to de1v dev3il 4dey 4d1f d4ga d3ge4t dg1i d2gy d1h2 5di_ 1d4i3a dia5b di4cam d4ice 3dict 3did 5di3en d1if di3ge di4lato d1in 1dina 3dine_ 5dini di5niz 1dio dio5g di4pl dir2 di1re dirt5i dis1 5disi d4is3t d2iti 1di1v d1j d5k2 4d5la 3dle_ 3dled 3dles_ 4dless 2d3lo 4d5lu 2dly d1m 4d1n4 1do 3do_ do5de 5doe 2d5of d4og do4la doli4 do5lor dom5iz do3nat doni4 doo3d dop4p d4or 3dos 4d5out do4v 3dox d1p 1dr drag5on 4drai dre4 drea5r 5dren dri4b dril4 dro4p 4drow 5drupli 4dry 2d1s2 ds4p d4sw d4sy d2th 1du d1u1a du2c d1uca duc5er 4duct_ 4ducts du5el du4g d3ule dum4be du4n 4dup du4pe d1v d1w d2y 5dyn dy4se dys5p e1a4b e3act ead1 ead5ie ea4ge ea5ger ea4l eal5er eal3ou eam3er e5and ear3a ear4c ear5es ear4ic ear4il ear5k ear2t eart3e ea5sp e3ass east3 ea2t eat5en eath3i e5atif e4a3tu ea2v eav3en eav5i eav5o 2e1b e4bel_ e4bels e4ben e4bit e3br e4cad ecan5c ecca5 e1ce ec5essa ec2i e4cib ec5ificat ec5ifie ec5ify ec3im eci4t e5cite e4clam e4clus e2col e4comm e4compe e4conc e2cor ec3ora eco5ro e1cr e4crem ec4tan ec4te e1cu e4cul ec3ula 2e2da 4ed3d e4d1er ede4s 4edi e3dia ed3ib ed3ica ed3im ed1it edi5z 4edo e4dol edon2 e4dri e4dul ed5ulo ee2c eed3i ee2f eel3i ee4ly ee2m ee4na ee4p1 ee2s4 eest4 ee4ty e5ex e1f e4f3ere 1eff e4fic 5efici efil4 e3fine ef5i5nite 3efit efor5es e4fuse_ 4egal eger4 eg5ib eg4ic eg5ing e5git5 eg5n e4go_ e4gos eg1ul e5gur 5egy e1h4 eher4 ei2 e5ic ei5d eig2 ei5gl e3imb e3inf e1ing e5inst eir4d eit3e ei3th e5ity e1j e4jud ej5udi eki4n ek4la e1la e4la_ e4lac elan4d el5ativ e4law elaxa4 e3lea el5ebra 5elec e4led el3ega e5len e4l1er e1les el2f el2i e3libe e4l5ic_ el3ica e3lier el5igib e5lim e4l3ing e3lio e2lis el5ish e3liv3 4ella el4lab ello4 e5loc el5og el3op_ el2sh el4ta e5lud el5ug e4mac e4mag e5man em5ana em5b e1me e2mel e4met em3ica emi4e em5igra em1in2 em5ine em3i3ni e4mis em5ish e5miss em3iz 5emniz emo4g emoni5o em3pi e4mul em5ula emu3n e3my en5amo e4nant ench4er en3dic e5nea e5nee en3em en5ero en5esi en5est en3etr e3new en5ics e5nie e5nil e3nio en3ish en3it e5niu 5eniz 4enn 4eno eno4g e4nos en3ov en4sw ent5age 4enthes en3ua en5uf e3ny_ 4en3z e5of eo2g e4oi4 e3ol eop3ar e1or eo3re eo5rol eos4 e4ot eo4to e5out e5ow e2pa e3pai ep5anc e5pel e3pent ep5etitio ephe4 e4pli e1po e4prec ep5reca e4pred ep3reh e3pro e4prob ep4sh ep5ti5b e4put ep5uta e1q equi3l e4q3ui3s er1a era4b 4erand er3ar 4erati_ 2erb er4bl er3ch er4che 2ere_ e3real ere5co ere3in er5el_ er3emo er5ena er5ence 4erene er3ent ere4q er5ess er3est eret4 er1h er1i e1ria4 5erick e3rien eri4er er3ine e1rio 4erit er4iu eri4v e4riva er3m4 er4nis 4ernit 5erniz er3no 2ero er5ob e5roc ero4r er1ou er1s er3set ert3er 4ertl er3tw 4eru eru4t 5erwau e1s4a e4sage_ e4sages es2c e2sca es5can e3scr es5cu e1s2e e2sec es5ecr es5enc e4sert_ e4serts e4serva 4esh e3sha esh5en e1si e2sic e2sid es5iden es5igna e2s5im es4i4n esis4te esi4u e5skin es4mi e2sol es3olu e2son es5ona e1sp es3per es5pira es4pre 2ess es4si4b estan4 es3tig es5tim 4es2to e3ston 2estr e5stro estruc5 e2sur es5urr es4w eta4b eten4d e3teo ethod3 et1ic e5tide etin4 eti4no e5tir e5titio et5itiv 4etn et5ona e3tra e3tre et3ric et5rif et3rog et5ros et3ua et5ym et5z 4eu e5un e3up eu3ro eus4 eute4 euti5l eu5tr eva2p5 e2vas ev5ast e5vea ev3ell evel3o e5veng even4i ev1er e5verb e1vi ev3id evi4l e4vin evi4v e5voc e5vu e1wa e4wag e5wee e3wh ewil5 ew3ing e3wit 1exp 5eyc 5eye_ eys4 1fa fa3bl fab3r fa4ce 4fag fain4 fall5e 4fa4ma fam5is 5far far5th fa3ta fa3the 4fato fault5 4f5b 4fd 4fe_ feas4 feath3 fe4b 4feca 5fect 2fed fe3li fe4mo fen2d fend5e fer1 5ferr fev4 4f1f f4fes f4fie f5fin_ f2f5is f4fly f2fy 4fh 1fi fi3a 2f3ic_ 4f3ical f3ican 4ficate f3icen fi3cer fic4i 5ficia 5ficie 4fics fi3cu fi5del fight5 fil5i fill5in 4fily 2fin 5fina fin2d5 fi2ne f1in3g fin4n fis4ti f4l2 f5less flin4 flo3re f2ly5 4fm 4fn 1fo 5fon fon4de fon4t fo2r fo5rat for5ay fore5t for4i fort5a fos5 4f5p fra4t f5rea fres5c fri2 fril4 frol5 2f3s 2ft f4to f2ty 3fu fu5el 4fug fu4min fu5ne fu3ri fusi4 fus4s 4futa 1fy 1ga gaf4 5gal_ 3gali ga3lo 2gam ga5met g5amo gan5is ga3niz gani5za 4gano gar5n4 gass4 gath3 4gativ 4gaz g3b gd4 2ge_ 2ged geez4 gel4in ge5lis ge5liz 4gely 1gen ge4nat ge5niz 4geno 4geny 1geo ge3om g4ery 5gesi geth5 4geto ge4ty ge4v 4g1g2 g2ge g3ger gglu5 ggo4 gh3in gh5out gh4to 5gi_ 1gi4a gia5r g1ic 5gicia g4ico gien5 5gies_ gil4 g3imen 3g4in_ gin5ge 5g4ins 5gio 3gir gir4l g3isl gi4u 5giv 3giz gl2 gla4 glad5i 5glas 1gle gli4b g3lig 3glo glo3r g1m g4my gn4a g4na_ gnet4t g1ni g2nin g4nio g1no g4non 1go 3go_ gob5 5goe 3g4o4g go3is gon2 4g3o3na gondo5 go3ni 5goo go5riz gor5ou 5gos_ gov1 g3p 1gr 4grada g4rai gran2 5graph_ g5rapher 5graphic 4graphy 4gray gre4n 4gress_ 4grit g4ro gruf4 gs2 g5ste gth3 gu4a 3guard 2gue 5gui5t 3gun 3gus 4gu4t g3w 1gy 2g5y3n gy5ra h3ab4l hach4 hae4m hae4t h5agu ha3la hala3m ha4m han4ci han4cy 5hand_ han4g hang5er hang5o h5a5niz han4k han4te hap3l hap5t ha3ran ha5ras har2d hard3e har4le harp5en har5ter has5s haun4 5haz haz3a h1b 1head 3hear he4can h5ecat h4ed he5do5 he3l4i hel4lis hel4ly h5elo hem4p he2n hena4 hen5at heo5r hep5 h4era hera3p her4ba here5a h3ern h5erou h3ery h1es he2s5p he4t het4ed heu4 h1f h1h hi5an hi4co high5 h4il2 himer4 h4ina hion4e hi4p hir4l hi3ro hir4p hir4r his3el his4s hith5er hi2v 4hk 4h1l4 hlan4 h2lo hlo3ri 4h1m hmet4 2h1n h5odiz h5ods ho4g hoge4 hol5ar 3hol4e ho4ma home3 hon4a ho5ny 3hood hoon4 hor5at ho5ris hort3e ho5ru hos4e ho5sen hos1p 1hous house3 hov5el 4h5p 4hr4 hree5 hro5niz hro3po 4h1s2 h4sh h4tar ht1en ht5es h4ty hu4g hu4min hun5ke hun4t hus3t4 hu4t h1w h4wart hy3pe hy3ph hy2s 2i1a i2al iam4 iam5ete i2an 4ianc ian3i 4ian4t ia5pe iass4 i4ativ ia4tric i4atu ibe4 ib3era ib5ert ib5ia ib3in ib5it_ ib5ite i1bl ib3li i5bo i1br i2b5ri i5bun 4icam 5icap 4icar i4car_ i4cara icas5 i4cay iccu4 4iceo 4ich 2ici i5cid ic5ina i2cip ic3ipa i4cly i2c5oc 4i1cr 5icra i4cry ic4te ictu2 ic4t3ua ic3ula ic4um ic5uo i3cur 2id i4dai id5anc id5d ide3al ide4s i2di id5ian idi4ar i5die id3io idi5ou id1it id5iu i3dle i4dom id3ow i4dr i2du id5uo 2ie4 ied4e 5ie5ga ield3 ien5a4 ien4e i5enn i3enti i1er_ i3esc i1est i3et 4if_ if5ero iff5en if4fr 4ific_ i3fie i3fl 4ift 2ig iga5b ig3era ight3i 4igi i3gib ig3il ig3in ig3it i4g4l i2go ig3or ig5ot i5gre igu5i ig1ur i3h 4i5i4 i3j 4ik i1la il3a4b i4lade i2l5am ila5ra i3leg il1er ilev4 il5f il1i il3ia il2ib il3io il4ist 2ilit il2iz ill5ab 4iln il3oq il4ty il5ur il3v i4mag im3age ima5ry imenta5r 4imet im1i im5ida imi5le i5mini 4imit im4ni i3mon i2mu im3ula 2in_ i4n3au 4inav incel4 in3cer 4ind in5dling 2ine i3nee iner4ar i5ness 4inga 4inge in5gen 4ingi in5gling 4ingo 4ingu 2ini i5ni_ i4nia in3io in1is i5nite_ 5initio in3ity 4ink 4inl 2inn 2i1no i4no4c ino4s i4not 2ins in3se insur5a 2int_ 2in4th in1u i5nus 4iny 2io 4io_ ioge4 io2gr i1ol io4m ion3at ion4ery ion3i io5ph ior3i i4os io5th i5oti io4to i4our 2ip ipe4 iphras4 ip3i ip4ic ip4re4 ip3ul i3qua iq5uef iq3uid iq3ui3t 4ir i1ra ira4b i4rac ird5e ire4de i4ref i4rel4 i4res ir5gi ir1i iri5de ir4is iri3tu 5i5r2iz ir4min iro4g 5iron_ ir5ul 2is_ is5ag is3ar isas5 2is1c is3ch 4ise is3er 3isf is5han is3hon ish5op is3ib isi4d i5sis is5itiv 4is4k islan4 4isms i2so iso5mer is1p is2pi is4py 4is1s is4sal issen4 is4ses is4ta_ is1te is1ti ist4ly 4istral i2su is5us 4ita_ ita4bi i4tag 4ita5m i3tan i3tat 2ite it3era i5teri it4es 2ith i1ti 4itia 4i2tic it3ica 5i5tick it3ig it5ill i2tim 2itio 4itis i4tism i2t5o5m 4iton i4tram it5ry 4itt it3uat i5tud it3ul 4itz_ i1u 2iv iv3ell iv3en_ i4v3er_ i4vers_ iv5il_ iv5io iv1it i5vore iv3o3ro i4v3ot 4i5w ix4o 4iy 4izar izi4 5izont 5ja jac4q ja4p 1je jer5s 4jestie 4jesty jew3 jo4p 5judg 3ka_ k3ab k5ag kais4 kal4 k1b k2ed 1kee ke4g ke5li k3en4d k1er kes4 k3est_ ke4ty k3f kh4 k1i 5ki_ 5k2ic k4ill kilo5 k4im k4in_ kin4de k5iness kin4g ki4p kis4 k5ish kk4 k1l 4kley 4kly k1m k5nes 1k2no ko5r kosh4 k3ou kro5n 4k1s2 k4sc ks4l k4sy k5t k1w lab3ic l4abo laci4 l4ade la3dy lag4n lam3o 3land lan4dl lan5et lan4te lar4g lar3i las4e la5tan 4lateli 4lativ 4lav la4v4a 2l1b lbin4 4l1c2 lce4 l3ci 2ld l2de ld4ere ld4eri ldi4 ld5is l3dr l4dri le2a le4bi left5 5leg_ 5legg le4mat lem5atic 4len_ 3lenc 5lene_ 1lent le3ph le4pr lera5b ler4e 3lerg 3l4eri l4ero les2 le5sco 5lesq 3less 5less_ l3eva lev4er_ lev4era lev4ers 3ley 4leye 2lf l5fr 4l1g4 l5ga lgar3 l4ges lgo3 2l3h li4ag li2am liar5iz li4as li4ato li5bi 5licio li4cor 4lics 4lict_ l4icu l3icy l3ida lid5er 3lidi lif3er l4iff li4fl 5ligate 3ligh li4gra 3lik 4l4i4l lim4bl lim3i li4mo l4im4p l4ina 1l4ine lin3ea lin3i link5er li5og 4l4iq lis4p l1it l2it_ 5litica l5i5tics liv3er l1iz 4lj lka3 l3kal lka4t l1l l4law l2le l5lea l3lec l3leg l3lel l3le4n l3le4t ll2i l2lin4 l5lina ll4o lloqui5 ll5out l5low 2lm l5met lm3ing l4mod lmon4 2l1n2 3lo_ lob5al lo4ci 4lof 3logic l5ogo 3logu lom3er 5long lon4i l3o3niz lood5 5lope_ lop3i l3opm lora4 lo4rato lo5rie lor5ou 5los_ los5et 5losophiz 5losophy los4t lo4ta loun5d 2lout 4lov 2lp lpa5b l3pha l5phi lp5ing l3pit l4pl l5pr 4l1r 2l1s2 l4sc l2se l4sie 4lt lt5ag ltane5 l1te lten4 ltera4 lth3i l5ties_ ltis4 l1tr ltu2 ltur3a lu5a lu3br luch4 lu3ci lu3en luf4 lu5id lu4ma 5lumi l5umn_ 5lumnia lu3o luo3r 4lup luss4 lus3te 1lut l5ven l5vet4 2l1w 1ly 4lya 4lyb ly5me ly3no 2lys4 l5yse 1ma 2mab ma2ca ma5chine ma4cl mag5in 5magn 2mah maid5 4mald ma3lig ma5lin mal4li mal4ty 5mania man5is man3iz 4map ma5rine_ ma5riz mar4ly mar3v ma5sce mas4e mas1t 5mate math3 ma3tis 4matiza 4m1b mba4t5 m5bil m4b3ing mbi4v 4m5c 4me_ 2med 4med_ 5media me3die m5e5dy me2g mel5on mel4t me2m mem1o3 1men men4a men5ac men4de 4mene men4i mens4 mensu5 3ment men4te me5on m5ersa 2mes 3mesti me4ta met3al me1te me5thi m4etr 5metric me5trie me3try me4v 4m1f 2mh 5mi_ mi3a mid4a mid4g mig4 3milia m5i5lie m4ill min4a 3mind m5inee m4ingl min5gli m5ingly min4t m4inu miot4 m2is mis4er_ mis5l mis4ti m5istry 4mith m2iz 4mk 4m1l m1m mma5ry 4m1n mn4a m4nin mn4o 1mo 4mocr 5mocratiz mo2d1 mo4go mois2 moi5se 4mok mo5lest mo3me mon5et mon5ge moni3a mon4ism mon4ist mo3niz monol4 mo3ny_ mo2r 4mora_ mos2 mo5sey mo3sp moth3 m5ouf 3mous mo2v 4m1p mpara5 mpa5rab mpar5i m3pet mphas4 m2pi mpi4a mp5ies m4p1in m5pir mp5is mpo3ri mpos5ite m4pous mpov5 mp4tr m2py 4m3r 4m1s2 m4sh m5si 4mt 1mu mula5r4 5mult multi3 3mum mun2 4mup mu4u 4mw 1na 2n1a2b n4abu 4nac_ na4ca n5act nag5er_ nak4 na4li na5lia 4nalt na5mit n2an nanci4 nan4it nank4 nar3c 4nare nar3i nar4l n5arm n4as nas4c nas5ti n2at na3tal nato5miz n2au nau3se 3naut nav4e 4n1b4 ncar5 n4ces_ n3cha n5cheo n5chil n3chis nc1in nc4it ncour5a n1cr n1cu n4dai n5dan n1de nd5est_ ndi4b n5d2if n1dit n3diz n5duc ndu4r nd2we 2ne_ n3ear ne2b neb3u ne2c 5neck 2ned ne4gat neg5ativ 5nege ne4la nel5iz ne5mi ne4mo 1nen 4nene 3neo ne4po ne2q n1er nera5b n4erar n2ere n4er5i ner4r 1nes 2nes_ 4nesp 2nest 4nesw 3netic ne4v n5eve ne4w n3f n4gab n3gel nge4n4e n5gere n3geri ng5ha n3gib ng1in n5git n4gla ngov4 ng5sh n1gu n4gum n2gy 4n1h4 nha4 nhab3 nhe4 3n4ia ni3an ni4ap ni3ba ni4bl ni4d ni5di ni4er ni2fi ni5ficat n5igr nik4 n1im ni3miz n1in 5nine_ nin4g ni4o 5nis_ nis4ta n2it n4ith 3nitio n3itor ni3tr n1j 4nk2 n5kero n3ket nk3in n1kl 4n1l n5m nme4 nmet4 4n1n2 nne4 nni3al nni4v nob4l no3ble n5ocl 4n3o2d 3noe 4nog noge4 nois5i no5l4i 5nologis 3nomic n5o5miz no4mo no3my no4n non4ag non5i n5oniz 4nop 5nop5o5li nor5ab no4rary 4nosc nos4e nos5t no5ta 1nou 3noun nov3el3 nowl3 n1p4 npi4 npre4c n1q n1r nru4 2n1s2 ns5ab nsati4 ns4c n2se n4s3es nsid1 nsig4 n2sl ns3m n4soc ns4pe n5spi nsta5bl n1t nta4b nter3s nt2i n5tib nti4er nti2f n3tine n4t3ing nti4p ntrol5li nt4s ntu3me nu1a nu4d nu5en nuf4fe n3uin 3nu3it n4um nu1me n5umi 3nu4n n3uo nu3tr n1v2 n1w4 nym4 nyp4 4nz n3za 4oa oad3 o5a5les oard3 oas4e oast5e oat5i ob3a3b o5bar obe4l o1bi o2bin ob5ing o3br ob3ul o1ce och4 o3chet ocif3 o4cil o4clam o4cod oc3rac oc5ratiz ocre3 5ocrit octor5a oc3ula o5cure od5ded od3ic odi3o o2do4 odor3 od5uct_ od5ucts o4el o5eng o3er oe4ta o3ev o2fi of5ite ofit4t o2g5a5r og5ativ o4gato o1ge o5gene o5geo o4ger o3gie 1o1gis og3it o4gl o5g2ly 3ogniz o4gro ogu5i 1ogy 2ogyn o1h2 ohab5 oi2 oic3es oi3der oiff4 oig4 oi5let o3ing oint5er o5ism oi5son oist5en oi3ter o5j 2ok o3ken ok5ie o1la o4lan olass4 ol2d old1e ol3er o3lesc o3let ol4fi ol2i o3lia o3lice ol5id_ o3li4f o5lil ol3ing o5lio o5lis_ ol3ish o5lite o5litio o5liv olli4e ol5ogiz olo4r ol5pl ol2t ol3ub ol3ume ol3un o5lus ol2v o2ly om5ah oma5l om5atiz om2be om4bl o2me om3ena om5erse o4met om5etry o3mia om3ic_ om3ica o5mid om1in o5mini 5ommend omo4ge o4mon om3pi ompro5 o2n on1a on4ac o3nan on1c 3oncil 2ond on5do o3nen on5est on4gu on1ic o3nio on1is o5niu on3key on4odi on3omy on3s onspi4 onspir5a onsu4 onten4 on3t4i ontif5 on5um onva5 oo2 ood5e ood5i oo4k oop3i o3ord oost5 o2pa ope5d op1er 3opera 4operag 2oph o5phan o5pher op3ing o3pit o5pon o4posi o1pr op1u opy5 o1q o1ra o5ra_ o4r3ag or5aliz or5ange ore5a o5real or3ei ore5sh or5est_ orew4 or4gu 4o5ria or3ica o5ril or1in o1rio or3ity o3riu or2mi orn2e o5rof or3oug or5pe 3orrh or4se ors5en orst4 or3thi or3thy or4ty o5rum o1ry os3al os2c os4ce o3scop 4oscopi o5scr os4i4e os5itiv os3ito os3ity osi4u os4l o2so os4pa os4po os2ta o5stati os5til os5tit o4tan otele4g ot3er_ ot5ers o4tes 4oth oth5esi oth3i4 ot3ic_ ot5ica o3tice o3tif o3tis oto5s ou2 ou3bl ouch5i ou5et ou4l ounc5er oun2d ou5v ov4en over4ne over3s ov4ert o3vis oviti4 o5v4ol ow3der ow3el ow5est ow1i own5i o4wo oy1a 1pa pa4ca pa4ce pac4t p4ad 5pagan p3agat p4ai pain4 p4al pan4a pan3el pan4ty pa3ny pa1p pa4pu para5bl par5age par5di 3pare par5el p4a4ri par4is pa2te pa5ter 5pathic pa5thy pa4tric pav4 3pay 4p1b pd4 4pe_ 3pe4a pear4l pe2c 2p2ed 3pede 3pedi pedia4 ped4ic p4ee pee4d pek4 pe4la peli4e pe4nan p4enc pen4th pe5on p4era_ pera5bl p4erag p4eri peri5st per4mal perme5 p4ern per3o per3ti pe5ru per1v pe2t pe5ten pe5tiz 4pf 4pg 4ph_ phar5i phe3no ph4er ph4es_ ph1ic 5phie ph5ing 5phisti 3phiz ph2l 3phob 3phone 5phoni pho4r 4phs ph3t 5phu 1phy pi3a pian4 pi4cie pi4cy p4id p5ida pi3de 5pidi 3piec pi3en pi4grap pi3lo pi2n p4in_ pind4 p4ino 3pi1o pion4 p3ith pi5tha pi2tu 2p3k2 1p2l2 3plan plas5t pli3a pli5er 4plig pli4n ploi4 plu4m plum4b 4p1m 2p3n po4c 5pod_ po5em po3et5 5po4g poin2 5point poly5t po4ni po4p 1p4or po4ry 1pos pos1s p4ot po4ta 5poun 4p1p ppa5ra p2pe p4ped p5pel p3pen p3per p3pet ppo5site pr2 pray4e 5preci pre5co pre3em pref5ac pre4la pre3r p3rese 3press pre5ten pre3v 5pri4e prin4t3 pri4s pris3o p3roca prof5it pro3l pros3e pro1t 2p1s2 p2se ps4h p4sib 2p1t pt5a4b p2te p2th pti3m ptu4r p4tw pub3 pue4 puf4 pul3c pu4m pu2n pur4r 5pus pu2t 5pute put3er pu3tr put4ted put4tin p3w qu2 qua5v 2que_ 3quer 3quet 2rab ra3bi rach4e r5acl raf5fi raf4t r2ai ra4lo ram3et r2ami rane5o ran4ge r4ani ra5no rap3er 3raphy rar5c rare4 rar5ef 4raril r2as ration4 rau4t ra5vai rav3el ra5zie r1b r4bab r4bag rbi2 rbi4f r2bin r5bine rb5ing_ rb4o r1c r2ce rcen4 r3cha rch4er r4ci4b rc4it rcum3 r4dal rd2i rdi4a rdi4er rdin4 rd3ing 2re_ re1al re3an re5arr 5reav re4aw r5ebrat rec5oll rec5ompe re4cre 2r2ed re1de re3dis red5it re4fac re2fe re5fer_ re3fi re4fy reg3is re5it re1li re5lu r4en4ta ren4te re1o re5pin re4posi re1pu r1er4 r4eri rero4 re5ru r4es_ re4spi ress5ib res2t re5stal re3str re4ter re4ti4z re3tri reu2 re5uti rev2 re4val rev3el r5ev5er_ re5vers re5vert re5vil rev5olu re4wh r1f rfu4 r4fy rg2 rg3er r3get r3gic rgi4n rg3ing r5gis r5git r1gl rgo4n r3gu rh4 4rh_ 4rhal ri3a ria4b ri4ag r4ib rib3a ric5as r4ice 4rici 5ricid ri4cie r4ico rid5er ri3enc ri3ent ri1er ri5et rig5an 5rigi ril3iz 5riman rim5i 3rimo rim4pe r2ina 5rina_ rin4d rin4e rin4g ri1o 5riph riph5e ri2pl rip5lic r4iq r2is r4is_ ris4c r3ish ris4p ri3ta3b r5ited_ rit5er_ rit5ers rit3ic ri2tu rit5ur riv5el riv3et riv3i r3j r3ket rk4le rk4lin r1l rle4 r2led r4lig r4lis rl5ish r3lo4 r1m rma5c r2me r3men rm5ers rm3ing r4ming_ r4mio r3mit r4my r4nar r3nel r4ner r5net r3ney r5nic r1nis4 r3nit r3niv rno4 r4nou r3nu rob3l r2oc ro3cr ro4e ro1fe ro5fil rok2 ro5ker 5role_ rom5ete rom4i rom4p ron4al ron4e ro5n4is ron4ta 1room 5root ro3pel rop3ic ror3i ro5ro ros5per ros4s ro4the ro4ty ro4va rov5el rox5 r1p r4pea r5pent rp5er_ r3pet rp4h4 rp3ing r3po r1r4 rre4c rre4f r4reo rre4st rri4o rri4v rron4 rros4 rrys4 4rs2 r1sa rsa5ti rs4c r2se r3sec rse4cr rs5er_ rs3es rse5v2 r1sh r5sha r1si r4si4b rson3 r1sp r5sw rtach4 r4tag r3teb rten4d rte5o r1ti rt5ib rti4d r4tier r3tig rtil3i rtil4l r4tily r4tist r4tiv r3tri rtroph4 rt4sh ru3a ru3e4l ru3en ru4gl ru3in rum3pl ru2n runk5 run4ty r5usc ruti5n rv4e rvel4i r3ven rv5er_ r5vest r3vey r3vic rvi4v r3vo r1w ry4c 5rynge ry3t sa2 2s1ab 5sack sac3ri s3act 5sai salar4 sal4m sa5lo sal4t 3sanc san4de s1ap sa5ta 5sa3tio sat3u sau4 sa5vor 5saw 4s5b scan4t5 sca4p scav5 s4ced 4scei s4ces sch2 s4cho 3s4cie 5scin4d scle5 s4cli scof4 4scopy scour5a s1cu 4s5d 4se_ se4a seas4 sea5w se2c3o 3sect 4s4ed se4d4e s5edl se2g seg3r 5sei se1le 5self 5selv 4seme se4mol sen5at 4senc sen4d s5ened sen5g s5enin 4sentd 4sentl sep3a3 4s1er_ s4erl ser4o 4servo s1e4s se5sh ses5t 5se5um 5sev sev3en sew4i 5sex 4s3f 2s3g s2h 2sh_ sh1er 5shev sh1in sh3io 3ship shiv5 sho4 sh5old shon3 shor4 short5 4shw si1b s5icc 3side_ 5sides 5sidi si5diz 4signa sil4e 4sily 2s1in s2ina 5sine_ s3ing 1sio 5sion sion5a si2r sir5a 1sis 3sitio 5siu 1siv 5siz sk2 4ske s3ket sk5ine sk5ing s1l2 s3lat s2le slith5 2s1m s3ma small3 sman3 smel4 s5men 5smith smol5d4 s1n4 1so so4ce soft3 so4lab sol3d2 so3lic 5solv 3som 3s4on_ sona4 son4g s4op 5sophic s5ophiz s5ophy sor5c sor5d 4sov so5vi 2spa 5spai spa4n spen4d 2s5peo 2sper s2phe 3spher spho5 spil4 sp5ing 4spio s4ply s4pon spor4 4spot squal4l s1r 2ss s1sa ssas3 s2s5c s3sel s5seng s4ses_ s5set s1si s4sie ssi4er ss5ily s4sl ss4li s4sn sspend4 ss2t ssur5a ss5w 2st_ s2tag s2tal stam4i 5stand s4ta4p 5stat_ s4ted stern5i s5tero ste2w stew5a s3the st2i s4ti_ s5tia s1tic 5stick s4tie s3tif st3ing 5stir s1tle 5stock stom3a 5stone s4top 3store st4r s4trad 5stratu s4tray s4trid 4stry 4st3w s2ty 1su su1al su4b3 su2g3 su5is suit3 s4ul su2m sum3i su2n su2r 4sv sw2 4swo s4y 4syc 3syl syn5o sy5rin 1ta 3ta_ 2tab ta5bles 5taboliz 4taci ta5do 4taf4 tai5lo ta2l ta5la tal5en tal3i 4talk tal4lis ta5log ta5mo tan4de tanta3 ta5per ta5pl tar4a 4tarc 4tare ta3riz tas4e ta5sy 4tatic ta4tur taun4 tav4 2taw tax4is 2t1b 4tc t4ch tch5et 4t1d 4te_ tead4i 4teat tece4 5tect 2t1ed te5di 1tee teg4 te5ger te5gi 3tel_ teli4 5tels te2ma2 tem3at 3tenan 3tenc 3tend 4tenes 1tent ten4tag 1teo te4p te5pe ter3c 5ter3d 1teri ter5ies ter3is teri5za 5ternit ter5v 4tes_ 4tess t3ess_ teth5e 3teu 3tex 4tey 2t1f 4t1g 2th_ than4 th2e 4thea th3eas the5at the3is 3thet th5ic_ th5ica 4thil 5think 4thl th5ode 5thodic 4thoo thor5it tho5riz 2ths 1tia ti4ab ti4ato 2ti2b 4tick t4ico t4ic1u 5tidi 3tien tif2 ti5fy 2tig 5tigu till5in 1tim 4timp tim5ul 2t1in t2ina 3tine_ 3tini 1tio ti5oc tion5ee 5tiq ti3sa 3tise tis4m ti5so tis4p 5tistica ti3tl ti4u 1tiv tiv4a 1tiz ti3za ti3zen 2tl t5la tlan4 3tle_ 3tled 3tles_ t5let_ t5lo 4t1m tme4 2t1n2 1to to3b to5crat 4todo 2tof to2gr to5ic to2ma tom4b to3my ton4ali to3nat 4tono 4tony to2ra to3rie tor5iz tos2 5tour 4tout to3war 4t1p 1tra tra3b tra5ch traci4 trac4it trac4te tras4 tra5ven trav5es5 tre5f tre4m trem5i 5tria tri5ces 5tricia 4trics 2trim tri4v tro5mi tron5i 4trony tro5phe tro3sp tro3v tru5i trus4 4t1s2 t4sc tsh4 t4sw 4t3t2 t4tes t5to ttu4 1tu tu1a tu3ar tu4bi tud2 4tue 4tuf4 5tu3i 3tum tu4nis 2t3up_ 3ture 5turi tur3is tur5o tu5ry 3tus 4tv tw4 4t1wa twis4 4two 1ty 4tya 2tyl type3 ty5ph 4tz tz4e 4uab uac4 ua5na uan4i uar5ant uar2d uar3i uar3t u1at uav4 ub4e u4bel u3ber u4bero u1b4i u4b5ing u3ble_ u3ca uci4b uc4it ucle3 u3cr u3cu u4cy ud5d ud3er ud5est udev4 u1dic ud3ied ud3ies ud5is u5dit u4don ud4si u4du u4ene uens4 uen4te uer4il 3ufa u3fl ugh3en ug5in 2ui2 uil5iz ui4n u1ing uir4m uita4 uiv3 uiv4er_ u5j 4uk u1la ula5b u5lati ulch4 5ulche ul3der ul4e u1len ul4gi ul2i u5lia ul3ing ul5ish ul4lar ul4li4b ul4lis 4ul3m u1l4o 4uls uls5es ul1ti ultra3 4ultu u3lu ul5ul ul5v um5ab um4bi um4bly u1mi u4m3ing umor5o um2p unat4 u2ne un4er u1ni un4im u2nin un5ish uni3v un3s4 un4sw unt3ab un4ter_ un4tes unu4 un5y un5z u4ors u5os u1ou u1pe uper5s u5pia up3ing u3pl up3p upport5 upt5ib uptu4 u1ra 4ura_ u4rag u4ras ur4be urc4 ur1d ure5at ur4fer ur4fr u3rif uri4fic ur1in u3rio u1rit ur3iz ur2l url5ing_ ur4no uros4 ur4pe ur4pi urs5er ur5tes ur3the urti4 ur4tie u3ru 2us u5sad u5san us4ap usc2 us3ci use5a u5sia u3sic us4lin us1p us5sl us5tere us1tr u2su usur4 uta4b u3tat 4ute_ 4utel 4uten uten4i 4u1t2i uti5liz u3tine ut3ing ution5a u4tis 5u5tiz u4t1l ut5of uto5g uto5matic u5ton u4tou uts4 u3u uu4m u1v2 uxu3 uz4e 1va 5va_ 2v1a4b vac5il vac3u vag4 va4ge va5lie val5o val1u va5mo va5niz va5pi var5ied 3vat 4ve_ 4ved veg3 v3el_ vel3li ve4lo v4ely ven3om v5enue v4erd 5vere_ v4erel v3eren ver5enc v4eres ver3ie vermi4n 3verse ver3th v4e2s 4ves_ ves4te ve4te vet3er ve4ty vi5ali 5vian 5vide_ 5vided 4v3iden 5vides 5vidi v3if vi5gn vik4 2vil 5vilit v3i3liz v1in 4vi4na v2inc vin5d 4ving vio3l v3io4r vi1ou vi4p vi5ro vis3it vi3so vi3su 4viti vit3r 4vity 3viv 5vo_ voi4 3vok vo4la v5ole 5volt 3volv vom5i vor5ab vori4 vo4ry vo4ta 4votee 4vv4 v4y w5abl 2wac wa5ger wag5o wait5 w5al_ wam4 war4t was4t wa1te wa5ver w1b wea5rie weath3 wed4n weet3 wee5v wel4l w1er west3 w3ev whi4 wi2 wil2 will5in win4de win4g wir4 3wise with3 wiz5 w4k wl4es wl3in w4no 1wo2 wom1 wo5ven w5p wra4 wri4 writa4 w3sh ws4l ws4pe w5s4t 4wt wy4 x1a xac5e x4ago xam3 x4ap xas5 x3c2 x1e xe4cuto x2ed xer4i xe5ro x1h xhi2 xhil5 xhu4 x3i xi5a xi5c xi5di x4ime xi5miz x3o x4ob x3p xpan4d xpecto5 xpe3d x1t2 x3ti x1u xu3a xx4 y5ac 3yar4 y5at y1b y1c y2ce yc5er y3ch ych4e ycom4 ycot4 y1d y5ee y1er y4erf yes4 ye4t y5gi 4y3h y1i y3la ylla5bl y3lo y5lu ymbol5 yme4 ympa3 yn3chr yn5d yn5g yn5ic 5ynx y1o4 yo5d y4o5g yom4 yo5net y4ons y4os y4ped yper5 yp3i y3po y4poc yp2ta y5pu yra5m yr5ia y3ro yr4r ys4c y3s2e ys3ica ys3io 3ysis y4so yss4 ys1t ys3ta ysur4 y3thin yt3ic y1w za1 z5a2b zar2 4zb 2ze ze4n ze4p z1er ze3ro zet4 2z1i z4il z4is 5zl 4zm 1zo zo4m zo5ol zte4 4z1z2 z4zy"; + + +?> \ No newline at end of file diff --git a/include/mpdf/patterns/es.php b/include/mpdf/patterns/es.php new file mode 100755 index 0000000000000000000000000000000000000000..96b40c58ea6dc8acc358c9f1f8dd487ae1d6152d --- /dev/null +++ b/include/mpdf/patterns/es.php @@ -0,0 +1,11 @@ +<?php +/* + Adapted from Hyphenator 1.0.2 + http://code.google.com/p/hyphenator/ + + Created by Luis Pabon (lpabon at metagrama dot es) +*/ + +$patterns="_a2 _an2a2 _an2\xc3\xa12 _an3aero _ana3li _an\xc3\xa13li _an2e2 _an2\xc3\xa92 _an3e2pigr _ane3xa _ane3x\xc3\xa1 _ane3xe _ane3x\xc3\xa9 _ane3xio _ane3xi\xc3\xb3 _an3h _an2i2 _an2\xc3\xad2 _ani3dar _ani3ll _ani3m _ani3mad _ani3m\xc3\xa1d _ani\xc3\xb1a _ani3q _an3i2so _an3i2s\xc3\xb3 _ani3vel _an2o2 _an2\xc3\xb32 _ano5che _ano5din _ano5mal _an\xc3\xb35mal _ano5nad _ano5nim _an\xc3\xb33nim _ano5ta _ano3t\xc3\xa1 _ante2o3je _anti1a2 _anti1\xc3\xa12 _anti1e2 _anti1\xc3\xa92 _anti1h _anti1i2 _anti1\xc3\xad2 _anti1o2 _anti1\xc3\xb32 _anti1u2 _anti1\xc3\xba2 _an2u2 _an2\xc3\xba2_ _anua3l _anua4lm _anu3bl _anu3da _anu3l _bi1anual _bi1aur _bien1and _bien1apa _bien1ave _bien1est _bien1int _bi1ox _bi1\xc3\xb32x _bi1un _co2a2 _co2\xc3\xa12 _co2e2 _co2\xc3\xa92 _co2i2 _co2\xc3\xad2 _co3o4 _co2\xc3\xb32 _co2u2 _co2\xc3\xba2 _de2s2a2 _de2s2\xc3\xa12 _de2s2e2 _de2s2\xc3\xa92 _de2s2i2 _de2s2\xc3\xad2 _de3s4in3ter2e3sa _de3s4in3ter2e3s\xc3\xa1 _de3s4in3ter2e3se _de3s4in3ter2e3s\xc3\xa9 _de3s4in3ter2e3so _de3s4in3ter2e3s\xc3\xb3 _de2s2o2 _de2s2\xc3\xb32 _de2s2u2 _de2s2\xc3\xba2 _dieci1o2 _en2a2 _en2\xc3\xa12 _en1aceit _en1aciy _en1aguach _en1aguaz _en1anch _en1apa _en1arb _en1art _en2artr _en2e2 _en2\xc3\xa92 _en1ej _en2i2 _en2\xc3\xad2 _en2o2 _en2\xc3\xb32 _eno3jar _en2u2 _en2\xc3\xba2 _enu3mera _enu3mer\xc3\xa1 _enu3mere _he4mee _hepta1e _hu4mea _hu4meo _in2a2 _in2\xc3\xa12 _in3abarc _in3abord _in3acent _in3adapt _in3aguant _ina3movib _in3analiz _ina3nic _in3anim _in\xc3\xa13nim _in3apel _in3aplic _in3apreci _in3aprens _in3arrug _in3asist _in2e2 _in2\xc3\xa92 _in\xc3\xa93dit _in3efic _in3efici _in3eludi _ine3narr _in2i2 _in2\xc3\xad2 _ini3cia _ini3ci\xc3\xa1 _ini3cie _in2o2 _in2\xc3\xb32 _ino3cua _ino3cula _ino3cul\xc3\xa1 _ino3cule _ino3cuo _inte2r1a2 _inte2r1\xc3\xa12 _inte2r1e2 _inte2r1\xc3\xa92 _in3ter2e3sa _in3ter2e3s\xc3\xa1 _in3ter2e3se _in3ter2e3s\xc3\xa9 _in3ter2e3so _in3ter2e3s\xc3\xb3 _inte2r1i2 _inte2r1\xc3\xad2 _inte2r1o2 _inte2r1\xc3\xb32 _inte2r3r _in3te3r4rog _in3te3r4rump _in3te3r4rupc _in3te3r4rupt _inte2r1u2 _inte2r1\xc3\xba2 _intra1o _intra1u _in2u2 _in2\xc3\xba2 _in\xc3\xba3til _inu3tiliz _mal1acon _mal1acos _mala1e _mal1andant _mal1andanz _ma4l3e4du _mal1est _mal1int _pa4n1afri _pa4n1a4meri _pa4n1europ _pa4n1\xc3\xb3pti _pos2t2a2 _pos2t2\xc3\xa12 _pos2t2e2 _pos2t2\xc3\xa92 _post3elec _pos3terg _pos3te3ri _pos2t2i2 _pos2t2\xc3\xad2 _pos3ti3go _pos3ti3la _post3impr _pos3tin _pos3t\xc3\xadn _post3ind _pos3ti3ne _pos3ti3za _pos3ti3zo _pos2t2o2 _pos2t2\xc3\xb32 _pos3t\xc3\xb33ni _post3ope _post3rev _pos2t2u2 _pos2t2\xc3\xba2 _pos3tu3la _pos3tu3l\xc3\xa1 _pos3tu3le _pos3tu3l\xc3\xa9 _pos3tu3ra _pre2a2 _pre2\xc3\xa12 _pre2e2 _pre2\xc3\xa92 _pre2h2 _pre2i2 _pre2\xc3\xad2 _pre2o2 _pre2\xc3\xb32 _pre2u2 _pre2\xc3\xba2 _pro2a2 _pro2\xc3\xa12 _pro2e2 _pro2\xc3\xa92 _pro2h2 _pro2i2 _pro2\xc3\xad2 _pro2o2 _pro2\xc3\xb32 _pro2u2 _pro2\xc3\xba2 _re2a2 _re2\xc3\xa12 _re3abr _re3\xc3\xa1br _re3a2eg _re3afirm _re3af\xc3\xadrm _re3a2grup _re3ajust _rea3j\xc3\xbast _re3alim _rea3lism _rea3list _rea3liza _rea3liz\xc3\xa1 _rea3l\xc3\xadza _re3anim _re3an\xc3\xadm _re3aparec _re3a2q _re3a2z _re3e4 _re2\xc3\xa92 _re2i2 _re2\xc3\xad2 _re3i2m _re3inc _re3ing _re3ins _re3int _re2o2 _re2\xc3\xb32 _re3o2b _re1oc _re1oj _re3orga _retro1a _re2u2 _re2\xc3\xba2 _re3ubica _re3ub\xc3\xadca _reu3mati _reu3m\xc3\xa1ti _re3unir _re3un\xc3\xadr _re1unt _re3usar _re3us\xc3\xa1r _re3utiliz _re3util\xc3\xadz _so3a4s _su2b2a2 _su2b2\xc3\xa12 _sub3aflue _sub3arr _su2b2e2 _su2b2\xc3\xa92 _sub3enten _sub3estim _sub3est\xc3\xadm _su2b2i2 _su2b2\xc3\xad2 _su3b4ien _sub2i3ll _sub3\xc3\xadmi _sub2i3mien _sub3\xc3\xadnd _su2b2o2 _su2b2\xc3\xb32 _sub3ofici _su4b3ray _su2b2u2 _su2b2\xc3\xba2 _sub3urba _su2d1a2fr _su2d1a2me _su2d1est _sur1a2me _sur1est _sur1oes _tele1imp _tele1obj _tran2s1alp _tran2s1and _tran2s1atl _tran2s1oce _tran2s1ur _tra2s1a _tra2s1o _tra2s2o\xc3\xb1 _tri1\xc3\xb32x 4a3ba_ 4a3bais_ 4\xc3\xa13bamos_ 4a3ban_ 4a3bas_ acante2 4a3ci\xc3\xb3n_ 4a3ciones_ acto1a2 acto1\xc3\xa12 acto1e2 acto1\xc3\xa92 acto1h acto1i2 acto1\xc3\xad2 acto1o2 acto1\xc3\xb32 acto1u2 acto1\xc3\xba2 4ad_ 4a3da_ 4a3das_ 4adlas_ 4adle_ 4adles_ 4adlo_ 4adlos_ 4adme_ 4\xc3\xa1d3mela_ 4\xc3\xa1d3melas_ 4\xc3\xa1dmele_ 4\xc3\xa1dmeles_ 4\xc3\xa1dmelo_ 4\xc3\xa1dmelos_ 4adnos_ 4\xc3\xa1dnosla_ 4\xc3\xa1dnoslas_ 4\xc3\xa1dnosle_ 4\xc3\xa1dnosles_ 4\xc3\xa1dnoslo_ 4\xc3\xa1dnoslos_ 4a3do_ 4a3dor_ 4a3dora_ 4a3doras_ 4a3dores_ 4a3dos_ 4\xc3\xa1dsela_ 4\xc3\xa1dselas_ 4\xc3\xa1dsele_ 4\xc3\xa1dseles_ 4\xc3\xa1dselo_ 4\xc3\xa1dselos_ 4adte_ 4\xc3\xa1d3tela_ 4\xc3\xa1d3telas_ 4\xc3\xa1dtele_ 4\xc3\xa1dteles_ 4\xc3\xa1dtelo_ 4\xc3\xa1dtelos_ aero1a2 aero1\xc3\xa12 aero1e2 aero1\xc3\xa92 aero1h aero1i2 aero1\xc3\xad2 aero1o2 aero1\xc3\xb32 aero1u2 aero1\xc3\xba2 afro1a2 afro1\xc3\xa12 afro1e2 afro1\xc3\xa92 afro1h afro1i2 afro1\xc3\xad2 afro1o2 afro1\xc3\xb32 afro1u2 afro1\xc3\xba2 4a4i3gan_ 4\xc3\xa1is_ a\xc3\xad5so_ a\xc3\xad5sos_ 2al_ 2ales_ 4a3mos_ 4an_ ana3l\xc3\xad 4ando 4\xc3\xa1ndola_ 4\xc3\xa1ndolas_ 4\xc3\xa1ndole_ 4\xc3\xa1ndoles_ 4\xc3\xa1ndolo_ 4\xc3\xa1ndolos_ 4\xc3\xa1ndome_ 4\xc3\xa1ndomela_ 4\xc3\xa1ndomelas_ 4\xc3\xa1ndomele_ 4\xc3\xa1ndomeles_ 4\xc3\xa1ndomelo_ 4\xc3\xa1ndomelos_ 4\xc3\xa1ndonos_ 4\xc3\xa1ndoos_ 4\xc3\xa1ndose_ 4\xc3\xa1ndosela_ 4\xc3\xa1ndoselas_ 4\xc3\xa1ndosele_ 4\xc3\xa1ndoseles_ 4\xc3\xa1ndoselo_ 4\xc3\xa1ndoselos_ 4\xc3\xa1ndoseme_ 4\xc3\xa1ndosenos_ 4\xc3\xa1ndote_ 4\xc3\xa1ndotela_ 4\xc3\xa1ndotelas_ 4\xc3\xa1ndotele_ 4\xc3\xa1ndoteles_ 4\xc3\xa1ndotelo_ 4\xc3\xa1ndotelos_ 4\xc3\xa1ndoteme_ 4\xc3\xa1ndotenos_ anfi1a2 anfi1\xc3\xa12 anfi1e2 anfi1\xc3\xa92 anfi1h anfi1i2 anfi1\xc3\xad2 anfi1o2 anfi1\xc3\xb32 anfi1u2 anfi1\xc3\xba2 anglo1a2 anglo1\xc3\xa12 anglo1e2 anglo1\xc3\xa92 anglo1h anglo1i2 anglo1\xc3\xad2 anglo1o2 anglo1\xc3\xb32 anglo1u2 anglo1\xc3\xba2 ante1a2 ante1\xc3\xa12 ante1e2 ante1\xc3\xa92 ante1h ante1i2 ante1\xc3\xad2 ante1o2 ante1\xc3\xb32 ante1u2 ante1\xc3\xba2 4aos_ 4\xc3\xa1osla_ 4\xc3\xa1oslas_ 4\xc3\xa1osle_ 4\xc3\xa1osles_ 4\xc3\xa1oslo_ 4\xc3\xa1oslos_ 4ar_ 4a3ra_ 4a3r\xc3\xa1_ 4a3rais_ 4\xc3\xa13ramos_ 4a3ran_ 4a3r\xc3\xa1n_ 4a3ras_ 4a3r\xc3\xa1s_ archi1a2 archi1\xc3\xa12 archi1e2 archi1\xc3\xa92 archi1h archi1i2 archi1\xc3\xad2 archi1o2 archi1\xc3\xb32 archi1u2 archi1\xc3\xba2 4a3re_ 4a3r\xc3\xa9_ 4a3reis_ 4a3r\xc3\xa9is_ 4a3remos_ 4\xc3\xa13remos_ 4a3ren_ 4a3res_ 4a3r\xc3\xa9s_ 4a3r\xc3\xada_ 4a3r\xc3\xadais 4a3r\xc3\xadamos_ 4a3r\xc3\xadan_ 4a3r\xc3\xadas_ a3rio_ a3rios_ 4a3r\xc3\xads_ 4a4r3la_ 4a4r3las_ 4a4r3le_ 4a4r3les_ 4a4r3lo_ 4a4r3los_ 4a4rme_ 4\xc3\xa14r3mela_ 4\xc3\xa14r3melas_ 4\xc3\xa14rmele_ 4\xc3\xa14r3meles_ 4\xc3\xa14rmelo_ 4\xc3\xa14r3melos_ 4a4r3nos_ 4\xc3\xa14r3nosla_ 4\xc3\xa14r3noslas_ 4\xc3\xa14r3nosle_ 4\xc3\xa14r3nosles_ 4\xc3\xa14r3noslo_ 4\xc3\xa14r3noslos_ 4a3ron_ 4a3ros_ 4\xc3\xa1rosla_ 4\xc3\xa1roslas_ 4\xc3\xa1rosle_ 4\xc3\xa1rosles_ 4\xc3\xa1roslo_ 4\xc3\xa1roslos_ 4a4r3se_ 4\xc3\xa14r3sela_ 4\xc3\xa14r3selas_ 4\xc3\xa14r3sele_ 4\xc3\xa14r3seles_ 4\xc3\xa14r3selo_ 4\xc3\xa14r3selos_ 4a4r3te_ 4\xc3\xa14r3tela_ 4\xc3\xa14r3telas_ 4\xc3\xa14r3tele_ 4\xc3\xa14r3teles_ 4\xc3\xa14r3telo_ 4\xc3\xa14r3telos_ 4as_ 4\xc3\xa1s_ 4a3se_ 4a3seis_ 4\xc3\xa13semos_ 4a3sen_ 4a3ses_ 4aste_ 4asteis_ 4astes_ asu3b2 4ates_ auto1a2 auto1\xc3\xa12 auto1e2 auto1\xc3\xa92 auto1h auto1i2 auto1\xc3\xad2 auto1o2 auto1\xc3\xb32 auto1u2 auto1\xc3\xba2 1b 2bb 2bc 2b3c2n 2b3c2t 2b3c2z 2bd 2bf 2b3f2t 2bg 2b3g2n 2b1h biblio1a2 biblio1\xc3\xa12 biblio1e2 biblio1\xc3\xa92 biblio1h biblio1i2 biblio1\xc3\xad2 biblio1o2 biblio1\xc3\xb32 biblio1u2 biblio1\xc3\xba2 bien2 b4ien3das_ b4ien3do_ bien3h bien3m bien3q bien3t bien3v bio1a2 bio1\xc3\xa12 bio1e2 bio1\xc3\xa92 bio1h bio1i2 bio1\xc3\xad2 bio1o2 bio1\xc3\xb32 bio1u2 bio1\xc3\xba2 bi1u2n\xc3\xad 2bj 2bk b2l 2bl_ 2bm 2b3m2n 2bn 2bp 2b3p2n 2b3p2s 2b3p2t 2bq b2r 2br_ 2bs 2bt 2b3t2s 2b3t2z 2bv 2bw 2bx 2by 2bz 1c 4caca4 4caga4 4cagas_ 4cago4 cardio1a2 cardio1\xc3\xa12 cardio1e2 cardio1\xc3\xa92 cardio1h cardio1i2 cardio1\xc3\xad2 cardio1o2 cardio1\xc3\xb32 cardio1u2 cardio1\xc3\xba2 2cb 2cc 2c3c2n 2c3c2t 2c3c2z 2cd cefalo1a2 cefalo1\xc3\xa12 cefalo1e2 cefalo1\xc3\xa92 cefalo1h cefalo1i2 cefalo1\xc3\xad2 cefalo1o2 cefalo1\xc3\xb32 cefalo1u2 cefalo1\xc3\xba2 centi1a2 centi1\xc3\xa12 centi5\xc3\xa1rea centi1e2 centi1\xc3\xa92 centi1h centi1i2 centi1\xc3\xad2 centi1o2 centi1\xc3\xb32 centi1u2 centi1\xc3\xba2 2cf 2c3f2t 2cg 2c3g2n c4h 2ch_ ciclo1a2 ciclo1\xc3\xa12 ciclo1e2 ciclo1\xc3\xa92 ciclo1h ciclo1i2 ciclo1\xc3\xad2 ciclo1o2 ciclo1\xc3\xb32 ciclo1u2 ciclo1\xc3\xba2 cito1a2 cito1\xc3\xa12 cito1e2 cito1\xc3\xa92 cito1h cito1i2 cito1\xc3\xad2 cito1o2 cito1\xc3\xb32 cito1u2 cito1\xc3\xba2 2cj c2k c2l 2cl_ 2cm 2c3m2n 2cn 4cn_ 3c2neor cnico1a2 cnico1\xc3\xa12 cnico1e2 cnico1\xc3\xa92 cnico1h cnico1i2 cnico1\xc3\xad2 cnico1o2 cnico1\xc3\xb32 cnico1u2 cnico1\xc3\xba2 co4acci co4acti co4adju co4a3dun co4adyu co3agen co4a3gul co4\xc3\xa13gul co4a3lic co4aptac co4art co4\xc3\xa1rt co4e3fic co4erc co4erz co4e3t\xc3\xa1 co3exis co4imbr co4inci co4i3to con1imbr co3n4imbri contra1a2 contra1\xc3\xa12 contra1e2 contra1\xc3\xa92 contra1h contra1i2 contra1\xc3\xad2 contra1o2 contra1\xc3\xb32 contra1u2 contra1\xc3\xba2 con1urb co4o3per co4o3p\xc3\xa9r co4opt co4ord 2cp 2c3p2n 2c3p2s 2c3p2t 2cq c2r 2cr_ cripto1a2 cripto1\xc3\xa12 cripto1e2 cripto1\xc3\xa92 cripto1h cripto1i2 cripto1\xc3\xad2 cripto1o2 cripto1\xc3\xb32 cripto1u2 cripto1\xc3\xba2 crono1a2 crono1\xc3\xa12 crono1e2 crono1\xc3\xa92 crono1h crono1i2 crono1\xc3\xad2 crono1o2 crono1\xc3\xb32 crono1u2 crono1\xc3\xba2 2cs 2ct 4ct_ 2c3t2s 2c3t2z 4culo4 2cv 2cw 2cx 2cy 2cz 4cz_ 1d 2db 2dc 2d3c2n 2d3c2t 2d3c2z 2dd deca1a2 deca1\xc3\xa12 deca1e2 deca1\xc3\xa92 deca1h deca1i2 deca1\xc3\xad2 deca2i3mient deca1o2 deca1\xc3\xb32 deca1u2 deca1\xc3\xba2 decimo1 de4s3abast de4s3aboll de4s3aboto de4s3abr desa3brid de4s3abroch de4s3aceit de4s3aceler desa3cert desa3ciert de4s3acobar de4s3acomod de4s3acomp de4s3acons de4s3acopl de4s3acorr de4s3acostum de4s3acot desa3craliz de4s3acredit de4s3activ de4s3acuart de4s3aderez de4s3adeud de4s3adorar de4s3adormec de4s3adorn de4s3advert de4s3aferr desa3fi desa3f\xc3\xad de4s3afic de4s3afil de4s3afin de4s3afor desa3garr de4s3agraci de4s3agrad de4s3agravi de4s3agreg de4s3agrup de4s3agu desa3g\xc3\xbc desa3guisado de4s3aherr de4s3ahij de4s3ajust de4s3alagar de4s3alent de4s3alfom de4s3alfor de4s3alien desa3lin de4s3aline de4s3ali\xc3\xb1 desa3liv de4s3alm de4s3almid desa3loj de4s3alquil de4s3alter de4s3alumbr desa3marr desa3mobl de4s3amold de4s3amort de4s3amuebl de4s3and de4s3angel de4s3anid de4s3anim de4s3an\xc3\xadm de4s3anud desa3pacib de4s3apadr desa3pa\xc3\xb1 de4s3apare desa3parec desa3paric desa3peg desa3percib de4s3aplic de4s3apolill de4s3apoy de4s3aprend desa3prensi de4s3apret de4s3apriet de4s3aprob de4s3apropi de4s3aprovech de4s3arbol de4s3aren de4s3arm des4arme de4s3arraig de4s3arregl de4s3arrend de4s3arrim desa3rroll de4s3arrop de4s3arrug de4s3articul de4s3asent de4s3asist de4s3asn desa3soseg desa3sosieg de4s3atenc de4s3atend de4s3atent de4s3atiend desa3tin de4s3atorn de4s3atranc de4s3autor de4s3avis desa3yun desa3zon desa3z\xc3\xb3n de4s3embal de4s3emb\xc3\xa1l de4s3embar de4s3emb\xc3\xa1r de4s3embarg de4s3embols de4s3emborr de4s3embosc de4s3embot de4s3embrag de4s3embr\xc3\xa1g de4s3embrave de4s3embr\xc3\xa1ve de4s3embroll de4s3embr\xc3\xb3ll de4s3embruj de4s3embr\xc3\xbaj de3semej de4s3empac de4s3empa\xc3\xb1 de4s3emp\xc3\xa1\xc3\xb1 de4s3empaquet de4s3empaqu\xc3\xa9t de4s3emparej de4s3empar\xc3\xa9j de4s3emparent de4s3empat de4s3emp\xc3\xa9 de4s3empedr de4s3empeg de4s3empeor de4s3emperez de4s3empern de4s3emple de4s3empolv de4s3empotr de4s3empoz de4s3enam de4s3encab de4s3encad de4s3encaj de4s3enc\xc3\xa1j de4s3encall de4s3enc\xc3\xa1ll de4s3encam de3sencant de4s3encap de4s3encar de4s3enc\xc3\xa1r de4s3ench de4s3encl de4s3enco de4s3encr de4s3encu de4s3end de3senfad de3senf\xc3\xa1d de4s3enfi de4s3enfo de4s3enf\xc3\xb3 de3senfren de4s3enfund de4s3enfur de4s3enganch de3senga\xc3\xb1 de3seng\xc3\xa1\xc3\xb1 de4s3engar de4s3engas de4s3engom de4s3engoz de4s3engra de4s3enhebr de4s3enj de4s3enlad de4s3enlaz de4s3enlo de4s3enm de4s3enr de4s3ens de4s3enta de3sentend de4s3enter de3sentien de3senti\xc3\xa9n de4s3entier de4s3enti\xc3\xa9r de4s3ento de4s3entr de4s3entu de4s3envain de3senvolvim de3seo de4s3eq de3s4erci de3s4ert de3s4\xc3\xa9rt de4s3espa de3sesper de3sesperac de4s3esperanz de4s3estabil de4s3estim de3sider de3sidia de3sidio de3siert de3sign de3sigual de3silusi de4s3imagin de4s3iman de4s3impon de4s3impres de4s3impresX de4s3incent de4s3inclin de4s3incorp de4s3incrust de3sinenc de3sinfec de4s3infl de4s3inflam de4s3inform de4s3inhib de4s3insect de4s3instal de3s4integr de3s4inter de4s3intox de4s3inver de3sisten de4s3obedec de4s3oblig de4s3obstr de3socup de4s3odor de3solac de3solad de3soll de3sonce de4s3orde de4s3\xc3\xb3rde de4s3orej de3s4oseg de4s3ova de4s3ovi de4s3oxi de4s3oye de4s3oy\xc3\xa9 de4s3ub4ic de3s4ubstan de3su3dan de3su3dar de3su3das de3suell de4s3unier de4s3unim de4s3unir de3s4ustan 2df 2d3f2t 2dg 2d3g2n 2d1h 2dj 2dk 2dl 2dm 2d3m2n 2dn dodeca1a2 dodeca1\xc3\xa12 dodeca1e2 dodeca1\xc3\xa92 dodeca1h dodeca1i2 dodeca1\xc3\xad2 dodeca1o2 dodeca1\xc3\xb32 dodeca1u2 dodeca1\xc3\xba2 2dp 2d3p2n 2d3p2s 2d3p2t 2dq d2r 2dr_ 2ds 2dt 2d3t2s 2d3t2z 2dv 2dw 2dx 2dy 2dz 4e_ 4\xc3\xa9_ ea3cia_ ea3cias_ ea3cio_ ea3cios_ 4eadla_ e4a3miento ecano1a2 ecano1\xc3\xa12 ecano1e2 ecano1\xc3\xa92 ecano1h ecano1i2 ecano1\xc3\xad2 ecano1o2 ecano1\xc3\xb32 ecano1u2 ecano1\xc3\xba2 eco1a2 eco1\xc3\xa12 eco1e2 eco1\xc3\xa92 eco1h eco1i2 eco1\xc3\xad2 eco1o2 eco1\xc3\xb32 eco1u2 eco1\xc3\xba2 ectro1a2 ectro1\xc3\xa12 ectro1e2 ectro1\xc3\xa92 ectro1h ectro1i2 ectro1\xc3\xad2 ectro1o2 ectro1\xc3\xb32 ectro1u2 ectro1\xc3\xba2 4ed_ 4edlas_ 4edle_ 4edles_ 4edlo_ 4edlos_ 4edme_ 4\xc3\xa9d3mela_ 4\xc3\xa9d3melas_ 4\xc3\xa9dmele_ 4\xc3\xa9dmeles_ 4\xc3\xa9dmelo_ 4\xc3\xa9dmelos_ 4ednos_ 4\xc3\xa9dnosla_ 4\xc3\xa9dnoslas_ 4\xc3\xa9dnosle_ 4\xc3\xa9dnosles_ 4\xc3\xa9dnoslo_ 4\xc3\xa9dnoslos_ 4\xc3\xa93drica_ 4\xc3\xa93dricas_ 4\xc3\xa93drico_ 4\xc3\xa93dricos_ 4e3dro_ 4e3dros_ 4\xc3\xa9dsela_ 4\xc3\xa9dselas_ 4\xc3\xa9dsele_ 4\xc3\xa9dseles_ 4\xc3\xa9dselo_ 4\xc3\xa9dselos_ 4edte_ 4\xc3\xa9d3tela_ 4\xc3\xa9d3telas_ 4\xc3\xa9dtele_ 4\xc3\xa9dteles_ 4\xc3\xa9dtelo_ 4\xc3\xa9dtelos_ 4eedla_ 4\xc3\xa9is_ 4emboca emi2o2 4e3mos_ 4en_ endo1a2 endo1\xc3\xa12 endo1e2 endo1\xc3\xa92 endo1h endo1i2 endo1\xc3\xad2 endo1o2 endo1\xc3\xb32 endo1u2 endo1\xc3\xba2 ento1a2 ento1\xc3\xa12 ento1e2 ento1\xc3\xa92 ento1h ento1i2 ento1\xc3\xad2 ento1o2 ento1\xc3\xb32 ento1u2 ento1\xc3\xba2 entre1a2 entre1\xc3\xa12 entre1e2 entre1\xc3\xa92 entre1h entre1i2 entre1\xc3\xad2 entre1o2 entre1\xc3\xb32 entre1u2 entre1\xc3\xba2 4eos_ 4\xc3\xa9osla_ 4\xc3\xa9oslas_ 4\xc3\xa9osle_ 4\xc3\xa9osles_ 4\xc3\xa9oslo_ 4\xc3\xa9oslos_ 4er_ 4e3r\xc3\xa1_ e5r4a3ba_ e5r4a3bais_ e5r4\xc3\xa13bamos_ e5r4a3ban_ e5r4a3bas_ 4e3ra3ble_ 4e3ra3blemente_ 4e3ra3bles_ e5r4ad_ e5r4a3da_ e5r4a3das_ e5r4a3do_ e5r4a3dor_ e5r4a3dora_ e5r4a3doras_ e5r4a3dores_ e5r4a3dos_ e5r4\xc3\xa1is_ e5r4a3mos_ e5r4an_ 4e3r\xc3\xa1n_ e5r4a3ra_ e5r4a3r\xc3\xa1_ e5r4a3rais_ e5r4\xc3\xa13ramos_ e5r4a3ran_ e5r4a3r\xc3\xa1n_ e5r4a3ras_ e5r4a3r\xc3\xa1s_ e5r4a3re_ e5r4a3r\xc3\xa9_ e5r4a3reis_ e5r4a3r\xc3\xa9is_ e5r4a3remos_ e5r4\xc3\xa13remos_ e5r4a3ren_ e5r4a3res_ e5r4a3r\xc3\xa9s_ e5r4a3r\xc3\xada_ e5r4a3r\xc3\xadais e5r4a3r\xc3\xadamos_ e5r4a3r\xc3\xadan_ e5r4a3r\xc3\xadas_ e5r4a3r\xc3\xads_ e5r4a3ron_ e5r4as_ 4e3r\xc3\xa1s_ e5r4a3se_ e5r4a3seis_ e5r4\xc3\xa13semos_ e5r4a3sen_ e5r4a3ses_ e5r4aste_ e5r4asteis_ e5r4astes_ e5r4ates_ 4e3r\xc3\xa9_ 4e3r\xc3\xa9is_ 4e3re3mos_ 4e3r\xc3\xa9s_ 4e3r\xc3\xada_ 4e3r\xc3\xadais_ 4e3r\xc3\xadamos_ 4e3r\xc3\xadan_ 4e3r\xc3\xadas_ 4e3rior_ 4e3riora_ 4e3rioras_ 4e3riores_ 4e3rioridad_ 4e3rioridades_ 4e3riormente_ 4e3r\xc3\xads_ 4erla_ 4erlas_ 4erle_ 4erles_ 4erlo_ 4erlos_ 4erme_ 4\xc3\xa9r3mela_ 4\xc3\xa9r3melas_ 4\xc3\xa9rmele_ 4\xc3\xa9rmeles_ 4\xc3\xa9rmelo_ 4\xc3\xa9rmelos_ 4ernos_ 4\xc3\xa9rnosla_ 4\xc3\xa9rnoslas_ 4\xc3\xa9rnosle_ 4\xc3\xa9rnosles_ 4\xc3\xa9rnoslo_ 4\xc3\xa9rnoslos_ 4e3ros_ 4\xc3\xa93rosla_ 4\xc3\xa93roslas_ 4\xc3\xa93rosle_ 4\xc3\xa93rosles_ 4\xc3\xa93roslo_ 4\xc3\xa93roslos_ 4erse_ 4\xc3\xa9rsela_ 4\xc3\xa9rselas_ 4\xc3\xa9rsele_ 4\xc3\xa9rseles_ 4\xc3\xa9rselo_ 4\xc3\xa9rselos_ 4erte_ 4\xc3\xa9r3tela_ 4\xc3\xa9r3telas_ 4\xc3\xa9rtele_ 4\xc3\xa9rteles_ 4\xc3\xa9rtelo_ 4\xc3\xa9rtelos_ 4\xc3\xa9s 4es_ euco1a2 euco1\xc3\xa12 euco1e2 euco1\xc3\xa92 euco1h euco1i2 euco1\xc3\xad2 euco1o2 euco1\xc3\xb32 euco1u2 euco1\xc3\xba2 euro1a2 euro1\xc3\xa12 euro1e2 euro1\xc3\xa92 euro1h euro1i2 euro1\xc3\xad2 euro1o2 euro1\xc3\xb32 euro1u2 euro1\xc3\xba2 expoli4 extra1a2 extra1\xc3\xa12 extra1e2 extra1\xc3\xa92 extra1h extra1i2 extra1\xc3\xad2 extra1o2 extra1\xc3\xb32 extra1u2 extra1\xc3\xba2 1f familia3ri 2fb 2fc 2fd 2ff 2fg 2f1h 2fj 2fk f2l 2fl_ 2fm 2fn fono1a2 fono1\xc3\xa12 fono1e2 fono1\xc3\xa92 fono1h fono1i2 fono1\xc3\xad2 fono1o2 fono1\xc3\xb32 fono1u2 fono1\xc3\xba2 foto1a2 foto1\xc3\xa12 foto1e2 foto1\xc3\xa92 foto1h foto1i2 foto1\xc3\xad2 foto1o2 foto1\xc3\xb32 foto1u2 foto1\xc3\xba2 2fp 2fq f2r 2fr_ 2fs 2ft 4ft_ 2fv 2fw 2fx 2fy 2fz 1g gastro1a2 gastro1\xc3\xa12 gastro1e2 gastro1\xc3\xa92 gastro1h gastro1i2 gastro1\xc3\xad2 gastro1o2 gastro1\xc3\xb32 gastro1u2 gastro1\xc3\xba2 2gb 2gc 2gd geo1a2 geo1\xc3\xa12 geo1e2 geo1\xc3\xa92 geo1h geo1i2 geo1\xc3\xad2 geo1o2 geo1\xc3\xb32 geo1u2 geo1\xc3\xba2 2gf 2gg 2g2h 2gj 2gk g2l 2gl_ gluco1a2 gluco1\xc3\xa12 gluco1e2 gluco1\xc3\xa92 gluco1h gluco1i2 gluco1\xc3\xad2 gluco1o2 gluco1\xc3\xb32 gluco1u2 gluco1\xc3\xba2 2gm 2gn 4gn_ 2gp 2gq g2r 2gr_ 2gs 2gt 2gv 2gw 2gx 2gy 2gz 2hb 2hc 2hd hecto1a2 hecto1\xc3\xa12 hecto1e2 hecto1\xc3\xa92 hecto1h hecto1i2 hecto1\xc3\xad2 hecto1o2 hecto1\xc3\xb32 hecto1u2 hecto1\xc3\xba2 helio1a2 helio1\xc3\xa12 helio1e2 helio1\xc3\xa92 helio1h helio1i2 helio1\xc3\xad2 helio1o2 helio1\xc3\xb32 helio1u2 helio1\xc3\xba2 hemato1a2 hemato1\xc3\xa12 hemato1e2 hemato1\xc3\xa92 hemato1h hemato1i2 hemato1\xc3\xad2 hemato1o2 hemato1\xc3\xb32 hemato1u2 hemato1\xc3\xba2 hemi1a2 hemi1\xc3\xa12 hemi1e2 hemi1\xc3\xa92 hemi1h hemi1i2 hemi1\xc3\xad2 hemi1o2 hemi1\xc3\xb32 hemi1u2 hemi1\xc3\xba2 hemo1a2 hemo1\xc3\xa12 hemo1e2 hemo1\xc3\xa92 hemo1h hemo1i2 hemo1\xc3\xad2 hemo1o2 hemo1\xc3\xb32 hemo1u2 hemo1\xc3\xba2 hexa1a2 hexa1\xc3\xa12 hexa1e2 hexa1\xc3\xa92 hexa1h hexa1i2 hexa1\xc3\xad2 hexa1o2 hexa1\xc3\xb32 hexa1u2 hexa1\xc3\xba2 2hf 2hg 2h1h hidro1a2 hidro1\xc3\xa12 hidro1e2 hidro1\xc3\xa92 hidro1h hidro1i2 hidro1\xc3\xad2 hidro1o2 hidro1\xc3\xb32 hidro1u2 hidro1\xc3\xba2 hipe2r1a2 hipe2r1\xc3\xa12 hipe2r1e2 hipe2r1\xc3\xa92 hipe2r1i2 hipe2r1\xc3\xad2 hipe2r1o2 hipe2r1\xc3\xb32 hipe2r3r hipe2r1u2 hipe2r1\xc3\xba2 histo1a2 histo1\xc3\xa12 histo1e2 histo1\xc3\xa92 histo1h histo1i2 histo1\xc3\xad2 histo1o2 histo1\xc3\xb32 histo1u2 histo1\xc3\xba2 2hj 2hk 2hl 2hm 2hn homo1a2 homo1\xc3\xa12 homo1e2 homo1\xc3\xa92 homo1h homo1i2 homo1\xc3\xad2 homo1o2 homo1\xc3\xb32 homo1u2 homo1\xc3\xba2 2hp 2hq 2hr 2hs 2ht 2hv 2hw 2hx 2hy 2hz 4\xc3\xad_ i2a_ 4\xc3\xada_ 4\xc3\xadais_ 4\xc3\xada3mos_ 4\xc3\xadan_ ia5res_ i2as_ 4\xc3\xadas_ 2i3ca_ 2i3cas_ 2i3co_ icono1a2 icono1\xc3\xa12 icono1e2 icono1\xc3\xa92 icono1h icono1i2 icono1\xc3\xad2 icono1o2 icono1\xc3\xb32 icono1u2 icono1\xc3\xba2 2i3cos_ 4\xc3\xad3da_ 4i2dal_ 4i2dales_ 4\xc3\xad3das_ 4i3deo_ 4i3deos_ 4\xc3\xad3do_ 4\xc3\xad3dos_ 4i4er_ 4i3ga_ 4i3g\xc3\xa1is_ 4i3g\xc3\xa13monos_ 4i3g\xc3\xa13monosla_ 4i3g\xc3\xa13monoslas_ 4i3g\xc3\xa13monosle_ 4i3g\xc3\xa13monosles_ 4i3g\xc3\xa13monoslo_ 4i3g\xc3\xa13monoslos_ 4i3g\xc3\xa13moos_ 4i3g\xc3\xa13moosla_ 4i3g\xc3\xa13mooslas_ 4i3g\xc3\xa13moosle_ 4i3g\xc3\xa13moosles_ 4i3g\xc3\xa13mooslo_ 4i3g\xc3\xa13mooslos_ 4i3gamos_ 4i3g\xc3\xa13mosela_ 4i3g\xc3\xa13moselas_ 4i3g\xc3\xa13mosele_ 4i3g\xc3\xa13moseles_ 4i3g\xc3\xa13moselo_ 4i3g\xc3\xa13moselos_ 4i3g\xc3\xa13mosla_ 4i3g\xc3\xa13moslas_ 4i3g\xc3\xa13mosle_ 4i3g\xc3\xa13mosles_ 4i3g\xc3\xa13moslo_ 4i3g\xc3\xa13moslos_ 4i3g\xc3\xa13mosme_ 4i3g\xc3\xa13mos3mela_ 4i3g\xc3\xa13mos3melas_ 4i3g\xc3\xa13mosmele_ 4i3g\xc3\xa13mosmeles_ 4i3g\xc3\xa13mosmelo_ 4i3g\xc3\xa13mosmelos_ 4i3g\xc3\xa13moste_ 4i3g\xc3\xa13mos3tela_ 4i3g\xc3\xa13mos3telas_ 4i3g\xc3\xa13mostele_ 4i3g\xc3\xa13mosteles_ 4i3g\xc3\xa13mostelo_ 4i3g\xc3\xa13mostelos_ 4i3gas_ 4i3g\xc3\xa1s_ 4i3go_ 4\xc3\xad3mos_ infra1a2 infra1\xc3\xa12 infra1e2 infra1\xc3\xa92 infra1h infra1i2 infra1\xc3\xad2 infra1o2 infra1\xc3\xb32 infra1u2 infra1\xc3\xba2 inter4\xc3\xa9s inter4esar inter4in inter4ino inter4ior intra1a2 intra1\xc3\xa12 intra1e2 intra1\xc3\xa92 intra1h intra1i2 intra1\xc3\xad2 intra1o2 intra1\xc3\xb32 intra1u2 intra1\xc3\xba2 i2o_ i2os_ 4\xc3\xadsmo_ 4\xc3\xadsmos_ iso1a2 iso1\xc3\xa12 iso1e2 iso1\xc3\xa92 iso1h iso1i2 iso1\xc3\xad2 iso1o2 iso1\xc3\xb32 iso1u2 iso1\xc3\xba2 4\xc3\xadsta_ 4\xc3\xadstas_ 4\xc3\xad4s3te_ 4\xc3\xads3teis_ 4\xc3\xad4s3tes_ 4\xc3\xadstica_ 4\xc3\xadsticas_ 4\xc3\xadstico_ 4\xc3\xadsticos_ 4\xc3\xad3tes_ 1j 2jb 2jc 2jd 2jf 2jg 2j1h 2jj 2jk 2jl 2jm 2jn 2jp 2jq 2jr 2js 2jt 2jv 2jw 2jx 2jy 2jz 1k 2kb 2kc 2kd 2kf 2kg 2k2h kilo1a2 kilo1\xc3\xa12 kilo1e2 kilo1\xc3\xa92 kilo1h kilo1i2 kilo1\xc3\xad2 kilo1o2 kilo1\xc3\xb32 kilo1u2 kilo1\xc3\xba2 2kj 2kk k2l 2kl_ 2km 2kn 2kp 2kq k2r 2kr_ 2ks 2kt 2kv 2kw 2kx 2ky 2kz 1l 2lb 2lc 2l3c2n 2l3c2t 2l3c2z 2ld 2lf 2l3f2t 2lg 2l3g2n 2l1h li5\xc3\xa1rea 2lj 2lk l4l 2ll_ 2lm 2l3m2n 2ln 2lp 2l3p2n 2l3p2s 2l3p2t 2lq 2lr 2ls 2lt 2l3t2s 2l3t2z 2lv 2lw 2lx 2ly 2lz 1m macro1a2 macro1\xc3\xa12 macro1e2 macro1\xc3\xa92 macro1h macro1i2 macro1\xc3\xad2 macro1o2 macro1\xc3\xb32 macro1u2 macro1\xc3\xba2 mal2 mal3b mal3c mal3d mal3f mal3g ma4l3h mal3m mal3p mal3q mal3s mal3t mal3v mante4a maxi1a2 maxi1\xc3\xa12 maxi1e2 maxi1\xc3\xa92 maxi1h maxi1i2 maxi1\xc3\xad2 maxi1o2 maxi1\xc3\xb32 maxi1u2 maxi1\xc3\xba2 2mb 2mc 2m3c2n 2m3c2t 2m3c2z 2md 4meable_ 4meables_ mega1a2 mega1\xc3\xa12 mega1e2 mega1\xc3\xa92 mega1h mega1i2 mega1\xc3\xad2 megalo1a2 megalo1\xc3\xa12 megalo1e2 megalo1\xc3\xa92 megalo1h megalo1i2 megalo1\xc3\xad2 megalo1o2 megalo1\xc3\xb32 megalo1u2 megalo1\xc3\xba2 mega1o2 mega1\xc3\xb32 mega1u2 mega1\xc3\xba2 melano1a2 melano1\xc3\xa12 melano1e2 melano1\xc3\xa92 melano1h melano1i2 melano1\xc3\xad2 melano1o2 melano1\xc3\xb32 melano1u2 melano1\xc3\xba2 3mente_ 4meo_ 2mf 2m3f2t 2mg 2m3g2n 2m1h micro1a2 micro1\xc3\xa12 micro1e2 micro1\xc3\xa92 micro1h micro1i2 micro1\xc3\xad2 micro1o2 micro1\xc3\xb32 micro1u2 micro1\xc3\xba2 mili1a2 mili1\xc3\xa12 mili4ar mili4ario mili1e2 mili1\xc3\xa92 mili1h mili1i2 mili1\xc3\xad2 mili1o2 mili1\xc3\xb32 mili1u2 mili1\xc3\xba2 mini1a2 mini1\xc3\xa12 mini4a5tur mini1e2 mini1\xc3\xa92 mini1h mini1i2 mini1\xc3\xad2 mini1o2 mini1\xc3\xb32 mini1u2 mini1\xc3\xba2 miria1a2 miria1\xc3\xa12 miria1e2 miria1\xc3\xa92 miria1h miria1i2 miria1\xc3\xad2 miria1o2 miria1\xc3\xb32 miria1u2 miria1\xc3\xba2 2mj 2mk 2ml 2mm 2m3m2n 2mn 4mn_ mono1a2 mono1\xc3\xa12 mono1e2 mono1\xc3\xa92 mono1h mono1i2 mono1\xc3\xad2 mono1o2 mono1\xc3\xb32 mono1u2 mono1\xc3\xba2 2mp 2m3p2n 2m3p2s 2m3p2t 2mq 2mr 2ms 2mt 2m3t2s 2m3t2z multi1a2 multi1\xc3\xa12 multi1e2 multi1\xc3\xa92 multi1h multi1i2 multi1\xc3\xad2 multi1o2 multi1\xc3\xb32 multi1u2 multi1\xc3\xba2 2mv 2mw 2mx 2my 2mz 1n namo1a2 namo1\xc3\xa12 namo1e2 namo1\xc3\xa92 namo1h namo1i2 namo1\xc3\xad2 namo1o2 namo1\xc3\xb32 namo1u2 namo1\xc3\xba2 2nb 2nc 2n3c2n 2n3c2t 2n3c2z 2nd necro1a2 necro1\xc3\xa12 necro1e2 necro1\xc3\xa92 necro1h necro1i2 necro1\xc3\xad2 necro1o2 necro1\xc3\xb32 necro1u2 necro1\xc3\xba2 neo1a2 neo1\xc3\xa12 neo1e2 neo1\xc3\xa92 neo1h neo1i2 neo1\xc3\xad2 neo1o2 neo1\xc3\xb32 neo1u2 neo1\xc3\xba2 neto1a2 neto1\xc3\xa12 neto1e2 neto1\xc3\xa92 neto1h neto1i2 neto1\xc3\xad2 neto1o2 neto1\xc3\xb32 neto1u2 neto1\xc3\xba2 2nf 2n3f2t 2ng 2n3g2n 2n1h 2nj 2nk 2nl 2nm 2n3m2n 2nn 2no_ norte1a2 norte1\xc3\xa12 norte1e2 norte1\xc3\xa92 norte1h norte1i2 norte1\xc3\xad2 norte1o2 norte1\xc3\xb32 norte1u2 norte1\xc3\xba2 2np 2n3p2n 2n3p2s 2n3p2t 2nq 2nr 2ns 2nt 2n3t2s 2n3t2z 2nv 2nw 2nx 2ny 2nz 1\xc3\xb1 2o_ octa1a2 octa1\xc3\xa12 octa1e2 octa1\xc3\xa92 octa1h octa1i2 octa1\xc3\xad2 octa1o2 octa1\xc3\xb32 octa1u2 octa1\xc3\xba2 octo1a2 octo1\xc3\xa12 octo1e2 octo1\xc3\xa92 octo1h octo1i2 octo1\xc3\xad2 octo1o2 octo1\xc3\xb32 octo1u2 octo1\xc3\xba2 4o2ica_ 4o2icas_ 4o2ico_ 4o2icos_ o4i3dal_ o4i3dales_ 4o2i3de_ o4i3dea_ o4i3deas_ 4o2i3des_ oligo1a2 oligo1\xc3\xa12 oligo1e2 oligo1\xc3\xa92 oligo1h oligo1i2 oligo1\xc3\xad2 oligo1o2 oligo1\xc3\xb32 oligo1u2 oligo1\xc3\xba2 4\xc3\xb33loga_ 4\xc3\xb33logas_ 4o3log\xc3\xada_ 4o3log\xc3\xadas_ 4o3l\xc3\xb3gica_ 4o3l\xc3\xb3gicamente_ 4o3l\xc3\xb3gicas_ 4o3l\xc3\xb3gico_ 4o3l\xc3\xb3gicos_ 4\xc3\xb33logo_ 4\xc3\xb33logos_ omni1a2 omni1\xc3\xa12 omni1e2 omni1\xc3\xa92 omni1h omni1i2 omni1\xc3\xad2 omni1o2 omni1\xc3\xb32 omni1u2 omni1\xc3\xba2 4\xc3\xb3n_ 4ones_ o2os_ 2os_ 2o3sa_ 2o3samente_ 2o3sas_ 2o3so_ 2o3sos_ 4\xc3\xb3steo_ 4\xc3\xb3steos_ 2\xc3\xb3tic 1p paleo1a2 paleo1\xc3\xa12 paleo1e2 paleo1\xc3\xa92 paleo1h paleo1i2 paleo1\xc3\xad2 paleo1o2 paleo1\xc3\xb32 paleo1u2 paleo1\xc3\xba2 para1a2 para1\xc3\xa12 para1e2 para1\xc3\xa92 para1h para1i2 para1\xc3\xad2 para2is_ para4\xc3\xadso para1o2 para1\xc3\xb32 para1u2 para1\xc3\xba2 para4ulata 2pb 2pc 4pc_ 2pd 4pedo4 penta1a2 penta1\xc3\xa12 penta1e2 penta1\xc3\xa92 penta1h penta1i2 penta1\xc3\xad2 penta1o2 penta1\xc3\xb32 penta1u2 penta1\xc3\xba2 pe5r4ante pe3r4e3mia perpon5d6r 2pf 2pg 2p1h piezo1a2 piezo1\xc3\xa12 piezo1e2 piezo1\xc3\xa92 piezo1h piezo1i2 piezo1\xc3\xad2 piezo1o2 piezo1\xc3\xb32 piezo1u2 piezo1\xc3\xba2 2pj 2pk p2l 2pl_ plan4c5t pluri1a2 pluri1\xc3\xa12 pluri1e2 pluri1\xc3\xa92 pluri1h pluri1i2 pluri1\xc3\xad2 pluri1o2 pluri1\xc3\xb32 pluri1u2 pluri1\xc3\xba2 2pm 2pn 4pn_ poi3de_ poi3des_ poli1a2 poli1\xc3\xa12 poli4andr poli4antea poli4arq poli4\xc3\xa1rq poli1e2 poli1\xc3\xa92 poli4\xc3\xa9ste poli1h poli1i2 poli1\xc3\xad2 poli1o2 poli1\xc3\xb32 poli4o5mie poli1u2 poli1\xc3\xba2 poli4u3r pos3ta_ pos3tas_ 2pp 2pq p2r 2pr_ pre3elig pre3elij pre3emin pre3exis preo3cup preo2c\xc3\xbap pre3ol\xc3\xad pre3opin proto1a2 proto1\xc3\xa12 proto1e2 proto1\xc3\xa92 proto1h proto1i2 proto1\xc3\xad2 proto1o2 proto1\xc3\xb32 proto1u2 proto1\xc3\xba2 2ps 3p2sic 3p2siq 2pt 4pt_ 4puta4 4puto4 2pv 2pw 2px 2py 2pz 1q 2qb 2qc 2qd 2qf 2qg 2q1h 2qj 2qk 2ql 2qm 2qn 2qp 2qq 2qr 2qs 2qt 2qv 2qw 2qx 2qy 2qz 1r radio1a2 radio1\xc3\xa12 radio1e2 radio1\xc3\xa92 radio1h radio1i2 radio1\xc3\xad2 radio1o2 radio1\xc3\xb32 radio1u2 radio1\xc3\xba2 ranco1a2 ranco1\xc3\xa12 ranco1e2 ranco1\xc3\xa92 ranco1h ranco1i2 ranco1\xc3\xad2 ranco1o2 ranco1\xc3\xb32 ranco1u2 ranco1\xc3\xba2 2rb 2rc 2r3c2n 2r3c2t 2r3c2z 2rd retro1a2 retro1\xc3\xa12 retro1e2 retro1\xc3\xa92 retro1h retro1i2 retro1\xc3\xad2 retro1o2 retro1\xc3\xb32 retro1u2 retro1\xc3\xba2 2rf 2r3f2t 2rg 2r3g2n 2r1h 2rj 2rk 2rl 2rm rmano1a2 rmano1\xc3\xa12 rmano1e2 rmano1\xc3\xa92 rmano1h rmano1i2 rmano1\xc3\xad2 rmano1o2 rmano1\xc3\xb32 rmano1u2 rmano1\xc3\xba2 2r3m2n 2rn romo1a2 romo1\xc3\xa12 romo1e2 romo1\xc3\xa92 romo1h romo1i2 romo1\xc3\xad2 romo1o2 romo1\xc3\xb32 romo1u2 romo1\xc3\xba2 2rp 2r3p2n 2r3p2s 2r3p2t 2rq r2r 2rr_ 2rs 2rt 2r3t2s 2r3t2z 2rv 2rw 2rx 2ry 2rz 1s 3sa_ san4c5t 3sas_ 2sb 2sc 2s3c2n 2s3c2t 2s3c2z 2sd semi1a2 semi1\xc3\xa12 semi1e2 semi1\xc3\xa92 semi1h semi1i2 semi1\xc3\xad2 semi1o2 semi1\xc3\xb32 semi1u2 semi1\xc3\xba2 seudo1a2 seudo1\xc3\xa12 seudo1e2 seudo1\xc3\xa92 seudo1h seudo1i2 seudo1\xc3\xad2 seudo1o2 seudo1\xc3\xb32 seudo1u2 seudo1\xc3\xba2 2sf 2s3f2t 2sg 2s3g2n 2s1h 2sj 2sk 2sl 2sm 2s3m2n 2sn sobre1a2 sobre1\xc3\xa12 sobre1e2 sobre1\xc3\xa92 sobre1h sobre1i2 sobre1\xc3\xad2 sobre1o2 sobre1\xc3\xb32 sobre1u2 sobre1\xc3\xba2 socio1a2 socio1\xc3\xa12 socio1e2 socio1\xc3\xa92 socio1h socio1i2 socio1\xc3\xad2 socio1o2 socio1\xc3\xb32 socio1u2 socio1\xc3\xba2 2sp 2s3p2n 2s3p2s 2s3p2t 2sq 2sr 2ss 2st s3tal_ s3ta3les_ s3te_ s3tes_ s3ti3lla_ s3ti3llas_ s3ti3ll\xc3\xb3n_ s3ti3llones_ s3tor_ s3tora_ s3toras_ s3tores_ 2s3t2s 2s3t2z su4d3oes sup6ra supe2r1a2 supe2r1\xc3\xa12 super4able super4aci\xc3\xb3n supe4r4a3r supe4r4\xc3\xa13r supe3r4\xc3\xa13vit_ supe3r4\xc3\xa13vits_ supe2r1e2 supe2r1\xc3\xa92 supe2r1i2 supe2r1\xc3\xad2 super4ior supe2r1o2 supe2r1\xc3\xb32 supe2r3r supe2r1u2 supe2r1\xc3\xba2 supra1a2 supra1\xc3\xa12 supra1e2 supra1\xc3\xa92 supra1h supra1i2 supra1\xc3\xad2 supra1o2 supra1\xc3\xb32 supra1u2 supra1\xc3\xba2 2sv 2sw 2sx 2sy 2sz 1t talmo1a2 talmo1\xc3\xa12 talmo1e2 talmo1\xc3\xa92 talmo1h talmo1i2 talmo1\xc3\xad2 talmo1o2 talmo1\xc3\xb32 talmo1u2 talmo1\xc3\xba2 2tb 2tc 2t3c2n 2t3c2t 2t3c2z 2td tele1a2 tele1\xc3\xa12 tele1e2 tele1\xc3\xa92 tele1h tele1i2 tele1\xc3\xad2 tele1o2 tele1\xc3\xb32 tele1u2 tele1\xc3\xba2 t4eo3nes_ 3te3ri3n 4te4r5i4nsu termo1a2 termo1\xc3\xa12 termo1e2 termo1\xc3\xa92 termo1h termo1i2 termo1\xc3\xad2 termo1o2 termo1\xc3\xb32 termo1u2 termo1\xc3\xba2 4teta_ 4tetas_ tetra1a2 tetra1\xc3\xa12 tetra1e2 tetra1\xc3\xa92 tetra1h tetra1i2 tetra1\xc3\xad2 tetra1o2 tetra1\xc3\xb32 tetra1u2 tetra1\xc3\xba2 2tf 2t3f2t 2tg 2t3g2n 2t1h ti2o3co ti2o3qu 2tj 2tk 2t2l 2tm 2t3m2n 2tn topo1a2 topo1\xc3\xa12 topo1e2 topo1\xc3\xa92 topo1h topo1i2 topo1\xc3\xad2 topo1o2 topo1\xc3\xb32 topo1u2 topo1\xc3\xba2 2tp 2t3p2n 2t3p2s 2t3p2t 2tq t2r 2tr_ tran4sacc trans4ar trans4e\xc3\xbante trans4iber trans4ici\xc3\xb3n trans4ido trans4igen trans4igir trans4istor trans4it trans4itab trans4itorio trans4ubsta tropo1a2 tropo1\xc3\xa12 tropo1e2 tropo1\xc3\xa92 tropo1h tropo1i2 tropo1\xc3\xad2 tropo1o2 tropo1\xc3\xb32 tropo1u2 tropo1\xc3\xba2 2ts 4ts_ 2tt 2t3t2s 2t3t2z 2tv 2tw t2x 2ty 2tz 4tz_ ultra1a2 ultra1\xc3\xa12 ultra1e2 ultra1\xc3\xa92 ultra1h ultra1i2 ultra1\xc3\xad2 ultra4\xc3\xadsmo ultra1o2 ultra1\xc3\xb32 ultra1u2 ultra1\xc3\xba2 u4teri 1v 2vb 2vc 2vd 2vf 2vg 2v1h 2vj 2vk v2l 2vl_ 2vm 2vn 2vp 2vq v2r 2vr_ 2vs 2vt 2vv 2vw 2vx 2vy 2vz 1w wa3s4h 2wb 2wc 2wd 2wf 2wg 2w1h 2wj 2wk w2l 2wl_ 2wm 2wn 2wp 2wq w2r 2wr_ 2ws 2wt 2wv 2ww 2wx 2wy 2wz 1x 2xb 2xc 2x3c2n 2x3c2t 2x3c2z 2xd xeno1a2 xeno1\xc3\xa12 xeno1e2 xeno1\xc3\xa92 xeno1h xeno1i2 xeno1\xc3\xad2 xeno1o2 xeno1\xc3\xb32 xeno1u2 xeno1\xc3\xba2 2xf 2x3f2t 2xg 2x3g2n 2x1h 2xj 2xk 2xl 2xm 2x3m2n 2xn 2xp 2x3p2n 2x3p2s 2x3p2t 2xq 2xr 2xs 2xt 2x3t2s 2x3t2z 2xv 2xw 2xx 2xy 2xz 1y 2yb 2yc 2y3c2n 2y3c2t 2y3c2z 2yd 2yf 2y3f2t 2yg 2y3g2n 2y1h 2yj 2yk 2yl 2ym 2y3m2n 2yn 2yp 2y3p2n 2y3p2s 2y3p2t 2yq 2yr 2ys 2yt 2y3t2s 2y3t2z 2yv 2yw 2yx 2yy 2yz 1z 2zb 2zc 2zd 2zf 2zg 2z1h 2zj 2zk 2zl 2zm 2zn 2zp 2zq 2zr 2zs 2zt 2zv 2zw 2zx 2zy 2zz"; + +?> \ No newline at end of file diff --git a/include/mpdf/patterns/fi.php b/include/mpdf/patterns/fi.php new file mode 100755 index 0000000000000000000000000000000000000000..2cf77af7fa2f89d3bc56e0a6f1552b57769f94ac --- /dev/null +++ b/include/mpdf/patterns/fi.php @@ -0,0 +1,9 @@ +<?php +/* + Adapted from Hyphenator 1.0.2 + http://code.google.com/p/hyphenator/ +*/ + +$patterns="1ba 1be 1bi 1bo 1bu 1by 1da 1de 1di 1do 1du 1dy 1d\xc3\xa4 1d\xc3\xb6 1fa 1fe 1fi 1fo 1fu 1fy 1ga 1ge 1gi 1go 1gu 1gy 1g\xc3\xa4 1g\xc3\xb6 1ha 1he 1hi 1ho 1hu 1hy 1h\xc3\xa4 1h\xc3\xb6 1ja 1je 1ji 1jo 1ju 1jy 1j\xc3\xa4 1j\xc3\xb6 1ka 1ke 1ki 1ko 1ku 1ky 1k\xc3\xa4 1k\xc3\xb6 1la 1le 1li 1lo 1lu 1ly 1l\xc3\xa4 1l\xc3\xb6 1ma 1me 1mi 1mo 1mu 1my 1m\xc3\xa4 1m\xc3\xb6 1na 1ne 1ni 1no 1nu 1ny 1n\xc3\xa4 1n\xc3\xb6 1pa 1pe 1pi 1po 1pu 1py 1p\xc3\xa4 1p\xc3\xb6 1ra 1re 1ri 1ro 1ru 1ry 1r\xc3\xa4 1r\xc3\xb6 1sa 1se 1si 1so 1su 1sy 1s\xc3\xa4 1s\xc3\xb6 1ta 1te 1ti 1to 1tu 1ty 1t\xc3\xa4 1t\xc3\xb6 1va 1ve 1vi 1vo 1vu 1vy 1v\xc3\xa4 1v\xc3\xb6 1st2r \xc3\xa42y y1a2 y1o2 o1y \xc3\xb62y u1y2 y1u2 \xc3\xb63a2 \xc3\xb63o2 \xc3\xa43a2 \xc3\xa43o2 \xc3\xa41u2 \xc3\xb61u2 a1\xc3\xa4 a1\xc3\xb6 o1\xc3\xa4 o1\xc3\xb6 u1\xc3\xa42 u1\xc3\xb62 \xc3\xa42\xc3\xa4 \xc3\xb62\xc3\xb6 \xc3\xa42\xc3\xb6 \xc3\xb62\xc3\xa4 aa1i2 aa1e2 aa1o2 aa1u2 ee1a2 ee1i2 ee1u2 ee1y2 ii1a2 ii1e2 ii1o2 uu1a2 uu1e2 uu1o2 uu1i2 e1aa i1aa o1aa u1aa u1ee a1uu i1uu e1uu o1uu \xc3\xa4\xc3\xa41i \xc3\xa4\xc3\xa41e \xc3\xa4\xc3\xa43y i1\xc3\xa4\xc3\xa4 e1\xc3\xa4\xc3\xa4 y1\xc3\xa4\xc3\xa4 i1\xc3\xb6\xc3\xb6 a1ei a1oi e1ai i1au y1ei ai1a ai1e ai1o ai1u au1a au1e eu1a ie1a ie1o ie1y io1a2 io1e2 iu1a iu1e iu1o oi1a oi1e oi1o oi1u o1ui ou1e ou1o ue1a ui1e uo1a uo1u e1\xc3\xb62 \xc3\xb61e2 _\xc3\xa42 u2s yli1o2p ali1a2v 1sp2li alous1 keus1 rtaus1 2s1ohje 2s1a2sia 1a2sian 1a2siat 1a2sioi r2as l2as 2s1o2pisk 2n1o2pet 2s1a2loi 2n1o2pist 2s1o2pist 2s1o2sa 2n1o2sa alkei2s1 perus1 2s1i2dea_ 2s1i2dean 2s1e2sity 2n1e2dus 2s1ajatu 2s1ase 2s1apu 2s1y2rit _ydi2n1 _suu2r1a2 2s1y2hti 2n1otto 2n1oton 2n1anto 2n1anno 2n1a2jan 2n1aika 2n1o2mai 2n1y2lit 2s1a2len 2n1a2len 1a2siaka2s1 ulo2s1 2n1a2jo 2s1a2jo b2l 1b2lo bib3li b2r 1b2ri 1b2ro 1b2ru d2r 1d2ra f2l 1f2la f2r 1f2ra 1f2re g2l 1g2lo g2r 1g2ra k2l 1k2ra 1k2re 1k2ri 1k2v 1k2va p2l p2r 1p2ro c2l q2v 1q2vi sc2h ts2h ch2r"; + +?> \ No newline at end of file diff --git a/include/mpdf/patterns/fr.php b/include/mpdf/patterns/fr.php new file mode 100755 index 0000000000000000000000000000000000000000..2e0fe4ec217659d8e2d5729cc670c210e92f1d36 --- /dev/null +++ b/include/mpdf/patterns/fr.php @@ -0,0 +1,12 @@ +<?php +/* + Adapted from Hyphenator 1.0.2 + http://code.google.com/p/hyphenator/ + + Retrieved from http://extensions.services.openoffice.org/project/french-dictionary-reform1990 + License: LGPL +*/ + +$patterns="'a1b2r 'a1g2n 'a1mi 'a1na 'a1po 'a2g3nat 'a4 'ab1r\xc3\xa9 'ab3r\xc3\xa9a 'ae3s4c2h 'ag1na 'ami1no 'amino1a2c 'an1ti 'ana3s4t2r 'anti1a2 'anti1e2 'anti1s2 'anti1\xc3\xa92 'anti2en1ne 'apo2s3ta 'ar1ge 'ar1pe 'ar3gent_ 'ar3pent_ 'as2ta 'e1n1a2 'e1n1o2 'e4 'eu2r1a2 'i1g2n 'i1n1a2 'i1n1e2 'i1n1i2 'i1n1o2 'i1n1u2 'i1n1\xc3\xa92 'i2g3ni 'i2g3n\xc3\xa9 'i2g4no 'i4 'in1s2tab 'in1te 'in2a3nit 'in2augur 'in2effab 'in2ept 'in2er 'in2exo1ra 'in2i3mi1ti 'in2i3q 'in2i3t 'in2o3cul 'in2ond 'in2u3l 'in2uit 'in2\xc3\xa93luc1ta 'in2\xc3\xa93nar1ra 'ina1ni 'inau1gu 'inef1fa 'ini1mi 'ino1cu 'ins1ta 'inte1ra2 'inte1re2 'inte1ri2 'inte1ro2 'inte1ru2 'inte1r\xc3\xa92 'inte4r3 'inters2 'in\xc3\xa91lu 'in\xc3\xa91na 'o1vi 'o4 'on1gu 'on3guent_ 'oua1ou 'ovi1s2c 'u4 'y4 '\xc3\xa24 '\xc3\xa84 '\xc3\xa94 '\xc3\xaa4 '\xc3\xae4 '\xc3\xb44 '\xc3\xbb4 _1ba _1bi _1c2h4 _1ci _1co _1cu _1da _1di _1do _1dy _1d\xc3\xa9 _1d\xc3\xa93s2o3d\xc3\xa9 _1ge _1k2h4 _1la _1ma _1mi _1mo _1m\xc3\xa9 _1no _1p2h4 _1p2l _1p2r _1p2sy1c2h _1pa _1pe _1po _1pu _1p\xc3\xa9 _1re _1r\xc3\xa9 _1s2c2h4 _1s2h4 _1sa _1se _1so _1su _1sy _1t2h4 _1t2r _1ta _a1b2r _a1g2n _a1mi _a1na _a1po _a2g3nat _a4 _ab1r\xc3\xa9 _ab3r\xc3\xa9a _ae3s4c2h _ag1na _ami1no _amino1a2c _an1ti _ana3s4t2r _anti1a2 _anti1e2 _anti1s2 _anti1\xc3\xa92 _anti2en1ne _apo2s3ta _ar1de _ar1ge _ar1pe _ar3dent_ _ar3gent_ _ar3pent_ _as2ta _bai1se _bai2se3main _baise1ma _bi1a2c _bi1a2t _bi1au _bi1u2 _bi2s1a2 _bio1a2 _c2h\xc3\xa8 _ch\xc3\xa81v2r _ch\xc3\xa82vre3feuil1le _ch\xc3\xa8v1re _ch\xc3\xa8vre1fe _ch\xc3\xa8vrefeuil2l _ci1sa _ci2s1alp _co1o2 _co2o3lie _com1me _com3ment_ _con1t2r _con4 _cons4 _cont1re _cont1re3ma\xc3\xaet1re _contre1ma _contre1s2c _contrema\xc3\xae1t2r _coo1li _cul4 _da1c2r _dac1ry _dacryo1a2 _di1a2cid _di1a2c\xc3\xa9 _di1a2mi _di1a2tom _di1ald _di1e2n _di2s3h _dia1ci _dia1to _do1le _do3lent_ _dy2s1a2 _dy2s1i2 _dy2s1o2 _dy2s1u2 _dy2s3 _d\xc3\xa91a2 _d\xc3\xa91io _d\xc3\xa91o2 _d\xc3\xa91sa _d\xc3\xa91se _d\xc3\xa91so _d\xc3\xa91su _d\xc3\xa92s _d\xc3\xa92s1i2 _d\xc3\xa92s1u2n _d\xc3\xa92s1\xc2\xbd _d\xc3\xa92s1\xc3\xa92 _d\xc3\xa93s2a3c2r _d\xc3\xa93s2a3tell _d\xc3\xa93s2as1t2r _d\xc3\xa93s2c _d\xc3\xa93s2ensib _d\xc3\xa93s2ert _d\xc3\xa93s2exu _d\xc3\xa93s2i3d _d\xc3\xa93s2i3g2n _d\xc3\xa93s2i3li _d\xc3\xa93s2i3nen _d\xc3\xa93s2i3r _d\xc3\xa93s2in1vo _d\xc3\xa93s2ist _d\xc3\xa93s2o3l _d\xc3\xa93s2o3pil _d\xc3\xa93s2orm _d\xc3\xa93s2orp _d\xc3\xa93s2ou1f2r _d\xc3\xa93s2p _d\xc3\xa93s2t _d\xc3\xa93s2\xc3\xa93g2r _d\xc3\xa9s2a3m _d\xc3\xa9sa1te _d\xc3\xa9sen1si _d\xc3\xa9si1ne _d\xc3\xa9so1pi _e1n1a2 _e1n1o2 _e4 _eu2r1a2 _gem1me _gem2ment_ _i1g2n _i1n1a2 _i1n1e2 _i1n1i2 _i1n1o2 _i1n1u2 _i1n1\xc3\xa92 _i2g3ni _i2g3n\xc3\xa9 _i2g4no _i4 _in1s2tab _in1te _in2a3nit _in2augur _in2effab _in2ept _in2er _in2exo1ra _in2i3mi1ti _in2i3q _in2i3t _in2o3cul _in2ond _in2u3l _in2uit _in2\xc3\xa93luc1ta _in2\xc3\xa93nar1ra _ina1ni _inau1gu _inef1fa _ini1mi _ino1cu _ins1ta _inte1ra2 _inte1re2 _inte1ri2 _inte1ro2 _inte1ru2 _inte1r\xc3\xa92 _inte4r3 _inters2 _in\xc3\xa91lu _in\xc3\xa91na _la1te _la3tent_ _ma1c2r _ma1g2n _ma1la _ma1le _ma1li _ma1lo _ma2c3k _ma2g3nici1de _ma2g3nificat _ma2g3num _ma2l1a2d1ro _ma2l1a2dres _ma2l1a2v _ma2l1ai1s\xc3\xa9 _ma2l1ap _ma2l1en _ma2l1int _ma2l1o2d _ma2l1oc _ma2r1x _mac1ro _macro1s2c _mag1ni _mag1nu _magni1ci _magni1fi _magnifi1ca _mala1d2r _malad1re _mil1li _mil3l _milli1am _mo1no _mono1a2 _mono1e2 _mono1i2 _mono1o2 _mono1s2 _mono1u2 _mono1\xc3\xa92 _mono1\xc3\xaf2d\xc3\xa9 _m\xc3\xa91go _m\xc3\xa91se _m\xc3\xa91su _m\xc3\xa91ta _m\xc3\xa91ta1s2ta _m\xc3\xa92g1oh _m\xc3\xa92s1es _m\xc3\xa92s1i _m\xc3\xa92s1u2s _m\xc3\xa92sa _m\xc3\xa93san _no1no _no2n1obs _o1vi _o4 _on1gu _on3guent_ _oua1ou _ovi1s2c _p1ha _p1lu _p1ro _p1r\xc3\xa9 _p1sy _pa1na _pa1ni _pa1no _pa1r2h _pa1ra _pa1re _pa1te _pa2n1a2f _pa2n1a2m\xc3\xa9 _pa2n1a2ra _pa2n1is _pa2n1o2p2h _pa2n1opt _pa2r1a2c2he _pa2r1a2c2h\xc3\xa8 _pa2r3h\xc3\xa9 _pa3rent_ _pa3tent_ _para1c2h _para1s2 _pe1r1a2 _pe1r1e2 _pe1r1i2 _pe1r1o2 _pe1r1u2 _pe1r1\xc3\xa92 _pe4r _pen2ta _pha1la _phalan3s2t _plu1ri _pluri1a _pon1te _pon2tet _pos1ti _pos2t1in _pos2t1o2 _pos2t3h _pos2t3r _post1s2 _pro1g2n _pro1s2c\xc3\xa9 _pro1\xc3\xa92 _pro2g3na1t2h _prog1na _prou3d2h _pr\xc3\xa91a2 _pr\xc3\xa91e2 _pr\xc3\xa91i2 _pr\xc3\xa91o2 _pr\xc3\xa91s2 _pr\xc3\xa91u2 _pr\xc3\xa91\xc3\xa92 _pr\xc3\xa92a3la _pr\xc3\xa92au _psyc2ho _psycho1a2n _pud1d2l _p\xc3\xa91ri _p\xc3\xa9ri1os _p\xc3\xa9ri1s2 _p\xc3\xa9ri1u2 _p\xc3\xa9ri2s3s _p\xc3\xa9ri2s3ta _re1s2 _re2s3c1ri _re2s3cap _re2s3ci1si _re2s3ci1so _re2s3cou _re2s3pect _re2s3pir _re2s3plend _re2s3pons _re2s3quil _re2s3s _re2s3t _re3s4t2r _re3s4tab _re3s4tag _re3s4tand _re3s4tat _re3s4tim _re3s4tip _re3s4toc _re3s4top _re3s4tu _re3s4ty _re3s4t\xc3\xa9n _re3s4t\xc3\xa9r _re4s5trein _re4s5trict _re4s5trin _res1c2r _res1ca _res1ci _res1co _res1p2l _res1pe _res1pi _res1po _res1q _res1se _res1ta _res1ti _res1to _res1t\xc3\xa9 _res3sent_ _resp1le _rest1re _rest1ri _r\xc3\xa91a2 _r\xc3\xa91e2 _r\xc3\xa91i2 _r\xc3\xa91o2 _r\xc3\xa91t2r _r\xc3\xa91\xc3\xa92 _r\xc3\xa92a3le _r\xc3\xa92a3lis _r\xc3\xa92a3lit _r\xc3\xa92aux _r\xc3\xa92el _r\xc3\xa92er _r\xc3\xa92i3fi _r\xc3\xa92uss _r\xc3\xa92\xc3\xa8r _r\xc3\xa9a1li _r\xc3\xa9t1ro _r\xc3\xa9tro1a2 _r\xc3\xa9u2 _s1ta _s1ti _sar1me _sar3ment_ _ser1me _ser3ment_ _seu2le _sou1ve _sou3vent_ _sta2g3n _stil3l _su1b2l _su1bi _su1bu _su1ri _su1ro _su2b1a2 _su2b1in _su2b1ur _su2b1\xc3\xa92 _su2b3limin _su2b3lin _su2b3lu _su2r1a2 _su2r1e2 _su2r1i2m _su2r1inf _su2r1int _su2r1of _su2r1ox _su2r1\xc3\xa92 _su2r3h _su3b2alt _su3b2\xc3\xa93r _su3r2a3t _su3r2eau _su3r2ell _su3r2et _sub1li _subli1mi _syn1g2n _syn2g3na1t2h _syng1na _t1ri _ta1le _ta3lent_ _tri1a2c _tri1a2n _tri1a2t _tri1o2n _u4 _y4 _\xc3\xa24 _\xc3\xa84 _\xc3\xa91mi _\xc3\xa94 _\xc3\xa9mi1ne _\xc3\xa9mi3nent_ _\xc3\xaa4 _\xc3\xae4 _\xc3\xb44 _\xc3\xbb4 1a2nesth\xc3\xa91si 1alcool 1b2l 1b2r 1ba 1be 1bi 1bo 1bu 1by 1b\xc3\xa2 1b\xc3\xa8 1b\xc3\xa9 1b\xc3\xaa 1b\xc3\xae 1b\xc3\xb4 1b\xc3\xbb 1c2h 1c2k 1c2l 1c2r 1ca 1ce 1ci 1co 1cu 1cy 1c\xc2\xbd0 1c\xc3\xa2 1c\xc3\xa8 1c\xc3\xa9 1c\xc3\xaa 1c\xc3\xae 1c\xc3\xb4 1c\xc3\xbb 1d2'2 1d2r 1da 1de 1di 1do 1du 1dy 1d\xc3\xa2 1d\xc3\xa8 1d\xc3\xa9 1d\xc3\xaa 1d\xc3\xae 1d\xc3\xb4 1d\xc3\xbb 1f2l 1f2r 1fa 1fe 1fi 1fo 1fu 1fy 1f\xc3\xa2 1f\xc3\xa8 1f\xc3\xa9 1f\xc3\xaa 1f\xc3\xae 1f\xc3\xb4 1f\xc3\xbb 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1g2l 1g2n 1g2r 1ga 1ge 1gi 1go 1gu 1gy 1g\xc3\xa2 1g\xc3\xa8 1g\xc3\xa9 1g\xc3\xaa 1g\xc3\xae 1g\xc3\xb4 1g\xc3\xbb 1ha 1he 1hi 1ho 1hu 1hy 1h\xc3\xa2 1h\xc3\xa8 1h\xc3\xa9 1h\xc3\xaa 1h\xc3\xae 1h\xc3\xb4 1h\xc3\xbb 1informat 1j 1k2h 1k2r 1ka 1ke 1ki 1ko 1ku 1ky 1k\xc3\xa2 1k\xc3\xa8 1k\xc3\xa9 1k\xc3\xaa 1k\xc3\xae 1k\xc3\xb4 1k\xc3\xbb 1la 1le 1li 1lo 1lu 1ly 1l\xc3\xa0 1l\xc3\xa2 1l\xc3\xa8 1l\xc3\xa9 1l\xc3\xaa 1l\xc3\xae 1l\xc3\xb4 1l\xc3\xbb 1m2n\xc3\xa8s 1m2n\xc3\xa91mo 1m2n\xc3\xa91si 1ma 1me 1mi 1mo 1mu 1my 1m\xc2\xbd0 1m\xc3\xa2 1m\xc3\xa8 1m\xc3\xa9 1m\xc3\xaa 1m\xc3\xae 1m\xc3\xb4 1m\xc3\xbb 1na 1ne 1ni 1no 1nu 1ny 1n\xc2\xbd0 1n\xc3\xa2 1n\xc3\xa8 1n\xc3\xa9 1n\xc3\xaa 1n\xc3\xae 1n\xc3\xb4 1n\xc3\xbb 1octet 1p2h 1p2l 1p2neu 1p2n\xc3\xa9 1p2r 1p2sy1c2h 1p2t\xc3\xa8r 1p2t\xc3\xa9r 1pa 1pe 1pi 1po 1pu 1py 1p\xc3\xa2 1p\xc3\xa8 1p\xc3\xa9 1p\xc3\xaa 1p\xc3\xae 1p\xc3\xb4 1p\xc3\xbb 1q 1r2h 1ra 1re 1ri 1ro 1ru 1ry 1r\xc3\xa2 1r\xc3\xa8 1r\xc3\xa9 1r\xc3\xaa 1r\xc3\xae 1r\xc3\xb4 1r\xc3\xbb 1s2c2h 1s2ca1p2h 1s2cl\xc3\xa9r 1s2cop 1s2h 1s2lav 1s2lov 1s2patia 1s2perm 1s2ph\xc3\xa8r 1s2ph\xc3\xa9r 1s2piel 1s2piros 1s2por 1s2tandard 1s2tein 1s2tigm 1s2to1c2k 1s2tomos 1s2tro1p2h 1s2truc1tu 1s2ty1le 1sa 1se 1si 1so 1su 1sy 1s\xc2\xbd0 1s\xc3\xa2 1s\xc3\xa8 1s\xc3\xa9 1s\xc3\xaa 1s\xc3\xae 1s\xc3\xb4 1s\xc3\xbb 1t2h 1t2r 1ta 1te 1ti 1to 1tu 1ty 1t\xc3\xa0 1t\xc3\xa2 1t\xc3\xa8 1t\xc3\xa9 1t\xc3\xaa 1t\xc3\xae 1t\xc3\xb4 1t\xc3\xbb 1v2r 1va 1ve 1vi 1vo 1vu 1vy 1v\xc3\xa2 1v\xc3\xa8 1v\xc3\xa9 1v\xc3\xaa 1v\xc3\xae 1v\xc3\xb4 1v\xc3\xbb 1w2r 1wa 1we 1wi 1wo 1wu 1za 1ze 1zi 1zo 1zu 1zy 1z\xc3\xa8 1z\xc3\xa9 1\xc3\xa7 1\xc3\xa92drie 1\xc3\xa92drique 1\xc3\xa92lec1t2r 1\xc3\xa92l\xc3\xa9ment 1\xc3\xa92nerg 2'2 2b2lent_ 2b2rent_ 2bent_ 2c1k3h 2c2kent_ 2c2lent_ 2c2rent_ 2cent_ 2chb 2chent_ 2chg 2chm 2chn 2chp 2chs 2cht 2chw 2ckb 2ckf 2ckg 2ckp 2cks 2ckt 2d2lent_ 2d2rent_ 2dent_ 2f2lent_ 2f2rent_ 2fent_ 2g2lent_ 2g2nent_ 2g2rent_ 2gent_ 2guent_ 2jent_ 2jk 2kent_ 2lent_ 2nent_ 2p2lent_ 2p2rent_ 2pent_ 2phent_ 2phn 2phs 2pht 2quent_ 2r3heur 2r3hy1d2r 2rent_ 2s2chs 2s3hom 2sent_ 2shent_ 2shm 2shr 2shs 2t2rent_ 2t3heur 2tent_ 2thl 2thm 2thn 2ths 2v2rent_ 2vent_ 2went_ 2xent_ 2zent_ 3d2hal 3d2houd 3ph2ta1l\xc3\xa9 3ph2tis 4b4le_ 4b4les_ 4b4re_ 4b4res_ 4be_ 4bes_ 4c4he_ 4c4hes_ 4c4ke_ 4c4kes_ 4c4le_ 4c4les_ 4c4re_ 4c4res_ 4ce_ 4ces_ 4ch_ 4ch4le_ 4ch4les_ 4ch4re_ 4ch4res_ 4ck_ 4d4re_ 4d4res_ 4de_ 4des_ 4f4le_ 4f4les_ 4f4re_ 4f4res_ 4fe_ 4fes_ 4g4le_ 4g4les_ 4g4ne_ 4g4nes_ 4g4re_ 4g4res_ 4ge_ 4ges_ 4gue_ 4gues_ 4he_ 4hes_ 4je_ 4jes_ 4ke_ 4kes_ 4kh_ 4le_ 4les_ 4me_ 4mes_ 4ne_ 4nes_ 4p4he_ 4p4hes_ 4p4le_ 4p4les_ 4p4re_ 4p4res_ 4pe_ 4pes_ 4ph_ 4ph4le_ 4ph4les_ 4ph4re_ 4ph4res_ 4que_ 4ques_ 4r4he_ 4r4hes_ 4re_ 4res_ 4s4c4he_ 4s4c4hes_ 4s4ch_ 4s4he_ 4s4hes_ 4se_ 4ses_ 4sh_ 4t4he_ 4t4hes_ 4t4re_ 4t4res_ 4te_ 4tes_ 4th_ 4th4re_ 4th4res_ 4v4re_ 4v4res_ 4ve_ 4ves_ 4we_ 4wes_ 4ze_ 4zes_ a1b\xc3\xae a1la a1ma a1ne a1ni a1po a1vi a1\xc3\xa82d1re a2l1al1gi a2s3t1ro ab1se ab2h ab3sent_ abs1ti absti1ne absti3nent_ ab\xc3\xae1me ab\xc3\xae2ment_ ac1ce ac1q ac3cent_ acquies1ce acquies4cent_ ad2h ai1me ai2ment_ al1co amal1ga amalga1me amalga2ment_ an1ti anes1t2h anest1h\xc3\xa9 ani1me ani2ment_ anti1fe antifer1me antifer3ment_ ap1pa apo2s3t2r appa1re appa3rent_ ar1c ar1c2h ar1me ar1mi ar2ment_ arc2hi archi1\xc3\xa92pis archi\xc3\xa91pi armil5l as1me as1t2r as2ment_ au1me au2ment_ avil4l a\xc3\xa81d2r b1le b1re b1ru bou1me bou1ti bou2ment_ boutil3l bru1me bru2ment_ c1ci c1ke c1la c1le c1re c2ha c2he c2hi c2ho c2hu c2hy c2h\xc3\xa2 c2h\xc3\xa8 c2h\xc3\xa9 c2h\xc3\xaa c2h\xc3\xae c2h\xc3\xb4 c2h\xc3\xbb ca1pi ca1r\xc3\xaa ca3ou3t2 capil3l car\xc3\xaa1me car\xc3\xaa2ment_ cci1de cci3dent_ ch1le ch1lo ch1re ch1ro ch2l ch2r che1vi chevil4l chien1de chien3dent_ chlo1ra chlo1r\xc3\xa9 chlo2r3a2c chlo2r3\xc3\xa92t chro1me chro2ment_ cil3l cla1me cla2ment_ co1a2d co1ac1q co1acc co1ap co1ar co1assoc co1assur co1au co1ax co1ef co1en co1ex co1g2n co1nu co1\xc3\xa92 co2g3ni1ti co2nurb coas1so coas1su cog1ni com1p\xc3\xa9 comp\xc3\xa91te comp\xc3\xa93tent_ con1fi con1ni con1ti confi1de confi3dent_ conni1ve conni3vent_ conti1ne conti3nent_ contin1ge contin3gent_ cor1pu corpu1le corpu3lent_ cur1re cur3rent_ cy1ri cyril3l d1d2h d1ha d1ho d1le d1re d1s2 da1me da2ment_ di1li di2s3cop dia1p2h diaph1ra diaph2r diaphrag1me diaphrag2ment_ dili1ge dili3gent_ dis1co dis1si dis1ti dissi1de dissi3dent_ distil3l d\xc3\xa91ca d\xc3\xa91t2r d\xc3\xa9ca1de d\xc3\xa9ca3dent_ d\xc3\xa9t1ri d\xc3\xa9tri1me d\xc3\xa9tri3ment_ e1ni e2n1i2v2r e2s3c2h e2s3cop en1t2r ent1re entre1ge entre3gent_ er1me er2ment_ es1ce es1co es1ti es3cent_ esti1me esti2ment_ eu1s2tat eus1ta ex1t2r ext1ra1 extra2c extra2i f1la f1le f1re f1ri f1s2 fa1me fa2ment_ fi1c2h fic2hu fichu1me fichu3ment_ fir1me fir2ment_ flam1me flam2ment_ fri1ti fritil3l fu1me fu2ment_ f\xc3\xa91cu f\xc3\xa9cu1le f\xc3\xa9cu3lent_ g1le g1ne g1ra g1re g1s2 gil3l gram1me gram2ment_ gran1di grandi1lo grandilo1q grandilo3quent_ hil3l hu1me hu2ment_ hy1pe hy1po hype1ra2 hype1re2 hype1ri2 hype1ro2 hype1ru2 hype1r\xc3\xa92 hype4r1 hypers2 hypo1a2 hypo1e2 hypo1i2 hypo1o2 hypo1s2 hypo1u2 hypo1\xc3\xa92 h\xc3\xa91mi h\xc3\xa91mo h\xc3\xa9mi1\xc3\xa9 h\xc3\xa9mo1p2t i1al1gi i1arth2r i1b2r i1oxy i1s2c2h i1s2tat i1va i1\xc3\xa82d1re i2s3c2h\xc3\xa9 i2s3chia i2s3chio iar1t2h ib1ri ibril3l il2l im1ma im1mi im1po im1pu imma1ne imma3nent_ immi1ne immi3nent_ immis1ce immis4cent_ impo1te impo3tent_ impu1de impu3dent_ in1ci in1di in1do in1du in1fo in1no in1so in1te in1ti inci1de inci3dent_ indi1ge indi3gent_ indo1le indo3lent_ indul1ge indul3gent_ infor1ma inno1ce inno3cent_ ins1ti inso1le inso3lent_ instil3l intel1li intelli1ge intelli3gent_ inti1me inti2ment_ io1a2ct is1ce is1ta is3cent_ isc2hi iva1le iva3lent_ i\xc3\xa81d2r ja1ce ja3cent_ l1li l1lu l1me l1s2t l2ment_ l3lion la1w2r la2w3re lil3l llu1me llu2ment_ m1n\xc3\xa8 m1n\xc3\xa9 m1s2 mi1me mi2ment_ mil1le mil3l mil4let mit1te mit3tent_ mo1no mon1t2r mon2t3r\xc3\xa9al mono1va monova1le monova3lent_ mont1r\xc3\xa9 moye1n\xc3\xa2 moye2n1\xc3\xa22g mu1ni muni1fi munifi1ce munifi3cent_ m\xc3\xa91co m\xc3\xa9con1te m\xc3\xa9con3tent_ n1sa n1x n3s2at_ n3s2ats_ nu1t2r nut1ri nutri1me nutri3ment_ o1b2l o1d2l o1g2n o1io1ni o1pu o1s2tas o1s2tat o1s2tim o1s2tom o1s2tra1tu o1s2trad o1s2triction o1s2t\xc3\xa91ro o1\xc3\xa82d1re o2b3long o2g3no1si o2g3nomo1ni ob1lo oc1te og1no ogno1mo om1bu om1me om1ni om2ment_ ombud2s3 omni1po omni1s2 omnipo1te omnipo3tent_ opu1le opu3lent_ or1me or2ment_ os1t2r os1ta os1ti os1to os1t\xc3\xa9 ost1ra ost1ri ostric1ti oxy1a2 o\xc3\xa81d2r p1he p1ho p1le p1lu p1ne p1re p1ri p1ro p1ru p1r\xc3\xa9 p1sy p1t\xc3\xa8 p1t\xc3\xa9 pa1l\xc3\xa9 pa1pi pal\xc3\xa9o1\xc3\xa92 papil1lo papil2l papil3la papil3le papil3li papil3lom pe1r3h per1ma per1ti perma1ne perma3nent_ perti1ne perti3nent_ ph1le ph1re ph1ta ph1ti ph2l ph2r pho1to photo1s2 pi1ri piril3l plu1me plu2ment_ po1ast1re po1ly poas1t2r poly1a2 poly1e2 poly1i2 poly1o2 poly1s2 poly1u2 poly1va poly1\xc3\xa82 poly1\xc3\xa92 polyva1le polyva3lent_ pri1va privat1do privatdo1ce privatdo1ze privatdo3cent_ privatdo3zent_ pro2s3tat pros1ta pro\xc3\xa91mi pro\xc3\xa9mi1ne pro\xc3\xa9mi3nent_ pru1de pru3dent_ pr\xc3\xa91se pr\xc3\xa93sent_ pr\xc3\xa9\xc3\xa91mi pr\xc3\xa9\xc3\xa9mi1ne pr\xc3\xa9\xc3\xa9mi3nent_ pu1g2n pu1pi pu1si pu2g3nab1le pu2g3nac pug1na pugna1b2l pupil3l pusil3l p\xc3\xa91nu p\xc3\xa91r2\xc3\xa92q p\xc3\xa91r\xc3\xa9 p\xc3\xa92nul qua1me qua2ment_ r1ci r1he r1hy r1mi ra1di ra1me ra2ment_ radio1a2 rai1me rai3ment_ rcil4l re1le re1li re1pe re3lent_ re3pent_ reli1me reli2ment_ ri1me ri2ment_ rin1ge rin3gent_ rmil4l ru1le ru3lent_ ry1t2h ry2thm ryth1me ryth2ment_ r\xc3\xa91ge r\xc3\xa91ma r\xc3\xa91su r\xc3\xa91ti r\xc3\xa93gent_ r\xc3\xa9ma1ne r\xc3\xa9ma3nent_ r\xc3\xa9sur1ge r\xc3\xa9sur3gent_ r\xc3\xa9ti1ce r\xc3\xa9ti3cent_ s1c2l s1ca s1co s1he s1ho s1la s1lo s1p2h s1pa s1pe s1pi s1po s1t2r s1ta s1te s1ti s1to s1ty s1t\xc3\xa9 sc1l\xc3\xa9 sc2he se1mi semil4l ser1ge ser1pe ser3gent_ ser3pent_ ses1q sesqui1a2 sla1lo slalo1me slalo2ment_ sp1h\xc3\xa8 sp1h\xc3\xa9 spa1ti spi1ro spo1ru sporu1le sporu4lent_ st1ro st1ru stan1da sto1mo st\xc3\xa91r\xc3\xa9 st\xc3\xa9r\xc3\xa9o1s2 su1b2l su1me su1pe su1ra su1r\xc3\xa9 su2ment_ su3r2ah sub1li sub1s2 subli1me subli2ment_ suc1cu succu1le succu3lent_ supe1ro2 supe4r1 supers2 sur\xc3\xa91mi sur\xc3\xa9mi1ne sur\xc3\xa9mi3nent_ t1c2h t1he t1ra t1re t1ri t1ru t1t2l ta1c2h ta1me ta2ment_ tac2hy tachy1a2 tan1ge tan3gent_ tc2hi tchin3t2 tem1p\xc3\xa9 temp\xc3\xa91ra temp\xc3\xa9ra1me temp\xc3\xa9ra3ment_ ter1ge ter3gent_ tes1ta testa1me testa3ment_ th1re th1ri th2r ther1mo thermo1s2 thril3l to1me to2ment_ tor1re tor3rent_ tran2s1a2 tran2s1o2 tran2s1u2 tran2s3h tran2s3p tran3s2act tran3s2ats trans1pa transpa1re transpa3rent_ tri1de tri3dent_ tru1cu trucu1le trucu3lent_ tu1me tu2ment_ tung2s3 tur1bu turbu1le turbu3lent_ t\xc3\xa91l\xc3\xa9 t\xc3\xa9l\xc3\xa91e2 t\xc3\xa9l\xc3\xa91i2 t\xc3\xa9l\xc3\xa91o2b t\xc3\xa9l\xc3\xa91o2p t\xc3\xa9l\xc3\xa91s2 u1ci u1ni u1vi u2s3t2r ucil4l ue1vi uevil4l uni1a2x uni1o2v uvil4l v1re va1ci va1ni vacil4l vanil1li vanil2l vanil3lin vanil3lis ve1ni ven1t2r veni1me veni2ment_ vent1ri ventri1po ventripo1te ventripo3tent_ vi1di vidi1me vidi2ment_ vil3l vol1ta vol2t1amp v\xc3\xa91lo v\xc3\xa9lo1s2ki wa2g3n xil3l y1al1gi y1as1t2h y1s2tom ys1to \xc3\xa21me \xc3\xa22ment_ \xc3\xa81me \xc3\xa82ment_ \xc3\xa91ce \xc3\xa91ci \xc3\xa91cu \xc3\xa91d2r \xc3\xa91de \xc3\xa91le \xc3\xa91li \xc3\xa91lo \xc3\xa91l\xc3\xa9 \xc3\xa91mi \xc3\xa91ne \xc3\xa91ni \xc3\xa91pi \xc3\xa91q \xc3\xa91re \xc3\xa93cent_ \xc3\xa93dent_ \xc3\xa93quent_ \xc3\xa93rent_ \xc3\xa9ci1me \xc3\xa9ci2ment_ \xc3\xa9cu1me \xc3\xa9cu2ment_ \xc3\xa9d1ri \xc3\xa9d2hi \xc3\xa9dri1q \xc3\xa9li1me \xc3\xa9li2ment_ \xc3\xa9lo1q \xc3\xa9lo3quent_ \xc3\xa9l\xc3\xa91me \xc3\xa9mil4l \xc3\xa9ni1te \xc3\xa9ni3tent_ \xc3\xa9pi2s3cop \xc3\xa9pi3s4co1pe \xc3\xa9pis1co \xc3\xa9qui1po \xc3\xa9qui1va \xc3\xa9quipo1te \xc3\xa9quipo3tent_ \xc3\xa9quiva1le \xc3\xa9quiva4lent_ \xc3\xb41me \xc3\xb42ment_"; + +?> \ No newline at end of file diff --git a/include/mpdf/patterns/it.php b/include/mpdf/patterns/it.php new file mode 100755 index 0000000000000000000000000000000000000000..30eb9a9bb04c14c7ce1de99bf1eeb901425880aa --- /dev/null +++ b/include/mpdf/patterns/it.php @@ -0,0 +1,11 @@ +<?php +/* + Adapted from Hyphenator 1.0.2 + http://code.google.com/p/hyphenator/ + + Retrieved from http://www.ctan.org/tex-archive/language/hyphenation/ithyph.tex +*/ + +$patterns="_a3p2n _anti1 _anti3m2n _bio1 _ca4p3s _circu2m1 _contro1 _di2s3cine _e2x1eu _fran2k3 _free3 _li3p2sa _narco1 _opto1 _orto3p2 _para1 _poli3p2 _pre1 _p2s _re1i2scr _sha2re3 _tran2s3c _tran2s3d _tran2s3l _tran2s3n _tran2s3p _tran2s3r _tran2s3t _su2b3lu _su2b3r _wa2g3n _wel2t1 2'2 a1ia a1ie a1io a1iu a1uo a1ya 2at_ e1iu e2w o1ia o1ie o1io o1iu 1b 2bb 2bc 2bd 2bf 2bm 2bn 2bp 2bs 2bt 2bv b2l b2r 2b_ 2b' 1c 2cb 2cc 2cd 2cf 2ck 2cm 2cn 2cq 2cs 2ct 2cz 2chh c2h 2chb ch2r 2chn c2l c2r 2c_ 2c' _c2 1d 2db 2dd 2dg 2dl 2dm 2dn 2dp d2r 2ds 2dt 2dv 2dw 2d_ 2d' _d2 1f 2fb 2fg 2ff 2fn f2l f2r 2fs 2ft 2f_ 2f' 1g 2gb 2gd 2gf 2gg g2h g2l 2gm g2n 2gp g2r 2gs 2gt 2gv 2gw 2gz 2gh2t 2g_ 2g' 1h 2hb 2hd 2hh hi3p2n h2l 2hm 2hn 2hr 2hv 2h_ 2h' 1j 2j_ 2j' 1k 2kg 2kf k2h 2kk k2l 2km k2r 2ks 2kt 2k_ 2k' 1l 2lb 2lc 2ld 2l3f2 2lg l2h 2lk 2ll 2lm 2ln 2lp 2lq 2lr 2ls 2lt 2lv 2lw 2lz 2l_ 2l'_ 2l'' 1m 2mb 2mc 2mf 2ml 2mm 2mn 2mp 2mq 2mr 2ms 2mt 2mv 2mw 2m_ 2m' 1n 2nb 2nc 2nd 2nf 2ng 2nk 2nl 2nm 2nn 2np 2nq 2nr 2ns n2s3fer 2nt 2nv 2nz n2g3n 2nheit 2n_ 2n' 1p 2pd p2h p2l 2pn 3p2ne 2pp p2r 2ps 3p2sic 2pt 2pz 2p_ 2p' 1q 2qq 2q_ 2q' 1r 2rb 2rc 2rd 2rf r2h 2rg 2rk 2rl 2rm 2rn 2rp 2rq 2rr 2rs 2rt r2t2s3 2rv 2rx 2rw 2rz 2r_ 2r' 1s2 2shm 2sh_ 2sh' 2s3s s4s3m 2s3p2n 2stb 2stc 2std 2stf 2stg 2stm 2stn 2stp 2sts 2stt 2stv 2sz 4s_ 4s'_ 4s'' 1t 2tb 2tc 2td 2tf 2tg t2h t2l 2tm 2tn 2tp t2r t2s 3t2sch 2tt t2t3s 2tv 2tw t2z 2tzk tz2s 2t_ 2t'_ 2t'' 1v 2vc v2l v2r 2vv 2v_ 2v'_ 2v'' 1w w2h wa2r 2w1y 2w_ 2w' 1x 2xb 2xc 2xf 2xh 2xm 2xp 2xt 2xw 2x_ 2x' y1ou y1i 1z 2zb 2zd 2zl 2zn 2zp 2zt 2zs 2zv 2zz 2z_ 2z'_ 2z'' _z2"; + +?> \ No newline at end of file diff --git a/include/mpdf/patterns/nl.php b/include/mpdf/patterns/nl.php new file mode 100755 index 0000000000000000000000000000000000000000..ae02aa16165a55bc73722072f0edae6d4ce9c0d7 --- /dev/null +++ b/include/mpdf/patterns/nl.php @@ -0,0 +1,11 @@ +<?php +/* + Adapted from Hyphenator 1.0.2 + http://code.google.com/p/hyphenator/ + + Created by Remco Bloemen (remco dot bloemen at gmail dot com) +*/ + +$patterns="_a4 _aan5 _aarts5 _aat5 _ab5l _acht5end _ac5re _adi5 _af3 _af5l _af5s _aftu5re _al3ee _al3f _alk4 _al5ko _alko5v _al5ma _al3om _al4st _ana3s _an3d2 _an3en _an3gl _an5th _ar5d _ar5tr _as5h _as5l _as3t _as5tra _as3u _at4a _ave5n _b4 _be3la _be5ra _be5ri _bos1 _c4 _coo5 _co3ro _cus5 _d4 _daar5 _da4gi _dag5r _da2k _dan2 _debe4 _de2k _dek5l _dek5s _den4k5r _de5od _de3ro _de5sta _di4a _die4p _di3o _doet3 _do3v _du4w _e4 _ede2 _edel5a _ed3w _ee4n _eer5ste _eest3 _eesto4 _eet3 _ei3l _ei5sc _ei3sp _ei5t _el4s5 _en5s _en5th _ep4a _ere5s _er2f _erf3l _er3in _ert4 _erts3 _es3 _es5c _es5pe _es5tr _eten4 _et4h _ets5te_ _eu3 _eus5 _\xc3\xa92 _f4 _fel4s _g4 _gaat5 _gang5s _gea5v _ge3l4a _ge5le _gelo5v _ge3n4a _gena5z _ge5ne _ge5no _ge3ra _ge5r4e _ge5r4o _gerst5a _ge3s _ge5sk _ge5ta _ge5tj _ge5to _gid4 _go4m _goot3 _h2 _handels5 _her5in _hits5t _ho4lo _houd5s _i4 _ide5o _ij4s _ijs5l _ijs3p _ijs3t _ik3 _in1 _in5d4 _in3g4 _in5gr _ink2 _in5kr _in5kw _in3s4 _in5sl _in5st _in5ta _is5c _j4 _jor5 _k4 _ka3d _ka5g _ka4taa _kerk5l _kerk5r _kerk5u _ker5sten _ke4s _koot5 _ko5pe _kop5l _ko3v _kun2 _l4 _laat5ste _le4b5 _leg3o _le4g3r _leid5st _len4s3 _le5r4 _le4s3 _le5th _lin5d _lof5 _loot3 _lo4s1 _lu3e _lui5t4j _lu4s _m4 _ma5d _ma5\xc3\xaf _meel5d _me5la _me5ni _merk5l _me2s _me4st _met5ee _mij4n5i _moot3 _mor5sten _mo4s _n4 _naat5 _na3d _na3n _na3s4 _nee5s _ne2p _nep3a _ne4s _ne5te _ne4t3j _neu4t5j _nie4t5j _noot5 _nos5t _no5v _o4 _oe4r5 _oe4s5 _oeve4 _ol3f _om1 _omme3 _on3a _on3d _onde4r _on1e _on5g _on3i _on5k _on1o _ono5v _on2t3 _on4tee _on4ter _ont5s _ooi5tj _oot5jes _op5ee _opi5 _op5l _op3r _op5s _org4 _os5 _ove4 _p4 _pee5tj _peri5 _pers5te_ _piet5j _pits5te_ _poort5j _po4st _puit4 _pui5tj _pu2t _r4 _raads5le _ran4d _rand5a _re4men _ren4o _reno5v _re5o _rie4t3 _rij5sp _ring5s4 _roe5tj _ro4l _ro4st _ro4t3h _ro5v _s4 _sap3 _sa5v _sci3 _see3 _seks5te _se5re _set3 _se5v _side3 _ski3s4 _sneu3 _sno2 _so2k3 _song5 _spoor5tj _st4 _ste4m _t4 _taart5j _tan4da _te4a _te4f _tek2 _te3le _ten5ac _te3no _ten4t5j _te3ra _ter4p5a _ter5s _te4s _ti2n _tin3a _tin3e _toe5pr _to4lo _to4p _to5v _tri3s4 _ts4 _tsa3 _tuit5j _ty2r _u4 _ui2 _ui5s _uit1 _uit4je _uke5 _ur4a _vaat5j _ven4t5j _ve4r3 _ves5p _vet3j _vie4r _vol5s _w4 _wals5te_ _wee4ko _wee4t3 _we4l3 _wen4s5t _west5r _win4s _xe3 _y2 _z4 _zes5 _zit5 _zooi5 4a_ a4a4 4aad aad1a aad1o aad1r aad5sap aaf5a 4aag aag1a aag3e aag3o aag5r aags4 aag3sa aag5so aag3sp aai3l aak1a aak3e2 aak1o aak5r aak3sp aal5a2 aal1e aal5f4o aalfo5l aal1i aal5k aal5m aal1o2 aal3sl aal5so aal5spe aal5ste aal1u aam1a aam3o aam4sta aam4ste aan1a 5aandee aand4r aan1e2 aan5g aan5i 3aanj aan5k4 3aann aan3o aan3sp aans4po aant4 3aanta 3aanv aap1a aap3i aap3o2 aap3r aar3a aar4d5as aar3e4 aar1i 4aarn aar1o2 aar5spel aar4t5on aarts5l aar3u aas3e aas3i 4aast aas5tr aat3a aat5e aat3h aat3i aat1o aat5r abak4s5 aba4l abat4s ab5eun ab3ijz a2bon aboot4j abot4j 2abr ab3ru 4ac_ a3cal a3car 4ace ace3st 4ach_ a3cha 2a1che 4a1chi ach3l a1cho a3chr 4achs ach5tec a1chu achuut5 4ack ac3kl 2acl 2a3co 2acr ac5res 4acta 4acu 4ad_ a5da_ ad3ac ada2d ada4l ada2r3 adas5 2add a5de_ ad3ei ade5re a5des a3det a5deta ad3e4te 2adh 4ad4i adi3al adi4oc adi4od 4adk 2adl 4ado_ a3doo 2adp ad3rei a3d4ri ad3rol 2ads ad5se ad3so ad1s4t ad5sta ad3ui ad3w 2ady 4ae aege4 ae5k4 a3e2p ae3r ae2s3 ae4s5t a3eu a2\xc3\xab a4\xc3\xabr 4afa af3aa a2f3ac af4as af4at afd4i afd2r af5d4w 4afe afee4 4afi af3l 4afo a5fo_ a2foe afon4d af3op af5org af1r af3s4 afs2c af5se 3afsl 3afsp aft4a af5tr af3ui 2afy 4ag_ ag1a2d ag3af ag3a2m ag3ar ag3di a5ge_ agee5t 4a5gen_ ager4s ag3ex a4gil ag3ind a4g3ins agi5ot 4ag1l ag3of a4g3or ag4o3v a2gr ag4ra ag5rap ag3ru ag3sl ag4sle ag5slu ags2p ag3spe ag3spi ag1st ag3sta ag5str 2agt agu5a a2g3ui ag3u4r a2g3uu 2ah 4a1ha 4a5he ahe5ri a1hi ah3l a3ho ah5r ah5t2 a3hu a3hy ai5a2 ai4dr ai1e a1ij ai5k ail3m ai2lo a2in aio4 ai3ov ai3s4 ai5sc ai4s5l ai5sn ai1so ai1st ai5tj ai3tr aiu4 a\xc3\xafn4 a\xc3\xafns5 a\xc3\xafs3o4 2a1j ajaars5 aka2 ak3af ak3ag a4k3ar a4k3ed ak3emi ake2t ak3id ak3ink ak5is 1akko 4a2k3l a2k3n ak5ne ak4ni a3kof ak3on ak3o2p a2kr ak5ru 2aks ak4so ak5spe ak1st ak5to ak5t4w a2k3u4 ak1w ak3wi a1la a4l3ach al3adr a3l4ag a3lal a5lapr al3art 4ald a1le a5le_ al3eff 2aleg a2l3el ale5ro ale5ste ale4tj a3l\xc3\xa8 al4fen alf3l al5fon alfu4 al2gl a3lie al3int alk5ei al5kle alk3s al4kui al5le al4mac al5me a1lo a4l3ol alo2n al3ou a4l3o4v 2alp al3s4ag al3san al3scr als5j al2sl als5li als5m al4sn al4s3oo al4stem al5sten als5tou altaar5 al3tha al4t3ro alt4st a1lu a2lui al3uit al3u4r alu2s5 4am_ a4m3ac am3adr ama4f 4amag am3art 5ambt ament4j ame4ran ame5tj a2meu am4i 4amm am3oli a2m3o4v 3amp\xc3\xa8 am2pl am4ple am4sm am4s3o am4spr ams5te_ a2m3ui a3nad an3alg an4a3n an3arc 2anc 4anda anda4d and5ank an4d3e4d an4dex 2andj an4dom an5d4ri and5roo ands5lo an4d3ul a4nem a3nen anen3i 4aner an3est ane3us 4ang_ an4gan anga5p ange5st ang5le an2gr ang5sna angs4te aniet3 anij4 3anima an5ion a4n5isl ani5t 4aniv 4ank_ an4kaa anka4n an4k3as an2k3j an4klu ank3of an2k3r a1no an3och a4n3oor an3ork ano3s ano3t4 a4n3ou ano5v 4ans an3san ans3cr an4seg an4serv an4sid an2so4 ans5or ans3pi ans5pir an1st an4s5te_ an5stru an4tac ante4n an3th 2anti ant5sl ant3w 4a1nu a5nuf an3ui an3ur an3uu anze5s 2a1o ao4g ao2l a4om a2op2 aor5t a3os aos3p aos5t 4ap_ a1pa a4pak a4pas ap3as_ ap3ass a1pe ap5eten 4a1pi apij4t5j ap3ijz ap1j 2apl ap3le ap3li ap3lo a1plu apon5 ap3oo apo3p apo5sta ap3o4v 1appa 4appen 4apr ap3ra a3pre a4prem a5p4ris ap3ru ap2sa ap4si ap2s3l ap3sn ap4ste_ 2apt ap3tj 2apu a2q 4ar_ a1ra araat5j a4r3app ara3s4 ar2da ard3ac ard3ak ardo4 ar4d3om ar4d3op ar4d3ov ar2d1r ar4dra ard3re ar4du ard3w a1re 5a2rea a3reg a3rem ar4en are4no are3sp a3rev ar3gh ar2gl a1ri arie4tj arij3s ar3ins ark2 ark3ac ar3k4l ar4map arm3u a1ro a2r3ob ar3oge a3rok aro4ko ar3oog a2r1o2p a3rot arpi4 ar2s ar5sch ar3scr ars2e ar5see ar3si ars3l ar4sla ars5m ar3sni ar4so ar4sp ar5spo ars3ta ars5tal ar4s5tek ar4str ar4su art4aa ar4t3ak ar4tan art5ank ar4tap ar3tar 4arte ar4tei ar2th ar5tij 4ar4tj art5jesv 4arto ar5tof art5o4ge art5oog ar4t3o4v ar2t3r ar4tro art5ru art4sl art5ste a3ru ar3ui 4arw arwe3s a1ry 4asa as3ad as4ag as3ak as1ap a2sc as5ce 2ase a4sec a4s3eg aser5a ase5tj aseve4 as5ha asis1 a4sj as5ja as3ji as3k as5ka as5ki as3l as4lu as3m as5mi as3n as4ne as4ni 4aso as3ob aso2l aso4r as1p as3pl a4s5q as5sa 4assm 3assu a2st 4as3ta a4sta_ as5tag as4tas as4tat as3te a3stek a3stem as5ten as3t\xc3\xa8 asting5sp as1to as3tob ast3op 4astr ast5rem as5tro_ as4tu a1t ataart5j at1ac at3ade at3af_ at3ank ata3s 2atek a5tell ate2n ate3no aten4t5r ater5ad ater5sl at4eu 2atg at3hu ati5ni a2t3j at4je atjes5 at5jesb at5jesh at5jesm at5jesp 2atm 2atn a2too at3oog atos5f ato3st at3rac at3rei at3rib at4roe at5ru at4s3a2 at4s3ec atsi4 at4s3id at2s3l at4slo ats5m ats3n at4sne ats3pr at2st at4staa at4s5tak at4ste_ at5sten at5stij ats5tol ats5top_ ats5trek at4t3u4 a2t3ui at3w aua4 au3ch au3co au5de aud4j 1aug au3na aun3t aup2 aur4 au5re aure3u 4aus au3so au4s5p au3sto au3t4 4aut_ 1auto auto3p 2auts3 auw3a 4auz a4\xc3\xbc avast4 ave3c avee4 ave4n3i aven5sp aver3a ave3re ave3r4u 4avi a2vo 1a4von a5voo a5vor 4avy 2a1w axis4 ay2a 4azif \xc3\xa43h \xc3\xa4mme3 \xc3\xa43r 1b 4b_ 3ba baar5ste baar5tj ba4da bad3ar ba4d3r bad3s ba3g4h ba3gl 5b2ak ba4k3o4 bak4sp ba3lan ba4lar bal3dw bale4 bal3ev ba3li\xc3\xab bal4kl ba3lo bals4 bal3sf ba4me ba5n2a ban4k3a ban4kl ban4k3o ban4kr bank3w ba3sa ba4st ba2tr ba3tro 4bb bbe4l5ag bbe4l5ee bbe2n bben3a 4b1c 4b1d4 b5de bdi5a 3b4e be1a be3as be2au be3ch be5dwe be5dwi be5dwo bee4 beet1 be5g beie4 bei3s bei5tj be5ki be3k4l be1kw be3lar be5l4as bel5dr be3le be4l3ec be4lex bel5f be3li be4l5int bel3k bel4o be3lo5v bel3sc bel3sp belt4 bemen4s be3nep be5n4o be5ot be1ra bere5s4 ber4g5af ber4g5et ber4gl ber4gr ber4i be1r4o bero5v be3ru be3ry be1s4 bes5ac be4sh be4sje be3so be5sp bes5s bes5te_ bes5ten_ be5stie bet2 be3t4h be5ton bet5ren be3tw be5twi be3und beur4s 4b3f 2b1g 4b3h 3b2i bid3s bi2du bie4li bi4en bie4t3j bij5d bij3f bij3g4 bij5k4 bij1p bij1s2 bik4a 5bil bi3lo bil3s2 bin4dr bin4st bin4t3j bi5ob bi3ok bi5om bi3oso bi5ow bir3 bi4st bis5troo bi1tr bit4se bit4s3p 4b1j 4b1k 3b4l blad5ij 2b5lap b5led bles3 ble5spe ble2t3 b5lid blijs4 blij5ste bli2k 4b5loi blok5l bloot5j blu2s 2b1m 4b1n b4o bo4d3ec body3 boe4g3a boe4kn boe4ko boes4 boe3st boet5st bo3f4l bo2k bok3an bokje5 bok4st bolk4 bo2m3a4 bo2m3o bo5na bond2 bond4s5 3bone bo3no bon4t3j bon4t5o4 boot3j boots5te_ bo3p2 bor4sta borst5o bor4st5r bo4s bos3a bo5sco bo5si bo5so bos5p bos5to bot3j bo4to bot3r bot4sp bot4st bo2tu bou5ta bouw5s bo3v bove4 4b1p 3br4 braad5s bran4da bra5str brei5s4 brie4t brie5tje_ bri4l bro2n bron3o4 bru2l 4b1s4 b2s5a b5sc b3si bsi3d bs5je b2s5la b2s5m bs5s b4stij 4bt4 b3ta b1tr bts5 3b4u buit4j bul4k bu4lu bune5t b5urb bu5ri bus5c bus3o but4a but3j bu2to but4s buts5te buur4tj 4bv 2b3w by3 4bz 4c_ 1ca 3ca_ ca3b ca1ch 5cada ca3do ca3dr cae3 ca3g2 cal4l3 ca3lo came5r ca3na cant4 ca2of ca1pr ca4pra ca5pri ca3ra car4u ca5se ca3s2p cas3t cas5tr ca3ta cate4n ca3t4h cau3 cau4st ca3v 2cb 4c1c cca3 cces5 c4d c5do 1ce 3ced cee4 3ceel 3cel cel3d celes5 ce5li cel5k ce4l3o 2ce3n4a 2cene ce3no 5cent cen4t3j ceo4 ce3ra cer2n ce5ro cer4t3r ce2s ce3s2a ce5sc ce3s2h ce3sta ce3s4ti cesu5r ce3ta ce4t3j ceto4 cet3og cet3oo 1c\xc3\xa9 c3g 4ch_ 3cha\xc3\xaf 5chao 3chas 1chau 5chauf 2chc 1chef 5chef_ 5chefs 5chemi 5cheq che5ri che3ru 5ches che3us 1ch\xc3\xa9 5chir 4chn 2chp 5chromo 4cht 4chw 1chy 3ci ci5ab ci3am cie3k cier4s5 ci1eu 5cij 5cil ci5le cil3m 4cind ci3o ci5om 5cir ci3t2 ci5ta c3j c2k3a c4k3ed ck3ef cke5re c5k4et ck3id c2k3l ck4le c2k3n c2k3o4 c4k3r ck5se ck3so ck5st c3ky 1c4l cla2n cle3u 5clu 2c1n 1co co3ad co3d co4i coin5 co3k4 co3la 5com 5cond con1g 2co1no 5cons 3con5t4 2coo 2co1p2 3copa 4copi cor4dr co4rel co5ri cor2o 5corr cors4 co3ru co5sc co5se co5sp co3th co3tr 5coun 2cout co5v c3p4 1c4r2 3cras cre5d 2crip 3cris cro5f cro5k croo3 cro5v crus5 c3so c3sp c3ste 2c1t ct3act ct3ad ct5c ctee5t cte2n3 c2t1h c2t3j c4t3of c3tol c2t1on ct4or ct3rap c4t3re ct3sl ct3sp 1c2u cu5d4 cu3en cu3\xc3\xa9s cui5s cui2t cuit5e cu3k4 cula5p cu3ra 5cur3s cus3o c3w 1cy 1\xc3\xa7 \xc3\xa7a4o 4d_ 1da 3da_ 3daag d4aal d3aap daar5e 5daat 4dabo 2d3acc da4ce da5den 4dadr 3dae 2d1af 3dag da2g3a4 da3ge da4g3ed da4g3e4t da4g3on da4g3r dag4s3t da2gu 3dai da3\xc3\xaf da3ke da4ker 2dakk da4k1r 4dala d3alar d3alc da3le 4dalf da3li 2dalm da2l3u d4am dam4a da5mac d3a4mat d2a5me4 dames3 dam4pl 2da2na dan3as dank3l danoot5 dan4si dan4sm dan4s3p dan4st dans5ta 4d3antw 2d1ap 4d3a2pe 5dapu da2r3a d3arb 3dare 3dari dar4mo darm5on 3daro dar3s dar5st 3das3 5dasa da3stu 3d4at da3ta dat5j 4d5atl 4d5atm da2t3r 5daue 4d1aut 3dauw 2db dbei5 dbou4w5i 2d5c 4d3d4 ddags4 ddag5sp ddel5ev dde2n dden5a ddera4 dder5al ddere4 dder5ee dder5ep dder3o ddi3a d5dles d5do ddo3p 1de 3de_ de2al de1ch d4e5den 5dedir de4dit dee4g3 dee4l deel3i 4d3een dee4r 4d3eff de3g 4d5eg_ 4d5egg 2d5egy 2dei d3eie d3eig d3eil d1eis d3eiw 5dek de3ke dek3lu dek3w del4aa del5da del5dr del5eek 4d3e4lek 4delem de4lev 4d3e4lit del3k del2s del4s3e dels3i del4so 4d3e4mai 2demh 5demi dem5ond d2en_ den4ac den5ate den3ei den3e4p den3ev 4d3engt den4k5of de4noc den3o4r den3sh den5str de3nu 5denvl de4o de5ofo de5ol deo4li deo3v de3rab de4r3ad der3a4g de3rak de3ram de3ran de3rap de3ras de4r5as_ de4r5ass der2e der5ede der5egd de4r3ei de4r3em de5re4n de4rep de4ret de5rij de4r3im der3k4 der3on dero4r 4d3eros der4s3a der4s5om der5ste der5sto der5stra der5th 4d3erts der5tw de2r3u de3rup de2s de3sav des3m des3n des3p de3spe de5spel de4spl des5sm de3st des5tak de5stal de4s3te de4sti de5stic des5top de3t4 4d3e4tap de5tw deu4r3o4 de3us_ deu4tj deve4 2dex 4d1exa 4dexp 3d\xc3\xa8 2d1f 2d3g d4gaf dge3la dge2t dgeto4 dget5on dget5ov dge4tr dg4l 2d1h d5he dheer4 3d4hi_ 1di di2a di5ae di4ak di4ano dia3s4 di4atr 5dich di4do die2f die4r3o di3esr die3st die2t diet3r di1eu 3dig di2ga dig5aa diges5 dijk3r di3jo 2d3ijz di2k3o4 5dil 2d3imp di5n2a 2d3ind 2dinf 3d4ing_ 4d5ingel 4d3inj 4d3inko 2d5inr 2d3ins 4d3int dintel5 2d3inv 2d3inw 2d3inz di2o di5ofon di4ol di4one di4oni dio1s dio5sc 2d3i2ro 2d3irr 3di4s dis5ag di5se di5si dis4kr dis5p dis1t dis5tr di3th dit3j dit3r 5div 2d1j 2d3k2 4d3l d5le_ dli4n dlot4s 2d1m 2d3n2 d5ne dni3s 1do 3do_ do3a 2dobj 4d3obs 3d4oe 5doe_ doe5d 4doef d5oefe 5doek 5doen 5doet 4d5oev 3doi d4ole 2do2li d4olin dolk5s 5dol5s 3d4om_ 5domi do4m3o4 d3omr dom4sn 5domu d3omv 4domz 5don_ d4ona 5done do5ni 5d4onn 5do3n4o do3nu do5ny 5donz 2dop do3pa d3opb d3opd do3pee 5dopj 4d1opl 3dopo d3ops d3opz 4d5org do4ri\xc3\xab d3ork dors5m do3sp do3sta dot3j 5dou 2dov dover5s 3dovl 3dovo 2d3p dpren4 1dr4 3dra 5dra_ d3raam d3raap d4rac d5race 5drach d3rad_ d3rada 5draf 5d4rag d4rama d3rame 4d3rand 4drap 4dras 4d3raz 2dre 4d1rec d5reco d1red d2ree 4d3reek 4drend d4ress 4dret 3d2rev 5dreve d3ric dries4 5d2rif dri5ga d3rijd d3rijk d3rijm d3rijs 5d4rin 3dris 4d3rit 4d3roei d3roer 5d2rog 4d3rok d3roma d3rond 3droog 4droos 5drop 2drou 2d3ro5v 2droz drug4s d3ruim d3ruit 5d4ru4k 4d3rus 2ds d2s1a2 d4saa dsa4b d3sal ds4ate ds2ch d5schi dse2 ds3eco d4s3ed d4s5ee d4sef d4sei ds3eis ds3elf dse4li d5sen d4s3es d4set d2sh ds3ho d2s1i2 d4s5id dsig5a ds2im ds4ing ds5is d4s3j ds4jo ds5jon ds4l d1sla ds5las ds5lic d4s5lie ds5lim d3slin d2sm ds4mak d3smij ds5mo ds3n ds4ne ds5neu d3snu ds1o4 ds3ob ds3om d4son ds2oo ds3op d4spa d5span ds5pati d5spec d5s4pel d4s3pet d1spi d4s3pl d5spoe d5spok d5spor ds5s dst4 d1sta d5staat d4stab ds3tak d4s3tal ds4tan d3s4tat d5stav d3ste ds4te_ d5stee d4stek ds4ter d4sterr d4stev ds3th d3s4ti d4stit d1sto ds5tram ds5trekk ds5ty d2su4 ds3ure ds3uu d1sy 2dt d1ta dtaart5j d1th d2tj d1to d1tr d1tu 1du 2duca 5due du3en du3et 5duid 5duif 5duik d3uil 2duit 4duit_ d3uitd 5duite 4duitg d3uitv 5duiv du4n dun5i du2o du4ol 3durf 3durv 5du1s dut3j du5wen 2dv dvaat5 dvee3 dve5na dvies5 2dw d3wac d3was d3wat d1we 3d2wei d3wek d3wet d3wez d1wi 4d1wo d3wor d3wr 1dy 4d3yo dy4sp dy2s4t 2dz 4e_ 4ea e3aa e1ab ea3bo e3ac ea4ca eac5t e1ad ea3da e5adem ea3do ead3s2 ead5sh e1af e1ag e3ai ea4k3o4 e1al ea3la e3ali e4als ea5mi e3an e4an_ eang3 ean4s e5ap ea3pr e3aq e1ar ear2c e1as e2asc ea5s4e ease5t ea3so e1at e4at_ eat3s eau3s4t e1av e3bo ebots5te_ e5br 3ecd e3ce e1che e1chi echt5ec echts5o e3chu 4eck ec5le 4ecor 4ect ec3ta ec4taa 3ecz e1d ed4ag e3dam e3d4an e4d4as ede3a ed3ei_ ede5le edem4 ede5nac ede5o ed4er e4d5erns ede5rog edi3al edi3am e5die 4edir edoe5tj e3d4oo ed3opv edors5te ed3ov e3d2r ed3rod ed3rol ed1s ed5se ed2sl ed4so ed5sp ed3su ed3uit e4d2w e5dwan e4e eea4 ee5b ee5ca ee5che ee2d3a eed4ac eed5as ee5de ee5do eed3ru eed3si eed3w ee2f ee3fa eef3ac ee3fi eef3l eef3r ee4gap eeg3l ee3i ee2k ee3ka ee5kaa eek3ak eek5all eek1e ee5ket ee3ki ee3kl ee4k3lo eek3n eek3re ee3kri eek3ro eek5st eek3w ee2l eel3a ee3lad eel4as_ eel5d4u ee3le eel4ee ee3li ee5lij eel5k4 ee3lob eel3og eelo4ge ee3lu4 eel3ur eel3uu 4eem eema4 ee2n een3a eena4r een3e2 een5g ee3ni een5ie een5k ee5o2 ee2pa eep3an ee3pl eepo4 ee4p3re eep3ru ee2r eer1a eer3aa ee4rad eera4l ee3ram ee3ran ee3re ee4ree ee5rei ee4r3i ee5ric eer5k eer3og eer5oom ee3rot eer5ston eer5str ee2s3 ee5sch ee4s5em ees5et ee3sj ees5lo ee3sn ee3s4p ees5pl ees5pot ees5ten ee3stu ee2t eet5aa ee3tal ee3tan ee5te eet5h ee3tj eetna4 ee3to eet3og eeto4ge eet3oo eeto4r ee3tr ee4tro eet5rok eet3sp eet5ste ee5v ee5z e\xc3\xabn3 e5\xc3\xabr ef3ad efa4z efde5l ef3do ef3ei e5fer 4efi efie4t efiet5j ef3ins e3fis5 e1fl ef3li ef3loo e3flu ef3om e3foo ef3op e1fr ef3rij e5fron ef3sf 4e1g egas4 eg3as_ ega5sk eg3ebb e4ge4c eg3eig egel5ei_ ege4l5ov ege4net egen5of ege4ra eger5eng ege4ro eger5on e3g4i eg3ijz egip4 egiste4 e2gl e4go_ eg3org e2gos eg3oud e5graf eg3s4 eg5sle eg5so e2g3u4r egut4 e4g3uu e1h4 e5ha eheis5 ehit4 e2i ei5a 4eid ei3do eid4sc ei1e 4eien eien5s eie5re ei3f4 ei3gl 4eign e3ij eik4l ei3kn ei5kr eiks4 4eil_ eil5ant 4eild4 eil5dr 4eile ei4lev eil5m ei2l3o ei4n3ab ei3n4ac ein4do eind5oo ein4d3r ein5gr ein5k ei2no ein5sl ei3o ei2sa ei5sha ei3s4la ei3slo eis4p ei3s4ta 4eit2 ei4too eit4s3 eits5c eits5n eits5te_ eit5sten eits5tr eive4 4eiz e1j2 e3je ek3aan ekaart5j ekaat4 ek3af_ e4k3a4g ek3al_ ek3alt e5kam ek3ang ek4ee ek1ei e3kem e5ker_ e5kers ekes3 ekes4t ekes5tr e3ket ek5eter e5kic e4kil e5kis ekla4m eklam5a ek3lev e5klim ek5loos ek4ni e3ko e4k3ob e5kof ek3oli ek3opz e5kor ek5os_ ek5oss e5kran ek3roz eks4e eks5erv ek5set ek4str eks5tra ek5t4e ek3to eku4 ek3uit ek3ur ek1uu ekwet5ste ek3win e1la el3aan el5aand el1ac el4ade el3adj el3adm el3adr el3adv el1a4f el1al e3lan el5ana e3lap e5lap_ e4lapp el3arb el3arc el3arm el3art e4l3as_ el3asi e4l3asp e4l3ass el1au e4laut e3laz el5azi el4dec el4dr el4du e1le e3le_ el3eeu el5eff e5leid el5eier el3eig el3ei5s e4lel 3e2lem el3emp e5l4en e3ler ele5r4a eler4s el3erv e3les eles4t e4l3eta ele4tr e4l3etu el3exc e3l\xc3\xa9 elfi4d el1fl elf3s4 el3gu 2eli e5lie e5lig eli5kw el3imp e4l3ind e3ling e4l5inkt el5inz 3elix el4kee elk3s el4k3u4r el4kw 4e1lo e5loep el3oes e3lok el3ol el3oms el5ond el5ont e3loo e5lood e5loos el3ops el5opt el5opv el3o2r el5org elot4j e5lou el3o4ve e5loz elp4o el4ps el4s5em el4s3k el5smed el5twe 4e1lu el3uit eluks5 2ema e4mana ema3sc ema5to emees5 emens5te emer4s emes3 emie4tj e5mok em3oli em3op em3org emor5sten e4mo4v em3sa em5sc em4sli em4sm em1st em3su em3uit emut4 en3aap e3naar e4n3aas en1ac e5n4acc en5af e2n1ak e2nal en3al_ en3als en3amb en4ame e2nan e4n3ang en1a2p e5nari en3ars e2n3a2s enas3p e3nat ena4tel e4n3att en1av e2n3a2z enci4 3ency_ en3da en5daa end5ama 5enderti en3d4o en3dr en5drek e2n3e2c enede4 e3nee en3eed enee5t en5eg_ en5egg en3ela en3elf en3ema e4n3en5t e2ne2p en3epo e5nere 5energ e4nerv en3eta en3ete ene4ten e3neu 4enf en5ga en3gl en4g5le eng4r en5gri engs4 eng5se eng3sm e3nie e5nijd e2n3im e4ninga e4n3ink e3niv e4n3i4vo en3k2a e4n3och en3off e4n3oli e2n1on e4n3oor enoot5 e2n1o2p e3nor_ en3ord eno3s en3ou e2n1ov 3enq en5sce en4sei ens5ein ensek5 3ensem ens4fe en4sin en5slak en4s3on en1s2p ens5pot en5stan en5sten enst5ijv en4stin en4stu4r en3su en4tac en5tee en5tei ente5re en4terv 3ent\xc3\xa8 en1t2h en5tom ent4r en3tre ent5rol ent4sl ents3m ent4s3p en3tw e1nu e4n1ui e2nun en3ur en3uu 5envelo eny4 e3o eo3d eodo3 e5oe eoes3 e5off eo3fr e4o3k4 e5on eo5ni e5oo eo3pa eo3pe eo3pl eop4la eo3p2r e5ops eor5d e5org e5ori eo3ro eo3s4 eo5st e4ot eo5te e5o3t4h e1pa e3paa ep3aak ep3ac e4paf epa4k ep5ake e3pal e3pap e4p3app e3par ep3asp e1pe e5pe_ ep5een e5per epers5te_ e1pi 3epid ep3ijs ep3ijz ep5ingr ep3ins epit4s epits5te ep1j e1pl ep3led e4p3lod e5ploe ep3lus e1po e4p5o4ge epoort5j epoot4j 3e4pos_ e3pot epou4 e1pr ep4ra e3pri ep5rode eprot4 ep2s ep4s5ee ep4ser eps3l eps5n eps3p eps3ta eps5taa eps5tal eps5to eps3tr eps5tro ep4tak ep2tj ep4tr ept3ra ep5tro ep3uit 4equa e3ra_ e1raa e5raad e4raak_ er3aan er5aanp e4raap_ e5raat e4r1ac e5rac_ e5race e5raco e3rad e5rad_ er3ado er3af e3raff era4gen e1rai e4r3all er3ama er3ana e5randa e5rane e5ra3pl er3arc e3rare e3rari e1rat4 er3a4tr er3azi er3d2a er3d4i erd4o er3d2r erd5uit_ er3d4w e1re er5eat 4erec er5editi er3een e5reep er5eers er3eet er3ef er5eff er5eg_ er3egd er5egg er5egt er3eie er3eig er3eil er5eind ere3kl er3elk e4r3emm er3emp e3rend e5rendel ere4ne eren5eg er5enen_ e3renm e3rent er5enth e5rento eren5tw ere2o ere4og er3epi er3e2q er3eri e3res_ er3esk e3ress ere4st ere4t3j er3etn e4r3ets e4r5ex erg2l e3ri eri5ab e5rif e5rig erig5a er3ijl er3ijs e4rijs_ er3ijv e4r3ijz e5rik er5ind e4r3ini er5inkt er3ins er3int e5rio e5ris erkeers5 er2kn er3m4i er5mo er5nu e1ro_ e3rob er3oc e4r3oed er3oef e5roep eroe5tj er3oev er3of ero2g e3rok e1ro2l e5rol_ er3oli e5roll er3om er1on e3ron_ e3rone er3onv er3oog er3oor e5roos e4r3op erop3a ero5pen e2r3or er1ov er3oxi e3roz e3r\xc3\xb6 er4plu errie5tj er3scr er3sj er5slag er5span ers4pot er5stem er5te er3t2h er5t4i er5t4o er3tr ert5se erts5l er3t4u er3t4w e1ru e3rub e3rug5 e2rui er3uit erui5t4j e2run e3runs e4r3ur e3rus er5uu 3ervar 3erwt e4saf e4s3a2g e3sam e5san es3ap es3arr e3sa3s e3scop e3s2cr es4e e5sec es5een e5sel es5ene e4s5eng es5ex es2fe es5he e4shi e3sid e3sie es1in e4sir es5je_ es5jes e3s4jo es5jon e4s3ka es5kr e3sl es4la e5sla_ e5slag es3lak es5lat es4le es5leg es2m es4mui e5smuil_ e1sn e3s4ne e1so e3sol es4oo es5oor_ eso4p es3ore e1sp es5pas es4pel espit5ste e3spl e4sprie esp5riem es4sm e3stak e3s4tal e3stap es4tar es5tatie e4s3te_ es4tea es4teel est5ei_ e4steka es5tekam e3s4tem es5temo es3ten e4sten_ es5tenb es3ter estere5o es5tes es4tet e3steu es4tic e4stie e3stot es5tra_ es5trac es5trak e5stral est5rap es5trei est4sc es4tur e3sty e3su esu4r e3sy e1ta e3ta_ et3aan et3ac et3ad et3afz 3e2tag e3tak e5tak_ et4ana e5tand e2tap e4tapp e5tat e4tau e2tav e3te e5tea et3edi e5tek 4etel e5tel_ e4t5elf e5tels et5emb et5emm etens5u eten5tj ete5r4a ete3ro eters5la eter5sm e5tes e1th et3ha et3hor et5hu e4t5i4d e5tie e4t3inc e4tiq e5tis e4tja e1to e5toc e3toe e5toev e3tol eto4p et3ope et3opl e4t3ork eto3sf e1tr et3rec e4t5res e3troe e5tron e5troo etros4 e4t3ru et4sl ets5lap et5slu ets3n et4s3oo et3spe ets3pr et3spu et4ste ets5tek et5sten et5sti ets4u et5su5r et5suu e1tu etui5tj etu4r et3we et2wi 1eua4 1euc eudi5o eu5dr eu3e eugd3r eu3g2r eu4ler eu4li e1um e3um_ e2umd eu2na eun3t 1eu1o eu2po eu4rad eu4rec eu3ren eu4res eu4rij eur5k euro5v eur4sta eurs5taa eurs5te_ eur4s5tr eur4su eu5sch eus4p eu3spa eu4st eu5str eu3tj eu1tr e3uu 2euw eu4wa eu5win euw4str evaar5tj eval4s evari5 eve4lo evel5op eve5n4aa 4ever eve3ra 4e1w e5wa e5we ewen4s ewens5te_ ewest5r ew2h e5wi ewo3v 4ex_ 2ex3aa ex3af 4exco 3exeg 3exem 4exi ex3in ex5op 1exp e3y4o eys4 ey3st e5za e3zee 4e3zen ezers5 e3zo ezz4 \xc3\xa93a \xc3\xa91d \xc3\xa9dee4 \xc3\xa9di3 \xc3\xa91g \xc3\xa9gee5 \xc3\xa93h \xc3\xa93j \xc3\xa93n \xc3\xa93p \xc3\xa93r \xc3\xa91t \xc3\xa81 4\xc3\xa8c \xc3\xa82l \xc3\xa82s \xc3\xa85t \xc3\xa8ta5 \xc3\xaa1 \xc3\xaa2p \xc3\xaa3per \xc3\xaa5t 3\xc3\xab 4\xc3\xab_ \xc3\xab2b \xc3\xab3c \xc3\xab3d \xc3\xabe2 \xc3\xaben3 \xc3\xab3j \xc3\xab1l 5\xc3\xabn \xc3\xabnce3 \xc3\xabn4e \xc3\xabns2 \xc3\xabn5sc \xc3\xabnt2 \xc3\xabn5th \xc3\xabn5tw \xc3\xab3p \xc3\xab1ra \xc3\xab1re \xc3\xab1ri \xc3\xab1ro \xc3\xabro1g2 \xc3\xabro3s \xc3\xab2s \xc3\xab3si \xc3\xabs3t \xc3\xab1t \xc3\xabt4s \xc3\xabts3te \xc3\xabve5 \xc3\xabven4 4\xc3\xabzu 4f_ 1fa f3aanb f4aat 3fab fa2bo f3acc face4 f1ach 2fad 2f1af fa3g fal3s fa3m f3ang fant2 fan4t3j fant4s5 2f3a2p f4arm 3fa5se fa2to fa3v 4fb fbe5dw f1c 4fd f3da fda4g f5dan fd1ar fde4k fdek3l fde4s3 fdes5e fdes5l fde5sm fdes5t f2d3in fd3of fdors5te fd4ra f3d4ru fd5se fd3si fd3so fd3sp f4d2w fd3wo 1fe fe2a fec4tr fede3 fe4del f3een 5fees feest5r fel5dr fe4l3ee 3feli fe4lom fe4l3op fel3sp fe3no f4er fe3rab fe3ran fe4r3et fe3rom fe3ron 3fes3 fe4t3j fetu5r 2f3ex 1f\xc3\xa9 3f\xc3\xa8 3f\xc3\xaa 4f1f f5fe f5fi ffs2 ff3sh ff3si f3fu f3g2 fge3 fge5r4 fge5t 4f5h 1fi fi5ac fi4al fi3am fi3apa fi3apo fia4s 3fib fi1ch 5fie 5fig f3ijs 2f1ijz fik4st 3f2il fil4m3a film5on fi3lo 4find 3fini f3inj 4fink 2finr fi3o fi4r fi4s fi5se f5iso f1j fjes5 4f1k4 f3ke f2l2 4f3laa f1laf f4lam f3lei flen4st flens5te_ f4les fle2t flet3j 4flev f4lex f3lez 2flie 2flij f4lik f4lip f4lit f3lok 3f4lor flu4t3 4f1m f1n 1fo 3fob 5foc foe5d foe5ta 2f3of 5fok 2foms fo5na fond5en fonds5l fon5eng fo1no 4font fon5te foo4 fooi5 f3oom 5foon 2fo4p fop5s4 f4or 3fo5re fo5ri 5form for4t3j fo1ru fo3t 2f3oud 4f1ov 3f\xc3\xb6 4f5p4 fpers5te_ fpits5te_ fr4 f4raak_ fraam5 5frac f3rad f2ras 5frau f1rec f3rek 5freq frie4s frie4t friet5j f4rik f4rod 4f3rol f4rolo f3roma frus3 4f1s f2sa4 fs3ad fs3an fs3ar f3sc f5sch f4scr fse2 f4s3ec f4s5ee f4sei f4s3eth fs4fe f2sh fs5he f2si f3sie fs3im fs1in f5slaa f5slac f5slag fs3lap fs2m fs3ma fs4mi fs3mo fs3mu f2s1o4 fs3ob fs3om fs4oo fs2p fs4pre fs4t fst3as f3ste fs5tec f5stell fste4m3 f4sterr f3sti f5stif f3sto f4st3oc f4ston f3str f3stu f3sy 4ft f1ta ft1ac fta4kl fta4p ft3art fter5sh ft3h f1to f5tond f4tont f1tr ft2s3l ft4sm fts3n ft4so fts3p f1tu ftu4r 1fu 2fuit fu4ma fum3ac 3f2un fur4o 3fus 2fuu 4fv fva2 fval3 4f1w4 3fy1 2fz fzet5 4g_ 1ga 3ga_ gaar5tj g4aat 2g1ac 4g3adm g4af_ g3afd ga3fr 4g3afs 4g3afw 2g3a4h 4gal_ ga3la ga4l3ap ga5ler gal3s 4gamb g4a3mi 3gan gan5d 5gane gan4s5t ga3pl 3gar_ 4g3arb ga3re g1arm 3gars 2g3art gar5tj ga4s gas5c gas3i ga5sla_ ga3sli ga5slo gas3o gas3p gas3tr gas5tra gast5rol 3gat gat5j gat3s 4gaut ga5ve g1avo 2g5b 2g1c 4gd g5dac g5dag gd3art gd3at gd5ate g3de g4d3elf g5der_ gd3erv g4d3id gd3im g2din g3dr g5dru gd3sa gd5sp g3du 1ge 3ge_ ge3a gea3dr gea5na gea3q ge4ari ge5au 4g3eb_ 2gebb ge3c ge3d4 gedi3a ge4dit ge5dr ge5dw 3gee4 geest5r geet3a ge3f4 2g3eff ge5g4 gege4s 4geig 2g3eik gei4l5a 5geit geit3j ge3k4a ge3ke ge5ki ge5k4l ge3kr gek4st gek4u ge3k4w ge3lau gel4d3a4 ge3l4e 4ge4lem gel5f gel5k 5ge3l4o gel5si gel3sl gel3sp gel5ste ge5ma 4gemb 4g3emf ge5mo 2g3emp gems3 ge3m4u g4en_ ge3nak gen4az 3ge3ne ge4n3ed ge4nend 4g3engt 3geni gen5k ge1no ge4n4of ge4nog gen5sfe gen5ston gen5stu genstu5r 5genw ge5om geo5pe georke5 ge5os ge5ot ge5p4 ge1ra ger5aal ger5aap_ ge4r3a4l gera4p ger5ape ger5as_ ge5reg ge3rem ge5ren_ ger4i ger5ini ge1r2o ger4of ge5rol ger5slan ger4sli gers5lij ger4sp 4g3erts ge3r4u 3ge1s4 ge3sa ge3sc ge5se ge3si 4ge3sk ge5sl ge3sn ge3so ge5spend ge5sper ge5spo ge5stan ges5te_ ges5ten_ ge3str ge5sw ge3ta get4aa ge5tam ge2th ge5t4i ge3t4j get4o ge3tr ge5tra ge5tro ge5tru ge5tsj ge5tu ge5t4w ge3ui 5g4ev 4gex 5g4ez 1g\xc3\xa9 g\xc3\xa9di4 3g\xc3\xa8 4g1f gfijn5ste 4g3g4 g5ge gge3la gge4r5on gges5ti g4g5h g5gi ggings5 g5gl 2g1h g2het ght4 gh5te g2hum 1gi gids5te gie5ra gier4s gi1eu gi2f gif5r gi3ga 5gigere 5gigste 2gij g3ijs 4gijz gi2m gi3na 4g3inb 4g3inf g5infe g5infr 5ging 2g3inh gin3o 2ginr gi4oc gi2od gi4onet gi2or gip4st 5gir 3gis 4g1j 4g1k gl4 g5lab 3glai 1gla4s glas3e g5lat 3g4laz 3gle_ g5leer glee5t g3len 2g5lep 4g5ler g3les 3gle4t glet3j g5lev g5lice g5lich 3gli\xc3\xab g2lif g5lijs g2lim 3g4lio g2lob 3glof g5log 3glom 4g3lon g3loon g3lop 3g2los g5loz 3g2ly 4g1m gmaat5j 2g1n g3na gn4e gne5g gne5m gne4t3j gnie4tj 4gnu 1go 3go_ 3go2a 3gob 2goc g1och go4d3a god4s3 gods5t 4goef goe1r 2gof go3f2r g4og 4goh go2k 5gom_ go2ma g3oml 4gomz go4n3az 2g3ong go5no 2g1ont g2oo 2g3oor 3goot 2g1op go3pa g4opr g4ora 4go4re go5re_ 5g4ori gor2s gos1 go3tr gou4d5ee 2g3ov 2g5p gpes3 1gr4 3gra 5gra_ graat5j g5rak gra2m g4ram_ gram3a g3ramp gra4s3 5grav 2g3rec 2g3red 5gredi g5redu g3reek g3reel g4reep g3reis 4g3rek 2g3rem gren4s gre4s g4reu g3rev 5gria grie4t5j g5rijd g5rijk g5rijm g5ring 5g4ris grit5s 2g3riv groet5j grof5 g3rok g3rook g3room groot5j 2grou gro5v 2g3rug g3ruim g3rup 4gs gs1a2 gsa4g gs5alar gs3alt g2sc gse4 gs3eco g4s3ed gs5een gs3ei gs3en gs5ene gs3erv gs3et gs3ev gs5he g2s1i2 g3sie gs5is gs1j g3s4ke_ gs3l gs4la gs5laag gs5lam gs5las gs1le g3slep g4sleu gs5lie gs4lin g5sling gs4lo gs5log gs5lok gs5lon gs4lu g4s5ma gs3n g4sna g3snij g4s1o4 g5sol g5som_ gs5ons gs3op gs3p gs5pand g3spec g3s4pel g3s4pet gs4pi g3spie g3spil g5spin_ g5spinn gs5pir gs5pol g3s4pon gs5ps gs5q gs5sc gst2a gs5taal gst5aang gs5tac g5stad g5s4tan g4st3ap g5stat g1ste g5s4te_ g5sted g5stee g3stei gs3tek g5stel g3sten g3ster g5ster_ gs5terr g5sters gs3th g5s4tic g3s4tig gs5tijg g5stof g5stop g5stor gst3o4v g4s3tra gs5trad gs5trak gst5ram gs5trap g5strat gst5res gs5troe gs5tron g4stru g5struc g3stu gs5ty g2s1u4 gsver3 gs5w g5sy 4gt g1ta g2t3ap g3te gte3ro gtes4 gte3st g1to g3tr g1tu 1gu 5gu_ 3gue gu4eu 2guit gu4ni gu2s3 gut4st guts5te_ 4gv g5vo 4g1w g5wa 1gy 4gyp 2gz 4h_ haams5ta haar5sl haar5sp haars5te haar5tj haats5te_ h3afd haf4t3u ha3g ha5ge hal2f1 5hals hal4sto 5halz 2hamp 4han_ han4dr hand5sl han3ga hang5l hang5s han4s3l han3so han4st hap2s hap4se har4ta harte5l hart3j har4t3o4 har5tre hart5sl hat5j ha2t3r hat3s ha3v 4have_ 4hb 2hd h4e 2hea he2ar 3hech he3co 4hee_ hee3g4 hee4k heek3a heek5l hee4l3o heep4s heeps5c heers5tak hee5sto hee5tjes he2f he4i heids5p heis4 hei5tj he2k3a he2kl hek4st heks5te_ hek5sten hek3w he3le he4l3ee he3li hel4m3a helo4 hel4p3a hel3sm he5mo he5ne hen4kr he3n4o 4he5o he4pij he2p3l he2pr he1ra her4aa he4r3ad he3r4au he4r3i herm5eng he3ros hero5v her4p5aa 3herst hert4 herts5te he2ru he5se he2sp he2s5t hets5te_ heu5le 2h3f 4h5g h3h hi5d hie4f3 hielsges5 hie4r3 hie5ren hier5u hie4t5o hie4tr hiet5s hij4sl hik4s5 hi3kw hil3m him4pl him4pr hin5d h3ins hin4t3j hi2p5l 2hir2 his5p hi3tr hit4st hits5te_ hit5sten h3j 2hl h3la h4lag h3lep h3loc 2h2m h3ma h3me h4mer h1n h2na hno3 2ho_ ho3a hoa3n hoboot4 ho3ch hoe4ker hoe4s hoes5l hoe3t ho2f hof5d hof3e ho3g2 ho2ka ho5mo hon3dr hond4s hon3g honi4 ho1no hool3e 4hoom hoort4 hoor5tr 2hoot ho3pa ho1pe ho2p3o hop3r hop4str hor5de 5horl ho3ro hor4st hors5te_ hor5sten hor4t3j ho3ru ho3sa hot3j ho3tr ho4t3re hot4st hots5te_ ho3v 2ho4w how3o 2h1p hpi4 2hr hra4b h4re h5rea hri4 hro2k hrok3o hroot3 4hs h3sa h3sp h3st 2ht h4t1a2 ht3ac h3tal ht3ala h5tans h3te_ h4t3ec ht4eco h2t3ee h2t3ef h2t3ei ht5em h3ten h4ten5t ht5entw hter3a hte4r5o h4t3esk h4tev ht5eve h5tevo ht3ex h2t5h h4t3int h2t1j ht1o4 ht5oef ht5op h4t1r ht5roo ht4sap htse4 ht4ser ht2si ht4sl ht5sla ht5slot ht3sme ht5smij ht4s3o ht3spe hts3pl ht3spr hts5taal ht4s5tak ht4s5tek ht4sti hts5tore hts5trekk ht1u2 ht3w hu4ba 3huiz hul4der hur4t5 hut3j huts5te_ huur5s 4h1w hy4la 3hyp hypo1 4i_ i1a i3aa i4ab i5abi i4ac i3ady i3ae i5ae_ i2a3f4 i2a3g2 i3agr i3ai i5ak_ i3ake4 ia4kem ia3kl ia3kr i3al_ i4a3la i3ali i2am i5am_ i3ami i3an ian4o ia3o i2a1p4 ia5pa i5api ia3sc ia5se ia3so ia4s5po ia3sta i3at ia3t2h i5atri iave4 i5ble iboot4 4ic i3ce 5i4cepa i1cha i1che ichee4t i1chi i1cho i3chr ick5l icos4 ic4t3op ict4s5c i3dam idde4r5a ide3a i4dee_ ider4sp ider4st ides4 idi3a idi5ab i2di5o id4mak i3dok i2dr id3ran id3ru id2s1 id4s3a id4ser ids5i ids5j ids5l id4sm ids5ma id5s4mee id4s3o ids3ta ids5tak ids5tek id4stem id4sti ids5tr id3u4r id3uu idu3w id3w 4ie ie1a2 ie4d3ac ie3de ie4dro ied3w i1ee4 ie\xc3\xab2 ie3fi ie2fl ie3fle ie3fon ie4fr ie4gas ie3ge ie4g5ins i2ek iek3e4v ie4kl iek3li ie5klu ie2kn iek5ond iek4s5n iek4sp ie2ku ie3kwa ie5lan ie5lap iel5do iel5d4r iel4e iel5ei_ iel5k iel3sc ie3ma iem3ov ien4dr ien3ij i3enn i5enne_ ien3s4m ien5sp ien4sta ien4st5o ien4str ienst5ur ieo4 i4ep ie5pen iepiet5 iep5oog iepou5 iep5rel iepro4s iep3s4 iep5st iep5tr ie4pui ie5r4ad ier3a4l ie3ram ie3rap ier3as ie4rat ier5el_ ier5els ie5ren_ ie5ring ierk4 ie3r2o ie4rof ier4sl ier5slu ie3ru ier4ui ie3sf ie2si ie4sl ie5sle ies3li ies3m ie2s3n ie2so4 ie4s3pl ie3sta ies5te_ ie5stel ies5tere ie3sto ie4taa ie5tal iet5ant ie5ten ie3tj ie3to4 ie4t3og ie4too ie4top ie4tor ieto5re ie4t3ov ie5troe iets5te_ iet3ur iet3uu ie3twi i3ety ie2u ieu3k i1eur ieu5r4e i1eus ieu3sp i1euz ie3v ie3z iezel5a i3\xc3\xa9s i1\xc3\xa9t i1\xc3\xa8 i4\xc3\xabg i4\xc3\xabva 4if if3aa if3ad if3l if3r if4ra if4taa if4tar if4tre iftu5r if3ui ig4a ig3aa ig5ac i5gal i4g5av i3ge ige2s ig3esk ig3ij i4gind igi3o ig5no i3g4om ig4op igs4 ig3sk ig3sl ig3sp ig3sto ig3un i1h i3i i5ie ii2n i5is i2j 4ij_ ij5a ija4d 4ijd 4ije ij3ef ij3ei ij3el ij5e4n3 ij1er ij3i 4ijn ij3o4 i3jou 4ijso 4ijsp 4ijst ij5te ij4tr ij5u 4ijvo 4ijzo 4ik ik3aar i4kam i3ke ik3ef ike4ra iket3 i2kij i3kl ik3la i4k3lo i4k3lu i2k4n i4k5na ik5o2g i3kom i2koo iko2p ik3ope ik3ord i4kr ik3re ik3ri ik3ro ik5se ik5si ik3s4l iks3n ik3sno ik3sp ik4spa ik1st ik5sta iks5te_ ik1w ik5war i1la i3la_ il4aa il5aan il3ac il4act il3ad il3af i3lak il3al i5land il2da il4d3r ilds4 4i3le il3een ile3l i4l3erv ile4t ilet5r ile3u il3e4ve ilevin4 i4l3e2z i3l\xc3\xa9 il5f i3li ilie5g ilie5t il3ink ilk4l ilk3s2 illa3s 1illu il2m ilme2 il4min il4mo i1lo ilo4ge il3ond i3loo i5loon il3oor il1or ilo4re ilo4ve il3s2h ils5j il4sti il2th i1lu 4im_ i2mag i4mago im5au imee4 im3een i4m3em im3enc im3ex 4imf i2m3of im3op im3org im5pa im4s3oo im1st i3mu in1ac i2nau ind4aa in4dene ind3sc ind5ste 1indu in3e4de in3edi in3eed inek4 ineo2 inet4s i5neu 1inf in2ga4 ing3aa ing3ag ing3al 3ingan ing5lo in2go in4gr ing4st 4ini_ i3nie ini5on ini5sl ini5sta 4inkj in2kn 3inkom in4kri 3inno i1no i3noc i3nod in4o2g in1on ino5pe ino3s4t in3ov 1inri 4ins_ in5sch in5se in3sl in3smi in3so in1sp in5spo in5sten in5swi in4t3ap in5te intes5 in3th 1int4r i1nu inuut3 4i1o io5a ioas5 io5b i3o1c i3ode ioes3 io3f io3g2 i3ol i5ol_ i5olen i5olus i3on ioneel4 i5ong ion4s3 ions5c i5oo i2op4 io3pa io3pr i3opt io3ra i3ori io3ru io4s i3os_ ios3c i3o5se i3o5sf io5sh io5si i5osi_ io5so io5sp io5s4t i5o5su i3osy i5othek i3oti iot3j i5otorens io3tr i2o3v i3ox i2oz i1pa i2p1ac ip3af i3pap i1pe i4perw ipe4t3j i1pi ip1j i1pl ip3lu i1po ipo4g i1pr i2pri ip3ru i4ps ipse4 ip4si ip4sle ips5te_ ip5sten i3ra ira3k i1r2e ires4 ire3st i3r\xc3\xa9 i1ri irk4s i1ro iro3p iro5v ir2s ir4sc ir3sp ir5ste irt3r i1ru 4is i1sa i2saa i4s3ad is3a2g is3ap i2s1ar i2s3as i4sc i5scha i5schr is5col i5scoo i5scope ise2d i4s3ei is3ell is5eng i4s3erv ise3st iset3j is4fee is4fer i4sh is5ho isi2d i2sij i2s3im is3ja i4sk is3ka is3ke is3l is5lag is5las is5le i4s5m i4s3n is5ned is5nij is5no 5isol i4soo is4oor iso3s i2sot is3ott is3p is5pas is2pi is5pl is5q is5sa is5so i2s3t is1ta i3stak ist3ap i4s5tas is4tat is5terd is5tere is4th is1to ist5ong i3str is5tri i5stro_ i3sty isu2m i5sy 4it i1ta it3ac ita5d it3een i3ten i3ter ite5rei ites4 ite3st ite4t it3hie it1ho it1hu it2i itie5st i4tj i1to it5oef it3oog i3t2ou i4to4v itper5st it3red it1ru it3sje it3sli it3sop it1sp its4te it4ste_ it4too i3tu it3w 4i3u2 iu4m ium3a4 ium3e ium3o iu3r i3ve iven5s ive3re i5w iwi2 iwie2 iwit3 4iz i3ze ize3t \xc3\xae3 \xc3\xaet4 1\xc3\xaf 2\xc3\xaf_ \xc3\xaf5a \xc3\xaf1c \xc3\xaf1d \xc3\xafe4n3 \xc3\xafe5nen_ \xc3\xaf2n3a \xc3\xafns5m \xc3\xafn3sp \xc3\xafn3u \xc3\xaf3n4ur \xc3\xaf3o \xc3\xaf3ri \xc3\xaf3ro 4\xc3\xafs_ \xc3\xafs3a \xc3\xaf4sc \xc3\xaf5sche \xc3\xafs3l \xc3\xaf3so \xc3\xafs3t \xc3\xaf1t \xc3\xaf5z 4j_ 1jaar jaar5tj ja3b 2jaf 1jag jagers5 ja3kn ja3mi jan4s3l jan4st ja3pl ja1po 1jar jare4 1jas3 jas5p 3jaw jaz4 j3b jba4l jbe4l3i j1c jda2 j2d3aa jd3an j4d3ar j2d3ee jde4n3e jden4s jdens5p j4d3erv jdes4 jde3sp jde5st jdi3a j2do4 j3dom jd5on jd3op j3dr j4d3re j4d1ri j4d3ro j4d3ru jd5sei jd3spo jd1st j2d3u jd3w j3d4wan jea4 3jeba je3ch jec4ta 2j1ee jel4 je3la j1en je2na2 je3n4o 5jep jepiet5 je3ro jers4 jer3sp je4s3 3jesa 5jesal je5sch 3jeskn jes5l jes5m jeso2 jes5pa jes4pr 3jesr jes5tr 5jesvo 3jeswa 3jeswi je2t jet3er jeto4v jet5st 5jeu 3jevr 2jew j3ex j2f1a j2f3ei j2f1en5 j4f3ij jf3ink jf3l j3f4lat jf5le j2f3o4 jf3r j3f4ra j3f4ro jf2s jfs3a jf4sc jf4s3er jfs5f jfs3l jfs5m jfs3n jfs3p jfs5pa jf3st jf4sta jfs5tak jf5stan jf4stel jf4sti jf4s5to jft2 jf5ti jf5tw j1g j3ge jger5sl j2g3l jg4s5e jg3sn jg2st jg3s4te j3h jif3 j3ig jin3g ji5t2j j3j 2jk j3ka j4kaa jk5aard j4kar jk3arb j4kau j4kav j2kij j2k4l j3klaa jk5lak jk5lap jk5las j4kle j5kled jk5les jk5li j3klon jk5lop jk5luc j2kna j2k3of j4k3o4l j2k3on j2ko4p jk3opb jk3ope jk3opl j3kops j2kr j4kra jk3raa j5kran jk3re jk3ro j4k5ru jk3slo jks3pl jk4sta jks5taak jks5taal jks5tak jk5stan j2k3ui jk3w j3k4was j1la j3laa jl5ana j1le j2l3ef j2l3el jl5f jl3ink j1lo j2loe j3lu j2m3af j5m4ar j3mi jm3op jm3s j2n1a4 j4naa jn5ac j3na5g jn3ak jn2am jna5me j3n4an jn5d2r j2nef jne4n j4n3erk j4n3erv jn3gl j4n3im j4n3ink jn3k4 j2n1o4 jn4si jn2s3l jns5lac jn3slu jns5or jn2sp jns3pl jn1st jn4ste_ jnt4 jn3tr joet3 4joi jol4e jo5lij j3om 1j4on jone2 j3op jo3pe jo3ra jo3ru j4ou 1jour jou5re joy3 j3pa j4p3ac jp3arm j1pe j2p3em jp3ij j1pin j3pio jp1j j1pla jp3li j1po j2p3or j4pre jp3ri jp3rok jps4 j3r jraads5 2js js1a j4sef j4s3ela j5seli j4s5em j4s3e4r j2s1i js5in js4ir js4le js3lee js3li js5lie js4me js5mel js5met js3n j4s1o4 j5soe js3ol js3pac js3par j3spe js3pl j4spo js3poo jspoort5j j5spor j1sta j4star j2s3te j3stee j3s4tek j3s4tel j5s4teng js3th js4tij j5stond j4stoo js3tou jst5ran j5strok j2su j3sy j3taal jt3aar jt1ac j1tag j3tak j3tan j3te_ jt1h j3toe jt3opt j3tr jt3ra j5tred j5tree jt3rei j5trek jt3ri j5trok jt3rot jt1s j1tu 1j4u ju3d 4jum jus3 juve5 j3v jve2n jver4s jvers5p jve3t jvie5s j1w jze4r5o 4k_ 1ka k3aanb k3aanl 5kaart kaart5jes kaats5te_ kabe2 ka3bo 2k1ac kade4t5 4k3adm ka3do k3adv 2kaf k3afd k4aff ka3fl 3k4aft ka4ga k3a4gen k3ah ka3i 2k3alb ka3le 5kalf kalf4s5 ka3l4i kal2k kalk3a 4kalt 5kalv 3kam 4kamb kamen4 kame4re kam4pa kam4pl kam4pr ka5naa kan5d 4kang kan4sl kan4st kan4t3j kao3 5kap_ ka3pe kap3l ka1po 4kappa ka3pr kap3s k3arc k4a3ro kart4 4k3arti kar3tr ka4s kas5c 4k3asi kast3o4 ka3str kast5ra ka5stro kas3u4r kat5aal ka4t5a4le ka4tan kati4 ka4t5io kat5j k3atl kato4 ka4t3og ka5tr kat3s 2k1aut 2kavo 2k3b 2k1c k3ca 2k5d kdi3a 1ke k4eb 2k3ec ke4di 2k3een kee4p5l kee4r keer4s keers5to 2kef 4keff k4ei_ k4eie k2eil kei3s4 kei5t ke4lap kel5da kel5dr ke5lel 4kelem kel5f ke4l5int ke4lom ke4l3op kel3sp 5k4ema 2kemm 2kemp ke4n3an ke4nau ken4ei_ ke5nen ken5k ke2n1o kens5po kepie5t 4k3e4q ke3ram ke4r5enk ker3kl ker4kle ker4kn ker4k3r ker4ku ker4kw ker4n3a ker4no ker3o4 ke3ros ker4sm ker5spe ker4spr ker4sta ker5ste_ ker4sti 4k3erts 4kerva 4kerwt ke2s ke3s4p ke3sta kes5ten ke3sto ke5straa k2et 5ketel ke2t3j ke3to ke2t3r kets5te_ ketting5s 4k3e2tu ket3w 3k2eu keviet5 ke4vl 4k1ex 2k3e2z 2k1f 2k3g 2k1h4 k3ho khoud5s 1ki 2ki2d 4kied kie4sp kie4s4t kie5ste kie4tj kieze4 2ki\xc3\xab kijk5l k3ijs 4kijv 4k1ijz ki3lo kilo5v ki3na 4kinb 4k5indel kinds5te_ 4kindu kin3en 5king kings5l 2k3inh kinie4 k3inko 4k1inr 2k1ins 2k3int 4k3inv ki3o ki2p3l ki5se ki3s4p kit4s kits5te k1j 2k3ja k3jew k3jo 2k3ju 4k5k4 kke5nei kker4s kkers5ten kke3st 1k2l4 5klac k3ladi kla2p1 k4las 5klas_ 5klass k3last k3lat_ k3latt 3k4lav 3k4led 5kledi 5kleed k5leer_ 4k5leg 5klem 4k5len k3ler_ 4klera k3lers k3les 5k4le4u k5lic 4klid k3lig 2k3lij 4klijs k4lim kli4me 3k4lin k5lob 4klod 3klok 5klok_ k5loka k3loke k3lood 5kloof k3lope 5klos klots5te_ 2k5loz 4kluc 4kluih 2k1m k3ma 1k2n4 4knam k4nap 3k4nar 5knec k5nem kni2 5knie_ knip1 4k5niv 3knol k3note 2knum 1ko ko4bl k4oc 2k5oct 4k1oef 5koek koe4ket koers5p koes3 koe3tj koets5te_ koge4 5ko5gr 3k4ok ko5ko kol2e2 kolen3 2kolm 5kolo ko4ly ko2m3a 4komg kom5p k3omsl kom4str 4komz konge4 k4oni k3ontb kon4t3j kon4t3r koo4 2k1oog kooi5tj koot3 koot4j ko3pa 4kopb 4k3opd ko1pe ko5pen_ 4kopg 3ko5pi 5kopj ko2pl 2kops 4kopz 2kord kor5do 2k1org 2k3ork kors5te_ kor4ta kor4t3o4 kor4tr ko3ru 3k4o4s3 4k3os_ kos4j ko5sjere koso4 4koss kot4st kots5te_ 4k1ov 4k3ox 2k3p kpi3s k4plam kpren4 1kr4 3kra k5raad kraads5 kra4b 4k5rad k5rand 2k1rea 2k3rec 4k3rede k4ree4 k5reep kreet3 k3ref k2reg 2k3rel 2k1ric k3rijk k3rijp krij4t krijt5j k4rit k5ritm kroet5j 2krol k4ron kron3t 5kroon krop3a kro4to 2krou k3ro5v 3k4ru k5rub 5kruis kru4l krul5a 2ks k3sal ks3alm ks3an ks3ap ks1ar ks3as ks2e2 k5sec ks3ed ks5ei_ ks3ep k4serv ks3et kse3v ksges5t k4si k5sil ks1in k5sis k5sit ks1j k1sla ks3lab k4slan ks3le ks3li k4smo ks3na ks3no ks3nu kso4 ks3om k5song k2s3pa ks5pand k4spar k1spe k3spi ks3poo k5spor ks3pot ks3pru k3spu ks5s ks4t k1sta k5staan k5staat k1ste ks5tec k4st3ed k3sten ks5tent kste4r kster5a k4sterr ks3th k3sti k3sto ks5ton k5stoo k4stop k5stot ks5trek ks3tri k3stue kst5uit k1sy 4kt k1ta kt3aan k3taar ktaat5 kt3ac kt3art k3te kte2c kt3eco k4tex kt1h k5tij kt3im kt3in k5tit kt3j k1to kt3om kto4p kt4or kt5ord kt5org kt5ori kt3o4v k1tr kt3res k5troll ktro3s k3tu 1ku ku5be kui2f 2kuit ku5k ku5me 3k4u2n 4k5uni 5kuns ku2r ku3ra ku3re kur3s 3ku2s kut3 2k\xc3\xbb 2kv k3ve kven4t3 5k4waal 2k3wac k2wad k1wag 5k2wal 5k2wam 3k4war k5ware 4kwat k3weer 2kweg k1wei 5kwel kwen4st kwens5te_ 4k1wer 5k2wes1 kwes5tr 5kwets k2wie k3wijz k4wik 2kwil 2kwin k3wind 4k1wo ky3 2kz 4l_ 2laan 4laand l3aanh laa5re laar5tj laat5sta l3abon 2lac la4ca 5lach_ la4cha 5lache lach5te lacht4s l4aci la2d5a la4det 2ladj 4ladm la2d3o 4la2dr lad5s la2du 4ladv 3lae3 2laf la2fa la3fl lafo2 4l3afs la2g3a la4gent la2go lag3r lags4 lag5sa la2k3a la4ki la3kr 2lal 3lald lal4o lam4p3j lam4p5l lam4po4 lam4s3p l4an 4la2na lan3ac 3land lan4da land5aa lan4d5oo lan4d3r lands5te_ la4n3ec lanel5 5lange_ lang5l lang5sp lang5sta lan4k3a lan4k3l lank3w 4lann la4nor lan2s lans3l lan4st lan4t3j lap3ac la3pi lap3l lap3o4 la5pre la2p3u la3q lar3da 2larm 4larm_ lar5st las3a4 lase4 la2si las3to 5lastt la3te la4t3he lat5j la4t3ro 4lats4 lat3sl 2lau 5lauf lau4st l2auw la3v lava3 la4vo 5law l4az 4lazi la4zij 2lb4 lber4t lbert5j lboot4 2l1c lce4l5 4ld ldaat5 l2d3ac ldak4 ld3alf l4da4r ld3arc ld3ari ld3art l2dau ld3eco ldeks5 l4d3e4z ldi3a ld5oef ld3oli l2d3om l2d3on ld3oog l4do4p ld3opi ld3ord ld1ov l3dr l5drade ld3ram ld5rang ld3rat ld1re l5dree ld3rij ld3roe ld3rol ld3rom ld3rui ld3sa ld3sl ld3sma ld5sp ld5ste l3du ld3uit ld3uu ld1w le2a le4ane le3at leba4l lecht5st lee4 leeg3 leege4 leeg5i 4leekh lee5l leem3 3leen 4leep leep3o lees5e lees5l lees5po 2leeu 2leff lega5s leg3ec leg3l le4go le5go_ leg5s 3leidi 4leier 4leig lei5tj leit5s le4ko4 4leks lek5str 5leld le2le 5leli l3elp le4n3a4d len3a4k 3lene le4n3e4m len5kw le2no len3op len3sf len3sm 4l3en5th le5o 4lep_ 3le1ra le4r3a4k le5rei le4r3e4v ler5g4 le3r4o le4ron ler4sl ler5spo 4l3erts le2s le4sa le3sc les5et le3s4h les3m le4sp le3spe 4l3essa les3t les4ta les5taa le5s4tel le3str le4s3u le4t4h le3tha let4i le5tin le4top le2t3r le3t4re let4st lets5te_ le2t3u leu3ko leum3a leur4o leus4 leu5ste 5leuz leven4s levink5j 4lexc 4lexp l2fac l3f4ag lfa3s l2fau lfe4n l4f3end lf3ene l2fe2z lf3li l3f4lo lf3lu l4fo l5foe lf3o4l lf1op lf5ord lf5org l5fou l1fra l3fru lfs5ei lf4sl lfs3le lf2s3m lf4so lft4 lf5ta lf5tw lf3uu 2l1g l5gaar l4gap lge4n5a l3gla l3g4oe l3gog l3goo lg3s4 lgse5 4l1h 1li li3ag li3am licht5st 3lid 5lid_ 5lidm lid3s4 lie4g3a lie4gr lie3ka lie4sp lie3s4t lie4to li3eu 3li\xc3\xa8 3lift l4ig li3go lijk3a lij4m3a 4lijmv 5lijn 4lijp 3lij2s lijst5a 4lijt 4l3ijz li5kr lik5sp li4kw li3kwi lim4a li3mi 2limp lim4p3j lin4da 4linf 4l3inh li5ni lin4k3a 3linn l3inna 2linr 2l3ins lin4t3j l3inv 4linz li3ob li5om li5o5s4 li3ot li2pa li3pi li2p3l li5see 2liso l5isw li1t2h lit3r lit4sa lit4sl lit4st lits5te_ lit5sten 2lix 4l1j2 lk3af l4k3ank lk3arm lk3art l3ke l4k3ei l4k3em lken5e lken4s l4k3ep l3ki lking4 lk3laa lk3lag l5klas l4k3lev l5klim l3ko l5koe lk3ont lkooi5 lk3opb l5kor l5kou l5kra l2kre lk3rep lk3res lk3rij l2k3ro lk2s lk4se lk4so lk3son lks3oo lks5taa lk3ste lks5tel lks5tr l4k3uu l3kw lk3wi l3ky 2l1l l5la lla3d lla3g4 lla5tr ll3eig lle3k ll4el lleo4 ller5on lle3s4m lle5th llevie5 l3l4i l3lo llo5f l5lon ll3sh 2lm l3maa lmaat5 lm3a4ca lm3af lma5\xc3\xaf l3mak lm3arc lm3art lma3s2 lm3au l3me l4med lm3edi l4m3ep lme2s lme5te l3mi l3mo l5mog lm3oli lm3or lmro4z lm5sc lm3sh lm3su 2l3n lni4s lo3a 2lobj lo4boo loe4d5a loed3r 4loeg loe4gr loen4st loens5te_ 4loes l3oeu 5loev lo4faa lof5d2 lof4s4 log4 log5l lo3go 5logr log2s3 lo4k3ar lo2k3o2 lo4kr lo2ku 2lo2l lo3la l3oml lom4p3j lom4p3l l3omt l3omv 4lomz 3lon_ 4lond 5long lon4gaa lon4g3o lon4gr lon3o 2lont lon4t3j 3look loo5pi 3loosh loot3e lo3pa 4lopb l3opd lo1pe 2l3oph 2l3opl lop4la 2lopn lo3p2r 4lopt 4l3opv 4l3opw 2lor 3l4or_ lo3re 4l1org lo3ri l4o1r2o3 3l4ors lo3ru lo3spe lost4 los5to lo4s5tr lo5s2u lo2ta lot3a4l lo4tet lo2t3h lot3j lo4tof lot3r lou3s lo3v 2love 3lo5z 4lp l1pa l3paa lp3aan lp3a4g lp3am l3par l3pas l1pe lpe2n l2pex l3pi l5ping lp3ins lp3j l1pl l3p4la l4plam l1po lp3of l3pom lp3on lp3ope l3pos l3pot l1pr lp3ram 4l3r lraads5 lrus5 4ls l4saa ls1a2d ls3a2g l1sam ls3an l3sap ls3as l2sat ls4cor ls4cu ls3eco l4s3e2d l4sef l5sen l4s3e2p lsge4st l3s2hi l3si l4s3im l4sin ls3inj ls3ink ls3int ls4j ls5ja l3s4kel l3s2ki l1sl l3sla l2s4le ls5led ls5lee ls5leg ls5len l2s3li ls4lin l3slo ls4maak ls4med ls4mee l3smid ls3na l3sne l3sno ls3nor l3soc ls3of l3sol ls3op ls3o4r ls1ov l1sp l2spa ls3pac l3span ls3par ls4pe l3spi ls3pli l3spoo l4s5poot l3spor l2spr ls3pra l1st l3sta l4staf l4stak ls5tak_ l3ste l4stek l4stev ls4ti l3sto l5straa ls5trak l5strat l3stu ls5ty l2su l3sur ls3us l3sy 4l1t lt4aa lt1ac l4tam l5tame l5t4an lt4han l4t3hi l2t3ho l3thu lto4l lt3oli l2t3o4v l3tr ltra3s lt3rug lt3sl lt3sp lts5te_ l3tu lu4b1 lub5e lub5l lu1en 3lui_ 5luia 5luid luids3 5luie_ 2luit luk2s luks3t lu3na 3lunc 2l3u2ni lu3sta lu3ta lut3j lut4st luts5te_ lu3wi lven5s lvera4 l1w 1ly ly5i ly3st 4lz lzooi5 4m_ 1ma maas3 maat5st m3act 2m3adv ma5esto m3afl ma3fr 2m3afs 4m3afw m4ag ma3gl ma5go ma3gr ma\xc3\xaf4 ma5ka ma5ke 5ma3k4r ma3kw ma3l4a ma5lac ma4l5ent mal5st 5m4an_ man3ac m3anal man5da man5do mand4s 5m4ann ma5no 5man2s man4se mans5ee man4so mans3p man4s3t mans5ta man4th mant4r ma5pa ma3pr ma3q m4a5ri mariet5 5m4ark mar3sh mar4s5t mar5ti ma1so ma3s4po 5mass ma4ste ma3str ma5ta 5mater mat5j ma4tom ma3tr mat4st mats5te_ ma3v 4mb m5bl mboot4j mbo5st mb4r 2m1c 2m1d m5da mdi3a mdis5 m3do mdo3p m3dr m3dw 1me me1c me5de 5media 5mediu mee5g mee3k4r mee5las mee3lo mee5re mee5ri 5mees meest5al mee5stov mee5str m5eg_ me3g2a mega5s m5egd m5egg m5egt me4i mei2n mei5tj m2el me4l4as mel5as_ mel5dr mel4ko mel4kr 5melo mel3s4m me4mi 3men m4en_ me3na men4as meng5ra men5k me5nor 4menq men4s5uu men4t3j ment3w me5nu me3p2j 2m3e2q me1ra me4r5aak me4r3a4k me4r4am mer5ante me4rap me3rau me4rav mer3ei 5merk mer4kl mer4kn mer4kw mer5oc me5rong me3roo 4m3eros me3rot mer4si mer4sl mers5m mers5ta me2ru4 m4es me3s4h me4s4l mes5li me5slo mes3m me3so me4sp mes3pa me5spe me5spot me5stel mesto4 mest5ov me3stu me5ta5n me3t4h 3meti me5tr mets5te_ meve4 m3e4ven 2mex 3m\xc3\xa9 3m\xc3\xa8 3m\xc3\xaa 2m1f mfa3t mf4l mf3li mf5lie m5fo 2m5g mger4 2m1h 1mi 3mid 4mid_ 5midd mie5kl mie3st 4m3ijs 4m3ijz mi3kn 5mili mi3lo mimie4 m3imp mi5nar 2minf 5ming 4minh 2m5inr 2m3ins mi5nu 4m3inw m2is mis5f mi2s3i mi3s4la mi4st mi5stra mis5tro mi3t4a mi1tr mit4st mits5te_ mit5sten 2m1j 2m3k2 mkaart5j 2m3l 2m1m 2m1n m5na 1mo 5mo_ mo3a 5moda 5mode moed4s 2moef 5moei moers5t moe2s moes3p moes4te mog2 5moge mogen4s mo3gl 4mok 5mole 2moli mo4lie mol4m3a 4molt 3mom 4m3omv mond3r mo5no 5mons mon4so mon5ta 3mooi 2mop mo3pa m1ope m4opp mop4s mo3ra mo3r4e mo3ro mor4sp mor4st mors5te_ 5mos mo5sc mo4s5l mo3sta mo3t2h mot3j mot3ol mot4st mots5te_ 2m3oud 5mouw mou4wi mo3v m3ox 2m1p mp3ach m4p3af m5pan mp3arm mp5arts m4p3ec m5pen m4p3erv mp3ins m3pl mp3lam m5plan mp3leg mp3lei mp3lev mp3lie m4plu mp5olie m5pon mpon4g mp3ope mp2r mp3rec mp3red m5pres m4ps2 mp5sc m5p4se mp3sh mp5su 2m1r 2ms m3sam ms3ana ms3ap ms2c ms3co ms3cu ms2j m3sje m1sl m2sle ms3len ms3lie m3s2m ms3ma m1sn ms3nee mso4 m3sol ms3or m3s2p ms4t m3sta m1ste ms5tec m5stel m5sten m1sti m1sto ms5toc m4s5ton mst5s m3sy 2mt m1ta mte5re mtes4 mte5sta m1th m1to m3tr m1tu 1mu mu5da mue4 5muilde_ 2muit 2muk mul3p mu2m3 mu3no munt3j mu3sa mus5ta 5mut mut3j muts2 muts5te 3muu 5muz 2mv mvari5 mve4 mvee3 mver3e 2m1w 1my my3e 2mz mze4 mzet5 4n_ 1na 3na_ 3naal 5n4aam 4n1aan 2naap n4aar_ 4n3aard 5naars naars5tr naar5tj 5naast 5naat n3abd 5nabe 2nac na2ca nacee5t n2aci 3naco 4n3act na5d4a nad4e 3nade_ 5n4a5den 3nades 3nadi 4n3adm na5dra 2n1adv 5nae n3a\xc3\xab 4n1af na3f4lu n2a3g4 na1h 3nai 3na\xc3\xaf n2ake na3k4l na3kr n3alb 3n4ale 5nalen 4n3alf n3alm 2naly 4nalys 3nam 4namb name5st n4ami n3amp n3a2na n3ank 3nant 5nant_ 5nante n5antenn nan4t3j 2nap nap3ac 3na3p4l na3p4r nap3s nap5st 2n1arb 5nares 2n3arg narie5t 2n1arm 3naro 4nars nar4st nars5te_ nar5sten 4n1art nas2 3na3sa na1s4l na1sp na3sta na3stu n4at_ 3n4ati nat5j 4n3atl na3to nats4 nat3sp 5nau_ 5naus 2na3v 5naven 3navi 3nazif na4zij 2nb nbe5st nbe5t nbots5te_ 2n1c n3ce nces4t n3che ncht2 nch5tr nch3u n5co 4nd n5da_ nd3aan nd5aas nd3abo nd3act nd5adel nd3adr ndags5p nd3alf nd3alm n4d3ana n4dap n2dar nd3art n4das nd3ass nda3st n4dav n4d3a4z n3de n4d3edi n4d1ei nde5laa n4d3emm n5den_ ndera4 nder5aal nder5al nde4r5an n4d5e4rec nder5in_ nder5og nde4ten ndi3a ndie4tj n4dijs nd5ijs_ n4d3ink ndi3o n3d2ji n5do_ n5doc n4d5of nd3oli nd3omd n4don n5dona nd5ond n5dons nd3ont nd3oog nd3ope nd3opp nd3ov nd5rap nd3rat nd1re nd4rek n4dres nd3rot nd3rug nd3s4cu nd4sec nd5set nd3s4i nd3sjo nd4sm nd3sp nd4spo nd4spra nds5taal nd3su nd3uit n2d3u4r nd5ure n4d3uu nd1w n3dy 1ne 3ne_ ne5ac ne3am nebe4s 3neck ne2cl ne4dit ne3do n3edu ne5dw nee4 4need nee5k neel5d neel3o 3neem 4n1een nee5ri nee5se neet3a neet5o neet3r neet5s 4n1eff ne3g2 ne4gel negen5en nege4re 4n1ei 5neien n5eier n2eig 5neigd 5nei5t ne4k3r ne2la 4nelem 4nelf 3nem 4n3emb 5n4eme 4n3e4mig 4n3emm 4n3emp ne2n 3n4en_ 5nenb 5n4end_ nen5do ne4n5enk ne4ni ne5nig nen5k4 nen1o4 5nenp nen5t4a ne5oc ne5ok ne5om neo5p ne5os ne5ot nep3ag ne3pe nepi3s ne1ra nera4d 3n2e5re n3erfe 2nerg ne4r3id ne3ros ner4sl ner4sp ner4st ners5te ner3u ne3ry 3nes ness5a ness5t ne3sta nes3te nes4tei ne5s4tek ne4ter net3on net4si ne2u 4neum ne3ums neu5ste 2nex 3n\xc3\xa9 2n3f 2ng ngaat5j n2g1a2d ng3af ng3ana n4ga4p n2gar nga5sl n3gav nge4ad n4g3een ngels5te_ ng3emb n5gen nge4rap nge4ras n4giger n4gigs ng3ij n4gind ng3ink n4g3ins ng4l ng5lad ng5lam ng5lan ng5led ng5leu ng2li ng5lin ng5lop n3goe ng3of n3go\xc3\xaf n2g1on ng5oor ng5op ng3ore ng3org n3got n3gr ng3rac ng3rad ng3rai n4gras ng5rass ng4red n4g4ri ng5rie ng3rij n5gron ng3rui ng2s ng4se ngs5lop ngs5lu ng4s5ne ngs5tak_ ngs5take ngs5trek ng5stri ng3uit 4n3h nhek5 1ni n4i2d nie5kle ni3eri nie4s3p nie4tr 3nieu ni4g3ee nig3ra nij3f nij3k 2n3ijz ni5kr nik4s niks3p 3nil 3nim_ 5nimf n3imp 2n3in_ n3inb 2n1ind 2ninf ning3r 2n3inh n3inj 2ninr 2n1ins 2n1int 2n3inv ni3o ni4on_ ni4one ni5or ni5o5s4 nip3l 3nis ni4sau ni4sel ni4s3ev ni3sfe ni2s3i ni4sl nis5n ni3sot ni5stel nis5to ni3t2h ni1tr nits4 n1j4 n3je njes4 nje5sp nje5st nje3t 4n1k nk3aan nk5aard nkaart5j nk3af n5k4am n4k3arb nkar5s n4k3asp n3kef nk3eff nk3emp n3ken nken4e nker5ku nk3id nk2j nk3lad nk3lod nk3luc nk3lus n2k3na n3kne n4ko4g nk3oge nkoot5 nk4ra n4krim nk3rol nk5se nk5si nk3sl nk3s4m nk3sn nk4s5o nk1sp nk1st n4kw nk3waa nk3wez nk3wi 2n3l 2n3m4 n3n n5n2e nnee5t nne3ne nnepo4 nne4p5ol nne5te nnet4j nn4i nning5r nnoot5 nno5v 3no_ 1noc 1no3d 2noef noen5s noes3 noet5s n5offi n3o2ge n5ogi 1nogr 3no\xc3\xaf no3kl no3k2w no2li 1nolo 1nom 4n3om_ n2oma n3oml n1oms n3omv 2n3omw 2nomz 3n2on_ 3n4onb 3nonc 4n5ond n4o5ni 4nont 3nood 4n5oof 4n1oog nooi5tj 3noot3 noot4j 3no3pa no4p3as 4n3opb no1pe n1opg n5opleidi no4poo no4por 2nops 2n3opz 2nord no3re 2n1org 1norm 4norr 3nors 3norz 1nos no3sf no3sn no3sp 1not 3nota not5a4p 5noti not3j not3r 3nou_ no3v 3nova no4ve 3nox 3noz 2n1p npers5te_ npi4s5 npoor4 npoort5j n3ps 2n3r nraads5l n5re n5ri 2ns ns3a4d n3sag n1sal ns3alp n1sam ns3an n3sanc n1sap n3s4cal n5scho ns4ci n4sco nsee5t n4sef nse4g ns5ege ns3eis ns5emp n3si ns3idi n2sin n5sing ns3inj ns3ink ns3int n1sjo n1sl n5sla_ n3s4laa ns5laag n5slag ns5lap_ ns5lapp n4sle n5slep ns4let n5sleu n5slib ns3lie n5s4liep n5slim n5slip ns5lot_ ns3m ns5mac n3s4me n3smij n3smol n4smu n1sn n2sna n5sne ns3nod n4snoo n4snot n1so n2s3ob n2sof n3sol n2son ns3ong ns3onz ns4opp ns4or n2s3ou ns1ov n4s3paa ns3pad n1spe n5spee n5spel ns3per n4spet ns4pi ns1po ns3pol n4spot n1spr ns5q ns5s ns4t n1sta nst5aang nst5aans nst3a4g n3stal n3ste ns5tec n4st3ei n4s5teko ns5teks n5sten_ ns5tent n5ster_ ns5tes ns3the n1sti n3stig n4stijv n1sto nst5oef n4ston n3stor nst5rade n5stree ns5trekk ns5troe ns5trog nst5roos ns5ty ns3uil n3sy 2nt n3ta n5taal n4t5aard ntaar5tj n5tab nt3ach nt4act nt1ad nt3aga n4t3art nt4as n5t4at n3te n5tec n4t3ei nte4lo n5tem n5te2n nte5nach ntene5ten nte5rad nte4rof n3t\xc3\xa8 nt3ha n4tho n5thol n5tig nt3inw nt4jo n3to nt4og nt4ol n4t5oli n5ton nt4oo nt5oog n4top nt3opl nt3opm nt3opt n1tr nt3rec nt3rei nt3rel ntre4s nt5ribb nt5rij n5troos nt4rou nt3rus n5try nts3a nt5slu nt1sn nt4sno nt1sp nt4spr nts5pre nt1st nt5ste n3tu n4t3uit ntu4n n5twijf n5t4wis 3nu_ 3nuc 3nue nu3en nu3et 4nuf 2nui 4n3uil nu2lo 3num nu2m3a 5numm nu2n 3nunc n3uni 2nu4r 3n4u5ri nu5ro 1nus nu4s3o nu3tr nut4st 4nuu 5nuut nuw5a nu2w3i 2nv nve5na 2n1w nx3 n3xe nxo4 1ny 4n3yi 4n3yo 2nz nzet5s 3\xc3\xb1 4o_ 4oa o3aa o2ad o3af o1ag o3ah o3ai o1al oa2m o1a2n oa4tiev o3au o3av o3ax 2o3b 4ob_ obal4 obalt3 3obj 1o4bli ob5oor o4b5o4r 4obr 4oca ocaat5 5o2cea o3cha o1che o3chi o3cho o3chr ocke4 4o3co oco3a oco3s4 oc3t4 od5ac oda3g ode4m5ar ode4mo ode5re odes4 odi3a o5dru od5sc od5sei od3s4i od2sl ods5lam od5slan od3sli od5smak od4s3o od3spo od4spr ods4t od5sta od4ste ods5te_ od5stek od5sten od3w o4e oe5an oe3as oe2d3a oeda4d oede4n oe2d3o2 oe4dr oed3re oed3ri oed3ro oe2d3u oed3w oe3e oe5er oe4f1a 1oefe oe2fi oe2fl oef3la oef5le oef3lo oe4f5o4 oe2f3r oege3l oeg5ij oeg1l oe4gou oeii4 oei3n oei5s4 oei5tj oei3tr oe4kaa oek5erk oeke4t oe2k3l oe4k3op oe4k3r oe2ku oek1w oe4lap oe4lar oel5dr oe4l3ei oe3lem oel5f oelo4 oe5loe oelo5p oel3sp oe4m3ac oem3o4 oen3al oe5n4e oen5gr oen3o oen4sn 2oep oep5ind oe4pl oe5plo oe4p3r oe3pra oe4ps oeps3e oe2p3u 4oer oe1ra oe4raa oer5aal oe4r3a4l oer4e oer5ei_ oer5eie oero2 oe3roe oer3og oer5om oer4sl oer4sp oer4sta oers5tak oers5te_ 4oes_ oe3sfe oe3si oe4sli oe4s3o4 oes4ta oes4th oe3sto oe4taa oe2t3h oe5t4i oe2tj oe4t3o4 oe5toe oe4t3ra oet4s3p oet3w 2o\xc3\xab of3ar of3at o4fav of4d1a4 ofd3ei of2d3o of2d3r ofd3w of3l o4fli o4flo 4ofo of3om o3foo of3op o3for of3ox of1r o3f2ra of5se of4sl of5sla ofs3le of2sp of3spe ofs3pl of3spo ofs3pr ofs3tr ofs5tra 4oft of4tu oft3ur oft3uu of3ui og5ac oga4l og3al_ og5de og3di oge4d oge5laa ogel5ei 2ogem o3ger oge4ro oger5on oge4s3t 2og5h 1ogig og1l og5ne og3op og3sp og3sta og4st5ei og3sto og4ston og4str ogs5tro og3ui o3gy 2o1h 3ohm 4oi oi3do oi1e oi3j oi5k o3ing oi3o4 oi3s4 oi5sc ois2p oist2 ois5tj o3\xc3\xaf 2o1j 2ok o3ka_ o3kaa o4k3aas ok3ab ok3ag o3kal ok3ank o4k3a4z ok3ef o2k4l ok5let o4kli ok5lu o2k3n ok3o2l ok3op_ ok3o4pe okos5 o2k3ou o2k3r ok4ra ok1sa ok3s4l ok3sn ok5spri ok1st4 oks5te_ ok5sten ok4s5tr ok5te okter4s oku4 ok3ur ok3uu ok1w ok2wi o1la o3l4ab ol3ac o3lal ol3a2p ol3arm ola3s4m 4old ol3d4o ol3d2w o1le o3le_ ole5g ol1ei ol3eks ol3emm o3len o5ler oleu2 ole3um ol3exa ol2fa olf3l ol3fr olf5sl ol2gl ol2g1o olg5rap ol4gre ol4g3ri ol2g3u o3lia o3lic o5lid o3lik o3lin o5ling ol3int o3lit ol3kaf ol5ke ol2kr olk4s olk2v ollie4 o3lo o5loc olo3k ol4om o4lop ol3op_ ol3opp olo3s4t olo4ve ol4pra 4ols ol5se ol4s5h ol5si ol1sj ol3s4l ol3s4n ol3so ol3sp ol5ster 4o1lu ol3uit olu4r 4oma om2aa om1ac om1af o3man 4ome o4m3ef om3ela omen4s omen5ste_ ome5ren omer5kl ome5sp ome5t om2i o4m3int 4omm 4omo omo5l omo3s om4p5ei 5omro om3sl om4ste_ om3ui 3omz on1ac on4ag o4n3am on4an on3ap ona3th 2onc on4d3ac on5d4as on5der ond5ete on4d3id ond5ijs ond5om_ on2dr ond3re ond3ro ond5sj ond5slo on3d4u on4dur o5ne_ o3neb o2n1e2c on3ei on3erf on3erv one3st 4onet_ on1e3v ong5aan ong5aap ong3ap 4ongen ong5le ong2r ongs4 ong5se ong3sp ong3st on5id o5nig on4k3ap onke5lap on3k2i on4k3lo on3kn on5kw onnes4 onne5st o4n3of ono3l on1on o2n1ov on3sc ons4e on5sei ons2f on3s4m on2s3n ons5op on3sor on1s2p ons4pe on3spl on1st on5sten on5str 4ont_ on4taa 3ont1h on4tid 3ont1s4 ont5sp 3ontv 1ont3w on1ui on3ur o4o2 4oo_ oo3c 4oo4d ood1a ood1e4 oo5de_ ood1o ood1r ood3sl ood3sp 4oof oo3fi oo4g oog1a oog3e oo5gi oog1r oogs4 oog3sh oog3sl ook3a oo3ke ook5l ook3s4 ook5st oo4k5w oo4l ool5a2 oole2 ool3ed ool5f ool5g oo5lig ool3ij ool3k ool1o4 ool1u oom5a4 oo3me oom3i oom1o4 ooms5te_ 4oon oon5a oon5du oon3in5 oon5k4 oon1o oon5ta oo4p1 oopa2 oop5ee oop3o4 oop3r oop4sp oor3a oord5aa oor5dop oor1e4 oor3g4 oor5i oor5k oor5m oor1o oor3sm oor5ste oor5sto 4oort oor4th oo4s oos3a oo5se oos5n oo4t oot1a oot3es oot3h oot5o oot3r oot4sl o1\xc3\xb6 2opa o4p3ac op3ad o4p3af o4p3ak op3am o3pan op3and op3at_ op3att 3opbre 3opdr o3pe_ op3ee op5eet op3ei o1pel o3pen_ 3o4peni o5per_ o4pera op3e4te op3e4v 4opf o1pi o5pic op3i2d opie5t op3ijz op3in_ o5pina o5pis 4op1j op3l op5los 1opn o1po opoe3 op1of o5pog o5poi o5pol op3ond o5poni op3ont op3ord op3o4re op3o4v op1r op3ric o4pru o4ps op5s2c op5se op5si 3ops4l ops4m op3sma op3sn op3so op3sp op3sta op3su 2opt 4opt_ op5tr op3ui o2p3u2n o1ra or3ach or3act or3adm or1af ora4g o4r3alg or3ana o5rate or4daa or4d3as or4denv or4do ord5ond ord3or ord3o4v or3dr or4drad ord3w o1re ore5ad 4orec oree4 ore4no or2gl o1ri o5ria 3ori\xc3\xab o5rig_ o5rigere o4r3ink or3ins ork2a or5k4e or3kl or5kn or3kw or4m3ac or4mas or4m3ei or4n3ac or3ni orno3s4 or3oe o3rol or1on or3ont or1oo or1o2p or3or o3ros or5ov 4orp or4p3ac orp4s5c or3sag or5sc or5se or3sli or3smi or3so or4son or3sp or5s4pa or5spu or4t3ak ort5een or4t5ijl or2to or4tof or4t3oo or4tred ort5sp ort5ste or1u o3ry orzet5 2os o4sac o5sas o3sau 4o3s2c osca4 o4sci o5s4cl os3cu o5sed os4el o5ser os3f os4fe o4sha o3shi os2ho o3si o4sj os5jer_ o4sk os5ko os3l os5li4 o4s3m os4n os5no o3s2o os3pa os3per os1pi os4pir o4spr os4s5m o2s3t os4ta os5taal os5taar osta3c ost3a4g os5tan os5tar o3stas o3stat os5te_ os4tem o5stero\xc3\xaf os4th os4to os5toli os5tou ost3o4v os5tra_ os5traa ost3re ost3ri o3stro os5trum os1tu o3sty o3su o5sy 4o1ta ot3aar ot1ac ot3af o3tag ot3akt ot3app ot3art otas4 o5tat o3te ot3e2d o5tee_ o5tees o5teg ot3ei ote4lan o5ten o5ter oter5sp ote4st ote4t ot3eta o1th o2t1ho ot3hu o4tj otje5sp otli2 o1to ot3off ot3olv o5tom ot3ont ot3opm oto5po ot3opr o5t4or oto3s 2otr o1t4ro ot3ru ot5s4i ot2sl ot3sla ots3li ot3smo ot3sn ot3sp ot4s3pa ot4ste_ ots5tek ot5sten ot4stu o1tu ot3ui o3tul ot5w 4ou_ ou5a ou1c ou4d1a ou4des ou2do ou1e oue2t3 ou3k4 ou4ren ou5ren_ ou5renn ou2r3o2 4ous ou3sa ous5c oust4 ou2ta out3h out1j ou2t3o out1r out5sp out5ste ouw3a ouw5do ouw5ins o2v 2o3va o5ve_ 2o5vee 3o4verg over5sp over5ste o5ves 2ovi ovi5so 4ovl 4o3vo 4ovr ovu3 4ow o1wa o1we o5wen ow3h o1wi ow2n o3wo ow3r o4x oys4 ozet5 \xc3\xb63l \xc3\xb61p \xc3\xb6pe1 \xc3\xb64r \xc3\xb6s4 \xc3\xb6s5t \xc3\xb65su 4p_ 4paan paar5du paar5tj 5paas 3pab p3acc 2pach pacht5s p4aci 5pacu 3pad_ pa4da 4padv pa3e 4p3afd 1pag pag2a pa4gen pa3gh p4a5gi 3pak pa2k3a 4p4ake pa4ki pa4k5l 2p3alb 3pale pal3f pa3li paling5s palle4 palm5ac pal4mo pa4m pa3na pa4n3a4d 5panee 5panel 4pank pan5sp pan4tr 1pap pa4pe4t 5papi pap3l pa3po pa3pr 4par_ 3pa3ra p3arb pard4 par3da 3park par4ka par4k5l 3parl 4parm pa5ro 4parr par5ta 3parti part3j 3partn pa5ru paru5r 1pa4s3 pa5sa pas5c pa5se pa5so pas4th pas5to pas5tr pa5te 1path p3atl 3pa3tr pats5te_ 2paut 5pauz pa4vl 5paz 2pb4 2p1c 2p3d2 pe4al 4peci p3e2co 3pectu 1ped pe3de pe3do p4ee4 3pee_ 3pee\xc3\xab pee5li 4peen 5pees 3peg 1p4eil pei4l3a 4peis pek5ee pe2k3l pe2k3n pek5s p4el pe3l4aa pe4l3ak pel5dr pe3le pe4l3ee pe4l3e4t pe3l4i pe3l4or pel5si pel3so pel3sp 2p3emm pe3na pe4nak pe4nap pe4nau pe4naz p3ency pen5d4r penge5 pen5k 5penn pen3sa pen5sl pen3sm pen5sp pent4 pen5to 2p3epi pep3o pep5s p4er_ pe1ra pera3s4 per4at 3perc pe4r5eg pe5req 1peri peri3s per1o pe3ron pe5ros 3pers per4sm per5sti per4str p2ert 3pes pe3sa 3pet_ pe5ta 5pe5ter 3peti pe4t3ra pets5te petu5 3peuk 5peut 1p\xc3\xa9 3p\xc3\xaa 2p1f 2p1g pge5s 2p1h4 4p3ha 3p4hec p4his 4pho pi3am pi5an pi4at 2pid piek5la 5piep pie4r3o pie4s3p pie4tj pi2g5a pi3gl 3pij_ pij3k pij5ke pij4li 3pijn 5pijp pij4p3a 2pijz pi4k3l pilo5g pi5nam 2pind 3pinda 3p4ing 5ping_ pin4ga pin5gri 4p3inj pink3r pink5s 4pinr 2pins pin4ta pi5o pis5n pis5ta pi3th pit3j pit3r pit4sp 2p1ja pjes5 p3ji p1jo 2p1k pkaart5j p2l2 p3la_ plaat5j 2p3lad pla3di 4p3lamp 4p3lang p4lant p3lap 1p4las 3p4lat pla4t3r 5p4lay p4lec plee5tj p3leid 3p4len p3lep pleu5ro p4lex 2p3lig 4plij p4lom p3lone p5lood plooi5tj p3loon p3luie 2p1m pmans5t 2p1n p3na 3pneum 3po_ poda5 3poei poe2s3 poes5t poets5te_ 3poez 3po\xc3\xab p2ofa 3pogi po5gr po2k3i2 po4kol 1pol po5l4o polo3p pol4s pols5te_ 1pom 2p3oml 3ponds pon4sm pon4st pons5te_ pon5ta 5pony poo3d poo5de 4poog_ 3pool poo5len 4poor_ poor4tj poot3 po4p3a 4popd 2pope pop5h 2p3org 2p3ork po3ro p4ort 5portef por4to por4t5ra po3ru 1pos po1sa po3sf po4taa po4t3as po5te potes5t pot1j pot3r 3poul po3v 4p3p p5pa p5pe ppe4l3o ppe5ni pper5ste ppie5k ppij5p p4ps pr4 p2ra 3pra_ p5raad praat5j p5rad 3prakt 4pram p5rand 3prao 4p3rap p4rat p4rax 4preeku 1prem p3remm 3prent pren4t5j 3pres p3reso 3pret pre4t3j pret3r 4pric 4p3riek 4priet prie4t5j 1prij 3prik 3princ pring5s4 5prins 3p4rio 3p4riu 5priv 5p4rob 3p2roc 1p2rod p3roed 3proef proet5j 3proev 5p4rof 5p2rog 1proj pro3la 3prom p3rood prooi5 pro5pa p4roq 3pros pro5sc pro4s5t pro3t4a 3proto 3pro5v 4proy pru2t prut3o4 2ps p3sab ps3a2g p3sak ps3ar ps3ass 4pse ps3erk p4s3et p3si p4s3i2d p4sin p5sis p1sl ps3le ps2me ps5mi p4s3na ps3neu p4sof p3sol ps3opt pso4r p1sp ps2pl ps3ple p1s4t p3stat p3ste ps5tent ps5tes ps5th ps3tor ps5tron p3stu ps5ty 3psy 5psyc p3sys 4p1t pt3ad pt3alb p3te p2t1h p5ti pt3j p4t3o4v p3tr pt3ric 1p2u 3pub pu3ch pu3e puil3o pul4st 3pun 4pun_ punt3j 3put_ puter5in put1j pu2t3o put3r put4st puts5te_ 2pv pvan4 pvari5 2p1w 1py1 2p5z 1q 5qe qu4 que4s 5quo 4r_ r2aa 2raan 4raand 3raar 5raar_ 4r3aard 5raars raar5tj 2rac ra4ca ra3ce 5racl rad4a 3radb ra5den ra3di 5radia 3radio 4radm 4r3adr 3rad3s 4radv 2rafd r4aff raf5ond ra3fra 3ragez ra5gi ra3g2n ra5go rag4s 3rais raket3 ra3k4l rak5r 4r3a2la ra4l3ee 4r3alf r3a4lim r3alt ra4man r5ameu ra3mi r2amp 4rana ran4dr ran4g3o ran4gr r5angst_ ra4nim 4ranj ran4kl rank3w ran4sa ran4st ran4t3j r3antw ra3o 4rap_ ra3po 4rappa rap5roe ra3q 2r3arb r4a5re 4rarit 2r1arm 4r3arr 2r1art ra5sei ra4sk ra4sl ra1so ra2sp ras3po rast5ri r4ati rat5j ra4tom ra4tra ra5tri rat3sp rat4st rats5te_ ra3t4u 2rau 3raus r1aut 5ravr ra4zij rbe4ti r1c r3ce rces3 r3chi r3co 2r1d r4d3act rd3alk rda2m rd5ama r3dan r2d3ar rd3ei r4d5e4las rden5dr rde5o4 r4derva rde5s4t rdi3a rdi5o rd5l r3do r5doc r4d3ol rd5olie rd3ont rd3oos rdo3pe rdo3v rd3ras rd3res rd5roos rd2ru rd3sa rd3s4c rd3so rd1sp rds4t rd5sta rd5ste rd3su r3du rd2wi rd5wo 3re_ 1reac re4ade 4reak re3amb 4re5at re3co 3recr rec5ta 3reda 3redd rede4s3 4re4diti 3redu re5dw ree4k 2r1een ree3n4e r5eenh ree2p reeps5 ree5r4ad 4reers reer5ste r3eerw ree4s ree5sh r4ef 4refb 2reff 3refl re3fu 1reg 4reg_ 4regd rege5ne rege4s 4regg 3regi re3gl 4regt 4reie 4reil 4reind rei5tj 5reiz re4kap 5rekeni re2k3l re2k5n re4ko re4k3re rek3sp re4ku re1kw rel4di rel4d3o reld3r re4l3ei rel5k re4lu4r 3rem_ re4mai remie5tj re5mo5v 2remp 3r4en_ re2na re4naa ren5aar re5nade re3nal re4n3an ren3a4r r4end 5rendee r5endert re5ne_ re4nel re5nen_ ren5enk ren3e4p re5ner_ ren5erf ren5erv 5renf 2r1eni 5r4enkl r4enn re4noc ren4og ren4opl re3nov 5r4enp 4renq ren4sl r4ento r3entw r5enveer re4of re4op4 re5pa 3repet re4pie 4req re3qua 4r1erf 2r1erg re3r2o rer4s 2r3ert 4r5erv 2rerw re3sa re5se re4sl res5le res3m re2s1p res3t re4tem re3t4h ret4i re4tik re5tin 2retn re4t3o4g re4t3oo rets5te_ re2u reur5es reus4t reu5ste 3revis 3revo 2r3ex r4f3aa rf3act r2f3a4g rf3al r3fas r3fe r4f3eng r1fl r4f3lag rf3lev r2f3li rf3lus r4f3op r1fr r4f3re r5frea rf2s2 rf3sm rf3sp r4f3u4r rf3uu r1g r4g3ab rg3amb r4g3een rg3ei rg4eis rgel5dr r5gen_ rge4ra rge5rap r4g3ins r5glas r3glo r4g3lu rg4o3v r5grij rg3rit r3g4ro rg1s4 rg2sm rg5so rg4s5pr r3h ri5abel ri4ag ri2ak ri5an rias4 ri4av ri4bl 4rice ri3co ridde4 ri3di ri4dol ri4doo rie5dr rie4k5ap rie5kl rie3kw rie4la riel5aa rie4lei rie4ro rie4ta riet3o ri1eu ri3fl ri3fr r4ig ri4gaa ri3gl 5rigste r4ijl 4r5ijl_ r5ijld r5ijlt rij5o rij3pl rij3pr rij3sp rij5ster rij4str 4rijv ri4k5l rik5n ri3k4o ril5m ri3ma rim4pr 4r3inb 4rind ri5ne 4r5inf r4ing 4r5ingan r5ingeni ring5l 4r3inh ri4nit rin4k3l r3inko 4rinkt r3inl 4r3inna 4r1inr 4rins r3inst 4rint 4r1inv ri5on ri3o5s ri4sam ri3sc ri3sot ris5to rit3j rit3ov rit4st rits5te_ rit5sten 3ritt r5j4 rjaars5 r5ka_ rkaart5j rk3adr rk3af r2kah rk3ang r4k3art r2k3ei rke4n rken4s rker4sl r4k3erv rke4s rke5stree rke5strer rk5iep rk3ijv rk3inb r4k3ink rkjes5 rk3lag r4k3lat rk5leid r2klo rk3loo rk3lus r3kn r4kne r2kob rk3olm rk3omg rkoot5 rk3opg rk3ord rk5os_ rk5oss rk2r r5k4ran rk4ri r5kris r5kron rk1s rk3s4f rk5si rks4p rk4t5e4v rkt3h rk4ti rkt3o rkt1r rk3uit r1kwa rk3waa rk5wat rk3wee r1kwi rk3win r3l rlaat5ste rle4g3r rlink4s rlinks5te rlofs5 rlui5t4 r1m rmaf4r r4m3art r2m3eb r2m5eg rme4r3a4 rmes3 rme4t3j rmet5st rm3inh rmi2s r3mo r5moe r4mop rm3opm rmors5te rmos5f rm3s4a rm1st rm3uit rmun4 2r1n r3na r5n4am r4n3ap rn3ars rnee5t r4n3ene rnes3 rne5te rne4t3j r2n5id r2nin r2n1on rn3oor r5noot rn3ops r5not rn3ove rns4 rn3sm rn3sp rn1st rn3sta rn3th rn5tj rn5to r3nu rnu5r ro1a ro5ac r4oc ro1ch ro3d4o 3roe_ 4roef 4roeg roe4g3r 3roem roens4 roen5sm roep3l roe4rei roet4j 4roev 3ro\xc3\xab r5offi r4ofi ro3fl roges5 1ro\xc3\xaf ro3kl 3rokm rok3sp r4ol_ ro2l3a role5st rol3g2 2roli rol3ov ro5ma ro3mo 4romz r2on_ ron3a4d 5r4onal ron4da ron4d3o ron4d3r ron4d5u r2one r2oni r2onk ron4ka r2onn r2o1no r2ons ron4ste rons5te_ 4ron2t ront3j ront3r ro3nu 4ronv 3roof 2roog 4roon 2r1oor root5ste ro3pa ro4paa ro4pan 4ropb ro1pe ro5pee ro4pin ro3p4la 4ropn r4opo rop5rak rop3sh r4opte ro4pu ror5d ro3ro ro3sa ro5se ro3sf ro3sh r4o5si ro3sp ros4s5t ro5stel ros5tra ro5te ro3t2h rot3j ro5ton ro3tr rot4ste rots5te_ r1oud 3rou5t4 ro3v ro4ve ro5veri 4roxi 3roy r1p r3pa rp3aan rp3adv rp3ank r5pee rp3eis rpi3s r2p3j rp4lo rp5lod rpoort5j r4p3o4v r4p3rec rp3ric rp4ro r3psa rp4si rp2sl rp3sli rp5spe rp4s5to 2r5r rre4l3u rren5s4 rre5o rreu2 rri5er_ rrie4t rron5k rrot4j 4rs rs3a2d rs3a2g r3sal rs3alm rs3amb r3san rs3ana rs3ap rs3ar rs3as rs4asse rsa4te r5schi rs2cr r4s3eis rsek5ste rs4et rseve3 r2s3ez rs4fer rs4hal r3s2hi r3s4hoc rs3hot rs3ini rs3int r4sj4 r5sjac r5sjou r5sjt r3s4kat r1sl r4slan r5slec r5slep r5sleu r5slib rs4lie r5sling rs3lob rs5loep r4s3loo r5sluis rs4m r5smaak rs5maal rs5mak r3sme r3smij rs5mis r5smit rs5mu r1sn r2s3na rs3neu r2s3no r1so r5sol rs3ong r2sor rsorkes5 rs1ov r1sp r3spaa rs3pad r4s3par rs4pare r3spe r5spec r5spee r5spek rs4pene r4s3pet r5spit r5spoe r5spog r5spon r5spoo rs3pot r5spraa r4spu r5spul rs3put r1s4t r4s5taak rst5aang rs5tas r5stat r3ste r4s3te_ r5ster_ r5sterk rs5term r5sters r5stes rste5st r4steva r3sti r4stit r3sto rs5toma r4ston rst5ora r3str rs5trap r4st5red rs5trei r5stren rs5trog rst5roz r3sty r3su rs3usa r3sy 4rt r1ta r5ta_ r4t3aan rt5aand rt5aanv r4t1ac rt1ad rt3af_ rt3aff rt3am r5tans r2tar rt3art r4tau r2tav rt5c r5teco rt3eig rt3eil rte4lei rt5emb r5ten_ rte5nach rte3no rte3ro rtes4 rte5sta r2t5e2v r4tha rt1he r3ther rt3hi r1tho rt3hol rt3hu rt3hy rt4ij rtij3k r4t3ini r4t3ink rt5jesc r3to rt3off r5tofo r5tok rt3om_ rt3ond r4t3op r5tori r1tr r3tra rt4rap r4t3ras rt3rec r5treden_ r3t4rek r4t3res rt3ri r4t3rol r2t4ru rt5ruk rt5rus rt4s5eco rt5sei rt2s3l rt3sle rts5li rt4slu rts5m rts5no rt4soo rt1sp rt4s3pr rts5ten r1tu rt3ui4t rt3w rt2wi 5rubr rude3r ru1e 4ruf ru2g ru4gr r5uitr ru2k 4ru3ke ruk3i rul3aa rul3ap ru2li ru4l3ij ru3lin rul5s r2um ru2mi 3run_ r2und runet3 4r5u2ni ru3niv ru4r ru5ra ru5re_ ru5res r2u4s rus3e rus5tr 4rut rut3j rut4st ruts5te_ 4ruu ru3wa rvaat5 rval4st rvals5te_ rvers5te_ rves4 rve3sp rvloot5 r1w rwen4st rwens5te_ r4wh rw2t3j r3x r3yu 4rz rzet5st 4s_ 5sa_ s1aa 1saag 5s2aai saai4s 3s2aal 3s4aat 1sab sa3bo 2s1ac sa2ca 3sacr s1adv 2s1af 3safe 3safo sa3fr s5agg s4a3gi 3sagn sa3go 3sah 3sai 3saj 2sak 3saks s1akt s2al 5sal_ 3sa3la 3sald 5salh s3all 4salm sal5ma s3aln 3s4a3lo 3s2ame 5samm sam5p 4sa2na sa3nat s4anc s2a3ne s4ant san4t3j sa2p 3sap_ sa3pa 2s3ape sa4pr sa5pro sa3ra s1arb 3sard sa2re s1arm saro4 sar3ol s4ars 4s1art sart5se 4sas_ 3sasa sa3sc 3s4ast 1sat 3sa3te 5sati 2s3atl 2s1att s3aud 1saur 3s2aus s1aut 3sauz 1sax 4s3b s5ba s5be s5bo 1sc 2sca 4sce 5scena 5sc\xc3\xa8 3s4ch2 4sch_ sch4a 5schak 5schap 4schau 5sche_ s5chec 4schef 5schen 4scheq 5scher 5schev 5schew s2chi 4schir 5schol 5schoo 5schot sch5ta 2sci 4scl 2sco 3s4cola 3scoo 3scope 5scopi 3s4co5re 3scout 2scr 4scris 2scu 2scy 4s1d s5de s4dh sdi5a sdis5 s3do s5dr s3dw 3se 5se_ se2a se3ak se3al sear4 se3au s4eb 4s3ech se3cr 5sect 4secz s4ee 4s5eed 5seei 4s1een s5eenh see4t see5ts 4seev s1eff se3ge 2s5e2go seg2r 4s3ei_ 4s3eig s4ein 5sein_ 5seine 2seis seis4t sei5tj 5seiz sek4st seks5ten se1kw s2el 5s4el_ sel3ad se4l3a4g se4lak se4las se3le 4s3e4lek sel3el 4se4lem 4self se5ling 4s3elit sel5k 5selm selo4 5selp 5s4els sel3sp 5selt se2l3u s4em se4m3ac s5emm sem3oo s4en 5sen_ se4n3a4g se5nan se4net 5sengr 5senh sen5k se4n3o 4s5enq sen5tw 5s4er_ se1r4a ser5au 5se3r4e se4ree se5ren s4erg 5sergl s5ergo 5sergr ser4i se5rij 4s3ern se3ro se5rop ser2s sers3p ser3st sert5w se3ru s4es se5sc se3sf 2s5esk 5sess se4t se5ta 4s3ete se5ti se3tj set3r se5t4ra set5st 4s5etu set3w se3um se4ven 4s1ex 4sez se2ze 3s\xc3\xa9 3s\xc3\xa8 2s1f 4sfed s5fei 4sfi 4s5fr 4sfu sfu5m 4s5g sgue4 s1h s4ha_ sha4g s5hal_ 3shamp 4she sheid4 sheids5 s5hie 5s4hir sh3l 4shm s3hoe s3hoo 3s4hop s2hot s3hote 3show s5hul 1si 5si_ 5s4ia si5ac si3am si5an 5sic sici4 si3co 3sie_ 3sie\xc3\xab sie5fr sie5kl siep4 sies4 sie5sl sie3so sie3st sie5ta sie5to si5\xc3\xa8 si1f4 5s2ig si5go5 s3ijv 4s1ijz 5sile 4s5imper 3simu 5sina s3inb 4s3inc 4s1ind 2sinf sing4 3sing_ s3inga s5ingeni sin3gl s3in5gr s3inh 4si2ni 4s3inko sin5kr 4s3inm s4inn 4sinr 2s1ins 2sint 4s5inv 4s3inz 3sir 5siro s3irr si4s sis3e4 sis5ee sis3i sis5tr 3sit si5to sito5v si3tr si4tru si5tu 3siu 3siz sj2 4sj_ 3s4ja_ 5sjab 4sj3d s1je 2s3je_ s5jeb 3sjee 3s2jei 1sjer sje4ri s3jes 3sjew 3s4jez 4sj5k4 5sjof 4s3jon sj3s2 sjt4 s5ju 2s1k2 skaart5j s5kad s4kele s5ken 3s2kes sk4i 3s2ki_ 3skied skie3s 3ski\xc3\xab ski5sc s2k3j s3ko s5kre sk5ruim sk3ste 4sku s3k4w s2l4 3s4la_ 5s4laan 5slaap 4s5laar 4slab s4lac 4s3lad 3s4lag 5slagm sla4me s5lamp_ s5lampe 4s5land 3slang 3slap 5slape sla3pl 4s3las 2s3lat 3s4la5v 4slaw 3s4laz s3led 3s4lee_ 5sleep 4s5leer s4leet slee5tj 4s3leg 2s5lei s5leng s3leni slen4st slens5te_ 3slent s4lep 4s5ler s5les sle4t3j 3s4leu s5leug s5leus 5sleut 2s5lev s3li_ 4s3lic 4slid 2slie s5lied s3lief 3s4lier s3lif s5lig 4s3lijf 5slijp 4s5lijs s4li4k sli2m slim5a s5lini 4slinn s4lip 4s3lit slo4b5 2s3loc 3s4loe 3slof 4s3log s3lol s3lood s5loon s5loos 5s4loot3 s3los 3slot slo4tr 4s3lou 4s5loz 4s5luc 1s4lui 4s5lui_ 4sluid 5sluis_ sluis4t slui5ste 5sluit 5sluiz 4slun 2s5lus 4s3ly s1m 4s5maat 3smad 3smak_ 3smal 2s5man s5map s4mart 4s5mat 4s5mec 5smeden 3smeed 5s4meet 4s5mei 4smelo 4s5men 4s5mes3 5smid_ smie2 smies5 s4mij s5min 5smok s3mon 5smuilden s5muile 5smuilt s2n4 s5nam 5s4nap s4nar 3snau 3s4nav 3s4ned 3snee snee5t s5neg 5s4nel 2s5nes 4s5net sneus4 sneu5st s5neuz s3nie 1s4nij s5nim 3s4nip 4s5niv 4snod 3s4noe s3nog 2snoo s4nor_ s3norm sno5v 3snuf s4nui 2snum 3so_ so4bl so1c s3oce 3s4o3d 1soe 2soef 3soep soes3 2s1off 3soft 2so2g 3so3ga s1oge so3gl 3sogy 5soi 3so\xc3\xaf 3sok s2ol 5sol_ so3la so3le so3lis 3so5l4o3 solo5v 5sols s2om 3s4om_ 5somm 2s3oms s3omv 2somz 5s4on_ 3sona so5nar s3onb 2s1ond 2song 3sonn 3so3no s4ons 2s1on4t3 4s3onv s3onw 3soo 4s5oog 4s3ook 4s3oor_ s3oord 4s3oorl 5soort 2s1op 3s4op_ 4s5ope so3phi s2o5po so3pr 3s4opra sop4re s2orb s3ord 2s1or3g 4s5ork sor4o so3ror sor4st 3s2ort sos4 so3sf s4ot s3oud sou2l sou3t 2sov s1ove 3so5z 4sp_ sp4a 5spaak s3paal 5spaan 5spaat 2spad 2spak 5spake s4pan 3spann 4s5pap 5spar_ s4pari 5sparr 2spas5 5spatt s3pau 5s4pea 4spectu 3s4pee speet3 4s3pei s4pek 5spell 4s3pen s5pen_ spe4na s5pep 4sper s4per_ s5peri s4perm 5s4perr 4spes s3pez s3pid 1s4pie spie5tj 4spijn 4spijp s5ping 5s2pio s3pis spi5sto 2s1p4l 4s5pla s4plet s2pli4 5splin 3split s3plo s3plu sp4o s2poe s3poes 4spo\xc3\xab 4spog 4spol 2s3pom s4pon_ s4ponn s2poo s3pop 5s4pore s4pori 4s3pos 5spots 4spou 4sprakt 5spray s5pred 5sprei s4prek 4sprem 4spres 5spreu 5spriet 4s5prij 4sprik 4sprob 4sproc 4s5prod 4sprof 4sprog 5s4pron s4proo 4spros 4s3ps 4spt s2p4u 4spub 5s4pui 4spun s4pur 5spuw s4q 4s5r sraads5l sro5v 4s3s4 ssa1s2 s4sco s4s5cu s5se ssei3s sseo4 s5si s5sl s4spa s5spaa ss5pas s5su s5sy s2t 4st_ 5staaf 5staan_ 4staang 4staanw staart5j s4taat staat5j st3abo 2s4t1ac 3stad 5stads 2staf 5staf_ sta4fo s4tag s4tak 5staki 4stakk st3akt 4s3tali 5stam_ 5stamm 3stamp 3s4tand stan4s s4tap 4stapo s4t3arc 4stari 2stas stasie4 5statio 4stau st3aut s4tav 4stavo 4s5tax 4staz 2stb 2st5c 2std 4stea 5steak 4stec s5tech 5steco 3s4ted 4stedu 3steek 3steen 4steenh s5teer stee5t 5stein 5stekar 5stekk 5steldh ste4lee st5elem 3stell 5stem_ 5stemd 5stemm 4stemo 4stent 4stenu ste5ran 4sterm ster5og st5e4ros 5sterren s5teru 4ste4s 4s4t3ex s4t3e2z 2stf 4stg 4sth s4tha st3hed st5heer st3hek s5them s3ther st1hi s4t1ho s4t1hu s4t3hy 2stia 2stib 4sticu s4t3id 5stiefe s5tiev 4stijd 3s4tijg 5s4tijl st3ijs 3stils s4tim st3imp sti5ni 4stins 4s5tint 4stite 2stiv st3ivo 4s4t1j 2stk 4stl 2stm 2stn 2stob 2stoc 4stoef 3stoel 5stoel_ 5stoele 4stoen 4stoer 4stoes 4stoez 3s4tof st3o4ge 5s4tok s4tol sto5li 4stoma 4stomz s4tong 3s4too 4st3oog stoot5j s4top st3o5pe st5opto 4stora sto4rat 4stord sto5ri 4s5tos s4tov 2stp 1s4tr 4stra_ straat5j 4st4rad 3stra4f 5straf_ s5trag 4strai 4st3rec s5tref 4streg 4s3trei 5strel 3strep st3rif st5rijp s5tris 4s3troe s5troep st4rom 5strook 5stroom 4stroos st5roos_ 4s5trou 4stroz 3stru 4strui_ 5struik 4st1s4 st3sc st5se st3sf st3sk st3sl st3so st5sp st5st 2st5t2 1stu 4stub 4stuc 5s4tud 4stuin stui5tj st5uitk 5stuk 2s4tun st3uni stu4nie 4stus 2stv 2st3w 2s4ty 1styl s5typ 2stz 1su 5su_ 5sua 5su4b1 suba4 sub5e su5bl 5suc 5sud 3sug 2sui 5suik 4s1uit 5suit_ s5uitl 5suits_ 5suk 3sul 5sum 4s1u2n 5sup 5surv su4s sus3e suur5 4s5v svaat5 svari5 sve4r sve5ri 4s1w s5wo s4y 3sy_ 4syc 3syn sy4n3e 1sys5 4s5z 4t_ 3taak_ t4aal t5aando t3aank taan4st t3aanw t3aap taar5sp 4t3aas taat4st taats5ta 3tabe 3tabl 2tac ta2ca 3t4aci 4tad ta4de t3ader 5tado t3adr tad4s3 t3adve 2taf_ 2t3afd 5ta3fe 4taff t3afha t4afr ta3fro 4t1afs 2t3afw 4tafz ta4gaa 5tagee 5ta5g4l tag3r 5taka 5takg 5takken ta3kl 5takn 5takp 5tak3r 5taks t2al ta3laa ta5lact 4talb 5tale_ 5talent ta3li 5talig t5allia talm3a 4talt ta4mak 4tamb t3amba 5tamen tament5j 4tamp t3ampu 5tan_ 4t3a2na ta3nag ta3nat tan4d3r tan4k5r ta3o t4ape 5tapi ta3pl 5tapo ta3q ta3ra 4t3arb 5tari 4t1arm ta2ro4 tar5sp tar5taa t3arti 3tarw 3tas 5tasa 5tasj 5taso ta3s2p ta3sta ta3str ta3sy 4tata 4tatio tat5j 4t3atl 3tatr 3tau 4taut 2t1avo 3tax t3a2z 4t3b tba2l 4t3c t4ch t5cha t5che t5chi t5chu 4t3d2 tdor5st tdo3v 1te 3tea te3akt 5tea4m 3tec 4t3echt 4teco te4dit t3edu tee2 teeds5te_ tee4g 4teek tee4k3l teem1 4tee4n t5eenhe 3teer tee5rin tee4t 4t3eeu t4ef t5eff 3tefl 3teh 4t3eier 4teig tei4lo t4ein t5eind 5teit tei5tj 2t3eiw 5tekene 5tekens 4teker 4tekk 3teko te4k3om 3teks te3kw te4k3wi t4el tel5ant te4lap tel5da 4telec 5teleco t5elect tel5een 5telef 5teleg tel5ei_ tel5eie tel5eit te5lel 5telev 5te5lex tel3f tel5k te4loe te4l3o4g tel5oog te4l3op telo4r tels4 4telse tel3so tel5su te4l3uu t4em 2temb 4temm te4mor tem3ov 5temper 5tempo t4en ten4ach ten3a4g te3nak te5nare te4nau tene2 ten3ed ten3el tene4t 3tenh ten5k4 te5nore 4t5enq ten5scr ten3sn ten3sp tensu4 tens5uu 3tent 5tenta 5tenten_ ten5to t3entw 5tenu t2er teraads5 te4r5aak ter3a4b tera5ca te4rad tera4de te4r5af ter3ag te3ral te4ran ter3ap ter3as 5terec te4rei ter5eik te4rel te4rem te5ren_ te4r5enk te4r5env 4t4erf_ 4terfd ter3fr 4t4erft te4r5in_ 3terj 4terk_ 4terkt ter3k4w 3term 5term_ 5termi ter5oc te3rod te3rof te3rog 5teron te5rons tero5pe tero4r te3ros 5terrei 5terreu 5terror ter4spr ter5ste_ ter5ston 3tes te3s4ap tes3m te3so tes3ta te5stel tes5ten test5op test5ri test3u te3ta te5tr 4t3euv t4ev t5e4van teve4r 5tevl 3tevr 2tex 3tex_ 4t3exe 4texp 1t\xc3\xa9 t\xc3\xa83 4t3f 4t3g2 tgaat5 t5ge tge3la tger4 4th_ 2t1ha t3haa t4haan t4had t3hak t5ham t4hans t3har t3hav 5thea t3heb 5thee_ 4t3hei 4t3hel 3t2hen 5theo 1t2her 5the3ra 4t3here 3thes 3thet t4hin 4thm t1hoe t2hog t3hok t1hoo thoof5di 4t1hou t3houd 5thous 4t3hov 3thr 2thu t1hul 4thum t4hur 3ti 5ti_ 5tia ti5ab ti5ae ti3ap 5tib 5tica 5tice 5tici 5ticu ti3d4 5tie_ tie5d4 5tiefs tie3kn tie4kon ti3enc tien5st 5tiep 5ties tie5s4l tie5ta tie5to tie5tw ti1eu 5tieven ti3fe ti3fr ti2ga tig5aa 4tigm ti4gu4 tig3ur 5tijd tije4 tij5ka tij4kl 5tijn tij5p t3ijs_ tij3st tij3t2 tij5tr tij5tw 4t1ijz ti3ko ti5kr t4il 4tils 5timm 5timo tina4d tin3as 4t3incu 4t1ind 4tinf tin4g3i ting4sa t3inh ti4nit 4t3inj t3inko 4t3inl t3inq 4tinr 4t3ins ti3nu 4t3inv 4tinw ti5om ti3o4p5 t2is ti5sa ti3s4j ti3sl ti3so ti4son ti3s4p ti3sta 5tite ti3th ti1t2r 5tivi ti4vo 1tj2 2t1ja t5jaa t5jee t5jek t3jen t5jet 4tjeu 2tjo t1jou 2tju 4t3k2 tkars3 4t3l t5le_ 5tleb t5les tli4n 4t3m tmen4st tmens5te tmos5 4t3n tna4m3o tne4r tnes4 5to_ toa2 to3ac to3ar to5bl 3toc 1toch 3tod to3da t4oe toe5d4 3toej toe5k 5toe3l4a toe5le 5toelic toemaat5 5toen to5ende toe5pl 3toer 5toeri 5toern 5toe1s4 toe5st toe3tj 3toets 5toets_ 5toetse toets5te_ 3toev 5toez to2f tof5ar tof5d to4fr tof3th 3togn 5togr 3toi to4kan tok3s t2ol to3la 5tolaa to5le 5tolet t3olf 2toli 5tolic to4lie tolk5s 5tolo tolp3r t3oly 4tom_ 5tomaa tomaat5 t3oml to3mo tom4p3j 4t3om5s 5ton_ 4tond 3t2one 5tonee 5to5nen to5ner 3t4ong 5tong_ 3t4oni 5t4onn to3no 5tons ton3sk too4m toom3e 5toon t4op_ top5art top3as to3pen to3pet to3pi 2topm to4po to5pos t4opp to4pu to5pus t3opva 5tor_ to3ra to4r3ag t3ord to5rec 5torens 4t1org t5orga t4ori 3toria to4ri\xc3\xab tor3k tor4m3a toro4 to4r5oli to3rom 5torr 3tors tors5te_ to3r2u 3tos4 to3sa to1sl to1s2p tos5te 5tota to3tr 2t3oud 3tour tou4r3e to3v tove5na to4vens 4toverg to3w4 4t3p4 tpe4t3 tpi3s tr4 3tra_ 4t3raad 5trac\xc3\xa9 5trafo_ 3trag 4tragez 3t4rai 5train 5traka t3rake 3trakt 3trans 5transa 5trap_ 5trau 4t3raz 3t4re_ 4trea 2trec 5tred_ 4treda t5redes 4tredu 3tref 4t5reg 4t3reis 4treiz 4trel t3rese t3resu tre2t3 t4reu t3rib_ 5tribu 5trico trie5ta trig2 2trij 5t4ril tri5ni 5t4rio4 t3risi t3rit_ 5t4riti 5trody t3roed t3roes 5trofy 3trog t4ro\xc3\xaf 5troj 4trol_ 5trola 5trolo 5tromm 5tron_ 5trona t5rond 3trone 5tronn 5trono 5trons tront5j t3rood 5troon t4roos tro5pi t4ros 5trotu 3trou 4t5rout tro5v 5truc_ 5truf 4trug 5trui_ 5truie t3ruim trui5t4 t3ruk t4rum 4ts ts3a2d tsa4g ts1am t3sap ts3as tse4d ts5een t4s3ei ts5eind t4s5ene t4s3eng t4s3erg ts5erge t4s3e2v t2sij t4s3ink ts3int ts2j ts3ja t3sjen 3tsji t1sl ts4laa t3slac t5slag_ ts3lam t2s3le t5slib t5sloe t3s4lu ts2me ts4moe ts3neu ts4no ts5nor ts5not ts3nu ts3ob tso2l ts3oli ts3om ts1on ts4opp ts1o4r ts1ov ts3pad t3span t5spec t4s3pet t3spi t4s3pil t3spoe t3spoo t5s4por ts3pot t4spro ts4pru ts5q ts5s t3sta t4staak t4s5tank ts5tant t4star t4stas t3ste t5sted t5stee ts5teko t5stell t5stels t5stem t5ster_ t4sterr t5sters t5s4tes_ t5steu ts3th t1s4ti t3stij t5stijg t5stil ts5tin ts5t4j t1sto ts5toep ts5tong t4store ts5trad ts5trei t3stri ts5troe ts5ty t4su4 ts3ur ts3us ts3uu t1sy 4t3t t5t4a t5te tte5loe tte5l4op tte2n tten4t5j tte5ri t5tlet tt3oog ttop2 t5t4r t5tum tt3uu 3tua 3tub 3tuch 3tu3e 5tueu tu3\xc3\xa9s 3tuig 5tuin 4tuip 2tuit tuit4j 4tuk tu4k3i tul5pi t4um 5tune 5tunn tu1o 5turb tu3ri 3tu4s3 tut3j tuurs5la tu3wa 4tv tvaat5 t3ve 4t1w 3t4wijf t2win 1ty1 3typ tys4 4tz t3za t3zi t5zw u1a u3ac u3an ua5ne ua3p u5ar_ uar5t ua3sa uat4 2u2b ub3ac ube4li ub5em u5bi u3bo ub5or 4uc u1che ucht5sl uc4ki ucle3 uc4t3a uc4tin u1d uda2 u5da_ ud5am ud3ei ud3ess u4de4z ud3eze udi4o udi5ologe udi3om udoe2 ud3ond ud3oo ud3ov u4d1r uds5lo uds4m uds5ma ud3sme ud3smi ud1st ud4sta uds5tak ud4sti ud1w u3ec ue2co u1ee4 u3ef u3ei u1el u4ene u1er uer3il ue3st u1eu u5eul u3ez u3\xc3\xa8 u4f3an u1fl u1f4r uf2s u5ga ug4da2 ug4der ug2do ug4dr uge4l5o ug3ij ug1l u2go ug3or u2g1r ug5sce ug4sec ugs4p ugs5pa ug1s4t ugs5tra u1h u2i ui5ac ui2d3a ui2d1o uid4s uid3sp uid5spre uid5ste_ uid3u ui3e uien4t ui2fa uif1l uif5r ui2fu 4uig ui4g5aa uig1l ui2g3o ui4g3r ui4gu 4uik ui2k3a ui4k3l ui2ko ui2ku ui2la uil5aa ui4l3em uil5m ui4l3og ui4loo uil3ov 4uim ui2m3a ui3mag ui4n1a uin5g ui2no uin5og uin3or uin4s5lo uin5to ui2p3l ui4p3o4 ui2p3r 4uis ui2s3a uis5c ui4sl ui5slu uis5p ui4st ui4t3a4 uit5aa uit5al ui5tar 1uitg uit1j 3uitl ui2t1o 1uit5r uit3sl uit3sn uit5sp uits5te_ 3uitw 3uitz ui3v 4u3j 2uk u2k3al uk3as ukkers5 u2k3l u3klas u2k3n u2k3o u3koc uko2p uk4o3pl u4k3r uk3s2m uk3spa uk3spl uk4sti uk1w u1la ul3ac ulam4 ula4p ul4d3a uld5erk ul5dop ul4d3u u1le ule5sp ul3fl ul5fo ul3fr ul3in_ u5ling ul3inn ul3k2a ul5ke ul2k3l u1lo ul3o2p u3los ul2pa ulp3ac ul4pi ul2p3l ul2po ul4p3r ul3sa ul3so ul2s3p uls5te_ uls5tel u3lu um3af um3ar 3umda 2ume umee4 umes4 ume3st um3om um3op um3so um3st u2m3ui un3ac un2c unch3r un4dra und4s unds5ta und5ste une4t un3g 1univ un4k3r un4o uno3g un5o2p unst3a un4ste_ unst3o un4st5r unst5ui un4tag unt5een un2tj un4t5o4 unt3s4m un4t3u u3ol u3on u3oo u1or uo3ru u3os uota3 4up u1pa u1pe upe3k upe4ro uper5st u3ph u3pi u1pl u4p3lei u1po u3pol up3om up3op u1pr up4tr u1ra ur3aan ur1ac ur3ada ur3adv u2r3a4r uras3 u4r3a2z urd4o u1r2e ur3ech ur3een uree5s ure5lu urelu5r u4rem ur3emb ure4n u3res ur3ess ure3st ur3eta 4urf ur2fa ur3gi u1ri uri4gl ur3ijz ur3ind ur3int 4urk urken5s ur4kie ur3k4l urk4s5t u1ro ur5opb ur3or uro5s ur5pr ur4serv ur4s3ev ur3s4fe ur2sl urs5laa urs5li ur4s5m ur2sn ur4sp urs5pa ur5spel ur5spor urs5take urs5th ur4sti urs5tik ur3ta ur4tro ur5troe u3ru ur3ui 4urv u1r4y 4usaa us3ad us3a2m us1ap u4sc u5s2cr use5tj u5sie u4sj u4s5l u4sm u2s5n uso2 us3o\xc3\xaf us3os u2s3p us5pi us5pu us4ta us5tag ust3al u2s3te us4t3ei u4sti ust3oo us5tra_ us5tre_ us5tro us5tru ustu4 ust3ur ust3uu u1ta ut3aan utaar5 ut1ac ut3af u3tan uta3s4 ut5c u4t3ees u4tek ut3eks ut3em ut5emm uter5an ut3ex ut2h ut3ho u2tj u1to uto5f ut3oog uto3pe utop4l uto5po utop4r uto5s ut3saa ut3s2c uts5eng uts2m ut1sn ut3sp ut4spa ut4spo ut2st uts5tak ut4ste_ ut5sten ut3str ut5su utt4 u1tu ut5w u4u4 uur3a4 uur3e4 uur5i uur3k uur1o2 uur5ste uur5sti 4uut uut3a uut3r uvel4s uve5na uw1a u3wag uw3ar uw5art u1we uw3ec uwe5d uw3een u2w3ei uwe4nen uwes4 u1wi u2w3ij uw5ijz u4wind u3wing u4wins uw3inz uw1o u3woe uwo4ge uw1r uw3u uxa3 u3ya 4uz uze3t4 uzie2 \xc3\xbbt3s4 1\xc3\xbc \xc3\xbc4b \xc3\xbc1n \xc3\xbc3ri \xc3\xbcs3l 1v2 2v_ vaar4ta vaart5r va3de va3g4 va2ki va4kl va2ko va2l3a val5m va3lo va4loe val5si val4s5p vals5tek valu5 va2n van3ac vand4 vang3a van4gr va3no va4noc va1p va3re va5se va3s4o vast3r va3su va3te va2t3h vat5j va3z v4b 4v3c v4e 3ve_ 5veb vee4l veel5e vee3p4 vees4 ve3g4h vei3s4 vei5tj 3vek 5vel ve4l3a4g vel4d3o ve3le vel3k 5vem vem4a ve4na ve5nare 5vend ven5k ve2n3o 2venr ven4s3e ven4sl vens5lan vens5lo ven4sp vens5taak vens5take vens5tek ven4s3u4 ve2r ver1a ver5aas ve4rad vera4g ve4rand ver5do ve3rec ver3ed ve3reg ve3rei ver5eis ve5ren_ ve5rend ver3e4t ver5ijd ver5ijl ver5ijs ve5ring ver5k4 ver3o ve3rom vero5v ver5p ver5spe ver5sta ver5sto ver5tw ver1u ve3ry ve2s3 ves5ti ve2tj ve2to4 vet3og vet3oo ve3tor ve2t3r vet4roe vet5ste 5ve5z 3vi 4vicepa vid5st vie4r3a vie4s3 vies5n vie4tj vi3eu vijf5 vik4s vil4t3j ving4 vings3 vi3o vi5om vi4s3an vi1so vis5ot vis5p vi4st vis5tr vi1tr v3j vje4 vjet1 3vl v3lar vlei3s4 vlie4s5 vlot5s v3lov 5vo_ 3voe voe4t3a voe4t3r voet5sp 3vog voge4 3voi vo2le vol4g3a vol4gra vo2li vol3ij vol5p von4det vond5u 3voo voo5d vooi5t voorn4 voor5na vo3ra vorm3a vors5te_ vor5sten vos3 3vot vot3j 3vou vous5 3v4r2 vrei5 vrie4s vrij5k4 vrijs4 vrij5ste v3t vues4 vu2l vul5p vuur5s vy3 2w_ waad3 w2aar waar5e waar5ste wa4b3 wa2ba wa5bl w2ad wa3dr w4ag wa2la wa3lan 4wam wan4d5r wan4gr wang5sl wa2n1o wan3s4 3wap w4ar w5arc 5ward war4st wars5te wart3j war4to wa2si wa4s5l wa4s5p was5tr 1wate wat5j wa3tr 3way 2wb w1c 2w1d w4doo wd3oom we2a 2we2c 3wed wede4 we2d3i we4d3r wee4ki wee4k3r wee3lo wee3s4t wee5ste 3weg we4g1a we4gerv weg3l we2g3o we4g5r wei3s wei5tj we4k3r we4le2 4welem we3li we2lo wel3s we2m wem3a we3me we2n wena4 wen3ad we3ne4 we4nem we5nen_ wen5enk we3ni wen4k3a wen3o wen5to wer2f 4werg wer4ka wer4k5l wer4kn wer4k3o wer4k3r werk5ru wer4k3u4 wer4k3w wer4p3a wer4p3l wer4pr wer4s wer5ste we2s3 we3spo wes4t5o 3wet_ we2th we2t3j wet4st we2t3u 2wex wezen4s5 2w1f w1g w1h wie4la wie4t w4ij 3wijd wij4ka wij4s wijs3l wijs3p wijs5ta wi4k 3wil wind3a win4d3r w4ing 2winr win2s winst5aa winst5r wi4t3h wit3j wi2t3o4 wit3r w1j 2w1k 2w1l 4w1m 2wn wn3ac w3ne w3ni w3no w3ob w2oe woes3 woest5a wo4l wol3a wolf4s5 woon5sf woor4d5r wor4g3e w1p wren4st wrens5te_ 2ws ws3a2 w3sc w1sl w2s3le w3som w3sp ws2pl w4spr w5spra w1s4t w4stij 2wt wtes3 wtje5sp w1to w1tr wu2 wva2 w1w xaf4 xa3g xamen5t xan3 xan5t x1c x4e xen4d xe3ro x1f x1h xie4t xi3g xi5o xi3sta xi3sto xi4t3i x3l x1m xo3no x4op xo3s4 x1p xpre2 xpres5 x3r x3so x3sp x1t x2tak xtie2 x3w xy3 y1a ya3s4 ya4s5p y3at yba2l3 yber4t3 y1c ycho3 y3co y1d4 ydi3a y5dr ydro3 y1e yes3 y3\xc3\xa9s y3\xc3\xa8 y1f y1g ygu2 y1h y1i y4in y5is yksge4 y3la yl3al y3le y4l3et y3lo ylo3l ym2f5l ym5pa y3na yn3er y3no yn1t y1o y3on y3os yo3t y1p y3p4h ypo3 ypot4 yp3s yp5si y1r y3r4e y5ri ys3 y1s4a y3s4c y5s4e yse5t y3s4f y3s4h ys4i y3s4o y3s4p ys5pl ys4ta ys5tr y3sy y1t yt3hu yto3 y2tof ytop4 yu5a y3ui y3u2r yvari5 y1w4 1z 4z_ zaar5t za3f2 zags4t za2k3a zak3r zan2d zand5a4 zan3di zan4dr zang3s za3po za3s4 4zb 4zc 4zd z4e zee3k zeel5d zee3r4o zeero5v zeer5s zee3s4 ze5ge zeg4sl zei3sp ze5k zel5dr ze3lem zel2f1 zel4so zen4d3a ze4nin zen5k zen3o4 zen4og ze3non ze4r3a ze3ro zer2s zer4s5e ze4s3 ze5sch zes5e zes5l ze5ste ze2t3a ze2t3h ze4ti ze2t3j ze2t3r zeve2 zeven3 4zf 4zg 2z3h z2i ziek3l zie4k3o ziek3w ziel4s zie5sl 3zif zi2g5a zij5kl zij3po zij5s4 zik2w zi4n3a4 zings3 zin4k3l zin4s zins3t zins5ta zin5str zi3o5 zipi3 zi4t zit3e zit3j zit3u4 4z3k 4z3l 4zm zodi5 zoet3j zoet5ste zo3f2 zoi4 zo5ie zo3la zome4 zo2na zon3sf zon5ta zooi5tj zo1p zor4g3a zor4gl zor4gr zo2t zot3h zo3tr zo3v 4z3p 4z3r 2zs 4z5t zui4d3i zui4dr zus3 2zv z4w zwets5te_ 5zy 2z3z zz3in zz3or z4z5w"; + +?> \ No newline at end of file diff --git a/include/mpdf/patterns/pl.php b/include/mpdf/patterns/pl.php new file mode 100755 index 0000000000000000000000000000000000000000..8cae52a4396633e31084dbee5fb13feadb6375e4 --- /dev/null +++ b/include/mpdf/patterns/pl.php @@ -0,0 +1,9 @@ +<?php +/* + Adapted from Hyphenator 1.0.2 + http://code.google.com/p/hyphenator/ +*/ + +$patterns="_a1 _a2b1s _a2b2s3t _a2d3 _a1d4a1 _ad4e1 _ad4i1 _ad4o1 _ad4u1 _ad4y1 _ad5a2p1t _ad5i2u1 _ad5op _ad5or _ae2 _ae3ro1 _a1eroa2 _ae1roe2 _aeroi2 _aero1o2 _aerou2 _a2n1t _anty1 _a1ntya2 _antye2 _antyi2 _antyo2 _antyu2 _a2r1c _arcy1 _arcy3b2 _arcy3b1z2 _arcy3k2 _arcy3\xc5\x822 _arcy3m2 _a1rcya2 _arcye2 _arcyi2 _arcyo2 _arcyu2 _a2u1 _au3g2 _au3k2 _au3t2 _auto1 _auto3c4h2 _a1utoa2 _autoe2 _autoi2 _auto1o2 _a1utotra1 _autotra2n2s3 _au1tou2 _b8 _4b3b8 _2b1c8 _2b1\xc4\x878 _2b1d8 _be1 _be2z3 _beza1 _be3z4an _be1ze1 _be3z4ec _bezi1 _be3z4ik _be2z1c _bezc4h2 _bezm2 _bezo2 _bezo2b1j _bezw2 _be4z3z _bezzw2 _2b1f8 _2b1g8 _bh8 _bj8 _2b1k8 _bl8 _b\xc5\x828 _2b1m8 _2b1n8 _2b1\xc5\x848 _2b1p8 _br8 _br4z8 _2b1s8 _2b1\xc5\x9b8 _2b1t8 _bv8 _bw8 _bx8 _2b1z8 _2b1\xc5\xba8 _2b1\xc5\xbc8 _c8 _ca1 _ca\xc5\x82o1 _ca\xc5\x82o3k2 _ca\xc5\x82o3\xc5\x9b2 _2c1b8 _4c3c8 _2c1\xc4\x878 _2c1d8 _2c1f8 _2c1g8 _c4h8 _c2h2r _chr4z8 _ci1 _ci2e1 _cie2n1k _cienko1 _cienko3w2 _ciep\xc5\x82o1 _ciep\xc5\x82o3kr2 _cj8 _2c1k8 _2c1l8 _c\xc5\x828 _2c1m8 _2c1n8 _2c1\xc5\x848 _2c1p8 _cr8 _2c1s8 _2c1\xc5\x9b8 _2c1t8 _cv8 _cw8 _cx8 _c4z8 _cza1 _cza2r1n _czarno1 _czarno3k2 _2c2z1k8 _2c2z1t _czte1 _czte1re1 _cztere2c4h3 _cztere2c2h1s _czte1re1chse1 _czterechse2t3 _cztero1 _cztero3\xc5\x9b2 _czw\xc3\xb31 _czw\xc3\xb32r3 _czw\xc3\xb33r4a1 _czw\xc3\xb33r4\xc4\x851 _czw\xc3\xb33r4e1 _czw\xc3\xb33r4\xc4\x991 _czw\xc3\xb33r4o1 _2c1\xc5\xba8 _2c1\xc5\xbc8 _\xc4\x878 _2\xc4\x871b8 _2\xc4\x871c8 _4\xc4\x873\xc4\x878 _2\xc4\x871d8 _2\xc4\x871f8 _2\xc4\x871g8 _\xc4\x87h8 _\xc4\x87j8 _2\xc4\x871k8 _\xc4\x87l8 _\xc4\x87\xc5\x828 _2\xc4\x871m8 _2\xc4\x871n8 _2\xc4\x871\xc5\x848 _2\xc4\x871p8 _\xc4\x87r8 _2\xc4\x871s8 _2\xc4\x871\xc5\x9b8 _2\xc4\x871t8 _\xc4\x87v8 _\xc4\x87w8 _\xc4\x87wi1 _\xc4\x87wi2e1 _\xc4\x87wie2r2\xc4\x873 _\xc4\x87x8 _2\xc4\x871z8 _2\xc4\x871\xc5\xba8 _2\xc4\x871\xc5\xbc8 _d8 _da1 _dale1 _daleko1 _daleko3w2 _2d1b8 _2d1c8 _2d1\xc4\x878 _4d3d8 _de1 _de2z3 _deza2 _dezabi1 _de3z4a3bil _de3z4a3wu1 _de1ze1 _de3z4el _de3z4er _de3z4y1 _dezo2 _2d1f8 _2d1g8 _dh8 _dj8 _2d1k8 _dl8 _d\xc5\x828 _d\xc5\x82u1 _d\xc5\x82ugo1 _d\xc5\x82ugo3tr2 _d\xc5\x82ugo3w2 _2d1m8 _2d1n8 _2d1\xc5\x848 _do1 _do3b2 _do3c2 _do3\xc4\x872 _do3d2 _do3f2 _do3g2 _do3h2 _do3k2 _do3l2 _do3\xc5\x822 _do3m2 _do3p2 _do3r2 _do3s2 _do3\xc5\x9b2 _do3t2 _do3w2 _do3z2 _do3\xc5\xba2 _do3\xc5\xbc2 _do4k3t _do4l3n _do4\xc5\x823k _do4m3k _do4r3s _do4w3c _do5m4k2n _dobr2 _dobr4z2 _doc4h2 _doc4z2 _dod4z2 _dod4\xc5\xba2 _dod4\xc5\xbc2 _dogr4z2 _do2p1c _dopc4h2 _dopr4z2 _dor4z2 _do2r1\xc5\xbc2 _dosc4h2 _dosm2 _dos4z2 _do2t1k2 _dotr2 _2d1p8 _dr8 _dro1 _dro1go1 _drogo3w2 _dr4z8 _2d1s8 _2d1\xc5\x9b8 _2d1t8 _dv8 _dw8 _dw\xc3\xb31 _dw\xc3\xb32j3 _dw\xc3\xb33j4a1 _dw\xc3\xb33j4\xc4\x851 _dw\xc3\xb33j4e1 _dw\xc3\xb33j4\xc4\x991 _dw\xc3\xb33j4o1 _dx8 _dy1 _dy2s3 _dy2z3 _dy3s4e1 _dy3s4o1 _dy3s4ta1 _dy3s4y1 _dy3s4z _dy3z4e1 _dyzu2 _d4z8 _dzi1 _dzi2e1 _dzi1esi1 _dziesi2\xc4\x991 _dzi1esi1\xc4\x99ci1 _dziesi\xc4\x99ci2o1 _dziesi\xc4\x99cio3\xc5\x9b2 _dzi1ewi1 _dziewi2\xc4\x991 _dziewi\xc4\x992\xc4\x873 _dzi1ewi1\xc4\x99ci1 _dziewi\xc4\x99ci2o1 _dziewi\xc4\x99cio3\xc5\x9b2 _dziewi\xc4\x992\xc4\x871s _dzie1wi\xc4\x99\xc4\x87se1 _dziewi\xc4\x99\xc4\x87se2t3 _d4\xc5\xba8 _d4\xc5\xbc8 _e1 _e2k2s3 _e1me1 _emes4z _e1me1sze1 _e2m3e2s5ze2t _e1se1 _e2s1e2s1ma1 _e2s1ha1 _e2s1t _ego1 _egoa2 _e1goe2 _egoi2 _ego1o2 _egou2 _eks4y1 _e1le1 _ele2k1t _elektro1 _elektroa2 _e1le1ktroe2 _elektroi2 _elektro1o2 _elektrou2 _f8 _fb8 _2f1c8 _f\xc4\x878 _fd8 _4f3f8 _fg8 _fh8 _fj8 _2f1k8 _fl8 _f\xc5\x828 _2f1m8 _2f1n8 _f\xc5\x848 _fp8 _fr8 _fs8 _f\xc5\x9b8 _ft8 _fv8 _fw8 _fx8 _fz8 _f\xc5\xba8 _f\xc5\xbc8 _g8 _2g1b8 _2g1c8 _2g1\xc4\x878 _2g1d8 _ge1 _ge2o3 _2g1f8 _4g3g8 _gh8 _gj8 _2g1k8 _gl8 _g\xc5\x828 _2g1m8 _gn8 _2g1\xc5\x848 _go1 _go2u3 _2g1p8 _gr8 _gru1 _grubo1 _grubo3w2 _gr4z8 _2g1s8 _2g1\xc5\x9b8 _2g1t8 _gv8 _gw8 _gx8 _2g1z8 _2g1\xc5\xba8 _2g1\xc5\xbc8 _h8 _2h1b8 _2h1c8 _2h1\xc4\x878 _2h1d8 _2h1f8 _2h1g8 _4h3h8 _hi1 _hipe1 _hipe2r3 _hipe3r4o1 _hipera2 _hipe1re2 _2h1j8 _2h1k8 _2h1l8 _2h1\xc5\x828 _2h1m8 _2h1n8 _2h1\xc5\x848 _2h1p8 _2h1r8 _2h1s8 _2h1\xc5\x9b8 _2h1t8 _hv8 _2h1w8 _hx8 _2h1z8 _2h1\xc5\xba8 _2h1\xc5\xbc8 _i1 _i2n3 _i2s3l _i1ni1 _i3n4ic _i3n4o1 _i3n4u1 _i4n5o2k _i2n1f _infla1 _in4f3lan _ino3w2 _izo1 _izoa2 _izoe2 _i1zoi2 _izo1o2 _izou2 _j8 _ja1 _jad\xc5\x82o1 _jad\xc5\x82o3w2 _2j1b8 _2j1c8 _2j1\xc4\x878 _2j1d8 _2j1f8 _2j1g8 _2j1h8 _4j3j8 _2j1k8 _2j1l8 _2j1\xc5\x828 _2j1m8 _2j1n8 _2j1\xc5\x848 _2j1p8 _2j1r8 _2j1s8 _2j1\xc5\x9b8 _2j1t8 _jv8 _2j1w8 _jx8 _2j1z8 _2j1\xc5\xba8 _2j1\xc5\xbc8 _k8 _2k1b8 _2k1c8 _2k1\xc4\x878 _2k1d8 _2k1f8 _2k1g8 _kh8 _ki1 _ki2l1k _kilku1 _kilkuse1 _kilkuse2t3 _kilkuseto2 _kj8 _4k3k8 _kl8 _k\xc5\x828 _2k1m8 _2k1n8 _2k1\xc5\x848 _ko1 _ko1\xc5\x82o1 _ko\xc5\x82o3w2 _ko2n1t _kon2t2r3 _kon3tr4a1 _kon3tr4e1 _ko1ntro2 _kon3tr4o3l _kon3tr4o3w _kon3tr4y1 _kon4tr5a2gi1 _kon4tr5a2se1 _kon4tr5a2sy1 _kon4tr5a2ta1 _kon4tr5a2d1m _kon4tr5a2k1c _kon4tr5a2l1t _kon4tr5a2r1g _kontru2 _2k1p8 _kr8 _kro1 _kro2\xc4\x873 _kr\xc3\xb31 _kr\xc3\xb32t1k _kr\xc3\xb3tko1 _kr\xc3\xb3tko3tr2 _kr\xc3\xb3tko3w2 _kr4z8 _2k1s8 _2k1\xc5\x9b8 _2k1t8 _kv8 _kw8 _kx8 _2k1z8 _2k1\xc5\xba8 _2k1\xc5\xbc8 _l8 _2l1b8 _2l1c8 _2l1\xc4\x878 _2l1d8 _2l1f8 _2l1g8 _2l1h8 _2l1j8 _2l1k8 _4l3l8 _2l1\xc5\x828 _2l1m8 _2l1n8 _2l1\xc5\x848 _2l1p8 _2l1r8 _2l1s8 _2l1\xc5\x9b8 _2l1t8 _lu1 _ludo1 _ludo3w2 _lv8 _2l1w8 _lx8 _2l1z8 _2l1\xc5\xba8 _2l1\xc5\xbc8 _\xc5\x828 _2\xc5\x821b8 _2\xc5\x821c8 _2\xc5\x821\xc4\x878 _2\xc5\x821d8 _2\xc5\x821f8 _2\xc5\x821g8 _2\xc5\x821h8 _2\xc5\x821j8 _2\xc5\x821k8 _2\xc5\x821l8 _4\xc5\x823\xc5\x828 _2\xc5\x821m8 _2\xc5\x821n8 _2\xc5\x821\xc5\x848 _2\xc5\x821p8 _2\xc5\x821r8 _2\xc5\x821s8 _2\xc5\x821\xc5\x9b8 _2\xc5\x821t8 _\xc5\x82v8 _2\xc5\x821w8 _\xc5\x82x8 _2\xc5\x821z8 _2\xc5\x821\xc5\xba8 _2\xc5\x821\xc5\xbc8 _m8 _2m1b8 _2m1c8 _2m1\xc4\x878 _2m1d8 _2m1f8 _2m1g8 _2m1h8 _mi1 _mi1li1 _mili2a1 _mili3a2m1p _2m1j8 _2m1k8 _2m1l8 _2m1\xc5\x828 _4m3m8 _2m1n8 _2m1\xc5\x848 _mo1 _mo2\xc5\xbc1n _mo1\xc5\xbcno1 _mo\xc5\xbcno3w2 _2m1p8 _2m1r8 _2m1s8 _2m1\xc5\x9b8 _2m1t8 _mv8 _2m1w8 _mx8 _2m1z8 _2m1\xc5\xba8 _2m1\xc5\xbc8 _n8 _na1 _na2d2 _na2j _na3b2 _na3c2 _na3\xc4\x872 _nad3i2 _na3d4ir _nad3\xc5\x822 _nad\xc5\x82u1 _na3d4\xc5\x82ub _na2d3m2 _nadmu1 _na3d4muc4h _nad3r2 _na3d4r2w _nadre1 _nadre2p1c _na3d4repc4z _na3d4re2p1t _nadr\xc4\x991 _na3d4r\xc4\x99c4z _nadru1 _na3d4ruk _na3d4r4z _nad3w2 _nadwo1 _na3d4wo2r1n _na1da1 _na3daj _na3d\xc4\x851 _na3de1 _na3d\xc4\x991 _na3do1 _na3dy1 _nad4z2 _na3dzi1 _na3d4\xc5\xba2 _na3f2 _na3g2 _na3h2 _na1ja1 _na3ja2z1d _na3j\xc4\x851 _na3je1 _na3j\xc4\x991 _na3k2 _na3l2 _na3\xc5\x822 _na3m2 _na3p2 _na3r2 _na3s2 _na3\xc5\x9b2 _na3t2 _na3u2 _na3w2 _na3z2 _na3\xc5\xba2 _na3\xc5\xbc2 _na4d3o2b2\xc5\x82 _nado1bo1 _nadobo2j1c _na4d3o2bojc4z _na4d3o2bowi1 _nado1bro1 _na4d3o2brot _na4d3o2dr4z _nadoki1 _nadoki2e1 _na4d3o2kien _nado2l1b _na4d3olbr4z _na4d5rz\xc4\x851 _nadrze1 _na4d5rzec4z _na4d5rz\xc4\x991 _na4d5rzy1 _nadzi2e1 _na4d5ziem _na4f3c _na4f3t _na4j3e2f _na4j3e2g _na4j3e2k2s _na4j3e2ko1 _na4j3e2n _na4j3e2r _na4j3e2s _na4j3e2w _na4j3e2m1f _na4j3e2u1 _na4r3c _na4r3d _na4r3k _na4r3r _na4r3t _nabr4z2 _nac4h2 _nac4z2 _na2d3b2 _na2d3c2 _na2d3\xc4\x872 _na4d3d2 _nade3t2 _na1deta1 _nad3e2tat _na2d3f2 _na2d3g2 _nad3h2 _nad3j2 _na2d3k2 _nad3l2 _na2d3n2 _na2d3p2 _na2d3s2 _na2d3\xc5\x9b2 _na2d3t2 _nad3u2 _na2dz1m _nadzmy1 _nad5z2mys _nad5zo1 _nad5z\xc3\xb31 _nadzwy1 _nad5zwyc4z _nad5\xc5\xbc2 _nadc4h2 _nadc4z2 _nadd4\xc5\xba2 _nade3b2 _nade3c2 _nade3\xc4\x872 _nade3d2 _nade3f2 _nade3g2 _nade3h2 _nade3k2 _nade3l2 _nade3\xc5\x822 _nade3m2 _nade3p2 _nade3r2 _nade3s2 _nade3\xc5\x9b2 _nade3w2 _nade3z2 _nade3\xc5\xba2 _nade3\xc5\xbc2 _nade4p3c _nade4p3n _nade4p3t _nadec4h2 _nadec4z2 _naded4z2 _naded4\xc5\xba2 _naded4\xc5\xbc2 _nader4z2 _nade2r1\xc5\xbc2 _nades4z2 _nads4z2 _nad\xc5\x9bro1 _nad\xc5\x9brod4z _nad\xc5\x9brodzi1 _nad\xc5\x9brodzi2e1 _nad\xc5\x9brod5ziem _nadtr2 _nagr4z2 _naj3a2k1t _naj3a2u1 _na2j3b2 _na2j3c2 _na2j3\xc4\x872 _na2j3d2 _na2j3f2 _na2j3g2 _na2j3h2 _naj3i2 _na2j3k2 _na2j3l2 _na2j3\xc5\x822 _na2j3m2 _naj3o2 _naj3o2b2 _naj3o2c2 _naj3o2\xc4\x872 _naj3o2d2 _naj3o2f2 _naj3o2g2 _naj3o2h2 _naj3o2k2 _naj3o2l2 _naj3o2\xc5\x822 _naj3o2m2 _naj3o2p2 _naj3o2r2 _naj3o2s2 _naj3o2\xc5\x9b2 _naj3o2t2 _naj3o2w2 _naj3o2z2 _naj3o2\xc5\xba2 _naj3o2\xc5\xbc2 _na2j3p2 _na2j3r2 _najro1 _naj3ro2z3 _na2j3s2 _na2j3\xc5\x9b2 _na2j3t2 _naj3u2 _na2j3w2 _na2j3z2 _na2j3\xc5\xba2 _na2j3\xc5\xbc2 _najbe1 _najbe2z3 _najbezw2 _najc4h2 _najc4z2 _najdo1 _najdo3b2 _najdo3c2 _najdo3\xc4\x872 _najdo3d2 _najdo3f2 _najdo3g2 _najdo3h2 _najdo3k2 _najdo3l2 _najdo3\xc5\x822 _najdo3m2 _najdo3p2 _najdo3r2 _najdo3s2 _najdo3\xc5\x9b2 _najdo3t2 _najdo3w2 _najdo3z2 _najdo3\xc5\xba2 _najdo3\xc5\xbc2 _najdoc4h2 _najdoc4z2 _najdod4z2 _najdod4\xc5\xba2 _najdod4\xc5\xbc2 _najdor4z2 _najdos4z2 _najdo2t1k2 _najd4z2 _najd4\xc5\xba2 _najd4\xc5\xbc2 _najkr2 _najo2b3c2 _najo2b3\xc4\x872 _najo2b3d2 _najo2b3f2 _najo2b3g2 _najob3h2 _najob3j2 _najo2b3k2 _najob3l2 _najob3\xc5\x822 _najo2b3m2 _najo2b3n2 _najo2b3p2 _najo2b3s2 _najo2b3\xc5\x9b2 _najo2b3t2 _najob3w2 _najo2b3\xc5\xba2 _najo2b3\xc5\xbc2 _najobc4h2 _najobc4z2 _najobd4z2 _najobd4\xc5\xba2 _najobd4\xc5\xbc2 _najobr4z2 _najobs4z2 _najoc4h2 _najoc4z2 _najo2d3c2 _najo2d3\xc4\x872 _najo4d3d2 _najo2d3f2 _najo2d3g2 _najod3h2 _najod3j2 _najo2d3k2 _najod3l2 _najo2d3m2 _najo2d3n2 _najo2d3p2 _najo2d3s2 _najo2d3\xc5\x9b2 _najo2d3t2 _najod3w2 _najod5\xc5\xbc2 _najodc4h2 _najodc4z2 _najodd4z2 _najodd4\xc5\xba2 _najodd4\xc5\xbc2 _najods4z2 _najod4z2 _najod4\xc5\xba2 _najor4z2 _najos4z2 _najro3z4u1 _najr4z2 _najsm2 _najs4z2 _naj2t1k2 _naj2t1r2 _najuc4z2 _najzw2 _nakr2 _napo1 _napo2d2 _napo3b2 _napo3c2 _napo3\xc4\x872 _napo3f2 _napo3g2 _napo3h2 _napo3k2 _napo3l2 _napo3\xc5\x822 _napo3m2 _napo3p2 _napo3r2 _napo3s2 _napo3\xc5\x9b2 _napo3t2 _napo3w2 _napo3z2 _napo3\xc5\xba2 _napo3\xc5\xbc2 _napo4m3p _napoc4h2 _napoc4z2 _napo4d3d _napod4\xc5\xba2 _napod4\xc5\xbc2 _napo2m1k2 _napor4z2 _napos4z2 _napr4z2 _naro1 _naro2z3 _nar4z2 _na2r1\xc5\xbc2 _nasm2 _nas4z2 _na2t1c _natc4h2 _na2t1k2 _naz3m2 _nazw2 _2n1b8 _2n1c8 _2n1\xc4\x878 _2n1d8 _ne1 _ne2o3 _2n1f8 _2n1g8 _2n1h8 _ni1 _ni2e1 _nie3b2 _nie3c2 _nie3\xc4\x872 _nie3d2 _nie3f2 _nie3g2 _nie3h2 _nie3k2 _nie3l2 _nie3\xc5\x822 _nie3m2 _nie3p2 _nie3r2 _nie3s2 _nie3\xc5\x9b2 _nie3t2 _nie3u2 _nie3w2 _nie3z2 _nie3\xc5\xba2 _nie3\xc5\xbc2 _nie4c3c _nie4c3k _nie4d4\xc5\xba3 _nie4m3c _nie4m3k _niec4h2 _niec4z2 _niedo1 _niedo3b2 _niedo3c2 _niedo3\xc4\x872 _niedo3d2 _niedo3f2 _niedo3g2 _niedo3h2 _niedo3k2 _niedo3l2 _niedo3\xc5\x822 _niedo3m2 _niedo3p2 _niedo3r2 _niedo3s2 _niedo3\xc5\x9b2 _niedo3t2 _niedo3w2 _niedo3z2 _niedo3\xc5\xba2 _niedo3\xc5\xbc2 _niedobr4z2 _niedoc4h2 _niedoc4z2 _niedod4z2 _niedod4\xc5\xba2 _niedod4\xc5\xbc2 _niedokr2 _niedo2m1k2 _niedo2p1c _niedopc4h2 _niedor4z2 _niedos4z2 _niedo2t1k2 _nied4z2 _nied4\xc5\xbc2 _nieo2 _nieob2 _nieo2b3c2 _nieo2b3\xc4\x872 _nieo2b3d2 _nieo2b3f2 _nieo2b3g2 _nieob3h2 _nieob3j2 _nieo2b3k2 _nieo2b3m2 _nieo2b3p2 _nieo2b3s2 _nieo2b3\xc5\x9b2 _nieob3w2 _nieo2b3\xc5\xba2 _nieo2b3\xc5\xbc2 _nieobc4h2 _nieobc4z2 _nieobd4z2 _nieobd4\xc5\xba2 _nieobd4\xc5\xbc2 _nieobs4z2 _nieoc2 _nieoc4h2 _nieoc4z2 _nieo\xc4\x872 _nieod2 _nieo2d3c2 _nieo2d3\xc4\x872 _nieo4d3d2 _nieo2d3f2 _nieo2d3g2 _nieod3h2 _nieod3j2 _nieo2d3k2 _nieod3l2 _nieod3\xc5\x822 _nieo2d3n2 _nieo2d3p2 _nieo2d3s2 _nieo2d3\xc5\x9b2 _nieo2d3t2 _nieodw2 _nieod3w1r _nieod5\xc5\xbc2 _nieodc4h2 _nieodc4z2 _nieodd4z2 _nieodd4\xc5\xba2 _nieodd4\xc5\xbc2 _nieods4z2 _nieod4z2 _nieod4\xc5\xba2 _nieof2 _nieog2 _nieoh2 _nieok2 _nieol2 _nieo\xc5\x822 _nieom2 _nieop2 _nieor2 _nieor4z2 _nieos2 _nieos4z2 _nieo\xc5\x9b2 _nieot2 _nieow2 _nieoz2 _nieo\xc5\xba2 _nieo\xc5\xbc2 _niepo1 _niepo2d2 _niepo3b2 _niepo3c2 _niepo3\xc4\x872 _niepod3\xc5\x822 _niepo3d4\xc5\x82u1 _niepo2d3m2 _niepodmu1 _niepo3d4muc4h _niepod3r2 _niepodra1 _niepo3d4rap _niepo3d4ra\xc5\xbc _nie1podre1 _niepodre2p1c _niepo3d4repc4z _niepo3d4re2p1t _niepodr\xc4\x991 _niepo3d4r\xc4\x99c4z _niepod3w2 _niepodwa1 _niepo3d4waj _niepo1dwo1 _niepo3d4woj _niepo3do1 _niepo3du1 _niepo3d4z2 _niepo3d4\xc5\xba2 _niepo3f2 _niepo3g2 _niepo3h2 _niepo3k2 _niepo3l2 _niepo3\xc5\x822 _niepo3m2 _niepo3p2 _niepo3r2 _niepo3s2 _niepo3\xc5\x9b2 _niepo3t2 _niepo3w2 _niepo3z2 _niepo3\xc5\xba2 _niepo3\xc5\xbc2 _niepodoc4h _niepo1do1cho1 _niepo4d3o2choc _niepo4d3o2str4z _niepoc4h2 _niepoc4z2 _niepo2d3b2 _niepo2d3c2 _niepo2d3\xc4\x872 _niepo4d3d2 _niepo2d3f2 _niepo2d3g2 _niepod3h2 _niepod3j2 _niepo2d3k2 _niepod3l2 _niepo2d3n2 _niepo2d3p2 _niepo2d3s2 _niepo2d3\xc5\x9b2 _niepo2d3t2 _niepod5\xc5\xbc _niepodc4h2 _niepodc4z2 _niepodd4\xc5\xba2 _niepodd4\xc5\xbc2 _niepodsm2 _niepods4z2 _niepor4z2 _nieposm2 _niepos4z2 _niepr4z _nie1prze1 _nieprze2d2 _nieprze3b2 _niepr4ze3br4z2 _nieprze3c2 _nieprze3\xc4\x872 _nieprzed3\xc5\x822 _nieprzed\xc5\x82u1 _nieprze3d4\xc5\x82u\xc5\xbc _nieprze2d3m2 _nieprzedmu1 _nieprze3d4muc4h _nieprzed3r2 _nieprzedra1 _nieprzedra1ma1 _nieprze3d4ramat _nieprzedru1 _nieprze3d4ruk _nieprzedry1 _nieprze3d4ryl _niepr4ze3d4r4z2 _nieprzed3u2 _nieprze3d4um _nieprze3dy1 _nieprze3d4z2 _nieprze3d4\xc5\xba2 _nie1prze1e2 _nieprze3e2k2s3 _nieprze3f2 _nieprze3g2 _nieprze3h2 _nieprze3k2 _nieprze3l2 _nieprze3\xc5\x822 _nieprze3m2 _nieprze3n2 _nieprze3p2 _nieprze3r2 _nieprze3s2 _nieprze3\xc5\x9b2 _nieprze3t2 _nieprze3w2 _nieprze3z2 _nieprze3\xc5\xba2 _nieprze3\xc5\xbc2 _nieprzed\xc5\x82u\xc5\xbcy1 _nieprze4d5\xc5\x82u\xc5\xbcyc _nieprze4d5z2a1 _nieprze4d5z1g2 _ni1eprzedzi1 _nieprze4d5zim _nieprze4d5zj _nieprze4d5z1l _nieprze4d5z2w2r _nieprzedzwo1 _nieprze4d5zwoj _nieprze4d5\xc5\xbc2 _nieprzec4h2 _nieprzec4z2 _nieprze2d3c2 _nieprze2d3\xc4\x872 _nieprze4d3d2 _nieprze2d3f2 _nieprze2d3g2 _nieprzed3h2 _ni1eprzed3i2 _nieprzed3j2 _nieprze2d3k2 _nieprzed3l2 _nieprze2d3n2 _nieprze2d3p2 _nieprze2d3s2 _nieprzed3s4z2 _nieprze2d3\xc5\x9b2 _nieprze2d3t2 _nieprzed3w2 _nieprzedc4h2 _nieprzedc4z2 _nieprzedd4z2 _nieprzedd4\xc5\xba2 _nieprzedd4\xc5\xbc2 _niepr4zegr4z2 _nieprzekl2 _nieprzekr2 _nieprze2\xc5\x821k2 _nieprze2p1c _nieprzepc4h2 _niepr4zer4z2 _nieprze2r1\xc5\xbc2 _nieprzesc4h2 _nieprzesm2 _nieprzes4z2 _nieprze2t1k2 _nieprzetr2 _niero1 _niero2z3 _nie1ro3z4e1 _niero3z4u1 _nierozbr4z2 _nieroze3r2 _nierozm2 _niero2z1\xc5\x9b2 _niero2z1t _nieroztr2 _nier4z2 _niesu1 _niesu2b3 _ni1esubi1 _ni2e1su3b4i2e1 _nies4z2 _nie2t1k2 _nietr2 _nieuc4z2 _nieuw2 _niewy1 _niewy3b2 _niewy3c2 _niewy3\xc4\x872 _niewy3d2 _niewy3f2 _niewy3g2 _niewy3h2 _niewy3k2 _niewy3l2 _niewy3\xc5\x822 _niewy3m2 _niewy3p2 _niewy3r2 _niewy3s2 _niewy3\xc5\x9b2 _niewy3t2 _niewy3w2 _niewy3z2 _niewy3\xc5\xba2 _niewy3\xc5\xbc2 _niewybr4z2 _niewyc4h2 _niewyc4z2 _niewyd4z2 _niewyd4\xc5\xba2 _niewyd4\xc5\xbc2 _niewyr4z2 _niewys4z2 _niewy2t1k2 _niewytr2 _niezw2 _2n1j8 _2n1k8 _2n1l8 _2n1\xc5\x828 _2n1m8 _4n3n8 _2n1\xc5\x848 _2n1p8 _2n1r8 _2n1s8 _2n1\xc5\x9b8 _2n1t8 _nv8 _2n1w8 _nx8 _2n1z8 _2n1\xc5\xba8 _2n1\xc5\xbc8 _\xc5\x848 _2\xc5\x841b8 _2\xc5\x841c8 _2\xc5\x841\xc4\x878 _2\xc5\x841d8 _2\xc5\x841f8 _2\xc5\x841g8 _2\xc5\x841h8 _2\xc5\x841j8 _2\xc5\x841k8 _2\xc5\x841l8 _2\xc5\x841\xc5\x828 _2\xc5\x841m8 _2\xc5\x841n8 _2\xc5\x841\xc5\x848 _2\xc5\x841p8 _2\xc5\x841r8 _2\xc5\x841s8 _2\xc5\x841\xc5\x9b8 _2\xc5\x841t8 _\xc5\x84v8 _2\xc5\x841w8 _\xc5\x84x8 _2\xc5\x841z8 _2\xc5\x841\xc5\xba8 _2\xc5\x841\xc5\xbc8 _o1 _o2b2 _o2d2 _ot2 _o2t1c _otc4h _o2t3c2h2\xc5\x82 _ob3l2 _oblu1 _o3b4luzg _ob3\xc5\x822 _o3b4\xc5\x82\xc4\x851 _o3b4\xc5\x82\xc4\x991 _o1b\xc5\x82o1 _o3b4\xc5\x82oc _ob3r _obra1 _o3b4ra\xc4\x87 _o3b4raso1 _o1bro1 _o3b4ron _o3b4ro\xc5\x84 _obry1 _o3b4ryz _o3b4ry\xc5\xba _o3b4r4z2 _o3be1 _o3bi1 _od3i2 _o3d4i2u1 _od3r2 _odra1 _o3d4rap _odr\xc4\x991 _o3d4r\xc4\x99t _o1dro1 _odrobi1 _o3d4robin _odru1 _o3d4rut _od2r1w _o3d4rwi1 _odr4z2 _odrze1 _o3d4rze\xc4\x87 _o3d4rz2w _od5z2 _odzi1 _o3d6zi2a1 _o3d6zi2e1 _o3de1 _o2l1\xc5\x9b _o3l2\xc5\x9bn _o4b5\xc5\x82oc4z _o4b5rz\xc4\x851 _obrze1 _o4b5rzez _obrz\xc4\x991 _o4b5rz\xc4\x99d _obrzu1 _o4b5rzuc _o4b5rzut _obrzy1 _o4b5rzyn _o4d7ziar _o4d7ziem _oa2 _oa3z _o2b3c2 _o2b3\xc4\x872 _o2b3d2 _o2b3f2 _o2b3g2 _ob3h2 _ob3j2 _o2b3k2 _o2b3m2 _o2b3n2 _o1bo1 _ob3o2str4z _o2b3p2 _o2b3s2 _o2b3\xc5\x9b2 _o2b3t2 _obu1 _ob3u2m2 _ob3w2 _o2b3\xc5\xba2 _o2b3\xc5\xbc2 _obc4h2 _obc4z2 _obd4z2 _obd4\xc5\xba2 _obd4\xc5\xbc2 _obe3b2 _obe3c2 _obe3\xc4\x872 _obe3d2 _obe3f2 _obe3g2 _obe3h2 _obe3k2 _obe3l2 _obe3\xc5\x822 _obe3m2 _obe3p2 _obe3r2 _obe3r3t _obe3s2 _obe3\xc5\x9b2 _obe3t2 _obe3w2 _obe3z2 _obe3\xc5\xba2 _obe3\xc5\xbc2 _obe4c3n _obe4z3w _obec4h2 _obec4z2 _obed4z2 _obed4\xc5\xba2 _obed4\xc5\xbc2 _obe2r3m _ober4z2 _obe2r1\xc5\xbc2 _obesc4h2 _obes4z2 _obe2t1k2 _obi3b2 _obs4z2 _oc2 _oc4h2 _oc2h2r _ochr4z2 _oc4z2 _o\xc4\x872 _oda1 _od3a2u1 _o2d3b2 _o2d3c2 _o2d3\xc4\x872 _o4d3d2 _o2d3f2 _o2d3g2 _od3h2 _o1d3i2zo1 _od3j2 _o2d3k2 _od3l2 _o2d3m2 _o2d3n2 _o1do1 _od3o2s _o2d3p2 _o2d3s2 _o2d3\xc5\x9b2 _o2d3t2 _odu1 _od3u2c4z _od3u2m2 _od3w2 _od5\xc5\xbc2 _odbe1 _odbe2z3 _odc4h2 _odc4z2 _odd4z2 _odd4\xc5\xba2 _odd4\xc5\xbc2 _ode3b2 _ode3c2 _ode3\xc4\x872 _ode3d2 _ode3f2 _ode3g2 _ode3h2 _ode3k2 _ode3l2 _ode3\xc5\x822 _ode3m2 _ode3m1k2 _ode3p2 _ode3r2 _ode3s2 _ode3\xc5\x9b2 _ode3t2 _ode3w2 _ode3z2 _ode3\xc5\xba2 _ode3\xc5\xbc2 _odec4h2 _odec4z2 _oded4z2 _oded4\xc5\xba2 _oded4\xc5\xbc2 _ode2p1c _odepc4h2 _oder4z2 _ode2r1\xc5\xbc2 _odes4z2 _ode2t1c _odetc4h2 _ode2t1k2 _odkr4z2 _ods4z2 _od4\xc5\xba2 _of2 _og2 _ogni1 _o1gni2o1 _ognio3tr2 _og\xc3\xb31 _og\xc3\xb32l1n _o1g\xc3\xb3lno1 _og\xc3\xb3lno3k2 _oh2 _ok2 _oka1 _oka3m2 _okr2 _ole1 _o1le2o3 _om2 _op2 _o2p1c _opc4h2 _o2r1t _or2t\xc4\x991 _or4z2 _o2r2\xc5\xbc2 _os2 _osi1 _osi2e1 _osie2m3 _osie2m1s _osie1mse1 _osiemse2t3 _os4z2 _o\xc5\x9b2 _o\xc5\x9bmi1 _o1\xc5\x9bmi2o1 _o\xc5\x9bmio3\xc5\x9b2 _ow2 _oz2 _o\xc5\xba2 _o\xc5\xbc2 _p8 _2p1b8 _2p1c8 _pc4h8 _2p1\xc4\x878 _2p1d8 _pe1 _pe2r3 _pe3c2k _pe3r4e1 _pe3r4i1 _pe3r4o1 _pe3r4u1 _pe3r4y1 _pe4r5i2n _pe1e2 _pe1e1se1 _pee2se2l _pe2\xc5\x821n _pe\xc5\x82no1 _pe\xc5\x82no3kr2 _pe1pe1 _pe1pe1e2 _pepee2r _pepee2s _pe1ze1 _peze2t1p _pe1ze1tpe1 _pe1ze1tpe1e2 _peze2t1pee2r _2p1f8 _2p1g8 _ph8 _pi1 _pi2e1 _pie2r1w _pierwo1 _pierwo3w2 _pi2\xc4\x991 _pi\xc4\x992\xc4\x873 _pi1\xc4\x99ci1 _pi\xc4\x99ci2o1 _pi\xc4\x99cio3\xc5\x9b2 _pi\xc4\x992\xc4\x871s _pi\xc4\x99\xc4\x87se1 _pi\xc4\x99\xc4\x87se2t3 _pi2o1 _pio1no1 _piono3w2 _pj8 _2p1k8 _pl8 _p\xc5\x828 _p\xc5\x82a1 _p\xc5\x82asko1 _p\xc5\x82asko3w2 _2p1m8 _2p1n8 _2p1\xc5\x848 _po1 _po2d2 _po3b2 _po3c2 _po3\xc4\x872 _pod3\xc5\x822 _po3d4\xc5\x82u1 _po2d3m2 _podmu1 _po3d4muc4h _po2d3n2 _podna1 _po3d4naw _pod3r2 _pod2r1w _po3d4r2wi1 _podra1 _po3d4rap _po3d4ra\xc5\xbc _podre1 _podre2p1c _po3d4repc4z _po3d4re2p1t _podr\xc4\x991 _po3d4r\xc4\x99c4z _po3d4r\xc4\x99tw _po1dro1 _po3d4roba1 _po3d4ro1bo1 _po3d4rob\xc3\xb31 _po3d4roby1 _po3d4roc4z _po3d4ro\xc5\xbc _podr\xc3\xb31 _po3d4r\xc3\xb3\xc5\xbc _podru1 _po3d4ruzg _podry1 _po3d4ryg _podr4z _po3d4rze1 _pod3w2 _podwa1 _po3d4waj _po1dwo1 _po3d4woi2 _po3d4woj _po3d4wor4z _podw\xc3\xb31 _po3d4w\xc3\xb32j1n _po3d4w\xc3\xb3r _po3da1 _po3d\xc4\x851 _po3de1 _po3dej _po3d\xc4\x991 _podi1 _po3di2u1 _po3do1 _po3du1 _po3dy1 _po3d4z2 _po3d4\xc5\xba2 _poe2 _po3e2k2s3 _po3f2 _po3g2 _po3h2 _po3k2 _po3l2 _po3\xc5\x822 _po3m2 _po3p2 _po3r2 _po3r1\xc5\xbc _po3s2 _po3\xc5\x9b2 _po3t2 _po3w2 _po3z2 _po3\xc5\xba2 _po3\xc5\xbc2 _poc4z2 _po4c2z3d _po4c2z3t _pode3k2 _po4d3e4k2s3 _podobi1 _podobi2a1 _po4d3o2biad _po1do1bo1 _podobo2j1c _po4d3o2bojc4z _podob\xc3\xb31 _po4d3o2b\xc3\xb3z _podobra1 _po4d3o2braz _podoc4h _po1do1cho1 _po4d3o2choc _po4d3o2d1m _po4d3o2f _po4d3o2g _podoki1 _podoki2e1 _po4d3o2kien _po4d3o2k1n _podokre1 _po4d3o2kres _podokr\xc4\x991 _po4d3o2kr\xc4\x99g _podopi1 _podopi2e1 _po4d3o2piec4z _podory1 _po4d3o2ryw _podosi1 _podosi1ni1 _podosini2a1 _po4d3o2siniak _po4d3o2str4z _podo2b1s _po4d3obs4z _po4d3o4d3d _podo2l1b _po4d3olbr4z _pod\xc3\xb31 _po4d3\xc3\xb3w _po4d3u2c4z _po4d3u2d4z _po4d3u2pa1 _podura1 _po4d3u2ral _po4d3u2sta1 _podus4z _podu2s2z1c _po4d3u2szc4z _po4d5r\xc4\x992cz1n _podza1 _po4d5zakr _po4d5zam _po4d5zast _po2dz1b _po4d5zbi1 _po4d5ze1 _podzi1 _podzi2e1 _podzie1le1 _podzi1eleni1 _po4d5zieleni2\xc4\x851 _po4d5zielenic _po4d5zieleni\xc4\x87 _podzi2e1le1ni2e1 _po4d5zielenien _po4d5zieleni2\xc4\x991 _po4d5zielenil _po4d5zieleni\xc5\x82 _po4d5zielenim _po4d5zieleni2o1 _po4d5zielenis _po4d5ziem _po1dzi2o1 _po4d5ziom _po4d5z2w2r _po4l3s _po4m3p _po4\xc5\x843c _po4r3c _po4r3f _po4r3n _po4r3t _po4s2t3d _po4s2t3f _po4s2t3g _po4st3h _po4st3i2 _po4s2t3k _po4st3l _po4s2t3m _po4s2t3p _po1stro1 _po4st3rom _po4s2t3s _poduszczy1 _po5d4uszczyn _po5r4t\xc4\x991 _pobr2 _pobr4z2 _poc4h2 _poc2h2r _pochr4z2 _pod3a2l1p _po2d3b2 _po2d3c2 _po2d3\xc4\x872 _po4d3d2 _po2d3f2 _po2d3g2 _pod3h2 _pod3i2n _pod3j2 _po2d3k2 _pod3l2 _po2d3p2 _po2d3s2 _po2d3\xc5\x9b2 _pod\xc5\x9br\xc3\xb31 _pod3\xc5\x9br\xc3\xb32d5 _po2d3t2 _pod5\xc5\xbc2 _podc4h2 _podc4z2 _podd4\xc5\xba2 _podd4\xc5\xbc2 _pode3b2 _pode3c2 _pode3\xc4\x872 _pode3d2 _pode3f2 _pode3g2 _pode3h2 _pode3l2 _pode3\xc5\x822 _pode3m2 _pode3p2 _pode3r2 _pode3s2 _pode3\xc5\x9b2 _pode3t2 _pode3t1k2 _pode3w2 _pode3z2 _pode3\xc5\xba2 _pode3\xc5\xbc2 _podec4h2 _podec4z2 _poded4z2 _poded4\xc5\xba2 _poded4\xc5\xbc2 _pode2p1c _podepc4h2 _poder4z2 _pode2r1\xc5\xbc2 _podesc4h2 _podes4z2 _podro2z3 _podsm2 _pods4z2 _pogr4z2 _pokl2 _pokr2 _po2\xc5\x821k2 _pom4p1k _po2m1k2 _pona1 _pona2d2 _pona3b2 _pona3c2 _pona3c4z2 _pona3\xc4\x872 _po1na3do1 _pona3d4\xc5\xba2 _pona3f2 _pona3g2 _pona3h2 _pona3k2 _pona3l2 _pona3\xc5\x822 _pona3m2 _pona3p2 _pona3r2 _pona3s2 _pona3\xc5\x9b2 _pona3t2 _pona3w2 _pona3z2 _pona3\xc5\xba2 _pona3\xc5\xbc2 _pona4f3t _ponabr4z2 _ponac4h2 _pona2d3c2 _ponad3c4h2 _ponad3c4z2 _pona2d3\xc4\x872 _pona4d3d _ponad3d4\xc5\xba2 _pona2d3f2 _pona2d3g2 _ponad3h2 _ponad3j2 _pona2d3k2 _ponad3l2 _pona2d3p2 _pona2d3s2 _pona2d3\xc5\x9b2 _pona2d3t2 _ponad4z2 _ponar4z2 _ponasm2 _ponas4z2 _ponaz3m2 _ponazw2 _poni1 _poni2e1 _ponie3k2 _ponie3w2 _po2p1c _popc4h2 _po1po1 _popo3w2 _popr4z2 _por4t1w _por4t1f _por4t1m _po1ro1 _poro2z3 _poro3z4u1 _por4z2 _posc4h2 _posm2 _pos4z2 _po2t1k2 _potr2 _poz4m2 _poza1 _poza3u2 _pozw2 _p\xc3\xb31 _p\xc3\xb32\xc5\x823 _p\xc3\xb33\xc5\x824\xc4\x851 _p\xc3\xb3\xc5\x82e1 _p\xc3\xb33\xc5\x824ec4z _p\xc3\xb33\xc5\x824\xc4\x991 _p\xc3\xb33\xc5\x824y1 _p\xc3\xb32\xc5\x821k2 _p\xc3\xb3\xc5\x82kr2 _p\xc3\xb32\xc5\x821m2 _p\xc3\xb3\xc5\x82o2 _p\xc3\xb3\xc5\x82ob3r _p\xc3\xb3\xc5\x82o2m2d _p\xc3\xb32\xc5\x821p _p\xc3\xb3\xc5\x82pr4z _p\xc3\xb3\xc5\x82przy1 _p\xc3\xb3\xc5\x82przy3m2k _4p3p8 _pr8 _pra1 _pra3s2 _pra2w1n _pra3w2nu1 _pra3w2z _pra1pra1 _prapra2w1n _prapra3w2nu1 _pre1 _predy1 _predy2s3po1 _pr4z8 _prze1 _prze2d2 _prze3b2 _prze3c2 _prze3\xc4\x872 _przed3\xc5\x822 _przed\xc5\x82u1 _prze3d4\xc5\x82u\xc5\xbc _prze2d3m2 _przedmu1 _prze3d4muc4h _przed3o2 _prze3d4o3br _prze3d4o3st _prze3d4o3zo1 _przed3r2 _przedra1 _przedra1ma1 _prze3d4ramat _przedru1 _prze3d4ruk _przedry1 _prze3d4ryl _pr4ze3d4r4z2 _przed3u2 _prze3d4um _prze3d\xc4\x851 _prze3d\xc4\x991 _prze3dy1 _prze3d4z2 _prze3d4\xc5\xba2 _prze1e2 _prze3e2k2s3 _prze3f2 _prze3g2 _prze3h2 _prze3k2 _prze3l2 _prze3\xc5\x822 _prze3m2 _prze3n2 _prze3p2 _prze3r2 _prze3s2 _prze3\xc5\x9b2 _prze3t2 _prze3u2 _prze3w2 _prze3z2 _prze3\xc5\xba2 _prze3\xc5\xbc2 _przed\xc5\x82u\xc5\xbcy1 _prze4d5\xc5\x82u\xc5\xbcyc _przedosta1 _prze4d5o4stat _prze4d5za1 _prze4d5z1g2 _przedzi1 _prze4d5zim _prze4d5zj _prze4d5z1l _prze4d5z2w2r _przedzwo1 _prze4d5zwoj _prze4d5\xc5\xbc2 _przebr2 _pr4zebr4z2 _przec4h2 _przec2h2r _pr4zechr4z2 _przeci1 _przeci2w3 _przeci1wi1 _prze1ci3w4i2e1 _przeciwa2 _przeci4w3w2 _przec4z2 _przeda1 _przedago1 _przed3a2gon _przed3a2k1c _przed3a2l1p _prze2d3b2 _prze2d3c2 _prze2d3\xc4\x872 _prze4d3d2 _prze1de1 _przed3e2g1z _prze1de1me1 _przed3e2mer _prze2d3f2 _prze2d3g2 _przed3h2 _przed3i2 _przed3j2 _prze2d3k2 _przed3l2 _prze2d3n2 _prze2d3p2 _prze2d3s2 _przedsi1 _przedsi2\xc4\x991 _przed3si\xc4\x993w2 _przed3s4z2 _prze2d3\xc5\x9b2 _prze2d3t2 _przed3w2 _przedc4h2 _przedc4z2 _przedd4z2 _przedd4\xc5\xba2 _przedd4\xc5\xbc2 _pr4zedgr4z2 _przedy2s3ku1 _pr4zegr4z2 _przekl2 _przekr2 _prze2\xc5\x821k2 _prze2m1k2 _prze2p1c _przepc4h2 _pr4zer4z2 _prze2r1\xc5\xbc2 _przesc4h2 _przesm2 _przes4z2 _prze2t1k2 _przetr2 _przetra1 _przetra2n2s3 _przy1 _przy3b2 _przy3c2 _przy3\xc4\x872 _przy3d2 _przy3f2 _przy3g2 _przy3h2 _przy3k2 _przy3l2 _przy3\xc5\x822 _przy3m2 _przy3p2 _przy3r2 _przy3s2 _przy3\xc5\x9b2 _przy3t2 _przy3w2 _przy3z2 _przy3\xc5\xba2 _przy3\xc5\xbc2 _przybr2 _przyc4h2 _przyc4z2 _przyd4z2 _przyd4\xc5\xba2 _przyd4\xc5\xbc2 _pr4zygr4z2 _przy2m1k2 _przyo2 _przyoz2 _przy2p1c _przypc4h2 _pr4zyr4z2 _przy2r1\xc5\xbc2 _przysc4h2 _przys4z2 _przy2t1k2 _2p1s8 _2p1\xc5\x9b8 _2p1t8 _pv8 _pw8 _px8 _2p1z8 _2p1\xc5\xba8 _2p1\xc5\xbc8 _r8 _2r1b8 _2r1c8 _2r1\xc4\x878 _2r1d8 _re1 _retra1 _retra2n2s3 _2r1f8 _2r1g8 _2r1h8 _2r1j8 _2r1k8 _2r1l8 _2r1\xc5\x828 _2r1m8 _2r1n8 _2r1\xc5\x848 _ro1 _ro2z3 _ro3z4a1 _ro3z4e1 _ro3z4e3b2 _ro3z4e3c2 _ro3z4e3\xc4\x872 _ro3z4e3d2 _ro3z4e3f2 _ro3z4e3g2 _ro3z4e3h2 _ro3z4e3k2 _ro3z4e3l2 _ro3z4e3\xc5\x822 _ro3z4e3m2 _ro3z4e3p2 _ro3z4e3r2 _ro3z4e3s2 _ro3z4e3\xc5\x9b2 _ro3z4e3t2 _ro3z4e3w2 _ro3z4e3z2 _ro3z4e3\xc5\xba2 _ro3z4e3\xc5\xbc2 _ro3z4ej _ro3z4u1 _ro4z5a2gi1 _rozani1 _ro4z5a2ni2e1 _ro4z5e2mo1 _ro4z5e4g3z _ro4z5e4n3t _rozbr4z2 _ro2z1d2 _rozec4h2 _rozec4z2 _rozed4z2 _rozed4\xc5\xba2 _rozed4\xc5\xbc2 _roze2p1c _rozepc4h2 _rozer4z2 _roze2r1\xc5\xbc2 _rozesc4h2 _rozes4z2 _rozi2 _rozm2 _ro1zo2 _ro2z1p _ro1zpo1 _rozpo3w2 _ro2z1\xc5\x9b2 _ro2z1t2 _roztr2 _rozw2 _2r1p8 _4r3r8 _2r1s8 _2r1\xc5\x9b8 _2r1t8 _rv8 _2r1w8 _rx8 _r4z8 _2r1\xc5\xba8 _2r1\xc5\xbc8 _s8 _sa1 _samo1 _samo3c4h2 _samo3k2 _samo3p2 _samo3w2 _samo1ro1 _samoro2z3 _2s1b8 _sc8 _sc4h8 _s\xc4\x878 _2s1d8 _2s1f8 _2s1g8 _sh8 _si1 _si2e1 _sie1de1 _siede2m3 _siede2m1s _sie1de1mse1 _siedemse2t3 _sie2d1m _si1edmi1 _siedmi2o1 _siedmio3\xc5\x9b2 _sj8 _sk8 _sk\xc4\x851 _sk\xc4\x85d4\xc5\xbc _sk\xc4\x852d5\xc5\xbce1 _skl8 _skr8 _sl8 _s\xc5\x828 _sm8 _sn8 _s\xc5\x848 _so1 _so1bo1 _sobo3w2 _sp8 _spo1 _spo2d2 _spo3b2 _spo3c2 _spo3\xc4\x872 _spo3d4z2 _spo3f2 _spo3g2 _spo3h2 _spo3k2 _spo3l2 _spo3\xc5\x822 _spo3m2 _spo3p2 _spo3r2 _spo3s2 _spo3\xc5\x9b2 _spo3t2 _spo3w2 _spo3z2 _spo3\xc5\xba2 _spo3\xc5\xbc2 _spo4r3n _spo4r3t _spoc4h2 _spoc4z2 _spo4d3d _spod4\xc5\xba2 _spod4\xc5\xbc2 _spor4z2 _spos4z2 _sp\xc3\xb31 _sp\xc3\xb32\xc5\x823 _sr8 _2s1s8 _s\xc5\x9b8 _st8 _ste1 _ste1re1 _stere2o3 _stereoa2 _ste1re1oe2 _stereoi2 _stereo1o2 _stereou2 _su1 _su2b3 _subi1 _su3b4i2e1 _subo1 _su3b4o2t1n _supe1 _supe2r3 _supera1 _supe3r4at _superi1 _supe3r4i2o1 _supe4r5a2tr _super4z _supe2r5z2b _supe1re2 _supero1 _superodr4z _su1perodrzu1 _supero2d1rzut _sv8 _sw8 _sx8 _s4z8 _sze1 _sze2s3 _sze4\xc5\x9b2\xc4\x873 _sze\xc5\x9b1c _sze1\xc5\x9b2ci1 _sze\xc5\x9bci2o1 _sze\xc5\x9bcio3\xc5\x9b2 _sze\xc5\x9b2\xc4\x871s _sze1\xc5\x9b\xc4\x87se1 _sze\xc5\x9b\xc4\x87se2t3 _2s1\xc5\xba8 _2s1\xc5\xbc8 _\xc5\x9b8 _2\xc5\x9b1b8 _\xc5\x9b1c8 _\xc5\x9b\xc4\x878 _2\xc5\x9b1d8 _2\xc5\x9b1f8 _2\xc5\x9b1g8 _\xc5\x9bh8 _\xc5\x9bj8 _2\xc5\x9b1k8 _\xc5\x9bl8 _\xc5\x9b\xc5\x828 _\xc5\x9bm8 _\xc5\x9bn8 _\xc5\x9b\xc5\x848 _2\xc5\x9b1p8 _\xc5\x9br8 _\xc5\x9br\xc3\xb31 _\xc5\x9br\xc3\xb32d5 _\xc5\x9br\xc3\xb3dr2 _2\xc5\x9b1s8 _2\xc5\x9b1\xc5\x9b8 _2\xc5\x9b1t8 _\xc5\x9bv8 _\xc5\x9bw8 _\xc5\x9bwi1 _\xc5\x9bwi2a1 _\xc5\x9bwiat\xc5\x82o1 _\xc5\x9bwiat\xc5\x82o3w2 _\xc5\x9bx8 _2\xc5\x9b1z8 _2\xc5\x9b1\xc5\xba8 _2\xc5\x9b1\xc5\xbc8 _t8 _ta1 _ta2o3 _tar4z _ta1rza1 _ta2r7zan _2t1b8 _2t1c8 _tc4h8 _2t1\xc4\x878 _2t1d8 _te1 _te2o3 _2t1f8 _2t1g8 _th8 _tj8 _2t1k8 _tl8 _t\xc5\x828 _2t1m8 _2t1n8 _2t1\xc5\x848 _to1 _toa3 _2t1p8 _tr8 _tra1 _tra2n2s3 _tran3s4e1 _transi1 _tran3s4i2e1 _tran3s4y1 _tran3s4z _tran4s5e2u1 _tra1nsa2 _transo2 _tr\xc3\xb31 _tr\xc3\xb32j3 _tr\xc3\xb33j4\xc4\x851 _tr\xc3\xb3je1 _tr\xc3\xb33j4ec4z _tr\xc3\xb33j4\xc4\x991 _tr4z8 _trze1 _trze2c4h3 _trze2c2h1s _trze1chse1 _trzechse2t3 _2t1s8 _2t1\xc5\x9b8 _4t3t8 _tv8 _tw8 _tx8 _ty1 _tysi1 _tysi2\xc4\x851 _tysi\xc4\x852c3 _tysi\xc4\x853c4a1 _tysi\xc4\x853c4e1 _tysi\xc4\x853c4z _tysi\xc4\x854c5z\xc5\x82 _2t1z8 _2t1\xc5\xba8 _2t1\xc5\xbc8 _u1 _u3b2 _u3c2 _u3d2 _u3f2 _u3g2 _u3h2 _u3k2 _u3l2 _u3\xc5\x822 _u3m2 _u3n2 _u3p2 _u3r2 _u3s2 _u3t2 _u3w2 _u3z2 _u3\xc5\xba2 _u3\xc5\xbc2 _u4d3k _u4f3n _ukle1 _u4k3lej _u4l3s _u4l3t _u2m1b _u4m3br _u4n3c _u4n3d _u4p3p _u4p3p2s _u4r3s _u4s2t3n _u4s2t1c _u4s2t1k _u4z3be1 _ube1 _ube2z3 _ubezw2 _ubr2 _uc4h2 _uc4z2 _u\xc4\x872 _ud4z2 _ud4\xc5\xba2 _ud4\xc5\xbc2 _ukr2 _u2m1k2 _u2p1c _upc4h2 _upo1 _upo2d2 _upo3b2 _upo3c2 _upo3\xc4\x872 _upo3da1 _upo3f2 _upo3g2 _upo3h2 _upo3k2 _upo3l2 _upo3\xc5\x822 _upo3m2 _upo3p2 _upo3r2 _upo3s2 _upo3\xc5\x9b2 _upo3t2 _upo3w2 _upo3z2 _upo3\xc5\xba2 _upo3\xc5\xbc2 _upoc4h2 _upoc4z2 _upo4d3d _upod4\xc5\xba2 _upod4\xc5\xbc2 _upor4z2 _upos4z2 _uro1 _uro2z3 _ur4z2 _u2r1\xc5\xbc2 _usc4h2 _us4z2 _u\xc5\x9b2 _u2t1k2 _utr2 _uze1 _uze3w2 _v8 _vb8 _vc8 _v\xc4\x878 _vd8 _vf8 _vg8 _vh8 _vj8 _vk8 _vl8 _v\xc5\x828 _vm8 _vn8 _v\xc5\x848 _vp8 _vr8 _vs8 _v\xc5\x9b8 _vt8 _vv8 _vw8 _vx8 _vz8 _v\xc5\xba8 _v\xc5\xbc8 _w8 _2w1b8 _2w1c8 _2w1\xc4\x878 _2w1d8 _we1 _we3b2 _we3c2 _we3\xc4\x872 _we3d2 _we3f2 _we3g2 _we3h2 _we3k2 _we3l2 _we3\xc5\x822 _we3m2 _we3n2 _we3p2 _we3r2 _we3s2 _we3\xc5\x9b2 _we3t2 _we3w2 _we3z2 _we3\xc5\xbc2 _we4k3t _we4l3w _we4\xc5\x823n _we4n3d _we4n3t _we4r3b _we4r3d _we4r3n _we4r3s _we4r3t _we4s3pr4z _wes2t1c _we4s3tc4h2 _we4z3br _we4z3g\xc5\x82 _wec4h2 _wec4z2 _wed4z2 _wed4\xc5\xba2 _wed4\xc5\xbc2 _we2m1k2 _we2p1c _wepc4h2 _wer4z2 _wes4z2 _we2t1k2 _we2w1n _wewn\xc4\x851 _wewn\xc4\x852tr4z3 _2w1f8 _2w1g8 _wh8 _wi1 _wi2e1 _wielo1 _wielo3d2 _wielo3k2 _wielo3\xc5\x9b2 _wielu1 _wie1luse1 _wieluse2t3 _wi2l1c _wilc4z _wilczo1 _wilczo3m2 _2w1j8 _2w1k8 _2w1l8 _2w1\xc5\x828 _2w1m8 _2w1n8 _wni1 _wni2e1 _wniebo1 _wniebo3w2 _2w1\xc5\x848 _wo1 _wo1do1 _wodo3w2 _2w1p8 _2w1r8 _2w1s8 _wsp\xc3\xb31 _wsp\xc3\xb32\xc5\x823 _wsp\xc3\xb3\xc5\x82i2 _wsp\xc3\xb3\xc5\x82o1 _wsp\xc3\xb3\xc5\x82o2b3w _wsp\xc3\xb3\xc5\x82u2 _wsp\xc3\xb32\xc5\x821w2 _ws4z _wsze1 _wsze2c4h3 _wszecho2 _wszec2h2w2 _2w1\xc5\x9b8 _2w1t8 _wv8 _4w3w8 _wx8 _wy1 _wy3b2 _wy3c2 _wy3\xc4\x872 _wy3d2 _wy3f2 _wy3g2 _wy3h2 _wy3k2 _wy3l2 _wy3\xc5\x822 _wy3m2 _wyo2 _wy3o2d3r _wy3p2 _wy3r2 _wy3s2 _wy3\xc5\x9b2 _wy3t2 _wy3w2 _wy3z2 _wy3\xc5\xba2 _wy3\xc5\xbc2 _wyc4z2 _wy4cz3ha1 _wy2\xc5\xbc1s _wy4\xc5\xbc3s4z _wybr2 _wybr4z2 _wyc4h2 _wydr2 _wyd4z2 _wyd4\xc5\xba2 _wyd4\xc5\xbc2 _wye2 _wye2k2s3 _wygr4z2 _wyi2 _wyi2zo1 _wykl2 _wykr2 _wykr4z2 _wy2m1k2 _wy2p1c _wypc4h2 _wypr4z2 _wyr4z2 _wy2r1\xc5\xbc2 _wysc4h2 _wysm2 _wys4z2 _wy2t1c _wytc4h2 _wy2t1k2 _wytr2 _2w1z8 _2w1\xc5\xba8 _2w1\xc5\xbc8 _x8 _xb8 _xc8 _x\xc4\x878 _xd8 _xf8 _xg8 _xh8 _xj8 _xk8 _xl8 _x\xc5\x828 _xm8 _xn8 _x\xc5\x848 _xp8 _xr8 _xs8 _x\xc5\x9b8 _xt8 _xv8 _xw8 _xx8 _xz8 _x\xc5\xba8 _x\xc5\xbc8 _z8 _za1 _za3b2 _za3c2 _za3\xc4\x872 _za3d2 _za3f2 _za3g2 _za3h2 _za3k2 _za3l2 _za3\xc5\x822 _za3m2 _zao2 _za3o2b3r _za3o2b3s _za3p2 _za3r2 _za3s2 _za3\xc5\x9b2 _za3t2 _za3u2 _za3w2 _za3z2 _za3\xc5\xba2 _za3\xc5\xbc2 _za4k3t _za4l3g _za4l3k _za4l3t _za4m3k _za2r1c _za4r3c4h _za4uto1 _za5m4k2n _zabr2 _zabr4z2 _zac4h2 _zac4z2 _zado1 _zado2\xc5\x9b\xc4\x873 _zado\xc5\x9b\xc4\x87u4 _zadr2 _zady1 _zady2s3po1 _zad4z2 _zad4\xc5\xba2 _zad4\xc5\xbc2 _zagr4z2 _zai2 _zai2n3 _zai2zo1 _zai1ni1 _zain4ic _zakl2 _zakr2 _zakr4z2 _zani1 _zani2e1 _zanie3d2 _zar4z2 _za2r1\xc5\xbc2 _zasc4h2 _zasm2 _zas4z2 _za2t1k2 _zatr2 _zb8 _2z1c8 _2z1\xc4\x878 _2z1d8 _zde1 _zde2z3 _zdeza1 _zde3z4awu1 _zde1ze1 _zde3z4el _zde3z4er _zde3z4y1 _zdy1 _zdysko1 _zdy2s3ko2n1t _zdyskre1 _zdy2s3kred _zdyskwa1 _zdy2s3kwal _ze1 _ze3b2 _ze3c2 _ze3\xc4\x872 _ze3d2 _ze3f2 _ze3g2 _ze3h2 _ze3k2 _ze3l2 _ze3\xc5\x822 _ze3m2 _ze3p2 _ze3r2 _ze3s2 _ze3\xc5\x9b2 _ze3t2 _ze3t1k2 _ze3w2 _ze3z2 _ze3\xc5\xba2 _ze3\xc5\xbc2 _ze4r3k _ze1te1 _ze1te1me1 _ze4t3e2m1e2s _ze1te1se1 _ze4t3e2s1e2l _ze4t3e2m1p _zetha1 _ze4t3hap _zec4h2 _zec4z2 _zed4z2 _zed4\xc5\xba2 _zed4\xc5\xbc2 _zekl2 _ze2p1c _zepc4h2 _zer4z2 _ze2r1\xc5\xbc2 _zesc4h2 _zesm4 _zes4z2 _2z1f8 _zg8 _zh8 _zi1 _zi2m1n _zimno1 _zimno3kr2 _zj8 _2z1k8 _zl8 _z\xc5\x828 _z\xc5\x82o1 _z\xc5\x82o3w2 _zm8 _zma1 _zma2r1t _zmartwy1 _zmartwy2c4h3 _zmartwyc2h2w2 _zn8 _zni1 _zni2e1 _znie3b2 _znie3c2 _znie3\xc4\x872 _znie3d2 _znie3f2 _znie3g2 _znie3h2 _znie3k2 _znie3l2 _znie3\xc5\x822 _znie3m2 _znie3n2 _znie3\xc5\x842 _znie3p2 _znie3r2 _znie3s2 _znie3\xc5\x9b2 _znie3t2 _znie3w2 _znie3z2 _znie3\xc5\xba2 _znie3\xc5\xbc2 _znie4d4\xc5\xba3 _znie4m3c _zniec4h2 _zniec4z2 _znied4z2 _znied4\xc5\xbc2 _znier4z2 _znies4z2 _z\xc5\x848 _zo1 _zo2o3 _2z1p8 _zr8 _zro1 _zro2z3 _zro3z4u1 _2z1s8 _2z1\xc5\x9b8 _2z1t8 _zv8 _zw8 _zx8 _4z3z8 _z\xc5\xba8 _z\xc5\xbc8 _\xc5\xba8 _2\xc5\xba1b8 _2\xc5\xba1c8 _2\xc5\xba1\xc4\x878 _2\xc5\xba1d8 _\xc5\xba2d4\xc5\xba8 _2\xc5\xba1f8 _2\xc5\xba1g8 _\xc5\xbah8 _\xc5\xbaj8 _2\xc5\xba1k8 _2\xc5\xba1l8 _\xc5\xba\xc5\x828 _2\xc5\xba1m8 _2\xc5\xba1n8 _\xc5\xba\xc5\x848 _2\xc5\xba1p8 _\xc5\xbar8 _2\xc5\xba1s8 _2\xc5\xba1\xc5\x9b8 _2\xc5\xba1t8 _\xc5\xbav8 _2\xc5\xba1w8 _\xc5\xbax8 _2\xc5\xba1z8 _4\xc5\xba3\xc5\xba8 _2\xc5\xba1\xc5\xbc8 _\xc5\xbc8 _2\xc5\xbc1b8 _2\xc5\xbc1c8 _2\xc5\xbc1\xc4\x878 _2\xc5\xbc1d8 _2\xc5\xbc1f8 _2\xc5\xbc1g8 _\xc5\xbch8 _2\xc5\xbc1j8 _2\xc5\xbc1k8 _2\xc5\xbc1l8 _2\xc5\xbc1\xc5\x828 _2\xc5\xbc1m8 _2\xc5\xbc1n8 _2\xc5\xbc1\xc5\x848 _2\xc5\xbc1p8 _2\xc5\xbc1r8 _2\xc5\xbc1s8 _2\xc5\xbc1\xc5\x9b8 _2\xc5\xbc1t8 _\xc5\xbcv8 _2\xc5\xbc1w8 _\xc5\xbcx8 _2\xc5\xbc1z8 _2\xc5\xbc1\xc5\xba8 _4\xc5\xbc3\xc5\xbc8 \xc5\x9b1c 1\xc5\x9b2ci1 2b1c 2b1\xc4\x87 2b1d 2b1f 2b1g 2b1k 2b1m 2b1n 2b1\xc5\x84 2b1p 2b1s 2b1\xc5\x9b 2b1t 2b1z 2b1\xc5\xba 2b1\xc5\xbc 2b2\xc5\x821k 2b2r1n 2c1b 2c1\xc4\x87 2c1d 2c1f 2c1g 2c1k 2c1l 2c1m 2c1n 2c1\xc5\x84 2c1p 2c1s 2c1\xc5\x9b 2c1t 2c1\xc5\xba 2c1\xc5\xbc c4h 2c2h1b 2c2h1c 2c2h1\xc4\x87 2c2h1d 2c2h1f 2c2h1g 2c2h1k 2c2h1m 2c2h1n 2c2h1\xc5\x84 2c2h1p 2c2h1s 2c2h1\xc5\x9b 2c2h1t 2c2h1z 2c2h1\xc5\xba 2c2h1\xc5\xbc c4z 2cz1b 2c2z1c 2c2z1\xc4\x87 2c2z1d 2c2z1f 2cz1g 2c2z1k 2cz1l 2cz1m 2cz1n 2cz1\xc5\x84 2c2z1p 2c2z1s 2c2z1\xc5\x9b 2c2z1t 2c4z3z 2cz1\xc5\xba 2cz1\xc5\xbc 2\xc4\x871b 2\xc4\x871c 2\xc4\x871d 2\xc4\x871f 2\xc4\x871g 2\xc4\x871k 2\xc4\x871m 2\xc4\x871n 2\xc4\x871\xc5\x84 2\xc4\x871p 2\xc4\x871s 2\xc4\x871\xc5\x9b 2\xc4\x871t 2\xc4\x871z 2\xc4\x871\xc5\xba 2\xc4\x871\xc5\xbc 2d1b 2d1c 2d1\xc4\x87 2d1f 2d1g 2d1k 2d1m 2d1n 2d1\xc5\x84 2d1p 2d1s 2d1\xc5\x9b 2d1t 2d2\xc5\x821b d2\xc5\x821s 2d\xc5\x82s4z 2d2r1n d4z 2dz1b 2d2z1c 2d2z1\xc4\x87 2d2z1d 2d2z1f 2dz1g 2d2z1k 2dz1l 2dz1m 2dz1n 2dz1\xc5\x84 2d2z1p 2d2z1s 2d2z1\xc5\x9b 2d2z1t 2d4z3z 2dz1\xc5\xba 2dz1\xc5\xbc d4\xc5\xba 2d2\xc5\xba1b 2d2\xc5\xba1c 2d2\xc5\xba1\xc4\x87 2d2\xc5\xba1d 2d2\xc5\xba1f 2d2\xc5\xba1g 2d2\xc5\xba1k 2d2\xc5\xba1m 2d2\xc5\xba1n 2d\xc5\xba1\xc5\x84 2d2\xc5\xba1p 2d2\xc5\xba1s 2d2\xc5\xba1\xc5\x9b 2d2\xc5\xba1t 2d2\xc5\xba1z 2d4\xc5\xba3\xc5\xba 2d2\xc5\xba1\xc5\xbc d4\xc5\xbc 2d2\xc5\xbc1b 2d2\xc5\xbc1c 2d2\xc5\xbc1\xc4\x87 2d2\xc5\xbc1d 2d2\xc5\xbc1f 2d2\xc5\xbc1g 2d2\xc5\xbc1k 2d2\xc5\xbc1m 2d2\xc5\xbc1n 2d2\xc5\xbc1\xc5\x84 2d2\xc5\xbc1p 2d2\xc5\xbc1s 2d2\xc5\xbc1\xc5\x9b 2d2\xc5\xbc1t 2d2\xc5\xbc1z 2d2\xc5\xbc1\xc5\xba 2d4\xc5\xbc3\xc5\xbc 2f1c 2f1k 2f1m 2f1n 2g1b 2g1c 2g1\xc4\x87 2g1d 2g1f 2g1k 2g1m 2g1\xc5\x84 2g1p 2g1s 2g1\xc5\x9b 2g1t 2g1z 2g1\xc5\xba 2g1\xc5\xbc 2g2\xc5\x821b 2h1b 2h1c 2h1\xc4\x87 2h1d 2h1f 2h1g 2h1j 2h1k 2h1l 2h1\xc5\x82 2h1m 2h1n 2h1\xc5\x84 2h1p 2h1r 2h1s 2h1\xc5\x9b 2h1t 2h1w 2h1z 2h1\xc5\xba 2h1\xc5\xbc 2j1b 2j1c 2j1\xc4\x87 2j1d 2j1f 2j1g 2j1h 2j1k 2j1l 2j1\xc5\x82 2j1m 2j1n 2j1\xc5\x84 2j1p 2j1r 2j1s 2j1\xc5\x9b 2j1t 2j1w 2j1z 2j1\xc5\xba 2j1\xc5\xbc 2k1b 2k1c 2k1\xc4\x87 2k1d 2k1f 2k1g 2k1m 2k1n 2k1\xc5\x84 2k1p 2k1s 2k1s4z 2k1\xc5\x9b 2k1t 2k1z 2k1\xc5\xba 2k1\xc5\xbc 2k2\xc5\x821b 2l1b 2l1c 2l1\xc4\x87 2l1d 2l1f 2l1g 2l1h 2l1j 2l1k 2l1\xc5\x82 2l1m 2l1n 2l1\xc5\x84 2l1p 2l1r 2l1s 2l1\xc5\x9b 2l1t 2l1w 2l1z 2l1\xc5\xba 2l1\xc5\xbc 2\xc5\x821b 2\xc5\x821c 2\xc5\x821\xc4\x87 2\xc5\x821d 2\xc5\x821f 2\xc5\x821g 2\xc5\x821h 2\xc5\x821j 2\xc5\x821k 2\xc5\x821l 2\xc5\x821m 2\xc5\x821n 2\xc5\x821\xc5\x84 2\xc5\x821p 2\xc5\x821r 2\xc5\x821s 2\xc5\x821\xc5\x9b 2\xc5\x821t 2\xc5\x821w 2\xc5\x821z 2\xc5\x821\xc5\xba 2\xc5\x821\xc5\xbc 2m1b 2m1c 2m1\xc4\x87 2m1d 2m1f 2m1g 2m1h 2m1j 2m1k 2m1l 2m1\xc5\x82 2m1n 2m1\xc5\x84 2m1p 2m1r 2m1s 2m1\xc5\x9b 2m1t 2m1w 2m1z 2m1\xc5\xba 2m1\xc5\xbc 2n1b 2n1c 2n1\xc4\x87 2n1d 2n1f 2n1g 2n1h 2n1j 2n1k 2n1l 2n1\xc5\x82 2n1m 2n1\xc5\x84 2n1p 2n1r 2n1s 2n1\xc5\x9b 2n1t 2n1w 2n1z 2n1\xc5\xba 2n1\xc5\xbc 2n2t1n 2\xc5\x841b 2\xc5\x841c 2\xc5\x841\xc4\x87 2\xc5\x841d 2\xc5\x841f 2\xc5\x841g 2\xc5\x841h 2\xc5\x841j 2\xc5\x841k 2\xc5\x841l 2\xc5\x841\xc5\x82 2\xc5\x841m 2\xc5\x841n 2\xc5\x841\xc5\x84 2\xc5\x841p 2\xc5\x841r 2\xc5\x841s 2\xc5\x841\xc5\x9b 2\xc5\x841t 2\xc5\x841w 2\xc5\x841z 2\xc5\x841\xc5\xba 2\xc5\x841\xc5\xbc 2p1b 2p1c 2p1\xc4\x87 2p1d 2p1f 2p1g 2p1k 2p1m 2p1n 2p1\xc5\x84 2p1s 2p1s4z 2p1\xc5\x9b 2p1t 2p1z 2p1\xc5\xba 2p1\xc5\xbc 2p2l1n 2r1b 2r1c 2r1\xc4\x87 2r1d 2r1f 2r1g 2r1h 2r1j 2r1k 2r1l 2r1\xc5\x82 2r1m 2r1n 2r1\xc5\x84 2r1p 2r1s 2r1\xc5\x9b 2r1t 2r1w 2r1\xc5\xba 2r1\xc5\xbc r4z 2rz1b 2r2z1c 2r2z1\xc4\x87 2r2z1d 2r2z1f 2rz1g 2rz1h 2rz1j 2r2z1k 2rz1l 2rz1\xc5\x82 2rz1m 2rz1n 2rz1\xc5\x84 2r2z1p 2rz1r 2r2z1s 2r2z1\xc5\x9b 2r2z1t 2rz1w 2rz1\xc5\xba 2rz1\xc5\xbc 2s1b 2s1d 2s1f 2s1g 2s1s 2s1\xc5\xba 2s1\xc5\xbc 2s2\xc5\x821b 2s2n1k 2s2t1k 2s2t1n s2t1s 2sts4z s4z 2s2z1c 2s2z1\xc4\x87 2s2z1f 2s2z1k 2sz1l 2sz1m 2sz1n 2s2z1p 2s2z1s 2s2z1\xc5\x9b 2s2z1t 2sz1w 2s4z3z 2sz2l1n 2\xc5\x9b1b 2\xc5\x9b1d 2\xc5\x9b1f 2\xc5\x9b1g 2\xc5\x9b1k 2\xc5\x9b1p 2\xc5\x9b1s 2\xc5\x9b1\xc5\x9b 2\xc5\x9b1t 2\xc5\x9b1z 2\xc5\x9b1\xc5\xba 2\xc5\x9b1\xc5\xbc 2\xc5\x9b2\xc4\x871c 2\xc5\x9b2l1m 2\xc5\x9b2l1n 2t1b 2t1c 2t1\xc4\x87 2t1d 2t1f 2t1g 2t1k 2t1m 2t1n 2t1\xc5\x84 2t1p 2t1s 2t1\xc5\x9b 2t1z 2t1\xc5\xba 2t1\xc5\xbc 2t2l1n 2t2r1k tr4z 2t2rz1n 2w1b 2w1c 2w1\xc4\x87 2w1d 2w1f 2w1g 2w1j 2w1k 2w1l 2w1\xc5\x82 2w1m 2w1n 2w1\xc5\x84 2w1p 2w1r 2w1s 2w1\xc5\x9b 2w1t 2w1z 2w1\xc5\xba 2w1\xc5\xbc 2z1c 2z1\xc4\x87 2z1d 2z1f 2z1k 2z1p 2z1s 2z1\xc5\x9b 2z1t 2z2d1k 2z2d1n 2\xc5\xba1b 2\xc5\xba1c 2\xc5\xba1\xc4\x87 2\xc5\xba1d 2\xc5\xba1f 2\xc5\xba1g 2\xc5\xba1k 2\xc5\xba1l 2\xc5\xba1m 2\xc5\xba1n 2\xc5\xba1p 2\xc5\xba1s 2\xc5\xba1\xc5\x9b 2\xc5\xba1t 2\xc5\xba1w 2\xc5\xba1z 2\xc5\xba1\xc5\xbc 2\xc5\xbc1b 2\xc5\xbc1c 2\xc5\xbc1\xc4\x87 2\xc5\xbc1d 2\xc5\xbc1f 2\xc5\xbc1g 2\xc5\xbc1j 2\xc5\xbc1k 2\xc5\xbc1l 2\xc5\xbc1\xc5\x82 2\xc5\xbc1m 2\xc5\xbc1n 2\xc5\xbc1\xc5\x84 2\xc5\xbc1p 2\xc5\xbc1r 2\xc5\xbc1s 2\xc5\xbc1\xc5\x9b 2\xc5\xbc1t 2\xc5\xbc1w 2\xc5\xbc1z 2\xc5\xbc1\xc5\xba dni1 dni2o1 3d2niow 3k2s2z2t 3m2k2n mne1 3m2nest 3m2nezj 3m2s2k2n pne1 3p2ne2u1 wc4z wcza1 3w2czas w\xc5\x82a1 3w2\xc5\x82ad w\xc5\x82o1 3w2\xc5\x82os 4b3b 4c3c 4\xc4\x873\xc4\x87 4d3d 4f3f 4g3g 4h3h 4j3j 4k3k 4l3l 4\xc5\x823\xc5\x82 4m3m 4n3n 4p3p 4r3r 4t3t 4w3w 4z3z 4\xc5\xba3\xc5\xba 4\xc5\xbc3\xc5\xbc 8b_ 8b8b_ 8b8c_ 8b8\xc4\x87_ 8b8d_ 8b8f_ 8b8g_ 8b8h_ 8b8j_ 8b8k_ 8b8l_ 8b8\xc5\x82_ 8b8m_ 8b8n_ 8b8\xc5\x84_ 8b8p_ 8b8r_ br4z 8b8r8z_ 8b8s_ 8b8\xc5\x9b_ 8b8t_ 8b8v_ 8b8w_ 8b8x_ 8b8z_ 8b8\xc5\xba_ 8b8\xc5\xbc_ 8c_ 8c8b_ 8c8c_ 8c8\xc4\x87_ 8c8d_ 8c8f_ 8c8g_ 8c8h_ c2h2\xc5\x82 8c8h8\xc5\x82_ c2h2r chr4z 8ch8r8z_ c2h2w 8c8h8w_ 8c8j_ 8c8k_ 8c8l_ 8c8\xc5\x82_ 8c8m_ 8c8n_ 8c8\xc5\x84_ 8c8p_ 8c8r_ 8c8s_ 8c8\xc5\x9b_ 8c8t_ 8c8v_ 8c8w_ 8c8x_ 8c8z_ 8c8z8t_ 8c8\xc5\xba_ 8c8\xc5\xbc_ 8\xc4\x87_ 8\xc4\x878b_ 8\xc4\x878c_ 8\xc4\x878\xc4\x87_ 8\xc4\x878d_ 8\xc4\x878f_ 8\xc4\x878g_ 8\xc4\x878h_ 8\xc4\x878j_ 8\xc4\x878k_ 8\xc4\x878l_ 8\xc4\x878\xc5\x82_ 8\xc4\x878m_ 8\xc4\x878n_ 8\xc4\x878\xc5\x84_ 8\xc4\x878p_ 8\xc4\x878r_ 8\xc4\x878s_ 8\xc4\x878\xc5\x9b_ 8\xc4\x878t_ 8\xc4\x878v_ 8\xc4\x878w_ 8\xc4\x878x_ 8\xc4\x878z_ 8\xc4\x878\xc5\xba_ 8\xc4\x878\xc5\xbc_ 8d_ 8d8b_ 8d8c_ 8d8\xc4\x87_ 8d8d_ 8d8f_ 8d8g_ 8d8h_ 8d8j_ 8d8k_ 8d8l_ 8d8\xc5\x82_ 8d8m_ 8d8n_ 8d8\xc5\x84_ 8d8p_ 8d8r_ dr4z 8d8r8z_ 8d8s_ 8d8\xc5\x9b_ 8d8t_ 8d8v_ 8d8w_ 8d8x_ 8d8z_ 8d8\xc5\xba_ 8d8\xc5\xbc_ 8f_ 8f8b_ 8f8c_ 8f8\xc4\x87_ 8f8d_ 8f8f_ 8f8g_ 8f8h_ 8f8j_ 8f8k_ 8f8l_ 8f8\xc5\x82_ 8f8m_ 8f8n_ 8f8\xc5\x84_ 8f8p_ 8f8r_ 8f8s_ 8f8\xc5\x9b_ 8f8t_ 8f8v_ 8f8w_ 8f8x_ 8f8z_ 8f8\xc5\xba_ 8f8\xc5\xbc_ 8g_ 8g8b_ 8g8c_ 8g8\xc4\x87_ 8g8d_ 8g8f_ 8g8g_ 8g8h_ 8g8j_ 8g8k_ 8g8l_ 8g8\xc5\x82_ 8g8m_ 8g8n_ 8g8\xc5\x84_ 8g8p_ 8g8r_ 8g8s_ 8g8\xc5\x9b_ 8g8t_ 8g8v_ 8g8w_ 8g8x_ 8g8z_ 8g8\xc5\xba_ 8g8\xc5\xbc_ 8h_ 8h8b_ 8h8c_ 8h8\xc4\x87_ 8h8d_ 8h8f_ 8h8g_ 8h8h_ 8h8j_ 8h8k_ 8h8l_ 8h8\xc5\x82_ 8h8m_ 8h8n_ 8h8\xc5\x84_ 8h8p_ 8h8r_ 8h8s_ 8h8\xc5\x9b_ 8h8t_ 8h8v_ 8h8w_ 8h8x_ 8h8z_ 8h8\xc5\xba_ 8h8\xc5\xbc_ 8j_ 8j8b_ 8j8c_ 8j8\xc4\x87_ 8j8d_ 8j8f_ 8j8g_ 8j8h_ 8j8j_ 8j8k_ 8j8l_ 8j8\xc5\x82_ 8j8m_ 8j8n_ 8j8\xc5\x84_ 8j8p_ 8j8r_ 8j8s_ 8j8\xc5\x9b_ 8j8t_ 8j8v_ 8j8w_ 8j8x_ 8j8z_ 8j8\xc5\xba_ 8j8\xc5\xbc_ 8k_ 8k8b_ 8k8c_ 8k8\xc4\x87_ 8k8d_ 8k8f_ 8k8g_ 8k8h_ 8k8j_ 8k8k_ 8k8l_ 8k8\xc5\x82_ 8k8m_ 8k8n_ 8k8\xc5\x84_ 8k8p_ 8k8r_ 8k8s_ 8k8s8t_ 8k8\xc5\x9b_ 8k8t_ 8k8v_ 8k8w_ 8k8x_ 8k8z_ 8k8\xc5\xba_ 8k8\xc5\xbc_ 8l_ 8l8b_ 8l8c_ 8l8\xc4\x87_ 8l8d_ 8l8f_ 8l8g_ 8l8h_ 8l8j_ 8l8k_ 8l8l_ 8l8\xc5\x82_ 8l8m_ 8l8n_ 8l8\xc5\x84_ 8l8p_ 8l8r_ 8l8s_ 8l8\xc5\x9b_ 8l8t_ 8l8v_ 8l8w_ 8l8x_ 8l8z_ 8l8\xc5\xba_ 8l8\xc5\xbc_ 8\xc5\x82_ 8\xc5\x828b_ 8\xc5\x828c_ 8\xc5\x828\xc4\x87_ 8\xc5\x828d_ 8\xc5\x828f_ 8\xc5\x828g_ 8\xc5\x828h_ 8\xc5\x828j_ 8\xc5\x828k_ 8\xc5\x828l_ 8\xc5\x828\xc5\x82_ 8\xc5\x828m_ 8\xc5\x828n_ 8\xc5\x828\xc5\x84_ 8\xc5\x828p_ 8\xc5\x828r_ 8\xc5\x828s_ 8\xc5\x828\xc5\x9b_ 8\xc5\x828t_ 8\xc5\x828v_ 8\xc5\x828w_ 8\xc5\x828x_ 8\xc5\x828z_ 8\xc5\x828\xc5\xba_ 8\xc5\x828\xc5\xbc_ 8m_ 8m8b_ 8m8c_ 8m8\xc4\x87_ 8m8d_ 8m8f_ 8m8g_ 8m8h_ 8m8j_ 8m8k_ 8m8l_ 8m8\xc5\x82_ 8m8m_ 8m8n_ 8m8\xc5\x84_ 8m8p_ 8m8r_ 8m8s_ 8m8s8t_ 8m8\xc5\x9b_ 8m8t_ 8m8v_ 8m8w_ 8m8x_ 8m8z_ 8m8\xc5\xba_ 8m8\xc5\xbc_ 8n_ 8n8b_ 8n8c_ 8n8\xc4\x87_ 8n8d_ 8n8f_ 8n8g_ 8n8h_ 8n8j_ 8n8k_ 8n8l_ 8n8\xc5\x82_ 8n8m_ 8n8n_ 8n8\xc5\x84_ 8n8p_ 8n8r_ 8n8s_ 8n8\xc5\x9b_ 8n8t_ 8n8v_ 8n8w_ 8n8x_ 8n8z_ 8n8\xc5\xba_ 8n8\xc5\xbc_ 8\xc5\x84_ 8\xc5\x848b_ 8\xc5\x848c_ 8\xc5\x848\xc4\x87_ 8\xc5\x848d_ 8\xc5\x848f_ 8\xc5\x848g_ 8\xc5\x848h_ 8\xc5\x848j_ 8\xc5\x848k_ 8\xc5\x848l_ 8\xc5\x848\xc5\x82_ 8\xc5\x848m_ 8\xc5\x848n_ 8\xc5\x848\xc5\x84_ 8\xc5\x848p_ 8\xc5\x848r_ 8\xc5\x848s_ 8\xc5\x848\xc5\x9b_ 8\xc5\x848t_ 8\xc5\x848v_ 8\xc5\x848w_ 8\xc5\x848x_ 8\xc5\x848z_ 8\xc5\x848\xc5\xba_ 8\xc5\x848\xc5\xbc_ 8p_ 8p8b_ 8p8c_ 8p8\xc4\x87_ 8p8d_ 8p8f_ 8p8g_ 8p8h_ 8p8j_ 8p8k_ 8p8l_ 8p8\xc5\x82_ 8p8m_ 8p8n_ 8p8\xc5\x84_ 8p8p_ 8p8r_ pr4z 8p8r8z_ 8p8s_ 8p8\xc5\x9b_ 8p8t_ 8p8v_ 8p8w_ 8p8x_ 8p8z_ 8p8\xc5\xba_ 8p8\xc5\xbc_ 8r_ 8r8b_ 8r8c_ 8r8\xc4\x87_ 8r8d_ 8r8f_ 8r8g_ 8r8h_ 8r8j_ 8r8k_ 8r8l_ 8r8\xc5\x82_ 8r8m_ 8r8n_ 8r8\xc5\x84_ 8r8p_ 8r8r_ 8r8s_ rs4z 8r8s8z_ 8r8\xc5\x9b_ 8r8t_ 8r8v_ 8r8w_ 8r8x_ 8r8z_ 8r8z8\xc5\x82_ 8r8\xc5\xba_ 8r8\xc5\xbc_ 8s_ 8s8b_ 8s8c_ sc4h 8s8c8h_ 8s8\xc4\x87_ 8s8d_ 8s8f_ 8s8g_ 8s8h_ 8s8j_ 8s8k_ skr4z 8sk8r8z_ 8s8l_ 8s8\xc5\x82_ 8s8m_ 8s8n_ 8s8\xc5\x84_ 8s8p_ 8s8r_ 8s8s_ 8s8\xc5\x9b_ 8s8t_ 8s8t8r_ str4z 8s8t8r8z_ 8s8t8w_ 8s8v_ 8s8w_ 8s8x_ 8s8z_ szc4z 8sz8c8z_ sz2cz1b 8szc8z8b_ 8s8z8k_ 8s8z8n_ 8s8z8t_ 8sz8t8r_ 8s8\xc5\xba_ 8s8\xc5\xbc_ 8\xc5\x9b_ 8\xc5\x9b8b_ 8\xc5\x9b8c_ 8\xc5\x9b8\xc4\x87_ 8\xc5\x9b8d_ 8\xc5\x9b8f_ 8\xc5\x9b8g_ 8\xc5\x9b8h_ 8\xc5\x9b8j_ 8\xc5\x9b8k_ 8\xc5\x9b8l_ 8\xc5\x9b8\xc5\x82_ 8\xc5\x9b8m_ 8\xc5\x9b8n_ 8\xc5\x9b8\xc5\x84_ 8\xc5\x9b8p_ 8\xc5\x9b8r_ 8\xc5\x9b8s_ 8\xc5\x9b8\xc5\x9b_ 8\xc5\x9b8t_ 8\xc5\x9b8v_ 8\xc5\x9b8w_ 8\xc5\x9b8x_ 8\xc5\x9b8z_ 8\xc5\x9b8\xc5\xba_ 8\xc5\x9b8\xc5\xbc_ 8t_ 8t8b_ 8t8c_ 8t8\xc4\x87_ 8t8d_ 8t8f_ 8t8g_ 8t8h_ 8t8j_ 8t8k_ 8t8l_ 8t8\xc5\x82_ 8t8m_ 8t8n_ 8t8\xc5\x84_ 8t8p_ 8t8r_ 8t8r8z_ 8t8s_ 8t8\xc5\x9b_ 8t8t_ 8t8v_ 8t8w_ 8t8x_ 8t8z_ 8t8\xc5\xba_ 8t8\xc5\xbc_ 8v_ 8v8b_ 8v8c_ 8v8\xc4\x87_ 8v8d_ 8v8f_ 8v8g_ 8v8h_ 8v8j_ 8v8k_ 8v8l_ 8v8\xc5\x82_ 8v8m_ 8v8n_ 8v8\xc5\x84_ 8v8p_ 8v8r_ 8v8s_ 8v8\xc5\x9b_ 8v8t_ 8v8v_ 8v8w_ 8v8x_ 8v8z_ 8v8\xc5\xba_ 8v8\xc5\xbc_ 8w_ 8w8b_ 8w8c_ 8w8\xc4\x87_ 8w8d_ 8w8f_ 8w8g_ 8w8h_ 8w8j_ 8w8k_ 8w8l_ 8w8\xc5\x82_ 8w8m_ 8w8n_ 8w8\xc5\x84_ 8w8p_ 8w8r_ 8w8s_ 8w8\xc5\x9b_ 8w8t_ 8w8v_ 8w8w_ 8w8x_ 8w8z_ 8w8\xc5\xba_ 8w8\xc5\xbc_ 8x_ 8x8b_ 8x8c_ 8x8\xc4\x87_ 8x8d_ 8x8f_ 8x8g_ 8x8h_ 8x8j_ 8x8k_ 8x8l_ 8x8\xc5\x82_ 8x8m_ 8x8n_ 8x8\xc5\x84_ 8x8p_ 8x8r_ 8x8s_ 8x8\xc5\x9b_ 8x8t_ 8x8v_ 8x8w_ 8x8x_ 8x8z_ 8x8\xc5\xba_ 8x8\xc5\xbc_ 8z_ 8z8b_ 8z8c_ 8z8\xc4\x87_ 8z8d_ 8z8d8r_ zdr4z 8z8d8r8z_ 8z8f_ 8z8g_ 8z8h_ 8z8j_ 8z8k_ 8z8l_ 8z8\xc5\x82_ 8z8m_ 8z8n_ 8z8\xc5\x84_ 8z8p_ 8z8r_ 8z8s_ 8z8\xc5\x9b_ 8z8t_ 8z8v_ 8z8w_ 8z8x_ 8z8z_ 8z8\xc5\xba_ 8z8\xc5\xbc_ 8\xc5\xba_ 8\xc5\xba8b_ 8\xc5\xba8c_ 8\xc5\xba8\xc4\x87_ 8\xc5\xba8d_ 8\xc5\xba8f_ 8\xc5\xba8g_ 8\xc5\xba8h_ 8\xc5\xba8j_ 8\xc5\xba8k_ 8\xc5\xba8l_ 8\xc5\xba8\xc5\x82_ 8\xc5\xba8m_ 8\xc5\xba8n_ 8\xc5\xba8\xc5\x84_ 8\xc5\xba8p_ 8\xc5\xba8r_ 8\xc5\xba8s_ 8\xc5\xba8\xc5\x9b_ 8\xc5\xba8t_ 8\xc5\xba8v_ 8\xc5\xba8w_ 8\xc5\xba8x_ 8\xc5\xba8z_ 8\xc5\xba8\xc5\xba_ 8\xc5\xba8\xc5\xbc_ 8\xc5\xbc_ 8\xc5\xbc8b_ 8\xc5\xbc8c_ 8\xc5\xbc8\xc4\x87_ 8\xc5\xbc8d_ 8\xc5\xbc8f_ 8\xc5\xbc8g_ 8\xc5\xbc8h_ 8\xc5\xbc8j_ 8\xc5\xbc8k_ 8\xc5\xbc8l_ 8\xc5\xbc8\xc5\x82_ 8\xc5\xbc8m_ 8\xc5\xbc8n_ 8\xc5\xbc8\xc5\x84_ 8\xc5\xbc8p_ 8\xc5\xbc8r_ 8\xc5\xbc8s_ 8\xc5\xbc8\xc5\x9b_ 8\xc5\xbc8t_ 8\xc5\xbc8v_ 8\xc5\xbc8w_ 8\xc5\xbc8x_ 8\xc5\xbc8z_ 8\xc5\xbc8\xc5\xba_ 8\xc5\xbc8\xc5\xbc_ a1 a2u1 a2y1 a1a2 ae2 ai2 ao2 \xc4\x851 be1 be1e2 be2eth be2f3s4z2 be1khe1 be2k1he2n1d bi1 bino1 bi2n3o2ku1 bis4z bi2s2z1k biszko1 bi2sz3kop bizne1 bi2z3nes bi2z3ne2s3m bi2r1m bi1rmi1 birmi2n1g birmingha1 birmin2g1ham blo1 blokha1 blokha2u1 blo2k1hauz bo1 bo2s3ma1 b2r2d bro1 broa2 broa1dwa1 bro2a2d3wa2y1 bu1 bus4z bu2sz1m bu2sz3me1 bu2k1s bu2k1s4z buk2s2z1p bukszpa1 buk2sz3pan busi1 busine1 busine2s2s busine2ss3m ca1 ca2l1d caldwe1 cal2d1we4l3l c2h2j c2h2l chu1 chus1t cu1 cur4z curzo1 cu2r7zon de1 de2u1 deu2t1s deutsc4h deutsc2h2l deutschla1 deut4sch3la2n1d d2rz2w du1 dus4z du2s2z1p duszpa1 du2sz3past d2\xc5\xbc2j d2\xc5\xbc2l d2\xc5\xbc2\xc5\x82 d2\xc5\xbc2r d2\xc5\xbc2w d\xc5\xbce1 d\xc5\xbce4z3b d\xc5\xbce4z3m e1 er4z erza1 e2r5zac e2u1 e2y1 e3u2s4z ea2 e1e2 ei2 eo2 \xc4\x991 fi1 fisha1 fi2s3ha2r1m fis4z fi1szbi1 fi2sz3bin fo1 fo2k1s fo2k2s3t for4z forza1 fo2r5zac fo2l1k fo1lklo1 fol2k1lor fo2s1f fosfa1 fo1sfazo1 fos2f1a2zot ga1 ga2d1g gadge1 ga3d2get gado1 gado2p1t ga1do3p2ta1 go1 go2l1f gol2f3s golfs4z2 gra1 gra2n1d grandi1 gran2d1ilo1 gro1 gro4t3r hi1 his4z hi2s2z3p hu1 huc4z hu2cz1w huxle1 hu2x3le2y1 i1 i2a1 i2\xc4\x851 i2e1 i2\xc4\x991 i2i1 i2o1 i2\xc3\xb31 i2u1 i2y1 i4n3n in2n1s inn2s1b innsbru1 in4nsbru2c1k i2n1s in2s1b insbru1 in4sbruc j2t1\xc5\x82 j2t1r ja1 ja4z3z ja4z4z3b ja4z4z3m ka1 ka2r1l kar2l1s karlskro1 karl2s1kron karlsru1 karl2s1ruhe1 ki1 ki2r1c kirc4h kirc4h3h kirchho1 kir2chho4f3f ko1 ko2n1g kongre1 kongre2s3m le1 led1w lu1 luftwa1 luftwa4f3f lu2ft3waffe1 lu2k1s luk2s1f luksfe1 lu2ks1fer ly1 ly2o2 ma1 mar4z ma2r5z1l ma2r5z1\xc5\x82 ma2r5z1n mi1 mis4z mi2sz1m miszma1 mi2s4z1mas4z mi2e1 mier4z mi1e2r5zi1 mie2r5z1\xc5\x82 mo1 mo2n1t montre1 montrea2 mon2t3real moza1 mozai2 moza2i3k mu1 mur4z murza1 murzasi1 murzasic4h mu2r7zasic2h3l na1 na2\xc5\x821k na\xc5\x82ko1 na4\xc5\x823ko2w1s na4r3v o1 o2y1 oa2 oc4h o2c2h1m ochmi1 och3mistr4z oe2 o4f3f offse1 of2f3set oi2 o1o2 ou2 \xc3\xb31 \xc3\xb32w1c \xc3\xb34w3c4z pa1 pa1na1 paname1 pa2n3a2mer pa1sca1 pa2s3cal pa2s3c4h po1 po2d1n podni1 podni2e1 po3d4niepr4z po2m1n po3m2n\xc4\x851 po3m2n\xc4\x991 po3m2ni1 po2r1t por2t1s po1rtsmo1 portsmou2 po4rt2s3mo2uth portla1 po4rt3la2n1d poli1 poli2e1 poli3e2t poli2u1 poli3u2re1 po\xc5\x82u1 po\xc5\x82u2d1n po\xc5\x82u3d2ni1 po2w1s pows4z powsze1 powsze2d1n powsze3d2ni1 p2r1c prc4h prcha1 pr2chal pre1 pres4z pre2s2z1p pre2sz3pa1 ro1 roe2 roe2n1t roen2t1g roe1ntge1 ro2e3nt2gen ro1kro1 ro2k3roc4z ro1sto1 ro2s3to3c2k se1 se2t3le1 sko1 skor4z sko1rzo1 skorzone1 sko2r5zoner s2m2r so1 sowi1 sowi3z2 sy1 syno1 sy2n3o2p1t syste1 sy2s1tem sza1 s4zas4z sza2sz1\xc5\x82y1 sze1 szezlo1 sze2z1lo2n1g sze4\xc5\x9b\xc4\x87 szto1 szto1kho1 szto2k1ho2l1m szy1 szy2n1k szynkwa1 szyn2k1was to1 to2y1 to1yo2 to3y2o3t tu1 tu2r1b turbo1 turbo1o2 turboodr4z tu1rboodrzu1 turboo2d3rzut ty1 tygo1 tygo2d1n tygo3d2ni1 u1 u2y1 ua2 ue2 ui2 uo2 u1u2 vo1 vo2l1k vo2l2k2s3 we1 we1e2 we1e1ke1 we2e2k1e2n1d we4s2t3f we4s2t3m y1 ya2 ye2 yi2 yo2 yu2 ze1 ze4p3p \xc5\xba2d4\xc5\xba _by1 _byna1 _byna2j1m _bynaj2m1n _bynajmni1 _bynajmni2e1 _by9naj9m8nie8j_ _bezac4h _be9z8a8c8h_ _bezami1 _be9z8ami_ _gd4z _gdzi1 _gdzi2e1 _gdzi1eni1 _gdzi2e1ni2e1 _2g1dzienie2g1d _gd4zieniegd4z _gdzi1eni1egdzi1 _gdzi2e1ni2e1gdzi2e1 _gdzienie9g8dzie_ _ina1 _inac4z _inacze1 _in8a9cze8j_ _n8a9da8l_ _ni2g1d _nigdy1 _n8i9gdy_ _nigd4z _ni1gdzi1 _nigdzi2e1 _n8i9gdzie_ _nie2c2h1\xc5\xbc _nie1ch\xc5\xbce1 _nie8ch9\xc5\xbce_ _nie2c2h1b _niechby1 _nie8ch9by_ _o2w1s _ows4z _owsze1 _ow9sze8m_ _p\xc3\xb3\xc5\x82a1 _p\xc3\xb3\xc5\x82ac4h _p\xc3\xb39\xc5\x828a8c8h_ _p\xc3\xb3\xc5\x82ami1 _p\xc3\xb39\xc5\x828ami_ _p\xc3\xb39\xc5\x828e8k_ _przyna1 _przyna2j1m _przynaj2m1n _przynajmni1 _przynajmni2e1 _przy9naj9m8nie8j_ _sk\xc4\x85di1 _sk\xc4\x851din\xc4\x851 _sk\xc4\x85d9i8n\xc4\x858d_ _tr\xc3\xb3ja1 _tr\xc3\xb3jac4h _tr\xc3\xb39j8a8c8h_ _tr\xc3\xb3jami1 _tr\xc3\xb39j8ami_ _tr\xc3\xb39j8e8k_ _pod\xc3\xb32w1c _pod\xc3\xb34w3c4z _pod\xc3\xb3wcza1 _pod\xc3\xb33w2czas _po8d9\xc3\xb38w9cza8s_"; + +?> diff --git a/include/mpdf/patterns/ru.php b/include/mpdf/patterns/ru.php new file mode 100755 index 0000000000000000000000000000000000000000..c87b58c017394e83e7df5f60b65dd6cbeb721d61 --- /dev/null +++ b/include/mpdf/patterns/ru.php @@ -0,0 +1,12 @@ +<?php +/* + Adapted from Hyphenator 1.0.2 + http://code.google.com/p/hyphenator/ + + Created by crymos at yandex dot ru + ВопроÑÑ‹ по руÑÑкоÑзычным таблицам переноÑа отправлÑть на адреÑ. +*/ + +$patterns="_\xd0\xb0\xd0\xb11\xd1\x80 _\xd0\xb0\xd0\xb31\xd1\x80\xd0\xbe _\xd0\xb0\xd0\xb4\xd0\xb82 _\xd0\xb0\xd0\xb82 _\xd0\xb0\xd0\xba1\xd1\x80 _\xd0\xb0\xd0\xbb\xd1\x8c3\xd1\x8f _\xd0\xb0\xd1\x802\xd1\x821\xd0\xbe2 _\xd0\xb0\xd1\x811\xd1\x82\xd0\xbe _\xd0\xb0\xd1\x81\xd1\x821\xd1\x80 _\xd0\xb0\xd1\x832 _\xd0\xb1\xd0\xb82\xd0\xbe _\xd0\xb2\xd0\xbe2\xd0\xb13\xd0\xbb _\xd0\xb2\xd0\xbe3\xd0\xb62\xd0\xb4 _\xd0\xb3\xd0\xbe2\xd1\x84 _\xd0\xb4\xd0\xb5\xd0\xba2 _\xd0\xb4\xd0\xb51\xd0\xba\xd0\xb2 _\xd0\xb4\xd0\xb82\xd0\xb0\xd0\xba _\xd0\xb4\xd0\xb81\xd0\xbe _\xd0\xb4\xd0\xbe3\xd0\xbf _\xd0\xb4\xd0\xbe3\xd1\x822 _\xd0\xb5\xd0\xbf\xd0\xb83 _\xd0\xb7\xd0\xb0\xd0\xb22\xd1\x80 _\xd0\xb7\xd0\xb03\xd0\xbc2\xd0\xbd _\xd0\xb7\xd0\xb03\xd0\xbf _\xd0\xb8\xd0\xb31\xd1\x80 _\xd0\xb8\xd0\xb7\xd0\xb32 _\xd0\xb8\xd0\xb73\xd0\xbd _\xd0\xb8\xd0\xb82 _\xd0\xb8\xd0\xba1\xd1\x80 _\xd0\xb8\xd0\xbe2 _\xd0\xb8\xd0\xbe4\xd0\xbd\xd0\xb0 _\xd0\xb8\xd1\x813 _\xd0\xbb\xd0\xb52\xd0\xbe _\xd0\xbb\xd0\xb52\xd0\xbf3\xd1\x80 _\xd0\xbb\xd0\xb5\xd1\x811\xd0\xba _\xd0\xbb\xd1\x8c2 _\xd0\xbb\xd1\x8e\xd1\x81\xd1\x821 _\xd0\xbc\xd0\xb52\xd0\xb61\xd1\x832 _\xd0\xbc\xd0\xb81\xd0\xbe\xd0\xbc _\xd0\xbc\xd0\xbe2\xd0\xba1 _\xd0\xbc\xd1\x832\xd1\x88\xd1\x821 _\xd0\xbd\xd0\xb01\xd0\xb2 _\xd0\xbd\xd0\xb03\xd1\x82 _\xd0\xbd\xd0\xb03\xd1\x882 _\xd0\xbd\xd0\xb53\xd0\xb2\xd0\xbd _\xd0\xbd\xd0\xb51\xd0\xb4\xd1\x80 _\xd0\xbd\xd0\xb51\xd0\xb72 _\xd0\xbd\xd0\xb51\xd1\x81\xd0\xbb _\xd0\xbd\xd0\xb51\xd1\x812\xd1\x86 _\xd0\xbd\xd0\xb53\xd1\x82 _\xd0\xbd\xd0\xbe\xd1\x811\xd0\xba _\xd0\xbd\xd1\x83\xd0\xba1\xd0\xbb _\xd0\xbe\xd0\xb1\xd0\xbe3\xd0\xb62 _\xd0\xbe\xd0\xb2\xd0\xbe1 _\xd0\xbe\xd0\xb33\xd0\xbd _\xd0\xbe\xd0\xb74 _\xd0\xbe\xd1\x812\xd0\xba\xd0\xb0 _\xd0\xbe\xd1\x812\xd0\xbf _\xd0\xbe\xd1\x813\xd0\xbf\xd0\xb8 _\xd0\xbe\xd1\x821\xd0\xb2 _\xd0\xbe\xd1\x821\xd1\x80\xd0\xbe _\xd0\xbe\xd1\x821\xd1\x80\xd1\x83 _\xd0\xbe\xd1\x821\xd1\x83\xd0\xb6 _\xd0\xbf\xd0\xbe3\xd0\xb22 _\xd0\xbf\xd0\xbe3\xd0\xb62 _\xd0\xbf\xd0\xbe\xd0\xb72\xd0\xbd _\xd0\xbf\xd1\x80\xd0\xbe\xd1\x812 _\xd1\x80\xd0\xb02\xd1\x813\xd1\x82 _\xd1\x80\xd0\xb52\xd0\xb1\xd1\x80 _\xd1\x80\xd0\xb52\xd0\xb73\xd0\xb2 _\xd1\x80\xd0\xb82\xd1\x81\xd0\xba _\xd1\x80\xd0\xb82\xd1\x87 _\xd1\x80\xd0\xbe2\xd0\xb73\xd0\xb2 _\xd1\x80\xd0\xbe2\xd1\x813\xd0\xbb _\xd1\x80\xd0\xbe2\xd1\x85 _\xd1\x81\xd0\xb5\xd0\xbf\xd1\x822 _\xd1\x81\xd0\xba2 _\xd1\x81\xd1\x822 _\xd1\x81\xd1\x832\xd0\xb6 _\xd1\x82\xd0\xb52\xd0\xbe3 _\xd1\x82\xd0\xb8\xd0\xb03 _\xd1\x82\xd0\xb82\xd0\xb3 _\xd1\x82\xd0\xb8\xd0\xb31\xd1\x80 _\xd1\x82\xd0\xb82\xd0\xbe _\xd1\x83\xd0\xb12 _\xd1\x83\xd0\xb42 _\xd1\x83\xd0\xb52 _\xd1\x83\xd0\xb72\xd0\xbd\xd0\xb0 _\xd1\x83\xd0\xba2 _\xd1\x83\xd0\xbc2\xd1\x87 _\xd1\x83\xd0\xbe3 _\xd1\x83\xd0\xbf2 _\xd1\x83\xd1\x802\xd0\xb2 _\xd1\x83\xd1\x812 _\xd1\x83\xd1\x822\xd1\x80 _\xd1\x83\xd1\x8e2 _\xd1\x85\xd0\xbe2\xd1\x803\xd0\xb2 _\xd1\x87\xd0\xb52\xd1\x811\xd0\xba _\xd1\x8e\xd1\x811 4\xd0\xb03\xd0\xb0 \xd0\xb0\xd0\xb02\xd0\xbf \xd0\xb0\xd0\xb02\xd1\x80 \xd0\xb0\xd0\xb02\xd1\x86 \xd0\xb01\xd0\xb1 \xd0\xb0\xd0\xb1\xd0\xb53\xd1\x81\xd1\x82 \xd0\xb03\xd0\xb1\xd0\xbb\xd0\xb0 \xd0\xb0\xd0\xb12\xd0\xbb\xd1\x8e \xd0\xb0\xd0\xb11\xd1\x80\xd0\xb8 \xd0\xb03\xd0\xb1\xd1\x83 \xd0\xb0\xd0\xb21\xd0\xb2 \xd0\xb01\xd0\xb2\xd0\xb5 \xd0\xb0\xd0\xb23\xd0\xb7\xd0\xbe \xd0\xb01\xd0\xb2\xd0\xb8 \xd0\xb0\xd0\xb2\xd0\xb82\xd0\xb0 \xd0\xb01\xd0\xb2\xd0\xbe \xd0\xb0\xd0\xb2\xd0\xbe1\xd1\x81 \xd0\xb02\xd0\xb2\xd0\xbe\xd1\x82 \xd0\xb0\xd0\xb21\xd1\x80\xd0\xb0 \xd0\xb0\xd0\xb22\xd1\x81\xd0\xb5 \xd0\xb02\xd0\xb2\xd1\x82 \xd0\xb01\xd0\xb2\xd1\x83 \xd0\xb02\xd0\xb2\xd1\x85 \xd0\xb03\xd0\xb22\xd1\x87\xd0\xb5 2\xd0\xb0\xd0\xb3\xd0\xb0 \xd0\xb0\xd0\xb3\xd0\xb01\xd1\x812 \xd0\xb02\xd0\xb3\xd0\xb4 \xd0\xb02\xd0\xb3\xd0\xb8\xd1\x82\xd0\xb8 \xd0\xb02\xd0\xb3\xd0\xbb\xd0\xb5 \xd0\xb0\xd0\xb32\xd0\xbb\xd0\xb8 \xd0\xb02\xd0\xb3\xd0\xbb\xd0\xbe\xd1\x81 \xd0\xb0\xd0\xb32\xd0\xbb\xd0\xbe\xd1\x82 2\xd0\xb0\xd0\xb3\xd0\xbe \xd0\xb03\xd0\xb3\xd1\x83 \xd0\xb01\xd0\xb4 2\xd0\xb0\xd0\xb4\xd0\xb2 \xd0\xb02\xd0\xb4\xd0\xb2\xd0\xb5 \xd0\xb0\xd0\xb42\xd0\xb6\xd0\xb8 \xd0\xb0\xd0\xb4\xd0\xb82\xd0\xbe\xd0\xb4 \xd0\xb02\xd0\xb4\xd0\xbb \xd0\xb02\xd0\xb41\xd0\xbe\xd0\xb1\xd0\xbb \xd0\xb0\xd0\xb41\xd1\x80\xd0\xbe \xd0\xb02\xd0\xb41\xd1\x80\xd1\x83 \xd0\xb0\xd0\xb4\xd1\x833\xd1\x87 \xd0\xb0\xd0\xb42\xd1\x86 \xd0\xb02\xd0\xb4\xd1\x8b\xd0\xbd \xd0\xb01\xd0\xb5 \xd0\xb0\xd0\xb52\xd0\xb3\xd0\xbe \xd0\xb0\xd0\xb52\xd0\xb4\xd0\xb8 \xd0\xb0\xd0\xb52\xd0\xbb \xd0\xb02\xd0\xb5\xd0\xbf \xd0\xb0\xd0\xb52\xd1\x80\xd0\xb5 \xd0\xb0\xd0\xb52\xd1\x81 \xd0\xb0\xd0\xb7\xd0\xb04\xd1\x883 \xd0\xb0\xd0\xb7\xd0\xb22 \xd0\xb0\xd0\xb73\xd0\xb2\xd0\xb5\xd0\xb7 \xd0\xb0\xd0\xb71\xd0\xb2\xd0\xbb \xd0\xb0\xd0\xb7\xd0\xb32 \xd0\xb0\xd0\xb71\xd0\xb4\xd1\x80 \xd0\xb0\xd0\xb71\xd0\xbe\xd0\xb1 \xd0\xb0\xd0\xb72\xd0\xbe1\xd0\xb1\xd1\x80 \xd0\xb02\xd0\xb7\xd0\xbe\xd0\xb2\xd1\x8c \xd0\xb02\xd0\xb7\xd0\xbe\xd0\xbb\xd1\x8c \xd0\xb01\xd0\xb7\xd0\xbe\xd1\x80\xd0\xb8 \xd0\xb0\xd0\xb72\xd0\xbe1\xd1\x81 \xd0\xb0\xd0\xb71\xd1\x80 \xd0\xb01\xd0\xb8 \xd0\xb0\xd0\xb82\xd0\xb31 \xd0\xb0\xd0\xb83\xd0\xb3\xd0\xbb \xd0\xb02\xd0\xb8\xd1\x85 \xd0\xb01\xd0\xba \xd0\xb0\xd0\xba1\xd0\xb2 1\xd0\xb0\xd0\xba\xd0\xba \xd0\xb0\xd0\xba2\xd0\xbb \xd0\xb0\xd0\xba3\xd0\xbb\xd0\xb5\xd0\xbc \xd0\xb0\xd0\xba\xd0\xbe1\xd0\xb12 2\xd0\xb0\xd0\xba\xd0\xbe\xd0\xbd\xd1\x81 \xd0\xb0\xd0\xba\xd0\xbe3\xd1\x82 2\xd0\xb0\xd0\xba\xd1\x80\xd0\xb8 \xd0\xb0\xd0\xba1\xd1\x81 \xd0\xb01\xd0\xbb\xd0\xb0 \xd0\xb03\xd0\xbb\xd0\xb0\xd0\xb3 \xd0\xb01\xd0\xbb\xd0\xb5 2\xd0\xb0\xd0\xbb\xd0\xb5\xd0\xba \xd0\xb03\xd0\xbb\xd0\xb8 \xd0\xb0\xd0\xbb\xd0\xbe1\xd0\xb7 \xd0\xb01\xd0\xbb\xd1\x83 \xd0\xb0\xd0\xbb\xd1\x832\xd1\x88 \xd0\xb0\xd0\xbb\xd1\x83\xd1\x881\xd1\x82 \xd0\xb01\xd0\xbb\xd1\x8b \xd0\xb02\xd0\xbb\xd1\x8c\xd1\x89 \xd0\xb01\xd0\xbb\xd1\x8e 2\xd0\xb0\xd0\xbc\xd0\xb0 \xd0\xb0\xd0\xbc\xd0\xb14 2\xd0\xb0\xd0\xbc\xd0\xb5\xd1\x82 \xd0\xb02\xd0\xbc\xd0\xb8\xd0\xbd\xd1\x82 \xd0\xb0\xd0\xbc2\xd0\xbd\xd0\xb5\xd1\x82 2\xd0\xb0\xd0\xbc\xd0\xbe \xd0\xb0\xd0\xbc\xd0\xbe1\xd0\xb72 \xd0\xb0\xd0\xbc\xd0\xbe\xd0\xb82 \xd0\xb02\xd0\xbc\xd1\x87 \xd0\xb0\xd0\xbd\xd0\xb02\xd0\xb4\xd1\x86 \xd0\xb02\xd0\xbd1\xd0\xb02\xd0\xbc\xd0\xb5 \xd0\xb02\xd0\xbd\xd0\xb0\xd1\x84 \xd0\xb0\xd0\xbd2\xd0\xb4\xd1\x80\xd0\xb0 \xd0\xb02\xd0\xbd1\xd0\xbe2\xd0\xb1 \xd0\xb0\xd0\xbd1\xd0\xbe2\xd1\x85\xd1\x80 \xd0\xb0\xd0\xbd1\xd1\x80 \xd0\xb0\xd0\xbd2\xd1\x81\xd0\xbf \xd0\xb0\xd0\xbd\xd1\x811\xd1\x83 \xd0\xb0\xd0\xbd2\xd1\x81\xd1\x83\xd1\x80 \xd0\xb02\xd0\xbd1\xd1\x83\xd0\xb7 \xd0\xb01\xd0\xbd\xd1\x8c 2\xd0\xb01\xd0\xbe \xd0\xb0\xd0\xbe2\xd0\xb4 \xd0\xb0\xd0\xbe2\xd0\xba \xd0\xb0\xd0\xbe2\xd1\x80 \xd0\xb0\xd0\xbe2\xd1\x81 \xd0\xb0\xd0\xbe\xd1\x81\xd1\x821 \xd0\xb03\xd0\xbf\xd0\xbb\xd0\xb0 \xd0\xb0\xd0\xbf2\xd0\xbb\xd0\xbe\xd0\xbc 2\xd0\xb0\xd0\xbf\xd0\xbe \xd0\xb0\xd0\xbf\xd0\xbe4\xd0\xb2\xd1\x81 \xd0\xb0\xd0\xbf\xd0\xbe3\xd1\x872\xd1\x82 \xd0\xb0\xd0\xbf2\xd1\x80\xd0\xb0 \xd0\xb0\xd0\xbf1\xd1\x80\xd0\xb5\xd0\xbb \xd0\xb01\xd1\x80\xd0\xb0 \xd0\xb0\xd1\x80\xd0\xb02\xd1\x81\xd1\x82 \xd0\xb0\xd1\x802\xd0\xb1\xd0\xbe\xd0\xba \xd0\xb0\xd1\x802\xd0\xb2\xd0\xb0\xd0\xbb 1\xd0\xb0\xd1\x80\xd0\xb3\xd1\x83 \xd0\xb01\xd1\x80\xd0\xb5 \xd0\xb0\xd1\x80\xd0\xb51\xd0\xb4\xd0\xb2 \xd0\xb0\xd1\x80\xd0\xb51\xd0\xbe\xd0\xbb \xd0\xb0\xd1\x802\xd0\xb6\xd0\xb0 \xd0\xb01\xd1\x80\xd0\xb8 \xd0\xb01\xd1\x80\xd0\xbe \xd0\xb0\xd1\x802\xd1\x82\xd0\xbe\xd1\x80 \xd0\xb0\xd1\x802\xd1\x821\xd1\x80 \xd0\xb01\xd1\x80\xd1\x83 \xd0\xb0\xd1\x801\xd1\x85 \xd0\xb01\xd1\x80\xd1\x8b \xd0\xb01\xd1\x80\xd1\x8e \xd0\xb01\xd1\x80\xd1\x8f 2\xd0\xb0\xd1\x811\xd0\xba \xd0\xb0\xd1\x813\xd0\xbc\xd0\xb8 \xd0\xb0\xd1\x813\xd0\xbd\xd0\xbe 1\xd0\xb0\xd1\x81\xd1\x81\xd0\xb8\xd0\xb3 \xd0\xb0\xd1\x81\xd1\x821\xd0\xb2\xd1\x83 \xd0\xb0\xd1\x813\xd1\x82\xd0\xb5\xd0\xbc \xd0\xb0\xd1\x812\xd1\x82\xd0\xb8\xd0\xbd \xd0\xb0\xd1\x812\xd1\x82\xd0\xb8\xd1\x8f \xd0\xb0\xd1\x811\xd1\x82\xd0\xbe\xd0\xbe \xd0\xb0\xd1\x811\xd1\x82\xd1\x83\xd1\x85 \xd0\xb01\xd1\x81\xd1\x82\xd1\x8c\xd0\xb5 \xd0\xb0\xd1\x812\xd1\x88\xd0\xb5\xd0\xb4 \xd0\xb0\xd1\x812\xd1\x88\xd0\xb5\xd1\x81 \xd0\xb01\xd1\x81\xd1\x8c\xd0\xb8 \xd0\xb01\xd1\x82\xd0\xb0 1\xd0\xb0\xd1\x82\xd0\xb0\xd0\xba \xd0\xb0\xd1\x823\xd0\xb2\xd0\xb0 \xd0\xb0\xd1\x821\xd0\xb2\xd0\xb8 \xd0\xb0\xd1\x821\xd0\xb2\xd1\x83 2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xb7 \xd0\xb01\xd1\x82\xd0\xb8 \xd0\xb01\xd1\x82\xd0\xbe \xd0\xb0\xd1\x821\xd0\xbe\xd0\xb1\xd0\xb5 \xd0\xb02\xd1\x82\xd0\xbe\xd0\xbc\xd0\xbd \xd0\xb0\xd1\x82\xd0\xbe2\xd1\x88 \xd0\xb0\xd1\x821\xd1\x80\xd0\xb0\xd1\x85 \xd0\xb0\xd1\x821\xd1\x80\xd0\xb8 \xd0\xb01\xd1\x82\xd1\x83 \xd0\xb0\xd1\x822\xd1\x85 \xd0\xb01\xd1\x82\xd1\x8b \xd0\xb01\xd1\x82\xd1\x8c\xd0\xb5 \xd0\xb03\xd1\x82\xd1\x8c\xd1\x8e \xd0\xb03\xd1\x82\xd1\x8c\xd1\x8f \xd0\xb01\xd1\x82\xd1\x8e \xd0\xb01\xd1\x82\xd1\x8f \xd0\xb01\xd1\x83 \xd0\xb02\xd1\x83\xd0\xb1 \xd0\xb0\xd1\x832\xd0\xb4 \xd0\xb0\xd1\x833\xd0\xb4\xd0\xbe \xd0\xb02\xd1\x83\xd0\xbb\xd0\xb5 \xd0\xb0\xd1\x83\xd1\x821\xd1\x80 \xd0\xb0\xd1\x832\xd1\x85 \xd0\xb0\xd1\x832\xd1\x87 \xd0\xb0\xd1\x833\xd1\x87\xd1\x8c \xd0\xb0\xd1\x83\xd1\x8d1 \xd0\xb02\xd1\x841\xd0\xbb \xd0\xb0\xd1\x852\xd0\xb0 \xd0\xb0\xd1\x85\xd0\xbc\xd0\xb82 \xd0\xb0\xd1\x853\xd1\x81 \xd0\xb01\xd1\x87 2\xd0\xb0\xd1\x87\xd0\xb0 \xd0\xb02\xd1\x87\xd0\xbb \xd0\xb0\xd1\x871\xd1\x82 \xd0\xb02\xd1\x88\xd0\xbb \xd0\xb0\xd1\x8d2\xd0\xbb\xd0\xb8 \xd0\xb02\xd1\x8d\xd1\x80 \xd0\xb0\xd1\x8e1\xd1\x82\xd0\xb0 \xd0\xb01\xd1\x8f \xd0\xb0\xd1\x8f2\xd0\xb1 \xd0\xb0\xd1\x8f2\xd0\xb2 \xd0\xb0\xd1\x8f2\xd0\xb7 1\xd0\xb1\xd0\xb0 \xd0\xb1\xd0\xb02\xd0\xb1\xd0\xb2 \xd0\xb1\xd0\xb02\xd0\xb31\xd1\x80 \xd0\xb1\xd0\xb02\xd0\xb4\xd1\x80 \xd0\xb1\xd0\xb01\xd0\xb7 \xd0\xb1\xd0\xb03\xd0\xb7\xd1\x83 \xd0\xb1\xd0\xb0\xd0\xbb\xd1\x8e1 \xd0\xb1\xd0\xb02\xd0\xbe \xd0\xb1\xd0\xb0\xd1\x813\xd0\xbc \xd0\xb1\xd0\xb01\xd1\x81\xd1\x82 \xd0\xb1\xd0\xb01\xd1\x82\xd1\x80 2\xd0\xb11\xd0\xb1 \xd0\xb11\xd0\xb2 \xd0\xb1\xd0\xb2\xd1\x8b2 \xd0\xb1\xd0\xb32 2\xd0\xb11\xd0\xb4 1\xd0\xb1\xd0\xb5 3\xd0\xb1\xd0\xb5\xd0\xb2 \xd0\xb1\xd0\xb52\xd0\xb3\xd0\xbb \xd0\xb1\xd0\xb52\xd0\xb3\xd0\xbd \xd0\xb1\xd0\xb52\xd0\xb41\xd1\x80 3\xd0\xb1\xd0\xb5\xd0\xb5 3\xd0\xb1\xd0\xb52\xd0\xb7 \xd0\xb1\xd0\xb5\xd0\xb71\xd0\xb02 \xd0\xb1\xd0\xb5\xd0\xb75\xd0\xb44 \xd0\xb1\xd0\xb53\xd0\xb7\xd0\xb8 \xd0\xb1\xd0\xb5\xd0\xb73\xd0\xbd \xd0\xb1\xd0\xb5\xd0\xb71\xd0\xbe2 \xd0\xb1\xd0\xb5\xd0\xb71\xd1\x80 \xd0\xb1\xd0\xb52\xd1\x811\xd0\xba \xd0\xb1\xd0\xb5\xd1\x813\xd0\xbf \xd0\xb1\xd0\xb52\xd1\x811\xd1\x82 \xd0\xb1\xd0\xb5\xd1\x813\xd1\x82\xd0\xb5 \xd0\xb1\xd0\xb5\xd1\x813\xd1\x82\xd0\xb8 3\xd0\xb1\xd0\xb5\xd1\x86 2\xd0\xb1\xd0\xb5\xd1\x89 2\xd0\xb1\xd0\xb6 \xd0\xb11\xd0\xb72 1\xd0\xb12\xd0\xb8 3\xd0\xb1\xd0\xb8\xd0\xb0 \xd0\xb1\xd0\xb82\xd0\xb1 2\xd0\xb1\xd0\xb8\xd0\xb6 3\xd0\xb1\xd0\xb8\xd0\xba \xd0\xb1\xd0\xb8\xd0\xbb\xd0\xb83\xd1\x822 3\xd0\xb1\xd0\xb8\xd0\xbe \xd0\xb1\xd0\xb82\xd0\xbe\xd0\xb1 \xd0\xb1\xd0\xb82\xd0\xbe\xd0\xb4 \xd0\xb1\xd0\xb82\xd0\xbe\xd0\xbd \xd0\xb1\xd0\xb82\xd0\xbe\xd1\x80 \xd0\xb1\xd0\xb82\xd1\x82\xd0\xb2 \xd0\xb1\xd0\xb81\xd1\x85 2\xd0\xb13\xd0\xba \xd0\xb11\xd0\xbb 1\xd0\xb1\xd0\xbb\xd0\xb0\xd0\xb3 1\xd0\xb12\xd0\xbb\xd0\xb0\xd0\xb7 \xd0\xb13\xd0\xbb\xd0\xb0\xd0\xb7\xd0\xb8 \xd0\xb12\xd0\xbb\xd0\xb0\xd0\xbd 1\xd0\xb12\xd0\xbb\xd0\xb5\xd0\xb5 \xd0\xb13\xd0\xbb\xd0\xb5\xd0\xbd \xd0\xb12\xd0\xbb\xd0\xb5\xd1\x811\xd0\xba 1\xd0\xb12\xd0\xbb\xd0\xb5\xd1\x8f \xd0\xb12\xd0\xbb\xd1\x83\xd0\xb4 1\xd0\xb12\xd0\xbb\xd1\x83\xd0\xb6 2\xd0\xb1\xd0\xbb\xd1\x8b 2\xd0\xb12\xd0\xbb\xd1\x8c 2\xd0\xb13\xd0\xbb\xd1\x8e_ \xd0\xb12\xd0\xbb\xd1\x8e\xd0\xb4 \xd0\xb12\xd0\xbb\xd1\x8e\xd0\xb5 \xd0\xb12\xd0\xbb\xd1\x8e\xd0\xbb 2\xd0\xb13\xd0\xbb\xd1\x8e\xd1\x81\xd1\x8c 2\xd0\xb1\xd0\xbb\xd1\x8f 2\xd0\xb13\xd0\xbd 1\xd0\xb1\xd0\xbe \xd0\xb1\xd0\xbe1\xd0\xb1\xd1\x80\xd0\xb0 \xd0\xb1\xd0\xbe3\xd0\xb2\xd1\x88 \xd0\xb1\xd0\xbe2\xd0\xb3\xd0\xb4 \xd0\xb1\xd0\xbe1\xd0\xb4\xd1\x80\xd0\xb0 \xd0\xb1\xd0\xbe1\xd0\xb72 \xd0\xb1\xd0\xbe1\xd0\xbb2\xd0\xb6 \xd0\xb1\xd0\xbe1\xd0\xbb\xd1\x8c\xd1\x81 \xd0\xb1\xd0\xbe3\xd0\xbc2\xd0\xbb \xd0\xb1\xd0\xbe2\xd0\xbc\xd1\x87 \xd0\xb1\xd0\xbe3\xd0\xbc\xd1\x88 \xd0\xb1\xd0\xbe\xd0\xbd\xd1\x831 \xd0\xb1\xd0\xbe1\xd1\x80\xd1\x83 \xd0\xb1\xd0\xbe2\xd1\x81\xd0\xb0 \xd0\xb1\xd0\xbe1\xd1\x81\xd0\xba \xd0\xb1\xd0\xbe3\xd1\x81\xd0\xba\xd0\xbe \xd0\xb1\xd0\xbe3\xd1\x81\xd1\x82\xd0\xb8 3\xd0\xb1\xd0\xbe\xd1\x82 \xd0\xb1\xd0\xbe2\xd1\x82\xd0\xb2 \xd0\xb1\xd0\xbe\xd1\x822\xd1\x80 \xd0\xb1\xd0\xbe\xd1\x8f2\xd1\x80 2\xd0\xb1\xd1\x80_ \xd0\xb13\xd1\x80\xd0\xb0\xd0\xb1 \xd0\xb12\xd1\x80\xd0\xb0\xd0\xb2 \xd0\xb1\xd1\x80\xd0\xb01\xd0\xb7\xd0\xbe 1\xd0\xb12\xd1\x80\xd0\xb0\xd0\xbb 2\xd0\xb11\xd1\x80\xd0\xb0\xd0\xbc \xd0\xb12\xd1\x80\xd0\xb0\xd0\xbd 1\xd0\xb1\xd1\x80\xd0\xb0\xd1\x81 \xd0\xb12\xd1\x80\xd0\xb0\xd1\x82\xd1\x8c \xd0\xb11\xd1\x80\xd0\xb0\xd1\x85 1\xd0\xb12\xd1\x80\xd0\xb0\xd1\x87 2\xd0\xb13\xd1\x80\xd0\xb0\xd1\x8f 1\xd0\xb12\xd1\x80\xd0\xb5\xd0\xb4 \xd0\xb11\xd1\x80\xd0\xb5\xd0\xb9 \xd0\xb11\xd1\x80\xd0\xb5\xd0\xba \xd0\xb12\xd1\x80\xd0\xb5\xd0\xbc \xd0\xb12\xd1\x80\xd0\xb5\xd1\x85 \xd0\xb12\xd1\x80\xd0\xb8\xd0\xb4 \xd0\xb12\xd1\x80\xd0\xb8\xd1\x82\xd0\xbe \xd0\xb12\xd1\x80\xd0\xb8\xd1\x82\xd1\x8b 1\xd0\xb12\xd1\x80\xd0\xbe\xd0\xb4\xd0\xb8 \xd0\xb11\xd1\x80\xd0\xbe\xd0\xbb \xd0\xb11\xd1\x80\xd0\xbe\xd0\xbc_ 1\xd0\xb12\xd1\x80\xd0\xbe\xd1\x81\xd0\xb8 \xd0\xb1\xd1\x80\xd0\xbe2\xd1\x811\xd0\xba 2\xd0\xb1\xd1\x80\xd1\x81 \xd0\xb11\xd1\x80\xd1\x83 3\xd0\xb1\xd1\x80\xd1\x83\xd0\xba\xd1\x81 2\xd0\xb1\xd1\x80\xd1\x8c 1\xd0\xb12\xd1\x80\xd1\x8e 2\xd0\xb13\xd1\x80\xd1\x8e_ \xd0\xb11\xd1\x80\xd1\x8f 2\xd0\xb11\xd1\x812 \xd0\xb13\xd1\x81\xd0\xba \xd0\xb1\xd1\x814\xd0\xbb \xd0\xb11\xd1\x82 1\xd0\xb12\xd1\x83 \xd0\xb1\xd1\x832\xd0\xb31\xd1\x80 \xd0\xb1\xd1\x83\xd0\xba1\xd0\xbb \xd0\xb1\xd1\x831\xd1\x81 2\xd0\xb1\xd1\x84 2\xd0\xb11\xd1\x85 2\xd0\xb1\xd1\x86 2\xd0\xb11\xd1\x87 2\xd0\xb1\xd1\x88 2\xd0\xb1\xd1\x89 1\xd0\xb1\xd1\x8b \xd0\xb1\xd1\x8b2\xd0\xb31 \xd0\xb1\xd1\x8b2\xd1\x81 \xd0\xb1\xd1\x8b\xd1\x811\xd0\xba \xd0\xb1\xd1\x8b\xd1\x81\xd1\x821 1\xd0\xb1\xd1\x8c 2\xd0\xb1\xd1\x8c_ 2\xd0\xb1\xd1\x8c\xd1\x81 2\xd0\xb1\xd1\x8c\xd1\x82 \xd0\xb1\xd1\x8d1\xd1\x80 3\xd0\xb12\xd1\x8e \xd0\xb1\xd1\x8e1\xd1\x82\xd0\xb0 1\xd0\xb1\xd1\x8f 1\xd0\xb2\xd0\xb0 \xd0\xb2\xd0\xb02\xd0\xb1\xd1\x80 3\xd0\xb2\xd0\xb0\xd0\xb3 \xd0\xb2\xd0\xb02\xd0\xb41\xd1\x80 \xd0\xb2\xd0\xb0\xd0\xb4\xd1\x8c2 \xd0\xb2\xd0\xb03\xd0\xb62\xd0\xb4 \xd0\xb2\xd0\xb01\xd0\xb7 \xd0\xb2\xd0\xb0\xd0\xbd\xd1\x812 \xd0\xb2\xd0\xb01\xd1\x81\xd1\x82 \xd0\xb2\xd0\xb02\xd1\x81\xd1\x82\xd1\x80 \xd0\xb2\xd0\xb01\xd1\x82\xd1\x80 \xd0\xb2\xd0\xb0\xd1\x851 3\xd0\xb2\xd0\xb0\xd1\x86 3\xd0\xb2\xd0\xb0\xd1\x8f 2\xd0\xb21\xd0\xb1 \xd0\xb21\xd0\xb2\xd0\xb8 \xd0\xb21\xd0\xb2\xd1\x80 2\xd0\xb2\xd0\xb32 \xd0\xb21\xd0\xb4 \xd0\xb22\xd0\xb4\xd0\xbe\xd1\x85 1\xd0\xb2\xd0\xb5\xd0\xb2 3\xd0\xb2\xd0\xb5\xd0\xb3 \xd0\xb2\xd0\xb5\xd0\xb41\xd1\x80 \xd0\xb2\xd0\xb53\xd0\xb4\xd1\x83 1\xd0\xb2\xd0\xb5\xd0\xb5 1\xd0\xb2\xd0\xb5\xd0\xb7 3\xd0\xb2\xd0\xb5\xd0\xb7\xd0\xb5 3\xd0\xb2\xd0\xb5\xd0\xb7\xd0\xbb \xd0\xb2\xd0\xb5\xd0\xb72\xd1\x83 1\xd0\xb2\xd0\xb5\xd0\xb9_ \xd0\xb2\xd0\xb52\xd0\xbf1 2\xd0\xb2\xd0\xb5\xd1\x80\xd0\xb4 1\xd0\xb2\xd0\xb5\xd1\x81 \xd0\xb2\xd0\xb52\xd1\x811\xd0\xba \xd0\xb2\xd0\xb52\xd1\x81\xd1\x821\xd0\xb2 \xd0\xb2\xd0\xb5\xd1\x823\xd1\x80 1\xd0\xb2\xd0\xb5\xd1\x86 1\xd0\xb2\xd0\xb5\xd1\x8e 1\xd0\xb2\xd0\xb5\xd1\x8f 1\xd0\xb22\xd0\xb72 \xd0\xb2\xd0\xb7\xd0\xb32 \xd0\xb2\xd0\xb7\xd0\xb42 \xd0\xb2\xd0\xb7\xd0\xbe1\xd0\xb1 \xd0\xb2\xd0\xb7\xd1\x8a2 \xd0\xb2\xd0\xb7\xd1\x8a\xd0\xb53\xd0\xb4 \xd0\xb2\xd0\xb82\xd0\xb0\xd0\xb7 \xd0\xb2\xd0\xb82\xd0\xb0\xd0\xba \xd0\xb2\xd0\xb82\xd0\xb0\xd1\x80 \xd0\xb2\xd0\xb82\xd0\xb01\xd1\x812 \xd0\xb2\xd0\xb8\xd0\xb01\xd1\x82 \xd0\xb2\xd0\xb83\xd0\xb0\xd1\x84 \xd0\xb2\xd0\xb82\xd0\xb3\xd0\xb2 \xd0\xb2\xd0\xb82\xd0\xb3\xd0\xbb 1\xd0\xb2\xd0\xb8\xd0\xb7 1\xd0\xb2\xd0\xb8\xd0\xbd\xd1\x82 1\xd0\xb2\xd0\xb8\xd0\xbd\xd1\x87 \xd0\xb2\xd0\xb81\xd0\xbe \xd0\xb2\xd0\xb81\xd1\x812\xd0\xbd\xd0\xb8 \xd0\xb2\xd0\xb8\xd1\x833 \xd0\xb2\xd0\xb82\xd1\x84 2\xd0\xb21\xd0\xba \xd0\xb2\xd0\xba2\xd0\xbb 3\xd0\xb22\xd0\xba\xd1\x83\xd1\x81 \xd0\xb21\xd0\xbb \xd0\xb22\xd0\xbb\xd0\xb0 2\xd0\xb23\xd0\xbb\xd0\xb0\xd0\xb1 \xd0\xb22\xd0\xbb\xd0\xb5\xd0\xb2 \xd0\xb22\xd0\xbb\xd0\xb5\xd0\xba \xd0\xb22\xd0\xbb\xd0\xb5\xd1\x82 \xd0\xb22\xd0\xbb\xd0\xb5\xd1\x87 2\xd0\xb2\xd0\xbb\xd0\xb8 \xd0\xb22\xd0\xbb\xd0\xb8\xd1\x8f 2\xd0\xb2\xd0\xbb\xd1\x8e \xd0\xb22\xd0\xbb\xd1\x8e\xd0\xb1 2\xd0\xb2\xd0\xbb\xd1\x8f 2\xd0\xb2\xd0\xbc 1\xd0\xb2\xd0\xbc\xd0\xb5 2\xd0\xb21\xd0\xbd 4\xd0\xb23\xd0\xbd\xd0\xb0 \xd0\xb22\xd0\xbd\xd0\xb5\xd1\x81 \xd0\xb2\xd0\xbd\xd0\xbe1 \xd0\xb23\xd0\xbd\xd1\x83_ 3\xd0\xb22\xd0\xbd\xd1\x83\xd0\xba 3\xd0\xb22\xd0\xbd\xd1\x83\xd1\x87 \xd0\xb23\xd0\xbd\xd1\x8b \xd0\xb2\xd0\xbe1\xd0\xb12 \xd0\xb2\xd0\xbe2\xd0\xb13\xd0\xbb\xd0\xb0 \xd0\xb2\xd0\xbe\xd0\xb22 \xd0\xb2\xd0\xbe3\xd0\xb2\xd0\xba 1\xd0\xb2\xd0\xbe\xd0\xb4 \xd0\xb2\xd0\xbe1\xd0\xb4\xd0\xb2 \xd0\xb2\xd0\xbe1\xd0\xb4\xd1\x80 \xd0\xb2\xd0\xbe2\xd0\xb5\xd1\x80 \xd0\xb2\xd0\xbe2\xd0\xb6\xd0\xb6 \xd0\xb2\xd0\xbe\xd0\xb82\xd1\x811 1\xd0\xb2\xd0\xbe\xd0\xba \xd0\xb2\xd0\xbe3\xd0\xbc2 \xd0\xb2\xd0\xbe\xd0\xbf2 \xd0\xb2\xd0\xbe1\xd1\x80\xd1\x83 2\xd0\xb2\xd0\xbe\xd1\x80\xd1\x86 2\xd0\xb2\xd0\xbe\xd1\x80\xd1\x8c \xd0\xb2\xd0\xbe\xd1\x811\xd0\xba \xd0\xb2\xd0\xbe1\xd1\x81\xd0\xbc \xd0\xb2\xd0\xbe1\xd1\x81\xd0\xbd \xd0\xb2\xd0\xbe\xd1\x813\xd0\xbf\xd0\xb5 \xd0\xb2\xd0\xbe2\xd1\x81\xd1\x82\xd1\x80 \xd0\xb2\xd0\xbe\xd1\x822\xd1\x80 1\xd0\xb2\xd0\xbe\xd1\x85 \xd0\xb2\xd0\xbe1\xd1\x85\xd0\xbb \xd0\xb2\xd0\xbe3\xd1\x852\xd1\x82 1\xd0\xb2\xd0\xbe\xd1\x8e 2\xd0\xb2\xd0\xbf2 2\xd0\xb2\xd1\x80_ 2\xd0\xb2\xd1\x80\xd0\xb0_ \xd0\xb22\xd1\x80\xd0\xb0\xd0\xb2 2\xd0\xb21\xd1\x80\xd0\xb0\xd0\xbc \xd0\xb21\xd1\x80\xd0\xb0\xd1\x81 2\xd0\xb21\xd1\x80\xd0\xb0\xd1\x85 2\xd0\xb2\xd1\x80\xd0\xb0\xd1\x86 2\xd0\xb2\xd1\x80\xd0\xb5_ 2\xd0\xb21\xd1\x80\xd0\xb5\xd0\xbd 1\xd0\xb2\xd1\x80\xd0\xb8\xd0\xb4 1\xd0\xb22\xd1\x80\xd0\xb8\xd0\xb7 \xd0\xb21\xd1\x80\xd0\xb8\xd0\xb8 \xd0\xb21\xd1\x80\xd0\xb8\xd0\xba \xd0\xb21\xd1\x80\xd0\xb8\xd0\xbb \xd0\xb21\xd1\x80\xd0\xb8\xd1\x81 \xd0\xb21\xd1\x80\xd0\xb8\xd1\x82 2\xd0\xb21\xd1\x80\xd0\xbe \xd0\xb2\xd1\x80\xd0\xbe3\xd1\x822 2\xd0\xb21\xd1\x80\xd1\x8b 1\xd0\xb2\xd1\x80\xd1\x8e \xd0\xb21\xd1\x80\xd1\x8f 2\xd0\xb21\xd1\x812 3\xd0\xb2\xd1\x81\xd0\xb53 \xd0\xb23\xd1\x81\xd0\xba\xd0\xb0\xd1\x8f 4\xd0\xb23\xd1\x81\xd0\xba\xd0\xb8 4\xd0\xb23\xd1\x81\xd0\xba\xd1\x83 3\xd0\xb22\xd1\x81\xd0\xbf 3\xd0\xb22\xd1\x81\xd1\x8e \xd0\xb21\xd1\x822 \xd0\xb2\xd1\x82\xd0\xbe1\xd0\xb12 \xd0\xb2\xd1\x82\xd0\xbe3\xd1\x88 1\xd0\xb2\xd1\x83\xd0\xb0 \xd0\xb2\xd1\x833\xd0\xb3 1\xd0\xb2\xd1\x831\xd0\xb7 2\xd0\xb2\xd1\x83\xd0\xb8 2\xd0\xb2\xd1\x831\xd0\xba \xd0\xb2\xd1\x833\xd0\xbf \xd0\xb2\xd1\x831\xd1\x812 \xd0\xb2\xd1\x832\xd1\x851\xd0\xb0 \xd0\xb2\xd1\x83\xd1\x853\xd0\xb2 \xd0\xb2\xd1\x831\xd1\x87\xd0\xbb \xd0\xb2\xd1\x842 1\xd0\xb2\xd1\x85\xd0\xbe 2\xd0\xb2\xd1\x86 2\xd0\xb21\xd1\x87 2\xd0\xb2\xd1\x88 3\xd0\xb22\xd1\x88\xd0\xb8\xd0\xb2 2\xd0\xb2\xd1\x89 \xd0\xb2\xd1\x8a2 1\xd0\xb2\xd1\x8b \xd0\xb2\xd1\x8b3\xd0\xb32 \xd0\xb2\xd1\x8b3\xd0\xb7\xd0\xbd \xd0\xb2\xd1\x8b\xd0\xbf2 \xd0\xb2\xd1\x8b3\xd1\x822 \xd0\xb2\xd1\x8b\xd1\x852 \xd0\xb2\xd1\x8b3\xd1\x882\xd0\xbb 2\xd0\xb2\xd1\x8c_ 1\xd0\xb2\xd1\x8c\xd0\xb5 1\xd0\xb2\xd1\x8c\xd0\xb8\xd0\xbd 2\xd0\xb2\xd1\x8c\xd1\x81 2\xd0\xb2\xd1\x8c\xd1\x82 1\xd0\xb2\xd1\x8c\xd1\x8e 1\xd0\xb2\xd1\x8c\xd1\x8f 1\xd0\xb22\xd1\x8d1 1\xd0\xb22\xd1\x8e 1\xd0\xb2\xd1\x8f 1\xd0\xb3 \xd0\xb32\xd0\xb0 \xd0\xb3\xd0\xb01\xd0\xb7 \xd0\xb3\xd0\xb01\xd1\x81\xd1\x822 \xd0\xb3\xd0\xb02\xd1\x83 2\xd0\xb33\xd0\xb1 \xd0\xb3\xd0\xb1\xd0\xb02 \xd0\xb31\xd0\xb2\xd0\xb8 2\xd0\xb3\xd0\xb3 \xd0\xb33\xd0\xb4\xd0\xb0\xd0\xbd 2\xd0\xb33\xd0\xb4\xd0\xb8 3\xd0\xb3\xd0\xb5_ \xd0\xb3\xd0\xb52\xd0\xb11 \xd0\xb3\xd0\xb5\xd0\xbd\xd0\xbe1 \xd0\xb3\xd0\xb52\xd0\xbe\xd0\xb1 \xd0\xb3\xd0\xb52\xd0\xbe\xd0\xb4 \xd0\xb3\xd0\xb51\xd0\xbe\xd1\x80 2\xd0\xb33\xd0\xb6 2\xd0\xb31\xd0\xb7 \xd0\xb32\xd0\xb8 \xd0\xb3\xd0\xb82\xd0\xb1\xd0\xbb \xd0\xb3\xd0\xb83\xd0\xb1\xd1\x80 \xd0\xb3\xd0\xb82\xd0\xb3\xd1\x80 \xd0\xb3\xd0\xb81\xd1\x81\xd0\xbb \xd0\xb3\xd0\xb8\xd1\x81\xd1\x822 2\xd0\xb31\xd0\xba 2\xd0\xb3\xd0\xbb\xd0\xb0_ \xd0\xb32\xd0\xbb\xd0\xb0\xd0\xb2 \xd0\xb31\xd0\xbb\xd0\xb0\xd0\xb9 \xd0\xb31\xd0\xbb\xd0\xb0\xd0\xbc\xd0\xb8 2\xd0\xb3\xd0\xbb\xd0\xb0\xd1\x81\xd1\x8c 2\xd0\xb3\xd0\xbb\xd0\xb0\xd1\x8f \xd0\xb31\xd0\xbb\xd0\xb5 \xd0\xb32\xd0\xbb\xd0\xb5\xd1\x82 2\xd0\xb3\xd0\xbb\xd0\xb8_ \xd0\xb32\xd0\xbb\xd0\xb8\xd0\xbd 3\xd0\xb32\xd0\xbb\xd0\xb8\xd1\x84 2\xd0\xb3\xd0\xbb\xd0\xbe_ \xd0\xb33\xd0\xbb\xd0\xbe\xd0\xb1\xd0\xbb 2\xd0\xb3\xd0\xbb\xd0\xbe\xd0\xb2 2\xd0\xb3\xd0\xbb\xd0\xbe\xd0\xb3 2\xd0\xb3\xd0\xbb\xd0\xbe\xd0\xb5 2\xd0\xb3\xd0\xbb\xd0\xbe\xd0\xb9 2\xd0\xb3\xd0\xbb\xd0\xbe\xd1\x8e 2\xd0\xb3\xd0\xbb\xd1\x83\xd1\x8e 2\xd0\xb31\xd0\xbb\xd1\x8b \xd0\xb32\xd0\xbb\xd1\x8f\xd0\xb6 2\xd0\xb3\xd0\xbb\xd1\x8f\xd0\xba 2\xd0\xb33\xd0\xbc \xd0\xb32\xd0\xbd\xd0\xb0\xd0\xb2 \xd0\xb32\xd0\xbd\xd0\xb0\xd0\xbd \xd0\xb33\xd0\xbd\xd0\xb5_ \xd0\xb32\xd0\xbd\xd0\xb5\xd0\xb2 \xd0\xb33\xd0\xbd\xd0\xb5\xd0\xbd \xd0\xb33\xd0\xbd\xd0\xb5\xd0\xbf \xd0\xb33\xd0\xbd\xd0\xb5\xd1\x81 \xd0\xb32\xd0\xbd\xd0\xb8\xd1\x80 \xd0\xb3\xd0\xbd\xd0\xb8\xd1\x822\xd1\x80 \xd0\xb32\xd0\xbd\xd0\xbe\xd0\xb5 \xd0\xb32\xd0\xbd\xd0\xbe\xd0\xb8 \xd0\xb32\xd0\xbd\xd0\xbe\xd1\x81 \xd0\xb33\xd0\xbd\xd1\x8f \xd0\xb3\xd0\xbe1\xd0\xb12 \xd0\xb3\xd0\xbe2\xd0\xb2\xd0\xbb \xd0\xb3\xd0\xbe3\xd0\xb62\xd0\xb4 \xd0\xb3\xd0\xbe1\xd0\xb7 \xd0\xb3\xd0\xbe2\xd0\xb7\xd0\xbb \xd0\xb3\xd0\xbe\xd0\xb72\xd0\xbd \xd0\xb3\xd0\xbe\xd0\xb8\xd0\xb32 3\xd0\xb3\xd0\xbe\xd0\xb9 \xd0\xb32\xd0\xbe\xd0\xbb \xd0\xb3\xd0\xbe\xd0\xbc\xd0\xb82 \xd0\xb3\xd0\xbe2\xd1\x811\xd0\xb0 \xd0\xb3\xd0\xbe2\xd1\x81\xd0\xb4 \xd0\xb3\xd0\xbe1\xd1\x81\xd0\xba\xd0\xbb \xd0\xb3\xd0\xbe1\xd1\x81\xd0\xbd \xd0\xb3\xd0\xbe1\xd1\x81\xd0\xbf\xd0\xb0 2\xd0\xb3\xd0\xbe\xd1\x82\xd0\xb4 \xd0\xb3\xd0\xbe\xd1\x833\xd1\x82 \xd0\xb3\xd0\xbe1\xd1\x87\xd0\xbb 3\xd0\xb3\xd0\xbe\xd1\x8e 2\xd0\xb3\xd0\xbf 2\xd0\xb3\xd1\x80_ \xd0\xb31\xd1\x80\xd0\xb0\xd0\xb5 \xd0\xb31\xd1\x80\xd0\xb0\xd0\xb9 \xd0\xb31\xd1\x80\xd0\xb0\xd1\x80 \xd0\xb31\xd1\x80\xd0\xb5\xd0\xb3 \xd0\xb31\xd1\x80\xd0\xb5\xd0\xba \xd0\xb31\xd1\x80\xd0\xb5\xd1\x86 \xd0\xb3\xd1\x80\xd0\xb84\xd0\xb23\xd0\xbd \xd0\xb31\xd1\x80\xd0\xb8\xd0\xba \xd0\xb31\xd1\x80\xd0\xb8\xd0\xbb \xd0\xb31\xd1\x80\xd0\xb8\xd0\xbd \xd0\xb31\xd1\x80\xd0\xb8\xd1\x81 \xd0\xb31\xd1\x80\xd0\xb8\xd1\x87 \xd0\xb31\xd1\x80\xd0\xbe\xd0\xb2 \xd0\xb32\xd1\x80\xd0\xbe\xd0\xb7 \xd0\xb31\xd1\x80\xd0\xbe\xd0\xba \xd0\xb31\xd1\x80\xd0\xbe\xd0\xbd \xd0\xb31\xd1\x80\xd0\xbe\xd0\xbf \xd0\xb31\xd1\x80\xd0\xbe\xd1\x82 \xd0\xb31\xd1\x80\xd0\xbe\xd1\x84 \xd0\xb3\xd1\x80\xd1\x832\xd0\xbf \xd0\xb31\xd1\x80\xd1\x8b\xd0\xb2 2\xd0\xb3\xd1\x80\xd1\x8e \xd0\xb31\xd1\x80\xd1\x8f\xd0\xb5 \xd0\xb31\xd1\x80\xd1\x8f\xd0\xbb \xd0\xb31\xd1\x80\xd1\x8f\xd1\x82 2\xd0\xb33\xd1\x812 \xd0\xb34\xd1\x81\xd0\xb0 \xd0\xb34\xd1\x81\xd0\xb1 2\xd0\xb33\xd1\x82 \xd0\xb3\xd1\x831\xd0\xb2 \xd0\xb3\xd1\x831\xd1\x81 \xd0\xb3\xd1\x832\xd1\x811\xd0\xba 2\xd0\xb3\xd1\x84 2\xd0\xb31\xd1\x87 2\xd0\xb33\xd1\x88 2\xd0\xb33\xd1\x8d 1\xd0\xb4\xd0\xb0 \xd0\xb4\xd0\xb02\xd0\xb11 \xd0\xb4\xd0\xb02\xd0\xb3\xd0\xb5\xd0\xbd \xd0\xb4\xd0\xb02\xd0\xb3\xd1\x80 \xd0\xb4\xd0\xb01\xd0\xb7 \xd0\xb4\xd0\xb02\xd0\xbe \xd0\xb4\xd0\xb0\xd1\x81\xd1\x821\xd1\x80 \xd0\xb4\xd0\xb0\xd1\x821\xd1\x80 2\xd0\xb41\xd0\xb1 \xd0\xb4\xd0\xb22 \xd0\xb41\xd0\xb2\xd0\xb5 1\xd0\xb4\xd0\xb2\xd0\xb8 2\xd0\xb41\xd0\xb2\xd0\xb8\xd0\xb4 2\xd0\xb4\xd0\xb2\xd0\xb8\xd0\xb7 2\xd0\xb4\xd0\xb2\xd0\xb8\xd0\xbd\xd1\x82 2\xd0\xb4\xd0\xb2\xd0\xb8\xd0\xbd\xd1\x87 2\xd0\xb41\xd0\xb2\xd0\xb8\xd1\x81 2\xd0\xb41\xd0\xb2\xd0\xb8\xd1\x82 \xd0\xb43\xd0\xb2\xd0\xba \xd0\xb41\xd0\xb2\xd0\xbb 2\xd0\xb4\xd0\xb2\xd0\xbe\xd0\xb4 \xd0\xb41\xd0\xb2\xd0\xbe\xd0\xb7 1\xd0\xb4\xd0\xb2\xd0\xbe\xd1\x80\xd1\x8c 2\xd0\xb4\xd0\xb2\xd1\x8f 2\xd0\xb4\xd0\xb32 2\xd0\xb41\xd0\xb42 1\xd0\xb4\xd0\xb5 \xd0\xb4\xd0\xb51\xd0\xb12\xd0\xbb \xd0\xb4\xd0\xb51\xd0\xb12\xd1\x80 3\xd0\xb4\xd0\xb5\xd0\xb2\xd1\x80 3\xd0\xb4\xd0\xb5\xd0\xb7 \xd0\xb4\xd0\xb52\xd0\xb71\xd0\xb02 \xd0\xb4\xd0\xb52\xd0\xb7\xd0\xb8 \xd0\xb4\xd0\xb5\xd0\xb71\xd0\xbe2 \xd0\xb4\xd0\xb52\xd0\xb7\xd1\x83 \xd0\xb4\xd0\xb5\xd0\xb8\xd0\xbe2 \xd0\xb4\xd0\xb51\xd0\xba\xd0\xbb 3\xd0\xb4\xd0\xb5\xd0\xbc\xd0\xb5 \xd0\xb4\xd0\xb52\xd0\xbe\xd0\xb4 \xd0\xb4\xd0\xb5\xd0\xbe3\xd0\xbf \xd0\xb4\xd0\xb53\xd0\xbf\xd0\xbb \xd0\xb4\xd0\xb5\xd1\x80\xd0\xb0\xd1\x812 \xd0\xb4\xd0\xb52\xd1\x813\xd0\xb2 \xd0\xb4\xd0\xb5\xd1\x812\xd0\xba \xd0\xb4\xd0\xb52\xd1\x81\xd1\x80 \xd0\xb4\xd0\xb51\xd1\x85\xd0\xbb 2\xd0\xb4\xd0\xb6_ \xd0\xb42\xd0\xb6\xd0\xb0\xd0\xbc \xd0\xb42\xd0\xb63\xd0\xbc 2\xd0\xb4\xd0\xb6\xd1\x81 2\xd0\xb41\xd0\xb72 1\xd0\xb4\xd0\xb8 \xd0\xb4\xd0\xb82\xd0\xb0\xd0\xb4 \xd0\xb4\xd0\xb8\xd0\xb02\xd0\xb7 \xd0\xb4\xd0\xb82\xd0\xb0\xd0\xbb\xd0\xb8 \xd0\xb4\xd0\xb82\xd0\xb0\xd0\xbb\xd0\xbe \xd0\xb4\xd0\xb82\xd0\xb0\xd1\x80 \xd0\xb4\xd0\xb82\xd0\xb0\xd1\x81 \xd0\xb4\xd0\xb82\xd0\xbe\xd0\xb1 \xd0\xb4\xd0\xb8\xd0\xbe3\xd0\xb4\xd0\xb5 \xd0\xb4\xd0\xb82\xd0\xbe\xd1\x80 \xd0\xb4\xd0\xb8\xd0\xbe1\xd1\x81 \xd0\xb4\xd0\xb81\xd0\xbe\xd1\x82\xd0\xb8 \xd0\xb4\xd0\xb8\xd0\xbf2 \xd0\xb4\xd0\xb82\xd0\xbf\xd0\xb8 \xd0\xb4\xd0\xb83\xd0\xbf\xd1\x82 \xd0\xb4\xd0\xb82\xd1\x811\xd1\x82\xd1\x80 \xd0\xb4\xd0\xb8\xd1\x833 \xd0\xb4\xd0\xb83\xd1\x84\xd1\x80 \xd0\xb4\xd0\xb83\xd1\x84\xd1\x82\xd0\xbe \xd0\xb4\xd0\xb81\xd1\x85 2\xd0\xb41\xd0\xba \xd0\xb41\xd0\xbb \xd0\xb42\xd0\xbb\xd0\xb5\xd0\xb2 2\xd0\xb43\xd0\xbc2 2\xd0\xb41\xd0\xbd \xd0\xb43\xd0\xbd\xd0\xb0 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb02 3\xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb2\xd0\xbd 4\xd0\xb43\xd0\xbd\xd0\xbe1 \xd0\xb4\xd0\xbd\xd0\xbe3\xd0\xb42 \xd0\xb4\xd0\xbd\xd0\xbe\xd1\x812 4\xd0\xb43\xd0\xbd\xd1\x8b 3\xd0\xb42\xd0\xbd\xd1\x8f\xd1\x88 1\xd0\xb4\xd0\xbe 2\xd0\xb41\xd0\xbe2\xd0\xb1\xd0\xb5\xd0\xb4 \xd0\xb4\xd0\xbe2\xd0\xb1\xd0\xbb 2\xd0\xb41\xd0\xbe\xd0\xb1\xd0\xbb\xd0\xb0 \xd0\xb4\xd0\xbe1\xd0\xb12\xd1\x80\xd0\xb0 \xd0\xb4\xd0\xbe\xd0\xb22\xd0\xbb \xd0\xb4\xd0\xbe3\xd0\xb22\xd0\xbc \xd0\xb4\xd0\xbe1\xd0\xb42 \xd0\xb4\xd0\xbe3\xd0\xb4\xd0\xbd \xd0\xb4\xd0\xbe3\xd0\xb62\xd0\xb4 \xd0\xb4\xd0\xbe1\xd0\xb7 \xd0\xb4\xd0\xbe\xd0\xb72\xd0\xbd \xd0\xb4\xd0\xbe\xd0\xb82\xd1\x80 2\xd0\xb4\xd0\xbe\xd0\xba\xd1\x82 2\xd0\xb4\xd0\xbe\xd0\xbb\xd0\xb8\xd0\xbc \xd0\xb4\xd0\xbe2\xd0\xbc1\xd1\x80 \xd0\xb4\xd0\xbe\xd0\xbf2 \xd0\xb4\xd0\xbe3\xd0\xbf\xd0\xbb 2\xd0\xb4\xd0\xbe\xd0\xbf\xd0\xbb\xd0\xb5 \xd0\xb4\xd0\xbe2\xd0\xbf\xd1\x80\xd0\xb5 \xd0\xb4\xd0\xbe2\xd1\x80\xd1\x83\xd0\xb1 \xd0\xb4\xd0\xbe1\xd1\x81 \xd0\xb41\xd0\xbe2\xd1\x81\xd0\xb5\xd0\xbd \xd0\xb41\xd0\xbe2\xd1\x81\xd0\xb8\xd0\xbd 2\xd0\xb41\xd0\xbe\xd1\x81\xd0\xbd\xd0\xbe \xd0\xb4\xd0\xbe\xd1\x812\xd0\xbf 2\xd0\xb4\xd0\xbe\xd1\x82\xd0\xb4 2\xd0\xb4\xd0\xbe\xd1\x82\xd0\xbb \xd0\xb4\xd0\xbe\xd1\x822\xd1\x80\xd0\xb8 2\xd0\xb41\xd0\xbe\xd1\x82\xd1\x80\xd1\x8f 2\xd0\xb4\xd0\xbe\xd1\x82\xd1\x8a \xd0\xb4\xd0\xbe3\xd1\x82\xd1\x8c 3\xd0\xb4\xd0\xbe\xd1\x85\xd0\xbb \xd0\xb4\xd0\xbe2\xd1\x883\xd0\xb2 \xd0\xb4\xd0\xbe3\xd1\x882\xd0\xba \xd0\xb4\xd0\xbe2\xd1\x88\xd0\xbb\xd1\x8b \xd0\xb4\xd0\xbe2\xd1\x89\xd1\x83 2\xd0\xb4\xd0\xbf 2\xd0\xb4\xd1\x80_ \xd0\xb41\xd1\x80\xd0\xb0\xd0\xb1 1\xd0\xb4\xd1\x80\xd0\xb0\xd0\xb2\xd1\x88 2\xd0\xb4\xd1\x80\xd0\xb0\xd0\xb7\xd0\xb2 1\xd0\xb42\xd1\x80\xd0\xb0\xd0\xb7\xd0\xbd \xd0\xb41\xd1\x80\xd0\xb0\xd0\xbd\xd0\xb5 \xd0\xb41\xd1\x80\xd0\xb0\xd1\x80 \xd0\xb41\xd1\x80\xd0\xb02\xd1\x813 \xd0\xb41\xd1\x80\xd0\xb0\xd1\x85 \xd0\xb41\xd1\x80\xd0\xb0\xd1\x87 \xd0\xb42\xd1\x80\xd0\xb0\xd1\x8e \xd0\xb41\xd1\x80\xd0\xb5 \xd0\xb42\xd1\x80\xd0\xb5\xd0\xb1 2\xd0\xb43\xd1\x80\xd0\xb5\xd0\xb6 2\xd0\xb4\xd1\x80\xd0\xb5\xd0\xb7 \xd0\xb42\xd1\x80\xd0\xb5\xd0\xbb \xd0\xb42\xd1\x80\xd0\xb5\xd0\xbc 1\xd0\xb4\xd1\x80\xd0\xb5\xd0\xbc\xd0\xb0 1\xd0\xb4\xd1\x80\xd0\xb5\xd0\xbc\xd0\xbb \xd0\xb4\xd1\x80\xd0\xb5\xd0\xbc3\xd0\xbd 1\xd0\xb4\xd1\x80\xd0\xb5\xd0\xbc\xd1\x8b 2\xd0\xb43\xd1\x80\xd0\xb5\xd0\xbd \xd0\xb4\xd1\x80\xd0\xb52\xd1\x81\xd0\xba \xd0\xb42\xd1\x80\xd0\xb5\xd1\x81\xd1\x81 \xd0\xb41\xd1\x80\xd0\xb8 \xd0\xb42\xd1\x80\xd0\xb8\xd0\xb9 2\xd0\xb4\xd1\x80\xd0\xb8\xd0\xbd \xd0\xb42\xd1\x80\xd0\xb8\xd0\xbf \xd0\xb42\xd1\x80\xd0\xb8\xd1\x85 \xd0\xb4\xd1\x80\xd0\xbe2\xd0\xb33\xd0\xbd \xd0\xb41\xd1\x80\xd0\xbe\xd0\xb4 \xd0\xb41\xd1\x80\xd0\xbe\xd0\xb5 1\xd0\xb42\xd1\x80\xd0\xbe\xd0\xb6 2\xd0\xb43\xd1\x80\xd0\xbe\xd0\xb7 \xd0\xb41\xd1\x80\xd0\xbe\xd0\xb9 \xd0\xb41\xd1\x80\xd0\xbe\xd0\xbb \xd0\xb41\xd1\x80\xd0\xbe\xd0\xbd \xd0\xb41\xd1\x80\xd0\xbe\xd1\x81 \xd0\xb41\xd1\x80\xd0\xbe\xd1\x82 \xd0\xb41\xd1\x80\xd0\xbe\xd1\x8e \xd0\xb41\xd1\x80\xd1\x83\xd0\xb1 1\xd0\xb4\xd1\x80\xd1\x83\xd0\xb3 1\xd0\xb4\xd1\x80\xd1\x83\xd0\xb6 \xd0\xb41\xd1\x80\xd1\x83\xd0\xbc \xd0\xb41\xd1\x80\xd1\x83\xd1\x8e \xd0\xb41\xd1\x80\xd1\x8b 2\xd0\xb4\xd1\x80\xd1\x8b\xd0\xb2 1\xd0\xb42\xd1\x80\xd1\x8b\xd0\xb3 \xd0\xb41\xd1\x80\xd1\x8f \xd0\xb42\xd1\x80\xd1\x8f\xd0\xb1 1\xd0\xb42\xd1\x80\xd1\x8f\xd0\xb3 \xd0\xb42\xd1\x80\xd1\x8f\xd1\x85 2\xd0\xb41\xd1\x812 \xd0\xb4\xd1\x81\xd0\xba2 \xd0\xb4\xd1\x813\xd0\xba\xd0\xbd 2\xd0\xb41\xd1\x82 1\xd0\xb4\xd1\x83 \xd0\xb4\xd1\x83\xd0\xb13\xd1\x80 \xd0\xb4\xd1\x833\xd0\xb3 2\xd0\xb41\xd1\x83\xd0\xb4 \xd0\xb4\xd1\x832\xd0\xb4\xd0\xb0 \xd0\xb4\xd1\x832\xd0\xbe \xd0\xb4\xd1\x83\xd0\xbf1\xd0\xbb \xd0\xb4\xd1\x83\xd1\x811\xd0\xba \xd0\xb41\xd1\x83\xd1\x81\xd0\xbb \xd0\xb4\xd1\x831\xd1\x81\xd1\x82 \xd0\xb4\xd1\x832\xd1\x81\xd1\x82\xd0\xb0 2\xd0\xb4\xd1\x83\xd1\x821\xd1\x80 \xd0\xb4\xd1\x831\xd1\x85 \xd0\xb4\xd1\x832\xd1\x87\xd0\xb8 \xd0\xb4\xd1\x83\xd1\x8d1\xd1\x82 2\xd0\xb4\xd1\x84 \xd0\xb41\xd1\x85 2\xd0\xb43\xd1\x86\xd0\xb5 2\xd0\xb4\xd1\x86\xd1\x83 2\xd0\xb4\xd1\x86\xd1\x8b 2\xd0\xb41\xd1\x87 2\xd0\xb43\xd1\x882 2\xd0\xb4\xd1\x89 2\xd0\xb4\xd1\x8a \xd0\xb4\xd1\x8a\xd0\xb52\xd0\xbc 1\xd0\xb4\xd1\x8b 2\xd0\xb4\xd1\x8b\xd0\xb3 \xd0\xb4\xd1\x8b2\xd0\xb31\xd1\x80 2\xd0\xb4\xd1\x8b\xd0\xb4 2\xd0\xb4\xd1\x8b\xd0\xbc\xd0\xb5 2\xd0\xb4\xd1\x8b2\xd1\x811 2\xd0\xb4\xd1\x8b\xd1\x82 2\xd0\xb4\xd1\x8b\xd1\x89 2\xd0\xb4\xd1\x8c_ 1\xd0\xb4\xd1\x8c\xd0\xb5 2\xd0\xb4\xd1\x8c\xd0\xba 2\xd0\xb4\xd1\x8c\xd1\x82 1\xd0\xb4\xd1\x8c\xd1\x8e 1\xd0\xb4\xd1\x8c\xd1\x8f \xd0\xb4\xd1\x8c3\xd1\x8f\xd1\x80 1\xd0\xb42\xd1\x8e 1\xd0\xb4\xd1\x8f \xd0\xb51\xd0\xb0 \xd0\xb5\xd0\xb02\xd0\xb4 \xd0\xb5\xd0\xb0\xd0\xb4\xd0\xb83 \xd0\xb5\xd0\xb03\xd0\xb4\xd0\xbe \xd0\xb5\xd0\xb02\xd0\xb7 \xd0\xb5\xd0\xb0\xd0\xbd2\xd0\xb41\xd1\x80 \xd0\xb5\xd0\xb0\xd1\x821\xd1\x80 2\xd0\xb5\xd0\xb1 \xd0\xb5\xd0\xb1\xd0\xb02\xd1\x81 \xd0\xb51\xd0\xb1\xd1\x80\xd0\xb0 \xd0\xb5\xd0\xb11\xd1\x80\xd0\xb5\xd0\xbd \xd0\xb5\xd0\xb11\xd1\x80\xd0\xb8 \xd0\xb51\xd0\xb1\xd1\x80\xd0\xbe \xd0\xb5\xd0\xb11\xd1\x80\xd0\xbe\xd0\xb2 \xd0\xb5\xd0\xb11\xd1\x80\xd1\x8b \xd0\xb52\xd0\xb13\xd1\x80\xd1\x8e \xd0\xb51\xd0\xb2\xd0\xb5 2\xd0\xb5\xd0\xb2\xd0\xb5\xd1\x80 \xd0\xb51\xd0\xb2\xd0\xb8 \xd0\xb53\xd0\xb22\xd0\xbc\xd0\xb5 \xd0\xb5\xd0\xb22\xd0\xbd\xd0\xb8\xd0\xbc \xd0\xb5\xd0\xb22\xd0\xbd\xd1\x8f\xd1\x82 \xd0\xb51\xd0\xb2\xd0\xbe 2\xd0\xb5\xd0\xb2\xd0\xbe\xd0\xbb \xd0\xb5\xd0\xb2\xd1\x80\xd0\xb01\xd1\x81 2\xd0\xb51\xd0\xb2\xd1\x80\xd0\xb5 \xd0\xb5\xd0\xb21\xd1\x80\xd0\xb5\xd0\xb5 \xd0\xb5\xd0\xb21\xd1\x80\xd0\xb5\xd0\xb9 \xd0\xb5\xd0\xb21\xd1\x80\xd0\xb5\xd1\x8f \xd0\xb5\xd0\xb21\xd1\x80\xd0\xb8 \xd0\xb52\xd0\xb2\xd1\x82 \xd0\xb51\xd0\xb2\xd1\x83 \xd0\xb51\xd0\xb2\xd1\x85 \xd0\xb5\xd0\xb22\xd1\x85\xd0\xbe \xd0\xb51\xd0\xb2\xd1\x8c \xd0\xb5\xd0\xb3\xd0\xb01\xd1\x812 \xd0\xb5\xd0\xb32\xd0\xb4 \xd0\xb52\xd0\xb3\xd0\xbb\xd0\xb0\xd0\xbd \xd0\xb52\xd0\xb3\xd0\xbb\xd0\xb5 \xd0\xb52\xd0\xb3\xd0\xbb\xd0\xb8 \xd0\xb52\xd0\xb3\xd0\xbb\xd0\xbe \xd0\xb5\xd0\xb32\xd0\xbd\xd0\xb0 \xd0\xb5\xd0\xb32\xd0\xbd\xd0\xbe 2\xd0\xb5\xd0\xb32\xd1\x80 \xd0\xb5\xd0\xb41\xd0\xb2\xd0\xbe \xd0\xb5\xd0\xb42\xd0\xb6 \xd0\xb51\xd0\xb4\xd0\xb6\xd0\xb5 \xd0\xb51\xd0\xb42\xd0\xbb\xd0\xb8\xd0\xbd \xd0\xb5\xd0\xb4\xd0\xbd\xd0\xbe\xd1\x833 \xd0\xb5\xd0\xb41\xd0\xbe\xd0\xbf\xd1\x80 \xd0\xb52\xd0\xb4\xd0\xbe\xd1\x82\xd0\xb2 \xd0\xb52\xd0\xb4\xd0\xbe\xd1\x85 \xd0\xb52\xd0\xb41\xd0\xbe\xd1\x89 \xd0\xb51\xd0\xb4\xd1\x80\xd1\x83 \xd0\xb52\xd0\xb4\xd1\x80\xd1\x83_ \xd0\xb52\xd0\xb4\xd1\x832\xd0\xb1 \xd0\xb5\xd0\xb41\xd1\x83\xd0\xb1\xd0\xbe \xd0\xb52\xd0\xb4\xd1\x83\xd0\xb2\xd0\xb5 \xd0\xb52\xd0\xb4\xd1\x83\xd0\xb3 \xd0\xb52\xd0\xb4\xd1\x83\xd1\x81 \xd0\xb5\xd0\xb41\xd1\x83\xd1\x81\xd1\x82 2\xd0\xb53\xd0\xb4\xd1\x83\xd1\x88 \xd0\xb52\xd0\xb4\xd1\x8b\xd0\xbd \xd0\xb51\xd0\xb5 \xd0\xb52\xd0\xb5\xd0\xb2\xd0\xb8\xd0\xb4 \xd0\xb5\xd0\xb52\xd0\xb21\xd1\x80 \xd0\xb5\xd0\xb52\xd0\xb3\xd0\xb8 \xd0\xb5\xd0\xb51\xd1\x812 \xd0\xb5\xd0\xb52\xd1\x81\xd1\x82 \xd0\xb5\xd0\xb5\xd1\x81\xd1\x821\xd1\x80 \xd0\xb5\xd0\xb52\xd1\x85 \xd0\xb52\xd0\xb6\xd0\xb3 \xd0\xb54\xd0\xb6\xd0\xb4\xd0\xb5\xd0\xb2 \xd0\xb5\xd0\xb63\xd0\xb4\xd0\xb8 2\xd0\xb5\xd0\xb6\xd0\xb5 \xd0\xb52\xd0\xb61\xd1\x80 \xd0\xb5\xd0\xb7\xd0\xb02\xd0\xb2\xd1\x80 \xd0\xb5\xd0\xb7\xd0\xb0\xd1\x833 \xd0\xb51\xd0\xb72\xd0\xb2\xd0\xb0 \xd0\xb5\xd0\xb7\xd0\xb41\xd1\x80 \xd0\xb53\xd0\xb7\xd0\xb5 \xd0\xb5\xd0\xb7\xd0\xb7\xd1\x833 \xd0\xb53\xd0\xb7\xd0\xb8\xd1\x82 \xd0\xb5\xd0\xb71\xd0\xbe\xd0\xb1 \xd0\xb5\xd0\xb71\xd0\xbe2\xd0\xb3 \xd0\xb51\xd0\xb7\xd0\xbe\xd0\xbc \xd0\xb5\xd0\xb71\xd0\xbe\xd0\xbf \xd0\xb5\xd0\xb71\xd0\xbe2\xd1\x80 \xd0\xb5\xd0\xb71\xd0\xbe\xd1\x82 \xd0\xb5\xd0\xb71\xd0\xbe\xd1\x88 \xd0\xb5\xd0\xb72\xd1\x80\xd1\x8f \xd0\xb5\xd0\xb71\xd1\x832\xd0\xb4 \xd0\xb5\xd0\xb71\xd1\x832\xd0\xba \xd0\xb5\xd0\xb71\xd1\x83\xd0\xbf \xd0\xb5\xd0\xb71\xd1\x83\xd1\x81 \xd0\xb5\xd0\xb7\xd1\x832\xd1\x81\xd0\xbe \xd0\xb5\xd0\xb7\xd1\x832\xd1\x81\xd1\x8b \xd0\xb5\xd0\xb71\xd1\x832\xd1\x85 \xd0\xb5\xd0\xb71\xd1\x83\xd1\x87\xd0\xb0 \xd0\xb53\xd0\xb7\xd1\x8f \xd0\xb51\xd0\xb8 \xd0\xb5\xd0\xb82\xd0\xb31 \xd0\xb5\xd0\xb82\xd0\xb4 \xd0\xb5\xd0\xb82\xd0\xbc \xd0\xb5\xd0\xb82\xd0\xbe \xd0\xb5\xd0\xb8\xd1\x811\xd0\xbb \xd0\xb5\xd0\xb8\xd1\x811\xd1\x82\xd1\x80 \xd0\xb51\xd0\xba\xd0\xb0 \xd0\xb5\xd0\xba\xd0\xb02\xd0\xb1 \xd0\xb5\xd0\xba2\xd0\xb7 \xd0\xb51\xd0\xba\xd0\xb8 2\xd0\xb51\xd0\xba\xd0\xbe 2\xd0\xb51\xd0\xba\xd1\x80 \xd0\xb5\xd0\xba2\xd1\x80\xd0\xbe \xd0\xb5\xd0\xba1\xd1\x81\xd0\xba \xd0\xb5\xd0\xba1\xd1\x81\xd1\x82\xd0\xb5 \xd0\xb51\xd0\xba\xd1\x83 \xd0\xb51\xd0\xbb\xd0\xb0 \xd0\xb51\xd0\xbb\xd0\xb5 \xd0\xb5\xd0\xbb\xd0\xb53\xd1\x81\xd0\xba \xd0\xb5\xd0\xbb\xd0\xb51\xd1\x81\xd1\x86 \xd0\xb51\xd0\xbb\xd1\x83 \xd0\xb51\xd0\xbb\xd1\x8b \xd0\xb51\xd0\xbb\xd1\x8e \xd0\xb53\xd0\xbb\xd1\x8f \xd0\xb5\xd0\xbc\xd0\xb83\xd0\xb42 \xd0\xb5\xd0\xbc\xd0\xb83\xd0\xba \xd0\xb5\xd0\xbc\xd0\xbe1\xd1\x81 2\xd0\xb5\xd0\xbc\xd1\x83\xd0\xb6 \xd0\xb52\xd0\xbc\xd1\x87 2\xd0\xb5\xd0\xbc\xd1\x8b\xd1\x81 \xd0\xb53\xd0\xbd\xd0\xb0 \xd0\xb5\xd0\xbd2\xd0\xb41\xd1\x80 2\xd0\xb51\xd0\xbd\xd1\x80 \xd0\xb5\xd0\xbd\xd1\x812 \xd0\xb5\xd0\xbd3\xd1\x882 \xd0\xb51\xd0\xbd\xd1\x8d 2\xd0\xb5\xd0\xbe \xd0\xb51\xd0\xbe2\xd0\xb1 \xd0\xb5\xd0\xbe\xd0\xb12\xd1\x80\xd0\xbe \xd0\xb52\xd0\xbe3\xd0\xb3\xd0\xbb \xd0\xb5\xd0\xbe2\xd0\xb3\xd1\x80\xd0\xbe \xd0\xb51\xd0\xbe\xd0\xb4 \xd0\xb5\xd0\xbe3\xd0\xb4\xd0\xb0 \xd0\xb5\xd0\xbe2\xd0\xb4\xd0\xb5 \xd0\xb5\xd0\xbe\xd0\xb4\xd0\xb53\xd0\xb7 \xd0\xb5\xd0\xbe2\xd0\xb4\xd0\xbe \xd0\xb51\xd0\xbe2\xd0\xb6 \xd0\xb52\xd0\xbe\xd0\xb8 \xd0\xb5\xd0\xbe3\xd0\xba\xd0\xbb \xd0\xb51\xd0\xbe\xd0\xbb_ \xd0\xb51\xd0\xbe\xd0\xbb\xd0\xb0 \xd0\xb5\xd0\xbe3\xd0\xbb\xd0\xb8 \xd0\xb51\xd0\xbe\xd0\xbb\xd0\xba \xd0\xb51\xd0\xbe\xd0\xbb\xd1\x8b \xd0\xb51\xd0\xbe\xd0\xbb\xd1\x8c \xd0\xb52\xd0\xbe\xd0\xbc \xd0\xb51\xd0\xbe\xd0\xbd_ \xd0\xb52\xd0\xbe\xd0\xbd\xd0\xb0 \xd0\xb52\xd0\xbe\xd0\xbd\xd0\xb8 \xd0\xb5\xd0\xbe3\xd0\xbd\xd0\xbe \xd0\xb51\xd0\xbe\xd0\xbd\xd1\x81 \xd0\xb5\xd0\xbe\xd0\xbf2 \xd0\xb51\xd0\xbe\xd0\xbf\xd0\xb5 \xd0\xb5\xd0\xbe2\xd0\xbf\xd1\x80 \xd0\xb5\xd0\xbe4\xd0\xbf\xd1\x83 \xd0\xb52\xd0\xbe3\xd1\x80\xd0\xbe \xd0\xb5\xd0\xbe\xd1\x812 \xd0\xb51\xd0\xbe2\xd1\x81\xd0\xb2\xd0\xb8 \xd0\xb5\xd0\xbe1\xd1\x81\xd0\xba \xd0\xb51\xd0\xbe\xd1\x81\xd0\xbc \xd0\xb51\xd0\xbe\xd1\x81\xd0\xbd \xd0\xb5\xd0\xbe\xd1\x81\xd1\x821\xd1\x80 \xd0\xb5\xd0\xbe3\xd1\x81\xd1\x85 \xd0\xb51\xd0\xbe\xd1\x82\xd0\xbb \xd0\xb5\xd0\xbe\xd1\x822\xd1\x80\xd1\x83 \xd0\xb51\xd0\xbe2\xd1\x87 \xd0\xb51\xd0\xbe2\xd1\x89 \xd0\xb5\xd0\xbf\xd0\xb0\xd1\x822 \xd0\xb5\xd0\xbf\xd0\xb01\xd1\x82\xd1\x80 2\xd0\xb5\xd0\xbf\xd0\xb5 \xd0\xb5\xd0\xbf\xd0\xb8\xd1\x812\xd0\xba \xd0\xb52\xd0\xbf\xd0\xbb \xd0\xb53\xd0\xbf\xd0\xbb\xd0\xb0 \xd0\xb5\xd0\xbf1\xd0\xbb\xd0\xb5\xd1\x88 \xd0\xb53\xd0\xbf2\xd0\xbb\xd0\xbe\xd0\xb4 \xd0\xb5\xd0\xbf1\xd0\xbb\xd1\x83 \xd0\xb53\xd0\xbf\xd0\xbb\xd1\x8b \xd0\xb5\xd0\xbf1\xd0\xbb\xd1\x8e\xd1\x89 \xd0\xb54\xd0\xbf\xd0\xbd 2\xd0\xb5\xd0\xbf\xd0\xbe \xd0\xb54\xd0\xbf3\xd1\x81 \xd0\xb54\xd0\xbf\xd1\x82 \xd0\xb51\xd1\x80\xd0\xb0 \xd0\xb5\xd1\x801\xd0\xb0\xd0\xba\xd1\x82 \xd0\xb52\xd1\x80\xd0\xb2 \xd0\xb5\xd1\x801\xd0\xb2\xd0\xb5 \xd0\xb51\xd1\x80\xd0\xb5 \xd0\xb53\xd1\x80\xd0\xb5_ \xd0\xb5\xd1\x80\xd0\xb53\xd0\xb4\xd0\xbe \xd0\xb5\xd1\x80\xd0\xb51\xd0\xb4\xd1\x80 \xd0\xb5\xd1\x80\xd0\xb51\xd0\xba2 \xd0\xb5\xd1\x80\xd0\xb53\xd0\xbc2\xd0\xbd \xd0\xb5\xd1\x80\xd0\xb53\xd0\xbf \xd0\xb5\xd1\x80\xd0\xb51\xd1\x854 \xd0\xb51\xd1\x80\xd0\xb8 \xd0\xb5\xd1\x80\xd0\xb8\xd0\xbe3\xd0\xb7 \xd0\xb51\xd1\x80\xd0\xbe \xd0\xb5\xd1\x80\xd0\xbe2\xd0\xb1 \xd0\xb5\xd1\x801\xd0\xbe\xd0\xb1\xd0\xbb 2\xd0\xb5\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb8 2\xd0\xb5\xd1\x80\xd0\xbe\xd0\xba\xd1\x80 2\xd0\xb5\xd1\x80\xd0\xbe\xd0\xbb \xd0\xb5\xd1\x80\xd0\xbe3\xd1\x842 \xd0\xb5\xd1\x803\xd1\x81\xd0\xba \xd0\xb51\xd1\x80\xd1\x83 \xd0\xb52\xd1\x801\xd1\x832\xd0\xbf \xd0\xb51\xd1\x80\xd1\x8b \xd0\xb51\xd1\x80\xd1\x8e \xd0\xb51\xd1\x80\xd1\x8f \xd0\xb53\xd1\x812\xd0\xb0 \xd0\xb5\xd1\x812\xd0\xb1\xd0\xb0 \xd0\xb51\xd1\x81\xd0\xb3 \xd0\xb51\xd1\x81\xd0\xba \xd0\xb52\xd1\x811\xd0\xba\xd0\xb0_ \xd0\xb5\xd1\x811\xd0\xba\xd0\xb0\xd0\xbb \xd0\xb52\xd1\x81\xd0\xba\xd0\xb5 \xd0\xb52\xd1\x81\xd0\xba\xd0\xbe\xd0\xb2 \xd0\xb54\xd1\x811\xd0\xba\xd1\x83_ 2\xd0\xb5\xd1\x81\xd0\xbb \xd0\xb5\xd1\x811\xd0\xbb\xd0\xb0\xd1\x81 \xd0\xb5\xd1\x812\xd0\xbb\xd0\xb8\xd0\xbd \xd0\xb5\xd1\x812\xd0\xbb\xd0\xbe\xd0\xb2 \xd0\xb5\xd1\x812\xd0\xbb\xd0\xbe\xd0\xbc \xd0\xb51\xd1\x81\xd0\xbb\xd1\x83 \xd0\xb51\xd1\x81\xd0\xbb\xd1\x8b \xd0\xb51\xd1\x814\xd0\xbc \xd0\xb53\xd1\x81\xd0\xbe 2\xd0\xb5\xd1\x81\xd0\xbf \xd0\xb5\xd1\x812\xd0\xbf\xd0\xb5\xd0\xba \xd0\xb5\xd1\x813\xd0\xbf\xd0\xbe\xd0\xbb \xd0\xb52\xd1\x81\xd0\xbf\xd1\x83 \xd0\xb51\xd1\x81\xd1\x82 \xd0\xb5\xd1\x812\xd1\x82\xd0\xb0\xd0\xbd \xd0\xb52\xd1\x81\xd1\x82\xd0\xbb \xd0\xb53\xd1\x81\xd1\x82\xd1\x83 \xd0\xb5\xd1\x812\xd1\x87\xd0\xb5\xd1\x82 \xd0\xb51\xd1\x82\xd0\xb0 \xd0\xb5\xd1\x821\xd0\xb2\xd0\xb5 \xd0\xb5\xd1\x821\xd0\xb2\xd0\xb8 \xd0\xb51\xd1\x82\xd0\xb2\xd0\xbe 2\xd0\xb5\xd1\x82\xd0\xb5\xd1\x87 \xd0\xb51\xd1\x82\xd0\xb8 \xd0\xb51\xd1\x82\xd0\xbe \xd0\xb5\xd1\x82\xd0\xbe1\xd1\x81 \xd0\xb5\xd1\x821\xd1\x80 \xd0\xb5\xd1\x822\xd1\x80\xd1\x8f \xd0\xb51\xd1\x82\xd1\x83 \xd0\xb51\xd1\x82\xd1\x8b \xd0\xb51\xd1\x82\xd1\x8c\xd0\xb5 \xd0\xb53\xd1\x82\xd1\x8c\xd1\x8e \xd0\xb53\xd1\x82\xd1\x8c\xd1\x8f \xd0\xb51\xd1\x82\xd1\x8e \xd0\xb51\xd1\x82\xd1\x8f \xd0\xb51\xd1\x832 2\xd0\xb5\xd1\x83\xd0\xb1 \xd0\xb5\xd1\x83\xd0\xb13\xd1\x80 \xd0\xb5\xd1\x83\xd0\xb72 \xd0\xb5\xd1\x83\xd0\xba2\xd0\xbb\xd0\xbe \xd0\xb5\xd1\x84\xd0\xb83\xd0\xb12 \xd0\xb5\xd1\x842\xd0\xbb \xd0\xb5\xd1\x841\xd1\x80\xd0\xb5 \xd0\xb5\xd1\x85\xd0\xb02\xd1\x82 \xd0\xb5\xd1\x851\xd0\xb0\xd1\x82\xd0\xbe \xd0\xb5\xd1\x853\xd0\xb2\xd0\xb0\xd0\xbb \xd0\xb5\xd1\x853\xd0\xbb\xd0\xbe\xd0\xbf \xd0\xb5\xd1\x851\xd0\xbe\xd0\xb1 \xd0\xb5\xd1\x851\xd0\xbe\xd0\xbf\xd0\xbe \xd0\xb5\xd1\x851\xd1\x80\xd0\xb5 \xd0\xb5\xd1\x851\xd1\x80\xd1\x83 \xd0\xb5\xd1\x851\xd1\x832\xd1\x87 2\xd0\xb5\xd1\x86\xd0\xb2 \xd0\xb51\xd1\x87\xd0\xbb \xd0\xb52\xd1\x88\xd0\xbb \xd0\xb5\xd1\x8d2 \xd0\xb5\xd1\x8e2\xd0\xb3 \xd0\xb51\xd1\x8f \xd0\xb5\xd1\x8f2\xd0\xb7 1\xd0\xb6 \xd0\xb6\xd0\xb02\xd0\xb1\xd0\xbb \xd0\xb6\xd0\xb02\xd0\xb1\xd1\x80 \xd0\xb6\xd0\xb01\xd0\xb7 \xd0\xb6\xd0\xb0\xd1\x821\xd0\xb2 2\xd0\xb61\xd0\xb12 2\xd0\xb61\xd0\xb2 \xd0\xb6\xd0\xb32 2\xd0\xb6\xd0\xb3\xd0\xb0 \xd0\xb62\xd0\xb3\xd0\xb8 3\xd0\xb62\xd0\xb3\xd0\xbb \xd0\xb62\xd0\xb3\xd1\x83 2\xd0\xb61\xd0\xb4 \xd0\xb62\xd0\xb4\xd0\xb0\xd0\xba \xd0\xb62\xd0\xb4\xd0\xb0\xd1\x87 3\xd0\xb62\xd0\xb4\xd0\xb5\xd0\xbb 4\xd0\xb6\xd0\xb4\xd0\xb5\xd0\xbc\xd0\xb5 \xd0\xb62\xd0\xb4\xd0\xb5\xd0\xbf \xd0\xb62\xd0\xb4\xd0\xb8 4\xd0\xb62\xd0\xb4\xd0\xbb \xd0\xb6\xd0\xb4\xd0\xbe3 \xd0\xb6\xd0\xb4\xd1\x831 4\xd0\xb6\xd0\xb4\xd1\x8c 3\xd0\xb62\xd0\xb4\xd1\x8f 3\xd0\xb6\xd0\xb5\xd0\xb2 \xd0\xb6\xd0\xb53\xd0\xb42 \xd0\xb6\xd0\xb51\xd0\xba2\xd0\xb2 \xd0\xb6\xd0\xb51\xd0\xba\xd0\xbb \xd0\xb6\xd0\xb51\xd0\xbe2 \xd0\xb6\xd0\xb53\xd0\xbf2 \xd0\xb6\xd0\xb51\xd1\x812 \xd0\xb6\xd0\xb53\xd1\x81\xd0\xba 2\xd0\xb6\xd0\xb6\xd0\xb0 \xd0\xb62\xd0\xb6\xd0\xb5 2\xd0\xb6\xd0\xb6\xd0\xb5\xd0\xb2 2\xd0\xb61\xd0\xb72 \xd0\xb6\xd0\xb81\xd0\xbe 2\xd0\xb6\xd0\xb8\xd1\x80\xd1\x80 2\xd0\xb61\xd0\xba 2\xd0\xb61\xd0\xbb \xd0\xb62\xd0\xbc \xd0\xb63\xd0\xbc\xd0\xb0 2\xd0\xb63\xd0\xbc\xd0\xbe 2\xd0\xb61\xd0\xbd \xd0\xb6\xd0\xbd\xd0\xbe1 2\xd0\xb61\xd0\xbe\xd0\xb1 2\xd0\xb61\xd0\xbe2\xd1\x821 \xd0\xb6\xd0\xbe\xd1\x833 \xd0\xb6\xd0\xbe\xd1\x831\xd1\x81 2\xd0\xb6\xd0\xbf2 \xd0\xb6\xd0\xbf\xd0\xbe1 \xd0\xb62\xd1\x80\xd1\x83 2\xd0\xb61\xd1\x81 2\xd0\xb6\xd1\x84 2\xd0\xb6\xd1\x86 2\xd0\xb61\xd1\x87 2\xd0\xb6\xd1\x8a 2\xd0\xb6\xd1\x8c_ 2\xd0\xb6\xd1\x8c\xd1\x81 2\xd0\xb6\xd1\x8c\xd1\x82 1\xd0\xb7\xd0\xb01 \xd0\xb7\xd0\xb0\xd0\xb02 \xd0\xb7\xd0\xb0\xd0\xb12 \xd0\xb7\xd0\xb02\xd0\xb21\xd1\x80\xd0\xb8 \xd0\xb7\xd0\xb02\xd0\xb2\xd1\x80\xd1\x83 \xd0\xb71\xd0\xb0\xd0\xb2\xd1\x83 \xd0\xb7\xd0\xb0\xd0\xb34 \xd0\xb71\xd0\xb0\xd0\xb4\xd1\x80 \xd0\xb7\xd0\xb0\xd0\xb52\xd0\xb4 \xd0\xb7\xd0\xb0\xd0\xb52\xd1\x85 \xd0\xb7\xd0\xb03\xd0\xb62\xd0\xb4 \xd0\xb7\xd0\xb03\xd0\xb72 \xd0\xb71\xd0\xb0\xd0\xba\xd1\x82 \xd0\xb7\xd0\xb03\xd0\xbc\xd0\xbd\xd0\xb5 3\xd0\xb72\xd0\xb0\xd0\xbd \xd0\xb7\xd0\xb03\xd0\xbd\xd0\xb0 \xd0\xb7\xd0\xb0\xd0\xbd\xd1\x812 \xd0\xb7\xd0\xb0\xd0\xbf2 \xd0\xb7\xd0\xb0\xd1\x802\xd0\xb2 \xd0\xb7\xd0\xb03\xd1\x802\xd0\xb4 \xd0\xb7\xd0\xb0\xd1\x802\xd0\xb6 \xd0\xb7\xd0\xb0\xd1\x812 \xd0\xb7\xd0\xb0\xd1\x81\xd1\x822 \xd0\xb7\xd0\xb0\xd1\x822 \xd0\xb7\xd0\xb03\xd1\x82\xd0\xba \xd0\xb7\xd0\xb0\xd1\x832 \xd0\xb7\xd0\xb0\xd1\x852 \xd0\xb7\xd0\xb0\xd1\x872\xd1\x82 \xd0\xb7\xd0\xb03\xd1\x882 \xd0\xb7\xd0\xb0\xd1\x8f2 \xd0\xb71\xd0\xb12 2\xd0\xb73\xd0\xb2\xd0\xb0_ \xd0\xb72\xd0\xb2\xd0\xb0\xd0\xb2 \xd0\xb73\xd0\xb2\xd0\xb0\xd0\xbb\xd1\x8c \xd0\xb72\xd0\xb2\xd0\xb0\xd0\xbd 2\xd0\xb7\xd0\xb2\xd0\xb0\xd1\x8f \xd0\xb71\xd0\xb2\xd0\xb5 \xd0\xb72\xd0\xb2\xd0\xb5\xd0\xb7 \xd0\xb71\xd0\xb2\xd0\xb8 \xd0\xb73\xd0\xb22\xd0\xba \xd0\xb71\xd0\xb2\xd0\xbb\xd0\xb0 \xd0\xb71\xd0\xb2\xd0\xbe 2\xd0\xb7\xd0\xb2\xd0\xbe\xd0\xbb 1\xd0\xb72\xd0\xb2\xd0\xbe\xd0\xbd \xd0\xb71\xd0\xb2\xd1\x80 1\xd0\xb7\xd0\xb2\xd1\x83 2\xd0\xb71\xd0\xb2\xd1\x83\xd1\x8e \xd0\xb71\xd0\xb2\xd1\x8c 2\xd0\xb7\xd0\xb3 \xd0\xb73\xd0\xb3\xd0\xb0 \xd0\xb72\xd0\xb3\xd0\xbb\xd0\xb8 \xd0\xb7\xd0\xb32\xd0\xbd\xd0\xb0 \xd0\xb72\xd0\xb3\xd0\xbd\xd1\x83 \xd0\xb71\xd0\xb42\xd0\xb2 \xd0\xb72\xd0\xb4\xd0\xb5\xd1\x88 \xd0\xb7\xd0\xb4\xd0\xbe\xd0\xb63 1\xd0\xb7\xd0\xb5 \xd0\xb7\xd0\xb52\xd0\xb11 \xd0\xb7\xd0\xb52\xd0\xb5\xd0\xb2 \xd0\xb7\xd0\xb52\xd0\xbe\xd0\xb4 2\xd0\xb7\xd0\xb62 \xd0\xb73\xd0\xb72 1\xd0\xb7\xd0\xb8 3\xd0\xb7\xd0\xb8_ 3\xd0\xb7\xd0\xb8\xd0\xb9_ \xd0\xb71\xd0\xb8\xd0\xbd\xd1\x82 \xd0\xb7\xd0\xb82\xd0\xbe\xd0\xb7 \xd0\xb7\xd0\xb82\xd0\xbe\xd0\xbd\xd0\xbe \xd0\xb7\xd0\xb81\xd0\xbe\xd0\xbf 3\xd0\xb7\xd0\xb8\xd1\x81 \xd0\xb7\xd0\xb83\xd1\x822\xd1\x80 \xd0\xb7\xd0\xb8\xd1\x833\xd0\xbc 3\xd0\xb7\xd0\xb8\xd1\x87 2\xd0\xb71\xd0\xba \xd0\xb7\xd0\xba\xd0\xbe1 \xd0\xb7\xd0\xba\xd0\xbe3\xd0\xbf2 \xd0\xb71\xd0\xbb \xd0\xb72\xd0\xbb\xd0\xb0\xd1\x89 \xd0\xb72\xd0\xbb\xd0\xbe\xd0\xb1 \xd0\xb72\xd0\xbb\xd0\xbe\xd0\xbf \xd0\xb72\xd0\xbb\xd0\xbe\xd1\x80 \xd0\xb72\xd0\xbb\xd1\x8e\xd1\x89 2\xd0\xb7\xd0\xbc2 \xd0\xb73\xd0\xbc\xd0\xbd \xd0\xb71\xd0\xbd 2\xd0\xb7\xd0\xbd\xd0\xb0_ \xd0\xb72\xd0\xbd\xd0\xb0\xd0\xb2 \xd0\xb72\xd0\xbd\xd0\xb0\xd0\xb5 \xd0\xb72\xd0\xbd\xd0\xb0\xd0\xb9 \xd0\xb72\xd0\xbd\xd0\xb0\xd0\xba \xd0\xb72\xd0\xbd\xd0\xb0\xd0\xbd \xd0\xb72\xd0\xbd\xd0\xb0\xd1\x82 \xd0\xb72\xd0\xbd\xd0\xb0\xd1\x8e 2\xd0\xb7\xd0\xbd\xd0\xb0\xd1\x8f 2\xd0\xb7\xd0\xbd\xd0\xb5 2\xd0\xb73\xd0\xbd\xd0\xb8 2\xd0\xb7\xd0\xbd\xd0\xbe 2\xd0\xb7\xd0\xbd\xd1\x83 2\xd0\xb73\xd0\xbd\xd1\x8b \xd0\xb72\xd0\xbe\xd0\xb1\xd0\xb5 \xd0\xb7\xd0\xbe2\xd0\xb1\xd0\xb8 1\xd0\xb7\xd0\xbe\xd0\xb2 \xd0\xb7\xd0\xbe3\xd0\xb22\xd0\xbc \xd0\xb7\xd0\xbe2\xd0\xb3\xd0\xbb \xd0\xb7\xd0\xbe1\xd0\xb4\xd1\x80 1\xd0\xb7\xd0\xbe\xd0\xb5 \xd0\xb7\xd0\xbe1\xd0\xb72 1\xd0\xb7\xd0\xbe\xd0\xb8 1\xd0\xb7\xd0\xbe\xd0\xb9_ 1\xd0\xb7\xd0\xbe\xd0\xba_ \xd0\xb71\xd0\xbe\xd0\xba\xd1\x81 1\xd0\xb7\xd0\xbe\xd0\xbb2 \xd0\xb7\xd0\xbe1\xd0\xbb\xd0\xb3 \xd0\xb7\xd0\xbe1\xd0\xbb\xd0\xb6 \xd0\xb7\xd0\xbe3\xd0\xbc2 1\xd0\xb7\xd0\xbe\xd0\xbc_ 2\xd0\xb7\xd0\xbe\xd0\xbc\xd0\xbd 1\xd0\xb7\xd0\xbe\xd0\xbd 2\xd0\xb7\xd0\xbe\xd0\xbd\xd1\x80 1\xd0\xb7\xd0\xbe\xd0\xbe \xd0\xb7\xd0\xbe2\xd0\xbe3\xd0\xbf \xd0\xb7\xd0\xbe2\xd0\xbe\xd1\x81 \xd0\xb7\xd0\xbe2\xd0\xbf\xd0\xb0 \xd0\xb72\xd0\xbe\xd0\xbf\xd0\xbb \xd0\xb72\xd0\xbe\xd0\xbf\xd1\x80 \xd0\xb71\xd0\xbe\xd1\x80\xd0\xb3 1\xd0\xb72\xd0\xbe3\xd1\x80\xd0\xb5 \xd0\xb7\xd0\xbe\xd1\x812 \xd0\xb71\xd0\xbe\xd1\x81\xd0\xbd \xd0\xb7\xd0\xbe1\xd1\x81\xd0\xbf \xd0\xb7\xd0\xbe2\xd1\x82\xd0\xb2 \xd0\xb72\xd0\xbe\xd1\x82\xd0\xb5 \xd0\xb71\xd0\xbe\xd1\x82\xd0\xba \xd0\xb72\xd0\xbe\xd1\x82\xd0\xbe \xd0\xb7\xd0\xbe\xd1\x822\xd1\x80\xd0\xb5 \xd0\xb7\xd0\xbe\xd1\x822\xd1\x80\xd0\xb8 1\xd0\xb7\xd0\xbe\xd1\x85 \xd0\xb7\xd0\xbe\xd1\x882 \xd0\xb7\xd0\xbe2\xd1\x88\xd0\xb8 1\xd0\xb7\xd0\xbe\xd1\x8d 1\xd0\xb7\xd0\xbe\xd1\x8e \xd0\xb71\xd1\x80\xd0\xb0 \xd0\xb72\xd1\x80\xd0\xb0\xd0\xba \xd0\xb7\xd1\x80\xd0\xb02\xd1\x81 \xd0\xb72\xd1\x80\xd0\xb0\xd1\x87 \xd0\xb72\xd1\x80\xd0\xb5\xd0\xbd \xd0\xb71\xd1\x80\xd0\xb5\xd1\x81 \xd0\xb72\xd1\x80\xd0\xb8\xd1\x88 \xd0\xb71\xd1\x80\xd0\xbe \xd0\xb7\xd1\x80\xd0\xbe2\xd1\x813 \xd0\xb71\xd1\x80\xd1\x83 \xd0\xb72\xd1\x80\xd1\x8e \xd0\xb71\xd1\x80\xd1\x8f 2\xd0\xb71\xd1\x81 2\xd0\xb7\xd1\x82 \xd0\xb71\xd1\x82\xd0\xb8 1\xd0\xb7\xd1\x83 3\xd0\xb7\xd1\x83_ 2\xd0\xb71\xd1\x832\xd0\xb1\xd0\xb5 \xd0\xb7\xd1\x832\xd0\xb13\xd1\x80 \xd0\xb7\xd1\x831\xd0\xb2 2\xd0\xb7\xd1\x83\xd0\xb2\xd0\xb5 2\xd0\xb7\xd1\x832\xd0\xb3 3\xd0\xb7\xd1\x83\xd0\xb5 2\xd0\xb71\xd1\x83\xd0\xb73 2\xd0\xb7\xd1\x831\xd0\xba 3\xd0\xb7\xd1\x83\xd0\xbc\xd0\xb5 \xd0\xb71\xd1\x832\xd0\xbc\xd0\xbe 2\xd0\xb7\xd1\x83\xd0\xbf \xd0\xb7\xd1\x832\xd0\xbf\xd1\x80 \xd0\xb71\xd1\x83\xd1\x80\xd0\xb1 \xd0\xb71\xd1\x832\xd1\x82\xd0\xb5 \xd0\xb7\xd1\x832\xd1\x87\xd0\xb0\xd1\x81 2\xd0\xb7\xd1\x86 \xd0\xb71\xd1\x87 2\xd0\xb7\xd1\x88 \xd0\xb7\xd1\x8a\xd0\xb52\xd0\xbc 1\xd0\xb7\xd1\x8b 2\xd0\xb7\xd1\x8b2\xd0\xb31 \xd0\xb7\xd1\x8b2\xd0\xb7 2\xd0\xb7\xd1\x8b\xd0\xbc\xd0\xb5 2\xd0\xb7\xd1\x8b\xd0\xbc\xd1\x87 2\xd0\xb7\xd1\x8b2\xd1\x811 2\xd0\xb7\xd1\x8b\xd1\x89 1\xd0\xb7\xd1\x8c\xd0\xb5 1\xd0\xb7\xd1\x8c\xd0\xb8 1\xd0\xb7\xd1\x8c\xd1\x8e 3\xd0\xb7\xd1\x8c\xd1\x8f 1\xd0\xb72\xd1\x8e 1\xd0\xb7\xd1\x8f \xd0\xb81\xd0\xb0 \xd0\xb82\xd0\xb0\xd0\xb1 \xd0\xb82\xd0\xb0\xd0\xb2 \xd0\xb8\xd0\xb0\xd0\xb32 \xd0\xb82\xd0\xb0\xd0\xb3\xd1\x80 \xd0\xb82\xd0\xb0\xd0\xb4\xd0\xb5 \xd0\xb82\xd0\xb0\xd0\xb4\xd0\xb8 \xd0\xb8\xd0\xb02\xd0\xb7\xd0\xbe\xd0\xb2 \xd0\xb8\xd0\xb02\xd0\xbc\xd1\x83 \xd0\xb83\xd0\xb0\xd0\xbd\xd0\xb0 \xd0\xb8\xd0\xb02\xd0\xbd\xd0\xb0\xd0\xbb \xd0\xb8\xd0\xb0\xd0\xbd\xd0\xb42 \xd0\xb8\xd0\xb0\xd0\xbe2 \xd0\xb82\xd0\xb0\xd0\xbf \xd0\xb8\xd0\xb01\xd1\x812\xd0\xba \xd0\xb8\xd0\xb01\xd1\x81\xd1\x82\xd0\xb0 \xd0\xb8\xd0\xb01\xd1\x81\xd1\x82\xd0\xbe \xd0\xb8\xd0\xb0\xd1\x821\xd1\x80\xd0\xbe \xd0\xb83\xd0\xb0\xd1\x82\xd1\x83 \xd0\xb82\xd0\xb0\xd1\x84 \xd0\xb82\xd0\xb01\xd1\x85 \xd0\xb8\xd0\xb02\xd1\x86\xd0\xb5 2\xd0\xb81\xd0\xb1 \xd0\xb82\xd0\xb11\xd1\x80 2\xd0\xb8\xd0\xb2\xd0\xb0\xd0\xb6 2\xd0\xb81\xd0\xb2\xd0\xb5 \xd0\xb82\xd0\xb23\xd0\xb7 \xd0\xb81\xd0\xb2\xd0\xb8 2\xd0\xb81\xd0\xb2\xd0\xbe \xd0\xb81\xd0\xb22\xd1\x80 \xd0\xb83\xd0\xb22\xd1\x81 \xd0\xb81\xd0\xb2\xd1\x83 \xd0\xb8\xd0\xb22\xd1\x85\xd0\xbe 2\xd0\xb8\xd0\xb2\xd1\x8b \xd0\xb8\xd0\xb32\xd0\xb4 \xd0\xb83\xd0\xb3\xd0\xb5 2\xd0\xb8\xd0\xb3\xd0\xbb \xd0\xb82\xd0\xb3\xd0\xbb\xd0\xb5 \xd0\xb82\xd0\xb3\xd0\xbb\xd0\xb8 \xd0\xb82\xd0\xb3\xd0\xbd \xd0\xb8\xd0\xb3\xd0\xbd\xd0\xb83 \xd0\xb8\xd0\xb31\xd1\x80\xd0\xb5\xd0\xbd \xd0\xb8\xd0\xb31\xd1\x80\xd0\xbe \xd0\xb8\xd0\xb31\xd1\x80\xd1\x83 \xd0\xb8\xd0\xb31\xd1\x80\xd1\x8b \xd0\xb82\xd0\xb31\xd1\x80\xd1\x8f \xd0\xb81\xd0\xb4\xd0\xb2 \xd0\xb82\xd0\xb4\xd0\xb5\xd0\xb9 \xd0\xb81\xd0\xb42\xd0\xb6 \xd0\xb8\xd0\xb4\xd0\xb81\xd0\xbe\xd0\xbc \xd0\xb8\xd0\xb4\xd0\xb81\xd0\xbe\xd1\x82 \xd0\xb8\xd0\xb41\xd1\x80 \xd0\xb81\xd0\xb4\xd1\x8c \xd0\xb81\xd0\xb5 \xd0\xb82\xd0\xb5\xd0\xb2\xd0\xbe\xd0\xb4 \xd0\xb8\xd0\xb52\xd0\xb3 \xd0\xb8\xd0\xb52\xd0\xb4 \xd0\xb8\xd0\xb53\xd0\xb4\xd0\xb5 \xd0\xb8\xd0\xb52\xd0\xb7\xd1\x83 \xd0\xb83\xd0\xb5\xd0\xbd\xd0\xb8 \xd0\xb8\xd0\xb51\xd0\xbe2 \xd0\xb8\xd0\xb5\xd0\xbf\xd0\xb81 \xd0\xb8\xd0\xb52\xd1\x80 \xd0\xb83\xd0\xb62\xd0\xb4 \xd0\xb8\xd0\xb71\xd0\xb22 \xd0\xb8\xd0\xb72\xd0\xb3\xd0\xbd\xd0\xb5 1\xd0\xb8\xd0\xb71\xd0\xb4 \xd0\xb8\xd0\xb72\xd0\xbd\xd0\xb0\xd0\xbb \xd0\xb81\xd0\xb7\xd0\xbe \xd0\xb8\xd0\xb7\xd0\xbe2\xd0\xbe \xd0\xb8\xd0\xb71\xd1\x80 \xd0\xb81\xd0\xb8 \xd0\xb8\xd0\xb9\xd1\x812 \xd0\xb81\xd0\xba \xd0\xb83\xd0\xba2\xd0\xb0 \xd0\xb8\xd0\xba\xd0\xb01\xd1\x812 \xd0\xb8\xd0\xba2\xd0\xb2\xd0\xb0 \xd0\xb82\xd0\xba\xd0\xb2\xd0\xb8 \xd0\xb82\xd0\xba\xd0\xbb\xd1\x8f \xd0\xb83\xd0\xba\xd0\xbe \xd0\xb8\xd0\xba1\xd1\x80\xd0\xbe \xd0\xb8\xd0\xba1\xd1\x81\xd0\xba \xd0\xb8\xd0\xba2\xd1\x811\xd1\x82 \xd0\xb83\xd0\xba\xd1\x83 \xd0\xb81\xd0\xbb \xd0\xb82\xd0\xbb1\xd0\xb02\xd1\x86 \xd0\xb8\xd0\xbb\xd0\xbe1\xd1\x81\xd0\xba \xd0\xb8\xd0\xbb\xd0\xbf2 \xd0\xb82\xd0\xbb1\xd1\x832\xd0\xbf \xd0\xb82\xd0\xbb\xd1\x8c \xd0\xb8\xd0\xbb\xd1\x8c\xd1\x822 2\xd0\xb8\xd0\xbc\xd0\xb0 \xd0\xb82\xd0\xbc\xd0\xb5\xd0\xbd\xd0\xbe \xd0\xb82\xd0\xbc\xd0\xb5\xd0\xbd\xd1\x83 2\xd0\xb8\xd0\xbc\xd0\xb5\xd0\xbd\xd1\x8c \xd0\xb83\xd0\xbc\xd0\xb8 \xd0\xb8\xd0\xbc\xd0\xbe\xd0\xb82 \xd0\xb8\xd0\xbc3\xd0\xbf\xd0\xbb \xd0\xb82\xd0\xbc1\xd1\x80 \xd0\xb82\xd0\xbc\xd1\x87 \xd0\xb8\xd0\xbc2\xd1\x87\xd0\xb0 \xd0\xb8\xd0\xbd\xd0\xb42 1\xd0\xb8\xd0\xbd\xd0\xb6 \xd0\xb8\xd0\xbd\xd0\xbe2\xd0\xba3\xd0\xbb \xd0\xb8\xd0\xbd\xd0\xbe3\xd0\xbf2\xd0\xbb \xd0\xb8\xd0\xbd\xd0\xbe1\xd1\x81 \xd0\xb8\xd0\xbd\xd1\x812 1\xd0\xb8\xd0\xbd\xd1\x81\xd0\xbf 1\xd0\xb8\xd0\xbd\xd1\x81\xd1\x82\xd0\xb8 1\xd0\xb8\xd0\xbd\xd1\x81\xd1\x83 1\xd0\xb8\xd0\xbd\xd1\x84 1\xd0\xb8\xd0\xbd\xd1\x8a \xd0\xb81\xd0\xbe\xd0\xb1 \xd0\xb8\xd0\xbe2\xd0\xb1\xd0\xbe \xd0\xb8\xd0\xbe2\xd0\xb2\xd1\x80 \xd0\xb82\xd0\xbe\xd0\xb3 \xd0\xb81\xd0\xbe\xd0\xb4 \xd0\xb8\xd0\xbe2\xd0\xb4\xd0\xb5 \xd0\xb81\xd0\xbe\xd0\xb7 \xd0\xb8\xd0\xbe3\xd0\xb7\xd0\xbe \xd0\xb81\xd0\xbe\xd0\xba\xd1\x81 \xd0\xb81\xd0\xbe\xd0\xbb\xd0\xb5 \xd0\xb81\xd0\xbe\xd0\xbd \xd0\xb83\xd0\xbe\xd0\xbd\xd0\xbe\xd0\xb2 \xd0\xb81\xd0\xbe\xd0\xbf\xd1\x82 \xd0\xb81\xd0\xbe\xd1\x80 \xd0\xb83\xd0\xbe\xd1\x80\xd0\xb0 \xd0\xb8\xd0\xbe1\xd1\x80\xd1\x83 \xd0\xb8\xd0\xbe2\xd1\x81\xd0\xb0 \xd0\xb8\xd0\xbe3\xd1\x81\xd0\xba\xd0\xbb \xd0\xb8\xd0\xbe1\xd1\x812\xd0\xbf \xd0\xb81\xd0\xbe\xd1\x82\xd0\xb0 \xd0\xb8\xd0\xbe2\xd1\x821\xd0\xb2 \xd0\xb81\xd0\xbe\xd1\x82\xd0\xba \xd0\xb81\xd0\xbe\xd1\x82\xd1\x81 \xd0\xb8\xd0\xbe\xd1\x83\xd0\xb32 \xd0\xb8\xd0\xbe2\xd1\x85\xd0\xbe \xd0\xb81\xd0\xbe\xd1\x88 2\xd0\xb8\xd0\xbf \xd0\xb8\xd0\xbf\xd0\xb0\xd1\x822 \xd0\xb8\xd0\xbf\xd0\xb01\xd1\x82\xd1\x80 \xd0\xb8\xd0\xbf2\xd0\xbb\xd1\x8f \xd0\xb8\xd0\xbf3\xd0\xbd \xd0\xb8\xd0\xbf\xd0\xbe3\xd0\xba2 \xd0\xb81\xd1\x80 \xd0\xb8\xd1\x80\xd0\xb02\xd1\x81\xd1\x82 \xd0\xb82\xd1\x801\xd0\xb0\xd1\x83 \xd0\xb82\xd1\x80\xd0\xb2 \xd0\xb82\xd1\x80\xd0\xb6 \xd0\xb8\xd1\x80\xd0\xb82\xd1\x81\xd0\xba \xd0\xb8\xd1\x80\xd0\xb8\xd1\x833 \xd0\xb8\xd1\x80\xd0\xbe1\xd0\xb72 1\xd0\xb8\xd1\x80\xd1\x80 \xd0\xb8\xd1\x81\xd0\xb0\xd0\xbd2\xd0\xb41 \xd0\xb82\xd1\x81\xd0\xb1 \xd0\xb82\xd1\x81\xd0\xb4 \xd0\xb8\xd1\x811\xd0\xba \xd0\xb8\xd1\x813\xd0\xba\xd0\xb0_ \xd0\xb8\xd1\x813\xd0\xba\xd0\xb0\xd0\xbc \xd0\xb8\xd1\x813\xd0\xba\xd0\xb0\xd1\x85 \xd0\xb8\xd1\x813\xd0\xba\xd0\xb5 \xd0\xb8\xd1\x813\xd0\xba\xd0\xb8 \xd0\xb8\xd1\x813\xd0\xba\xd0\xbe\xd0\xb2 \xd0\xb8\xd1\x813\xd0\xba\xd1\x83_ \xd0\xb82\xd1\x81\xd0\xbb\xd0\xb0\xd0\xbc \xd0\xb8\xd1\x811\xd0\xbb\xd1\x8b \xd0\xb8\xd1\x813\xd0\xbc\xd0\xb5 \xd0\xb8\xd1\x813\xd0\xbc\xd1\x83 \xd0\xb8\xd1\x813\xd0\xbd\xd0\xbe \xd0\xb8\xd1\x81\xd0\xbe2\xd1\x81\xd0\xba \xd0\xb82\xd1\x813\xd0\xbf\xd1\x80 \xd0\xb84\xd1\x81\xd1\x81 \xd0\xb81\xd1\x81\xd1\x82 \xd0\xb82\xd1\x81\xd1\x821\xd0\xb2 \xd0\xb82\xd1\x81\xd1\x82\xd0\xbb \xd0\xb8\xd1\x811\xd1\x82\xd1\x8f\xd0\xb7 \xd0\xb81\xd1\x81\xd1\x8c\xd0\xb8 \xd0\xb81\xd1\x82 \xd0\xb8\xd1\x82\xd0\xb02\xd0\xb2 \xd0\xb8\xd1\x823\xd0\xb2\xd0\xb0 \xd0\xb82\xd1\x821\xd0\xb2\xd0\xb5 \xd0\xb8\xd1\x821\xd0\xb2\xd0\xb8 \xd0\xb8\xd1\x821\xd0\xb2\xd1\x83 \xd0\xb82\xd1\x82\xd0\xbc \xd0\xb82\xd1\x821\xd1\x80 \xd0\xb8\xd1\x822\xd1\x80\xd0\xb5\xd1\x81 \xd0\xb8\xd1\x823\xd1\x80\xd0\xbe\xd0\xbc \xd0\xb82\xd1\x821\xd1\x83\xd1\x87 \xd0\xb83\xd1\x82\xd1\x8c\xd1\x8e \xd0\xb83\xd1\x82\xd1\x8c\xd1\x8f \xd0\xb81\xd1\x832 \xd0\xb8\xd1\x833\xd0\xbf \xd0\xb8\xd1\x841\xd0\xbb \xd0\xb8\xd1\x842\xd0\xbb\xd1\x8e \xd0\xb82\xd1\x84\xd1\x80 \xd0\xb8\xd1\x85\xd0\xb03\xd0\xb4 \xd0\xb82\xd1\x851\xd0\xb0\xd1\x81 \xd0\xb8\xd1\x852\xd0\xbb\xd0\xbe2 \xd0\xb8\xd1\x85\xd0\xbb\xd0\xbe\xd1\x801 \xd0\xb83\xd1\x852\xd0\xbe \xd0\xb8\xd1\x85\xd0\xbe3\xd0\xba \xd0\xb8\xd1\x851\xd1\x80\xd0\xb5 \xd0\xb8\xd1\x851\xd1\x80\xd0\xb8 \xd0\xb81\xd1\x85\xd1\x83 \xd0\xb81\xd1\x87 \xd0\xb8\xd1\x882\xd0\xbb\xd0\xb8 \xd0\xb82\xd1\x88\xd0\xbb\xd1\x8b \xd0\xb82\xd1\x88\xd1\x82 \xd0\xb8\xd1\x8e4\xd0\xbb \xd0\xb8\xd1\x8e2\xd0\xbd \xd0\xb8\xd1\x8e2\xd1\x82 \xd0\xb8\xd1\x8e3\xd1\x82\xd0\xb0 \xd0\xb81\xd1\x8f \xd0\xb8\xd1\x8f2\xd0\xb4 2\xd0\xb91 \xd0\xb9\xd0\xb42 \xd0\xb92\xd0\xb43\xd0\xb2 \xd0\xb9\xd0\xbd\xd0\xbe1 \xd0\xb92\xd0\xbe1\xd1\x81 \xd0\xb9\xd0\xbe2\xd1\x82\xd1\x80 \xd0\xb9\xd0\xbf2\xd0\xbb \xd0\xb92\xd1\x81\xd0\xb1 \xd0\xb93\xd1\x81\xd0\xba\xd0\xb0 \xd0\xb9\xd1\x812\xd0\xba\xd0\xb5 \xd0\xb9\xd1\x814\xd0\xbc\xd0\xbe \xd0\xb92\xd1\x813\xd0\xbc\xd1\x83 \xd0\xb92\xd1\x81\xd0\xbd \xd0\xb92\xd1\x813\xd1\x84 \xd0\xb92\xd1\x81\xd1\x88 \xd0\xb92\xd1\x82\xd0\xbc \xd0\xb92\xd1\x85\xd0\xbc \xd0\xb9\xd1\x852\xd1\x813 \xd0\xb9\xd1\x8f1 \xd0\xba\xd0\xb02\xd0\xb1\xd0\xbb \xd0\xba\xd0\xb02\xd0\xb1\xd1\x80\xd0\xb8 1\xd0\xba\xd0\xb0\xd0\xb2 \xd0\xba2\xd0\xb0\xd0\xb4 \xd0\xba\xd0\xb03\xd0\xb4\xd0\xbd\xd0\xb5 \xd0\xba\xd0\xb02\xd0\xb41\xd1\x80 1\xd0\xba\xd0\xb0\xd0\xb5 \xd0\xba\xd0\xb0\xd0\xb73\xd0\xbd \xd0\xba\xd0\xb01\xd0\xb7\xd0\xbe 1\xd0\xba\xd0\xb0\xd0\xb9 1\xd0\xba\xd0\xb0\xd0\xbb_ 1\xd0\xba\xd0\xb0\xd0\xbb\xd0\xbe 1\xd0\xba\xd0\xb0\xd0\xbb\xd1\x81 1\xd0\xba\xd0\xb0\xd0\xbc 1\xd0\xba\xd0\xb0\xd0\xbd \xd0\xba\xd0\xb02\xd0\xbf1\xd0\xbb \xd0\xba\xd0\xb02\xd0\xbf\xd1\x80\xd0\xb5 \xd0\xba\xd0\xb0\xd1\x803\xd1\x82\xd1\x80 3\xd0\xba2\xd0\xb0\xd1\x81 \xd0\xba\xd0\xb01\xd1\x81\xd1\x82 1\xd0\xba\xd0\xb0\xd1\x82 \xd0\xba\xd0\xb01\xd1\x822\xd1\x80 1\xd0\xba\xd0\xb0\xd1\x85 \xd0\xba\xd0\xb02\xd1\x881\xd1\x82 1\xd0\xba\xd0\xb0\xd1\x8e 2\xd0\xba1\xd0\xb1 \xd0\xba2\xd0\xb2\xd0\xb0\xd0\xba \xd0\xba2\xd0\xb2\xd0\xb0\xd1\x81 \xd0\xba2\xd0\xb2\xd0\xb0\xd1\x88 \xd0\xba1\xd0\xb2\xd0\xb8 \xd0\xba2\xd0\xb2\xd0\xbe\xd0\xb7 \xd0\xba1\xd0\xb2\xd1\x83 2\xd0\xba\xd0\xb3 2\xd0\xba1\xd0\xb4 \xd0\xba\xd0\xb4\xd0\xb02 1\xd0\xba\xd0\xb5 2\xd0\xba\xd0\xb5\xd0\xb0 \xd0\xba\xd0\xb52\xd0\xb3\xd0\xbb \xd0\xba\xd0\xb5\xd0\xb41\xd1\x80 \xd0\xba\xd0\xb52\xd1\x811\xd0\xba \xd0\xba\xd0\xb52\xd1\x81\xd1\x821 2\xd0\xba1\xd0\xb7 1\xd0\xba\xd0\xb8\xd0\xb2 \xd0\xba\xd0\xb81\xd0\xbe \xd0\xba\xd0\xb8\xd0\xbe\xd1\x811 \xd0\xba\xd0\xb82\xd0\xbf\xd0\xbb \xd0\xba\xd0\xb81\xd1\x812\xd0\xbd\xd0\xb8 1\xd0\xba\xd0\xb8\xd1\x82 2\xd0\xba1\xd0\xba2 \xd0\xba\xd0\xba3\xd1\x81 2\xd0\xba3\xd0\xbb\xd0\xb0_ 2\xd0\xba3\xd0\xbb\xd0\xb0\xd1\x81\xd1\x8c 2\xd0\xba3\xd0\xbb\xd0\xb5_ 2\xd0\xba\xd0\xbb\xd0\xb5\xd0\xbc \xd0\xba3\xd0\xbb\xd0\xb5\xd0\xbc_ \xd0\xba3\xd0\xbb\xd0\xb5\xd0\xbd \xd0\xba1\xd0\xbb\xd0\xb5\xd0\xbe 2\xd0\xba3\xd0\xbb\xd0\xb8_ 2\xd0\xba3\xd0\xbb\xd0\xb8\xd0\xb2 \xd0\xba2\xd0\xbb\xd0\xb8\xd0\xba \xd0\xba2\xd0\xbb\xd0\xb8\xd0\xbd 2\xd0\xba3\xd0\xbb\xd0\xb8\xd1\x81 \xd0\xba3\xd0\xbb\xd0\xb8\xd1\x8f 2\xd0\xba3\xd0\xbb\xd0\xbe_ \xd0\xba2\xd0\xbb\xd0\xbe\xd0\xb7 \xd0\xba3\xd0\xbb\xd0\xbe\xd0\xbc 2\xd0\xba3\xd0\xbb\xd0\xbe\xd1\x81 \xd0\xba\xd0\xbb\xd0\xbe3\xd1\x82 1\xd0\xba\xd0\xbb\xd1\x83\xd0\xba \xd0\xba3\xd0\xbb\xd1\x8b 2\xd0\xba\xd0\xbb\xd1\x8c 1\xd0\xba\xd0\xbb\xd1\x8e 2\xd0\xba3\xd0\xbb\xd1\x8e_ 2\xd0\xba\xd0\xbb\xd1\x8f_ 2\xd0\xba\xd0\xbb\xd1\x8f\xd0\xbc 2\xd0\xba\xd0\xbb\xd1\x8f\xd1\x85 2\xd0\xba\xd0\xbc 2\xd0\xba1\xd0\xbd 3\xd0\xba2\xd0\xbd\xd0\xb8\xd0\xb6 \xd0\xba2\xd0\xbd\xd0\xbe\xd0\xbf 3\xd0\xba2\xd0\xbd\xd1\x8f\xd0\xb6 \xd0\xba2\xd0\xbe \xd0\xba\xd0\xbe1\xd0\xb12\xd1\x80\xd0\xb8 1\xd0\xba\xd0\xbe\xd0\xb2 3\xd0\xba\xd0\xbe\xd0\xb2\xd0\xb0 1\xd0\xba\xd0\xbe\xd0\xb4 \xd0\xba\xd0\xbe1\xd0\xb4\xd1\x80 1\xd0\xba\xd0\xbe\xd0\xb7 1\xd0\xba\xd0\xbe\xd0\xbb\xd1\x8c\xd1\x81 2\xd0\xba\xd0\xbe\xd0\xbc\xd0\xb8\xd0\xbd 3\xd0\xba\xd0\xbe\xd0\xbd\xd1\x81 \xd0\xba\xd0\xbe\xd0\xbf2\xd1\x80 \xd0\xba\xd0\xbe2\xd1\x803\xd0\xb2 \xd0\xba\xd0\xbe1\xd1\x80\xd1\x83 1\xd0\xba\xd0\xbe\xd1\x81 \xd0\xba\xd0\xbe1\xd1\x81\xd0\xba \xd0\xba\xd0\xbe\xd1\x813\xd0\xbc \xd0\xba\xd0\xbe1\xd1\x81\xd0\xbf 1\xd0\xba\xd0\xbe\xd1\x82\xd0\xbd \xd0\xba\xd0\xbe2\xd1\x84\xd1\x80 \xd0\xba\xd0\xbe\xd1\x85\xd0\xbe2\xd1\x803 1\xd0\xba\xd0\xbe\xd1\x88 2\xd0\xba\xd0\xbf 2\xd0\xba\xd1\x80_ \xd0\xba1\xd1\x80\xd0\xb5\xd0\xbb \xd0\xba\xd1\x80\xd0\xb51\xd0\xbe \xd0\xba\xd1\x80\xd0\xb52\xd1\x81\xd0\xbb \xd0\xba1\xd1\x80\xd0\xb5\xd1\x87 1\xd0\xba\xd1\x80\xd0\xb8\xd0\xb1 \xd0\xba1\xd1\x80\xd0\xb8\xd0\xb4 \xd0\xba2\xd1\x80\xd0\xb8\xd0\xb7 \xd0\xba\xd1\x80\xd0\xb82\xd0\xbe3 \xd0\xba2\xd1\x80\xd0\xb8\xd1\x82 \xd0\xba1\xd1\x80\xd0\xb8\xd1\x85 \xd0\xba1\xd1\x80\xd0\xbe\xd0\xb0 \xd0\xba1\xd1\x80\xd0\xbe\xd0\xb1 \xd0\xba2\xd1\x80\xd0\xbe\xd0\xb5 \xd0\xba1\xd1\x80\xd0\xbe\xd0\xba \xd0\xba1\xd1\x80\xd0\xbe\xd0\xbe \xd0\xba1\xd1\x80\xd0\xbe\xd1\x80 \xd0\xba1\xd1\x80\xd0\xbe\xd1\x81 \xd0\xba1\xd1\x80\xd0\xbe\xd1\x84 \xd0\xba1\xd1\x80\xd0\xbe\xd1\x85 \xd0\xba1\xd1\x80\xd0\xbe\xd1\x8d \xd0\xba\xd1\x80\xd1\x831\xd1\x81 \xd0\xba1\xd1\x80\xd1\x8f\xd0\xb4 2\xd0\xba\xd1\x81 \xd0\xba\xd1\x81\xd0\xb0\xd0\xbd\xd0\xb42 \xd0\xba2\xd1\x813\xd0\xb2 \xd0\xba\xd1\x813\xd0\xb3 \xd0\xba2\xd1\x813\xd0\xb4 \xd0\xba2\xd1\x81\xd0\xb8\xd0\xb1 \xd0\xba1\xd1\x81\xd0\xba\xd0\xb8 \xd0\xba\xd1\x811\xd0\xba\xd0\xbb \xd0\xba1\xd1\x81\xd0\xba\xd0\xbe \xd0\xba\xd1\x813\xd0\xbc \xd0\xba3\xd1\x81\xd0\xbe \xd0\xba1\xd1\x81\xd1\x82\xd0\xb0\xd0\xbc \xd0\xba1\xd1\x81\xd1\x82\xd0\xb0\xd0\xbd \xd0\xba\xd1\x813\xd1\x82\xd0\xb5 \xd0\xba1\xd1\x81\xd1\x82\xd0\xbe \xd0\xba\xd1\x811\xd1\x82\xd1\x80 \xd0\xba1\xd1\x81\xd1\x82\xd1\x83 \xd0\xba3\xd1\x81\xd1\x83 2\xd0\xba1\xd1\x82 \xd0\xba\xd1\x82\xd0\xb02\xd0\xba 3\xd0\xba2\xd1\x82\xd0\xbe_ \xd0\xba\xd1\x82\xd0\xbe1\xd1\x81 \xd0\xba\xd1\x822\xd1\x80 \xd0\xba2\xd1\x83 \xd0\xba\xd1\x831\xd0\xb2\xd0\xb5 3\xd0\xba\xd1\x83\xd0\xb5 1\xd0\xba\xd1\x83\xd0\xb9 1\xd0\xba\xd1\x83\xd0\xbb\xd1\x8f 3\xd0\xba\xd1\x83\xd0\xbc \xd0\xba\xd1\x83\xd0\xbf1\xd0\xbb \xd0\xba\xd1\x832\xd0\xbf1\xd1\x80 1\xd0\xba\xd1\x83\xd1\x80 \xd0\xba\xd1\x833\xd1\x80\xd0\xbe \xd0\xba\xd1\x83\xd1\x811\xd0\xba \xd0\xba\xd1\x831\xd1\x81\xd1\x82 1\xd0\xba\xd1\x83\xd1\x82 \xd0\xba\xd1\x833\xd1\x82\xd1\x8c 1\xd0\xba\xd1\x83\xd1\x87\xd0\xb5 1\xd0\xba\xd1\x83\xd1\x8e\xd1\x82 3\xd0\xba\xd1\x83\xd1\x8e\xd1\x89 2\xd0\xba\xd1\x84 2\xd0\xba1\xd1\x852 2\xd0\xba\xd1\x86 2\xd0\xba1\xd1\x87 2\xd0\xba\xd1\x88 1\xd0\xba\xd1\x8c \xd0\xba2\xd1\x8e 1\xd0\xbb\xd0\xb0_ 2\xd0\xbb\xd0\xb0\xd0\xb1\xd0\xb5 \xd0\xbb\xd0\xb02\xd0\xb1\xd0\xbb 2\xd0\xbb\xd0\xb0\xd0\xb3\xd0\xbe \xd0\xbb\xd0\xb02\xd0\xb3\xd1\x80 \xd0\xbb\xd0\xb02\xd0\xb41\xd0\xb0\xd0\xb3 1\xd0\xbb\xd0\xb0\xd0\xb5 \xd0\xbb\xd0\xb03\xd0\xb62\xd0\xb4 \xd0\xbb\xd0\xb01\xd0\xb7\xd0\xbe \xd0\xbb2\xd0\xb0\xd0\xba \xd0\xbb\xd0\xb0\xd0\xba2\xd1\x80 1\xd0\xbb\xd0\xb0\xd0\xbc_ 1\xd0\xbb\xd0\xb0\xd0\xbc\xd0\xb8_ \xd0\xbb\xd0\xb0\xd0\xbd2\xd0\xb41\xd1\x80 \xd0\xbb\xd0\xb01\xd1\x81\xd1\x82\xd0\xb0 \xd0\xbb\xd0\xb0\xd1\x81\xd1\x821\xd0\xb2 \xd0\xbb\xd0\xb01\xd1\x81\xd1\x82\xd0\xb5 \xd0\xbb\xd0\xb01\xd1\x81\xd1\x82\xd0\xbe \xd0\xbb\xd0\xb02\xd1\x81\xd1\x821\xd1\x80 \xd0\xbb\xd0\xb01\xd1\x81\xd1\x82\xd1\x83 \xd0\xbb\xd0\xb01\xd1\x81\xd1\x82\xd1\x8f \xd0\xbb\xd0\xb01\xd1\x822\xd1\x80 \xd0\xbb\xd0\xb0\xd1\x831 \xd0\xbb\xd0\xb02\xd1\x83\xd1\x81 \xd0\xbb\xd0\xb02\xd1\x84\xd1\x80 1\xd0\xbb\xd0\xb01\xd1\x85 1\xd0\xbb\xd0\xb0\xd1\x8f 2\xd0\xbb\xd0\xb1 \xd0\xbb1\xd0\xb1\xd1\x80 \xd0\xbb1\xd0\xb2\xd0\xb5 \xd0\xbb1\xd0\xb2\xd0\xb8 \xd0\xbb1\xd0\xb2\xd0\xbe \xd0\xbb1\xd0\xb2\xd1\x83 1\xd0\xbb2\xd0\xb3\xd0\xb0\xd0\xbb \xd0\xbb2\xd0\xb3\xd0\xbb \xd0\xbb\xd0\xb3\xd0\xbe1 2\xd0\xbb3\xd0\xb42 1\xd0\xbb\xd0\xb5_ \xd0\xbb\xd0\xb51\xd0\xb2\xd0\xbb \xd0\xbb\xd0\xb5\xd0\xb21\xd1\x80\xd0\xb0 \xd0\xbb\xd0\xb52\xd0\xb31\xd0\xbb \xd0\xbb\xd0\xb51\xd0\xb4\xd0\xb6 \xd0\xbb\xd0\xb53\xd0\xb4\xd0\xbe \xd0\xbb\xd0\xb51\xd0\xb72\xd0\xbe3 \xd0\xbb\xd0\xb51\xd0\xb7\xd1\x80 \xd0\xbb\xd0\xb5\xd0\xba1\xd0\xbb 2\xd0\xbb\xd0\xb5\xd0\xbc\xd0\xbd 1\xd0\xbb\xd0\xb5\xd0\xbd \xd0\xbb\xd0\xb51\xd0\xbe\xd0\xbd\xd1\x82 \xd0\xbb\xd0\xb51\xd0\xbe2\xd1\x81 \xd0\xbb\xd0\xb52\xd1\x81\xd0\xb1 \xd0\xbb\xd0\xb52\xd1\x81\xd0\xba \xd0\xbb\xd0\xb54\xd1\x81\xd0\xba\xd0\xb0 \xd0\xbb\xd0\xb51\xd1\x812\xd0\xbb \xd0\xbb\xd0\xb51\xd1\x81\xd0\xbf\xd0\xb5 \xd0\xbb\xd0\xb51\xd1\x82\xd0\xb2 \xd0\xbb\xd0\xb51\xd1\x822\xd1\x80 1\xd0\xbb\xd0\xb5\xd1\x85 \xd0\xbb\xd0\xb51\xd1\x85\xd1\x80 \xd0\xbb1\xd0\xb7\xd0\xbe 1\xd0\xbb\xd0\xb8 \xd0\xbb\xd0\xb8\xd0\xb02\xd0\xbc 3\xd0\xbb\xd0\xb8\xd0\xb2\xd0\xbe 3\xd0\xbb\xd0\xb8\xd0\xb2\xd1\x8b \xd0\xbb\xd0\xb8\xd0\xb32\xd0\xbb \xd0\xbb\xd0\xb82\xd0\xb3\xd1\x80\xd0\xbe \xd0\xbb\xd0\xb8\xd0\xb53\xd1\x80 \xd0\xbb\xd0\xb82\xd0\xba\xd0\xb2 2\xd0\xbb\xd0\xb8\xd0\xbc\xd0\xbf \xd0\xbb\xd0\xb8\xd0\xbe1\xd1\x81 \xd0\xbb\xd0\xb82\xd0\xbf\xd0\xbb \xd0\xbb\xd0\xb8\xd1\x813\xd0\xbc 2\xd0\xbb1\xd0\xb8\xd1\x81\xd0\xbf \xd0\xbb\xd0\xb82\xd1\x82\xd0\xb2 \xd0\xbb\xd0\xb8\xd1\x833\xd0\xbc \xd0\xbb\xd0\xb82\xd1\x853\xd0\xb2 \xd0\xbb\xd0\xb81\xd1\x85\xd0\xbb \xd0\xbb\xd0\xb81\xd1\x85\xd1\x80 2\xd0\xbb1\xd0\xba \xd0\xbb\xd0\xba2\xd0\xb2 \xd0\xbb2\xd0\xba1\xd0\xbb 2\xd0\xbb1\xd0\xbb \xd0\xbb2\xd0\xbb\xd1\x8c \xd0\xbb\xd0\xbb\xd1\x8e1 2\xd0\xbb\xd0\xbc 2\xd0\xbb1\xd0\xbd \xd0\xbb\xd0\xbd\xd0\xb82\xd0\xb5 1\xd0\xbb\xd0\xbe \xd0\xbb\xd0\xbe2\xd0\xb1\xd0\xbb \xd0\xbb\xd0\xbe1\xd0\xb12\xd1\x80 2\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xb8\xd1\x8f \xd0\xbb\xd0\xbe2\xd0\xb2\xd0\xbb 3\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xbe\xd0\xb4 \xd0\xbb\xd0\xbe2\xd0\xb33\xd0\xb4 \xd0\xbb\xd0\xbe\xd0\xb3\xd0\xbe1\xd1\x81 \xd0\xbb\xd0\xbe1\xd0\xb4\xd1\x80 2\xd0\xbb\xd0\xbe\xd0\xb5\xd0\xbd \xd0\xbb\xd0\xbe1\xd0\xb7\xd0\xb2 \xd0\xbb\xd0\xbe2\xd0\xba1\xd0\xb02\xd1\x83 \xd0\xbb\xd0\xbe2\xd0\xba\xd0\xbb \xd0\xbb\xd0\xbe\xd0\xba3\xd0\xbb\xd0\xb0 3\xd0\xbb\xd0\xbe\xd0\xbf\xd0\xb0\xd1\x81 \xd0\xbb\xd0\xbe2\xd1\x80\xd0\xb2 2\xd0\xbb1\xd0\xbe\xd1\x80\xd0\xb3 \xd0\xbb\xd0\xbe1\xd1\x80\xd1\x83 \xd0\xbb\xd0\xbe\xd1\x811\xd0\xba \xd0\xbb\xd0\xbe1\xd1\x812\xd0\xbf 2\xd0\xbb\xd0\xbe\xd1\x82\xd0\xb4 \xd0\xbb\xd0\xbe\xd1\x822\xd1\x80 \xd0\xbb\xd0\xbe2\xd1\x88\xd0\xbb 2\xd0\xbb\xd0\xbf 2\xd0\xbb1\xd1\x812 \xd0\xbb\xd1\x813\xd0\xb1 \xd0\xbb1\xd1\x82 1\xd0\xbb\xd1\x83_ \xd0\xbb\xd1\x831\xd0\xb1\xd1\x80 \xd0\xbb\xd1\x831\xd0\xb2 \xd0\xbb\xd1\x833\xd0\xb3 \xd0\xbb\xd1\x831\xd0\xb44\xd1\x80 1\xd0\xbb\xd1\x83\xd0\xb5 \xd0\xbb\xd1\x831\xd0\xb7\xd0\xbd \xd0\xbb\xd1\x831\xd0\xba\xd1\x80 1\xd0\xbb\xd1\x83\xd0\xbd \xd0\xbb\xd1\x83\xd0\xbe2\xd0\xb4 \xd0\xbb\xd1\x833\xd0\xbf2\xd0\xbb\xd0\xbe \xd0\xbb\xd1\x831\xd1\x81 \xd0\xbb\xd1\x833\xd1\x82\xd1\x8c 1\xd0\xbb\xd1\x83\xd1\x8e 2\xd0\xbb3\xd1\x842 2\xd0\xbb1\xd1\x852 \xd0\xbb2\xd1\x853\xd0\xb2 2\xd0\xbb\xd1\x86 \xd0\xbb1\xd1\x87 1\xd0\xbb\xd1\x8b_ 1\xd0\xbb\xd1\x8b\xd0\xb5 1\xd0\xbb\xd1\x8b\xd0\xb6 1\xd0\xbb\xd1\x8b\xd0\xb9 1\xd0\xbb\xd1\x8b\xd0\xbc 1\xd0\xbb\xd1\x8b\xd1\x85_ 4\xd0\xbb\xd1\x8c_ 2\xd0\xbb\xd1\x8c\xd0\xb4 3\xd0\xbb\xd1\x8c\xd0\xb5 3\xd0\xbb\xd1\x8c\xd0\xb8 2\xd0\xbb\xd1\x8c\xd0\xba 2\xd0\xbb\xd1\x8c\xd0\xbc 2\xd0\xbb\xd1\x8c\xd0\xbd 3\xd0\xbb\xd1\x8c\xd0\xbe 2\xd0\xbb\xd1\x8c\xd1\x81\xd0\xba 1\xd0\xbb\xd1\x8c\xd1\x81\xd1\x82\xd0\xb8 1\xd0\xbb\xd1\x8c\xd1\x81\xd1\x82\xd1\x8f 2\xd0\xbb\xd1\x8c\xd1\x82 2\xd0\xbb\xd1\x8c\xd1\x86 2\xd0\xbb\xd1\x8c\xd1\x87 1\xd0\xbb\xd1\x8c\xd1\x89\xd0\xb0 1\xd0\xbb\xd1\x8c\xd1\x89\xd0\xb5 1\xd0\xbb\xd1\x8c\xd1\x89\xd1\x83 3\xd0\xbb\xd1\x8c\xd1\x8e 3\xd0\xbb\xd1\x8c\xd1\x8f \xd0\xbb2\xd1\x8e 1\xd0\xbb\xd1\x8e_ 1\xd0\xbb\xd1\x8e\xd0\xb6 1\xd0\xbb\xd1\x8e\xd1\x81\xd1\x8c \xd0\xbb\xd1\x8e1\xd1\x82\xd0\xb0 1\xd0\xbb\xd1\x8f 3\xd0\xbb\xd1\x8f_ \xd0\xbb\xd1\x8f1\xd0\xb2\xd0\xb8 3\xd0\xbb\xd1\x8f\xd0\xb2\xd0\xbe 3\xd0\xbb\xd1\x8f\xd0\xb2\xd1\x8b 2\xd0\xbb\xd1\x8f\xd0\xb4 3\xd0\xbb\xd1\x8f\xd0\xbc \xd0\xbb\xd1\x8f1\xd1\x80\xd0\xb5 \xd0\xbb\xd1\x8f1\xd1\x80\xd1\x83 3\xd0\xbb\xd1\x8f\xd1\x85 1\xd0\xbc \xd0\xbc\xd0\xb02\xd0\xb2\xd0\xb7 3\xd0\xbc\xd0\xb0\xd0\xb3 \xd0\xbc\xd0\xb02\xd0\xb3\xd0\xbd \xd0\xbc\xd0\xb02\xd0\xb4\xd1\x80 \xd0\xbc\xd0\xb02\xd0\xb4\xd1\x8c \xd0\xbc\xd0\xb01\xd0\xb7\xd0\xbe \xd0\xbc\xd0\xb02\xd0\xba1\xd1\x80 2\xd0\xbc1\xd0\xb0\xd0\xbb\xd0\xbb \xd0\xbc\xd0\xb0\xd0\xbd2\xd0\xb41\xd1\x80 \xd0\xbc\xd0\xb0\xd1\x813\xd0\xbb \xd0\xbc\xd0\xb01\xd1\x814\xd1\x82 \xd0\xbc\xd0\xb02\xd1\x82\xd0\xbe\xd0\xb1 \xd0\xbc\xd0\xb02\xd1\x821\xd1\x80 \xd0\xbc\xd0\xb02\xd1\x83 \xd0\xbc\xd0\xb0\xd1\x842 3\xd0\xbc\xd0\xb0\xd1\x87 \xd0\xbc\xd0\xb02\xd1\x87\xd1\x82 4\xd0\xbc1\xd0\xb1 \xd0\xbc3\xd0\xb1\xd0\xb8 \xd0\xbc\xd0\xb12\xd0\xbb \xd0\xbc3\xd0\xb1\xd0\xbb\xd1\x8f 2\xd0\xbc3\xd0\xb22 2\xd0\xbc\xd0\xb32 3\xd0\xbc2\xd0\xb3\xd0\xbb 2\xd0\xbc1\xd0\xb4 \xd0\xbc\xd0\xb5\xd0\xb0\xd0\xbd2 \xd0\xbc\xd0\xb52\xd0\xb5\xd0\xb3 \xd0\xbc\xd0\xb52\xd0\xb5\xd0\xbb \xd0\xbc\xd0\xb52\xd0\xb61\xd0\xb0\xd1\x82 \xd0\xbc\xd0\xb51\xd0\xb7\xd0\xbe \xd0\xbc\xd0\xb52\xd1\x811\xd0\xba \xd0\xbc\xd0\xb52\xd1\x81\xd1\x821\xd1\x80 \xd0\xbc\xd0\xb5\xd1\x871\xd1\x82 2\xd0\xbc\xd0\xb6 2\xd0\xbc1\xd0\xb72 \xd0\xbc\xd0\xb82\xd0\xb3\xd1\x80\xd0\xb5 \xd0\xbc\xd0\xb81\xd0\xb7\xd0\xb2 2\xd0\xbc\xd0\xb8\xd0\xb7\xd0\xb4 \xd0\xbc\xd0\xb81\xd0\xb7\xd0\xbd \xd0\xbc\xd0\xb82\xd0\xba\xd1\x80 \xd0\xbc\xd0\xb8\xd0\xba1\xd1\x80\xd0\xb8 \xd0\xbc\xd0\xb82\xd0\xbe\xd0\xb7 \xd0\xbc\xd0\xb81\xd0\xbe\xd0\xbf\xd0\xb8 \xd0\xbc\xd0\xb82\xd0\xbe\xd1\x80 \xd0\xbc\xd0\xb81\xd1\x812\xd0\xbb 2\xd0\xbc1\xd0\xba2 3\xd0\xbc\xd0\xba\xd0\xbd 2\xd0\xbc1\xd0\xbb \xd0\xbc2\xd0\xbb\xd0\xb5\xd0\xb5 \xd0\xbc2\xd0\xbb\xd0\xb5\xd0\xbb 2\xd0\xbc\xd0\xbc 2\xd0\xbc1\xd0\xbd 4\xd0\xbc3\xd0\xbd\xd0\xb0 \xd0\xbc\xd0\xbd\xd0\xb51\xd0\xb4 3\xd0\xbc2\xd0\xbd\xd0\xb5\xd1\x88 4\xd0\xbc\xd0\xbd\xd0\xbe\xd0\xb5 \xd0\xbc2\xd0\xbd\xd0\xbe\xd0\xb6 4\xd0\xbc\xd0\xbd\xd0\xbe\xd0\xb9 4\xd0\xbc\xd0\xbd\xd0\xbe\xd0\xbc \xd0\xbc2\xd0\xbd\xd0\xbe\xd1\x80 4\xd0\xbc\xd0\xbd\xd0\xbe\xd1\x8e \xd0\xbc2\xd0\xbd\xd1\x83\xd1\x82 4\xd0\xbc3\xd0\xbd\xd1\x8b \xd0\xbc\xd0\xbe1\xd0\xb12 \xd0\xbc\xd0\xbe3\xd0\xb2\xd0\xbb 3\xd0\xbc\xd0\xbe\xd0\xb4 \xd0\xbc\xd0\xbe1\xd0\xb4\xd1\x80 \xd0\xbc\xd0\xbe2\xd0\xb6\xd0\xb6 \xd0\xbc\xd0\xbe1\xd0\xb7\xd0\xb2 \xd0\xbc\xd0\xbe1\xd0\xb7\xd1\x80 \xd0\xbc\xd0\xbe\xd0\xb8\xd1\x811\xd1\x82 \xd0\xbc\xd0\xbe2\xd0\xba3\xd0\xb2 \xd0\xbc\xd0\xbe3\xd0\xbc2 3\xd0\xbc\xd0\xbe\xd0\xbd 3\xd0\xbc\xd0\xbe\xd0\xbf \xd0\xbc\xd0\xbe1\xd1\x80\xd1\x83 \xd0\xbc\xd0\xbe\xd1\x811\xd0\xba\xd0\xb0 \xd0\xbc\xd0\xbe1\xd1\x81\xd0\xbc \xd0\xbc\xd0\xbe1\xd1\x81\xd0\xbd \xd0\xbc\xd0\xbe1\xd1\x812\xd0\xbf 3\xd0\xbc\xd0\xbe\xd1\x82\xd0\xb8 \xd0\xbc\xd0\xbe2\xd1\x821\xd1\x80 3\xd0\xbc\xd0\xbe\xd1\x84 2\xd0\xbc\xd0\xbf \xd0\xbc\xd0\xbf2\xd0\xbb \xd0\xbc1\xd1\x80\xd0\xb0\xd0\xb1 2\xd0\xbc\xd1\x80\xd0\xb8 2\xd0\xbc1\xd1\x80\xd0\xbe \xd0\xbc1\xd1\x80\xd1\x8b 2\xd0\xbc1\xd1\x81 \xd0\xbc\xd1\x812\xd0\xba \xd0\xbc\xd1\x812\xd0\xbd \xd0\xbc2\xd1\x811\xd0\xbe\xd1\x80 3\xd0\xbc2\xd1\x81\xd1\x82\xd0\xb8 2\xd0\xbc1\xd1\x82 \xd0\xbc\xd1\x831\xd1\x812\xd0\xba \xd0\xbc\xd1\x831\xd1\x814\xd0\xbb \xd0\xbc\xd1\x831\xd1\x81\xd1\x82 \xd0\xbc\xd1\x83\xd1\x821\xd1\x80 \xd0\xbc\xd1\x833\xd1\x82\xd1\x8c 2\xd0\xbc\xd1\x84 \xd0\xbc\xd1\x84\xd0\xb83 2\xd0\xbc1\xd1\x85 2\xd0\xbc\xd1\x86 \xd0\xbc2\xd1\x87\xd0\xb0\xd0\xb2 \xd0\xbc2\xd1\x87\xd0\xb0\xd0\xbb \xd0\xbc2\xd1\x87\xd0\xb8\xd1\x82 \xd0\xbc2\xd1\x87\xd0\xb8\xd1\x88 2\xd0\xbc\xd1\x882 2\xd0\xbc\xd1\x89 3\xd0\xbc2\xd1\x89\xd0\xb5 \xd0\xbc\xd1\x8b\xd0\xbc1 \xd0\xbc\xd1\x8b2\xd0\xbc\xd1\x80 \xd0\xbc\xd1\x8b2\xd1\x81 2\xd0\xbc\xd1\x8c_ 2\xd0\xbc\xd1\x8c\xd1\x81 \xd0\xbc\xd1\x8c\xd1\x8e1 2\xd0\xbc\xd1\x8d \xd0\xbc\xd1\x8d1\xd1\x80 \xd0\xbc2\xd1\x8e \xd0\xbc\xd1\x8f1\xd1\x80 \xd0\xbc\xd1\x8f1\xd1\x81\xd1\x82 1\xd0\xbd\xd0\xb0 \xd0\xbd\xd0\xb0\xd0\xb1\xd0\xb81\xd0\xbe \xd0\xbd\xd0\xb0\xd0\xb12\xd1\x80 \xd0\xbd\xd0\xb01\xd0\xb22\xd1\x80 \xd0\xbd\xd0\xb0\xd0\xb32\xd0\xbd \xd0\xbd\xd0\xb03\xd0\xb6\xd0\xb4 \xd0\xbd\xd0\xb01\xd0\xb72 \xd0\xbd\xd0\xb02\xd0\xb8\xd0\xbb \xd0\xbd\xd0\xb02\xd0\xb8\xd0\xbd \xd0\xbd\xd0\xb02\xd0\xb81\xd1\x812 4\xd0\xbd\xd0\xb0\xd0\xba\xd0\xba \xd0\xbd\xd0\xb03\xd0\xbc2\xd0\xbd \xd0\xbd\xd0\xb0\xd0\xbf2\xd0\xbb \xd0\xbd\xd0\xb01\xd1\x80\xd0\xb2\xd0\xb0 \xd0\xbd\xd0\xb01\xd1\x802\xd0\xb2\xd0\xb8 \xd0\xbd\xd0\xb01\xd1\x812 \xd0\xbd\xd0\xb01\xd1\x82\xd0\xb2 \xd0\xbd\xd0\xb01\xd1\x822\xd1\x80 \xd0\xbd1\xd0\xb02\xd1\x84\xd1\x80 \xd0\xbd\xd0\xb01\xd1\x852 2\xd0\xbd\xd0\xb0\xd1\x87 \xd0\xbd\xd0\xb03\xd1\x882\xd0\xbb 2\xd0\xbd\xd0\xb0\xd1\x89 \xd0\xbd\xd0\xb0\xd1\x8d1\xd1\x80 3\xd0\xbd\xd0\xb0\xd1\x8f 2\xd0\xbd1\xd0\xb12 2\xd0\xbd1\xd0\xb2 2\xd0\xbd\xd0\xb3 \xd0\xbd2\xd0\xb31\xd0\xb2 \xd0\xbd\xd0\xb3\xd0\xb82\xd0\xbe \xd0\xbd\xd0\xb34\xd0\xbb \xd0\xbd\xd0\xb3\xd0\xbe1\xd1\x81 \xd0\xbd\xd0\xb32\xd1\x80 2\xd0\xbd1\xd0\xb4 \xd0\xbd2\xd0\xb4\xd0\xb0\xd0\xba \xd0\xbd2\xd0\xb41\xd0\xb2 \xd0\xbd\xd0\xb4\xd0\xb53\xd0\xb7 \xd0\xbd\xd0\xb4\xd0\xb52\xd1\x81 \xd0\xbd\xd0\xb42\xd0\xb6 \xd0\xbd3\xd0\xb42\xd0\xb7 \xd0\xbd2\xd0\xb4\xd0\xbb \xd0\xbd\xd0\xb41\xd1\x80\xd0\xb0\xd0\xb3 \xd0\xbd\xd0\xb41\xd1\x80\xd0\xb0\xd0\xb6 \xd0\xbd\xd0\xb42\xd1\x80\xd0\xb5 \xd0\xbd\xd0\xb42\xd1\x80\xd0\xb8\xd0\xb0 \xd0\xbd2\xd0\xb4\xd1\x80\xd1\x8f \xd0\xbd\xd0\xb42\xd1\x81\xd0\xbf \xd0\xbd2\xd0\xb4\xd1\x86 1\xd0\xbd\xd0\xb5 \xd0\xbd\xd0\xb51\xd0\xb12 \xd0\xbd\xd0\xb51\xd0\xb22\xd0\xb4 2\xd0\xbd\xd0\xb5\xd0\xb2\xd0\xbd \xd0\xbd\xd0\xb53\xd0\xb2\xd0\xbd\xd1\x8f \xd0\xbd\xd0\xb5\xd0\xb32 3\xd0\xbd\xd0\xb5\xd0\xb4 \xd0\xbd\xd0\xb51\xd0\xb42\xd0\xbb \xd0\xbd\xd0\xb5\xd0\xb42\xd0\xbe \xd0\xbd\xd0\xb52\xd0\xb4\xd1\x80\xd0\xb0 \xd0\xbd\xd0\xb51\xd0\xb4\xd1\x80\xd0\xbe \xd0\xbd\xd0\xb53\xd0\xb4\xd1\x83 \xd0\xbd\xd0\xb53\xd0\xb5 \xd0\xbd\xd0\xb5\xd0\xb52\xd0\xb4 \xd0\xbd\xd0\xb53\xd0\xb62\xd0\xb4 \xd0\xbd\xd0\xb51\xd0\xb7\xd0\xb2 \xd0\xbd\xd0\xb51\xd0\xb72\xd0\xbb \xd0\xbd\xd0\xb51\xd0\xb7\xd0\xbd \xd0\xbd\xd0\xb51\xd0\xb7\xd0\xbe \xd0\xbd\xd0\xb51\xd0\xb7\xd1\x80 \xd0\xbd\xd0\xb5\xd0\xb82 \xd0\xbd\xd0\xb51\xd0\xba2\xd0\xb2 \xd0\xbd\xd0\xb51\xd0\xba\xd0\xbb \xd0\xbd\xd0\xb53\xd0\xbc2\xd0\xbd 3\xd0\xbd\xd0\xb51\xd0\xbe2 \xd0\xbd\xd0\xb52\xd0\xbe\xd0\xb4\xd0\xb0 \xd0\xbd\xd0\xb52\xd0\xbe\xd0\xbb \xd0\xbd\xd0\xb53\xd0\xbf2 \xd0\xbd\xd0\xb51\xd1\x802\xd0\xb6 \xd0\xbd\xd0\xb52\xd1\x801\xd0\xbe\xd1\x82 \xd0\xbd\xd0\xb5\xd1\x812\xd0\xba \xd0\xbd\xd0\xb53\xd1\x812\xd0\xbd \xd0\xbd\xd0\xb51\xd1\x812\xd0\xbf \xd0\xbd\xd0\xb5\xd1\x81\xd1\x822 \xd0\xbd\xd0\xb51\xd1\x812\xd1\x85 \xd0\xbd\xd0\xb51\xd1\x812\xd1\x87 \xd0\xbd\xd0\xb51\xd1\x822\xd0\xb2 \xd0\xbd\xd0\xb53\xd1\x822\xd0\xbb \xd0\xbd\xd0\xb51\xd1\x822\xd1\x80 3\xd0\xbd\xd0\xb5\xd1\x83 \xd0\xbd\xd0\xb52\xd1\x84\xd1\x80 \xd0\xbd\xd0\xb51\xd1\x85\xd1\x80 \xd0\xbd\xd0\xb53\xd1\x88\xd0\xba \xd0\xbd\xd0\xb5\xd1\x8f2 2\xd0\xbd1\xd0\xb72 \xd0\xbd\xd0\xb7\xd0\xbe1\xd1\x81 1\xd0\xbd\xd0\xb8 \xd0\xbd\xd0\xb83\xd0\xb12 \xd0\xbd\xd0\xb82\xd0\xb5\xd0\xbd 3\xd0\xbd\xd0\xb8\xd0\xb9 \xd0\xbd\xd0\xb82\xd0\xba\xd0\xbb \xd0\xbd\xd0\xb8\xd0\xbb\xd0\xb02 \xd0\xbd\xd0\xb82\xd0\xbb1\xd0\xb0\xd0\xbb \xd0\xbd\xd0\xb82\xd0\xbb1\xd0\xb0\xd0\xbc 2\xd0\xbd\xd0\xb8\xd0\xbd\xd1\x81\xd0\xbf 2\xd0\xbd1\xd0\xb8\xd0\xbd\xd1\x81\xd1\x82 \xd0\xbd\xd0\xb81\xd1\x81\xd0\xbb \xd0\xbd\xd0\xb8\xd1\x813\xd0\xbf \xd0\xbd\xd0\xb8\xd1\x81\xd1\x822\xd1\x80 \xd0\xbd\xd0\xb8\xd1\x833 \xd0\xbd\xd0\xb81\xd1\x85 3\xd0\xbd\xd0\xb8\xd1\x86 3\xd0\xbd\xd0\xb8\xd1\x89 2\xd0\xbd1\xd0\xba \xd0\xbd\xd0\xba2\xd0\xb2 \xd0\xbd\xd0\xba2\xd0\xbb \xd0\xbd\xd0\xba\xd0\xbe\xd0\xb12 \xd0\xbd\xd0\xba\xd0\xbe3\xd0\xbf2 \xd0\xbd2\xd0\xba1\xd1\x80\xd0\xbe \xd0\xbd\xd0\xba1\xd1\x81 \xd0\xbd1\xd0\xbb 2\xd0\xbd1\xd0\xbd \xd0\xbd\xd0\xbd\xd0\xbe3\xd0\xbf2 1\xd0\xbd\xd0\xbe \xd0\xbd\xd0\xbe\xd0\xb12 \xd0\xbd\xd0\xbe1\xd0\xb1\xd1\x80 \xd0\xbd\xd0\xbe2\xd0\xb2\xd0\xbb \xd0\xbd\xd0\xbe1\xd0\xb4\xd0\xb2 \xd0\xbd\xd0\xbe1\xd0\xb4\xd1\x80 \xd0\xbd\xd0\xbe2\xd0\xb5\xd1\x80 \xd0\xbd\xd0\xbe1\xd0\xb7\xd0\xb2 \xd0\xbd\xd0\xbe2\xd0\xb7\xd0\xb4 \xd0\xbd\xd0\xbe3\xd0\xb72\xd0\xbe \xd0\xbd\xd0\xbe1\xd0\xb7\xd1\x80 \xd0\xbd\xd0\xbe3\xd0\xba\xd0\xbd 3\xd0\xbd\xd0\xbe\xd0\xbc\xd0\xb5 \xd0\xbd\xd0\xbe\xd0\xbc3\xd1\x88 \xd0\xbd\xd0\xbe2\xd1\x80\xd0\xb2 \xd0\xbd\xd0\xbe1\xd1\x80\xd1\x83 \xd0\xbd\xd0\xbe1\xd1\x81\xd0\xba\xd0\xbb \xd0\xbd\xd0\xbe2\xd1\x81\xd0\xbb\xd0\xb8 \xd0\xbd\xd0\xbe1\xd1\x812\xd0\xbf \xd0\xbd\xd0\xbe2\xd1\x81\xd1\x87 2\xd0\xbd\xd0\xbe\xd1\x82\xd0\xb4 \xd0\xbd\xd0\xbe3\xd1\x842 \xd0\xbd\xd0\xbe\xd1\x8d2 \xd0\xbd3\xd0\xbf2 2\xd0\xbd1\xd1\x80\xd0\xb5 2\xd0\xbd1\xd1\x80\xd0\xb8 \xd0\xbd1\xd1\x80\xd0\xbe 2\xd0\xbd1\xd1\x81 \xd0\xbd2\xd1\x813\xd0\xb2 \xd0\xbd2\xd1\x81\xd0\xb3 \xd0\xbd\xd1\x812\xd0\xba\xd0\xb5 \xd0\xbd2\xd1\x81\xd0\xba\xd0\xbe\xd0\xbd \xd0\xbd2\xd1\x81\xd0\xbb \xd0\xbd3\xd1\x81\xd0\xbb\xd0\xb0 \xd0\xbd2\xd1\x813\xd0\xbc \xd0\xbd2\xd1\x81\xd0\xbd \xd0\xbd2\xd1\x811\xd0\xbe\xd0\xba \xd0\xbd3\xd1\x812\xd0\xbf\xd0\xb5 \xd0\xbd\xd1\x81\xd1\x822\xd1\x80 \xd0\xbd\xd1\x81\xd1\x832\xd1\x80 \xd0\xbd2\xd1\x813\xd1\x84 \xd0\xbd2\xd1\x81\xd1\x8a3 2\xd0\xbd1\xd1\x82 \xd0\xbd2\xd1\x821\xd0\xb2 \xd0\xbd\xd1\x82\xd0\xb81\xd0\xbe2\xd0\xba \xd0\xbd2\xd1\x82\xd0\xbc \xd0\xbd\xd1\x822\xd1\x80\xd0\xb0 \xd0\xbd2\xd1\x82\xd1\x801\xd0\xb02\xd0\xb3 \xd0\xbd\xd1\x82\xd1\x801\xd0\xb0\xd0\xb6 \xd0\xbd2\xd1\x82\xd1\x80\xd0\xb0\xd1\x80 \xd0\xbd\xd1\x82\xd1\x80\xd0\xb0\xd1\x812 \xd0\xbd\xd1\x822\xd1\x80\xd0\xb5 \xd0\xbd2\xd1\x82\xd1\x80\xd0\xb8\xd0\xb2 \xd0\xbd2\xd1\x82\xd1\x80\xd0\xbe\xd0\xba \xd0\xbd\xd1\x822\xd1\x80\xd1\x83 \xd0\xbd\xd1\x82\xd1\x801\xd1\x83\xd0\xb4 \xd0\xbd\xd1\x822\xd1\x80\xd1\x8b \xd0\xbd2\xd1\x821\xd1\x80\xd1\x8f 1\xd0\xbd\xd1\x83 \xd0\xbd\xd1\x83\xd1\x821\xd1\x80 \xd0\xbd\xd1\x831\xd1\x85 3\xd0\xbd\xd1\x83\xd1\x8e 2\xd0\xbd\xd1\x842 \xd0\xbd1\xd1\x85 \xd0\xbd\xd1\x85\xd0\xbe1 2\xd0\xbd\xd1\x86 2\xd0\xbd1\xd1\x87 \xd0\xbd2\xd1\x87\xd0\xbb 2\xd0\xbd\xd1\x88 \xd0\xbd\xd1\x882\xd1\x82 2\xd0\xbd\xd1\x89 1\xd0\xbd\xd1\x8b 3\xd0\xbd\xd1\x8b_ 2\xd0\xbd\xd1\x8c_ 1\xd0\xbd\xd1\x8c\xd0\xb5 1\xd0\xbd\xd1\x8c\xd0\xb8 2\xd0\xbd\xd1\x8c\xd0\xba 1\xd0\xbd\xd1\x8c\xd0\xbe 2\xd0\xbd\xd1\x8c\xd1\x81 2\xd0\xbd\xd1\x8c\xd1\x82 2\xd0\xbd\xd1\x8c\xd1\x87 1\xd0\xbd\xd1\x8c\xd1\x8e 1\xd0\xbd\xd1\x8c\xd1\x8f \xd0\xbd2\xd1\x8d 1\xd0\xbd2\xd1\x8e 2\xd0\xbd3\xd1\x8e2\xd1\x80 1\xd0\xbd\xd1\x8f \xd0\xbd\xd1\x8f1\xd0\xb2\xd0\xb8 2\xd0\xbe1\xd0\xb02 \xd0\xbe3\xd0\xb0\xd0\xb2 \xd0\xbe\xd0\xb0\xd0\xbf1 2\xd0\xbe\xd0\xb1\xd0\xb0 2\xd0\xbe\xd0\xb1\xd0\xb8\xd0\xbe \xd0\xbe\xd0\xb12\xd0\xbb\xd0\xb5\xd0\xb2 \xd0\xbe\xd0\xb12\xd0\xbb\xd0\xb5\xd0\xbc \xd0\xbe1\xd0\xb1\xd0\xbb\xd1\x8e 1\xd0\xbe\xd0\xb1\xd0\xbc \xd0\xbe\xd0\xb1\xd0\xbe1\xd0\xbb2\xd0\xb3 \xd0\xbe\xd0\xb1\xd0\xbe3\xd0\xbc2 \xd0\xbe\xd0\xb1\xd0\xbe2\xd1\x81 2\xd0\xbe\xd0\xb1\xd0\xbe\xd1\x82 \xd0\xbe\xd0\xb11\xd1\x80 \xd0\xbe2\xd0\xb1\xd1\x80\xd0\xb0_ \xd0\xbe1\xd0\xb1\xd1\x80\xd0\xb0\xd0\xb2 \xd0\xbe1\xd0\xb1\xd1\x80\xd0\xb0\xd0\xbd 1\xd0\xbe\xd0\xb1\xd1\x8a 2\xd0\xbe\xd0\xb1\xd1\x8c \xd0\xbe1\xd0\xb2 \xd0\xbe3\xd0\xb2\xd0\xbb\xd0\xb0 \xd0\xbe3\xd0\xb22\xd0\xbb\xd0\xbe \xd0\xbe\xd0\xb23\xd0\xbd\xd0\xbe \xd0\xbe3\xd0\xb22\xd0\xbd\xd1\x83\xd1\x88 \xd0\xbe2\xd0\xb21\xd1\x80\xd0\xb8 \xd0\xbe\xd0\xb22\xd1\x81\xd0\xb5 \xd0\xbe\xd0\xb23\xd1\x81\xd0\xba\xd0\xbe \xd0\xbe\xd0\xb22\xd1\x82 \xd0\xbe2\xd0\xb2\xd1\x85 \xd0\xbe\xd0\xb32 2\xd0\xbe3\xd0\xb3\xd0\xb5 \xd0\xbe\xd0\xb33\xd0\xbb\xd0\xb0_ \xd0\xbe\xd0\xb33\xd0\xbb\xd0\xb8_ \xd0\xbe\xd0\xb33\xd0\xbb\xd0\xbe_ \xd0\xbe3\xd0\xb3\xd1\x80\xd1\x8f 2\xd0\xbe\xd0\xb4\xd0\xb0\xd0\xbd \xd0\xbe\xd0\xb41\xd0\xb2\xd0\xbe\xd0\xb5 \xd0\xbe3\xd0\xb4\xd0\xb5_ 1\xd0\xbe2\xd0\xb4\xd0\xb5\xd1\x8f\xd0\xbb 2\xd0\xbe\xd0\xb4\xd0\xb83\xd0\xb0 2\xd0\xbe3\xd0\xb4\xd0\xb8\xd0\xbc \xd0\xbe\xd0\xb42\xd0\xbb\xd0\xb8\xd1\x82 \xd0\xbe2\xd0\xb41\xd0\xbe2\xd0\xbf\xd0\xb5 \xd0\xbe\xd0\xb4\xd0\xbe3\xd0\xbf\xd1\x80 \xd0\xbe2\xd0\xb41\xd0\xbe2\xd0\xbf\xd1\x8b \xd0\xbe2\xd0\xb4\xd0\xbe\xd1\x81\xd0\xb8 \xd0\xbe2\xd0\xb41\xd0\xbe\xd1\x82\xd1\x87 \xd0\xbe1\xd0\xb4\xd1\x80\xd0\xb0\xd0\xb3 \xd0\xbe\xd0\xb41\xd1\x80\xd0\xb0\xd0\xb6 \xd0\xbe\xd0\xb41\xd1\x80\xd0\xb0\xd0\xb7 \xd0\xbe\xd0\xb41\xd1\x80\xd0\xb0\xd0\xba \xd0\xbe1\xd0\xb4\xd1\x80\xd0\xb0\xd0\xbb \xd0\xbe\xd0\xb43\xd1\x80\xd0\xb5\xd0\xb1 \xd0\xbe1\xd0\xb4\xd1\x80\xd0\xbe\xd0\xb1 \xd0\xbe\xd0\xb41\xd1\x80\xd0\xbe\xd0\xb2 \xd0\xbe2\xd0\xb41\xd1\x832\xd1\x87 \xd0\xbe2\xd0\xb4\xd1\x8b\xd0\xbc\xd0\xb0 \xd0\xbe2\xd0\xb4\xd1\x8b\xd0\xbc\xd1\x83 \xd0\xbe2\xd0\xb4\xd1\x8b\xd0\xbd \xd0\xbe1\xd0\xb4\xd1\x8c \xd0\xbe2\xd0\xb4\xd1\x8c\xd0\xb1 \xd0\xbe1\xd0\xb5 \xd0\xbe\xd0\xb51\xd0\xb1 \xd0\xbe2\xd0\xb51\xd0\xb2\xd0\xbb \xd0\xbe\xd0\xb52\xd0\xb4 \xd0\xbe3\xd0\xb5\xd0\xb6\xd0\xb5\xd0\xba \xd0\xbe\xd0\xb52\xd0\xb6\xd0\xb8 \xd0\xbe\xd0\xb51\xd0\xbe \xd0\xbe\xd0\xb51\xd1\x812 \xd0\xbe\xd0\xb52\xd1\x81\xd1\x82 \xd0\xbe2\xd0\xb5\xd1\x82\xd0\xbe \xd0\xbe\xd0\xb52\xd1\x86 \xd0\xbe3\xd0\xb6\xd0\xb4\xd0\xb8 \xd0\xbe3\xd0\xb62\xd0\xb4\xd1\x83 \xd0\xbe\xd0\xb7\xd0\xb02\xd0\xb13\xd0\xb2 2\xd0\xbe\xd0\xb7\xd0\xb0\xd0\xb2 \xd0\xbe1\xd0\xb72\xd0\xb2\xd0\xb0 \xd0\xbe\xd0\xb72\xd0\xb2\xd0\xb5\xd0\xbd \xd0\xbe\xd0\xb72\xd0\xb2\xd0\xb8 \xd0\xbe1\xd0\xb72\xd0\xb2\xd1\x8f \xd0\xbe\xd0\xb72\xd0\xb3\xd0\xbb\xd0\xbe \xd0\xbe\xd0\xb72\xd0\xb4\xd0\xbe\xd1\x80 \xd0\xbe1\xd0\xb7\xd0\xb4\xd1\x80 \xd0\xbe\xd0\xb7\xd0\xb51\xd0\xbe \xd0\xbe\xd0\xb73\xd0\xbd\xd0\xbe \xd0\xbe1\xd0\xb7\xd0\xbe \xd0\xbe2\xd0\xb71\xd0\xbe\xd0\xb1 2\xd0\xbe\xd0\xb7\xd0\xbe\xd0\xbd \xd0\xbe2\xd0\xb7\xd0\xbe\xd0\xbf \xd0\xbe\xd0\xb7\xd0\xbe1\xd1\x80\xd1\x83 \xd0\xbe\xd0\xb71\xd1\x83\xd0\xb3 \xd0\xbe2\xd0\xb7\xd1\x8b\xd0\xbc \xd0\xbe3\xd0\xb7\xd1\x8b\xd1\x81 \xd0\xbe3\xd0\xb8 \xd0\xbe\xd0\xb82\xd0\xb31 \xd0\xbe\xd0\xb8\xd0\xb32\xd0\xbd \xd0\xbe\xd0\xb8\xd0\xb53 \xd0\xbe\xd0\xb82\xd0\xb7 \xd0\xbe\xd0\xb82\xd0\xbc \xd0\xbe\xd0\xb83\xd0\xbc\xd0\xbe \xd0\xbe\xd0\xb82\xd0\xbe 2\xd0\xbe\xd0\xb9 \xd0\xbe\xd0\xb9\xd1\x812 \xd0\xbe1\xd0\xba 2\xd0\xbe3\xd0\xba\xd0\xb0\xd0\xbd \xd0\xbe\xd0\xba2\xd0\xb2 2\xd0\xbe\xd0\xba2\xd0\xbb \xd0\xbe3\xd0\xba\xd0\xbb\xd1\x8e \xd0\xbe\xd0\xba\xd0\xbe1\xd0\xb1 2\xd0\xbe3\xd0\xba\xd0\xbe\xd0\xbb \xd0\xbe\xd0\xba\xd0\xbe3\xd0\xbf2\xd0\xbb \xd0\xbe\xd0\xba1\xd1\x81\xd0\xba 1\xd0\xbe\xd0\xba\xd1\x82 2\xd0\xbe\xd0\xba\xd1\x82\xd0\xb8 2\xd0\xbe\xd0\xba\xd1\x83\xd0\xbc \xd0\xbe3\xd0\xbb\xd0\xb0 \xd0\xbe\xd0\xbb2\xd0\xb3\xd0\xb0\xd0\xbd \xd0\xbe1\xd0\xbb\xd0\xb5 1\xd0\xbe\xd0\xbb\xd0\xb8\xd0\xbc\xd0\xbf \xd0\xbe3\xd0\xbb\xd0\xbe \xd0\xbe1\xd0\xbb\xd1\x83 \xd0\xbe\xd0\xbb\xd1\x833\xd0\xb42 \xd0\xbe1\xd0\xbb\xd1\x8b \xd0\xbe1\xd0\xbb\xd1\x8e \xd0\xbe3\xd0\xbb\xd1\x8f \xd0\xbe3\xd0\xbc\xd0\xb0 \xd0\xbe\xd0\xbc2\xd0\xb1\xd0\xbb 2\xd0\xbe\xd0\xbc\xd0\xb5 \xd0\xbe3\xd0\xbc2\xd0\xbd\xd0\xb5\xd0\xbc \xd0\xbe3\xd0\xbc2\xd0\xbd\xd0\xb5\xd1\x82 \xd0\xbe3\xd0\xbc\xd0\xbd\xd0\xbe\xd0\xb6 \xd0\xbe\xd0\xbc1\xd1\x80\xd0\xb8 \xd0\xbe\xd0\xbc2\xd1\x87 \xd0\xbe\xd0\xbc2\xd1\x88\xd0\xb5 \xd0\xbe2\xd0\xbc\xd1\x8c \xd0\xbe3\xd0\xbc\xd1\x8c\xd1\x8f \xd0\xbe3\xd0\xbd\xd0\xb0 \xd0\xbe\xd0\xbd\xd0\xb42 \xd0\xbe\xd0\xbd\xd0\xb53\xd1\x842 \xd0\xbe\xd0\xbd\xd0\xbe1\xd0\xb1 \xd0\xbe1\xd0\xbd\xd1\x80 \xd0\xbe\xd0\xbd\xd1\x812 \xd0\xbe\xd0\xbd2\xd1\x82\xd1\x80\xd1\x83 \xd0\xbe1\xd0\xbe2 \xd0\xbe2\xd0\xbe\xd0\xbb \xd0\xbe\xd0\xbe3\xd0\xbf\xd1\x81 \xd0\xbe\xd0\xbe\xd1\x813\xd0\xbc \xd0\xbe\xd0\xbe\xd1\x81\xd1\x821\xd1\x80 \xd0\xbe2\xd0\xbe\xd1\x82\xd0\xb8 \xd0\xbe2\xd0\xbe\xd1\x84 \xd0\xbe3\xd0\xbf\xd0\xb0\xd0\xba \xd0\xbe3\xd0\xbf\xd0\xb0\xd1\x80 \xd0\xbe2\xd0\xbf\xd0\xbb\xd0\xb5_ \xd0\xbe2\xd0\xbf1\xd0\xbb\xd0\xb5\xd0\xb9 \xd0\xbe2\xd0\xbf\xd0\xbb\xd0\xb8 \xd0\xbe\xd0\xbf2\xd0\xbb\xd0\xb8\xd1\x82 \xd0\xbe\xd0\xbf2\xd0\xbb\xd0\xbe \xd0\xbe\xd0\xbf3\xd0\xbb\xd1\x8e_ \xd0\xbe2\xd0\xbf\xd0\xbb\xd1\x8f \xd0\xbe3\xd0\xbf\xd0\xbb\xd1\x8f\xd1\x81 \xd0\xbe\xd0\xbf\xd0\xbe4\xd0\xb2\xd1\x81 \xd0\xbe\xd0\xbf\xd0\xbe\xd0\xb72\xd0\xbd \xd0\xbe\xd0\xbf\xd0\xbe2\xd1\x883\xd0\xbb \xd0\xbe\xd0\xbf2\xd1\x80\xd0\xb8 \xd0\xbe3\xd0\xbf2\xd1\x82\xd0\xb5 \xd0\xbe\xd0\xbf2\xd1\x82\xd0\xbe \xd0\xbe1\xd1\x80\xd0\xb0 \xd0\xbe\xd1\x80\xd0\xb02\xd1\x813 \xd0\xbe\xd1\x802\xd0\xb13\xd0\xbb \xd0\xbe1\xd1\x802\xd0\xb2 \xd0\xbe1\xd1\x80\xd0\xb5 2\xd0\xbe3\xd1\x80\xd0\xb5\xd0\xb3 \xd0\xbe\xd1\x80\xd0\xb52\xd1\x81\xd0\xba \xd0\xbe1\xd1\x80\xd0\xb8 \xd0\xbe\xd1\x801\xd0\xb8\xd1\x81\xd0\xbf \xd0\xbe1\xd1\x80\xd0\xbe \xd0\xbe\xd1\x80\xd0\xbe2\xd1\x813\xd0\xbb \xd0\xbe\xd1\x802\xd1\x82\xd1\x80 \xd0\xbe1\xd1\x80\xd1\x83\xd0\xb5 \xd0\xbe1\xd1\x80\xd1\x83\xd0\xba \xd0\xbe\xd1\x801\xd1\x83\xd0\xba\xd1\x81 \xd0\xbe1\xd1\x80\xd1\x83\xd1\x81 2\xd0\xbe\xd1\x80\xd1\x86 \xd0\xbe1\xd1\x80\xd1\x8b \xd0\xbe1\xd1\x80\xd1\x8e \xd0\xbe1\xd1\x80\xd1\x8f \xd0\xbe3\xd1\x81\xd0\xb0\xd0\xb4 \xd0\xbe\xd1\x81\xd0\xb03\xd0\xb62 \xd0\xbe\xd1\x812\xd0\xb1 \xd0\xbe2\xd1\x813\xd0\xb1\xd0\xb0 \xd0\xbe2\xd1\x811\xd0\xba\xd0\xb0_ \xd0\xbe\xd1\x813\xd0\xba\xd0\xb0\xd1\x80 \xd0\xbe\xd1\x81\xd0\xba1\xd0\xb2\xd0\xbe \xd0\xbe2\xd1\x81\xd0\xba\xd0\xb5 \xd0\xbe\xd1\x811\xd0\xba\xd0\xb8 \xd0\xbe2\xd1\x81\xd0\xba\xd0\xb8_ \xd0\xbe2\xd1\x81\xd0\xba\xd0\xbe\xd0\xb2 \xd0\xbe\xd1\x811\xd0\xba\xd0\xbe\xd0\xb9 \xd0\xbe\xd1\x811\xd0\xba\xd0\xbe\xd0\xbc \xd0\xbe1\xd1\x812\xd0\xba\xd0\xbe\xd0\xbf \xd0\xbe\xd1\x811\xd0\xba\xd0\xbe\xd1\x8e \xd0\xbe2\xd1\x811\xd0\xba\xd1\x83_ \xd0\xbe\xd1\x811\xd0\xba\xd1\x83\xd1\x8e \xd0\xbe1\xd1\x812\xd0\xbb \xd0\xbe\xd1\x813\xd0\xbb\xd0\xb5\xd0\xb9 \xd0\xbe\xd1\x813\xd0\xbb\xd0\xbe\xd0\xb3 \xd0\xbe\xd1\x813\xd0\xbb\xd1\x8b\xd1\x85 \xd0\xbe\xd1\x813\xd0\xbc\xd0\xb8 \xd0\xbe\xd1\x813\xd0\xbc\xd0\xbe\xd1\x81 \xd0\xbe1\xd1\x812\xd0\xbd\xd0\xb8\xd0\xbc \xd0\xbe\xd1\x812\xd0\xbd\xd1\x8f\xd0\xbb \xd0\xbe\xd1\x812\xd0\xbf\xd0\xb0\xd1\x81 \xd0\xbe1\xd1\x812\xd0\xbf\xd1\x83 \xd0\xbe\xd1\x812\xd0\xbf\xd1\x8f \xd0\xbe\xd1\x812\xd1\x81\xd0\xb2 \xd0\xbe\xd1\x812\xd1\x813\xd0\xbc \xd0\xbe1\xd1\x81\xd1\x82 \xd0\xbe\xd1\x812\xd1\x82\xd0\xb0 \xd0\xbe3\xd1\x81\xd1\x82\xd1\x80\xd0\xb0 \xd0\xbe2\xd1\x81\xd1\x83\xd1\x87 2\xd0\xbe\xd1\x81\xd1\x85 \xd0\xbe\xd1\x812\xd1\x86\xd0\xb5\xd0\xbd \xd0\xbe1\xd1\x812\xd1\x87 \xd0\xbe1\xd1\x812\xd1\x88\xd0\xb8\xd0\xb2 \xd0\xbe1\xd1\x82 \xd0\xbe\xd1\x82\xd0\xb22 \xd0\xbe\xd1\x823\xd0\xb2\xd0\xb0 \xd0\xbe\xd1\x821\xd0\xb2\xd0\xb5 \xd0\xbe\xd1\x821\xd0\xb2\xd0\xb8 \xd0\xbe\xd1\x821\xd0\xb2\xd0\xbb 1\xd0\xbe\xd1\x82\xd0\xb3 1\xd0\xbe\xd1\x82\xd0\xb4 2\xd0\xbe3\xd1\x82\xd0\xb5\xd0\xba \xd0\xbe3\xd1\x82\xd0\xb5\xd1\x80 2\xd0\xbe3\xd1\x82\xd0\xb5\xd1\x85 \xd0\xbe3\xd1\x82\xd0\xb8 \xd0\xbe3\xd1\x82\xd0\xba\xd0\xb0\xd0\xbb \xd0\xbe2\xd1\x82\xd0\xbc \xd0\xbe\xd1\x821\xd1\x80\xd0\xb0\xd0\xb1 \xd0\xbe\xd1\x821\xd1\x80\xd0\xb0\xd0\xb4 \xd0\xbe\xd1\x821\xd1\x80\xd0\xb0\xd0\xb7 \xd0\xbe\xd1\x82\xd1\x80\xd0\xb02\xd1\x81 \xd0\xbe\xd1\x821\xd1\x80\xd0\xb5\xd0\xb6 \xd0\xbe\xd1\x821\xd1\x80\xd0\xb5\xd0\xba \xd0\xbe\xd1\x821\xd1\x80\xd0\xb5\xd1\x87 \xd0\xbe\xd1\x821\xd1\x80\xd0\xb5\xd1\x88 \xd0\xbe\xd1\x821\xd1\x80\xd0\xb8 \xd0\xbe\xd1\x821\xd1\x80\xd0\xbe\xd0\xb4 \xd0\xbe\xd1\x821\xd1\x80\xd0\xbe\xd0\xb5 \xd0\xbe\xd1\x821\xd1\x80\xd0\xbe\xd0\xba \xd0\xbe\xd1\x821\xd1\x80\xd0\xbe\xd1\x81 \xd0\xbe\xd1\x821\xd1\x80\xd0\xbe\xd1\x87 \xd0\xbe\xd1\x821\xd1\x80\xd1\x83\xd0\xb3 \xd0\xbe\xd1\x823\xd1\x81\xd0\xbc \xd0\xbe\xd1\x82\xd1\x832\xd0\xb0 \xd0\xbe\xd1\x821\xd1\x832\xd1\x87 1\xd0\xbe\xd1\x82\xd1\x85 \xd0\xbe3\xd1\x82\xd1\x8c\xd1\x8e \xd0\xbe3\xd1\x82\xd1\x8c\xd1\x8f \xd0\xbe1\xd1\x832 \xd0\xbe\xd1\x83\xd0\xbf2 \xd0\xbe\xd1\x83\xd1\x812\xd0\xba \xd0\xbe\xd1\x833\xd1\x82\xd0\xb0 \xd0\xbe\xd1\x833\xd1\x82\xd0\xbe 2\xd0\xbe\xd1\x84\xd0\xb0\xd1\x88 \xd0\xbe3\xd1\x84\xd0\xb5 2\xd0\xbe\xd1\x84\xd0\xb8\xd1\x82 2\xd0\xbe\xd1\x84\xd0\xbe\xd0\xbd \xd0\xbe2\xd1\x84\xd0\xbe\xd1\x80\xd0\xb8 2\xd0\xbe\xd1\x84\xd0\xbe\xd1\x82 \xd0\xbe2\xd1\x84\xd1\x80\xd0\xb8 2\xd0\xbe\xd1\x85\xd0\xb8 \xd0\xbe\xd1\x851\xd0\xbb\xd1\x8b \xd0\xbe2\xd1\x85\xd0\xbb\xd1\x8f \xd0\xbe\xd1\x852\xd0\xbc\xd0\xb5 2\xd0\xbe\xd1\x85\xd0\xbe\xd1\x80 \xd0\xbe1\xd1\x85\xd1\x80 \xd0\xbe1\xd1\x85\xd1\x83 \xd0\xbe2\xd1\x86\xd0\xbe \xd0\xbe\xd1\x87\xd0\xb01\xd1\x81 \xd0\xbe\xd1\x872\xd0\xbb \xd0\xbe\xd1\x871\xd0\xbb\xd0\xb5 \xd0\xbe3\xd1\x87\xd0\xbb\xd0\xb8 \xd0\xbe1\xd1\x87\xd1\x82 \xd0\xbe2\xd1\x871\xd1\x82\xd0\xbe \xd0\xbe\xd1\x883\xd0\xb2\xd0\xb0 \xd0\xbe\xd1\x882\xd0\xbb\xd0\xb0 \xd0\xbe\xd1\x88\xd0\xbf\xd0\xb02\xd0\xba3 \xd0\xbe\xd1\x882\xd1\x82 \xd0\xbe\xd1\x8d1\xd1\x82\xd0\xb8 2\xd0\xbe\xd1\x8e \xd0\xbe1\xd1\x8f \xd0\xbe\xd1\x8f2\xd0\xb2 \xd0\xbe\xd1\x8f2\xd0\xb4 \xd0\xbe\xd1\x8f2\xd0\xb7 \xd0\xbe\xd1\x8f2\xd1\x80\xd0\xb8 1\xd0\xbf \xd0\xbf\xd0\xb0\xd0\xb2\xd0\xb83 \xd0\xbf\xd0\xb0\xd0\xb23\xd0\xbb \xd0\xbf\xd0\xb02\xd0\xb2\xd1\x8c \xd0\xbf\xd0\xb02\xd0\xb4\xd1\x80 \xd0\xbf\xd0\xb02\xd0\xb5\xd0\xbd \xd0\xbf\xd0\xb01\xd0\xb7\xd0\xbe \xd0\xbf\xd0\xb0\xd1\x811\xd0\xbb \xd0\xbf\xd0\xb0\xd1\x811\xd1\x82\xd0\xb0 \xd0\xbf\xd0\xb01\xd1\x81\xd1\x82\xd0\xb5 \xd0\xbf\xd0\xb0\xd1\x811\xd1\x82\xd0\xbe \xd0\xbf\xd0\xb0\xd1\x811\xd1\x82\xd1\x83 \xd0\xbf\xd0\xb02\xd1\x811\xd1\x82\xd1\x8b \xd0\xbf\xd0\xb01\xd1\x82\xd1\x80\xd0\xbe \xd0\xbf\xd0\xb02\xd1\x83\xd0\xbd \xd0\xbf\xd0\xb03\xd1\x84 \xd0\xbf\xd0\xb01\xd1\x85\xd1\x83 \xd0\xbf\xd0\xb02\xd1\x88\xd1\x82 2\xd0\xbf1\xd0\xb22 2\xd0\xbf1\xd0\xb4 \xd0\xbf\xd0\xb51 \xd0\xbf\xd0\xb52\xd0\xb4\xd0\xb2 \xd0\xbf\xd0\xb52\xd0\xb41\xd0\xb8\xd0\xbd \xd0\xbf\xd0\xb52\xd0\xb7 \xd0\xbf\xd0\xb53\xd0\xb7\xd0\xb0 \xd0\xbf\xd0\xb53\xd0\xb7\xd0\xbe \xd0\xbf\xd0\xb52\xd0\xba1\xd0\xbb\xd0\xb0 \xd0\xbf\xd0\xb52\xd0\xbb\xd1\x8c \xd0\xbf\xd0\xb54\xd0\xbf\xd0\xbb \xd0\xbf\xd0\xb5\xd1\x80\xd0\xb81\xd0\xbe \xd0\xbf\xd0\xb52\xd1\x811\xd0\xba \xd0\xbf\xd0\xb52\xd1\x81\xd0\xbd \xd0\xbf\xd0\xb52\xd1\x81\xd1\x821\xd1\x80 \xd0\xbf\xd0\xb52\xd1\x81\xd1\x86 \xd0\xbf\xd0\xb52\xd1\x81\xd1\x87 \xd0\xbf\xd0\xb52\xd1\x82\xd1\x80 \xd0\xbf\xd0\xb52\xd1\x88\xd1\x82 \xd0\xbf\xd0\xb8\xd0\xb0\xd1\x81\xd1\x821 \xd0\xbf\xd0\xb82\xd0\xb63\xd0\xbc \xd0\xbf\xd0\xb82\xd0\xba1\xd1\x80 3\xd0\xbf\xd0\xb8\xd0\xbd\xd0\xba 3\xd0\xbf\xd0\xb8\xd1\x81\xd1\x8f 4\xd0\xbf3\xd0\xba 2\xd0\xbf\xd0\xbb_ 4\xd0\xbf\xd0\xbb\xd0\xb0_ \xd0\xbf\xd0\xbb\xd0\xb01\xd1\x81 \xd0\xbf1\xd0\xbb\xd0\xb5\xd0\xbc_ \xd0\xbf1\xd0\xbb\xd0\xb5\xd0\xbc\xd1\x81 2\xd0\xbf\xd0\xbb\xd0\xb5\xd0\xbd \xd0\xbf2\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xba \xd0\xbf1\xd0\xbb\xd0\xb52\xd0\xbe \xd0\xbf\xd0\xbb\xd0\xb5\xd1\x811\xd0\xba \xd0\xbf1\xd0\xbb\xd0\xb5\xd1\x8e 2\xd0\xbf\xd0\xbb\xd0\xb8\xd0\xb2 3\xd0\xbf2\xd0\xbb\xd0\xb8\xd0\xba 2\xd0\xbf\xd0\xbb\xd0\xbe_ 2\xd0\xbf\xd0\xbb\xd0\xbe\xd0\xb2 2\xd0\xbf\xd0\xbb\xd0\xbe\xd0\xb3 2\xd0\xbf\xd0\xbb\xd1\x8b\xd0\xb9 2\xd0\xbf\xd0\xbb\xd1\x8b\xd0\xbc \xd0\xbf1\xd0\xbb\xd1\x8b\xd0\xbd \xd0\xbf1\xd0\xbb\xd1\x8b\xd1\x85 2\xd0\xbf\xd0\xbb\xd1\x8e_ \xd0\xbf1\xd0\xbb\xd1\x8e\xd1\x82 \xd0\xbf2\xd0\xbb\xd1\x8f\xd1\x81 \xd0\xbf2\xd0\xbb\xd1\x8f\xd1\x88 2\xd0\xbf1\xd0\xbd \xd0\xbf3\xd0\xbd\xd0\xb0 \xd0\xbf3\xd0\xbd\xd0\xbe1 \xd0\xbf3\xd0\xbd\xd1\x8b \xd0\xbf\xd0\xbe1\xd0\xb12 \xd0\xbf\xd0\xbe3\xd0\xb2\xd0\xbb \xd0\xbf\xd0\xbe3\xd0\xb22\xd1\x81 \xd0\xbf\xd0\xbe\xd0\xb41\xd0\xb2\xd0\xbe \xd0\xbf\xd0\xbe2\xd0\xb41\xd0\xbe2\xd0\xba \xd0\xbf\xd0\xbe\xd0\xb4\xd0\xbe3\xd0\xbc2 \xd0\xbf\xd0\xbe\xd0\xb52\xd0\xbb \xd0\xbf\xd0\xbe\xd0\xb52\xd1\x85 \xd0\xbf\xd0\xbe1\xd0\xb7\xd0\xb2\xd0\xb5 \xd0\xbf\xd0\xbe1\xd0\xb7\xd0\xb4\xd0\xbe \xd0\xbf\xd0\xbe1\xd0\xb72\xd0\xbb \xd0\xbf\xd0\xbe1\xd0\xb7\xd0\xbd \xd0\xbf\xd0\xbe\xd0\xb82\xd1\x89 3\xd0\xbf\xd0\xbe\xd0\xb9 3\xd0\xbf\xd0\xbe\xd0\xbb\xd0\xba \xd0\xbf\xd0\xbe3\xd0\xbc\xd0\xbd\xd0\xbe \xd0\xbf\xd0\xbe3\xd0\xbc\xd0\xbd\xd1\x83 3\xd0\xbf\xd0\xbe3\xd0\xbf2 \xd0\xbf1\xd0\xbe\xd1\x80\xd0\xb3 \xd0\xbf\xd0\xbe\xd1\x802\xd0\xb6 \xd0\xbf\xd0\xbe1\xd1\x80\xd1\x83 \xd0\xbf\xd0\xbe1\xd1\x814 3\xd0\xbf\xd0\xbe\xd1\x81\xd0\xbb \xd0\xbf\xd0\xbe3\xd1\x81\xd1\x81 \xd0\xbf\xd0\xbe\xd1\x822\xd0\xb2 \xd0\xbf\xd0\xbe\xd1\x822\xd1\x80 \xd0\xbf\xd0\xbe1\xd1\x852 \xd0\xbf\xd0\xbe2\xd1\x88\xd0\xbb\xd0\xbe \xd0\xbf\xd0\xbe2\xd1\x88\xd0\xbb\xd1\x8b \xd0\xbf\xd0\xbe2\xd1\x88\xd0\xbb\xd1\x8f \xd0\xbf\xd0\xbe\xd1\x8d3\xd0\xbc 2\xd0\xbf\xd0\xbf2 \xd0\xbf\xd0\xbf\xd0\xbe1\xd0\xb4 2\xd0\xbf\xd1\x80_ 3\xd0\xbf\xd1\x80\xd0\xb5\xd0\xb2 \xd0\xbf\xd1\x80\xd0\xb51\xd0\xb7 \xd0\xbf\xd1\x80\xd0\xb5\xd0\xb92 \xd0\xbf\xd1\x80\xd0\xb51\xd0\xbb \xd0\xbf\xd1\x80\xd0\xb51\xd0\xbe\xd0\xb3 3\xd0\xbf\xd1\x80\xd0\xb5\xd1\x82 \xd0\xbf\xd1\x80\xd0\xb81 \xd0\xbf\xd1\x80\xd0\xb83\xd0\xb2 \xd0\xbf\xd1\x80\xd0\xb8\xd0\xb32 \xd0\xbf\xd1\x80\xd0\xb83\xd0\xb42 \xd0\xbf\xd1\x80\xd0\xb83\xd0\xba \xd0\xbf\xd1\x80\xd0\xb83\xd0\xbb \xd0\xbf\xd1\x80\xd0\xb8\xd0\xbb\xd1\x8c2 \xd0\xbf\xd1\x80\xd0\xb8\xd0\xbf2 \xd0\xbf2\xd1\x80\xd0\xb8\xd1\x86 \xd0\xbf\xd1\x80\xd0\xbe1\xd0\xb1\xd0\xbb \xd0\xbf\xd1\x80\xd0\xbe\xd0\xb42\xd0\xbb \xd0\xbf\xd1\x80\xd0\xbe3\xd0\xb62 \xd0\xbf\xd1\x80\xd0\xbe1\xd0\xb72 \xd0\xbf1\xd1\x80\xd0\xbe\xd0\xb7\xd0\xbe 3\xd0\xbf\xd1\x80\xd0\xbe\xd0\xb8 \xd0\xbf\xd1\x80\xd0\xbe3\xd0\xbf \xd0\xbf\xd1\x80\xd0\xbe\xd1\x84\xd0\xbe2 2\xd0\xbf\xd1\x80\xd1\x81 \xd0\xbf2\xd1\x80\xd1\x83 2\xd0\xbf1\xd1\x812 3\xd0\xbf2\xd1\x81\xd0\xb0\xd0\xbb \xd0\xbf3\xd1\x81\xd0\xb8\xd0\xbd 3\xd0\xbf2\xd1\x81\xd0\xb8\xd1\x85 \xd0\xbf3\xd1\x81\xd0\xbe 2\xd0\xbf1\xd1\x82 \xd0\xbf2\xd1\x823\xd0\xb2 3\xd0\xbf2\xd1\x82\xd0\xb8\xd1\x85 \xd0\xbf3\xd1\x82\xd1\x83 3\xd0\xbf\xd1\x83\xd0\xb1 \xd0\xbf\xd1\x83\xd0\xb33\xd0\xbd \xd0\xbf\xd1\x83\xd1\x811\xd0\xba\xd1\x83 \xd0\xbf\xd1\x831\xd1\x81\xd1\x82 \xd0\xbf\xd1\x833\xd1\x82\xd1\x8c 2\xd0\xbf\xd1\x842 \xd0\xbf\xd1\x852 2\xd0\xbf\xd1\x86 4\xd0\xbf3\xd1\x87 2\xd0\xbf\xd1\x88 2\xd0\xbf\xd1\x89 2\xd0\xbf\xd1\x8c_ 2\xd0\xbf\xd1\x8c\xd1\x82 \xd0\xbf\xd1\x8d1\xd1\x80\xd0\xb0 \xd0\xbf2\xd1\x8e1 1\xd1\x80\xd0\xb0_ \xd1\x80\xd0\xb0\xd0\xb02 \xd1\x80\xd0\xb02\xd0\xb1\xd0\xbb 1\xd1\x80\xd0\xb0\xd0\xb1\xd0\xbe \xd1\x80\xd0\xb02\xd0\xb11\xd1\x80 1\xd1\x80\xd0\xb0\xd0\xb2\xd0\xbd\xd1\x8f \xd1\x80\xd0\xb02\xd0\xb3\xd0\xb2 \xd1\x80\xd0\xb02\xd0\xb3\xd0\xbb \xd1\x80\xd0\xb0\xd0\xb42\xd0\xb6 \xd1\x80\xd0\xb0\xd0\xb4\xd0\xbe1\xd0\xb12 \xd1\x80\xd0\xb02\xd0\xb4\xd1\x86 \xd1\x80\xd0\xb02\xd0\xb6\xd1\x83\xd1\x80 \xd1\x80\xd0\xb02\xd0\xb7\xd0\xb8\xd0\xb9 \xd1\x80\xd0\xb02\xd0\xb7\xd1\x83\xd0\xb1 \xd1\x80\xd0\xb0\xd0\xba2\xd0\xb2 1\xd1\x80\xd0\xb0\xd0\xba\xd0\xb8\xd0\xb7 \xd1\x80\xd0\xb02\xd0\xba3\xd0\xbb 1\xd1\x80\xd0\xb0\xd0\xbb\xd0\xb3 1\xd1\x80\xd0\xb0\xd0\xbc\xd0\xba 1\xd1\x80\xd0\xb0\xd0\xbc\xd0\xbd \xd1\x80\xd0\xb02\xd0\xbd\xd0\xbe\xd1\x85 \xd1\x80\xd0\xb0\xd0\xbd2\xd1\x81\xd1\x86 \xd1\x80\xd0\xb02\xd0\xbf1\xd0\xbb \xd1\x80\xd0\xb0\xd1\x813\xd0\xba2 1\xd1\x80\xd0\xb0\xd1\x81\xd0\xbb \xd1\x80\xd0\xb0\xd1\x813\xd0\xbf \xd1\x80\xd0\xb0\xd1\x811\xd1\x82 1\xd1\x80\xd0\xb0\xd1\x81\xd1\x82\xd0\xb0 \xd1\x80\xd0\xb0\xd1\x813\xd1\x822\xd0\xbb \xd1\x80\xd0\xb02\xd1\x82\xd0\xb0\xd0\xba \xd1\x80\xd0\xb0\xd1\x821\xd0\xb2 \xd1\x80\xd0\xb01\xd1\x822\xd1\x80 2\xd1\x80\xd0\xb0\xd1\x85\xd0\xb8 1\xd1\x80\xd0\xb0\xd1\x89\xd0\xb8 1\xd1\x80\xd0\xb0\xd1\x8e 1\xd1\x80\xd0\xb0\xd1\x8f 2\xd1\x80\xd0\xb0\xd1\x8f\xd1\x82 2\xd1\x801\xd0\xb1 \xd1\x80\xd0\xb12\xd0\xbb\xd0\xb0 \xd1\x802\xd0\xb1\xd0\xbb\xd0\xb5 \xd1\x80\xd0\xb12\xd0\xbb\xd0\xbe \xd1\x80\xd0\xb12\xd0\xbb\xd1\x8e \xd1\x80\xd0\xb1\xd0\xbe3\xd1\x81 1\xd1\x802\xd0\xb2\xd0\xb0\xd0\xb2 \xd1\x803\xd0\xb2\xd0\xb0\xd0\xba \xd1\x803\xd0\xb2\xd0\xb0\xd1\x80 \xd1\x803\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb0 \xd1\x803\xd0\xb2\xd0\xb5\xd0\xb6 \xd1\x802\xd0\xb2\xd0\xb5\xd0\xbe 1\xd1\x80\xd0\xb2\xd0\xb5\xd1\x82 \xd1\x801\xd0\xb2\xd0\xb8 \xd1\x803\xd0\xb2\xd0\xb8\xd0\xbd \xd1\x802\xd0\xb2\xd0\xb8\xd1\x82 \xd1\x801\xd0\xb2\xd0\xbe \xd1\x80\xd0\xb2\xd0\xbe1\xd0\xb72\xd0\xb4 \xd1\x801\xd0\xb2\xd1\x8c 2\xd1\x80\xd0\xb3 \xd1\x802\xd0\xb3\xd0\xb2 \xd1\x802\xd0\xb31\xd0\xbb \xd1\x802\xd0\xb3\xd0\xbd \xd1\x80\xd0\xb32\xd1\x80 2\xd1\x801\xd0\xb4 \xd1\x80\xd0\xb4\xd0\xb01\xd1\x81 \xd1\x802\xd0\xb41\xd0\xb2 \xd1\x80\xd0\xb42\xd0\xb6 \xd1\x80\xd0\xb4\xd0\xb82\xd0\xb0 \xd1\x802\xd0\xb4\xd0\xbb \xd1\x80\xd0\xb4\xd0\xbe\xd1\x812 \xd1\x802\xd0\xb4\xd1\x86 1\xd1\x80\xd0\xb5_ \xd1\x80\xd0\xb51\xd0\xb2\xd1\x80 \xd1\x80\xd0\xb5\xd0\xb32\xd0\xbb\xd1\x8f \xd1\x80\xd0\xb5\xd0\xb32\xd0\xbd \xd1\x80\xd0\xb52\xd0\xb41\xd0\xbe2\xd0\xbf \xd1\x80\xd0\xb52\xd0\xb4\xd0\xbe\xd1\x81 \xd1\x80\xd0\xb5\xd0\xb52\xd0\xb2 \xd1\x80\xd0\xb5\xd0\xb52\xd0\xb4 \xd1\x80\xd0\xb5\xd0\xb52\xd0\xbb \xd1\x80\xd0\xb53\xd0\xb62\xd0\xb4 1\xd1\x80\xd0\xb5\xd0\xb7\xd0\xba \xd1\x80\xd0\xb51\xd0\xb72\xd0\xbb \xd1\x80\xd0\xb51\xd0\xb7\xd0\xbd\xd0\xb0 1\xd1\x80\xd0\xb51\xd0\xb7\xd0\xbe \xd1\x80\xd0\xb51\xd0\xb7\xd1\x80 \xd1\x80\xd0\xb5\xd0\xb72\xd1\x83 1\xd1\x80\xd0\xb5\xd0\xb9\xd1\x88 \xd1\x80\xd0\xb51\xd0\xba2\xd0\xbb 1\xd1\x80\xd0\xb5\xd0\xba\xd1\x88 \xd1\x80\xd0\xb53\xd0\xbc\xd0\xbd\xd0\xbe 3\xd1\x80\xd0\xb5\xd0\xbc\xd0\xbe \xd1\x80\xd0\xb5\xd0\xbc\xd0\xbe2\xd0\xb33 1\xd1\x80\xd0\xb5\xd0\xbd\xd0\xba 1\xd1\x80\xd0\xb5\xd0\xbd\xd1\x8c \xd1\x80\xd0\xb51\xd0\xbe\xd0\xbd \xd1\x80\xd0\xb51\xd0\xbe\xd0\xbf \xd1\x80\xd0\xb51\xd0\xbe2\xd1\x80 \xd1\x80\xd0\xb51\xd0\xbe2\xd1\x84 \xd1\x80\xd0\xb51\xd0\xbe\xd1\x85 \xd1\x80\xd0\xb51\xd0\xbe2\xd1\x86 1\xd1\x80\xd0\xb5\xd0\xbf\xd1\x8c \xd1\x80\xd0\xb53\xd1\x802 \xd1\x80\xd0\xb5\xd1\x811\xd0\xba\xd0\xb8 \xd1\x80\xd0\xb51\xd1\x81\xd0\xbb \xd1\x80\xd0\xb51\xd1\x812\xd0\xbf \xd1\x80\xd0\xb5\xd1\x812\xd1\x813\xd0\xbc \xd1\x80\xd0\xb53\xd1\x81\xd1\x82\xd0\xb0 \xd1\x80\xd0\xb53\xd1\x81\xd1\x82\xd0\xbe \xd1\x80\xd0\xb51\xd1\x81\xd1\x87 \xd1\x80\xd0\xb51\xd1\x82\xd0\xb2 \xd1\x80\xd0\xb51\xd1\x822\xd1\x80 \xd1\x80\xd0\xb5\xd1\x83\xd1\x873\xd1\x82 \xd1\x80\xd0\xb51\xd1\x87\xd1\x82 \xd1\x80\xd0\xb53\xd1\x88\xd0\xbb \xd1\x803\xd0\xb6\xd0\xb0_ \xd1\x803\xd0\xb6\xd0\xb0\xd0\xbc \xd1\x803\xd0\xb6\xd0\xb0\xd0\xbd \xd1\x803\xd0\xb62\xd0\xb4 2\xd1\x80\xd0\xb7 \xd1\x801\xd0\xb72\xd0\xb2 \xd1\x801\xd0\xb7\xd0\xbe \xd1\x80\xd0\xb83\xd0\xb0 \xd1\x80\xd0\xb8\xd0\xb12 \xd1\x80\xd0\xb83\xd0\xb1\xd1\x80 \xd1\x80\xd0\xb83\xd0\xb22\xd0\xbd 2\xd1\x80\xd0\xb8\xd0\xb3\xd0\xb8 \xd1\x80\xd0\xb82\xd0\xb3\xd0\xbb\xd0\xbe \xd1\x80\xd0\xb83\xd0\xb32\xd0\xbd 2\xd1\x80\xd0\xb8\xd0\xb4\xd0\xb6 \xd1\x80\xd0\xb81\xd0\xb42\xd1\x80 \xd1\x80\xd0\xb8\xd0\xb52\xd0\xbb \xd1\x80\xd0\xb8\xd0\xb53\xd1\x80 \xd1\x80\xd0\xb8\xd0\xb72\xd0\xb2 \xd1\x80\xd0\xb8\xd0\xba2\xd1\x80 \xd1\x80\xd0\xb83\xd0\xbc2\xd0\xbd \xd1\x80\xd0\xb83\xd0\xbc2\xd1\x87 \xd1\x802\xd0\xb8\xd0\xbd 1\xd1\x80\xd0\xb8\xd0\xbd\xd1\x81 \xd1\x80\xd0\xb8\xd0\xbe2\xd0\xb7 \xd1\x80\xd0\xb8\xd0\xbe2\xd1\x81 \xd1\x80\xd0\xb81\xd0\xbe\xd1\x82 \xd1\x80\xd0\xb83\xd1\x802 \xd1\x80\xd0\xb81\xd1\x812 \xd1\x80\xd0\xb83\xd1\x81\xd0\xb1 2\xd1\x80\xd0\xb8\xd1\x81\xd0\xbf \xd1\x80\xd0\xb83\xd1\x81\xd1\x82\xd0\xb2 \xd1\x80\xd0\xb83\xd1\x822\xd1\x80 1\xd1\x80\xd0\xb8\xd1\x83 \xd1\x80\xd0\xb82\xd1\x84\xd0\xbb \xd1\x80\xd0\xb83\xd1\x84\xd1\x80 \xd1\x80\xd0\xb81\xd1\x85\xd0\xbb 1\xd1\x80\xd0\xb8\xd1\x86 1\xd1\x80\xd0\xb8\xd1\x88 \xd1\x80\xd0\xb8\xd1\x8d\xd1\x82\xd0\xb82 2\xd1\x801\xd0\xba \xd1\x802\xd0\xba\xd0\xb2 \xd1\x802\xd0\xba1\xd0\xbb \xd1\x80\xd0\xba1\xd1\x81 2\xd1\x801\xd0\xbb2 \xd1\x802\xd0\xbb\xd1\x8c \xd1\x80\xd0\xbb\xd1\x8e1 \xd1\x803\xd0\xbb\xd1\x8f 2\xd1\x80\xd0\xbc \xd1\x802\xd0\xbc\xd1\x87 2\xd1\x801\xd0\xbd \xd1\x80\xd0\xbd\xd0\xb0\xd1\x814 \xd1\x80\xd0\xbd\xd0\xb53\xd0\xbe \xd1\x80\xd0\xbd\xd0\xb51\xd1\x812 \xd1\x80\xd0\xbd\xd0\xbe3\xd1\x81\xd0\xbb 1\xd1\x80\xd0\xbe_ \xd1\x80\xd0\xbe2\xd0\xb1\xd0\xbb\xd1\x8e \xd1\x80\xd0\xbe1\xd0\xb12\xd1\x80 \xd1\x80\xd0\xbe2\xd0\xb2\xd0\xbb 1\xd1\x80\xd0\xbe\xd0\xb3\xd0\xbe\xd0\xbb 1\xd1\x80\xd0\xbe\xd0\xb3\xd1\x80\xd1\x83 \xd1\x80\xd0\xbe1\xd0\xb4\xd0\xb2 \xd1\x80\xd0\xbe3\xd0\xb42\xd0\xb7 \xd1\x80\xd0\xbe1\xd0\xb4\xd0\xbb \xd1\x80\xd0\xbe\xd0\xb42\xd0\xbb\xd0\xb5 \xd1\x80\xd0\xbe2\xd0\xb41\xd0\xbe\xd1\x82 \xd1\x80\xd0\xbe1\xd0\xb4\xd1\x80 1\xd1\x80\xd0\xbe\xd0\xb4\xd1\x8c \xd1\x80\xd0\xbe\xd0\xb52\xd0\xbb \xd1\x80\xd0\xbe\xd0\xb52\xd0\xbc \xd1\x80\xd0\xbe\xd0\xb52\xd1\x85 1\xd1\x80\xd0\xbe\xd0\xb7\xd0\xb0\xd1\x80 \xd1\x80\xd0\xbe1\xd0\xb72\xd0\xb2 \xd1\x80\xd0\xbe1\xd0\xb7\xd1\x80 3\xd1\x80\xd0\xbe\xd0\xb7\xd1\x8b\xd1\x81 \xd1\x80\xd0\xbe\xd0\xb82\xd1\x813 1\xd1\x80\xd0\xbe\xd0\xba\xd0\xbe\xd0\xbd 1\xd1\x80\xd0\xbe\xd0\xba\xd1\x80 1\xd1\x80\xd0\xbe\xd0\xbb\xd0\xb8\xd1\x81 1\xd1\x80\xd0\xbe\xd0\xbb\xd0\xb8\xd1\x86 1\xd1\x80\xd0\xbe\xd0\xbc\xd0\xbe\xd1\x80 1\xd1\x80\xd0\xbe\xd0\xbd\xd0\xb0\xd0\xb6 1\xd1\x80\xd0\xbe\xd0\xbd\xd0\xb0\xd0\xbf 1\xd1\x80\xd0\xbe\xd0\xbd\xd0\xbe\xd1\x81 \xd1\x80\xd0\xbe\xd0\xbe\xd0\xbf1\xd1\x80 \xd1\x80\xd0\xbe2\xd0\xbf\xd0\xbb\xd1\x8e \xd1\x80\xd0\xbe3\xd0\xbf\xd1\x81 2\xd1\x801\xd0\xbe\xd1\x80\xd0\xb3 \xd1\x80\xd0\xbe1\xd1\x802\xd0\xb6 \xd1\x80\xd0\xbe1\xd1\x80\xd1\x83 \xd1\x80\xd0\xbe1\xd1\x81\xd0\xba \xd1\x80\xd0\xbe2\xd1\x81\xd0\xba\xd0\xb8 \xd1\x80\xd0\xbe2\xd1\x81\xd0\xba\xd1\x83 1\xd1\x80\xd0\xbe\xd1\x81\xd0\xbb \xd1\x80\xd0\xbe1\xd1\x81\xd0\xbc \xd1\x80\xd0\xbe1\xd1\x812\xd0\xbf \xd1\x80\xd0\xbe\xd1\x812\xd1\x84 1\xd1\x80\xd0\xbe\xd1\x81\xd1\x88 1\xd1\x80\xd0\xbe\xd1\x81\xd1\x8e 1\xd1\x80\xd0\xbe\xd1\x822\xd0\xb2 1\xd1\x80\xd0\xbe\xd1\x82\xd0\xba \xd1\x80\xd0\xbe\xd1\x822\xd1\x80\xd0\xb8 1\xd1\x80\xd0\xbe\xd1\x83 \xd1\x80\xd0\xbe\xd1\x83\xd0\xb32 \xd1\x80\xd0\xbe2\xd1\x841\xd0\xb0\xd0\xba \xd1\x80\xd0\xbe2\xd1\x84\xd1\x80 \xd1\x80\xd0\xbe1\xd1\x85\xd0\xbb \xd1\x80\xd0\xbe\xd1\x882\xd0\xbb \xd1\x80\xd0\xbe3\xd1\x88\xd0\xbd 1\xd1\x80\xd0\xbe\xd1\x8f\xd0\xb7 2\xd1\x80\xd0\xbf \xd1\x80\xd0\xbf2\xd0\xbb\xd0\xbe \xd1\x802\xd0\xbf\xd0\xbb\xd1\x8e 2\xd1\x801\xd1\x80 4\xd1\x801\xd1\x81 \xd1\x80\xd1\x812\xd0\xba \xd1\x802\xd1\x81\xd0\xbd \xd1\x80\xd1\x812\xd0\xbf \xd1\x80\xd1\x81\xd1\x82\xd0\xb22 \xd1\x803\xd1\x81\xd1\x82\xd0\xb2\xd0\xbb 2\xd1\x801\xd1\x82 \xd1\x802\xd1\x82\xd0\xb0\xd0\xba\xd0\xba \xd1\x802\xd1\x821\xd0\xb0\xd0\xba\xd1\x82 \xd1\x802\xd1\x821\xd0\xb2 \xd1\x80\xd1\x823\xd0\xb2\xd0\xb0 \xd1\x80\xd1\x822\xd0\xb2\xd0\xbb \xd1\x802\xd1\x82\xd0\xbc \xd1\x802\xd1\x821\xd0\xbe\xd0\xb1 \xd1\x80\xd1\x821\xd0\xbe\xd1\x80\xd0\xb3 \xd1\x80\xd1\x821\xd1\x80\xd0\xb0 \xd1\x80\xd1\x822\xd1\x80\xd0\xb0\xd0\xbd \xd1\x80\xd1\x821\xd1\x80\xd0\xb5 \xd1\x80\xd1\x821\xd1\x80\xd0\xb8 \xd1\x80\xd1\x82\xd1\x83\xd1\x811 \xd1\x802\xd1\x821\xd1\x832\xd1\x87\xd0\xb8 \xd1\x803\xd1\x82\xd1\x8c\xd1\x8e \xd1\x80\xd1\x821\xd1\x8f\xd1\x87 1\xd1\x80\xd1\x83_ 1\xd1\x80\xd1\x83\xd0\xb1\xd0\xb0 \xd1\x80\xd1\x83\xd0\xb33\xd0\xbd \xd1\x80\xd1\x832\xd0\xb4\xd0\xb0\xd1\x80 1\xd1\x80\xd1\x83\xd0\xb6\xd0\xb5\xd0\xb9 2\xd1\x80\xd1\x83\xd0\xba\xd1\x81 1\xd1\x80\xd1\x83\xd0\xbb \xd1\x80\xd1\x83\xd1\x811\xd0\xba \xd1\x80\xd1\x83\xd1\x813\xd0\xbb \xd1\x80\xd1\x831\xd1\x81\xd1\x82\xd0\xb0 \xd1\x80\xd1\x83\xd1\x81\xd1\x821\xd1\x80 \xd1\x80\xd1\x833\xd1\x82\xd1\x8c 1\xd1\x80\xd1\x83\xd1\x85\xd0\xb0 1\xd1\x80\xd1\x83\xd1\x85\xd0\xbe 1\xd1\x80\xd1\x83\xd1\x87\xd0\xbd 2\xd1\x80\xd1\x84 \xd1\x80\xd1\x842\xd0\xbb 2\xd1\x80\xd1\x85 \xd1\x802\xd1\x85\xd0\xb2 \xd1\x802\xd1\x851\xd0\xb8\xd0\xbd \xd1\x80\xd1\x851\xd0\xbb \xd1\x801\xd1\x852\xd0\xbb\xd0\xbe \xd1\x802\xd1\x851\xd0\xbe\xd0\xbf \xd1\x80\xd1\x851\xd1\x80 2\xd1\x80\xd1\x86 \xd1\x802\xd1\x86\xd0\xb2 2\xd1\x801\xd1\x87 \xd1\x802\xd1\x87\xd0\xbb \xd1\x802\xd1\x87\xd0\xbc 2\xd1\x80\xd1\x88 \xd1\x803\xd1\x882\xd0\xbc \xd1\x80\xd1\x882\xd1\x82 2\xd1\x80\xd1\x89 2\xd1\x80\xd1\x8a 1\xd1\x80\xd1\x8b_ 1\xd1\x80\xd1\x8b\xd0\xb1 \xd1\x80\xd1\x8b2\xd0\xb4\xd0\xb2 2\xd1\x80\xd1\x8b\xd0\xb7 \xd1\x80\xd1\x8b2\xd0\xba\xd0\xbb 1\xd1\x80\xd1\x8b\xd0\xbc \xd1\x80\xd1\x8b2\xd1\x811\xd0\xba \xd1\x80\xd1\x8b2\xd1\x851 2\xd1\x80\xd1\x8c_ 1\xd1\x80\xd1\x8c\xd0\xb5 1\xd1\x80\xd1\x8c\xd0\xb8 2\xd1\x80\xd1\x8c\xd0\xba 2\xd1\x80\xd1\x8c\xd1\x81 2\xd1\x80\xd1\x8c\xd1\x82 1\xd1\x80\xd1\x8c\xd1\x8e 1\xd1\x80\xd1\x8c\xd1\x8f \xd1\x80\xd1\x8d1\xd0\xbb \xd1\x802\xd1\x8e 1\xd1\x80\xd1\x8e_ 1\xd1\x80\xd1\x8e\xd1\x81 \xd1\x80\xd1\x8f1\xd0\xb2\xd0\xb8 1\xd1\x80\xd1\x8f\xd1\x8e 1\xd1\x81\xd0\xb0 \xd1\x81\xd0\xb02\xd0\xb1\xd0\xbb \xd1\x81\xd0\xb02\xd0\xb4\xd1\x8c \xd1\x81\xd0\xb02\xd0\xba\xd0\xb2 \xd1\x81\xd0\xb02\xd0\xba\xd0\xbb 2\xd1\x811\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xbf \xd1\x811\xd0\xb0\xd0\xbf\xd0\xbf 2\xd1\x811\xd0\xb0\xd1\x80\xd0\xba 2\xd1\x811\xd0\xb0\xd1\x82\xd0\xbb \xd1\x81\xd0\xb01\xd1\x82\xd1\x80 \xd1\x81\xd0\xb02\xd1\x83\xd0\xbd \xd1\x81\xd0\xb02\xd1\x841\xd1\x80 \xd1\x81\xd0\xb01\xd1\x852 1\xd1\x81\xd0\xb12 2\xd1\x81\xd0\xb1\xd0\xb53\xd0\xb72 \xd1\x81\xd0\xb1\xd0\xb5\xd0\xb7\xd0\xbe3 \xd1\x81\xd0\xb1\xd0\xb53\xd1\x812 2\xd1\x813\xd0\xb1\xd1\x83 \xd1\x812\xd0\xb1\xd1\x8b 2\xd1\x81\xd0\xb1\xd1\x8e 1\xd1\x812\xd0\xb2 2\xd1\x813\xd0\xb2\xd0\xb5\xd0\xbd \xd1\x81\xd0\xb32 \xd1\x812\xd0\xb3\xd0\xb8 \xd1\x812\xd0\xb3\xd0\xbd \xd1\x812\xd0\xb3\xd0\xbe 1\xd1\x81\xd0\xb42 \xd1\x812\xd0\xb4\xd0\xb0 \xd1\x812\xd0\xb4\xd0\xb5 \xd1\x813\xd0\xb4\xd0\xb8 \xd1\x812\xd0\xb4\xd0\xbe 1\xd1\x812\xd0\xb5 \xd1\x81\xd0\xb5\xd0\xb32\xd0\xbd \xd1\x81\xd0\xb51\xd0\xb72 \xd1\x81\xd0\xb51\xd0\xba\xd0\xb2 \xd1\x81\xd0\xb5\xd0\xba1\xd0\xbb \xd1\x81\xd0\xb52\xd0\xba1\xd1\x80 \xd1\x81\xd0\xb5\xd0\xba\xd1\x814 \xd1\x81\xd0\xb5\xd0\xbc\xd0\xb81 \xd1\x81\xd0\xb5\xd1\x80\xd0\xb52\xd0\xb1 \xd1\x81\xd0\xb52\xd1\x81\xd0\xba \xd1\x81\xd0\xb52\xd1\x81\xd1\x82 \xd1\x81\xd0\xb53\xd1\x81\xd1\x82\xd0\xb0 \xd1\x81\xd0\xb53\xd1\x81\xd1\x82\xd0\xb5 \xd1\x81\xd0\xb5\xd1\x81\xd1\x821\xd1\x80 1\xd1\x812\xd0\xb6 \xd1\x811\xd0\xb7 1\xd1\x812\xd0\xb8 3\xd1\x81\xd0\xb8\xd0\xb7 \xd1\x81\xd0\xb81\xd0\xbe\xd0\xbc \xd1\x81\xd0\xb81\xd0\xbe\xd0\xbf \xd1\x81\xd0\xb82\xd0\xbf\xd0\xbb \xd1\x81\xd0\xb81\xd1\x85 4\xd1\x81\xd0\xba_ 2\xd1\x81\xd0\xba\xd0\xb0\xd0\xbc \xd1\x812\xd0\xba\xd0\xb0\xd0\xbd\xd0\xb4 1\xd1\x812\xd0\xba\xd0\xb0\xd1\x84 2\xd1\x81\xd0\xba\xd0\xb0\xd1\x85 \xd1\x81\xd0\xba2\xd0\xb2\xd0\xb0 \xd1\x812\xd0\xba\xd0\xb2\xd0\xb8 3\xd1\x81\xd0\xba\xd0\xb8\xd0\xbd\xd0\xbe \xd1\x81\xd0\xba2\xd0\xbb \xd1\x812\xd0\xba\xd0\xbb\xd1\x8f \xd1\x81\xd0\xba3\xd0\xbb\xd1\x8f\xd0\xb2 2\xd1\x81\xd0\xba\xd0\xbd \xd1\x811\xd0\xba\xd0\xbe\xd0\xbd 2\xd1\x81\xd0\xba\xd0\xbe\xd0\xbd\xd0\xb0 \xd1\x812\xd0\xba\xd0\xbe\xd0\xbf\xd1\x81 2\xd1\x81\xd0\xba\xd0\xbe\xd1\x88 \xd1\x81\xd0\xba2\xd1\x80 \xd1\x811\xd0\xba\xd1\x80\xd0\xb0 2\xd1\x81\xd0\xba\xd1\x80\xd0\xb8\xd0\xb1 \xd1\x81\xd0\xba1\xd1\x81 2\xd1\x81\xd0\xba\xd1\x83\xd0\xb5 2\xd1\x813\xd0\xbb\xd0\xb0_ 1\xd1\x81\xd0\xbb\xd0\xb0\xd0\xb2 1\xd1\x81\xd0\xbb\xd0\xb0\xd0\xb4 \xd1\x811\xd0\xbb\xd0\xb0\xd0\xbc 2\xd1\x813\xd0\xbb\xd0\xb0\xd1\x8f \xd1\x813\xd0\xbb\xd0\xb5\xd0\xb2 \xd1\x813\xd0\xbb\xd0\xb5\xd0\xb5 \xd1\x811\xd0\xbb\xd0\xb5\xd0\xb9 \xd1\x81\xd0\xbb\xd0\xb5\xd0\xbe2 \xd1\x811\xd0\xbb\xd0\xb5\xd1\x82 \xd1\x813\xd0\xbb\xd0\xb5\xd1\x8e 2\xd1\x813\xd0\xbb\xd0\xb8_ 2\xd1\x81\xd0\xbb\xd0\xb8\xd1\x86 2\xd1\x813\xd0\xbb\xd0\xbe_ \xd1\x812\xd0\xbb\xd0\xbe\xd0\xb6 \xd1\x813\xd0\xbb\xd0\xbe\xd0\xbc\xd1\x83 2\xd1\x813\xd0\xbb\xd0\xbe\xd1\x81 2\xd1\x813\xd0\xbb\xd1\x83\xd1\x8e 2\xd1\x813\xd0\xbb\xd1\x8b\xd0\xb5 2\xd1\x813\xd0\xbb\xd1\x8b\xd0\xb9 2\xd1\x813\xd0\xbb\xd1\x8b\xd0\xbc 2\xd1\x81\xd0\xbb\xd1\x8c \xd1\x811\xd0\xbb\xd1\x8e\xd1\x81 2\xd1\x813\xd0\xbb\xd1\x8f \xd1\x812\xd0\xbc 1\xd1\x81\xd0\xbc\xd0\xb5\xd1\x81 \xd1\x814\xd0\xbc\xd0\xb5\xd1\x8f \xd1\x813\xd0\xbc\xd1\x83\xd1\x80 \xd1\x811\xd0\xbd 1\xd1\x812\xd0\xbd\xd0\xb0\xd0\xb1 \xd1\x812\xd0\xbd\xd0\xb0\xd1\x81 2\xd1\x81\xd0\xbd\xd0\xb0\xd1\x8f 1\xd1\x812\xd0\xbd\xd0\xb5\xd0\xb6 2\xd1\x813\xd0\xbd\xd0\xb8\xd0\xba 2\xd1\x81\xd0\xbd\xd0\xbe \xd1\x81\xd0\xbd\xd0\xbe1\xd0\xb72 2\xd1\x81\xd0\xbd\xd1\x83\xd1\x8e 2\xd1\x813\xd0\xbd\xd1\x8b 1\xd1\x81\xd0\xbe \xd1\x81\xd0\xbe1\xd0\xb12\xd1\x80 \xd1\x812\xd0\xbe\xd0\xb2 \xd1\x81\xd0\xbe\xd0\xb22\xd1\x80 \xd1\x81\xd0\xbe1\xd0\xb4 \xd1\x81\xd0\xbe1\xd0\xb72 \xd1\x81\xd0\xbe1\xd0\xbb2\xd0\xb3 \xd1\x81\xd0\xbe3\xd0\xbc2 \xd1\x81\xd0\xbe2\xd1\x80\xd0\xb8\xd0\xb5 \xd1\x81\xd0\xbe1\xd1\x80\xd1\x83 \xd1\x81\xd0\xbe1\xd1\x81\xd0\xba \xd1\x81\xd0\xbe1\xd1\x812\xd0\xbf \xd1\x81\xd0\xbe2\xd1\x81\xd1\x8c \xd1\x81\xd0\xbe\xd1\x822\xd1\x80 \xd1\x81\xd0\xbe1\xd1\x87\xd0\xbb \xd1\x81\xd0\xbe\xd1\x882\xd0\xbb \xd1\x81\xd0\xbf2 \xd1\x812\xd0\xbf\xd0\xb0\xd0\xb2 \xd1\x812\xd0\xbf\xd0\xb5\xd0\xb5 \xd1\x812\xd0\xbf\xd0\xb5\xd0\xbb \xd1\x812\xd0\xbf\xd0\xb5\xd0\xbd \xd1\x812\xd0\xbf\xd0\xb5\xd1\x85 1\xd1\x812\xd0\xbf\xd0\xb5\xd1\x86 \xd1\x812\xd0\xbf\xd0\xb5\xd1\x88 \xd1\x812\xd0\xbf\xd0\xb5\xd1\x8e \xd1\x812\xd0\xbf\xd0\xb8\xd0\xbc 2\xd1\x81\xd0\xbf\xd0\xb8\xd1\x81\xd1\x8f \xd1\x813\xd0\xbf\xd0\xbd \xd1\x81\xd0\xbf\xd0\xbe1\xd0\xb72 2\xd1\x81\xd0\xbf\xd0\xbe\xd0\xbb \xd1\x812\xd0\xbf\xd0\xbe\xd1\x81 2\xd1\x81\xd0\xbf\xd1\x8c 1\xd1\x81\xd1\x80 2\xd1\x81\xd1\x80_ \xd1\x812\xd1\x80\xd0\xb0\xd0\xb1 \xd1\x81\xd1\x80\xd0\xb02\xd1\x81 \xd1\x811\xd1\x80\xd0\xb0\xd1\x82 \xd1\x81\xd1\x80\xd0\xb52\xd0\xb11 \xd1\x81\xd1\x80\xd0\xb53\xd0\xb4\xd0\xbe 2\xd1\x811\xd1\x81 \xd1\x81\xd1\x81\xd0\xb0\xd0\xbd\xd0\xb42 \xd1\x812\xd1\x81\xd0\xb1 \xd1\x81\xd1\x813\xd0\xb2\xd0\xbe 4\xd1\x815\xd1\x81\xd0\xb8 \xd1\x813\xd1\x812\xd0\xba \xd1\x81\xd1\x812\xd0\xbb \xd1\x812\xd1\x81\xd0\xbd \xd1\x813\xd1\x812\xd0\xbd\xd0\xb5 \xd1\x812\xd1\x81\xd0\xbe\xd1\x80\xd0\xb8 \xd1\x81\xd1\x812\xd0\xbf \xd1\x81\xd1\x81\xd1\x822 \xd1\x81\xd1\x812\xd1\x87 2\xd1\x81\xd1\x82_ 1\xd1\x81\xd1\x82\xd0\xb0_ 2\xd1\x81\xd1\x82\xd0\xb1 4\xd1\x81\xd1\x82\xd0\xb2_ \xd1\x81\xd1\x821\xd0\xb2\xd0\xb5\xd1\x80 2\xd1\x81\xd1\x82\xd0\xb2\xd0\xbb \xd1\x81\xd1\x822\xd0\xb2\xd0\xbe\xd0\xbb \xd1\x81\xd1\x822\xd0\xb2\xd1\x8f \xd1\x812\xd1\x82\xd0\xb5 1\xd1\x814\xd1\x82\xd0\xb5_ 1\xd1\x81\xd1\x82\xd0\xb5\xd0\xb9 1\xd1\x81\xd1\x82\xd0\xb5\xd0\xbb 1\xd1\x81\xd1\x82\xd0\xb5\xd0\xbd_ \xd1\x813\xd1\x82\xd0\xb5\xd1\x82_ \xd1\x813\xd1\x82\xd0\xb5\xd1\x82\xd0\xb5 \xd1\x81\xd1\x82\xd0\xb53\xd1\x85 \xd1\x813\xd1\x82\xd0\xb5\xd1\x88 1\xd1\x81\xd1\x82\xd0\xb8 \xd1\x812\xd1\x82\xd0\xb8\xd0\xb5 \xd1\x812\xd1\x82\xd0\xb8\xd0\xb8 2\xd1\x81\xd1\x82\xd0\xb8\xd0\xbc\xd0\xbf 2\xd1\x81\xd1\x82\xd0\xb8\xd0\xbd\xd0\xb4 2\xd1\x81\xd1\x82\xd0\xb8\xd0\xbd\xd1\x84 2\xd1\x81\xd1\x82\xd0\xb8\xd0\xbd\xd1\x8a \xd1\x812\xd1\x82\xd0\xb8\xd1\x87 \xd1\x812\xd1\x82\xd0\xb8\xd1\x88\xd0\xba \xd1\x812\xd1\x82\xd0\xb8\xd1\x8e 2\xd1\x81\xd1\x82\xd0\xba \xd1\x81\xd1\x822\xd0\xbb\xd0\xb0 \xd1\x813\xd1\x822\xd0\xbb\xd0\xb5 2\xd1\x81\xd1\x82\xd0\xbb\xd0\xb8 \xd1\x81\xd1\x822\xd0\xbb\xd0\xb8\xd0\xbb \xd1\x81\xd1\x822\xd0\xbb\xd0\xb8\xd1\x82 2\xd1\x81\xd1\x82\xd0\xbb\xd1\x8f 2\xd1\x81\xd1\x82\xd0\xbc 2\xd1\x81\xd1\x82\xd0\xbd 1\xd1\x81\xd1\x82\xd0\xbe_ \xd1\x812\xd1\x82\xd0\xbe1\xd0\xb1 1\xd1\x81\xd1\x82\xd0\xbe\xd0\xb2 1\xd1\x81\xd1\x82\xd0\xbe\xd0\xb3 \xd1\x81\xd1\x82\xd0\xbe2\xd0\xb33\xd0\xbd 1\xd1\x81\xd1\x82\xd0\xbe\xd0\xb4 1\xd1\x81\xd1\x82\xd0\xbe\xd0\xb5 3\xd1\x812\xd1\x82\xd0\xbe\xd0\xb8 1\xd1\x81\xd1\x82\xd0\xbe\xd0\xba 1\xd1\x81\xd1\x82\xd0\xbe\xd0\xbc 1\xd1\x81\xd1\x82\xd0\xbe\xd0\xbd 2\xd1\x81\xd1\x82\xd0\xbe\xd1\x80\xd0\xb3 2\xd1\x81\xd1\x82\xd0\xbe\xd1\x80\xd0\xb6 2\xd1\x81\xd1\x82\xd0\xbe\xd1\x80\xd1\x81 1\xd1\x81\xd1\x82\xd0\xbe\xd1\x81 1\xd1\x81\xd1\x82\xd0\xbe\xd1\x82 \xd1\x812\xd1\x82\xd0\xbe\xd1\x86 1\xd1\x81\xd1\x82\xd0\xbe\xd1\x8e 2\xd1\x81\xd1\x82\xd0\xbf 2\xd1\x81\xd1\x82\xd1\x80_ \xd1\x81\xd1\x82\xd1\x80\xd0\xb0\xd1\x812 4\xd1\x81\xd1\x82\xd1\x80\xd0\xb0\xd1\x8f 2\xd1\x81\xd1\x82\xd1\x80\xd0\xb5\xd0\xb4 \xd1\x81\xd1\x821\xd1\x80\xd0\xb5\xd0\xb9 2\xd1\x81\xd1\x82\xd1\x80\xd0\xb8\xd0\xb2 \xd1\x81\xd1\x821\xd1\x80\xd0\xb8\xd0\xb7 2\xd1\x81\xd1\x82\xd1\x80\xd0\xb8\xd0\xbb 2\xd1\x81\xd1\x82\xd1\x80\xd0\xb8\xd1\x89 \xd1\x81\xd1\x821\xd1\x80\xd0\xbe\xd0\xb0 \xd1\x814\xd1\x821\xd1\x80\xd0\xbe\xd0\xb2 \xd1\x81\xd1\x821\xd1\x80\xd0\xbe\xd0\xb4 \xd1\x81\xd1\x821\xd1\x80\xd0\xbe\xd1\x85 \xd1\x81\xd1\x822\xd1\x80\xd1\x83\xd0\xb1 \xd1\x81\xd1\x821\xd1\x80\xd1\x83\xd1\x88 2\xd1\x81\xd1\x82\xd1\x81 \xd1\x811\xd1\x82\xd1\x83\xd1\x82 1\xd1\x81\xd1\x82\xd1\x83\xd1\x8e 2\xd1\x81\xd1\x82\xd1\x84 2\xd1\x81\xd1\x82\xd1\x86 1\xd1\x81\xd1\x82\xd1\x8b \xd1\x812\xd1\x82\xd1\x8b\xd0\xb2 \xd1\x814\xd1\x82\xd1\x8c 2\xd1\x81\xd1\x82\xd1\x8c_ 2\xd1\x81\xd1\x82\xd1\x8c\xd1\x81 3\xd1\x81\xd1\x82\xd1\x8c\xd1\x8e 1\xd1\x81\xd1\x82\xd1\x8c\xd1\x8f 1\xd1\x81\xd1\x82\xd1\x8f\xd0\xbc 1\xd1\x81\xd1\x82\xd1\x8f\xd1\x85 1\xd1\x81\xd1\x83 \xd1\x81\xd1\x832\xd0\xb1 \xd1\x81\xd1\x83\xd0\xb11\xd0\xb02 \xd1\x81\xd1\x83\xd0\xb11\xd0\xbe \xd1\x81\xd1\x831\xd0\xb2 \xd1\x81\xd1\x833\xd0\xb3\xd0\xbb \xd1\x81\xd1\x832\xd0\xb5\xd0\xb2 \xd1\x81\xd1\x832\xd0\xb7 \xd1\x81\xd1\x831\xd0\xba\xd1\x80 \xd1\x81\xd1\x83\xd0\xbc\xd0\xb01 \xd1\x81\xd1\x83\xd0\xbf\xd0\xb52 \xd1\x81\xd1\x83\xd1\x813\xd0\xbb \xd1\x81\xd1\x83\xd1\x813\xd0\xbf \xd1\x81\xd1\x831\xd1\x81\xd1\x82 \xd1\x81\xd1\x83\xd1\x821\xd1\x80 \xd1\x81\xd1\x832\xd1\x843 \xd1\x81\xd1\x831\xd1\x85 1\xd1\x812\xd1\x84\xd0\xb5 \xd1\x811\xd1\x852 1\xd1\x812\xd1\x85\xd0\xb5 2\xd1\x81\xd1\x86\xd0\xb0 \xd1\x812\xd1\x86\xd0\xb5\xd0\xbd\xd0\xb0 2\xd1\x813\xd1\x86\xd0\xb8 2\xd1\x81\xd1\x86\xd0\xbe \xd1\x81\xd1\x872 1\xd1\x81\xd1\x87\xd0\xb0 \xd1\x812\xd1\x87\xd0\xb0\xd1\x81 \xd1\x81\xd1\x87\xd0\xb52\xd1\x811\xd0\xba \xd1\x813\xd1\x87\xd0\xb8\xd0\xb2 2\xd1\x81\xd1\x87\xd0\xb8\xd0\xba \xd1\x812\xd1\x87\xd0\xb8\xd1\x82 \xd1\x811\xd1\x87\xd0\xbb 2\xd1\x81\xd1\x87\xd0\xbe \xd1\x81\xd1\x882 \xd1\x813\xd1\x88\xd0\xbd 1\xd1\x81\xd1\x8a2 \xd1\x81\xd1\x8a\xd0\xb53\xd0\xb4 \xd1\x81\xd1\x8a\xd0\xb53\xd0\xbb 1\xd1\x81\xd1\x8b \xd1\x81\xd1\x8b2\xd0\xb31 \xd1\x81\xd1\x8b2\xd0\xb7 \xd1\x81\xd1\x8b2\xd0\xbf1\xd0\xbb \xd1\x81\xd1\x8b2\xd1\x81 \xd1\x81\xd1\x8b\xd1\x811\xd0\xba\xd0\xb0 2\xd1\x81\xd1\x8c_ 1\xd1\x81\xd1\x8c\xd0\xb5 2\xd1\x81\xd1\x8c\xd0\xba 2\xd1\x81\xd1\x8c\xd1\x82 1\xd1\x81\xd1\x8c\xd1\x8e 1\xd1\x81\xd1\x8c\xd1\x8f \xd1\x81\xd1\x8d1\xd1\x80 \xd1\x812\xd1\x8d\xd1\x81 1\xd1\x812\xd1\x8e \xd1\x81\xd1\x8e1\xd1\x81 1\xd1\x81\xd1\x8f 2\xd1\x81\xd1\x8f\xd0\xb7 \xd1\x81\xd1\x8f3\xd1\x82\xd1\x8c \xd1\x82\xd0\xb02\xd0\xb1\xd0\xbb \xd1\x82\xd0\xb0\xd0\xb12\xd1\x80 \xd1\x82\xd0\xb01\xd0\xb2\xd1\x80\xd0\xb8 1\xd1\x82\xd0\xb0\xd0\xb3 \xd1\x82\xd0\xb02\xd0\xb3\xd0\xbd \xd1\x82\xd0\xb01\xd0\xb72 \xd1\x82\xd0\xb0\xd0\xba3\xd0\xbb\xd0\xb5 \xd1\x822\xd0\xb0\xd0\xbd \xd1\x82\xd0\xb02\xd0\xbf\xd0\xbb 1\xd1\x82\xd0\xb0\xd1\x81 \xd1\x82\xd0\xb01\xd1\x81\xd1\x82 \xd1\x82\xd0\xb01\xd1\x82\xd1\x80 1\xd1\x82\xd0\xb0\xd1\x89 2\xd1\x821\xd0\xb12 2\xd1\x82\xd0\xb2_ 2\xd1\x822\xd0\xb2\xd0\xb0 \xd1\x821\xd0\xb2\xd0\xb5\xd0\xb9 \xd1\x821\xd0\xb2\xd0\xb5\xd0\xbb \xd1\x821\xd0\xb2\xd0\xb5\xd1\x82 2\xd1\x82\xd0\xb2\xd0\xb8 \xd1\x821\xd0\xb2\xd0\xbe\xd0\xb5 \xd1\x821\xd0\xb2\xd0\xbe1\xd0\xb7 2\xd1\x821\xd0\xb2\xd0\xbe\xd0\xb9 \xd1\x821\xd0\xb2\xd0\xbe\xd1\x81 2\xd1\x82\xd0\xb2\xd0\xbe\xd1\x8e 2\xd1\x821\xd0\xb2\xd1\x80 2\xd1\x82\xd0\xb2\xd1\x83 2\xd1\x82\xd0\xb2\xd1\x8b 2\xd1\x82\xd0\xb2\xd1\x8f 2\xd1\x82\xd0\xb3 2\xd1\x821\xd0\xb4 1\xd1\x822\xd0\xb5 \xd1\x82\xd0\xb52\xd0\xb3\xd0\xbd \xd1\x82\xd0\xb51\xd0\xb4 \xd1\x82\xd0\xb51\xd0\xb7\xd0\xbe 3\xd1\x82\xd0\xb5\xd0\xba\xd0\xb0 \xd1\x82\xd0\xb5\xd0\xba1\xd0\xbb 3\xd1\x82\xd0\xb5\xd0\xba\xd1\x88 \xd1\x82\xd0\xb5\xd0\xbb\xd0\xb51\xd0\xbe \xd1\x82\xd0\xb5\xd0\xbc2\xd0\xb11 \xd1\x82\xd0\xb52\xd0\xbe3\xd0\xb4 \xd1\x82\xd0\xb51\xd0\xbe\xd1\x85 \xd1\x82\xd0\xb54\xd0\xbf1\xd0\xbb \xd1\x82\xd0\xb52\xd1\x80\xd0\xb0\xd0\xba \xd1\x82\xd0\xb5\xd1\x80\xd0\xb52\xd0\xbe 3\xd1\x82\xd0\xb5\xd1\x80\xd0\xb7 \xd1\x82\xd0\xb5\xd1\x803\xd0\xba 3\xd1\x82\xd0\xb5\xd1\x80\xd1\x8f \xd1\x82\xd0\xb52\xd1\x81\xd0\xba\xd0\xb0 \xd1\x82\xd0\xb52\xd1\x811\xd0\xba\xd0\xb8 \xd1\x82\xd0\xb52\xd1\x811\xd0\xba\xd0\xbe \xd1\x82\xd0\xb52\xd1\x81\xd0\xba\xd1\x83 \xd1\x82\xd0\xb5\xd1\x81\xd1\x822 \xd1\x82\xd0\xb52\xd1\x85\xd0\xbe 2\xd1\x82\xd0\xb6 2\xd1\x821\xd0\xb7 \xd1\x82\xd0\xb8\xd0\xb02\xd0\xbc \xd1\x82\xd0\xb82\xd0\xb1\xd0\xbb \xd1\x82\xd0\xb83\xd0\xb42 \xd1\x82\xd0\xb81\xd0\xb7\xd0\xbd\xd0\xb0 \xd1\x82\xd0\xb8\xd0\xb82 \xd1\x82\xd0\xb8\xd0\xb8\xd1\x811 \xd1\x82\xd0\xb8\xd0\xba2 \xd1\x82\xd0\xb8\xd0\xbb\xd0\xb02\xd0\xbc \xd1\x821\xd0\xb8\xd0\xbc\xd0\xbf 2\xd1\x821\xd0\xb8\xd0\xbd\xd0\xb2 \xd1\x821\xd0\xb8\xd0\xbd\xd0\xb4 2\xd1\x82\xd0\xb8\xd0\xbd\xd0\xb6 2\xd1\x82\xd0\xb8\xd0\xbd\xd1\x84 \xd1\x82\xd0\xb81\xd1\x812\xd0\xbb \xd1\x82\xd0\xb83\xd1\x81\xd1\x82\xd0\xb2 \xd1\x82\xd0\xb83\xd1\x842\xd1\x80 \xd1\x82\xd0\xb81\xd1\x85\xd1\x80 2\xd1\x821\xd0\xba2 3\xd1\x822\xd0\xba\xd0\xb0\xd0\xb2 3\xd1\x822\xd0\xba\xd0\xb0\xd0\xbd 3\xd1\x822\xd0\xba\xd0\xb5\xd1\x82 3\xd1\x82\xd0\xba\xd0\xbd 2\xd1\x821\xd0\xbb \xd1\x82\xd0\xbb\xd0\xbe2\xd0\xb1 \xd1\x822\xd0\xbb\xd1\x8c \xd1\x82\xd0\xbc2 \xd1\x82\xd0\xbc\xd0\xb82\xd1\x81 \xd1\x82\xd0\xbc\xd0\xb8\xd1\x81\xd1\x821 \xd1\x823\xd0\xbc\xd1\x89 2\xd1\x821\xd0\xbd \xd1\x82\xd0\xbe2\xd0\xb1\xd0\xb5\xd1\x81 \xd1\x82\xd0\xbe1\xd0\xb12\xd0\xbb 2\xd1\x82\xd0\xbe\xd0\xb1\xd1\x8a \xd1\x82\xd0\xbe2\xd0\xb2\xd0\xbb \xd1\x82\xd0\xbe1\xd0\xb4 \xd1\x82\xd0\xbe3\xd0\xb42\xd1\x80 \xd1\x82\xd0\xbe1\xd0\xb72 \xd1\x82\xd0\xbe\xd0\xba2\xd1\x80 2\xd1\x821\xd0\xbe\xd0\xbc\xd0\xbc 2\xd1\x82\xd0\xbe\xd0\xbc\xd1\x81 2\xd1\x82\xd0\xbe\xd0\xbd\xd0\xb3 1\xd1\x82\xd0\xbe\xd1\x80\xd0\xb3 1\xd1\x82\xd0\xbe\xd1\x80\xd0\xb6 1\xd1\x82\xd0\xbe\xd1\x80\xd1\x81 \xd1\x82\xd0\xbe1\xd1\x80\xd1\x83 1\xd1\x82\xd0\xbe\xd1\x80\xd1\x88 \xd1\x82\xd0\xbe1\xd1\x812\xd0\xbd \xd1\x82\xd0\xbe1\xd1\x812\xd0\xbf \xd1\x82\xd0\xbe1\xd1\x812\xd1\x86 2\xd1\x82\xd0\xbe\xd1\x82\xd0\xb4 \xd1\x82\xd0\xbe3\xd1\x82\xd0\xba 1\xd1\x82\xd0\xbe\xd1\x89 2\xd1\x82\xd0\xbf2 \xd1\x82\xd0\xbf\xd0\xb01\xd1\x82 \xd1\x821\xd1\x80\xd0\xb0\xd0\xb3\xd0\xb0 2\xd1\x821\xd1\x80\xd0\xb0\xd0\xb6 2\xd1\x82\xd1\x80\xd0\xb1 2\xd1\x82\xd1\x80\xd0\xb2 2\xd1\x82\xd1\x80\xd0\xb3 2\xd1\x82\xd1\x80\xd0\xb4 \xd1\x82\xd1\x80\xd0\xb4\xd0\xbe2 \xd1\x821\xd1\x80\xd0\xb5\xd0\xb0 1\xd1\x82\xd1\x80\xd0\xb5\xd0\xb1\xd0\xbe 1\xd1\x82\xd1\x80\xd0\xb5\xd0\xb1\xd1\x83 \xd1\x821\xd1\x80\xd0\xb5\xd0\xb1\xd1\x8c \xd1\x821\xd1\x80\xd0\xb5\xd0\xb2\xd0\xb5 \xd1\x821\xd1\x80\xd0\xb5\xd0\xb2\xd1\x88 \xd1\x821\xd1\x80\xd0\xb5\xd0\xb3 \xd1\x821\xd1\x80\xd0\xb5\xd0\xb4 \xd1\x821\xd1\x80\xd0\xb5\xd0\xb5 \xd1\x821\xd1\x80\xd0\xb5\xd0\xb7\xd0\xb0 \xd1\x821\xd1\x80\xd0\xb5\xd0\xb7\xd0\xbd \xd1\x82\xd1\x80\xd0\xb5\xd0\xbf1\xd0\xbb 3\xd1\x82\xd1\x80\xd0\xb52\xd1\x81 \xd1\x82\xd1\x80\xd0\xb5\xd1\x811\xd0\xba \xd1\x821\xd1\x80\xd0\xb5\xd1\x81\xd1\x82 \xd1\x821\xd1\x80\xd0\xb5\xd1\x82\xd1\x83 3\xd1\x822\xd1\x80\xd0\xb52\xd1\x85 \xd1\x821\xd1\x80\xd0\xb5\xd1\x86 \xd1\x822\xd1\x80\xd0\xb5\xd1\x88\xd1\x8c \xd1\x821\xd1\x80\xd0\xb5\xd1\x8e 1\xd1\x82\xd1\x80\xd0\xb8\xd0\xb1 \xd1\x821\xd1\x80\xd0\xb8\xd0\xb2 \xd1\x82\xd1\x80\xd0\xb82\xd0\xb31\xd0\xbb \xd1\x821\xd1\x80\xd0\xb8\xd0\xbb \xd1\x821\xd1\x80\xd0\xb8\xd0\xbc 4\xd1\x82\xd1\x80\xd0\xb8\xd0\xbd\xd1\x81 \xd1\x82\xd1\x80\xd0\xb81\xd0\xbe \xd1\x821\xd1\x80\xd0\xb8\xd1\x82 \xd1\x82\xd1\x80\xd0\xb83\xd1\x84 \xd1\x821\xd1\x80\xd0\xb8\xd1\x89 2\xd1\x82\xd1\x80\xd0\xbc 2\xd1\x82\xd1\x80\xd0\xbd \xd1\x821\xd1\x80\xd0\xbe\xd0\xb3\xd0\xbb \xd1\x821\xd1\x80\xd0\xbe\xd0\xb8\xd0\xb4 2\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9 \xd1\x82\xd1\x80\xd0\xbe3\xd0\xbf\xd0\xbb \xd1\x821\xd1\x80\xd0\xbe\xd1\x80 \xd1\x821\xd1\x80\xd0\xbe\xd1\x81\xd0\xbe \xd1\x82\xd1\x80\xd0\xbe3\xd1\x82 4\xd1\x823\xd1\x80\xd0\xbe\xd1\x86 2\xd1\x82\xd1\x80\xd0\xbe\xd1\x8e 2\xd1\x82\xd1\x80\xd0\xbf 2\xd1\x82\xd1\x80\xd1\x80 1\xd1\x82\xd1\x80\xd1\x83\xd0\xb1 \xd1\x822\xd1\x80\xd1\x83\xd0\xb4 2\xd1\x82\xd1\x80\xd1\x83\xd0\xba \xd1\x822\xd1\x80\xd1\x83\xd0\xbc \xd1\x822\xd1\x80\xd1\x83\xd1\x82 2\xd1\x82\xd1\x80\xd1\x84 2\xd1\x82\xd1\x80\xd1\x89 2\xd1\x82\xd1\x80\xd1\x8a \xd1\x821\xd1\x80\xd1\x8b \xd1\x821\xd1\x80\xd1\x8f_ \xd1\x821\xd1\x80\xd1\x8f\xd0\xb2 2\xd1\x821\xd1\x80\xd1\x8f\xd0\xb4 \xd1\x821\xd1\x80\xd1\x8f\xd0\xb5 \xd1\x821\xd1\x80\xd1\x8f\xd0\xb6 \xd1\x821\xd1\x80\xd1\x8f\xd0\xb9 \xd1\x823\xd1\x80\xd1\x8f\xd0\xba \xd1\x821\xd1\x80\xd1\x8f\xd1\x82 \xd1\x821\xd1\x80\xd1\x8f\xd1\x89 \xd1\x821\xd1\x80\xd1\x8f\xd1\x8f 4\xd1\x821\xd1\x812 \xd1\x822\xd1\x81\xd0\xb1 \xd1\x822\xd1\x813\xd0\xb4 \xd1\x82\xd1\x81\xd0\xb5\xd0\xbf2 \xd1\x822\xd1\x813\xd0\xbc \xd1\x822\xd1\x813\xd0\xbf 2\xd1\x821\xd1\x82 \xd1\x822\xd1\x82\xd0\xbc \xd1\x82\xd1\x832\xd0\xb3\xd1\x80 \xd1\x82\xd1\x832\xd0\xb6\xd0\xb8\xd0\xbd 2\xd1\x821\xd1\x832\xd0\xbf\xd1\x80 \xd1\x82\xd1\x831\xd1\x81\xd0\xbb \xd1\x82\xd1\x831\xd1\x81\xd1\x82 \xd1\x82\xd1\x832\xd1\x84\xd0\xbb 1\xd1\x82\xd1\x83\xd1\x88\xd0\xb0 1\xd1\x82\xd1\x83\xd1\x88\xd0\xbe 1\xd1\x82\xd1\x83\xd1\x88\xd1\x8c 1\xd1\x82\xd1\x83\xd1\x89 2\xd1\x82\xd1\x84 2\xd1\x821\xd1\x85 4\xd1\x82\xd1\x86 2\xd1\x821\xd1\x87 2\xd1\x82\xd1\x882 2\xd1\x82\xd1\x89 2\xd1\x82\xd1\x8a \xd1\x82\xd1\x8b2\xd0\xb31 \xd1\x82\xd1\x8b2\xd1\x811\xd0\xba 2\xd1\x82\xd1\x8c 4\xd1\x82\xd1\x8c_ 3\xd1\x82\xd1\x8c\xd0\xb5 3\xd1\x82\xd1\x8c\xd0\xb8 \xd1\x82\xd1\x8c2\xd0\xbc 4\xd1\x82\xd1\x8c\xd1\x82 \xd1\x82\xd1\x8c\xd1\x8e1 2\xd1\x82\xd1\x8d \xd1\x822\xd1\x8e \xd1\x82\xd1\x8e1\xd1\x82 1\xd1\x82\xd1\x8f\xd0\xb3 1\xd1\x82\xd1\x8f\xd0\xb6 1\xd1\x82\xd1\x8f\xd0\xbf 2\xd1\x82\xd1\x8f2\xd1\x87 \xd1\x831\xd0\xb0 \xd1\x832\xd0\xb0\xd0\xbb\xd0\xb5 \xd1\x832\xd0\xb0\xd1\x81 \xd1\x833\xd0\xb1\xd0\xb5\xd0\xbb \xd1\x83\xd0\xb1\xd0\xbe1\xd0\xb4 \xd1\x83\xd0\xb1\xd0\xbe\xd1\x812 \xd1\x83\xd0\xb11\xd1\x80 1\xd1\x83\xd0\xb1\xd1\x80\xd0\xb0 \xd1\x83\xd0\xb13\xd1\x80\xd1\x8e 1\xd1\x832\xd0\xb1\xd1\x8b\xd1\x82 \xd1\x831\xd0\xb2\xd0\xb5_ \xd1\x831\xd0\xb2\xd0\xb8 \xd1\x83\xd0\xb22\xd0\xbb \xd1\x831\xd0\xb2\xd0\xbe \xd1\x831\xd0\xb2\xd1\x83 \xd1\x832\xd0\xb3\xd0\xb2 \xd1\x832\xd0\xb3\xd0\xbb \xd1\x832\xd0\xb3\xd0\xbd \xd1\x83\xd0\xb32\xd0\xbd\xd0\xb0 \xd1\x83\xd0\xb32\xd0\xbd\xd0\xb5 \xd1\x83\xd0\xb31\xd1\x80\xd0\xb5 \xd1\x83\xd0\xb31\xd1\x80\xd1\x8f \xd1\x83\xd0\xb4\xd0\xb01\xd1\x81 \xd1\x83\xd0\xb42\xd0\xb2 \xd1\x83\xd0\xb41\xd1\x80\xd0\xb0\xd0\xbc \xd1\x83\xd0\xb41\xd1\x80\xd0\xbe \xd1\x833\xd0\xb4\xd1\x83 \xd1\x831\xd0\xb5 \xd1\x83\xd0\xb52\xd0\xb4 \xd1\x83\xd0\xb52\xd0\xbb \xd1\x83\xd0\xb51\xd1\x81 \xd1\x83\xd0\xb52\xd1\x811\xd0\xba \xd1\x83\xd0\xb5\xd1\x812\xd0\xbb \xd1\x83\xd0\xb52\xd1\x85 \xd1\x832\xd0\xb6\xd0\xb6 \xd1\x831\xd0\xb72\xd0\xb2 \xd1\x831\xd0\xb7\xd0\xbe \xd1\x83\xd0\xb7\xd0\xbe3\xd0\xbf \xd1\x831\xd0\xb8 \xd1\x831\xd0\xba\xd0\xb0 \xd1\x83\xd0\xba1\xd0\xb2 \xd1\x831\xd0\xba\xd0\xb8 \xd1\x831\xd0\xba\xd0\xbe \xd1\x83\xd0\xba\xd0\xbe1\xd0\xb1 \xd1\x831\xd0\xba\xd1\x831 \xd1\x831\xd0\xbb\xd0\xb0 \xd1\x831\xd0\xbb\xd0\xb5 \xd1\x831\xd0\xbb\xd1\x83 \xd1\x831\xd0\xbb\xd1\x8b\xd1\x85 \xd1\x831\xd0\xbb\xd1\x8e \xd1\x832\xd0\xbc\xd1\x87 \xd1\x833\xd0\xbd\xd0\xb0 \xd1\x83\xd0\xbd2\xd0\xb41\xd1\x80 \xd1\x831\xd0\xbd\xd1\x8c \xd1\x831\xd0\xbe \xd1\x83\xd0\xbe2\xd0\xb1 \xd1\x83\xd0\xbe2\xd0\xb2 \xd1\x832\xd0\xbe\xd0\xb7\xd0\xb0 \xd1\x83\xd0\xbe2\xd0\xba \xd1\x83\xd0\xbe2\xd0\xbf \xd1\x83\xd0\xbe2\xd1\x81 \xd1\x83\xd0\xbe\xd1\x81\xd1\x821 \xd1\x83\xd0\xbe2\xd1\x821 \xd1\x83\xd0\xbe2\xd1\x84 \xd1\x832\xd0\xbf\xd0\xbb \xd1\x83\xd0\xbf1\xd0\xbb\xd1\x8e \xd1\x833\xd0\xbf\xd1\x80\xd0\xbe \xd1\x831\xd1\x80\xd0\xb0 \xd1\x831\xd1\x80\xd0\xb5 \xd1\x83\xd1\x80\xd0\xb52\xd1\x823\xd1\x80 \xd1\x831\xd1\x80\xd0\xb8 \xd1\x83\xd1\x80\xd0\xba\xd0\xb53 \xd1\x831\xd1\x80\xd0\xbe \xd1\x832\xd1\x80\xd0\xbe\xd0\xb4 \xd1\x83\xd1\x80\xd0\xbe2\xd0\xb4\xd0\xbb \xd1\x83\xd1\x80\xd1\x822\xd1\x80 \xd1\x833\xd1\x80\xd1\x83 \xd1\x831\xd1\x80\xd1\x8b \xd1\x831\xd1\x80\xd1\x8e \xd1\x831\xd1\x80\xd1\x8f \xd1\x832\xd1\x81\xd0\xb0\xd0\xb4 \xd1\x831\xd1\x81\xd0\xb3 \xd1\x83\xd1\x811\xd0\xba\xd0\xb0 \xd1\x83\xd1\x811\xd0\xba\xd0\xb8 \xd1\x83\xd1\x81\xd0\xba3\xd0\xbb \xd1\x83\xd1\x811\xd0\xba\xd0\xbe\xd0\xbc \xd1\x831\xd1\x81\xd0\xba\xd1\x80 \xd1\x83\xd1\x811\xd0\xba\xd1\x83_ \xd1\x83\xd1\x812\xd0\xbb \xd1\x83\xd1\x81\xd0\xbb\xd0\xb04\xd0\xb63 \xd1\x83\xd1\x813\xd0\xbb\xd0\xb8 \xd1\x831\xd1\x81\xd0\xbc \xd1\x832\xd1\x81\xd0\xbd \xd1\x83\xd1\x812\xd0\xbf \xd1\x83\xd1\x813\xd1\x81 \xd1\x831\xd1\x81\xd1\x82\xd0\xb5 \xd1\x831\xd1\x81\xd1\x82\xd1\x8f \xd1\x831\xd1\x81\xd1\x84 2\xd1\x83\xd1\x81\xd1\x86 \xd1\x832\xd1\x81\xd1\x87 \xd1\x832\xd1\x81\xd1\x8c \xd1\x833\xd1\x81\xd1\x8c\xd1\x8f \xd1\x831\xd1\x82\xd0\xb0 \xd1\x833\xd1\x82\xd0\xb5\xd1\x80 \xd1\x831\xd1\x82\xd0\xb8 \xd1\x83\xd1\x822\xd0\xbb\xd1\x8f \xd1\x831\xd1\x82\xd0\xbe \xd1\x83\xd1\x82\xd0\xbe3\xd0\xbf2\xd1\x81 \xd1\x83\xd1\x821\xd1\x80\xd0\xb8 \xd1\x831\xd1\x82\xd1\x83 \xd1\x831\xd1\x82\xd1\x8b \xd1\x831\xd1\x82\xd1\x8c\xd0\xb5 \xd1\x833\xd1\x82\xd1\x8c\xd1\x8e 1\xd1\x83\xd1\x82\xd1\x8e \xd1\x831\xd1\x82\xd1\x8f \xd1\x831\xd1\x83 \xd1\x83\xd1\x83\xd0\xb32 \xd1\x83\xd1\x832\xd1\x81 \xd1\x833\xd1\x84\xd0\xb8 \xd1\x83\xd1\x841\xd0\xbb \xd1\x83\xd1\x842\xd0\xbb\xd1\x8f \xd1\x832\xd1\x84\xd1\x80 \xd1\x83\xd1\x851\xd0\xb0\xd0\xb4 \xd1\x83\xd1\x85\xd0\xb02\xd1\x82 \xd1\x832\xd1\x85\xd0\xb2 \xd1\x833\xd1\x854\xd0\xb2\xd0\xbe \xd1\x83\xd1\x851\xd0\xbb \xd1\x83\xd1\x853\xd0\xbb\xd1\x8f \xd1\x83\xd1\x851\xd1\x80 \xd1\x832\xd1\x87\xd0\xb5\xd0\xb1 1\xd1\x83\xd1\x87\xd1\x80 \xd1\x831\xd1\x87\xd1\x8c \xd1\x833\xd1\x88\xd0\xb5 \xd1\x833\xd1\x88\xd0\xb8 \xd1\x832\xd1\x88\xd0\xbb \xd1\x83\xd1\x881\xd0\xbb\xd0\xb0 \xd1\x832\xd1\x88\xd0\xbf 2\xd1\x83\xd1\x8d \xd1\x831\xd1\x8f \xd1\x83\xd1\x8f2\xd0\xb7 1\xd1\x84 \xd1\x84\xd0\xb02\xd0\xb11 \xd1\x84\xd0\xb02\xd0\xb3\xd0\xbd \xd1\x84\xd0\xb01\xd0\xb7\xd0\xbe \xd1\x84\xd0\xb0\xd0\xbd2\xd0\xb4 \xd1\x84\xd0\xb0\xd0\xbd\xd0\xb41\xd1\x80 \xd1\x84\xd0\xb01\xd1\x82\xd1\x80 \xd1\x84\xd0\xb02\xd1\x85 3\xd1\x84\xd0\xb0\xd1\x88 \xd1\x84\xd0\xb0\xd1\x8d1 2\xd1\x841\xd0\xb1 2\xd1\x841\xd0\xb2 2\xd1\x84\xd0\xb3 2\xd1\x841\xd0\xb4 \xd1\x84\xd0\xb5\xd0\xb21\xd1\x80 \xd1\x84\xd0\xb5\xd0\xb41\xd1\x80 \xd1\x84\xd0\xb51\xd0\xbe3 \xd1\x84\xd0\xb52\xd1\x811\xd0\xba \xd1\x844\xd0\xb8 \xd1\x84\xd0\xb8\xd0\xb02\xd0\xba1 \xd1\x84\xd0\xb82\xd0\xb3\xd0\xbb \xd1\x84\xd0\xb82\xd0\xb6 \xd1\x84\xd0\xb82\xd0\xb7\xd0\xbe \xd1\x84\xd0\xb82\xd0\xbd\xd0\xb8\xd0\xbd \xd1\x84\xd0\xb81\xd0\xbe 3\xd1\x84\xd0\xb8\xd1\x82 2\xd1\x841\xd0\xba \xd1\x842\xd0\xbb\xd0\xb0 \xd1\x842\xd0\xbb\xd0\xb8 \xd1\x842\xd0\xbb\xd0\xbe 2\xd1\x84\xd0\xbc 2\xd1\x841\xd0\xbd 2\xd1\x84\xd0\xbe\xd0\xb1\xd1\x8a 3\xd1\x84\xd0\xbe\xd0\xbd \xd1\x84\xd0\xbe2\xd1\x80\xd0\xb2 2\xd1\x841\xd0\xbe\xd1\x80\xd0\xb3 \xd1\x84\xd0\xbe\xd1\x803\xd1\x82\xd1\x80 \xd1\x84\xd0\xbe1\xd1\x80\xd1\x83 \xd1\x84\xd0\xbe\xd1\x811\xd0\xba 3\xd1\x84\xd0\xbe\xd1\x82 \xd1\x84\xd0\xbe\xd1\x82\xd0\xbe3\xd0\xbf \xd1\x841\xd1\x80\xd0\xb0\xd0\xb1 \xd1\x84\xd1\x80\xd0\xb01\xd0\xb7 \xd1\x84\xd1\x80\xd0\xb01\xd1\x81 \xd1\x841\xd1\x80\xd0\xb0\xd1\x82 \xd1\x842\xd1\x80\xd0\xb5\xd0\xbd \xd1\x84\xd1\x80\xd0\xb52\xd1\x81 \xd1\x841\xd1\x80\xd0\xb8 \xd1\x842\xd1\x80\xd0\xb8\xd0\xb6 \xd1\x842\xd1\x80\xd0\xb8\xd0\xb7 \xd1\x841\xd1\x80\xd0\xbe \xd1\x842\xd1\x80\xd0\xbe\xd0\xbd \xd1\x841\xd1\x80\xd1\x83 2\xd1\x843\xd1\x81 2\xd1\x841\xd1\x82 \xd1\x842\xd1\x82\xd0\xbc \xd1\x842\xd1\x82\xd0\xbe\xd1\x80 2\xd1\x841\xd1\x832\xd0\xbf \xd1\x84\xd1\x833\xd1\x82\xd0\xbb 2\xd1\x84\xd1\x83\xd1\x84 2\xd1\x84\xd1\x84 2\xd1\x841\xd1\x87 2\xd1\x84\xd1\x882 2\xd1\x84\xd1\x8c_ \xd1\x842\xd1\x8e1 1\xd1\x85\xd0\xb0 \xd1\x85\xd0\xb02\xd0\xb1\xd0\xbb \xd1\x85\xd0\xb02\xd0\xb4 2\xd1\x851\xd0\xb0\xd0\xba \xd1\x85\xd0\xb0\xd0\xbd2\xd0\xb4 \xd1\x85\xd0\xb0\xd0\xbe3 \xd1\x851\xd0\xb0\xd1\x80\xd1\x88 2\xd1\x851\xd0\xb1 1\xd1\x852\xd0\xb2 2\xd1\x853\xd0\xb2\xd0\xb5 2\xd1\x853\xd0\xb2\xd0\xb8 \xd1\x853\xd0\xb2\xd1\x8b 2\xd1\x85\xd0\xb3 \xd1\x853\xd0\xb42 1\xd1\x85\xd0\xb5 \xd1\x85\xd0\xb5\xd0\xbe3 \xd1\x851\xd0\xb72 1\xd1\x85\xd0\xb8 \xd1\x85\xd0\xb8\xd0\xb0\xd1\x821 \xd1\x85\xd0\xb8\xd0\xb52 2\xd1\x851\xd0\xb8\xd0\xb7\xd1\x8b \xd1\x85\xd0\xb81\xd1\x812 \xd1\x851\xd0\xba2 \xd1\x851\xd0\xbb\xd0\xb0\xd0\xb2 \xd1\x851\xd0\xbb\xd0\xb0\xd1\x81 \xd1\x851\xd0\xbb\xd0\xb0\xd1\x82 \xd1\x851\xd0\xbb\xd0\xb0\xd1\x86 1\xd1\x85\xd0\xbb\xd0\xb5\xd0\xb1 \xd1\x852\xd0\xbb\xd0\xb5\xd1\x81 \xd1\x851\xd0\xbb\xd0\xb5\xd1\x82 \xd1\x853\xd0\xbb\xd0\xbe_ \xd1\x852\xd0\xbb\xd0\xbe\xd0\xbf 1\xd1\x852\xd0\xbb\xd0\xbe\xd1\x80 \xd1\x851\xd0\xbb\xd1\x83 1\xd1\x852\xd0\xbc\xd1\x83 2\xd1\x851\xd0\xbd 3\xd1\x852\xd0\xbd\xd1\x8b 1\xd1\x85\xd0\xbe 2\xd1\x851\xd0\xbe2\xd0\xba \xd1\x85\xd0\xbe\xd0\xbf2 \xd1\x85\xd0\xbe2\xd0\xbf\xd0\xb5 \xd1\x85\xd0\xbe2\xd0\xbf\xd0\xbe\xd1\x80 \xd1\x85\xd0\xbe1\xd1\x80\xd1\x83 \xd1\x851\xd0\xbe\xd1\x81\xd0\xbc 2\xd1\x851\xd0\xbe\xd1\x81\xd0\xbd \xd1\x85\xd0\xbe\xd1\x842 \xd1\x85\xd0\xbe\xd1\x851\xd0\xbb \xd1\x85\xd0\xbe\xd1\x8f2 \xd1\x85\xd0\xbf2 \xd1\x851\xd1\x80\xd0\xb0\xd0\xb7 1\xd1\x85\xd1\x80\xd0\xb0\xd0\xbd \xd1\x851\xd1\x80\xd0\xb01\xd1\x812 \xd1\x851\xd1\x80\xd0\xb5\xd0\xb9 \xd1\x85\xd1\x80\xd0\xb82\xd0\xbf\xd0\xbb \xd1\x852\xd1\x80\xd0\xb8\xd1\x81 \xd1\x851\xd1\x80\xd0\xbe\xd0\xb2 1\xd1\x85\xd1\x80\xd0\xbe\xd0\xbc \xd1\x85\xd1\x80\xd0\xbe2\xd0\xbc\xd1\x87 \xd1\x851\xd1\x80\xd1\x8b \xd1\x851\xd1\x80\xd1\x8f 2\xd1\x851\xd1\x812 2\xd1\x851\xd1\x82 1\xd1\x85\xd1\x83_ \xd1\x851\xd1\x832\xd0\xb3 2\xd1\x85\xd1\x83\xd0\xb5 2\xd1\x85\xd1\x83\xd0\xb9 1\xd1\x85\xd1\x83\xd0\xbd \xd1\x851\xd1\x832\xd1\x80 \xd1\x85\xd1\x833\xd1\x80\xd0\xb0 1\xd1\x85\xd1\x83\xd1\x81 1\xd1\x85\xd1\x83\xd1\x88 2\xd1\x85\xd1\x83\xd1\x8e \xd1\x851\xd1\x852 2\xd1\x851\xd1\x872 2\xd1\x85\xd1\x88 \xd1\x85\xd1\x8c\xd1\x8e1 1\xd1\x86 \xd1\x86\xd0\xb01 3\xd1\x86\xd0\xb0_ 3\xd1\x86\xd0\xb0\xd0\xbc \xd1\x86\xd0\xb02\xd0\xbf\xd0\xbb 3\xd1\x86\xd0\xb0\xd1\x85 2\xd1\x861\xd0\xb1 \xd1\x862\xd0\xb2\xd0\xb5 2\xd1\x86\xd0\xb2\xd1\x8b 2\xd1\x86\xd0\xb3 2\xd1\x861\xd0\xb4 \xd1\x86\xd0\xb51\xd0\xb7 \xd1\x86\xd0\xb51\xd0\xba \xd1\x86\xd0\xb51\xd0\xbe\xd1\x82 \xd1\x86\xd0\xb5\xd0\xbf1\xd0\xbb \xd1\x86\xd0\xb5\xd1\x812\xd0\xbb \xd1\x86\xd0\xb51\xd1\x82 2\xd1\x86\xd0\xb5\xd1\x82\xd0\xb0\xd1\x82 2\xd1\x861\xd0\xb7 \xd1\x86\xd0\xb81 \xd1\x86\xd0\xb82\xd0\xba1 \xd1\x86\xd0\xb8\xd0\xba3\xd0\xbb \xd1\x86\xd0\xb82\xd0\xbe\xd0\xbb \xd1\x86\xd0\xb8\xd0\xbf2 \xd1\x86\xd0\xb82\xd1\x81\xd0\xba \xd1\x86\xd0\xb8\xd1\x833 \xd1\x86\xd0\xb8\xd1\x841\xd1\x80 2\xd1\x861\xd0\xba2 2\xd1\x861\xd0\xbb 2\xd1\x86\xd0\xbc 2\xd1\x861\xd0\xbd \xd1\x861\xd0\xbe2\xd0\xb1 2\xd1\x861\xd0\xbe2\xd0\xb4 2\xd1\x861\xd0\xbe\xd1\x82 2\xd1\x86\xd0\xbf2 2\xd1\x861\xd1\x80 2\xd1\x861\xd1\x81 2\xd1\x861\xd1\x82 3\xd1\x86\xd1\x83 2\xd1\x86\xd1\x86 2\xd1\x863\xd1\x882 3\xd1\x86\xd1\x8b \xd1\x86\xd1\x8b2\xd0\xbf \xd1\x86\xd1\x8b\xd0\xbf3\xd0\xbb \xd1\x86\xd1\x8e1 1\xd1\x87\xd0\xb0 \xd1\x87\xd0\xb02\xd0\xb4\xd1\x80 \xd1\x87\xd0\xb02\xd0\xb4\xd1\x86 \xd1\x87\xd0\xb02\xd0\xb5\xd0\xb2\xd0\xbe \xd1\x87\xd0\xb02\xd0\xb5\xd0\xb2\xd1\x8b \xd1\x87\xd0\xb02\xd0\xb5\xd1\x80 \xd1\x87\xd0\xb0\xd1\x81\xd1\x821\xd0\xb2 \xd1\x87\xd0\xb01\xd1\x81\xd1\x82\xd0\xb5 \xd1\x87\xd0\xb01\xd1\x81\xd1\x82\xd1\x83 \xd1\x87\xd0\xb01\xd1\x81\xd1\x82\xd1\x8f 3\xd1\x87\xd0\xb0\xd1\x82\xd0\xbe 3\xd1\x87\xd0\xb0\xd1\x82\xd1\x8b 2\xd1\x871\xd0\xb1 \xd1\x871\xd0\xb2 2\xd1\x871\xd0\xb4 1\xd1\x87\xd0\xb5 \xd1\x87\xd0\xb51\xd0\xb2\xd0\xbb \xd1\x87\xd0\xb52\xd0\xb3\xd0\xbb \xd1\x87\xd0\xb51\xd0\xbe \xd1\x87\xd0\xb5\xd1\x802\xd1\x81 \xd1\x87\xd0\xb5\xd1\x80\xd1\x81\xd1\x821 \xd1\x87\xd0\xb51\xd1\x81\xd0\xbb \xd1\x872\xd0\xb6 \xd1\x87\xd0\xb6\xd0\xbe2 1\xd1\x87\xd0\xb8 3\xd1\x87\xd0\xb8\xd0\xba 3\xd1\x87\xd0\xb8\xd1\x86 2\xd1\x871\xd0\xba 1\xd1\x872\xd0\xbb\xd0\xb0 \xd1\x872\xd0\xbb\xd0\xb5 \xd1\x873\xd0\xbb\xd0\xb5\xd0\xb3 \xd1\x873\xd0\xbb\xd0\xb5\xd0\xb6 2\xd1\x87\xd0\xbb\xd0\xb8 \xd1\x872\xd0\xbb\xd0\xb8_ 1\xd1\x872\xd0\xbb\xd0\xbe 1\xd1\x87\xd0\xbc 2\xd1\x87\xd0\xbc\xd0\xb0 2\xd1\x87\xd0\xbc\xd0\xb5 \xd1\x872\xd0\xbc\xd0\xbe 2\xd1\x871\xd0\xbd 3\xd1\x87\xd0\xbe 2\xd1\x871\xd1\x81 2\xd1\x871\xd1\x82\xd0\xb0 \xd1\x872\xd1\x82\xd0\xb5 2\xd1\x87\xd1\x82\xd0\xbc 1\xd1\x87\xd1\x83 3\xd1\x87\xd1\x83\xd0\xba \xd1\x872\xd1\x85 2\xd1\x871\xd1\x87 2\xd1\x87\xd1\x8c_ 1\xd1\x87\xd1\x8c\xd0\xb5 1\xd1\x87\xd1\x8c\xd0\xb8 2\xd1\x87\xd1\x8c\xd1\x81 2\xd1\x87\xd1\x8c\xd1\x82 1\xd1\x87\xd1\x8c\xd1\x8e 1\xd1\x87\xd1\x8c\xd1\x8f 1\xd1\x88 \xd1\x88\xd0\xb02\xd0\xb1\xd0\xbb \xd1\x88\xd0\xb02\xd0\xb3\xd0\xbd \xd1\x88\xd0\xb02\xd0\xb31\xd1\x80 \xd1\x88\xd0\xb02\xd0\xb4\xd1\x80 \xd1\x88\xd0\xb0\xd0\xbd2\xd0\xba\xd1\x80 \xd1\x88\xd0\xb0\xd1\x803\xd1\x822 \xd1\x88\xd0\xb01\xd1\x81\xd1\x82 \xd1\x88\xd0\xb01\xd1\x82\xd1\x80\xd0\xbe 2\xd1\x881\xd0\xb1 \xd1\x882\xd0\xb2 \xd1\x883\xd0\xb2\xd0\xb5\xd0\xbd \xd1\x88\xd0\xb52\xd0\xb3\xd0\xbb \xd1\x88\xd0\xb51\xd0\xba \xd1\x88\xd0\xb51\xd0\xbe2 \xd1\x88\xd0\xb53\xd0\xbf\xd0\xbb \xd1\x88\xd0\xb51\xd1\x812 \xd1\x88\xd0\xb82\xd0\xb1\xd0\xbb \xd1\x88\xd0\xb82\xd0\xbf\xd0\xbb \xd1\x88\xd0\xb8\xd1\x841\xd1\x80 2\xd1\x881\xd0\xba2 3\xd1\x882\xd0\xba\xd0\xbe\xd0\xbb 2\xd1\x881\xd0\xbb\xd0\xb5\xd0\xb9 2\xd1\x88\xd0\xbb\xd0\xb5\xd0\xbd \xd1\x882\xd0\xbb\xd0\xb8_ 2\xd1\x88\xd0\xbb\xd0\xb8\xd0\xb2 2\xd1\x88\xd0\xbb\xd0\xb8\xd0\xbb \xd1\x882\xd0\xbb\xd0\xb8\xd0\xbd \xd1\x882\xd0\xbb\xd0\xb8\xd1\x81 \xd1\x882\xd0\xbb\xd0\xb8\xd1\x82\xd0\xb5 \xd1\x882\xd0\xbb\xd0\xb8\xd1\x84 \xd1\x882\xd0\xbb\xd0\xbe_ 2\xd1\x88\xd0\xbb\xd0\xbe\xd0\xb2 \xd1\x882\xd0\xbb\xd0\xbe\xd0\xb3 \xd1\x881\xd0\xbb\xd1\x8b \xd1\x882\xd0\xbb\xd1\x8e 2\xd1\x88\xd0\xbb\xd1\x8f\xd0\xb5 2\xd1\x88\xd0\xbb\xd1\x8f\xd0\xba \xd1\x882\xd0\xbb\xd1\x8f\xd0\xbf 2\xd1\x88\xd0\xbb\xd1\x8f\xd1\x82 2\xd1\x88\xd0\xbb\xd1\x8f\xd1\x87 2\xd1\x88\xd0\xbb\xd1\x8f\xd1\x8e 2\xd1\x88\xd0\xbc 3\xd1\x882\xd0\xbc\xd1\x8b 4\xd1\x883\xd0\xbc\xd1\x8b_ 2\xd1\x881\xd0\xbd 4\xd1\x88\xd0\xbd\xd0\xb8 \xd1\x882\xd0\xbd\xd1\x83\xd1\x80 \xd1\x882\xd0\xbf2 \xd1\x883\xd0\xbf\xd1\x80 2\xd1\x881\xd1\x80 2\xd1\x881\xd1\x81 \xd1\x881\xd1\x82\xd0\xb8 2\xd1\x88\xd1\x82\xd1\x81 \xd1\x88\xd1\x832\xd0\xb5\xd0\xb2 \xd1\x88\xd1\x83\xd1\x81\xd1\x821 2\xd1\x88\xd1\x84 \xd1\x881\xd1\x85 2\xd1\x88\xd1\x86 2\xd1\x881\xd1\x87 2\xd1\x88\xd1\x8c 4\xd1\x88\xd1\x8c_ 3\xd1\x88\xd1\x8c\xd0\xb5 3\xd1\x88\xd1\x8c\xd0\xb8 3\xd1\x88\xd1\x8c\xd1\x8e 3\xd1\x88\xd1\x8c\xd1\x8f \xd1\x882\xd1\x8e1 1\xd1\x89 2\xd1\x893\xd0\xb22 \xd1\x89\xd0\xb51\xd0\xb12\xd0\xbb \xd1\x89\xd0\xb52\xd0\xb3\xd0\xbb \xd1\x89\xd0\xb5\xd0\xb41\xd1\x80 \xd1\x89\xd0\xb5\xd0\xb82 \xd1\x89\xd0\xb5\xd0\xb8\xd1\x811 \xd1\x89\xd0\xb51\xd1\x81 \xd1\x89\xd0\xb51\xd1\x85 \xd1\x89\xd0\xb5\xd1\x882 \xd1\x89\xd0\xb53\xd1\x88\xd0\xba \xd1\x89\xd0\xb82\xd0\xbf1\xd0\xbb 2\xd1\x89\xd0\xbc 2\xd1\x891\xd0\xbd 2\xd1\x891\xd1\x80 2\xd1\x89\xd1\x8c_ \xd1\x8a1 \xd1\x8a\xd0\xb52\xd0\xb3 \xd1\x8a\xd0\xb52\xd0\xb4 \xd1\x8a\xd0\xb53\xd0\xb4\xd0\xbe \xd1\x8a\xd0\xb52\xd0\xbb \xd1\x8a2\xd0\xb52\xd1\x80 \xd1\x8a\xd0\xb52\xd1\x81 \xd1\x8a\xd0\xb52\xd1\x85\xd0\xb8 \xd1\x8a\xd1\x8e2 \xd1\x8a\xd1\x8f2 \xd1\x8a\xd1\x8f3\xd0\xbd \xd1\x8b1 \xd1\x8b2\xd0\xb1\xd0\xbb \xd1\x8b3\xd0\xb3\xd0\xb0 \xd1\x8b3\xd0\xb3\xd0\xb8 \xd1\x8b\xd0\xb32\xd0\xbb \xd1\x8b2\xd0\xb3\xd0\xbd \xd1\x8b2\xd0\xb4\xd0\xbb \xd1\x8b\xd0\xb42\xd1\x80\xd0\xb5 \xd1\x8b2\xd0\xb41\xd1\x80\xd0\xbe \xd1\x8b2\xd0\xb4\xd1\x80\xd1\x8f \xd1\x8b\xd0\xb52 \xd1\x8b3\xd0\xb62\xd0\xb4 \xd1\x8b\xd0\xb72\xd0\xb2\xd0\xb0 \xd1\x8b\xd0\xb72\xd0\xb4 \xd1\x8b2\xd0\xb7\xd0\xbb \xd1\x8b2\xd0\xb7\xd0\xbd \xd1\x8b\xd0\xb72\xd0\xbd\xd0\xb0 \xd1\x8b\xd0\xb82 \xd1\x8b\xd0\xb8\xd0\xb31 \xd1\x8b2\xd0\xba1\xd0\xb2 \xd1\x8b\xd0\xba2\xd0\xbb \xd1\x8b2\xd0\xba3\xd0\xbb\xd0\xbe \xd1\x8b\xd0\xba\xd0\xbe1\xd0\xb7 \xd1\x8b\xd0\xba1\xd1\x81 \xd1\x8b2\xd0\xbb\xd1\x8c \xd1\x8b2\xd0\xbc\xd1\x87 \xd1\x8b\xd0\xbd\xd0\xbe\xd1\x813\xd0\xbb \xd1\x8b3\xd0\xbf\xd0\xbe \xd1\x8b\xd1\x80\xd0\xb02\xd1\x813 \xd1\x8b\xd1\x802\xd0\xb2 \xd1\x8b\xd1\x80\xd0\xb52\xd1\x85 \xd1\x8b3\xd1\x81\xd0\xb0 \xd1\x8b3\xd1\x81\xd0\xb5 \xd1\x8b\xd1\x811\xd0\xba\xd0\xb8 \xd1\x8b\xd1\x811\xd0\xba\xd1\x83 \xd1\x8b2\xd1\x81\xd0\xbd \xd1\x8b3\xd1\x81\xd0\xbe \xd1\x8b\xd1\x812\xd0\xbf \xd1\x8b2\xd1\x81\xd1\x85 \xd1\x8b\xd1\x812\xd1\x87 \xd1\x8b2\xd1\x81\xd1\x88 \xd1\x8b\xd1\x821\xd0\xb2\xd0\xb8 \xd1\x8b\xd1\x822\xd1\x80 \xd1\x8b3\xd1\x82\xd1\x8c\xd1\x8e \xd1\x8b3\xd1\x82\xd1\x8c\xd1\x8f \xd1\x8b\xd1\x832 \xd1\x8b2\xd1\x881\xd0\xbb \xd1\x8b3\xd1\x88\xd1\x8c \xd1\x8c1 \xd1\x8c\xd0\xb12 \xd1\x8c2\xd0\xb2\xd1\x8f \xd1\x8c2\xd0\xb4\xd1\x86 \xd1\x8c2\xd0\xb5 \xd1\x8c\xd0\xb51\xd0\xb7\xd0\xbe \xd1\x8c\xd0\xb51\xd0\xba \xd1\x8c\xd0\xb52\xd1\x811\xd0\xba \xd1\x8c2\xd0\xb7\xd0\xbd \xd1\x8c2\xd0\xb81 \xd1\x8c2\xd0\xba\xd0\xbb \xd1\x8c\xd0\xbc\xd0\xb83\xd0\xb4 \xd1\x8c\xd0\xbc\xd0\xb83\xd0\xba \xd1\x8c\xd0\xbc\xd0\xbe1 \xd1\x8c\xd0\xbd\xd0\xb52\xd0\xbe \xd1\x8c2\xd0\xbe \xd1\x8c2\xd0\xbf1\xd0\xbb \xd1\x8c3\xd0\xbf2\xd1\x82\xd0\xbe \xd1\x8c\xd1\x812\xd0\xba \xd1\x8c2\xd1\x81\xd0\xbd \xd1\x8c2\xd1\x81\xd1\x82\xd0\xb8 \xd1\x8c2\xd1\x81\xd1\x82\xd1\x8f \xd1\x8c2\xd1\x821\xd0\xb0\xd0\xbc\xd0\xbf \xd1\x8c\xd1\x82\xd0\xb83\xd0\xbc \xd1\x8c2\xd1\x82\xd0\xbc \xd1\x8c2\xd1\x82\xd0\xbe\xd1\x82 \xd1\x8c2\xd1\x82\xd1\x80\xd0\xb0\xd0\xb1 \xd1\x8c\xd1\x822\xd1\x80\xd0\xb5 \xd1\x8c\xd1\x822\xd1\x80\xd1\x83 \xd1\x8c\xd1\x822\xd1\x80\xd1\x8b \xd1\x8c\xd1\x85\xd0\xbe2 \xd1\x8c\xd1\x85\xd0\xbe\xd0\xb71 \xd1\x8c2\xd1\x89\xd0\xb0 \xd1\x8c2\xd1\x89\xd0\xb5 \xd1\x8c2\xd1\x89\xd1\x83 \xd1\x8c2\xd1\x8e \xd1\x8c2\xd1\x8f \xd1\x8c\xd1\x8f1\xd0\xb2 \xd1\x8c3\xd1\x8f\xd0\xb3\xd1\x81 1\xd1\x8d \xd1\x8d1\xd0\xb2 \xd1\x8d\xd0\xb21\xd1\x80 2\xd1\x8d\xd0\xb3 \xd1\x8d\xd0\xb41\xd1\x80 \xd1\x8d\xd0\xba1\xd0\xbb \xd1\x8d\xd0\xba\xd1\x811 \xd1\x8d\xd0\xba2\xd1\x81\xd1\x82 \xd1\x8d\xd0\xbb\xd0\xb51\xd0\xbe \xd1\x8d2\xd0\xbc \xd1\x8d3\xd0\xbc\xd0\xb0 \xd1\x8d2\xd0\xbd \xd1\x8d3\xd0\xbd\xd1\x8c \xd1\x8d\xd0\xbe2\xd0\xb7 \xd1\x8d2\xd0\xbf \xd1\x8d\xd0\xbf\xd0\xb83\xd0\xba \xd1\x8d1\xd1\x80\xd0\xb5 \xd1\x8d1\xd1\x80\xd0\xb8 \xd1\x8d\xd1\x80\xd0\xb84\xd1\x82\xd1\x80 \xd1\x8d\xd1\x80\xd0\xbe1\xd1\x812 \xd1\x8d1\xd1\x80\xd1\x83 \xd1\x8d1\xd1\x80\xd1\x8b \xd1\x8d\xd1\x811 \xd1\x8d\xd1\x81\xd0\xba2 \xd1\x8d\xd1\x813\xd0\xbc \xd1\x8d2\xd1\x81\xd0\xbe \xd1\x8d\xd1\x813\xd1\x82\xd0\xb5 \xd1\x8d\xd1\x812\xd1\x821\xd1\x80 \xd1\x8d2\xd1\x82\xd0\xb5 \xd1\x8d\xd1\x82\xd0\xb8\xd0\xbb1\xd0\xb0 \xd1\x8d\xd1\x821\xd1\x80\xd0\xb0 \xd1\x8d2\xd1\x84 \xd1\x8d\xd1\x852 \xd1\x8d\xd1\x85\xd0\xbe3 \xd1\x8d2\xd1\x86 \xd1\x8d\xd1\x8f2 1\xd1\x8e \xd1\x8e1\xd0\xb0 \xd1\x8e1\xd0\xb1 \xd1\x8e2\xd0\xb1\xd0\xb2 \xd1\x8e2\xd0\xb1\xd0\xbb \xd1\x8e2\xd0\xb11\xd1\x80\xd0\xb5 \xd1\x8e1\xd0\xb2 \xd1\x8e1\xd0\xb4\xd1\x8c \xd1\x8e1\xd0\xb5 \xd1\x8e\xd0\xb72\xd0\xb3 \xd1\x8e\xd0\xb7\xd0\xb82\xd0\xba \xd1\x8e1\xd0\xb7\xd0\xbe \xd1\x8e1\xd0\xb8 \xd1\x8e2\xd0\xb8\xd0\xb4\xd0\xb0\xd0\xbb \xd1\x8e1\xd0\xba \xd1\x8e2\xd0\xba1\xd0\xb2 \xd1\x8e1\xd0\xbb\xd0\xb0 \xd1\x8e1\xd0\xbb\xd0\xb5 \xd1\x8e2\xd0\xbb\xd0\xb8 \xd1\x8e1\xd0\xbb\xd1\x8e 2\xd1\x8e\xd0\xbc \xd1\x8e2\xd0\xbc\xd1\x87 \xd1\x8e2\xd0\xbd\xd1\x8c \xd1\x8e1\xd0\xbe1 \xd1\x8e1\xd1\x80\xd0\xb0 \xd1\x8e1\xd1\x80\xd0\xb5 \xd1\x8e\xd1\x80\xd0\xb54\xd0\xbc \xd1\x8e1\xd1\x80\xd0\xb8 \xd1\x8e\xd1\x80\xd0\xb82\xd1\x81\xd0\xba \xd1\x8e1\xd1\x80\xd0\xbe \xd1\x8e1\xd1\x80\xd1\x83 \xd1\x8e1\xd1\x80\xd1\x8b \xd1\x8e2\xd1\x811\xd0\xba \xd1\x8e1\xd1\x81\xd1\x82\xd0\xb0 \xd1\x8e1\xd1\x81\xd1\x82\xd0\xb5 \xd1\x8e1\xd1\x81\xd1\x82\xd0\xbe \xd1\x8e1\xd1\x81\xd1\x82\xd1\x8f \xd1\x8e1\xd1\x82\xd0\xb8 \xd1\x8e1\xd1\x82\xd0\xbe \xd1\x8e1\xd1\x82\xd1\x83 \xd1\x8e1\xd1\x82\xd1\x8b \xd1\x8e1\xd1\x85 \xd1\x8e\xd1\x85\xd0\xb01\xd1\x81 \xd1\x8e1\xd1\x87 \xd1\x8e2\xd1\x89\xd1\x8c \xd1\x8e1\xd1\x8f \xd1\x8f2\xd0\xb1\xd1\x80 \xd1\x8f\xd0\xb11\xd1\x80\xd0\xb0 \xd1\x8f\xd0\xb13\xd1\x80\xd0\xb5 \xd1\x8f\xd0\xb11\xd1\x80\xd0\xb8 \xd1\x8f\xd0\xb13\xd1\x80\xd1\x8e 3\xd1\x8f\xd0\xb2\xd0\xb8\xd0\xba\xd1\x81 \xd1\x8f1\xd0\xb2\xd0\xbe \xd1\x8f1\xd0\xb2\xd1\x83 \xd1\x8f1\xd0\xb22\xd1\x85 \xd1\x8f2\xd0\xb31\xd0\xbb \xd1\x8f2\xd0\xb3\xd0\xbd \xd1\x8f\xd0\xb41\xd0\xb2 \xd1\x8f\xd0\xb41\xd1\x80 \xd1\x8f1\xd0\xb5 \xd1\x8f\xd0\xb72\xd0\xb3\xd0\xbd \xd1\x8f1\xd0\xb7\xd0\xbe \xd1\x8f1\xd0\xb8 \xd1\x8f1\xd0\xba \xd1\x8f2\xd0\xba1\xd0\xb2 \xd1\x8f2\xd0\xba1\xd0\xbb \xd1\x8f\xd0\xba1\xd1\x81 \xd1\x8f1\xd0\xbb \xd1\x8f2\xd0\xbb\xd1\x8c \xd1\x8f\xd0\xbc2\xd0\xb13\xd0\xbb \xd1\x8f2\xd0\xbc\xd1\x8c \xd1\x8f3\xd0\xbd\xd0\xb0 \xd1\x8f\xd0\xbd\xd1\x812 \xd1\x8f1\xd1\x80\xd0\xb0 \xd1\x8f1\xd1\x80\xd0\xb8 \xd1\x8f1\xd1\x80\xd0\xbe \xd1\x8f1\xd1\x80\xd1\x8c \xd1\x8f\xd1\x811\xd0\xba \xd1\x8f\xd1\x811\xd0\xbb \xd1\x8f\xd1\x812\xd1\x82 \xd1\x8f\xd1\x81\xd1\x823\xd0\xb2 \xd1\x8f1\xd1\x81\xd1\x82\xd0\xbe \xd1\x8f\xd1\x81\xd1\x821\xd1\x80 \xd1\x8f1\xd1\x82\xd0\xb0 \xd1\x8f\xd1\x823\xd0\xb2 \xd1\x8f3\xd1\x82\xd0\xb8 \xd1\x8f\xd1\x82\xd0\xb81\xd0\xb7 \xd1\x8f1\xd1\x82\xd0\xbe \xd1\x8f1\xd1\x82\xd1\x83 \xd1\x8f1\xd1\x82\xd1\x8b \xd1\x8f3\xd1\x82\xd1\x8c\xd1\x8e \xd1\x8f3\xd1\x82\xd1\x8c\xd1\x8f \xd1\x8f1\xd1\x82\xd1\x8f \xd1\x8f1\xd1\x83 \xd1\x8f\xd1\x851\xd0\xbb \xd1\x8f1\xd1\x85\xd1\x83 \xd1\x8f\xd1\x86\xd0\xb51 \xd1\x8f2\xd1\x88\xd0\xbb 2\xd1\x8f\xd1\x8e_ 2\xd1\x8f1\xd1\x8f % _\xd0\xb1\xd0\xbe2\xd0\xb4\xd1\x80\xd0\xb0 _\xd0\xb2\xd1\x81\xd1\x822\xd1\x80 _\xd0\xb4\xd0\xbe\xd0\xb12\xd1\x80\xd0\xb5\xd0\xbb _\xd0\xb4\xd0\xbe1\xd0\xb12\xd1\x80\xd0\xb8 _\xd0\xbe\xd0\xb12\xd0\xbb\xd1\x8e\xd1\x8e _\xd0\xbe\xd0\xb12\xd1\x80\xd0\xb5\xd0\xb5 _\xd0\xbe\xd0\xb12\xd1\x80\xd0\xb5\xd0\xb9 _\xd0\xbe\xd0\xb12\xd1\x80\xd0\xb5\xd1\x8e _\xd0\xbe\xd0\xb12\xd1\x80\xd0\xb8\xd0\xb2 _\xd0\xbe\xd0\xb12\xd1\x80\xd0\xb8\xd0\xbb _\xd0\xbe\xd0\xb12\xd1\x80\xd0\xb8\xd1\x82 _\xd0\xbf\xd0\xb02\xd0\xbd1\xd0\xb8\xd1\x81 _\xd0\xbf\xd0\xbe\xd0\xbc2\xd0\xbd\xd1\x83 _\xd1\x80\xd0\xb5\xd0\xb02\xd0\xbd _\xd1\x80\xd0\xbe2\xd1\x813\xd0\xbf\xd0\xb8 _\xd1\x81\xd0\xbe2\xd0\xbf\xd0\xbb\xd0\xb0 \xd0\xb02\xd0\xbd\xd1\x8c\xd1\x88 \xd0\xb0\xd1\x82\xd1\x80\xd0\xbe2\xd1\x81\xd0\xba \xd0\xb1\xd0\xb5\xd0\xb7\xd1\x832\xd1\x81 \xd0\xb1\xd0\xb8\xd0\xbd\xd0\xbe2\xd1\x81\xd0\xba \xd0\xb2\xd0\xb8\xd0\xb72\xd0\xb3\xd0\xbd \xd0\xb2\xd1\x8b\xd0\xb12\xd1\x80\xd0\xb5 \xd0\xb3\xd1\x81\xd1\x824\xd1\x80 \xd0\xb4\xd0\xb81\xd1\x812\xd0\xbb\xd0\xbe\xd0\xb2 \xd0\xb4\xd0\xbe\xd1\x812\xd0\xbd\xd1\x8f \xd0\xb4\xd1\x80\xd0\xbe2\xd0\xb63\xd0\xb6 2\xd0\xb4\xd1\x80\xd1\x83\xd0\xb6\xd0\xb5\xd0\xb9 \xd0\xb52\xd0\xbc\xd1\x8c\xd0\xb4 \xd0\xb52\xd0\xbe3\xd0\xbf\xd0\xbb\xd0\xb0\xd1\x82\xd0\xbe \xd0\xb52\xd0\xbe3\xd0\xbf\xd0\xbe\xd0\xb7\xd0\xb8 \xd0\xb5\xd1\x80\xd0\xb53\xd1\x812\xd1\x81\xd0\xbe 4\xd0\xb63\xd0\xb4\xd0\xb8\xd0\xba 4\xd0\xb63\xd0\xb4\xd0\xb8\xd1\x87 \xd0\xb7\xd0\xb0\xd0\xb82\xd0\xbb \xd0\xb7\xd0\xb0\xd0\xbe2\xd0\xb7 2\xd0\xb71\xd0\xb02\xd1\x85\xd0\xb0\xd0\xb2 \xd0\xb7\xd0\xb0\xd1\x8e2\xd0\xbb \xd0\xb72\xd1\x80\xd1\x8f\xd1\x82 \xd0\xb7\xd1\x832\xd0\xbc\xd1\x8c 6\xd0\xb7\xd1\x8c_ \xd0\xb82\xd0\xbb1\xd0\xb02\xd0\xbc\xd0\xb8\xd0\xbd \xd0\xb8\xd0\xbb\xd0\xbb\xd0\xbe3\xd0\xba2 \xd0\xb92\xd0\xba\xd1\x8c \xd0\xbb\xd0\xb02\xd0\xb11\xd1\x80 \xd0\xbb\xd1\x833\xd1\x814\xd0\xbd \xd0\xbc\xd0\xb52\xd0\xb4\xd0\xb8\xd0\xbd\xd1\x81 \xd0\xbc\xd0\xb52\xd0\xb41\xd0\xbe2\xd1\x81\xd0\xbc \xd0\xbc\xd0\xb5\xd1\x82\xd0\xb82\xd0\xbb1\xd0\xb0\xd0\xbc \xd0\xbc\xd0\xb8\xd1\x814\xd1\x813\xd0\xbd \xd0\xbd\xd0\xb0\xd1\x802\xd0\xb2\xd0\xb0\xd1\x82 \xd0\xbd\xd0\xb52\xd0\xbe3\xd1\x80\xd0\xb5 \xd0\xbd\xd0\xb81\xd1\x812\xd0\xba\xd0\xbe\xd0\xbb \xd0\xbd\xd0\xb84\xd1\x81\xd1\x8c_ \xd0\xbd\xd0\xbe4\xd0\xbb1\xd0\xb02\xd0\xbc\xd0\xb8\xd0\xbd \xd0\xbd2\xd1\x82\xd1\x80\xd0\xb0\xd1\x81\xd1\x81 \xd0\xbe2\xd0\xb41\xd0\xbe2\xd0\xb1\xd0\xbe\xd0\xbb \xd0\xbe4\xd0\xb63\xd0\xb4\xd0\xb5\xd0\xb2 \xd0\xbe1\xd0\xb82\xd1\x811\xd1\x82\xd1\x80 \xd0\xbe\xd0\xb9\xd1\x814\xd0\xba\xd0\xbe\xd0\xb2 \xd0\xbe2\xd0\xbc3\xd1\x87\xd0\xb5_ \xd0\xbe\xd0\xbd\xd0\xb83\xd0\xbb2\xd0\xb0\xd0\xbc \xd0\xbe\xd0\xbd2\xd1\x82\xd1\x80\xd0\xb0\xd1\x82 \xd0\xbe2\xd0\xbf\xd0\xbb\xd1\x8e\xd1\x81 \xd0\xbe\xd1\x81\xd0\xbe4\xd0\xbc3\xd0\xbd \xd0\xbe\xd1\x82\xd0\xb84\xd0\xb4\xd0\xbd \xd0\xbf\xd0\xb5\xd1\x80\xd0\xb51\xd1\x812\xd0\xbd \xd0\xbf\xd0\xbe2\xd0\xb4\xd0\xbe\xd0\xb4\xd0\xb5 \xd0\xbf\xd0\xbe2\xd0\xb41\xd1\x832\xd1\x80\xd0\xbe \xd0\xbf\xd0\xbe\xd0\xb52\xd0\xb6 \xd0\xbf\xd0\xbe2\xd1\x81\xd1\x82\xd0\xb8\xd0\xbd \xd0\xbf\xd1\x80\xd0\xb5\xd0\xbc2\xd0\xbd\xd0\xbe \xd0\xbf\xd1\x80\xd0\xb8\xd1\x87\xd0\xb52\xd1\x811\xd0\xba \xd0\xbf\xd1\x82\xd0\xb84\xd0\xb4\xd0\xbd \xd1\x80\xd0\xb5\xd0\xb4\xd0\xbe4\xd0\xbf\xd0\xbb \xd1\x80\xd0\xb5\xd0\xb64\xd0\xb4\xd0\xb8 \xd1\x80\xd0\xbd\xd0\xb83\xd0\xbb2\xd0\xb03\xd0\xbc \xd1\x80\xd0\xbe\xd0\xb12\xd0\xbb\xd0\xb5\xd1\x8e 2\xd1\x81\xd0\xb1\xd1\x80\xd1\x83\xd0\xba1 \xd1\x81\xd0\xbe2\xd1\x81\xd1\x82\xd1\x80\xd0\xb8\xd1\x82 \xd1\x81\xd0\xbe3\xd1\x822\xd0\xba\xd0\xb0\xd0\xbb 2\xd1\x81\xd1\x82\xd1\x87\xd0\xb5_ 2\xd1\x81\xd1\x82\xd1\x8c\xd1\x82 \xd1\x81\xd1\x8b2\xd0\xbc\xd0\xb8\xd1\x82 2\xd1\x81\xd1\x8c\xd1\x81\xd1\x8f_ 6\xd1\x82\xd1\x80_ \xd1\x82\xd1\x80\xd0\xbe2\xd0\xb5\xd1\x82\xd0\xb5\xd1\x81 6\xd1\x85\xd1\x83\xd1\x8f_ \xd1\x8b2\xd1\x80\xd1\x8c\xd0\xbc \xd1\x8b\xd1\x8f2\xd0\xb2\xd1\x8f \xd1\x8c\xd0\xb1\xd0\xb0\xd1\x822 \xd0\xb01\xd0\xb2\xd1\x91 \xd0\xb02\xd0\xb4\xd0\xb2\xd1\x91 \xd0\xb01\xd1\x91 \xd0\xb0\xd0\xb73\xd0\xb2\xd1\x91\xd0\xb7 \xd0\xb01\xd0\xbb\xd1\x91 2\xd0\xb0\xd0\xbb\xd1\x91\xd0\xba 2\xd0\xb0\xd0\xbc\xd1\x91\xd1\x82 \xd0\xb0\xd0\xbc2\xd0\xbd\xd1\x91\xd1\x82 \xd0\xb01\xd1\x80\xd1\x91 \xd0\xb0\xd1\x813\xd1\x82\xd1\x91\xd0\xbc \xd0\xb01\xd1\x82\xd1\x8c\xd1\x91 1\xd0\xb1\xd1\x91 \xd0\xb1\xd1\x912\xd0\xb41\xd1\x80 \xd0\xb13\xd0\xbb\xd1\x91\xd0\xbd \xd0\xb12\xd0\xbb\xd1\x91\xd1\x811\xd0\xba \xd0\xb12\xd0\xbb\xd1\x8e\xd1\x91 \xd0\xb11\xd1\x80\xd1\x91\xd0\xba \xd0\xb12\xd1\x80\xd1\x91\xd0\xbc \xd0\xb12\xd1\x80\xd1\x91\xd1\x85 1\xd0\xb2\xd0\xb5\xd1\x91 3\xd0\xb2\xd0\xb5\xd0\xb7\xd1\x91 \xd0\xb2\xd1\x91\xd0\xb41\xd1\x80 1\xd0\xb2\xd1\x91\xd0\xb7 2\xd0\xb2\xd1\x91\xd1\x80\xd0\xb4 1\xd0\xb2\xd1\x91\xd1\x81 \xd0\xb22\xd0\xbb\xd1\x91\xd0\xba \xd0\xb22\xd0\xbb\xd1\x91\xd1\x82 1\xd0\xb2\xd0\xbc\xd1\x91 \xd0\xb22\xd0\xbd\xd1\x91\xd1\x81 2\xd0\xb21\xd1\x80\xd1\x91\xd0\xbd 3\xd0\xb2\xd1\x81\xd1\x913 1\xd0\xb2\xd1\x8c\xd1\x91 \xd0\xb31\xd0\xbb\xd1\x91 \xd0\xb32\xd0\xbb\xd1\x91\xd1\x82 \xd0\xb32\xd0\xbd\xd1\x91\xd0\xb2 \xd0\xb33\xd0\xbd\xd1\x91\xd0\xbd \xd0\xb32\xd0\xbd\xd0\xbe\xd1\x91 \xd0\xb41\xd0\xb2\xd1\x91 1\xd0\xb4\xd1\x91 _\xd0\xb4\xd0\xbe\xd0\xb12\xd1\x80\xd1\x91\xd0\xbb 2\xd0\xb4\xd0\xbe\xd0\xbf\xd0\xbb\xd1\x91 \xd0\xb4\xd0\xbe2\xd0\xbf\xd1\x80\xd1\x91 \xd0\xb41\xd1\x80\xd1\x91 \xd0\xb42\xd1\x80\xd1\x91\xd0\xb1 2\xd0\xb43\xd1\x80\xd1\x91\xd0\xb6 \xd0\xb42\xd1\x80\xd1\x91\xd0\xbc 1\xd0\xb4\xd1\x80\xd1\x91\xd0\xbc\xd0\xb0 1\xd0\xb4\xd1\x80\xd1\x91\xd0\xbc\xd1\x8b 2\xd0\xb43\xd1\x80\xd1\x91\xd0\xbd \xd0\xb4\xd1\x8a\xd1\x912\xd0\xbc 1\xd0\xb4\xd1\x8c\xd1\x91 \xd0\xb5\xd0\xb11\xd1\x80\xd1\x91\xd0\xbd \xd0\xb51\xd0\xb2\xd1\x91 2\xd0\xb5\xd0\xb2\xd1\x91\xd1\x80 2\xd0\xb51\xd0\xb2\xd1\x80\xd1\x91 \xd0\xb52\xd0\xb3\xd0\xbb\xd1\x91 \xd0\xb51\xd1\x91 2\xd0\xb5\xd0\xb6\xd1\x91 \xd0\xb53\xd0\xb7\xd1\x91 \xd0\xb51\xd0\xbb\xd1\x91 2\xd0\xb5\xd0\xbf\xd1\x91 \xd0\xb5\xd1\x801\xd0\xb2\xd1\x91 \xd0\xb51\xd1\x80\xd1\x91 \xd0\xb5\xd1\x80\xd1\x913\xd0\xb4\xd0\xbe \xd0\xb5\xd1\x80\xd1\x911\xd0\xba2 \xd0\xb5\xd1\x812\xd1\x87\xd1\x91\xd1\x82 \xd0\xb5\xd1\x821\xd0\xb2\xd1\x91 \xd0\xb51\xd1\x82\xd1\x8c\xd1\x91 2\xd1\x91\xd0\xb1 \xd1\x911\xd0\xb1\xd1\x80\xd0\xb0 \xd1\x91\xd0\xb11\xd1\x80\xd1\x8b \xd1\x911\xd0\xb2\xd0\xb5 \xd1\x911\xd0\xb2\xd0\xbe 2\xd1\x911\xd0\xb2\xd1\x80\xd0\xb5 \xd1\x911\xd0\xb2\xd1\x83 \xd1\x911\xd0\xb4\xd1\x80\xd1\x83 2\xd1\x913\xd0\xb4\xd1\x83\xd1\x88 2\xd1\x91\xd0\xb6\xd0\xb5 \xd1\x913\xd0\xb7\xd0\xb5 \xd1\x91\xd0\xb71\xd0\xbe2\xd0\xb3 \xd1\x911\xd0\xb7\xd0\xbe\xd0\xbc \xd1\x911\xd0\xba\xd0\xb0 \xd1\x911\xd0\xba\xd0\xb8 2\xd1\x911\xd0\xba\xd0\xbe 2\xd1\x911\xd0\xba\xd1\x80 \xd1\x91\xd0\xba2\xd1\x80\xd0\xbe \xd1\x911\xd0\xba\xd1\x83 \xd1\x911\xd0\xbb\xd0\xb0 \xd1\x911\xd0\xbb\xd0\xb5 \xd1\x911\xd0\xbb\xd1\x83 \xd1\x911\xd0\xbb\xd1\x8b 2\xd1\x91\xd0\xbc\xd1\x83\xd0\xb6 \xd1\x912\xd0\xbc\xd1\x87 \xd1\x913\xd0\xbd\xd0\xb0 \xd1\x91\xd0\xbd2\xd0\xb41\xd1\x80 \xd1\x91\xd0\xbd\xd1\x812 \xd1\x91\xd0\xbf\xd0\xb0\xd1\x822 2\xd1\x91\xd0\xbf\xd0\xb5 \xd1\x912\xd0\xbf\xd0\xbb \xd1\x913\xd0\xbf\xd0\xbb\xd0\xb0 \xd1\x91\xd0\xbf1\xd0\xbb\xd1\x83 \xd1\x913\xd0\xbf\xd0\xbb\xd1\x8b \xd1\x914\xd0\xbf\xd0\xbd 2\xd1\x91\xd0\xbf\xd0\xbe \xd1\x914\xd0\xbf\xd1\x82 \xd1\x911\xd1\x80\xd0\xb0 \xd1\x911\xd1\x80\xd0\xb5 \xd1\x913\xd1\x80\xd0\xb5_ \xd1\x911\xd1\x80\xd0\xb8 \xd1\x911\xd1\x80\xd0\xbe \xd1\x91\xd1\x803\xd1\x81\xd0\xba \xd1\x911\xd1\x80\xd1\x83 \xd1\x911\xd1\x80\xd1\x8b \xd1\x913\xd1\x812\xd0\xb0 \xd1\x911\xd1\x81\xd0\xba \xd1\x912\xd1\x811\xd0\xba\xd0\xb0_ \xd1\x912\xd1\x81\xd0\xba\xd0\xb5 \xd1\x914\xd1\x811\xd0\xba\xd1\x83_ 2\xd1\x91\xd1\x81\xd0\xbb \xd1\x913\xd1\x81\xd0\xbe \xd1\x911\xd1\x81\xd1\x82 \xd1\x91\xd1\x812\xd1\x82\xd0\xb0\xd0\xbd \xd1\x913\xd1\x81\xd1\x82\xd1\x83 \xd1\x911\xd1\x82\xd0\xb0 2\xd1\x91\xd1\x82\xd0\xb5\xd1\x87 \xd1\x911\xd1\x82\xd0\xb8 \xd1\x911\xd1\x82\xd0\xbe \xd1\x91\xd1\x82\xd0\xbe1\xd1\x81 \xd1\x91\xd1\x821\xd1\x80 \xd1\x911\xd1\x82\xd1\x83 \xd1\x911\xd1\x82\xd1\x8b \xd1\x911\xd1\x82\xd1\x8e \xd1\x911\xd1\x82\xd1\x8f \xd1\x91\xd1\x85\xd0\xb02\xd1\x82 \xd1\x91\xd1\x851\xd0\xb0\xd1\x82\xd0\xbe \xd1\x91\xd1\x853\xd0\xb2\xd0\xb0\xd0\xbb \xd1\x91\xd1\x853\xd0\xbb\xd0\xbe\xd0\xbf \xd1\x91\xd1\x851\xd0\xbe\xd0\xbf\xd0\xbe \xd1\x91\xd1\x851\xd1\x80\xd1\x83 3\xd0\xb6\xd1\x91\xd0\xb2 \xd0\xb6\xd1\x911\xd1\x812 \xd0\xb62\xd0\xb6\xd1\x91 \xd0\xb7\xd0\xb03\xd0\xbc\xd0\xbd\xd1\x91 \xd0\xb71\xd0\xb2\xd1\x91 \xd0\xb72\xd0\xb2\xd1\x91\xd0\xb7 1\xd0\xb7\xd1\x91 \xd0\xb72\xd0\xbd\xd0\xb0\xd1\x91 2\xd0\xb7\xd0\xbd\xd1\x91 1\xd0\xb72\xd0\xbe3\xd1\x80\xd1\x91 \xd0\xb72\xd0\xbe\xd1\x82\xd1\x91 \xd0\xb7\xd0\xbe\xd1\x822\xd1\x80\xd1\x91 3\xd0\xb7\xd1\x83\xd1\x91 \xd0\xb7\xd1\x8a\xd1\x912\xd0\xbc 2\xd0\xb7\xd1\x8b\xd0\xbc\xd1\x91 2\xd0\xb81\xd0\xb2\xd1\x91 \xd0\xb8\xd0\xb31\xd1\x80\xd1\x91\xd0\xbd \xd0\xb81\xd1\x91 \xd0\xb8\xd1\x851\xd1\x80\xd1\x91 1\xd0\xba\xd0\xb0\xd1\x91 1\xd0\xba\xd1\x91 \xd0\xba3\xd0\xbb\xd1\x91\xd0\xbd \xd0\xba2\xd1\x80\xd0\xbe\xd1\x91 3\xd0\xba\xd1\x83\xd1\x91 \xd0\xbb\xd0\xb01\xd1\x81\xd1\x82\xd1\x91 \xd0\xbb\xd1\x913\xd0\xb4\xd0\xbe \xd0\xbb\xd1\x911\xd0\xb72\xd0\xbe3 \xd0\xbb\xd1\x91\xd0\xba1\xd0\xbb 1\xd0\xbb\xd1\x91\xd0\xbd \xd0\xbb\xd1\x912\xd1\x81\xd0\xba \xd0\xbb\xd1\x914\xd1\x81\xd0\xba\xd0\xb0 1\xd0\xbb\xd1\x91\xd1\x85 2\xd0\xbb\xd0\xbe\xd1\x91\xd0\xbd 1\xd0\xbb\xd1\x83\xd1\x91 3\xd0\xbb\xd1\x8c\xd1\x91 1\xd0\xbb\xd1\x8c\xd1\x89\xd1\x91 3\xd0\xbc2\xd0\xbd\xd1\x91\xd1\x88 3\xd0\xbc2\xd1\x89\xd1\x91 \xd0\xbd\xd0\xb42\xd1\x80\xd1\x91 \xd0\xbd\xd0\xb53\xd1\x91 1\xd0\xbd\xd1\x91 \xd0\xbd\xd1\x911\xd0\xb12 3\xd0\xbd\xd0\xbe\xd0\xbc\xd1\x91 1\xd0\xbd\xd1\x8c\xd1\x91 \xd0\xbe\xd0\xb43\xd1\x80\xd1\x91\xd0\xb1 \xd0\xbe1\xd1\x91 \xd0\xbe\xd1\x912\xd0\xb6\xd0\xb8 \xd0\xbe1\xd0\xbb\xd1\x91 2\xd0\xbe\xd0\xbc\xd1\x91 \xd0\xbe3\xd0\xbc2\xd0\xbd\xd1\x91\xd0\xbc \xd0\xbe3\xd0\xbc2\xd0\xbd\xd1\x91\xd1\x82 \xd0\xbe2\xd0\xbf1\xd0\xbb\xd1\x91\xd0\xb9 \xd0\xbe1\xd1\x80\xd1\x91 \xd0\xbe2\xd1\x81\xd0\xba\xd1\x91 \xd0\xbe\xd1\x821\xd0\xb2\xd1\x91 2\xd0\xbe3\xd1\x82\xd1\x91\xd0\xba \xd0\xbe3\xd1\x82\xd1\x91\xd1\x80 \xd0\xbe\xd1\x821\xd1\x80\xd1\x91\xd0\xba \xd0\xbe\xd1\x821\xd1\x80\xd1\x91\xd1\x88 \xd0\xbe3\xd1\x84\xd1\x91 \xd0\xbf\xd1\x911 \xd0\xbf\xd1\x912\xd1\x81\xd1\x821\xd1\x80 \xd0\xbf\xd1\x912\xd1\x82\xd1\x80 2\xd0\xbf\xd0\xbb\xd1\x91\xd0\xbd \xd0\xbf2\xd0\xbb\xd1\x91\xd0\xbd\xd0\xba \xd0\xbf\xd0\xbb\xd1\x91\xd1\x811\xd0\xba \xd0\xbf1\xd0\xbb\xd1\x91\xd1\x8e \xd0\xbf\xd0\xbe\xd1\x912\xd0\xb6 3\xd0\xbf\xd1\x80\xd1\x91\xd1\x82 \xd0\xbf\xd1\x80\xd0\xb8\xd1\x87\xd1\x912\xd1\x811\xd0\xba \xd1\x802\xd0\xb1\xd0\xbb\xd1\x91 1\xd1\x80\xd0\xb2\xd1\x91\xd1\x82 _\xd1\x80\xd1\x912\xd0\xb1\xd1\x80 1\xd1\x80\xd1\x91\xd0\xb7\xd0\xba \xd1\x80\xd1\x911\xd0\xb7\xd0\xbd\xd0\xb0 1\xd1\x80\xd1\x911\xd0\xb7\xd0\xbe \xd1\x80\xd1\x91\xd0\xb72\xd1\x83 1\xd1\x80\xd1\x91\xd0\xba\xd1\x88 3\xd1\x80\xd1\x91\xd0\xbc\xd0\xbe 1\xd1\x80\xd1\x91\xd0\xbd\xd0\xba \xd1\x80\xd1\x913\xd1\x81\xd1\x82\xd0\xb0 \xd1\x80\xd1\x913\xd1\x81\xd1\x82\xd0\xbe \xd1\x80\xd0\xbe\xd0\xb42\xd0\xbb\xd1\x91 \xd1\x80\xd0\xbe\xd1\x912\xd0\xbc 1\xd1\x80\xd1\x8c\xd1\x91 \xd1\x812\xd0\xb4\xd1\x91 \xd1\x81\xd0\xb53\xd1\x81\xd1\x82\xd1\x91 1\xd1\x812\xd1\x91 \xd1\x81\xd1\x91\xd0\xba\xd1\x814 \xd1\x81\xd1\x912\xd1\x81\xd1\x82 \xd1\x81\xd1\x91\xd1\x81\xd1\x821\xd1\x80 2\xd1\x81\xd0\xba\xd1\x83\xd1\x91 \xd1\x811\xd0\xbb\xd1\x91\xd1\x82 \xd1\x812\xd1\x82\xd1\x91 1\xd1\x81\xd1\x82\xd1\x91\xd0\xbb 1\xd1\x81\xd1\x82\xd1\x91\xd0\xbd_ \xd1\x813\xd1\x82\xd1\x91\xd1\x82_ \xd1\x813\xd1\x82\xd1\x91\xd1\x82\xd0\xb5 \xd1\x81\xd1\x82\xd1\x913\xd1\x85 \xd1\x813\xd1\x82\xd1\x91\xd1\x88 \xd1\x813\xd1\x822\xd0\xbb\xd1\x91 \xd1\x81\xd1\x87\xd1\x912\xd1\x811\xd0\xba 1\xd1\x81\xd1\x8c\xd1\x91 \xd1\x821\xd0\xb2\xd1\x91\xd0\xbb \xd1\x821\xd0\xb2\xd0\xbe\xd1\x91 1\xd1\x822\xd1\x91 \xd1\x82\xd1\x912\xd0\xb3\xd0\xbd \xd1\x82\xd1\x911\xd0\xb7\xd0\xbe 3\xd1\x82\xd1\x91\xd0\xba\xd0\xb0 \xd1\x82\xd1\x91\xd0\xba1\xd0\xbb 3\xd1\x82\xd1\x91\xd0\xba\xd1\x88 \xd1\x82\xd1\x914\xd0\xbf1\xd0\xbb \xd1\x82\xd1\x91\xd1\x803\xd0\xba \xd1\x82\xd1\x912\xd1\x81\xd0\xba\xd0\xb0 \xd1\x82\xd1\x912\xd1\x811\xd0\xba\xd0\xb8 \xd1\x82\xd1\x912\xd1\x811\xd0\xba\xd0\xbe \xd1\x82\xd1\x912\xd1\x81\xd0\xba\xd1\x83 \xd1\x82\xd1\x912\xd1\x85\xd0\xbe 3\xd1\x822\xd0\xba\xd1\x91\xd1\x82 \xd1\x821\xd1\x80\xd0\xb5\xd0\xb2\xd1\x91 3\xd1\x822\xd1\x80\xd1\x912\xd1\x85 \xd1\x822\xd1\x80\xd1\x91\xd1\x88\xd1\x8c \xd1\x82\xd1\x80\xd0\xbe2\xd0\xb5\xd1\x82\xd1\x91\xd1\x81 3\xd1\x82\xd1\x8c\xd1\x91 \xd1\x83\xd0\xb32\xd0\xbd\xd1\x91 \xd1\x83\xd0\xb31\xd1\x80\xd1\x91 _\xd1\x83\xd1\x912 \xd1\x831\xd1\x91 \xd1\x831\xd0\xbb\xd1\x91 \xd1\x831\xd1\x80\xd1\x91 \xd1\x831\xd1\x81\xd1\x82\xd1\x91 \xd1\x833\xd1\x82\xd1\x91\xd1\x80 \xd1\x831\xd1\x82\xd1\x8c\xd1\x91 \xd1\x832\xd1\x87\xd1\x91\xd0\xb1 \xd1\x833\xd1\x88\xd1\x91 2\xd1\x853\xd0\xb2\xd1\x91 1\xd1\x85\xd0\xbb\xd1\x91\xd0\xb1 \xd1\x852\xd0\xbb\xd1\x91\xd1\x81 \xd1\x862\xd0\xb2\xd1\x91 1\xd1\x87\xd1\x91 \xd1\x87\xd1\x91\xd1\x802\xd1\x81 \xd1\x87\xd1\x91\xd1\x80\xd1\x81\xd1\x821 _\xd1\x87\xd1\x912\xd1\x811\xd0\xba \xd1\x872\xd1\x82\xd1\x91 1\xd1\x87\xd1\x8c\xd1\x91 2\xd1\x88\xd0\xbb\xd1\x91\xd0\xbd 3\xd1\x88\xd1\x8c\xd1\x91 \xd1\x8a2\xd1\x912\xd1\x80 \xd1\x8b\xd0\xb42\xd1\x80\xd1\x91 \xd1\x8b\xd1\x80\xd1\x912\xd1\x85 \xd1\x8b3\xd1\x81\xd1\x91 \xd1\x8c2\xd1\x91 \xd1\x8c\xd1\x911\xd0\xb7\xd0\xbe \xd1\x8c2\xd1\x89\xd1\x91 \xd1\x8e1\xd1\x91 \xd1\x8f\xd0\xb13\xd1\x80\xd1\x91 _\xd0\xbd\xd0\xb58 8\xd0\xbd\xd0\xb5_ 8\xd0\xb1\xd1\x8a_ 8\xd0\xb2\xd1\x8a_ 8\xd0\xb3\xd1\x8a_ 8\xd0\xb4\xd1\x8a_ 8\xd0\xb6\xd1\x8a_ 8\xd0\xb7\xd1\x8a_ 8\xd0\xba\xd1\x8a_ 8\xd0\xbb\xd1\x8a_ 8\xd0\xbc\xd1\x8a_ 8\xd0\xbd\xd1\x8a_ 8\xd0\xbf\xd1\x8a_ 8\xd1\x80\xd1\x8a_ 8\xd1\x81\xd1\x8a_ 8\xd1\x82\xd1\x8a_ 8\xd1\x84\xd1\x8a_ 8\xd1\x85\xd1\x8a_ 8\xd1\x86\xd1\x8a_ 8\xd1\x87\xd1\x8a_ 8\xd1\x88\xd1\x8a_ 8\xd1\x89\xd1\x8a_"; + +?> \ No newline at end of file diff --git a/include/mpdf/patterns/sv.php b/include/mpdf/patterns/sv.php new file mode 100755 index 0000000000000000000000000000000000000000..9029b3357d834cd9fbc7c3dbc15fed2205fc4708 --- /dev/null +++ b/include/mpdf/patterns/sv.php @@ -0,0 +1,12 @@ +<?php +/* + Adapted from Hyphenator 1.0.2 + http://code.google.com/p/hyphenator/ + + Original created by Jan Michael Rynning, jmr@nada.kth.se + Modified for Hyphenator by Andreas Johansson, andreas@ibuypink.com +*/ + +$patterns="_a4b _ab5i _ab5ol _ab3r _ac3 _a4d _a3dr _ad3s _a5g4ra _a5gre _a5kl _a5le _al4pr _a3lu _am4br _amp3l _a5mu _and4rar _a2n5es _ang4er _an5go _an5s _ap1p _as2k _a3sket _as4t _a5sten _a3sti _a5ta _at3t _au3st _a4val _av3s4 _b4 _bak5s _ben5s _bild3s _bo2k _bort1 _cis4 _cy5klop _d4 _d\xc3\xa4r3 _ek1v _e3l4a _e2l5in _en5st _e4n\xc3\xa4 _e2r3i _e2s _e5skad _es3kal _es5kap _es4t _e5strad _e3tr _evan5 _ex3 _f4 _feb3r _fram3 _fres5 _f\xc3\xa5gel3 _f\xc3\xb6r1a _f\xc3\xb6r1en _g2 _gu4l\xc3\xa4 _gus3 _he2m _hu5sa _ib4 _ik4 _im3p _i2n1 _i4na _in3d _in4ger _ink2 _in3s2 _in3t _is5ka _i3so _k4 _kans4k _ko5li _kort5s _kring3 _krings2 _k\xc3\xb6p5s _l2 _lak5r _lek5tr _lu2st _m2 _mas2ke _ma5skeri _me4re _minis4 _mj\xc3\xb6lk5s _mon2s _m\xc3\xa5n3s _m\xc3\xa54st _m\xc3\xa4n5sko _m\xc3\xb6rk5r _n4 _ner1 _no4n _n\xc3\xb6d5r _oc1ku _ok3t _o3kv _o2ma _o2mo _om3s4 _o3mu _on4k _o3o _ord3s _o5sc _o1s4k _o3sl _o3stra _o3sv _o3tr _o1u _p4 _papp5s _pa3ste _pa5sti _pi5sti _pres2s _pub3lika _r2 _re4gr _re2ste _runs4 _rym2d _r\xc3\xb6ve5 _s4 _sa2k _seg3r _si5o _sj\xc3\xb61 _sk4 _skott3s _slut3s _st4 _sta2m _sten3s _string4 _sup3p _t4 _ta3bl _ta4k _tak5l _tes3ta _tig3r _til4l _ti3o _topp5s _tred2s _tre3s _tr\xc3\xa45k _u3k _ult5r _ung2e _up2 _u4ra _ur3s _u2t1 _u4ta _u5trer _ut5s _v2 _var4t _vatten3 _ved5s _v\xc3\xa42g _v\xc3\xa4g3s _x2 _y2a _y4e _\xc3\xa5ng3 _\xc3\xa5r4s5 _\xc3\xa53st _\xc3\xa5ter1 _\xc3\xa43ro _\xc3\xb63ro a2b ab4bu a5be abel4s abe2s ab1l ab3la ab3ort ab5ric ab3rio ab4sc ab4sk a5bu ac4kes ac4kis ack3sk ack3u4p a5dag a5dek a5del ad5ep ad3j ad3op a5dran a3dre 1adres ad3ril ad3ru ad2s a5ed af4fo 3aff\xc3\xa4 1af3ri af4tor a1ga aga4ra a1ge a2ge_ ag1gr ag1l ag5ord ag3ro a4gur a4hj aib4 a3iv a1j a3ka a4kart a5ke a1ki ak3n a1ko ak5ram akri5s ak3rob ak4sta 1aktig ak3tri a1ku a5kvari ak3ve a5k\xc3\xa5r ak5\xc3\xa5t 4ak\xc3\xb6 a1la al5adm ali2br a2lin a5lin_ a3line al3ins ali5stik a4lj alk3ak al2kv al4k\xc3\xa4 all3st al3l\xc3\xa5 alms4k a1lo al5ort als5pa al3tr al4tu al4t\xc3\xa4 a1lu alu5s alv3s a1ly a4maf am4i am4pr am1s am3\xc3\xa5t a3m\xc3\xb6 ana4bo an3alf an3ark an3c anci5 an5dak andel2s an4dun an4d\xc3\xa4n a4nef ang4es an3gi an1gr aniu4 ank3r ano2i a4nok a4nop an5sce ansis3t an4sj ans5ku ans3li ans3par an1st an4sto an4sty 1ansvar an4tj an4tre a1nu a5ny a3n\xc3\xb6 a1o a1pe a2pe_ ape4n3 a1pi ap4lan apo3str 1appara apps4k ap3ric ap3rif a5pris ap2s ap3se aps5l aps3p apu5s a5py a5p\xc3\xa4 2ara a4rann a4rarv 1arb 4arbi 2arbo 4arbr ar3dr ard5st a4rend arg5si 2arh a1ri a4rigen ar3ka ark3lan ar5kr 4arl 4arn_ ar4nal a1ro a2rob 4arp ar2sa ar5skal arsk5l ar2sv ar4tro arts5p ar4tur 4aru a4rur a5rus ar4v\xc3\xa4g a3ry a3r\xc3\xa4 2asa asbe4 a1sc as2h asis5t as3kis a2sko a4skr as3ku as5l as3pa as3pig as2sk as2s5op as2sp as2st ass5up as3ta a5stard as5ter as5tiker asti5o as3to as4tr ast5rak a5stral ast3rol as5t\xc3\xb6r a3su a4sul a4sund as2ut as3v a1sy a2s5\xc3\xa5 a2s\xc3\xb6 a1t ata5ra a5te ati5\xc3\xb6 a4tj a2tr a3tral 4atrar a4t3re at3ria a3tric at3rie a5trik a3tris a3t4ro a4tro_ at4ska 1attac at2tak at4tj at4tos att3s a4tung 2au au5b au2t5a 3autom aut5s 2a1va a4vart 1avg 2a1vi av3r 4a3v\xc3\xa4 a5\xc3\xa5 1b2 3ba ba4di ba4do bad3s4 bak5l ba4ko ba4ku bank5l bas4ta ba5stu 4bb b4bak b4batt bbb4 bb3l bb4ler b4b3r bb4so 4b3d 3be be3d4r be5e be1k 4beld be5lu be3ly be3l\xc3\xa5 be5l\xc3\xb6 beng4 be3n\xc3\xa5 be1r\xc3\xb6 be1s be3sl bes5s be4sta be4ste be5su be3tr be3tv be3u 4bex 2b3f 2b5h 3bi bi3d4 4binv bis3ko bi5skv b3je b3k b5lar b5lat ble4mo b5len 5blera 3bles 5blid 3blikr 3bliks 4b3m 2b3n 3bo bo4gr bo2kl bo1mu 5bon bors5te bor4ti bort3r borts2 bort3sl bo1s bo4sc boy5 4b3p 2b5raf 4brar 2b5rati 3brik_ b3rika 3brike 3briks b5rik\xc3\xb6 bru4st 3bry 3br\xc3\xb6 4b3s b5sce bs3ch b4slan b4sof b4sp bst4 b4stj 4b3t 3bu bund4s bus2st b3v 3by by5r 3b\xc3\xa5 b\xc3\xa5ng3 b\xc3\xa5t2s 3b\xc3\xa4 3b\xc3\xb6 b\xc3\xb6r2s c2 5cap c3c 1c4e cens3t 3centr ceu4s 4ch_ 3chau 3chef 5choc 4cht ch\xc3\xa4s3 ch\xc3\xb6r4 1ci ci4lu cim2 cipp4 4ck c3ka c3ke c3ki ck5j ck1l ck5lis ck3n c3ko c4kordn ck3org c4kort ck3r ck4re ck3sla ckus2 ck3va ck3ve ck3v\xc3\xa4 ck5\xc3\xa4 ck3\xc3\xb6 cle2a co2a co4m 4cr cros2 4cs 1cy 1d 3da 5da_ 4dadr dags3 2dak 5dako da3li 5dam da3m\xc3\xa5 4dand_ 4d1ap 4darb 4dart da4tr dat5t 4dax 2db 4dc dcen3 2dd ddd4 ddi4s d3dj d4dos dd3ra dd3re dd3ri d3dr\xc3\xa4 dd2s dds3v 3d2e de1k4 4deko 4deld del2sa dels5ti de5lut d4en denti5\xc3\xb6 den2to de3pr 5der der1k de2ro de5rol der5sti de4ru de2s de3se de3sp des3ti d4et de3tr 4dex 2d1f df\xc3\xb63ra 2d1g d3gl 2d5h 3di dias4 di5el di2gr di3ka di5ku 4dinf din3g4o 4dinr 4dins 2dinsp 4dint di1o di4od di3sc di4sj dis3ko dis1kr dis1p dis5to dis3tra di4tre 2dj d3jor djup5p 3djur 2d3k2 4d5l 2d1m 2d1n 3do d2ol do5lo 4domr dom2sk 5don do4pak 4d5ord 4dori 4dort d5ost do3y 2d1p 2d2r2 d3rad 3d4rag d3rand d5rarb d5rassera d5ratu 3drej d3ren 5dres d3ret d4ric 3drif d3rig 4d5rik d3rin 3d4riv d5roc 3dropp d3ror 4drot drotts3 d3r\xc3\xa4kn 3dr\xc3\xa4kt 5dr\xc3\xa4n d3r\xc3\xa4t d5r\xc3\xb6d 4ds d2s1an d2se ds5enh d4sf d2si ds3ins d2sj dsk2 d3skef ds4ken d3ski ds3kl ds5kn ds1l ds4lot ds4mo d4sm\xc3\xa5 ds5n\xc3\xa5 d2so ds3pl ds3s4 ds3tal d5stat ds4te dste4a d5stig ds3tin ds5tro d2su ds1v d2s\xc3\xb6 2d3t 3du dub3ble 4dup du1s du2sc du4ste du5s\xc3\xb6 4dut du4vu 2d1v d3vr 2d3w 3dy dy4kan dy4ro 4dz 5d\xc3\xa5g 2d\xc3\xa5s 4d\xc3\xa5t 4d\xc3\xa4g d\xc3\xa42r 3d\xc3\xb6 d\xc3\xb6ds1 4d\xc3\xb6g 4d\xc3\xb6p d5\xc3\xb6st d\xc3\xa94 e1a e2ake e4am 4eb e2br eb3ril 4ec e3ch echiff5 ecis4 e3co e2d e4dans edd4r edi4u ed3j e5dral ed1sk ed2sko ed3s2l edso4 e3d\xc3\xa5 e1e e2ed e4ei ee2k5 e4en_ e4ene e1f ef4s 3efte e1g e3ga e3ge ege2l eg1l eg2ler e3glera e5gleri e4gran eg5rat eg3rin e5gru egs3 e5g\xc3\xa5 eig2 ei5gn e3ik e1in ei5sh e1isk e1jo e3ju e3j\xc3\xa4 e5j\xc3\xb6 e3ka e1ki e1kl ek3lat ek4le ek3n e1ko ekord5s ek3orr ek4ret_ ek5ro e1ku e1kve ek5vis e1ky e1k\xc3\xa4 e1la el1akt el4arb 3eld_ eleb3r elekt3ri el4fra eli5ku el3k4 el3li ell3s el3l\xc3\xa4 e1lo e4lob el3p el2si el5ug e5luv 2e1l\xc3\xa4 e1m e5mat e5mis emon1s em5ort emp5le en5art e2nav en4ce e4ned e4nek ene3r\xc3\xb6 2enj en5klo en3kn en5kr en5k\xc3\xa4 enning5 ennings2 eno2m en3si ens5ke ens2m en2sp ens4te ens4vin en4s\xc3\xa5 ent4ha en2t1r ent4rat_ ent3rati ent3ri ent5ru e5nus 2eny 2e1n\xc3\xa4 e1o e2og eo4i e5or 2ep e1pe e1pi e3pla ep5le epp2s3 epps5t e1pr ep3s ep4tr epu3b e3p\xc3\xa5 er1ak 4eras er3d4 erg4l er4gu er4g\xc3\xa5s e1ri e5rib e4rinf erings3 eri5stik erk4lin erl\xc3\xa44 er5na e1ro e3rob e2rom erp4 er3ra er5sc ers4ken er3sl ers4le er4sta er2ste er3str er3sv e1ru e5rum e3ry e5r\xc3\xa5d e1r\xc3\xa4 e2sal es5all es3arm e1sc 2ese es4hi esi4u es2k e4skan es5kar e4s3ken es3ker es5kul e1sl e5slag es2mi e1sp es3pl es2sk ess5l\xc3\xa4 es2st e3stal es5ten_ esti2ge es3tin es5tor_ es4tr est5rer e3stru est4r\xc3\xb6 e3st\xc3\xa5 es2u e1sy eta3b e5ti eti3\xc3\xb6 e1to e5tri_ et3ris e5tr\xc3\xa4 et2s ets2ad ets3kr ets1l ets3m ets5pa et4sv ett3r e1tu etu4ri et4va et5vu e1ty 2etz e1t\xc3\xa4 et\xc3\xa4c4 euk4 e5um_ e5up4 4eur eu4se_ eu5tro e1v e4varm e4vj ev3r 3exp ext4r 4e\xc3\xa4 f2 3fa fac4 fac5ke 4fans 4farb fa3sh fa4st fa4t\xc3\xb6 4fav 4f3b f3d 3fe 4fef fe2l fes5ta fe3sto 4fex 2f1f fff4 ff3l ff3n f3fo ff3r ffs4 f3f\xc3\xa4 ff\xc3\xb65re f3g2 f5h 3fi fi2br fib5rig fi3li fin5sm fi3skal fisk3r fi2ti 2f3k 1fl flo4da 4f3m fma4 1fo 4fof fol2 folk1 2f5om fo2na for4mo fost3r 4f3p fra2m fram5p f4rer 5freri fre4s f4ri_ fri5sp 5frit fros5ta fru5str fr\xc3\xa5n5 2f3s fs2k f4sl f4sm f4sn f4sp f4st f4sv 2ft f3ta f4taf f4tak f4tap f4tarm fte4r f4tex f3ti f4tin f3to f4t3r ft2sa ft4set ft2s5i ft4sj fts4t fts5v\xc3\xa4 ft5t ft1v 3fu furs5te fu5ru fu3tu 4fv 5fy fy4ma f\xc3\xa53t\xc3\xb6 1f\xc3\xa4 f\xc3\xa4s5ti 3f\xc3\xb6 f\xc3\xb62ra f\xc3\xb62ren f\xc3\xb62ri f\xc3\xb6r3k f\xc3\xb6r3sm f\xc3\xb6r3su f\xc3\xb6rt4 f\xc3\xb6r1\xc3\xb6 ga5br 3g2ag 4gakt 3g2al gall3s ga5l\xc3\xa4 ga4no 2garb 4garm ga2ro 4gart ga4st ga4su 5g2ati gaus4 g4av g5avsn 4gax 2gb 2gd g3d4r ge2a ge5b4 2gef 2ge4j g2eli 3gelis gel5st gel5y 3gel\xc3\xa4 gel5\xc3\xa4n g4em ge4nap gen5g 3g2eni 3genj 4genm genom5 gen4sa g4ense 1g2ent 4genv ge5ny 3gen\xc3\xa4 ge2o 1g2era 4gerarb 3g2eri gers5n 5gese ge4to get5s 5g2ett 2g1f 2gg g1ga g4gap g1ge gg5g gg1l g4gos ggs4la ggs4m gg3s4t gg3s4v g4gu 2gh gh4te 1g2i gi1o gi5sn gi4ste gis4tr gi5stral gi5st4rat 3giv gi2\xc3\xb6 g2jo 3gjor g3j\xc3\xa4 2g3k2 2gl g4lans g1lar g2las 5glase glas5k 5glas\xc3\xb6 g4lid 4glj g4l\xc3\xb6g 5gl\xc3\xb6m 2g1m 2g1n g4nag g2no 1g2o 3go_ 3gol gon3s4 4gont 2gord 4gorm 4gort go3sl 2g1p g2r4 3graf 5gral gra2m5 5grans 4gras 5grec 5grett g3rig 4g5rik 5grip 3gris g5roi gro2v 4grum grus5t g4r\xc3\xa5 5gr\xc3\xa5_ gr\xc3\xa44n 5gr\xc3\xa4ns 2g2s gs1an g5satt g3sel g4sf gsi4d g3sju g5skaf gs4ki gs3kn gs4kot g3sky gs1l gs1m g4sme gs3n gs4ni gs4n\xc3\xb6 gs1or gs3pl gs3po gs4por gs5pre gs3pu gs3s gs3tak gs3tal g3stark gs4ten g3stif gs3till gs3tj g3stol gs3tra gst4re g3st\xc3\xa4m g4sug gs1v g4s3ve gs3vi gs3v\xc3\xa5 gs3yt gs1\xc3\xa4 2g1t g3tr 1g2u 4gug guld3 gul4da 4gul\xc3\xa4 gu2ma 4gup gu5ru gus4k 2gut g3utb 2g1v 4gw 3gy gytt3j 1g2\xc3\xa5 g\xc3\xa5rds5 2g5\xc3\xa5ri g4\xc3\xa4l g2\xc3\xa4r g\xc3\xa44s 1g2\xc3\xb6 4g\xc3\xb6g g\xc3\xb65ro 2g5\xc3\xb6rt 1h ha3bl ha5ge ha4li hal4so halv3\xc3\xa5 ham4st handels3 hands4l han5g2a ha5ra ha4sc ha4sp hasp5l has3t hav2 havs3 h5c 4hd he4at he4fr he4l\xc3\xa4 hets1 hets3t hets3v h3g h2i 4hir his2sk hi4t hj\xc3\xa4l3s h1k 2hl h4le 2hm 4hn h2na h2nit ho5nu hop5plo hop3s hos3p hos5ti 4how h3p h5ru h1s 2ht hu2s hust5r hyg5r hys4t hys5ta hy3ster h\xc3\xa5rd5s4 h\xc3\xa4ll2 h\xc3\xa4lls1 h\xc3\xa4lso3 h\xc3\xa44ri h\xc3\xa44s h\xc3\xa44var h2\xc3\xb6 h\xc3\xb62g h\xc3\xb65gen h\xc3\xb6g5r h\xc3\xb6rn5s h\xc3\xb64s h\xc3\xb6st5r i1a ia3fr ia3g ia4lu ia4sk ia3tr i2b3l i5bril i3ca i4ce_ i5cha ic4kord ick3u4 i5co i2d iden3s id4ge i4dom id1r id3ro id2s ids3v i4dun i3d\xc3\xa5 i4d\xc3\xb6 2i1e ifes4 i5fn i1fr 3ifr\xc3\xa5n i1g 4igan i2geb ig5ej ig1l ig3no i3i i4kart i1ki i3klo ik5l\xc3\xa4n ik3n i1ko ik3re i5krob ik5rof ik5ros ik5s2h ik5skor i3kul i3kum ik5u4t ik1v i3ky i3k\xc3\xa5 i3k\xc3\xb6 i1la il4dan i2lin il1j\xc3\xb6 il5k il5lak il4lik ill3s2 3illu il5l\xc3\xa4r il2min i1lo il2tj i3lu ilufts5 i4lup i5l\xc3\xa4 im2b3r im5sm im4so i1mu i5m\xc3\xa5 i3m\xc3\xa4 i5m\xc3\xb6 i4nau ind5sk\xc3\xa4 ind5sti 1indu in4ga in4ge_ ing4es_ ing5is in5glas ings5te i3ni i4nif in5j in5kve 1inneh 5inre 1inri 3inr\xc3\xa4 in4sem in3skr\xc3\xa4 in3sl ins4m in3sn 1inspe 5inspeln in5spr 3instink 3instru in4st\xc3\xa5 in5te 1intr in4tra int3s i1nu i4nun in3ym i1n\xc3\xa4 i5oc i1og i3ok io4kr i1ol io5li i5om ion2 i3ono ions3 i1op i1or i1os i1ot i1pe i1pi ipos4 ip5pi i3ra i4res i1ri irk5l i1ro iro3p i1ru i5sce isel4 is2h i2sk is5kep isk5na is3kopa is3ku is4kun is3ky i5slam is3l\xc3\xa4n is3m is3n i2s3p is4pri is3sa is3se iss5n is4s3tr iss3t\xc3\xa4 i1stal i1stans ist5att is5ten_ i1stent is4tes is3tig is5ting is5tor_ is5tore ist5ro ist\xc3\xa54 is5v i3sy i4s\xc3\xa5 i1t it5c i4tei i4tex i4tj it5ran i5trin i3tris it2t5op it4t3r it4tu i2t5\xc3\xa5 4i1u i1va i2vak i1vi i4vin iv3r iv2s i1v\xc3\xa5 ix2t ix5tu i1\xc3\xb6 1ja 3jakt_ 4jarb jas5p 2jb 2jd jd3r jd4sty j4du 1je je2a 5jef je5sta 2j1f 4j3g 4jh 1ji 4jin 4jk j4kl j3ko jk3v 2j1l 2jm 2j1n j2o 3job jo4kr 4jolj jo5l\xc3\xb6 jor4din jord3s4 3jou 4jp j5pl 2j3r 2j1s j5sa j4sk js4me js4te 2jt jts4 2j2u ju4kos juk3s jul3k 4jur jus5kr juss4 jus4t jus5ta jut4sta j\xc3\xa45lo j\xc3\xa4l4p5r j\xc3\xa4l4sa j\xc3\xa4rn3sk j\xc3\xa4r5s j\xc3\xb6r2s j\xc3\xb6s4t 5j\xc3\xa9 1k2a 3ka_ 3kad_ 3kade_ ka4dr 2kaf 5kaf\xc3\xa4 ka3i ka5ju 2kak k3akti 4kalf 4kalg kal4lo kall3s 3kamp 3kamr 3kan_ 4kand_ 5kano 2kap 3kapi ka5pla kap4pr kaps5t 5kapten 3kar_ ka3ra 4karb k5arbet ka5ri 4kark 3karna 4karp karp5s 4kart_ 4karte 4karv 3kas ka4sk kas3ti 3kat_ 3kats_ 4kau 2kb 4kc 2k3d4 kdom4 1k2e 3ke_ 2ked_ 2keda ke3dr ked4s ke4er 2kefu 4keld kels4 4kense ke5n\xc3\xa5 2kep 3kern ke2s kes3s 4kex 2k1f kf\xc3\xb62 kf\xc3\xb63ri 2k5g4 2kh4 kid3s 4kif 1kig kik4s kilt4 5kim\xc3\xa5 king3r 4kinne 4kins 2kint ki4nu ki4tr kiv3s 4kj 5kjol k3j\xc3\xa4 2k3k kl2 1klag k2lama kla4mi 3klang_ 3klass 2klat 5klav 2kle k2lej 2klig k2lim 3klip k2lis 5klist3r k5lock_ 5klocka 3klos 1klub 4kluk 1kl\xc3\xa4d 2k3l\xc3\xa4g 2k1m 2k2n k4nal 3k4nap 5knip 3k4niv 3k4nu k4ny k5nyk k2o 4koc ko5de k5odl kog3n ko4gr kog4s3 4kola ko2lin 4kolj kol5tr 5kolv_ 1kom 3komm 5komp 2k3omr kom4s 1kon 3konf 3konst 3kont ko3nu 1kor 3korg ko3ri 2korr 3korres 5kortera ko5s4k ko3sl 3kost ko4str 4k3ou 2k1p k2r4 3kraf 5kra3ge 4krang 5krera k4reten krid5s2 1krig krigs3 krings2k 4kriv 3kropp kropps5 kru5stad k3ryg kr\xc3\xa5k5s kr\xc3\xa54pa k5r\xc3\xa4dd_ kr\xc3\xa4k5l 4kr\xc3\xa4l k3r\xc3\xa4t 2ks ksaks5 k2s5as ks3ch k4ser ks2k4 ks3kl ks5kra ks5kv k3sk\xc3\xa4 k3sk\xc3\xb6 k5slag_ ks2li k5sly k2so ks3pl k1s4t kstavs3 ks5tid k2su 4k1t k4tex kti5ge k4tinn k2tins k2tod k2tom k2tr kt3re kt3rin k5trod kt5rog kt3rol kt5r\xc3\xa4t kt2st kt5t4 k4tug k2tut k4t\xc3\xa4l 4kug k5ugn ku5la 4kuld 3kul\xc3\xb6 kum5pl kungs5 5kunn ku4pen ku4ro 3kurs 3kus kust3a kv4 3kvali k5vare 3kvarn kvar3s 3kvart k4vato k2ve 2kvente 1kvinn 5kvire k4vo k1v\xc3\xa5 3kv\xc3\xa4ll k1v\xc3\xa4r kydds3 ky4lin 3kyrk k\xc3\xa4l4m 5k\xc3\xa4mp 5k\xc3\xa4nn 3k\xc3\xa4ns 3k\xc3\xa4rl 4k\xc3\xb6g k\xc3\xb6ks5t 5k\xc3\xb6p_ k\xc3\xb6r4l k\xc3\xb6r4sl 3la_ 1lade_ 2ladm 4ladr 2laf 3lagd_ la4gin 5lagm lag3r 2lak 5lakan_ 5laki 3laktis la5lo 3lande_ lan4di 2lappara 2larb 1larn lar5s 4lart las3h 4lask la4st 5laste_ 1lat_ la5tr lat4tis 2lau 2lav la5vu 2lb4 4l1c 2l2d lder4s l3dj ld3ra l5dry lds4an 1le 3le_ le4ge_ le5ig le2kl le4kv lem4s\xc3\xb6 2l5enl 3ler_ ler5k 3lern ler3ste le5s2l le5t\xc3\xa5 le3um le4vu 2lex 2l1f 2l1g l2gj l3g2l lgs4 lg5st 2lh 1li li5ch 3lif 3lig li4go lig3s lik2l li5kli lik3s 5limer 2lind 2linga_ ling5o 4lingr lings5t 2lini 5linj 2lint li1o 2lip lis3c li4sta li3str\xc3\xb6 li4vo livs1 l2jak 4l1jo 1lju l5j\xc3\xa5 l1j\xc3\xa4 l3j\xc3\xb6r 2l1k l3ke l5kju l2kl lk5lag l5kl\xc3\xa4 l2kr l3k4ra lk3t l1la lld4 ll3dr lle5b ll3k ll1l l1lo llok5v ll3p ll4san ll2se ll3ska ll2so ll4sva ll4tig ll3tr l1lu ll5un llust3ra ll5v l5ly ll\xc3\xa4ggs5 l5l\xc3\xb6d ll\xc3\xb6r4 ll5\xc3\xb6rt 4l1m l4mol lm3st l1n lo2af loc4ku 4lodl lo4do lod3st lo2ge_ 2lolj 2lom 4lord 2lorg lor4s lo4vo l4pak l1pe l1pi l5pla lp5l\xc3\xb6 lp4st 4l3r 2l1s l2sc l4sjo l4sj\xc3\xa4 l2sk l4skensv l3ski lsk3n l5skot l3skr\xc3\xa4 l3sky l3sk\xc3\xa5 lsk\xc3\xa54p l3sk\xc3\xa4 l3slu l4sm ls4mo ls5nyt l2sp l3spe ls3pl ls3pol ls5s l2st l3sta l4stak ls4te ls5ter l3sto l3sty l4styg l3st\xc3\xa5 l3st\xc3\xa4 l5st\xc3\xb6 l2su l5sur l2sv l4svi ls5vid l4s\xc3\xa5 4l1t lta2tu l4tef l4tif l4tih l4tos lt5rati l4tret l4tr\xc3\xb6 lt5sk ltu4 lu5i luk4to 4lull_ 2lun lung3 2lupp lu4pu lus2s5p 5lust_ 4lutb 4luts 2lv l1va l4varm lvers4 l1vi l4vos lv3ri lv3sp l1v\xc3\xa4 lv\xc3\xa4v4 lycks5t ly4gat lyg3r lyg3s2 3lyste 5lystn ly4str 2l\xc3\xa5_ l\xc3\xa5g3s 1l\xc3\xa5ng l\xc3\xa5ng3s l\xc3\xa54sk l\xc3\xa5s5te l\xc3\xa54st\xc3\xa5 4l\xc3\xa4c l\xc3\xa4g5r 1l\xc3\xa4nds 5l\xc3\xa4ngder l\xc3\xa44san l\xc3\xa44sp l\xc3\xa4tt3s 4l\xc3\xb6l 4l\xc3\xb6m 3l\xc3\xb6n 3l\xc3\xb6rer 1l\xc3\xb6s l\xc3\xb64v\xc3\xa4 3l\xc3\xa9 1ma ma5fr mag5n mag5s ma5ju mak3r ma3li mand4 mang2a man5g4o ma5ni mani1k 5ma3ri mash5 mas3ko mask3ro ma5sk\xc3\xb6 mas3ti mas4v 2mb mb4sk 2mc 2md m4dat m4di m4do m3d4r 1me 2meds me4du me4kl me4ko 4meld melo5 me5lu men5k me5nu me5ny mer2sko me4so mes4t me3sti 2meta me5trin met3ro meu4 2mex 2m1f m4fes m4fn 2m1g4 2mh 1mi mid3s mi4lu 2mind ming4o 4mink min4kr 4minv mi3n\xc3\xb6 mis2 mi5sf mi4sp miss3t mi4te_ mi4tr mitt3s 2m1k 2m3l 2m1m2 mme5d mm3s4 m4mul 2m1n m2nam mnas3t m4nav mn5dr mn3g4 mn5st mn5tu m2n3\xc3\xa5 1mo m4od mo4i 2momr mo3na mos3k mo2ta mo4tin mo4tu mot3v 2m1p m2pak m4part m2pl mp3lad m5plane mp3lat mp3lin mpos4 mp5p4 mps4k mp5sp m4p\xc3\xa5 2m1r 4ms m4sal m4ske m3slag ms3l\xc3\xa4 ms2m mste2 m1sto m2str mst3rin ms5\xc3\xa4p 2m1t 4mud mulls3 mult5r 5mum 4mun3g4 mun4ko 3mur 3musi mu3sta mut4sl 2m3v 1myn mys4te m\xc3\xa5g4 1m\xc3\xa5l_ 5m\xc3\xa5let_ 5m\xc3\xa5n_ 4m\xc3\xa5r m\xc3\xa51s 4m\xc3\xa4g m\xc3\xa4k3 1m\xc3\xa4n m\xc3\xa4ns4 3m\xc3\xa4rk 1m\xc3\xa4s m\xc3\xa4s5ta 1m\xc3\xa4t m\xc3\xb64bl m\xc3\xb64gen_ 3m\xc3\xb6j m\xc3\xb6r4kl 3m\xc3\xb6s 4m\xc3\xb6v 1na 3na_ 3nad nads3 2naf na5gr 2nak 3nako 3nakr na3kro n1akt 2nalf 5nalfl 4nalg nal3s na2lu n5amb 5namn 4nand_ 4nanv na4rap 2narb 2nark 4narm 2nart nast3r 2nb4 2n1c n2ch n3cha n3che n3chi ncis4 ncyk3l 2nd n4dak n4dav nd3d4 n5de nde3s n4dil nd5rak nd5ras nd3rat nd3ri n5dril n3drop nd5ros nd5skal nd3sn nds3or nds5v\xc3\xa4 nd5\xc3\xa5s 1ne 3ne_ ne4di 5nedl ne4d3r ned3s ne4d\xc3\xb6 ne2gr ne5gres 4nek_ ne5ly 4nenl ner5sm nes3s4 ne4sta ne5s4ti ne3tre ne1ut 2nex 2n1f4 nfalls5 nfis3 2ng1 n4gar n4gen_ n4gend n4gens n4genti n4germ n4get n2gi ng3ig ngi4s ng4ly n2go ng5om ng3or ng3rad n4gr\xc3\xb6 ng4ser ngs1k ngs3pa ngs5tim ngs3val n4g\xc3\xb6d 2nh 1n2i 4nid ni5ec ni4ki ni5li 3nin nings1 nings3k nings5v ni1o 4nip nip4pr ni5steri nist3ra ni3t4r niv5sk niv5st 2n1j n4jar n3jun nju4s n3j\xc3\xa4 2nk n4kart n1ki n4kis_ n3kny n1ko nkrafts5 nk3ri n1kro nkrus4 nk5sl nk3sp nk4tin n1ku n1k\xc3\xb6 2n1l 2n1m 2n1n nn3d n3ne nnis4 nn3k nn3s4t 1no 2nodl no4kl 2nolj 2nomr nom3s4 2nord 2norg no5sa no5sc no4tu 2n1p 2n1r 4ns ns2i n4sint n4sis_ n4sise ns2k ns3kan n1ski ns3kor nslags5 ns5las ns5mit n4soc n1spi ns3pl ns3po ns3s4 n3stans n3stap ns4tel n3stif ns3tig ns4tra n2strik nst5up nst5vil n3s4ty n1sva ns3vi ns3v\xc3\xa4r 2n1t n4tark nter5s4 n4tinf n2t5omb nt3rad n3trah n3trak n5trala nt3rali n5tram nt3rep n3trer nt3ria nt3rin nt3ris n4tropin n4tror n4tr\xc3\xb6 nts3c nt4se nts5kor nt4str n4tut n3tv\xc3\xa5 nufts4 4nug n5ugn 3nui 3num nums5 2nup n3upp 2nutb 2n1v ny5gr n5z 4n\xc3\xa5r 4n\xc3\xa4_ 4n\xc3\xa4c 3n\xc3\xa4m 3n\xc3\xa4t 4n\xc3\xb6g4 3n\xc3\xb6j n\xc3\xb62ja n\xc3\xb65kr 4n\xc3\xb6l n\xc3\xb6s4 n\xc3\xb6s5ke o1a o2ard o2b 5o4bj o4bli oby4 oc4k5r ock3sk oc3ku o2d ode4k odi4a 1odli o5dral o3dro ods4k od2st ods4ti od5stu o3d\xc3\xa4 o1e offs5t o4fl o3fr of\xc3\xb6rm\xc3\xa54 o1g o4gav og3gr o4gj o5glo o5gly ognos4 ogno5st o4gri o4gr\xc3\xb6 og3se og4s3t o4g\xc3\xa4 o1i o4il o1j o1k o4kli ok3n ok3sl ok4su o2kv o1la o5lak ol5au olf\xc3\xb64 1olj ol3ka olk3r ol4ku ol4k\xc3\xa4 oll4si oll5sl\xc3\xa4 ol3l\xc3\xa4 olm4s oln3s o1lo olo5kv ol4sa ol4t\xc3\xa5 o1lu o4lug o4lur o1ly ol5\xc3\xa5r o1l\xc3\xa4 om4br\xc3\xa4 o3men o4mord om5pa om3pl 1omr 4omra om1sk om4ste 3oms\xc3\xa4t om4tr om3tv on3c on5gi on1gr ongs4l o4nins on3j on1k4 ons3c onsi3s ons3m on5stel ons4ter on3tras on4tre ont4s o1ny on5\xc3\xa5 o1n\xc3\xa4 o3n\xc3\xb6 oo4d oom5s o3or o1pe o1pi o5pline op4pl opp3le op4pr op4pu o3pri op4st o3p\xc3\xa5 o5q 4ora o3rak oran3g4 o2rap 1ordn or4d5\xc3\xa4 o4reh 1orga 5organi or4gr or4g\xc3\xa5 o1ri 3orient 4ork or4m\xc3\xb6 or4nu or4n\xc3\xa4 o1ro or4pl or5pr or4spa ors5tig or5te or2tr ort3re ort3ro o1ru o3ry o1r\xc3\xa4 o1r\xc3\xb6 o3s2f\xc3\xa4 osk4l o1skop o3som os5pig os4sk os4s4t os3tig os5tiker o5still os4tr ost5ron ost5r\xc3\xb6 os3tul ota2lan 4oti_ 4otie 4otin o1to o5tro ot5run ot3sv ot5ti ot4tr\xc3\xa4 ott2s o1tu o5tun otvin4 o1ty o5t\xc3\xa5 o3t\xc3\xa4 oun4 oup4 4our ou3r\xc3\xb6 ou4s o3ut3t o1va ova4n o1vi ov3r ov4si ov3sl ovs4me o1v\xc3\xa4 o3we ox5 oy2 o3\xc3\xa5 o3\xc3\xa4n o3\xc3\xb6 1pa 4paf pag4 paki3 pakis4 pa5la pals5 pa5l\xc3\xa4 4pand_ pan4tr 3pap 2parb 4parm par3s 2pask pa5ski pa2st 3patr pa3u 2pb4 2pc 2p3d4 pek5tri pekt3ro 4peld pel3s4i 4pem 5peng 3penn pent5r per4bl 3perio 3pers per4sl pe5tro 4pex 2p1f 4p3g 2ph pi4el 1pig pi1o 3pip pi5so pi5sta pi5sto p2j 3pj\xc3\xa4s 4p3k2 p2l p4lac 5plan_ p4lane p3larn p3lev 3plex 3plic 1plik 4plit p3lj 1plom p3lop 2p1m 4p1n p3ni 1po 5poa 2poc 2pof po2i 3polit 4polj poly3 2porg 3pos pos4ter 4pov po4v\xc3\xa4 2pp p4part pp5ask p4pax p3pe p1pi p4pins pp3j pp1l pp3la pp3lin pp5lis pp5lu pp3ly pp3l\xc3\xa5n pp3l\xc3\xa5t pp3l\xc3\xa4 pp3l\xc3\xb6 pp5oc pp3of pp3p4 pp1r pp3ra pp3ri pp3ru pp3ry pp3r\xc3\xa4 pp3tr p2pu p5py pp3\xc3\xa5 p2r2 2pra 5prax 1pres pres4t pre3sta pres5to p3rig p3rik 5pril 3princ pring3 p5riol 3pro pro3g p3ror 4pr\xc3\xa5 3pr\xc3\xa4s 3pr\xc3\xb6v 2ps p2sal 3psalm p5s2ho ps4ken ps2li p3sna 4pso p3sod p1s4t p4stak p4st\xc3\xa4v p2s\xc3\xb6 2p1t p3tri 1pu 4pug pul2l5ov pul5tr 5pung 3punk pus3t 2p1v p\xc3\xa53dr 3p\xc3\xa4l p\xc3\xa45ro 4p\xc3\xb6r 3p\xc3\xa9 qu4 3que 1ra 3ra_ raci4t 3rade_ 4radr ra4du 5ra1e 2raff\xc3\xa4 ra3fr ra5is 2rak ra2lo r4ande 3rande_ 4ran4d3r rand3s 2ransv ra3pl 3rar r4ar_ 4rarb r4are 4rarg r4ark 4rarm r4arn r4ars 4rart r3arta ra5r\xc3\xb6 r4as ras3h ra2st 3raste_ 3rativ ra3tri 2rav ra5yo 2rb 2r1c 2r2d r4daf rda5gr r3dj r4dos rd3ran rd3rat r4dul r3d\xc3\xa5 r3d\xc3\xa4 r4d\xc3\xb6s 1re 3re_ 4reaus re3b 4rec 5reco re3d4r re5du 4reft 4regg 3regn_ re1kr rek5tri 4reld re3lu rem5p 3rems r4en_ 2reni 2renk 2renl re3n\xc3\xb6 re3o 3rer_ 3rern 3reso ress5k re1sti 3ret_ 4retet ret3ro 4rety re5t\xc3\xa5 2revig 4rex 2r1f rf\xc3\xb63ri 2r1g rg3g2 rgs5top 2rh rhands5 3rial 4rib 3rifi 2rifr r3ifr\xc3\xa5 3rifu 3rigt rik2s 3riktn ri4mo 2rind rind3s 5ringen_ ring3r 2rinr 2rins 2rint ri1o 3riot ri5ple ri2st\xc3\xa4 ri4tut ri4vis riv3s 4rj r4jis r3jo r5ju r5j\xc3\xb6 2rk rk3akt r4kek rkes3 r1ki r3klas rk2le r4kl\xc3\xb6 rk3n rk4ne r1ko r4kod rk3tr r1ku r4kup r1k\xc3\xa4 r5k\xc3\xb6r 2r1l r5laka r5lav rld2 rlds3 rl5sp 2r1m r4marb r4mil rm2s5j rm5tr 2r1n rnal4 rn3g4 rn1k r2nom rns4k rns4t rn3t ro3b ro4gro ro2kr 2rolj rol4li rom4a 5roman 5ronau 5rond_ ron4v ro3pl ropp2s ro4ra 2rord 2rorg 2rorie 3rorn ro4sin ro4sn ros3v ro5te 2r1p r4pl\xc3\xb6 r4p\xc3\xb6 4r1r rra4n rrd4 rreligi5 rres4 r5rib rr5k4 r4rob r4rom rr1s rrs2k r4rur 2rs r4seld r4sex r2sin r1ski r4skid rsk3na rs5koll rs4kos rskotts3 r2sku r3sk\xc3\xb6 rslags4v r4sle r4slo r4s5l\xc3\xb6 rs4mo rs5nat rs5n\xc3\xa4 r1sp r2spl r2spo rs3s4 rs5tak rs4te r5stek rs5tend r5steni rs5till r1sto r4ston rst4r r3str\xc3\xb6 r3stu r1sv rs4vag r2sv\xc3\xa4 r1sy 2r1t r2taf r2takti rt4an r4tins r4tom r5trit r3tr\xc3\xa4 rt3t r4tut rubb5l ru3br ru4dan ruks1 ruks3v 5rullera 3rum_ runn2 runns5 4rupp rus2h ru5sha 2rut 5rutig rut4ra ru4vi 5ru\xc3\xb6 2r1v rv4sj rv2s5k\xc3\xa4 r3w rydd5s ry5o r\xc3\xa5ge5l 4r\xc3\xa5l r\xc3\xa5ng3s r\xc3\xa55ra r\xc3\xa53st r\xc3\xa4ck5s 4r\xc3\xa4kt 4r\xc3\xa4m r\xc3\xa4ng3s r\xc3\xa4ns5t 4r\xc3\xa4s r\xc3\xa44san r\xc3\xa4s3s r\xc3\xa45sti r\xc3\xa4v5s r\xc3\xb6d5el r\xc3\xb6d5r r\xc3\xb6d3s 2r\xc3\xb6g r3\xc3\xb6i r\xc3\xb6k3s r\xc3\xb6ns4t 4r\xc3\xb6p 3r\xc3\xb6r r\xc3\xb6r4s r\xc3\xb64st r\xc3\xb6st3r r1\xc3\xb6vr 1sa 3sa_ 3sad_ 3sade 4sadj 2sa3dr sad5s 2saf sa3i sak5ri 2s1akt sa5lo 3s2am sa2ma samman3 sa2mor sand3s 4sang 2sanl s3anl\xc3\xa4 san3sla 2sap 3s4ar_ 2sarb 2sarm s5arm_ 3sarn 2sart 4sarv 4sass 5sat_ sa4tu 2sau s3auk 2s1av 4sb s2c 2sch_ 1scha 2schau 4schb 1schen 1scher 1schet 1schi 4schk 4schm 4schp 3schy 3sch\xc3\xb6 sci3p 4s3d 1se se4at_ se2g 2s3egg 3segl seg3ra sek5le sek3r sek5tr 3sel_ se5ly sem2 3sen_ s5ers\xc3\xa4 3set_ 2sexp 2s1f s4f\xc3\xa4r_ sf\xc3\xb62 4s3g2 2sh 5s2haw shi1s s5h\xc3\xb6 1si sid5s 5sie si4eri si4esk si2ett 3s2ig 3sik sikts3 5sill_ silver3 silv3r 2s1ind 2s1inf sinne2s3 3sinni 4sinr 2sin1s s1inst 5sint_ 2sintr 3sio sis4t siu4 1s2j 2sjak s3jakt 4sjn 4sjt s4ju 5sjuk 4sjur sj\xc3\xa4ls3 3sj\xc3\xb6 4sk_ 2ska_ 3s2kada s2kado 3skaffn 1skaft s4kag s2kal 3skal_ 1skap 5skap_ 5skapet 4skapi skaps1 4skar s4kara 5skarv 4skas s2kat s4kav 4ske_ 3sked_ s4kene 3skepp 4skh sk4i 3skif 5skin 4skis_ 5skiv 5skjor 3skju 4skl sk5lap s3klas 4skn 3s4ko_ 1s4kog 4skogsg 1skol 3skola s4kolo s4korp skor1st 1skot s5kran_ 3skrat sk4ret 3skrev 1skri 3skrif s3krig 5skrin 3skrip s5kris 3skriv s5kron s4kru 5skrub 3skruv 5skr\xc3\xa4c sk3s 2skt 3skulp s3kup 2skv s4kve 1s2ky s4kyn 2skyrk 1sk\xc3\xa5 s4k\xc3\xa5l 5sk\xc3\xa5p_ 4sk\xc3\xa5r 5sk\xc3\xa4nk 3sk\xc3\xa4rv 2sl2 4sla_ s5lad_ s3land 3s2lang s4lant s3lar_ 4slas s1lat s2lev 3slev_ s4lic slins3 4slis s2lit s5lor slotts3 s2lu s3luc s3luf 4slus s3lust 3slut slu4to 3sl\xc3\xa5_ 5s4l\xc3\xa5r s4l\xc3\xa4k s5l\xc3\xa4m s5l\xc3\xa4nn 3s4l\xc3\xa4p 4s3l\xc3\xa4r s2l\xc3\xa4t 3s2l\xc3\xb6j 2sm s2mak 3smak_ s3makt s2mal s2met_ s2mid s2mit 3smitta s3mj 5smug 5smyg sm\xc3\xa55g sm\xc3\xa53k sm\xc3\xa53s 3sm\xc3\xa4d 3sm\xc3\xa4l 4sm\xc3\xa4s 3sm\xc3\xb6r 2s2n4 3snab 3s4nac s3nam s5nare s3nast s5ner 3snib 3snil 3snit 1snitt s3niv 3snut s4n\xc3\xa5 5sn\xc3\xa5r 5sn\xc3\xa4c s4n\xc3\xa4r 3sn\xc3\xb6_ sn\xc3\xb65g 3sn\xc3\xb6r sn\xc3\xb63s 1so 3soc 5sock 2sod 5soi 2solj sol3s2 2som 5somm 3son son4st so5pra so4pu 3sor_ 2sord s5ord_ 2sorg 3sorn 3sot 4sott s2p2 5spann_ s4park 5sparv 4spas s3pass spa5tr 1spe 4sped 3s4pek 3s4pel 4spelsl 2spen 2sper 5spets 3spill 3spir 4spl s1pla s3plan s3plats spli4 s4plin 5split s5pl\xc3\xa4 4spre s3pres 4s3pris 3sprit 2spro s3pry 3spr\xc3\xa5 5spr\xc3\xa4n s3ps 1s4p\xc3\xa5 3sp\xc3\xa5n 3sp\xc3\xa5r 5sp\xc3\xa4n 3sp\xc3\xb6 4s1r 4s1s s5sad sse4lin s5sil ss2k ss5kl ss3kun ss1l ss2lag_ ss2l\xc3\xa4 ss2l\xc3\xb6 ss3na sss4 ss3unn s2sv ss3vi s2t 2st_ 4sta_ 5stac 3stadi s4taf 5stalgis 3stalla 2stalli 5stam_ 5stamm 1stant 5stark_ 5startad 1state 3statl 1stau st3c 2s5te_ 4stea 5steg_ s4tek_ 2stekn 5stekt s4tell 3stem_ 3steme 5stenar 3s4tene 3stense 5stensm 1stera 1stering s4teriu 3sterne 5stetis 2stia 2stib 3stick 2stid s4tiken 2stil 3stil_ 3stink 3stisc 1stit 2stj s5tju 3stj\xc3\xa4l 3stj\xc3\xa4r 2stm 5stoc 1stol 4stolk 4stom stori4eu 5storis stor3s 3straff 4strativ 3strato 3strec 3strej st3ren 1strer 2stria 1strid 5stride 2striel st4rif 1strikt st5risk 1stru 3struk 2strumm s3tryc 5stryk 5str\xc3\xa5k 3str\xc3\xa5l 3str\xc3\xa4c 4str\xc3\xa4d 3str\xc3\xa4ng 5str\xc3\xa4v 3str\xc3\xb6m 2st3s4 st3t 4stv s3tvis 1sty 2styp 1st\xc3\xa5 4st\xc3\xa5g 5st\xc3\xa5l 1st\xc3\xa4 3st\xc3\xa4l 1st\xc3\xb6 1su su4b 3sug su3i 3sum 2sun 5sun_ s1under 5sune s5ung 2sup 5supa su2pu 5sus 2s1ut su4to su4tr s2v2 5svag_ s3vagn 4s3vak 5svam 4svap svars3 3svart 4svas s3vat 4svec 3sven 5svep 4s3ver s5ves 4s3vil s4vine 4svis s5vitt s5v\xc3\xa5d 3sv\xc3\xa5ri 3sv\xc3\xa4ng 5sv\xc3\xa4rm_ s3v\xc3\xa4s s3v\xc3\xa4t 4syk 5syl 3syn syn3k s3yrk 3sys sys4t sys5ter syt2 sy5th 1s\xc3\xa5 5s\xc3\xa5g 4s\xc3\xa5k 2s\xc3\xa5lde s\xc3\xa5ng3 1s\xc3\xa4 s4\xc3\xa4d 2s5\xc3\xa4gg s4\xc3\xa4l 2s\xc3\xa4p 5s\xc3\xa4s 3s\xc3\xa4t 4s\xc3\xa4ta 1s\xc3\xb6 4s\xc3\xb6d 2s\xc3\xb6g s5\xc3\xb6ga s\xc3\xb64ko 4s\xc3\xb6l 4s\xc3\xb6p s\xc3\xb6r2s 2s3\xc3\xb6rt 1ta 3ta_ ta1ch 3tade_ 4tadi 4tads5 2taff 3taga 5tak_ ta5kre 2taktig tak4to 4talf 5tallise tall5s 4talv 3tame 3tami 3tan_ ta4nab 3tande_ 2t3anfa 4tanl t4ap3l 2tappar 3tar_ 4tarb tar4mi 3tarn tars4 4tart 5tartavl 4tarv 4task 3tast ta1str tat2 ta4tan tats3 2tatt 2tav 4tave 5tavla_ 3tavlan 3tavlo tav2s 3tax 2tb4 2tc t3cha t3che 2t3d4 3t2e te4as te3b4 5tec 4teg te2g1r te3gre te3i te4int 4tej tej2s te4kl 5teknik 5teknis 4teld 5te5l\xc3\xb6 5tema 4temo te4mu ten3g4 5tensi ten3tr te4n\xc3\xa4 te5n\xc3\xb6r 5ter_ 5teri\xc3\xb6 ter3k4 5term 5terna 5ters ter3t te4ru 5tes_ 5test tes4te te5stik te5stu 5tetik tets3 4texa 2texp 2t1f4 2t3g4 2th t4hen 1ti 3tial 5tib 5tici 3tid 5tide ti4du 4tid\xc3\xb6 ti4ed tifts5 ti2gel 3tigh ti4go ti2gr 3tigt tik3l 3tiks 5tikul t2il 5tilj 3tillst 3tillv 3till\xc3\xa4 5time 2tind 2tinr 2tint ti4od 3tion ti2os 3tis 4tisc 5tisk 3tiva ti4van 5tivite ti2\xc3\xb6 t2j 4tje 4tjob 2tjou 4tj\xc3\xa4l 4tj\xc3\xa4m 3tj\xc3\xa4n 2t3k2 2t3l 2t1m 2t5n4 tne4r 4todl 3tok 4tol_ 4tolj 2tomr 4toms t2op 5torap t5ord_ 5toriett 4torm torm3s 3torn tor1st 4tort_ tos4k t5ost_ t4ov 2t1p t2r4 2tra t4raf 3trafi 3t4ral_ t4rala 3t4rale 5tralo 3trals t4ralt 3trans tran2s5a 4trar t3ras_ t3rat_ t4rato 4treg 4tren 4trer_ 4trern t3rets_ 2tri 3tribu 5trick trids3 t5riel t1ring t3ring_ 2troc t3rock t4rog t5ronik t3rono 4tropi_ 5tross 5trotn t4rump t4rup 3trupp trus5ta 1tryc 5tryck_ 5tryggh 4tr\xc3\xa5k 5tr\xc3\xa4_ 3tr\xc3\xa4d tr\xc3\xa4ds4 3tr\xc3\xa4f 3tr\xc3\xa4g 4tr\xc3\xa4k t3r\xc3\xa4kn t4r\xc3\xa4n 5tr\xc3\xa4ni 5tr\xc3\xb6ja t4r\xc3\xb6t 5tr\xc3\xa9 2ts t5s4and ts5art t3s4at t3se t4seg ts4en t4sex ts2k t5skall t3skatt t1ski ts3kl tskotts5 t5slot ts5l\xc3\xa4k ts3n\xc3\xa4 t3sn\xc3\xb6 t2so ts3ord ts3pl tss4 t1st ts4te ts5ter ts5tillf ts3tj t3stol t4ston t2stra t4stry t4stur t5styr t2su t3sud t5sy 2tt t3tac t4tau t4ted tte5g4 t4tem tte2n ttes4 t4tex t4tins t4tip tt3ja t1to tt3rad tt3rand tt3rat tt3re tt3ri tt4ry tt4se tt2si tt4sta t3tu t4tug tt1v tt4v\xc3\xa5 t3ty t3t\xc3\xa4 t3t\xc3\xb6r 4t5ugn 2tund 3tunga tung3s 5tunn 2tupp tu5re 2tutb t3utv t3ut\xc3\xb6 tu4vu 5tu\xc3\xb6 2tv t1va 4tve t3vig 3tving t3vit 3tviv t3v\xc3\xa5g 3tv\xc3\xa5n t3v\xc3\xa4n tv\xc3\xa4r3s 3tv\xc3\xa4tt ty5da 5tyg_ 3tyngd 3typ ty3pi 5tys 2tz 3t\xc3\xa5g t\xc3\xa5s4 4t\xc3\xa5t t\xc3\xa4c4ko 4t5\xc3\xa4g 4t\xc3\xa4m 4t\xc3\xa4rm 3t\xc3\xa4vl 4t\xc3\xb64d t\xc3\xb65de 4t\xc3\xb6g 4t\xc3\xb6p t\xc3\xb64pi 3t\xc3\xb6rer t\xc3\xb6rs3t t\xc3\xb64vas 5t\xc3\xa9 u1a u2b ub5al ubb4le ub3lic u4bo u3cha u5cl u2d u4dak u5de ud3r ud4ret uds4a u4du u4dy u1e u2es uf4f\xc3\xa4 uf4tan uf4to 4u1ga u1ge ugg3s ugn4 ugns5 ug3s4 u5ie u1in u3is u3itet u3j u2keb u5ki u4kl uk5la uk3n u1ko ukos4 uk2s uks5ko uk3tris ukt5s uk4t\xc3\xa4 u3ku uk3v u1la ul4di ulds2m ul4du ul4d\xc3\xb6 ull3ste ull3\xc3\xa4n u1lo uls5ti ul2tr u3lu u1l\xc3\xa4 u1l\xc3\xb6 um4f\xc3\xa4 um4so ums4t u1mu u3m\xc3\xb6r 5underl 1unders\xc3\xb6 1underv un4dom und3r un4d\xc3\xa5 un5g2ef un3gersk ung5it ung3r ungs4p 3unif unk3l unk3n un4kr un1sk un4tr un5trati u5nu u1o u1pe u4pern u1pi u2pl u3plet up3lik 3uppfa 1uppg up4pin 1uppla 5uppl\xc3\xa4 up4p3r upp3s upp5sp up5ut ur5ak ur5arv u3re u1ri u1ro u4rob u4rom urs5tin ur4st\xc3\xa4 u5ry u2sak us5anl u3scha u3se usen3 u2s1k us3ka us4kla us4kr u5sky us4k\xc3\xa5 us5l\xc3\xa4 us3n u2sp us3pen us5tat us3tig u3stik us5tin ust5ro u4st\xc3\xa5 u4st\xc3\xa4 us3v u4s\xc3\xa5 u4s\xc3\xa4 u2s\xc3\xb6 u4tak 1utb u4tef ute3s utik2 u5til uti3\xc3\xb6 ut3j 3utj\xc3\xa4m utlands3 u1to u3top uto5s ut3r ut4rer ut4ro ut5rop 1utru 2utsid ut3sl 3utsl\xc3\xa4 2utt utt4j ut1v 3utvec u5ty ut3\xc3\xb6v u5u 2u1v u2vak u4vj u4v\xc3\xa4 u5\xc3\xa5 u3\xc3\xb6 va5dro 1vagn 2v1akti val3k val4li val4st 5valv 5vama 4vand_ 4vanp van4st van5tr 5vap 2varb va4res va4ri_ 4vark var2s vart5r va1ru vas5ti 5vattn 4vau 4vav 5vavi 2vb4 2v1c 2v3d4 1ve 5vec ve2k ve3ke 4veld vensk3\xc3\xa4 5ventera ve3ny ve5n\xc3\xb6 4vep ver5g 3verk ves4 ve2s5p ve1st 3veta 3vete vet5sa vett5s 2v1f 2v1g 2vh v4i vi4c vid3s vild3s vil4t 3vind_ ving3s4 3vinkl vi2no 5vinst_ 5vinste vi5ny 3vis_ vi5sa vis5h vis5ko vi4st vis3ta vi2tr vi4var 4vjo 2v3k2 2v1l 2v1m vm\xc3\xb6rk4 2v1n4 1vo 4vok_ 2vom 4vord 2vorg vos4 2v1p 2v2r 5vrak 3vrera v3ru 2vs v4sc v1s2k v2skri vs4mi v3sni v2so v1st vs4te vs5tr\xc3\xa5 v5styc vs3v\xc3\xa5 v2s\xc3\xb6 2v1t vu4d1 v1und 4v5up 4vut 2v1v 3vy 5v\xc3\xa5ld v\xc3\xa5ngs3 3v\xc3\xa5rd 4v\xc3\xa5ri v\xc3\xa53ru 3v\xc3\xa4g v\xc3\xa4gg5s v\xc3\xa44l v\xc3\xa4ll4s3 3v\xc3\xa4nl 3v\xc3\xa4rde v\xc3\xa44ril 4v\xc3\xa4rj 5v\xc3\xa4rk 3v\xc3\xa4rld 2v\xc3\xa4t 3v\xc3\xa4x 4v\xc3\xb6g 4v\xc3\xb6p 3v\xc3\xb6r 1wa we2 w2h whi2 wi2e w4na x1 xan5d4 xem3pla xis4 xk2 xli4 xs4 xti2 x4t\xc3\xa5 2y y1a y4bris yb4s y2d y4da y5dan y4do yd3r yds4 y4du y4d\xc3\xb6 y1e y1ga y1ge ygg3r yg4g\xc3\xa5 ygs4p y1i y1ki y5klist yk5lon yk3n y1ko y1la yl4gj y3li yl5k yl5l\xc3\xa4 y1lo yl4tr ym2fl ym4for y3m\xc3\xa5 yng3r ynk5l yn4sa yns4t y3or y5ou y1pe y5po yp3ri yre4s y1ri yr4ku yrk5v y1ro yrs4k yr5st yr5tu y1r\xc3\xa53 y5scho ys2st ys3ta ys3ti ys4tik_ yst3ra y2tak y4te_ y4tea y1to ytt3r yt5v y3va y3vi y3v\xc3\xa4 y5w y5\xc3\xa5 1za 1ze ze4ro 1zi 1zo zo4nal 4zp z5s 3zu z4zin \xc3\xa51a \xc3\xa53dj \xc3\xa5ds4l \xc3\xa51e \xc3\xa51f \xc3\xa51ga \xc3\xa51ge \xc3\xa5ge2l \xc3\xa5g3l \xc3\xa5g3s4k \xc3\xa5g3st \xc3\xa5g\xc3\xa54 \xc3\xa53i \xc3\xa51ki 5\xc3\xa5klag \xc3\xa5k4str\xc3\xa4 \xc3\xa51la 1\xc3\xa5lder \xc3\xa52lin \xc3\xa5l3k \xc3\xa5ll4sp \xc3\xa5l2s5e \xc3\xa5l3st \xc3\xa51l\xc3\xa4 \xc3\xa51m \xc3\xa5man4s \xc3\xa5nd4r \xc3\xa5n4du \xc3\xa5ns4t \xc3\xa5ns4v \xc3\xa53o \xc3\xa51p \xc3\xa52pl \xc3\xa55pla \xc3\xa54p\xc3\xb6 \xc3\xa5r4do \xc3\xa5rd4ra \xc3\xa5rd2s \xc3\xa5rd4s3t \xc3\xa54rel \xc3\xa51ri \xc3\xa55ror 5\xc3\xa5rsav \xc3\xa5r5s2li \xc3\xa5r2sv \xc3\xa5r5\xc3\xb6 \xc3\xa5s4ke \xc3\xa5s3n \xc3\xa5ss4 \xc3\xa5s4skr \xc3\xa5s4t \xc3\xa5te2 \xc3\xa5t3ri \xc3\xa53tr\xc3\xa5 \xc3\xa5t2sj \xc3\xa5tt5s \xc3\xa51v \xc3\xa41a \xc3\xa42b 2\xc3\xa4c \xc3\xa4ck5v \xc3\xa42d \xc3\xa4dd3s \xc3\xa4d4du \xc3\xa4de4s \xc3\xa4d3r \xc3\xa4d5se \xc3\xa4d3st \xc3\xa43e \xc3\xa41ga \xc3\xa41ge \xc3\xa4g4go \xc3\xa4g1l \xc3\xa4g3r \xc3\xa4g4re \xc3\xa4g3se \xc3\xa43i \xc3\xa45jo 4\xc3\xa4k \xc3\xa41ki \xc3\xa4k3n \xc3\xa4k3r \xc3\xa41la \xc3\xa4l4pap \xc3\xa4l4seg \xc3\xa4ls5kog \xc3\xa4l4slu \xc3\xa4l2t3r \xc3\xa4l2tu \xc3\xa4l4vin \xc3\xa4mp3l 4\xc3\xa4ndligh \xc3\xa4nd3r \xc3\xa4nd1st \xc3\xa4ng5r \xc3\xa4nni3s \xc3\xa4nn3s \xc3\xa44no \xc3\xa4ns1l \xc3\xa4n4st \xc3\xa4ns5te \xc3\xa4n4sv \xc3\xa4n2t3r \xc3\xa43pe \xc3\xa4pp3l \xc3\xa44pr \xc3\xa4p4st \xc3\xa44rap \xc3\xa4r2bre \xc3\xa4rg5l \xc3\xa4r4gr \xc3\xa41ri \xc3\xa4rib4 \xc3\xa4r4k\xc3\xa4 \xc3\xa4r4nis \xc3\xa4rn3st \xc3\xa4r2n\xc3\xa5 \xc3\xa4r4n\xc3\xb6 \xc3\xa4r5ob \xc3\xa45rol \xc3\xa43rop \xc3\xa45ror \xc3\xa45ros \xc3\xa4r2si \xc3\xa4r4sko \xc3\xa4r2so \xc3\xa4r4sp \xc3\xa4r2sv \xc3\xa4r4tand \xc3\xa4r2tr \xc3\xa4rt3s 4\xc3\xa4s \xc3\xa4s3pa \xc3\xa4s5pi \xc3\xa4s4sk \xc3\xa4s4sp \xc3\xa4s3ta \xc3\xa4st3r \xc3\xa44st\xc3\xa4 \xc3\xa44s\xc3\xa5 2\xc3\xa4t \xc3\xa43to \xc3\xa45tre \xc3\xa4t4s3k \xc3\xa4t5te \xc3\xa4t4top \xc3\xa4tt3r \xc3\xa4t4tu \xc3\xa4t4tv \xc3\xa41va \xc3\xa42vak \xc3\xa43vi \xc3\xa45vu \xc3\xb61a \xc3\xb62d \xc3\xb64dak \xc3\xb64dal \xc3\xb64darv \xc3\xb6de4s5 \xc3\xb64dis \xc3\xb6d3ra \xc3\xb6d2s \xc3\xb6d3se \xc3\xb64du \xc3\xb64d\xc3\xb6 \xc3\xb61e \xc3\xb61ga \xc3\xb6g5ak \xc3\xb65gar 1\xc3\xb6gd \xc3\xb61ge \xc3\xb65ger \xc3\xb6gg4 \xc3\xb6g1l \xc3\xb6g2n \xc3\xb6gn3e 1\xc3\xb6go \xc3\xb6g3si \xc3\xb6g3sk \xc3\xb61i \xc3\xb63jo \xc3\xb6j4sv \xc3\xb64karm \xc3\xb61ki \xc3\xb6k3n \xc3\xb6k2s \xc3\xb6k3sl \xc3\xb61la \xc3\xb6l4kv \xc3\xb6l4k\xc3\xb6 \xc3\xb6l2p \xc3\xb65l\xc3\xa4 \xc3\xb6man4 \xc3\xb6m2kl \xc3\xb64nal \xc3\xb62nom \xc3\xb6ns3ke \xc3\xb6n4so \xc3\xb6nst3r \xc3\xb63pe \xc3\xb64pel \xc3\xb63pi \xc3\xb6p5li \xc3\xb65plo 1\xc3\xb6ppn \xc3\xb64pr \xc3\xb63rande \xc3\xb63ras \xc3\xb64rask \xc3\xb6rb4 \xc3\xb6r3d4r \xc3\xb6r1eni \xc3\xb63res \xc3\xb64restr \xc3\xb63ret \xc3\xb6r5evig \xc3\xb6r3g \xc3\xb61ri \xc3\xb65rig \xc3\xb63ring \xc3\xb6r3int \xc3\xb6r5ir \xc3\xb6r5iv \xc3\xb6r4kal \xc3\xb6r1k2l \xc3\xb6r5kli \xc3\xb6r4nis \xc3\xb6r3ol \xc3\xb6r1or \xc3\xb6r2p5la \xc3\xb6r1s2k \xc3\xb6r3sl \xc3\xb6r4sl\xc3\xa4 \xc3\xb6r5te \xc3\xb6rt5s \xc3\xb6r1u \xc3\xb6r3vr \xc3\xb6r3y \xc3\xb6r1\xc3\xa4 \xc3\xb6r\xc3\xb64d \xc3\xb62sak \xc3\xb6s3n \xc3\xb6s4sj \xc3\xb6s2sk \xc3\xb6s4sp \xc3\xb6s3ta \xc3\xb6st3v \xc3\xb62tak \xc3\xb6ts5ko \xc3\xb6t4st \xc3\xb61v \xc3\xb6ve4 \xc3\xb6ver1 5\xc3\xb6vere \xc3\xb62vj \xc3\xb6v3ra \xc3\xb6v3ri \xc3\xb6v4sk \xc3\xa93e"; + +?> \ No newline at end of file diff --git a/include/mpdf/ttfonts/DejaVuSans-Bold.ttf b/include/mpdf/ttfonts/DejaVuSans-Bold.ttf new file mode 100755 index 0000000000000000000000000000000000000000..7b29accc1319396989cd62666c21943e311b489e Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSans-Bold.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSans-BoldOblique.ttf b/include/mpdf/ttfonts/DejaVuSans-BoldOblique.ttf new file mode 100755 index 0000000000000000000000000000000000000000..b5440d95e79b7ae5ef1d5b665c40bc023a61d3a4 Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSans-BoldOblique.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSans-Oblique.ttf b/include/mpdf/ttfonts/DejaVuSans-Oblique.ttf new file mode 100755 index 0000000000000000000000000000000000000000..e233295c46426361a21458a4d2cc23704562456e Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSans-Oblique.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSans.ttf b/include/mpdf/ttfonts/DejaVuSans.ttf new file mode 100755 index 0000000000000000000000000000000000000000..a36615b2081d6a19cee124874a95cba0e840a6e1 Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSans.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSansCondensed-Bold.ttf b/include/mpdf/ttfonts/DejaVuSansCondensed-Bold.ttf new file mode 100755 index 0000000000000000000000000000000000000000..36b3060e76018284e2b8ea62b313ad7b0f01aaa8 Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSansCondensed-Bold.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSansCondensed-BoldOblique.ttf b/include/mpdf/ttfonts/DejaVuSansCondensed-BoldOblique.ttf new file mode 100755 index 0000000000000000000000000000000000000000..4bb3ae18f5f77c314f4858e81c141b4f0b22d81b Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSansCondensed-BoldOblique.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSansCondensed-Oblique.ttf b/include/mpdf/ttfonts/DejaVuSansCondensed-Oblique.ttf new file mode 100755 index 0000000000000000000000000000000000000000..1f680bd8de1e2c48aa177cd4cdb683473cf85982 Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSansCondensed-Oblique.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSansCondensed.ttf b/include/mpdf/ttfonts/DejaVuSansCondensed.ttf new file mode 100755 index 0000000000000000000000000000000000000000..2b0b7fe9962801e2bf1c31552c6541ab45239832 Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSansCondensed.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSansMono-Bold.ttf b/include/mpdf/ttfonts/DejaVuSansMono-Bold.ttf new file mode 100755 index 0000000000000000000000000000000000000000..98bb6f62e21a97a4719c3b6689ed9b4507580c6a Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSansMono-Bold.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSansMono-BoldOblique.ttf b/include/mpdf/ttfonts/DejaVuSansMono-BoldOblique.ttf new file mode 100755 index 0000000000000000000000000000000000000000..42bbcdee97493014108fbe79f34e84759a9ec23d Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSansMono-BoldOblique.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSansMono-Oblique.ttf b/include/mpdf/ttfonts/DejaVuSansMono-Oblique.ttf new file mode 100755 index 0000000000000000000000000000000000000000..d6ab52298c1151593ffe2893b50be3a87b34f031 Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSansMono-Oblique.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSansMono.ttf b/include/mpdf/ttfonts/DejaVuSansMono.ttf new file mode 100755 index 0000000000000000000000000000000000000000..b464c52ade0f8827d69920fe11e700ea28f7e0ed Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSansMono.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSerif-Bold.ttf b/include/mpdf/ttfonts/DejaVuSerif-Bold.ttf new file mode 100755 index 0000000000000000000000000000000000000000..8c53b1a1124daab1aa7b685a7bd89f82cca409b3 Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSerif-Bold.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSerif-BoldItalic.ttf b/include/mpdf/ttfonts/DejaVuSerif-BoldItalic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..688c2b70f71c5e632817c167d1a4270d976ebee1 Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSerif-BoldItalic.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSerif-Italic.ttf b/include/mpdf/ttfonts/DejaVuSerif-Italic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..b2ed04a1230757a3cb2482f3c4f987c51619cc3f Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSerif-Italic.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSerif.ttf b/include/mpdf/ttfonts/DejaVuSerif.ttf new file mode 100755 index 0000000000000000000000000000000000000000..19eba3345725ef862feafb7b38b3dedcbf0b26c3 Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSerif.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSerifCondensed-Bold.ttf b/include/mpdf/ttfonts/DejaVuSerifCondensed-Bold.ttf new file mode 100755 index 0000000000000000000000000000000000000000..c4b00b78470d9e1db1d0c8cbbfadaa18c0c58aa1 Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSerifCondensed-Bold.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSerifCondensed-BoldItalic.ttf b/include/mpdf/ttfonts/DejaVuSerifCondensed-BoldItalic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..4d4c7a68ea653107261513e41c3b75ef7c697cce Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSerifCondensed-BoldItalic.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSerifCondensed-Italic.ttf b/include/mpdf/ttfonts/DejaVuSerifCondensed-Italic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..04bfc3534d4ba3add2872bd4f5a858db9979f16c Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSerifCondensed-Italic.ttf differ diff --git a/include/mpdf/ttfonts/DejaVuSerifCondensed.ttf b/include/mpdf/ttfonts/DejaVuSerifCondensed.ttf new file mode 100755 index 0000000000000000000000000000000000000000..c9935e1e985f3ffc7daeb5cda4ffdbdf25d6b6ca Binary files /dev/null and b/include/mpdf/ttfonts/DejaVuSerifCondensed.ttf differ diff --git a/setup/test/tests/class.test.php b/setup/test/tests/class.test.php index 44842b3fef80d125623ae3ff4f6df8eeadcce9ec..a7f6c2fa044da245b2912c15e395755059d351c9 100644 --- a/setup/test/tests/class.test.php +++ b/setup/test/tests/class.test.php @@ -14,7 +14,7 @@ class Test { '/setup/cli/stage/', '/include/plugins/', '/include/h2o/', - '/include/fpdf/', + '/include/mpdf/', ); function Test() { diff --git a/setup/test/tests/test.syntax.php b/setup/test/tests/test.syntax.php index 774ed964e466a20ce63b352fe7792d68769513d1..0adf1465a3fcca066262efe308222e8da1e48720 100644 --- a/setup/test/tests/test.syntax.php +++ b/setup/test/tests/test.syntax.php @@ -6,7 +6,7 @@ class SyntaxTest extends Test { function testCompileErrors() { $exit = 0; - foreach ($this->getAllScripts() as $s) { + foreach ($this->getAllScripts(false) as $s) { ob_start(); system("php -l $s", $exit); $line = ob_get_contents(); diff --git a/setup/test/tests/test.undefinedmethods.php b/setup/test/tests/test.undefinedmethods.php index 2e06a452ba20d648f6b52c5f2c3cfd8fc3f0e818..c767ba6ac1490c265be68b821419d348ff30fdce 100644 --- a/setup/test/tests/test.undefinedmethods.php +++ b/setup/test/tests/test.undefinedmethods.php @@ -17,10 +17,14 @@ class UndefinedMethods extends Test { } foreach (find_function_calls($scripts) as $call) { list($file, $no, $line, $func) = $call; - if (!in_array($func, $function_defs)) - $this->fail($file, $no, "$func: Definitely undefined"); - else + if (!in_array($func, $function_defs)) { + // We don't ship all of mdpf, so a bit of it looks undefined + if (strpos($file, '/mpdf/') === false) + $this->fail($file, $no, "$func: Definitely undefined"); + } + else { $this->pass(); + } } } }