You are using a browser which doesn't fully support Cascading Style Sheets. This site will look much better in a browser that supports web standards, but its content is accessible to any browser or Internet device.

The base design

To relieve converter authors, the CPAN distribution PerlPoint::Package provides a framework to write converters. The simple idea is that because all converters have to process PerlPoint sources (and should do this the same way), there's no need to implement this parsing again and again. So the framework provides a parser which reads the sources and generates data which contain the source contents. Please have a look at the following image.

Image

The parser reads PerlPoint sources and checks them for integrity. Valid sources are translated into intermediate data which is called a "stream", so all converters will be fed with correct input. The parser is provided by the framework class PerlPoint::Parser. It implements the PerlPoint base language definition to recognize paragraphs, macros, variables, tags, and so on.

Once we have the intermediate data, there's another job all converters need to perform the same way: these data need to be processed as well. It's seems to be a good idea to encapsulate this processing by another general interface. This relieves converter authors even more, freeing them from the need of dealing with the details of the stream implementation. (Which may occasionally change.) So there's another framework class called PerlPoint::Backend. Its objects can walk through the stream, calling user defined functions to provide its elements. And these callbacks are the place where the target format is produced.

Image

With this framework, a converter author can focus just on target format generation. That's the part naturally most interesting to him.