_note_call_box->offset($dx, $dy); } function BoxNoteCall(&$content, &$pipeline) { $this->GenericInlineBox(); $this->_note_content =& $content; $this->copy_style($content); $this->put_height_constraint(new HCConstraint(null, null, null)); /** * Prepare ::note-call box */ $this->_note_call_box = InlineBox::create_from_text(CSSListStyleType::format_number(LST_DECIMAL, 99), WHITESPACE_NORMAL, $pipeline); $this->_note_call_box->copy_style($content); $this->_note_call_box->content[0]->copy_style($content); $font = $this->_note_call_box->content[0]->get_css_property(CSS_FONT); $font = $font->copy(); $font->size->scale(0.75); $this->_note_call_box->content[0]->setCSSProperty(CSS_FONT, $font); $this->_note_call_box->content[0]->setCSSProperty(CSS_VERTICAL_ALIGN, VA_SUPER); $this->_note_call_box->content[0]->setCSSProperty(CSS_LINE_HEIGHT, CSS::getDefaultValue(CSS_LINE_HEIGHT)); /** * Prepare ::marker box */ $this->_note_marker_box = InlineBox::create_from_text(CSSListStyleType::format_number(LST_DECIMAL, 99), WHITESPACE_NORMAL, $pipeline); $this->_note_marker_box->copy_style($content); $this->_note_marker_box->content[0]->copy_style($content); $font = $this->_note_marker_box->content[0]->get_css_property(CSS_FONT); $font = $font->copy(); $font->size->scale(0.5); $this->_note_marker_box->content[0]->setCSSProperty(CSS_FONT, $font); $margin = $this->_note_marker_box->content[0]->get_css_property(CSS_MARGIN); $margin = $margin->copy(); $margin->right = Value::fromData(FOOTNOTE_MARKER_MARGIN, UNIT_PT); $this->_note_marker_box->content[0]->setCSSProperty(CSS_MARGIN, $margin); $this->_note_marker_box->content[0]->setCSSProperty(CSS_VERTICAL_ALIGN, VA_SUPER); $this->_note_marker_box->content[0]->setCSSProperty(CSS_LINE_HEIGHT, CSS::getDefaultValue(CSS_LINE_HEIGHT)); } function &create(&$content, &$pipeline) { $box = new BoxNoteCall($content, $pipeline); return $box; } function reflow(&$parent, &$context) { $parent->append_line($this->_note_call_box); $body = $parent; while ($body->parent) { $body = $body->parent; }; /** * Reflow note content */ $this->put_full_height(1000); $this->put_full_width($body->get_width()); $this->_current_x = $this->get_left(); $this->_current_y = $this->get_top(); $this->_note_content->reflow($this, $context); $this->_current_x = $this->get_left(); $this->_current_y = $this->get_top(); $this->_note_marker_box->reflow($this, $context); $this->_current_x = $this->get_left(); $this->_current_y = $this->get_top(); $this->_note_call_box->reflow($this, $context); // This prevents note-call box from affecting line height $this->_note_call_box->put_full_height(0); /** * Reflow note-call itself */ $this->put_full_height(0); $this->put_full_width(0); $this->guess_corner($parent); $parent->_current_x += $this->_note_call_box->content[0]->get_width(); $this->_note_call_box->put_full_width($this->_note_call_box->content[0]->get_width()); $this->_note_call_box->moveto($this->get_left(), $this->get_top()); // $last =& $parent->last_in_line(); // $last->note_call = true; return true; } function reflow_whitespace(&$linebox_started, &$previous_whitespace) { $ls = false; $pw = false; $this->_note_content->reflow_whitespace($ls, $pw); } function reflow_text(&$driver) { $this->_note_content->reflow_text($driver); $this->_note_marker_box->reflow_text($driver); $this->_note_call_box->reflow_text($driver); return true; } function _getFootnoteHeight(&$driver) { if ($driver->getFootnoteCount() == 0) { $footnote_height = $this->_note_content->get_full_height() + FOOTNOTE_LINE_TOP_GAP + FOOTNOTE_LINE_BOTTOM_GAP; } else { $footnote_height = $this->_note_content->get_full_height() + FOOTNOTE_GAP; }; return $footnote_height; } function show(&$driver) { $footnote_height = $this->_getFootnoteHeight($driver); if (!$driver->willContain($this, $footnote_height)) { return true; }; $driver->setFootnoteAreaHeight($driver->getFootnoteAreaHeight() + $footnote_height); $driver->setFootnoteCount($driver->getFootnoteCount() + 1); /** * Prepare box containing note number */ $this->_note_number = $driver->getFootnoteCount(); /** * Render reference number */ $this->_note_call_box->content[0]->words[0] = CSSListStyleType::format_number(LST_DECIMAL, $this->_note_number); $this->_note_call_box->show_fixed($driver); return true; } function show_footnote(&$driver, $x, $y) { /** * Render note reference number */ $this->_note_marker_box->content[0]->words[0] = CSSListStyleType::format_number(LST_DECIMAL, $this->_note_number); $this->_note_marker_box->moveto($x, $y); $this->_note_marker_box->show_fixed($driver); /** * Render note content */ $this->_note_content->moveto($x + $this->_note_marker_box->content[0]->get_width()*0.75, $y); $this->_note_content->show_fixed($driver); return $y - $this->_note_content->get_full_height(); } } ?>