[prev in list] [next in list] [prev in thread] [next in thread] 

List:       php-doc-cvs
Subject:    [DOC-CVS] cvs: phd /formats pdf.php  /themes/php phppdf.php
From:       "Rudy Nappée" <loudi () php ! net>
Date:       2008-07-26 16:35:14
Message-ID: cvsloudi1217090114 () cvsserver
[Download RAW message or body]

loudi		Sat Jul 26 16:35:14 2008 UTC

  Modified files:              
    /phd/formats	pdf.php 
    /phd/themes/php	phppdf.php 
  Log:
  * fixed some PDF output bugs (<table> in other <table> didn't work, <table> or \
                frame border didn't appears when <table> & frames are imbricated, \
                ...)
  * added page footer (book name & page number)
  * added warning if haru/pecl isn't installed
  * final (full-working) PDF output version
  


["loudi-20080726163514.txt" (text/plain)]

http://cvs.php.net/viewvc.cgi/phd/formats/pdf.php?r1=1.6&r2=1.7&diff_format=u
Index: phd/formats/pdf.php
diff -u phd/formats/pdf.php:1.6 phd/formats/pdf.php:1.7
--- phd/formats/pdf.php:1.6	Fri Jul 25 15:22:30 2008
+++ phd/formats/pdf.php	Sat Jul 26 16:35:13 2008
@@ -147,7 +147,7 @@
             'table'             => 'format_title3',
             'variablelist'      => 'format_bold',
             'warning'           => 'format_title3',
-        ), 
+        ),
         'tip'                   => 'format_admonition',
         'titleabbrev'           => 'format_suppressed_tags',
         'type'                  => 'format_suppressed_tags',
@@ -209,9 +209,9 @@
         'qandaentry'            => 'format_para',
         'question'              => 'format_bold',
         'answer'                => 'format_shifted_para',
-        
+
     ); /* }}} */
-    
+
     protected $textmap = array(
         'function'              => 'format_function_text',
         'link'                  => 'format_link_text',
@@ -241,7 +241,7 @@
     );
 
     protected $lang = "";
-    
+
     /* Current Chunk variables */
     protected $cchunk      = array();
     /* Default Chunk variables */
@@ -283,28 +283,28 @@
         "corefs"                => array(),
         "callouts"              => 0,
     );
-    
+
     private $pdfDoc;
-    
+
     public function __construct(array $IDs) {
         parent::__construct($IDs);
         $this->pdfDoc = new PdfWriter();
     }
-    
+
     public function __destruct() {
         unset($this->pdfDoc);
     }
-    
+
     public function getChunkInfo($info) {
         if (isset($this->cchunk[$info]))
             return $this->cchunk[$info];
         else return null;
     }
-    
+
     public function setChunkInfo($info, $value) {
         $this->cchunk[$info] = $value;
     }
-    
+
     public function __call($func, $args) {
         if ($args[0]) {
             trigger_error("No mapper found for '{$func}'", E_USER_WARNING);
@@ -317,7 +317,7 @@
     public function transformFromMap($open, $tag, $name, $attrs, $props) {
         return "";
     }
-    
+
     public function CDATA($str) {
         $this->pdfDoc->appendText(utf8_decode(trim($str)));
         return "";
@@ -326,12 +326,12 @@
     public function TEXT($str) {
         if (isset($this->cchunk["refsection"]) && $this->cchunk["refsection"]) // \
DUMMY REFSECTION DELETION  return "";
-            
+
         if (isset($this->cchunk["verbatim-block"]) && \
$this->cchunk["verbatim-block"]) {  $this->pdfDoc->appendText(utf8_decode($str));
             return "";
         }
-        
+
         $ret = utf8_decode(trim(ereg_replace( "[ \n\t]+", ' ', $str)));
         // No whitespace if current text value begins with ',', ';', ':', '.'
         if (strncmp($ret, ",", 1) && strncmp($ret, ";", 1) && strncmp($ret, ":", 1) \
&& strncmp($ret, ".", 1)) @@ -339,12 +339,12 @@
         else $this->pdfDoc->appendText($ret);
         return "";
     }
-    
+
     public function format_suppressed_tags($open, $name, $attrs) {
         /* Ignore it */
         return "";
     }
-    
+
     public function format_suppressed_text($value, $tag) {
         /* Suppress any content */
         return "";
@@ -353,15 +353,15 @@
     public function getPdfDoc() {
         return $this->pdfDoc;
     }
-    
+
     public function setPdfDoc($pdfDoc) {
         $this->pdfDoc = $pdfDoc;
     }
-    
+
     public function newChunk() {
         $this->cchunk = $this->dchunk;
     }
-    
+
     // DUMMY REFSECTION DELETION
     public function format_refsection($open, $name, $attrs, $props) {
         if ($open) {
@@ -371,7 +371,7 @@
         }
         return "";
     }
-    
+
     public function format_para($open, $name, $attrs, $props) {
         if ($open) {
             $this->pdfDoc->add(PdfWriter::PARA);
@@ -380,7 +380,7 @@
         }
         return "";
     }
-    
+
     public function format_shifted_para($open, $name, $attrs, $props) {
         if ($open) {
             $this->pdfDoc->shift();
@@ -391,7 +391,7 @@
         }
         return "";
     }
-    
+
     public function format_shifted_line($open, $name, $attrs, $props) {
         if ($open) {
             $this->pdfDoc->shift();
@@ -401,7 +401,7 @@
         }
         return "";
     }
-    
+
     public function format_title($open, $name, $attrs, $props) {
         if ($props["empty"]) return '';
         if ($open) {
@@ -412,7 +412,7 @@
         }
         return "";
     }
-    
+
     public function format_title2($open, $name, $attrs, $props) {
         if ($props["empty"]) return '';
         if ($open) {
@@ -434,7 +434,7 @@
         }
         return "";
     }
-    
+
     public function format_bold($open, $name, $attrs, $props) {
         if ($props["empty"]) return '';
         if ($open) {
@@ -454,7 +454,7 @@
         }
         return "";
     }
-    
+
     public function format_admonition($open, $name, $attrs, $props) {
         if ($open) {
             $this->pdfDoc->add(PdfWriter::ADMONITION);
@@ -465,40 +465,40 @@
         }
         return "";
     }
-    
+
     public function format_example($open, $name, $attrs, $props) {
         if ($open) {
             $this->lang = $props["lang"];
             $this->cchunk["examplenumber"]++;
             $this->pdfDoc->add(PdfWriter::ADMONITION);
-            
+
         } else {
             $this->pdfDoc->add(PdfWriter::END_ADMONITION);
         }
         return "";
     }
-    
+
     public function format_example_title($open, $name, $attrs, $props) {
         if ($props["empty"]) {
             $this->pdfDoc->appendText($this->autogen("example", $this->lang) .
                 $this->cchunk["examplenumber"]);
             $this->pdfDoc->add(PdfWriter::ADMONITION_CONTENT);
         } elseif ($open) {
-            $this->pdfDoc->appendText($this->autogen("example", $this->lang) . 
+            $this->pdfDoc->appendText($this->autogen("example", $this->lang) .
                 $this->cchunk["examplenumber"] . " -");
         } else {
             $this->pdfDoc->add(PdfWriter::ADMONITION_CONTENT);
         }
         return "";
     }
-    
+
     public function format_newpage($open, $name, $attrs, $props) {
         if ($open) {
             $this->pdfDoc->add(PdfWriter::PAGE);
         }
         return "";
     }
-    
+
     public function format_verbatim_block($open, $name, $attrs, $props) {
         if ($open) {
             $this->cchunk["verbatim-block"] = true;
@@ -510,7 +510,7 @@
         }
         return "";
     }
-    
+
     public function format_verbatim_inline($open, $name, $attrs, $props) {
         if ($open) {
             $this->pdfDoc->setFont(PdfWriter::FONT_VERBATIM, 10);
@@ -519,7 +519,7 @@
         }
         return "";
     }
-    
+
     public function format_framed_block($open, $name, $attrs, $props) {
         if ($open) {
             $this->pdfDoc->add(PdfWriter::FRAMED_BLOCK);
@@ -528,7 +528,7 @@
         }
         return "";
     }
-    
+
     public function format_framed_para($open, $name, $attrs, $props) {
         if ($open) {
             $this->pdfDoc->add(PdfWriter::FRAMED_BLOCK);
@@ -539,13 +539,13 @@
         }
         return "";
     }
-        
+
     public function format_newline($open, $name, $attrs, $props) {
         if ($open) {
             $this->pdfDoc->add(PdfWriter::LINE_JUMP);
         }
     }
-    
+
     public function format_link($open, $name, $attrs, $props) {
         if ($open && ! $props["empty"]) {
             $this->pdfDoc->setFont(PdfWriter::FONT_NORMAL, 12, array(0, 0, 1)); // \
blue @@ -568,7 +568,7 @@
         }
         return "";
     }
-    
+
     public function format_link_text($value, $tag) {
         $value = trim(ereg_replace( "[ \n\t]+", ' ', $value));
         if (isset($this->cchunk["href"]) && $this->cchunk["href"]) {
@@ -582,13 +582,13 @@
         }
         return "";
     }
-    
+
     public function format_function_text($value, $tag, $display_value = null) {
         $value = trim(ereg_replace( "[ \n\t]+", ' ', $value));
         if ($display_value === null) {
             $display_value = $value;
         }
-        
+
         $ref = strtolower(str_replace(array("_", "::", "->"), array("-", "-", "-"), \
$value));  if (($linkend = $this->getRefnameLink($ref)) !== null) {
             $this->pdfDoc->setFont(PdfWriter::FONT_NORMAL, 12, array(0, 0, 1)); // \
blue @@ -604,7 +604,7 @@
         $this->pdfDoc->revertFont();
         return "";
     }
-    
+
     public function format_authorgroup_author($open, $name, $attrs, $props) {
         if ($open) {
             if ($props["sibling"] !== $name) {
@@ -616,7 +616,7 @@
         }
         return "";
     }
-   
+
     public function format_editor($open, $name, $attrs, $props) {
         if ($open) {
             $this->pdfDoc->setFont(PdfWriter::FONT_BOLD);
@@ -627,7 +627,7 @@
         }
         return "";
     }
-    
+
     public function format_copyright($open, $name, $attrs, $props) {
         if ($open) {
             $this->pdfDoc->add(PdfWriter::PARA);
@@ -637,7 +637,7 @@
         }
         return "";
     }
-    
+
     // Lists {{{
     public function format_listitem($open, $name, $attrs, $props) {
         if ($open) {
@@ -648,12 +648,12 @@
         }
         return "";
     }
-    
+
     public function format_procedure($open, $name, $attrs, $props) {
         $this->cchunk["step"] = 0;
         return $this->format_shifted_para($open, $name, $attrs, $props);
     }
-    
+
     public function format_step($open, $name, $attrs, $props) {
         if ($open) {
             $this->pdfDoc->add(PdfWriter::LINE_JUMP);
@@ -663,7 +663,7 @@
         }
         return "";
     }
-    
+
     public function format_member($open, $name, $attrs, $props) {
         if ($open) {
             $this->pdfDoc->add(PdfWriter::LINE_JUMP);
@@ -671,12 +671,12 @@
         }
         return "";
     }
-    
+
     public function format_segmentedlist($open, $name, $attrs, $props) {
         $this->cchunk["segmentedlist"] = $this->dchunk["segmentedlist"];
         return $this->format_para($open, $name, $attrs, $props);
     }
-    
+
     public function format_segtitle_text($value, $tag) {
         $this->cchunk["segmentedlist"]["segtitle"][count($this->cchunk["segmentedlist"]["segtitle"])] \
= $value;  return '';
@@ -697,7 +697,7 @@
         return '';
     }
     // }}} Lists
-    
+
     // Tables {{{
     public function format_table($open, $name, $attrs, $props) {
         if ($open) {
@@ -706,7 +706,7 @@
         } else {
             $this->cchunk["table"] = false;
             $this->pdfDoc->add(PdfWriter::END_TABLE);
-            
+
             if ($this->cchunk["tablefootnotes"]) {
                 $this->pdfDoc->add(PdfWriter::FRAMED_BLOCK);
                 $this->pdfDoc->add(PdfWriter::LINE_JUMP);
@@ -788,7 +788,7 @@
             }
 
             /*
-             * "colspan" is *not* an standard prop, only used to overwrite the 
+             * "colspan" is *not* an standard prop, only used to overwrite the
              * colspan for <footnote>s in tables
              */
             if (isset($props["colspan"])) {
@@ -800,7 +800,7 @@
             $rowspan = PhDFormat::rowspan($dbattrs);
             $this->pdfDoc->add(PdfWriter::TABLE_ENTRY, array($colspan, $rowspan, \
$align));  } else {
-            $this->pdfDoc->add(PdfWriter::TABLE_END_ENTRY);            
+            $this->pdfDoc->add(PdfWriter::TABLE_END_ENTRY);
         }
         return "";
     }
@@ -815,7 +815,7 @@
         return "";
     }
     // }}} Tables
-    
+
     // Synopsises {{{
     public function format_methodsynopsis($open, $name, $attrs, $props) {
         if ($open) {
@@ -831,7 +831,7 @@
         $this->pdfDoc->appendText($content);
         return $this->format_para($open, $name, $attrs, $props);
     }
-    
+
     public function format_classsynopsis_methodsynopsis_methodname_text($value, \
$tag) {  $value = $this->TEXT($value);
         if ($this->cchunk["classsynopsis"]["classname"] === false) {
@@ -855,7 +855,7 @@
         $this->pdfDoc->appendText($method);
         return '';
     }
-    
+
     public function format_methodparam_parameter($open, $name, $attrs, $props) {
         if ($props["empty"]) return '';
         if ($open) {
@@ -871,7 +871,7 @@
         $this->pdfDoc->revertFont();
         return '';
     }
-    
+
     public function format_parameter($open, $name, $attrs, $props) {
         if ($props["empty"]) return '';
         if ($open) {
@@ -886,7 +886,7 @@
         $this->pdfDoc->revertFont();
         return '';
     }
-    
+
     public function format_methodparam($open, $name, $attrs) {
         if ($open) {
             $content = '';
@@ -915,7 +915,7 @@
         $this->pdfDoc->appendText(" ( void");
         return '';
     }
-    
+
     public function format_classsynopsisinfo($open, $name, $attrs, $props) {
         $this->cchunk["classsynopsisinfo"] = $this->dchunk["classsynopsisinfo"];
         if ($open) {
@@ -949,7 +949,7 @@
         }
         return '';
     }
-    
+
     public function format_classsynopsis($open, $name, $attrs, $props) {
         if ($open) {
             return $this->format_para($open, $name, $attrs, $props);
@@ -962,13 +962,13 @@
         }
         return $this->format_para($open, $name, $attrs, $props);
     }
-    
+
     public function format_fieldsynopsis_modifier_text($value, $tag) {
         $this->cchunk["fieldsynopsis"]["modifier"] = trim($value);
         $this->pdfDoc->appendText($this->TEXT($value));
         return '';
     }
-    
+
     public function format_fieldsynopsis($open, $name, $attrs, $props) {
         $this->cchunk["fieldsynopsis"] = $this->dchunk["fieldsynopsis"];
         if ($open) {
@@ -977,7 +977,7 @@
         $this->pdfDoc->appendText(";");
         return $this->format_para($open, $name, $attrs, $props);
     }
-    
+
     public function format_initializer($open, $name, $attrs) {
         if ($open) {
             $this->pdfDoc->appendText(" =");
@@ -985,8 +985,8 @@
         return '';
     }
     // }}} Synopsises
-        
-        
+
+
     // Footnotes & Callouts {{{
     public function format_footnoteref($open, $name, $attrs, $props) {
         if ($open) {
@@ -1002,7 +1002,7 @@
             return '';
         }
     }
-    
+
     public function format_footnote($open, $name, $attrs, $props) {
         if ($open) {
             $count = count($this->cchunk["footnote"]);
@@ -1025,7 +1025,7 @@
         $this->pdfDoc->setAppendToBuffer(false);
         return "";
     }
-    
+
     public function format_co($open, $name, $attrs, $props) {
         if (($open || $props["empty"]) && isset($attrs[PhDReader::XMLNS_XML]["id"]) \
&& $id = $attrs[PhDReader::XMLNS_XML]["id"]) {  $co = ++$this->cchunk["co"];
@@ -1041,7 +1041,7 @@
         }
         return "";
     }
-    
+
     public function format_calloutlist($open, $name, $attrs) {
         if ($open) {
             $this->pdfDoc->add(PdfWriter::FRAMED_BLOCK);
@@ -1053,7 +1053,7 @@
         }
         return '';
     }
-    
+
     public function format_callout($open, $name, $attrs) {
         if ($open) {
             $co = ++$this->cchunk["co"];
@@ -1072,19 +1072,19 @@
         return '';
     }
     // }}} Footnotes & Callouts
-    
+
     public function format_quote_text($value, $tag) {
         $value = trim(ereg_replace( "[ \n\t]+", ' ', $value));
         $this->pdfDoc->appendText(' "'.$value.'"');
         return "";
     }
-    
+
     public function format_refname_text($value, $tag) {
         $this->cchunk["refname"][] = $value;
         $this->pdfDoc->appendText(trim(ereg_replace( "[ \n\t]+", ' ', $value)));
         return "";
     }
-    
+
     public function format_refpurpose($open, $tag, $attrs, $props) {
         if ($props["empty"]) {
             $this->pdfDoc->add(PdfWriter::PARA);
@@ -1104,7 +1104,7 @@
         }
         return "";
     }
-    
+
     public function format_manvolnum($open, $name, $attrs) {
         if ($open) {
             $this->pdfDoc->appendText(")");
@@ -1114,7 +1114,7 @@
         return '';
         return ")</span>";
     }
-    
+
     public function format_indice($open, $name, $attrs) {
         if (($open && $name == "subscript") || (!$open && $name == "superscript")) {
             $this->pdfDoc->vOffset("-4");
@@ -1123,14 +1123,14 @@
         $this->pdfDoc->vOffset("4");
         return '';
     }
-    
+
     public function format_imagedata($open, $name, $attrs, $props) {
         if ($props["empty"] && isset($this->cchunk["xml-base"]) && ($base = \
                $this->cchunk["xml-base"]) &&
             isset($attrs[PhDReader::XMLNS_DOCBOOK]["fileref"]) && ($fileref = \
                $attrs[PhDReader::XMLNS_DOCBOOK]["fileref"])) {
             $imagePath = PhDConfig::xml_root() . DIRECTORY_SEPARATOR . $base . \
$fileref;  if (file_exists($imagePath))
                 $this->pdfDoc->add(PdfWriter::IMAGE, $imagePath);
-            
+
         }
         return '';
     }
@@ -1142,10 +1142,10 @@
     const FONT_NORMAL = 0x01;
     const FONT_ITALIC = 0x02;
     const FONT_BOLD = 0x03;
-    const FONT_VERBATIM = 0x04;  
-    const FONT_VERBATIM_ITALIC = 0x05;  
-    const FONT_MANUAL = 0x06;  
-    
+    const FONT_VERBATIM = 0x04;
+    const FONT_VERBATIM_ITALIC = 0x05;
+    const FONT_MANUAL = 0x06;
+
     // "Objects" constants (for add())
     const PARA = 0x10;
     const INDENTED_PARA = 0x11;
@@ -1171,8 +1171,8 @@
     const END_TABLE = 0x25;
     const TABLE_END_ROW = 0x26;
     const ADD_NUMBER_ITEM = 0x27;
-    const IMAGE = 0x28;    
-    
+    const IMAGE = 0x28;
+
     // Page format
     const VMARGIN = 56.7; // = 1 centimeter
     const HMARGIN = 56.7; // = 1 centimeter
@@ -1182,12 +1182,13 @@
     private $SCALE; // nb of points for 1 centimeter
     private $PAGE_WIDTH; // in points
     private $PAGE_HEIGHT; // in points
-    
+
     private $haruDoc;
     private $pages = array();
     private $currentPage;
     private $currentPageNumber;
-        
+    private $currentBookName;
+
     private $currentFont;
     private $currentFontSize;
     private $currentFontColor;
@@ -1203,7 +1204,7 @@
     );
     private $permanentLeftSpacing = 0;
     private $permanentRightSpacing = 0;
-    
+
     private $appendToBuffer = false;
     // To append afterwards
     private $buffer = array(
@@ -1214,8 +1215,10 @@
             'color'      => "",
         )*/
     );
-    
+
     private $current = array(
+        "leftSpacing"       => 0,
+        "rightSpacing"      => 0,
         "oldVPosition"      => 0,
         "vOffset"           => 0,
         "newVOffset"        => 0,
@@ -1225,10 +1228,10 @@
         "char"              => "",
         "charOffset"        => 0,
     );
-    
+
     // To temporarily store $current(s)
     private $old = array();
-    
+
     function __construct($pageWidth = 210, $pageHeight = 297) {
     	// Initialization of properties
     	$this->haruDoc = new HaruDoc;
@@ -1241,14 +1244,14 @@
     	$this->SCALE = 72/25.4;
     	$this->PAGE_WIDTH = $pageWidth * $this->SCALE;
     	$this->PAGE_HEIGHT = $pageHeight * $this->SCALE;
-    	    	    	
+
     	// Set fonts
     	$this->fonts["Helvetica"] = $this->haruDoc->getFont("Helvetica", \
                "WinAnsiEncoding");
     	$this->fonts["Helvetica-Bold"] = $this->haruDoc->getFont("Helvetica-Bold", \
                "WinAnsiEncoding");
     	$this->fonts["Helvetica-Oblique"] = \
                $this->haruDoc->getFont("Helvetica-Oblique", "WinAnsiEncoding");
     	$this->fonts["Courier"] = $this->haruDoc->getFont("Courier", \
                "WinAnsiEncoding");
     	$this->fonts["Courier-Oblique"] = $this->haruDoc->getFont("Courier-Oblique", \
                "WinAnsiEncoding");
-    	
+
     	// Add first page and default font settings
     	$this->currentFont = $this->fonts["Helvetica"];
     	$this->currentFontSize = 12;
@@ -1256,15 +1259,15 @@
     	$this->nextPage();
     	$this->haruDoc->addPageLabel(1, HaruPage::NUM_STYLE_DECIMAL, 1, "Page ");
     }
-    
+
     public function getCurrentPage() {
         return $this->currentPage;
     }
-    
+
     public function setCompressionMode($mode) {
         $this->haruDoc->setCompressionMode($mode);
     }
-    
+
     // Append text into the current position
     public function appendText($text) {
 //        if ($this->vOffset > $this->current["charOffset"] + 3*LINE_SPACING + \
3*$this->currentFontSize) @@ -1278,25 +1281,25 @@
             ));
             return;
         }
-        
+
         $this->currentPage->beginText();
         do {
             // Clear the whitespace if it begins the line or if last char is a \
                special char
             if (strpos($text, " ") === 0 && ($this->hOffset == 0 || \
in_array($this->current["char"], array("&", "$")))) {  $text = substr($text, 1);
             }
-            
+
             // Number of chars allowed in the current line
-            $nbCarac = $this->currentFont->measureText($text, 
-                ($this->PAGE_WIDTH - 2*self::HMARGIN - $this->hOffset - \
$this->permanentLeftSpacing - $this->permanentRightSpacing),  +            $nbCarac = \
$this->currentFont->measureText($text, +                ($this->PAGE_WIDTH - \
2*self::HMARGIN - $this->hOffset - $this->permanentLeftSpacing - \
                $this->permanentRightSpacing),
                 $this->currentFontSize, $this->currentPage->getCharSpace(),
                 $this->currentPage->getWordSpace(), true);
-            
+
             // If a the text content can't be appended (either there is no \
whitespaces,  // either the is not enough space in the line)
             if ($nbCarac === 0) {
-                $isEnoughSpaceOnNextLine = $this->currentFont->measureText($text, 
-                    ($this->PAGE_WIDTH - 2*self::HMARGIN - \
$this->permanentLeftSpacing - $this->permanentRightSpacing),  +                \
$isEnoughSpaceOnNextLine = $this->currentFont->measureText($text, +                   \
($this->PAGE_WIDTH - 2*self::HMARGIN - $this->permanentLeftSpacing - \
                $this->permanentRightSpacing),
                     $this->currentFontSize, $this->currentPage->getCharSpace(),
                     $this->currentPage->getWordSpace(), true);
                 if ($isEnoughSpaceOnNextLine) {
@@ -1305,14 +1308,14 @@
                     $isLastLine = false;
                     continue;
                 } else {
-                    $nbCarac = $this->currentFont->measureText($text, 
-                        ($this->PAGE_WIDTH - 2*self::HMARGIN - $this->hOffset - \
$this->permanentLeftSpacing - $this->permanentRightSpacing),  +                    \
$nbCarac = $this->currentFont->measureText($text, +                        \
($this->PAGE_WIDTH - 2*self::HMARGIN - $this->hOffset - $this->permanentLeftSpacing - \
                $this->permanentRightSpacing),
                         $this->currentFontSize, $this->currentPage->getCharSpace(),
                         $this->currentPage->getWordSpace(), false);
-                }                    
+                }
             }
             $isLastLine = ($nbCarac == strlen($text));
-            
+
             $textToAppend = substr($text, 0, $nbCarac);
             $text = substr($text, $nbCarac);
 
@@ -1324,21 +1327,22 @@
                 $this->currentPage->beginText();
             }
             if ($this->current["align"] == "center") {
-                $spacing = $this->PAGE_WIDTH - 2*self::HMARGIN - 
+                $spacing = $this->PAGE_WIDTH - 2*self::HMARGIN -
                     $this->permanentLeftSpacing - $this->permanentRightSpacing - \
                $this->currentPage->getTextWidth($textToAppend);
-                $this->currentPage->textOut(self::HMARGIN + $this->hOffset + \
$this->permanentLeftSpacing + $spacing/2,  +                \
$this->currentPage->textOut(self::HMARGIN + $this->hOffset + \
                $this->permanentLeftSpacing + $spacing/2,
                     $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset), \
$textToAppend);  } elseif ($this->current["align"] == "right") {
-                $spacing = $this->PAGE_WIDTH - 2*self::HMARGIN - 
+                $spacing = $this->PAGE_WIDTH - 2*self::HMARGIN -
                     $this->permanentLeftSpacing - $this->permanentRightSpacing - \
                $this->currentPage->getTextWidth($textToAppend);
-                $this->currentPage->textOut(self::HMARGIN + $this->hOffset + \
$this->permanentLeftSpacing + $spacing,  +                \
$this->currentPage->textOut(self::HMARGIN + $this->hOffset + \
                $this->permanentLeftSpacing + $spacing,
                     $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset), \
$textToAppend);  } else { // left
-                $this->currentPage->textOut(self::HMARGIN + $this->hOffset + \
$this->permanentLeftSpacing,  +                \
$this->currentPage->textOut(self::HMARGIN + $this->hOffset + \
                $this->permanentLeftSpacing,
                     $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset), \
$textToAppend);  }
-            $this->current["char"] = $textToAppend{strlen($textToAppend)-1};
-                    
+            if ($textToAppend)
+                $this->current["char"] = $textToAppend{strlen($textToAppend)-1};
+
             // Offsets for next line
             if (!$isLastLine) {
                 $this->vOffset += $this->currentFontSize + self::LINE_SPACING;
@@ -1346,7 +1350,7 @@
             } else {
                 $this->hOffset += $this->currentPage->getTextWidth($textToAppend);
             }
-            
+
         }
         while(!$isLastLine); // While it remains chars to append
         $this->currentPage->endText();
@@ -1358,33 +1362,33 @@
         if (strpos($text, " ") === 0 && ($this->hOffset == 0 || \
in_array($this->current["char"], array("&", "$")))) {  $text = substr($text, 1);
         }
-        
+
         $this->currentPage->beginText();
-        $nbCarac = $this->currentFont->measureText($text, 
-            ($this->PAGE_WIDTH - 2*self::HMARGIN - $this->hOffset - \
$this->permanentLeftSpacing - $this->permanentRightSpacing),  +        $nbCarac = \
$this->currentFont->measureText($text, +            ($this->PAGE_WIDTH - \
2*self::HMARGIN - $this->hOffset - $this->permanentLeftSpacing - \
$this->permanentRightSpacing),  $this->currentFontSize, \
$this->currentPage->getCharSpace(),  $this->currentPage->getWordSpace(), true);
-        
+
         // If a the text content can't be appended (either there is no whitespaces,
         // either the is not enough space in the line)
         if ($nbCarac === 0) {
-            $isEnoughSpaceOnNextLine = $this->currentFont->measureText($text, 
-                ($this->PAGE_WIDTH - 2*self::HMARGIN - $this->permanentLeftSpacing - \
$this->permanentRightSpacing),  +            $isEnoughSpaceOnNextLine = \
$this->currentFont->measureText($text, +                ($this->PAGE_WIDTH - \
                2*self::HMARGIN - $this->permanentLeftSpacing - \
                $this->permanentRightSpacing),
                 $this->currentFontSize, $this->currentPage->getCharSpace(),
                 $this->currentPage->getWordSpace(), true);
             if ($isEnoughSpaceOnNextLine) {
                 $this->currentPage->endText();
                 return $text;
             } else {
-                $nbCarac = $this->currentFont->measureText($text, 
-                    ($this->PAGE_WIDTH - 2*self::HMARGIN - $this->hOffset - \
$this->permanentLeftSpacing - $this->permanentRightSpacing),  +                \
$nbCarac = $this->currentFont->measureText($text, +                    \
($this->PAGE_WIDTH - 2*self::HMARGIN - $this->hOffset - $this->permanentLeftSpacing - \
                $this->permanentRightSpacing),
                     $this->currentFontSize, $this->currentPage->getCharSpace(),
                     $this->currentPage->getWordSpace(), false);
-            }                    
+            }
         }
-    
+
         $isLastLine = ($nbCarac == strlen($text));
-        
+
         $textToAppend = substr($text, 0, $nbCarac);
         $text = substr($text, $nbCarac);
 
@@ -1395,23 +1399,23 @@
             $this->nextPage();
             $this->currentPage->beginText();
         }
-        $this->currentPage->textOut(self::HMARGIN + $this->hOffset + \
$this->permanentLeftSpacing,  +        $this->currentPage->textOut(self::HMARGIN + \
                $this->hOffset + $this->permanentLeftSpacing,
             $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset), $textToAppend);
         if ($textToAppend)
             $this->current["char"] = $textToAppend{strlen($textToAppend)-1};
-               
+
         $this->hOffset += $this->currentPage->getTextWidth($textToAppend);
-        
+
         $this->currentPage->endText();
         $this->current["charOffset"] = $this->vOffset;
-        
+
         return ($isLastLine ? null : $text);
     }
-    
+
     public function setAppendToBuffer($appendToBuffer) {
         $this->appendToBuffer = $appendToBuffer;
     }
-    
+
     public function appendBufferNow() {
         foreach($this->buffer as $row) {
             if ($row["text"] == "\n") {
@@ -1424,7 +1428,7 @@
         }
         $this->buffer = array();
     }
-    
+
     public function add($type, $option = null) {
         if ($this->appendToBuffer) return;
         switch ($type) {
@@ -1519,7 +1523,7 @@
                 break;
         }
     }
-     
+
     // Switch font on-the-fly
     public function setFont($type, $size = null, $color = null, $font = null) {
         if ($this->currentPage == null)
@@ -1530,7 +1534,7 @@
             $this->setColor($color[0], $color[1], $color[2]);
             $this->currentFontColor = $color;
         }
-        else 
+        else
             $this->setColor($this->currentFontColor[0], $this->currentFontColor[1], \
$this->currentFontColor[2]);  switch ($type) {
             case self::FONT_NORMAL:
@@ -1561,7 +1565,7 @@
                 break;
         }
     }
-    
+
     // Back to the last used font
     public function revertFont() {
         $lastFont = array_pop($this->oldFonts);
@@ -1569,10 +1573,10 @@
         $this->currentFontSize = $lastFont[1];
         $this->currentFontColor = $lastFont[2];
         $this->currentPage->setFontAndSize($lastFont[0], $lastFont[1]);
-        $this->setColor($lastFont[2][0], $lastFont[2][1], $lastFont[2][2]); 
+        $this->setColor($lastFont[2][0], $lastFont[2][1], $lastFont[2][2]);
     }
-    
-    // Change font color (1, 1, 1 = white, 0, 0, 0 = black) 
+
+    // Change font color (1, 1, 1 = white, 0, 0, 0 = black)
     public function setColor($r, $g, $b) {
         if ($r < 0 || $r > 1 || $g < 0 || $g > 1 || $b < 0 || $b > 1)
             return false;
@@ -1581,12 +1585,12 @@
         $this->currentFontColor = array($r, $g, $b);
         return true;
     }
-    
+
     // Save the current PDF Document to a file
     public function saveToFile($filename) {
         $this->haruDoc->save($filename);
     }
-    
+
     public function createOutline($description, $parentOutline = null, $opened = \
                false) {
         $outline = $this->haruDoc->createOutline($description, $parentOutline);
         $dest = $this->currentPage->createDestination();
@@ -1595,47 +1599,67 @@
         $outline->setOpened($opened);
         return $outline;
     }
-    
+
     public function shift($offset = self::DEFAULT_SHIFT) {
         $this->permanentLeftSpacing += $offset;
     }
-    
+
     public function unshift($offset = self::DEFAULT_SHIFT) {
         $this->permanentLeftSpacing -= $offset;
     }
-    
+
     public function vOffset($offset) {
         $this->vOffset += $offset;
     }
-    
+
     private function indent($offset = self::INDENT_SPACING) {
         $this->hOffset = $offset;
     }
-    
+
     // Jump to next page (or create a new one if none exists)
     private function nextPage() {
         $this->lastPage = array(
             "vOffset" => $this->vOffset,
             "hOffset" => $this->hOffset,
         );
+        $footerToAppend = false;
         $this->currentPageNumber++;
         if (isset($this->pages[$this->currentPageNumber])) {
             $this->currentPage = $this->pages[$this->currentPageNumber];
             $this->vOffset = $this->currentFontSize;
             $this->hOffset = 0;
-        } else { 
+        } else {
             $this->pages[$this->currentPageNumber] = $this->haruDoc->addPage();
             $this->currentPage = $this->pages[$this->currentPageNumber];
             $this->currentPage->setTextRenderingMode(HaruPage::FILL);
             $this->vOffset = $this->currentFontSize;
             $this->hOffset = ($this->hOffset ? $this->hOffset : 0);
+            $footerToAppend = true;
         }
         if ($this->currentFont && $this->currentFontSize && $this->currentFontColor) \
                {
             $this->currentPage->setFontAndSize($this->currentFont, \
                $this->currentFontSize);
             $this->setColor($this->currentFontColor[0], $this->currentFontColor[1], \
$this->currentFontColor[2]);  }
-    } 
-    
+        if ($footerToAppend && $this->currentPageNumber > 1) {
+            $this->currentPage->beginText();
+            $this->setFont(self::FONT_NORMAL, 12, array(0,0,0));
+            $this->currentPage->textOut($this->PAGE_WIDTH - self::HMARGIN - \
$this->currentPage->getTextWidth($this->currentPageNumber), +                \
self::VMARGIN - 30, $this->currentPageNumber); +            $this->revertFont();
+            $this->setFont(self::FONT_BOLD, 12, array(0,0,0));
+            $this->currentPage->textOut(self::HMARGIN,
+                self::VMARGIN - 30, $this->currentBookName);
+            $this->revertFont();
+            $this->currentPage->endText();
+
+        }
+
+    }
+
+    public function setCurrentBookName($currentBookName) {
+        $this->currentBookName = $currentBookName;
+    }
+
     // Set last page as the current page
     private function lastPage() {
         $this->currentPageNumber--;
@@ -1643,25 +1667,25 @@
         $this->vOffset = $this->lastPage["vOffset"];
         $this->hOffset = $this->lastPage["hOffset"];
     }
-    
+
     // Returns true if a next page exists
     private function isNextPage() {
         return isset($this->pages[$this->currentPageNumber + 1]);
     }
-    
+
     // Jump a line
     private function lineJump($nbLines = 1) {
         $this->vOffset += $nbLines * ($this->currentFontSize + self::LINE_SPACING);
         $this->hOffset = 0;
     }
-    
+
     // Trace a line from the current position
     private function traceLine() {
         $this->lineJump();
         $this->currentPage->rectangle(self::HMARGIN + $this->hOffset, \
$this->PAGE_HEIGHT - self::VMARGIN - $this->vOffset, $this->PAGE_WIDTH - \
2*$this->hOffset - 2*self::HMARGIN, 1);  $this->currentPage->stroke();
     }
-    
+
     private function beginAdmonition() {
         // If this admonition is inside another frame
         array_push($this->old, $this->current);
@@ -1669,7 +1693,7 @@
         $this->setFont(self::FONT_BOLD, 12);
         $this->lineJump();
         // If no space for admonition title + interleave + admonition first line on \
                this page, then creates a new one
-        if (($this->PAGE_HEIGHT - 2*self::VMARGIN - $this->vOffset) < \
(3*$this->currentFontSize + 3*self::LINE_SPACING))  +        if (($this->PAGE_HEIGHT \
- 2*self::VMARGIN - $this->vOffset) < (3*$this->currentFontSize + \
3*self::LINE_SPACING))  $this->nextPage();
         $this->current["vOffset"] = $this->vOffset;
         $this->lineJump();
@@ -1677,7 +1701,7 @@
         $this->permanentRightSpacing += self::INDENT_SPACING;
         $this->current["pages"] = array();
     }
-    
+
     private function admonitionContent() {
         if ($this->current["pages"])
             $this->current["vOffset"] = 0;
@@ -1685,24 +1709,26 @@
         $this->revertFont();
         $this->currentPage->rectangle(self::HMARGIN + ($this->permanentLeftSpacing - \
self::INDENT_SPACING),  $this->PAGE_HEIGHT - self::VMARGIN - $this->vOffset,
-            $this->PAGE_WIDTH - 2*self::HMARGIN - ($this->permanentLeftSpacing - \
                self::INDENT_SPACING) - $this->permanentRightSpacing,
-            $this->vOffset - $this->current["vOffset"]); 
+            $this->PAGE_WIDTH - 2*self::HMARGIN - ($this->permanentLeftSpacing - \
self::INDENT_SPACING) - ($this->permanentRightSpacing - self::INDENT_SPACING), +      \
$this->vOffset - $this->current["vOffset"]);  $this->currentPage->stroke();
     }
-    
+
     private function endAdmonition() {
         $this->endFrame();
         $this->permanentLeftSpacing -= self::INDENT_SPACING;
         $this->permanentRightSpacing -= self::INDENT_SPACING;
-        $this->current = array_pop($this->old);
+        $current = array_pop($this->old);
+        $current["pages"] = array_merge($current["pages"], $this->current["pages"]);
+        $this->current = $current;
     }
-    
+
     private function beginFrame() {
         $this->lineJump();
         $this->current["newVOffset"] = $this->vOffset;
         $this->current["pages"] = array();
     }
-    
+
     private function endFrame($dash = null) {
         $onSinglePage = true;
         foreach ($this->current["pages"] as $page) {
@@ -1715,9 +1741,9 @@
             $page->lineTo(self::HMARGIN + ($this->permanentLeftSpacing - \
                self::INDENT_SPACING),
                 $this->PAGE_HEIGHT - self::VMARGIN - $this->current["newVOffset"]);
             // right border
-            $page->moveTo($this->PAGE_WIDTH - self::HMARGIN - \
$this->permanentRightSpacing, +            $page->moveTo($this->PAGE_WIDTH - \
self::HMARGIN - ($this->permanentRightSpacing - self::INDENT_SPACING),  \
                self::VMARGIN);
-            $page->lineTo($this->PAGE_WIDTH - self::HMARGIN - \
$this->permanentRightSpacing, +            $page->lineTo($this->PAGE_WIDTH - \
                self::HMARGIN - ($this->permanentRightSpacing - \
                self::INDENT_SPACING),
                 $this->PAGE_HEIGHT - self::VMARGIN - $this->current["newVOffset"]);
             $page->stroke();
             $page->setDash(null, 0);
@@ -1733,87 +1759,83 @@
         $this->currentPage->lineTo(self::HMARGIN + ($this->permanentLeftSpacing - \
                self::INDENT_SPACING),
             $this->PAGE_HEIGHT - self::VMARGIN - $this->current["newVOffset"]);
         // right border
-        $this->currentPage->moveTo($this->PAGE_WIDTH - self::HMARGIN - \
$this->permanentRightSpacing, +        $this->currentPage->moveTo($this->PAGE_WIDTH - \
self::HMARGIN - ($this->permanentRightSpacing - self::INDENT_SPACING),  \
                $this->PAGE_HEIGHT - self::VMARGIN - $this->vOffset);
-        $this->currentPage->lineTo($this->PAGE_WIDTH - self::HMARGIN - \
$this->permanentRightSpacing, +        $this->currentPage->lineTo($this->PAGE_WIDTH - \
                self::HMARGIN - ($this->permanentRightSpacing - \
                self::INDENT_SPACING),
             $this->PAGE_HEIGHT - self::VMARGIN - $this->current["newVOffset"]);
         // bottom border
         $this->currentPage->moveTo(self::HMARGIN + ($this->permanentLeftSpacing - \
self::INDENT_SPACING),  $this->PAGE_HEIGHT - self::VMARGIN - $this->vOffset);
-        $this->currentPage->lineTo($this->PAGE_WIDTH - self::HMARGIN - \
$this->permanentRightSpacing, +        $this->currentPage->lineTo($this->PAGE_WIDTH - \
self::HMARGIN - ($this->permanentRightSpacing - self::INDENT_SPACING),  \
$this->PAGE_HEIGHT - self::VMARGIN - $this->vOffset);  // top border (if frame's on a \
single page)  if ($onSinglePage) {
             $this->currentPage->moveTo(self::HMARGIN + ($this->permanentLeftSpacing \
                - self::INDENT_SPACING),
                 $this->PAGE_HEIGHT - self::VMARGIN - $this->current["newVOffset"]);
-            $this->currentPage->lineTo($this->PAGE_WIDTH - self::HMARGIN - \
$this->permanentRightSpacing, +            \
$this->currentPage->lineTo($this->PAGE_WIDTH - self::HMARGIN - \
                ($this->permanentRightSpacing - self::INDENT_SPACING),
                 $this->PAGE_HEIGHT - self::VMARGIN - $this->current["newVOffset"]);
         }
-//            
-//        $this->currentPage->rectangle(self::HMARGIN + ($this->permanentLeftSpacing \
                - self::INDENT_SPACING),
-//            $this->PAGE_HEIGHT - self::VMARGIN - $this->vOffset,
-//            $this->PAGE_WIDTH - 2*self::HMARGIN - ($this->permanentLeftSpacing - \
                self::INDENT_SPACING) - $this->permanentRightSpacing,
-//            $this->vOffset - $this->current["newVOffset"]);
+
         $this->currentPage->stroke();
         $this->lineJump();
         $this->currentPage->setDash(null, 0);
         $this->current["oldVPosition"] = 0;
     }
-    
+
     // Append $text with an underlined blue style with a link to $url
     private function appendUrlAnnotation($text, $url) {
         $this->appendText(" ");
         $fromHOffset = $this->hOffset;
-        
-        // If more than one text line to append 
+
+        // If more than one text line to append
         while ($text = $this->appendOneLine($text)) {
             // Trace the underline
             $this->currentPage->setLineWidth(1.0);
             $this->currentPage->setDash(null, 0);
-            $this->currentPage->moveTo(self::HMARGIN + $this->permanentLeftSpacing + \
$fromHOffset,  +            $this->currentPage->moveTo(self::HMARGIN + \
                $this->permanentLeftSpacing + $fromHOffset,
                 $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset + \
                self::LINE_SPACING));
-            $this->currentPage->lineTo(self::HMARGIN + $this->permanentLeftSpacing + \
$this->hOffset,  +            $this->currentPage->lineTo(self::HMARGIN + \
                $this->permanentLeftSpacing + $this->hOffset,
                 $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset + \
self::LINE_SPACING));  $this->currentPage->stroke();
-            
+
             // Create link
             $annotationArea = array(self::HMARGIN + $this->permanentLeftSpacing + \
                $fromHOffset,
                 $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset + \
                self::LINE_SPACING),
                 self::HMARGIN + $this->permanentLeftSpacing + $this->hOffset,
                 $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset - \
                $this->currentFontSize));
             $this->currentPage->createURLAnnotation($annotationArea, \
                $url)->setBorderStyle(0, 0, 0);
-            
+
             // Prepare the next line
             $this->vOffset += $this->currentFontSize + self::LINE_SPACING;
             $this->hOffset = 0;
             $fromHOffset = $this->hOffset;
         }
-        
+
         // Trace the underline
         $this->currentPage->setLineWidth(1.0);
         $this->currentPage->setDash(null, 0);
-        $this->currentPage->moveTo(self::HMARGIN + $this->permanentLeftSpacing + \
$fromHOffset,  +        $this->currentPage->moveTo(self::HMARGIN + \
                $this->permanentLeftSpacing + $fromHOffset,
             $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset + \
                self::LINE_SPACING));
-        $this->currentPage->lineTo(self::HMARGIN + $this->permanentLeftSpacing + \
$this->hOffset,  +        $this->currentPage->lineTo(self::HMARGIN + \
                $this->permanentLeftSpacing + $this->hOffset,
             $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset + \
self::LINE_SPACING));  $this->currentPage->stroke();
-        
+
         // Create link
         $annotationArea = array(self::HMARGIN + $this->permanentLeftSpacing + \
                $fromHOffset,
             $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset + \
self::LINE_SPACING),  self::HMARGIN + $this->permanentLeftSpacing + $this->hOffset,
             $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset - \
                $this->currentFontSize));
         $this->currentPage->createURLAnnotation($annotationArea, \
                $url)->setBorderStyle(0, 0, 0);
-        
+
     }
-    
+
     // Append $text with an underlined blue style and prepare an internal link \
(which will be resolved later)  private function prepareInternalLinkAnnotation($text) \
{  $this->appendText(" ");
         $fromHOffset = $this->hOffset;
         $linkAreas = array(/* page, left, bottom, right, top */);
-        
-        // If more than one text line to append 
+
+        // If more than one text line to append
         while ($text = $this->appendOneLine($text)) {
            // Create link
             $linkAreas[] = array($this->currentPage,
@@ -1821,23 +1843,23 @@
                 $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset + \
                self::LINE_SPACING),
                 self::HMARGIN + $this->permanentLeftSpacing + $this->hOffset,
                 $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset - \
                $this->currentFontSize));
-            
+
             // Prepare the next line
             $this->vOffset += $this->currentFontSize + self::LINE_SPACING;
             $this->hOffset = 0;
             $fromHOffset = $this->hOffset;
         }
-        
+
         // Prepare link
         $linkAreas[] = array($this->currentPage,
                 self::HMARGIN + $this->permanentLeftSpacing + $fromHOffset,
                 $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset + \
                self::LINE_SPACING),
                 self::HMARGIN + $this->permanentLeftSpacing + $this->hOffset,
                 $this->PAGE_HEIGHT - (self::VMARGIN + $this->vOffset - \
                $this->currentFontSize));
-        
+
         return $linkAreas;
     }
-    
+
     public function resolveInternalLink($page, $rectangle, $destPage) {
         $page->setRGBStroke(0, 0, 1); // blue
         // Trace the underline
@@ -1851,47 +1873,58 @@
             ->setBorderStyle(0, 0, 0);
         $page->setDash(null, 0);
     }
-    
+
     public function addTable($colCount) {
-        $this->currentPage->moveTo(self::HMARGIN, $this->PAGE_HEIGHT - self::VMARGIN \
                - $this->vOffset);
-        $this->currentPage->lineTo($this->PAGE_WIDTH - self::HMARGIN, \
$this->PAGE_HEIGHT - self::VMARGIN - $this->vOffset); +        // If this table is \
inside another table or frame +        array_push($this->old, $this->current);
+        $this->current["leftSpacing"] = $this->permanentLeftSpacing;
+        $this->current["rightSpacing"] = $this->permanentRightSpacing;
+        // First horizontal line
+        $this->currentPage->moveTo(self::HMARGIN + $this->current["leftSpacing"], \
$this->PAGE_HEIGHT - self::VMARGIN - $this->vOffset); +        \
$this->currentPage->lineTo($this->PAGE_WIDTH - self::HMARGIN - \
$this->current["rightSpacing"], $this->PAGE_HEIGHT - self::VMARGIN - $this->vOffset); \
$this->currentPage->stroke();  }
-    
+
     public function endTable() {
-        $this->permanentLeftSpacing = 0;
-        $this->permanentRightSpacing = 0;
+        $this->permanentLeftSpacing = $this->current["leftSpacing"];
+        $this->permanentRightSpacing = $this->current["rightSpacing"];
         $this->lineJump();
+        $current = array_pop($this->old);
+        $current["pages"] = array_merge($current["pages"], $this->current["pages"]);
+        $this->current = $current;
     }
-    
+
     public function newTableRow($colCount, $valign) {
         $this->current["vOffset"] = $this->vOffset;
         $this->current["row"]["cellCount"] = $colCount;
         $this->current["row"]["activeCell"] = 0;
-        $this->current["row"]["hSize"] = ($this->PAGE_WIDTH - 2*self::HMARGIN) / \
$this->current["row"]["cellCount"]; +        $this->current["row"]["hSize"] = \
($this->PAGE_WIDTH - 2*self::HMARGIN - +            $this->current["leftSpacing"] - \
$this->current["rightSpacing"]) / $this->current["row"]["cellCount"];  \
$this->current["row"]["vPosition"] = 0;  $this->current["row"]["pages"] = array();
         $this->current["row"]["cutPolicy"] = array(1);
         $this->current["pages"] = array();
     }
-    
+
     public function beginTableEntry($colspan, $rowspan, $align) {
-        $this->permanentLeftSpacing = ($this->current["row"]["activeCell"]++) * \
$this->current["row"]["hSize"] + self::LINE_SPACING; +        \
$this->permanentLeftSpacing = ($this->current["row"]["activeCell"]++) * \
$this->current["row"]["hSize"] + +            self::LINE_SPACING + \
                $this->current["leftSpacing"];
         $this->permanentRightSpacing = $this->PAGE_WIDTH - 2*self::HMARGIN -
-            ($this->current["row"]["activeCell"] + $colspan - 1) * \
$this->current["row"]["hSize"] + self::LINE_SPACING; +            \
($this->current["row"]["activeCell"] + $colspan - 1) * $this->current["row"]["hSize"] \
- +            $this->current["leftSpacing"] + self::LINE_SPACING;
 
         foreach ($this->current["pages"] as $page) {
             $this->lastPage();
         }
         $this->current["pages"] = array();
-        
+
         $this->hOffset = 0;
         $this->vOffset = $this->current["vOffset"] + $this->currentFontSize + \
self::LINE_SPACING;  $this->current["align"] = $align;
-        
+
         array_push($this->current["row"]["cutPolicy"], $colspan);
     }
-    
+
     public function endTableEntry() {
         $this->current["align"] = "";
         $newOffset = $this->vOffset + $this->currentFontSize + self::LINE_SPACING;
@@ -1902,20 +1935,20 @@
             $this->current["row"]["pages"] = $this->current["pages"];
         }
     }
-    
+
     public function endTableRow() {
         $vOffset = $this->current["vOffset"];
         while($this->isNextPage())
-            $this->nextPage();        
+            $this->nextPage();
         // Vertical lines
-        for ($i = 0, $x = self::HMARGIN; $i <= $this->current["row"]["cellCount"]; \
$i++, $x += $this->current["row"]["hSize"]) { +        for ($i = 0, $x = \
self::HMARGIN + $this->current["leftSpacing"]; $i <= \
$this->current["row"]["cellCount"]; $i++, $x += $this->current["row"]["hSize"]) {  
             // Don't trace vertical line if colspan
             if (($cellCount = array_shift($this->current["row"]["cutPolicy"])) > 1) \
                {
                 array_unshift($this->current["row"]["cutPolicy"], $cellCount - 1);
                 continue;
             }
-            
+
             foreach ($this->current["row"]["pages"] as $page) {
                 $page->setRGBStroke(0, 0, 0);
                 $page->moveTo($x, self::VMARGIN);
@@ -1923,25 +1956,30 @@
                 $page->stroke();
                 $this->current["vOffset"] = 0;
             }
-            
+
             $this->currentPage->moveTo($x, $this->PAGE_HEIGHT - self::VMARGIN - \
                ($this->current["vOffset"]));
             $this->currentPage->lineTo($x, $this->PAGE_HEIGHT - self::VMARGIN - \
($this->current["row"]["vPosition"] % $this->PAGE_HEIGHT));  \
$this->currentPage->stroke();  $this->current["vOffset"] = $vOffset;
         }
         // Horizontal line
-        $this->currentPage->moveTo(self::HMARGIN, $this->PAGE_HEIGHT - self::VMARGIN \
                - ($this->current["row"]["vPosition"] % $this->PAGE_HEIGHT));
-        $this->currentPage->lineTo($this->PAGE_WIDTH - self::HMARGIN, 
+        $this->currentPage->moveTo(self::HMARGIN + $this->current["leftSpacing"], \
$this->PAGE_HEIGHT - self::VMARGIN - ($this->current["row"]["vPosition"] % \
$this->PAGE_HEIGHT)); +        $this->currentPage->lineTo($this->PAGE_WIDTH - \
                self::HMARGIN - $this->current["rightSpacing"],
             $this->PAGE_HEIGHT - self::VMARGIN - ($this->current["row"]["vPosition"] \
% $this->PAGE_HEIGHT));  $this->currentPage->stroke();
-        
+
         // Store position
-        $this->vOffset = $this->current["row"]["vPosition"] % $this->PAGE_HEIGHT;    \
                
-        
+        $this->vOffset = $this->current["row"]["vPosition"] % $this->PAGE_HEIGHT;
+
+        // Store pages
+        $last = array_pop($this->old);
+        $last["pages"] = array_merge($last["pages"], \
$this->current["row"]["pages"]); +        array_push($this->old, $last);
+
         // Erase current properties
-        $this->current["row"] = array();    
+        $this->current["row"] = array();
     }
-    
+
     private function endsWith($str, $sub) {
         return ( substr( $str, strlen( $str ) - strlen( $sub ) ) === $sub );
     }
@@ -1961,10 +1999,11 @@
                 $this->PAGE_HEIGHT - self::HMARGIN - $this->vOffset - \
$image->getHeight(),  $image->getWidth(),
                 $image->getHeight());
-            
+
             $this->hOffset = 0;
             $this->vOffset += $image->getWidth();
         }
     }
 }
+
 ?>
\ No newline at end of file
http://cvs.php.net/viewvc.cgi/phd/themes/php/phppdf.php?r1=1.6&r2=1.7&diff_format=u
Index: phd/themes/php/phppdf.php
diff -u phd/themes/php/phppdf.php:1.6 phd/themes/php/phppdf.php:1.7
--- phd/themes/php/phppdf.php:1.6	Fri Jul 25 15:22:30 2008
+++ phd/themes/php/phppdf.php	Sat Jul 26 16:35:14 2008
@@ -93,9 +93,9 @@
     public function __construct(array $IDs, array $filenames, $format = "pdf", \
$chunked = true) {  parent::__construct($IDs);
         $this->format = $format;
-
+        if (!class_exists("HaruDoc")) die ("PDF output needs libharu & haru/pecl \
                extensions... Please install them and start PhD again.\n");
         $this->outputdir = PhDConfig::output_dir() . $this->format . \
                DIRECTORY_SEPARATOR;
-        if(!file_exists($this->outputdir) || is_file($this->outputdir)) \
mkdir($this->outputdir) or die("Can't create the cache directory"); +        \
if(!file_exists($this->outputdir) || is_file($this->outputdir)) \
mkdir($this->outputdir) or die("Can't create the cache directory.\n");  }
     
     public function __destruct() {}
@@ -138,6 +138,7 @@
     
     public function format_bookname($value, $tag) {
         $this->cchunk["bookname"] = trim($value);
+        $this->format->getPdfDoc()->setCurrentBookName($this->cchunk["bookname"]);
         return false;
     }
     
@@ -167,6 +168,7 @@
                 }
                 $this->setIdToPage($id);
             }
+            $this->format->setChunkInfo("examplenumber", 0);
         }
         return "";
     }



-- 
PHP Documentation Commits Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic