blob: e28d31a7ee41b3fe282ff9ce00f83a5f850c0889 [file] [log] [blame]
<?php
/**
* File containing the ezcDocumentRstNode struct
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
* @package Document
* @version //autogen//
* @copyright Copyright (C) 2005-2010 eZ Systems AS. All rights reserved.
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
*/
/**
* Struct for RST document document abstract syntax tree nodes
*
* @package Document
* @version //autogen//
*/
abstract class ezcDocumentRstNode extends ezcBaseStruct // implements RecursiveIterator
{
/**
* Document AST node
*/
const DOCUMENT = 1;
/**
* Section AST node
*/
const SECTION = 1;
/**
* Title AST node
*/
const TITLE = 2;
/**
* Paragraph AST node
*/
const PARAGRAPH = 3;
/**
* Text line AST node
*/
const TEXT_LINE = 4;
/**
* Blockquote AST node
*/
const BLOCKQUOTE = 5;
/**
* Blockquote anotation AST node
*/
const ANNOTATION = 6;
/**
* Literal block AST node
*/
const LITERAL_BLOCK = 7;
/**
* Comment AST node
*/
const COMMENT = 8;
/**
* Page transition AST node
*/
const TRANSITION = 9;
/**
* Field list AST node
*/
const FIELD_LIST = 10;
/**
* Definition list AST node
*/
const DEFINITION_LIST = 11;
/**
* Line block AST node
*/
const LINE_BLOCK = 12;
/**
* Line block line AST node
*/
const LINE_BLOCK_LINE = 13;
/**
* Definition list item AST node
*/
const DEFINITION_LIST_LIST = 14;
/**
* Bullet list item AST node
*/
const BULLET_LIST = 20;
/**
* Enumerated list item AST node
*/
const ENUMERATED_LIST = 21;
/**
* Bullet list AST node
*/
const BULLET_LIST_LIST = 22;
/**
* Enumerated list AST node
*/
const ENUMERATED_LIST_LIST = 23;
/**
* Emphasis markup AST node
*/
const MARKUP_EMPHASIS = 30;
/**
* Strong emphasis markup AST node
*/
const MARKUP_STRONG = 31;
/**
* Interpreted text markup AST node
*/
const MARKUP_INTERPRETED = 32;
/**
* Inline literal markup AST node
*/
const MARKUP_LITERAL = 33;
/**
* Substitution reference markup AST node
*/
const MARKUP_SUBSTITUTION = 34;
/**
* Anonymous hyperlink AST node
*/
const LINK_ANONYMOUS = 40;
/**
* External Reference AST node
*/
const LINK_REFERENCE = 41;
/**
* Internal Target AST node
*/
const TARGET = 42;
/**
* Internal Reference AST node
*/
const REFERENCE = 43;
/**
* Inline Literal AST node
*/
const LITERAL = 50;
/**
* Substitution target AST node
*/
const SUBSTITUTION = 51;
/**
* Directive AST node
*/
const DIRECTIVE = 52;
/**
* Named reference target AST node
*/
const NAMED_REFERENCE = 53;
/**
* Footnote target AST node
*/
const FOOTNOTE = 54;
/**
* Anonymous reference target AST node
*/
const ANON_REFERENCE = 55;
/**
* Table node AST node
*/
const TABLE = 100;
/**
* Table head node AST node
*/
const TABLE_HEAD = 101;
/**
* Table body node AST node
*/
const TABLE_BODY = 102;
/**
* Table row node AST node
*/
const TABLE_ROW = 103;
/**
* Table cell node AST node
*/
const TABLE_CELL = 104;
/**
* Line of node in source file.
*
* @var int
*/
public $line;
/**
* Character position of node in source file.
*
* @var int
*/
public $position;
/**
* Node type
*
* @var int
*/
public $type;
/**
* Child nodes
*
* @var mixed
*/
public $nodes = array();
/**
* Optional reference to token, not available for all nodes.
*
* @var ezcDocumentRstToken
*/
public $token = null;
/**
* Optional paragraph identifier, to reference the paragraph using internal
* links.
*
* @var string
*/
public $identifier = null;
/**
* Construct RST node
*
* @param ezcDocumentRstToken $token
* @param int $type
* @return void
*/
public function __construct( ezcDocumentRstToken $token, $type )
{
$this->type = $type;
$this->line = $token->line;
$this->position = $token->position;
$this->token = $token;
}
/**
* Get node name from type
*
* Return a user readable name from the numeric node type.
*
* @param int $type
* @return string
*/
public static function getTokenName( $type )
{
$names = array(
self::DOCUMENT => 'Document',
self::SECTION => 'Section',
self::TITLE => 'Title',
self::PARAGRAPH => 'Paragraph',
self::BULLET_LIST => 'Bullet list item',
self::ENUMERATED_LIST => 'Enumerated list item',
self::BULLET_LIST_LIST => 'Bullet list',
self::ENUMERATED_LIST_LIST => 'Enumerated list',
self::TEXT_LINE => 'Text line',
self::BLOCKQUOTE => 'Blockquote',
self::ANNOTATION => 'Blockquote anotation',
self::COMMENT => 'Comment',
self::TRANSITION => 'Page transition',
self::FIELD_LIST => 'Field list',
self::DEFINITION_LIST => 'Definition list item',
self::DEFINITION_LIST_LIST => 'Definition list',
self::LINE_BLOCK => 'Line block',
self::LINE_BLOCK_LINE => 'Line block line',
self::LITERAL_BLOCK => 'Literal block',
self::MARKUP_EMPHASIS => 'Emphasis markup',
self::MARKUP_STRONG => 'Strong emphasis markup',
self::MARKUP_INTERPRETED => 'Interpreted text markup',
self::MARKUP_LITERAL => 'Inline literal markup',
self::MARKUP_SUBSTITUTION => 'Substitution reference markup',
self::LINK_ANONYMOUS => 'Anonymous hyperlink',
self::LINK_REFERENCE => 'External Reference',
self::TARGET => 'Internal Target',
self::REFERENCE => 'Internal Reference',
self::LITERAL => 'Inline Literal',
self::SUBSTITUTION => 'Substitution target',
self::DIRECTIVE => 'Directive',
self::NAMED_REFERENCE => 'Named reference target',
self::FOOTNOTE => 'Footnote target',
self::ANON_REFERENCE => 'Anonymous reference target',
self::TABLE => 'Table node',
self::TABLE_HEAD => 'Table head node',
self::TABLE_BODY => 'Table body node',
self::TABLE_ROW => 'Table row node',
self::TABLE_CELL => 'Table cell node',
);
if ( !isset( $names[$type] ) )
{
return 'Unknown';
}
return $names[$type];
}
/**
* Return node content, if available somehow
*
* @return string
*/
protected function content()
{
return '';
}
/**
* Get dump of document
*
* @param int $depth
* @return string
*/
public function dump( $depth = 0 )
{
$return = sprintf( "%s%s [%s] (%d, %d)\n",
( $depth === 0 ? "" : str_repeat( " ", $depth - 1 ) . "- " ),
self::getTokenName( $this->type ),
$this->content(),
( isset( $this->token ) ? $this->token->line : 0 ),
( isset( $this->token ) ? $this->token->position : 0 )
);
foreach ( $this->nodes as $nr => $node )
{
if ( !$node instanceof ezcDocumentRstNode )
{
$return .= "\n=> Broken child node: $nr.\n";
continue;
}
$return .= $node->dump( $depth + 1 );
}
$return .= sprintf( "%s/ %s\n",
( $depth === 0 ? "" : str_repeat( " ", $depth - 1 ) . "- " ),
self::getTokenName( $this->type )
);
return $return;
}
/**
* Set state after var_export
*
* @param array $properties
* @return void
* @ignore
*/
public static function __set_state( $properties )
{
return new ezcDocumentRstNode(
$properties['type'],
$properties['nodes']
);
}
}
?>