_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();
}
}
?>