This file is part of PHPRtfLite.
PHPRtfLite is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
PHPRtfLite is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with PHPRtfLite. If not, see .
*/
/**
* class for creating footnotes in rtf documents.
* @version 1.2
* @author Steffen Zeidler
* @copyright 2010-2012 Steffen Zeidler
* @package PHPRtfLite_Footnote
*/
class PHPRtfLite_Footnote
{
/**
* constants for numbering type
* 0 => Arabic numbering (1, 2, 3, ...)
* 1 => Alphabetic lowercase (a, b, c, ...)
* 2 => Alphabetic uppercase (A, B, C, ...)
* 3 => Roman lowercase (i, ii, iii, ...)
* 4 => Roman uppercase (I, II, III, ...)
* 5 => Chicago Manual of Style (*, [dagger], [daggerdbl], §)
* 6 => Footnote Korean numbering 1 (*chosung).
* 7 => Footnote Korean numbering 2 (*ganada).
* 8 => Footnote Circle numbering (*circlenum).
* 9 => Footnote kanji numbering without the digit character (*dbnum1).
* 10 => Footnote kanji numbering with the digit character (*dbnum2).
* 11 => Footnote kanji numbering 3 (*dbnum3).
* 12 => Footnote kanji numbering 4 (*dbnum4).
* 13 => Footnote double-byte numbering (*dbchar).
* 14 => Footnote Chinese numbering 1 (*gb1).
* 15 => Footnote Chinese numbering 2 (*gb2).
* 16 => Footnote Chinese numbering 3 (*gb3).
* 17 => Footnote Chinese numbering 4 (*gb4).
* 18 => Footnote numbering—Chinese Zodiac numbering 1 (* zodiac1).
* 19 => Footnote numbering—Chinese Zodiac numbering 2 (* zodiac2).
* 20 => Footnote numbering—Chinese Zodiac numbering 3 (* zodiac3).
*/
const NUMTYPE_ARABIC_NUMBERS = 0;
const NUMTYPE_ALPHABETH_LC = 1;
const NUMTYPE_ALPHABETH_UC = 2;
const NUMTYPE_ROMAN_LC = 3;
const NUMTYPE_ROMAN_UC = 4;
const NUMTYPE_CHICAGO = 5;
const NUMTYPE_KOREAN_1 = 6;
const NUMTYPE_KOREAN_2 = 7;
const NUMTYPE_CIRCLE = 8;
const NUMTYPE_KANJI_1 = 9;
const NUMTYPE_KANJI_2 = 10;
const NUMTYPE_KANJI_3 = 11;
const NUMTYPE_KANJI_4 = 12;
const NUMTYPE_DOUBLE_BYTE = 13;
const NUMTYPE_CHINESE_1 = 14;
const NUMTYPE_CHINESE_2 = 15;
const NUMTYPE_CHINESE_3 = 16;
const NUMTYPE_CHINESE_4 = 17;
const NUMTYPE_CHINESE_ZODIAC_1 = 18;
const NUMTYPE_CHINESE_ZODIAC_2 = 19;
const NUMTYPE_CHINESE_ZODIAC_3 = 20;
const TYPE_SUPER = 'super';
const TYPE_SUB = 'sub';
const TYPE_NORMAL = 'normal';
/**
* footnote/endnote text
* @var string
*/
protected $_text;
/**
* font
* @var PHPRtfLite_Font
*/
protected $_font;
/**
* paragraph format
* @var PHPRtfLite_ParFormat
*/
protected $_parFormat;
/**
* rtf document
* @var PHPRtfLite
*/
protected $_rtf;
/**
* type setting type (superscript/subscript/normal)
* @var string
*/
protected $_typeSettingType = self::TYPE_SUPER;
/**
* default font
* @var PHPRtfLite_Font
*/
protected static $_defaultFont;
/**
* construtor
*
* @param PHPRtfLite $rtf
* @param string $text
* @param PHPRtfLite_Font $font if font is not set, use defaultFont
* @param PHPRtfLite_ParFormat $parFormat
*/
public function __construct(PHPRtfLite $rtf,
$text,
PHPRtfLite_Font $font = null,
PHPRtfLite_ParFormat $parFormat = null)
{
$this->_rtf = $rtf;
$this->_text = $text;
if (!$font && self::$_defaultFont) {
$font = self::$_defaultFont;
}
if ($font) {
$rtf->registerFont($font);
}
if ($parFormat) {
$rtf->registerParFormat($parFormat);
}
$this->_font = $font;
$this->_parFormat = $parFormat;
}
/**
* sets default font for notes
*
* @param PHPRtfLite_Font $font
*/
public static function setDefaultFont(PHPRtfLite_Font $font)
{
self::$_defaultFont = $font;
}
/**
* gets default font
*
* @return PHPRtfLite_Font
*/
public static function getDefaultFont()
{
return self::$_defaultFont;
}
/**
* sets font
*
* @param PHPRtfLite_Font $font
*/
public function setFont(PHPRtfLite_Font $font)
{
$this->_rtf->registerFont($font);
$this->_font = $font;
}
/**
* gets font
*
* @return PHPRtfLite_Font
*/
public function getFont()
{
return $this->_font;
}
/**
* sets paragraph format
*
* @param PHPRtfLite_ParFormat $parFormat
*/
public function setParFormat(PHPRtfLite_ParFormat $parFormat)
{
$this->_rtf->registerParFormat($parFormat);
$this->_parFormat = $parFormat;
}
/**
* gets paragraph format
*
* @return PHPRtfLite_ParFormat
*/
public function getParFormat()
{
return $this->_parFormat;
}
public function setTypeSettingType($type)
{
$this->_typeSettingType = $type;
}
/**
* gets type as rtf code
*
* @return string
*/
protected function getTypeAsRtfCode()
{
return '\footnote';
}
/**
* renders footnote/endnote
*/
public function render()
{
$stream = $this->_rtf->getWriter();
$typeSetting = $this->_typeSettingType != self::TYPE_NORMAL
? '\\' . $this->_typeSettingType
: '';
$stream->write(
'{' . $typeSetting . '\chftn}'
. '{' . $this->getTypeAsRtfCode()
. '\pard\plain\lin283\fi-283 '
);
if ($this->_parFormat) {
$stream->write($this->_parFormat->getContent());
}
if ($this->_font) {
$stream->write($this->_font->getContent());
}
$stream->write('{\up6\chftn}' . "\r\n"
. PHPRtfLite::quoteRtfCode($this->_text)
. '} ');
}
}