Sergiu Dumitriu wrote:
> 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);
>> }
> 
> +1

+0

> 
>> b) The getAvailableSynatxes() doesn't exist anymore. It's been moved  
>> to SyntaxFactory, see below.
> 
> +1
> 
>> 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
> 
> How does non-java code find out the available syntaxes?

Normally +0 for 1b and 2a but this is a good question.

> 
> Would more specific methods be OK, like getParserSyntaxes, 
> getRendererSyntaxes?
> 
> If there are too many differences in the types of syntaxes, why is there 
> only one SyntaxFactory? Doesn't the whole class suffer from this problem?
> 
>> 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
> 
> +1

+0

> 
>> 4) Introduce Converter
>>
>> @ComponentRole
>> public interface Converter
>> {
>>      void convert(Reader source, Syntax sourceSyntax, Syntax  
>> targetSyntax, WikiPrinter printer)
>>          throws ConversionException;
>> }
>>
>> Goal: Simplify client code when the need is pure conversion.
> 
> +1

+1

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

+1

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

Reply via email to