Vincent Massol 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);
>>> }

+0

>>>
>>> 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.

+0

>>>
>>> 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

+0

>>>
>>> 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.

+1, I'll finally drop my converter component.

> 
> -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.

+1

Thanks,
Marius

>>>
>>> Here's my +1 to all
>>>
>>> Thanks
>>> -Vincent
> 
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to