Author: kn
Date: Fri Feb  1 12:20:37 2008
New Revision: 7271

Log:
- Added refactored design document
  # Still up to discussion

Added:
    experimental/Document/design/design_2.txt   (with props)

Added: experimental/Document/design/design_2.txt
==============================================================================
--- experimental/Document/design/design_2.txt (added)
+++ experimental/Document/design/design_2.txt [iso-8859-1] Fri Feb  1 12:20:37 
2008
@@ -1,0 +1,187 @@
+eZ Component: Document, Design
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+:Author:   $Author$
+:Revision: $Revision$
+:Date:     $Date$
+
+Design description
+==================
+
+ezcDocument class (abstract)
+----------------------------
+
+This class is the base class for each implemented markup format. The extending
+classes are named like 'ezcDocumentHtmlDocument'.
+
+The extending classes implement the required actions to load a file or string
+in the respective markup and return an arbitrary structure describing the
+document and containing all available markup information. For each document
+there will be at least a conversion to the DocBook__ format.
+
+The document classes may implement additional interfaces for direct access to
+some converted format, if there are shortcut implementations available, like
+the following example shows::
+
+       <?php
+       class ezcDocumentRstDocument extends ezcDocument implements
+               ezcDocumentHtmlConversion
+       {
+               // Required by ezcDocumentHtmlConversion interface
+               public function getAsHtml()
+               {
+                       // Use direct conversion using `rst2html.py`
+               }
+       }
+       ?>
+
+Beside loading a document all document classes need to implement save()
+method, which returns the document serialized as a string.
+
+ezcDocumentWikiBase class
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+There may be extensions, like a basic wiki syntax parser, from the document
+class, which implement a set of parse helper functions for some set of markup
+languages.
+
+ezcDocumentConversion interface
+-------------------------------
+
+Interface that defines an abstract conversion class. Real conversion classes
+will implement conversion of the given document from one format to another.
+The names of that classes follow the pattern:
+'ezcDocumentRstToHtmlConversion'.
+
+The main method of this abstract class, convert(), takes a document of the
+first format and returns a document in the other format. Both objects extend
+the ezcDocument class::
+
+       <?php
+       abstract class ezcDocumentConversion
+       {
+               /**
+                * @return ezcDocument
+                */
+               abstract public function convert( ezcDocument $source );
+       }
+       ?>
+
+ezcDocumentXsltConversion
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+There are a lot of conversions which may just work on the base of an XSLT. For
+all those conversions an abstract ezcDocumentXsltConversion class is provided,
+which just takes a set of XSLT files to apply to the XML of the source
+document and handles the selection of a proper XSLT engine.
+
+ezcDocumentManager
+------------------
+
+The document manager knows about the document parsers to use for each format
+and offers a set of static convenient methods to change the used parser for a
+document type, or directly create a document from a string or file. The Syntax
+for accessing the document manager could look like::
+
+       <?php
+       ezcDocumentManager::setFormat( 'rst', 'myCustomRstDocument' );
+       $doc = ezcDocumentManager::loadFile( 'rst', '/path/to/my.rst' );
+       ?>
+
+The document manager initiall knows about all internal formats and has them
+registered.
+
+ezcDocumentConversionManager
+----------------------------
+
+This won't be implemented in the first release.
+
+While you may call the conversion directly, the conversion manager has a set
+of registered conversion routes and offers you direct access to the document
+conversions, like::
+
+       <?php
+       $result = ezcDocumentConversionManager::convert( 
+               'rst', 'xhtml', '/path/to/my.rst'
+       );
+       ?>
+
+There will be an interface to overwrite default conversion routes and add or
+change the classes used for some conversion.
+
+ezcDocumentValidation interface
+-------------------------------
+
+The document classes may implement the ezcDocumentValidation, which provides
+the method validate( $file ), which can be used to validate an input file
+before trying to load it.
+
+The XML based formats will usually implement this by checking against a
+RelaxNG based document definition.
+
+Algorithms
+==========
+
+Transforming XML
+----------------
+
+XML documents are transformed using XSLT stylesheets and XSL extension for
+PHP.  Transformations are done with ezcDocXSLTTransformer class. Optionally
+the transformations may be done by the xsltrans CLI utility.
+
+Examples
+========
+
+Examples for the usage of the ezcDocument API.
+
+Loading a document
+------------------
+
+::
+       $doc = new ezcDocumentRstDocument();
+       $doc->loadFile( '/path/to/my.rst' );
+
+Validating a set of documents
+-----------------------------
+
+::
+       $doc = new ezcDocumentXhtmlDocument();
+       $result_1 = $doc->validate( '/path/to/first.htm' );
+       $result_2 = $doc->validate( '/path/to/second.htm' );
+
+       foreach ( $result_1 as $error )
+       {
+               echo "- {$error->msg} in {$error->line} in {$error->file}.\n";
+       }
+
+Convert between documents
+-------------------------
+
+::
+       $doc = new ezcDocumentRstDocument();
+       $doc->loadFile( '/path/to/my.rst' );
+
+       $converter = new ezcDocumentRstToHtmlConversion();
+       $converter->option->literalTag = 'code';
+       $html = $converter->convert( $doc );
+
+       // __toString() will of course be implemented, too.
+       echo $doc->save();
+
+Using the document manager
+--------------------------
+
+::
+       ezcDocumentManager::setFormat( 'rst', 'myCustomRstHandler' );
+       $doc = ezcDocumentManager::loadFile( 'rst', '/path/to/my.rst' );
+
+       // All errors in the RST syntax should now be magically fixed.
+       echo $doc;
+
+
+..
+   Local Variables:
+   mode: rst
+   fill-column: 79
+   End:
+   vim: et syn=rst tw=79

Propchange: experimental/Document/design/design_2.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: experimental/Document/design/design_2.txt
------------------------------------------------------------------------------
    svn:keywords = Date Author Revision


-- 
svn-components mailing list
svn-components@lists.ez.no
http://lists.ez.no/mailman/listinfo/svn-components

Reply via email to