+1

On Wed, Aug 5, 2009 at 14:11, Vincent Massol<[email protected]> wrote:
>
> On Aug 5, 2009, at 1:23 PM, Vincent Massol wrote:
>
>>
>> On Aug 5, 2009, at 1:18 PM, Vincent Massol wrote:
>>
>>> Hi,
>>>
>>> I'd like to propose the following API changes to the Rendering
>>> module:
>>>
>>> 1) Modify PrintRendererFactory
>>>
>>> a) There's now one factory component per Renderer type with the
>>> following interface:
>>>
>>> public interface PrintRendererFactory
>>> {
>>>   /**
>>>    * @return the Syntax supported by the Renderer type
>>>    * @since 2.0M3
>>>    */
>>>   Syntax getSyntax();
>>>
>>>   /**
>>>    * @param printer the printer to use to output renderer data
>>>    * @return a new Renderer instance (stateful)
>>>    * @since 2.0M3
>>>    */
>>>   PrintRenderer createRenderer(WikiPrinter printer);
>>> }
>>>
>>> b) The getAvailableSynatxes() doesn't exist anymore. It's been
>>> moved to SyntaxFactory, see below.
>>>
>>> 2) Modify SyntaxFactory
>>>
>>> a) Remove getAvailableSyntaxes() since there are different types of
>>> syntaxes: Parser syntaxes, Renderer syntaxes and even amongst
>>> Parser/Renderer there will be different types of them: streaming,
>>> block. Thus the new strategy is for client code to directly ask for
>>> syntaxes by looking up the objects against the CM.
>>> getAvailableSyntaxes() has been deprecated.
>>>
>>> 3) Introduce BlockRenderer
>>>
>>> @ComponentRole
>>> public interface BlockRenderer
>>> {
>>>   /**
>>>    * @param block the block to render in the target syntax
>>>    * @param printer the object where to output the result of the
>>> rendering
>>>    */
>>>   void render(Block block, WikiPrinter printer);
>>>
>>>   /**
>>>    * @param blocks the list of blocks to render in the target syntax
>>>    * @param printer the object where to output the result of the
>>> rendering
>>>    * @todo remove this API once we introduce the notion of
>>> BlockCollection
>>>    */
>>>   void render(Collection<Block> blocks, WikiPrinter printer);
>>> }
>>>
>>> Goals:
>>> a) Have 2 types of Renderers (as we'll have 2 types of Parsers in
>>> the future): Stream and Block
>>> b) reduce code duplication since using the BlockRenderer will
>>> simplify the client code
>>>
>>> 4) Introduce Converter
>>>
>>> @ComponentRole
>>> public interface Converter
>>> {
>>>   void convert(Reader source, Syntax sourceSyntax, Syntax
>>> targetSyntax, WikiPrinter printer)
>>>       throws ConversionException;
>>> }
>>
>> + boolean runTransformations in the parameters in a second signature.
>
> Actually strike this. I think we should always run transformations in
> the converter. If the user doesn't want them then he'll use the parser
> and renderer directly.
>
> -Vincent
>
>>
>> -Vincent
>>
>>>
>>> Goal: Simplify client code when the need is pure conversion.
>>>
>>> 5) Move Renderer's implementation classes (components now) in the
>>> internal package
>>>
>>> They're now components and thus we can move them in the internal
>>> package.
>>>
>>> Here's my +1 to all
>>>
>>> Thanks
>>> -Vincent
>>
>
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
>



-- 
Thomas Mortagne
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to