On Tue, Jun 23, 2026 at 10:00:16PM +0100, Gavin Smith wrote:
> I thought I would try to make a start on rewriting the Plaintext converter
> in C.  I thought it should be simple when compared with the HTML converter
> that already exists.  For one thing, there should be no customization API
> for the Plaintext converter.  All the conversion is done with straight
> function calls rather than via hooks that can be overridden.

Eli mail made me realize that I had not commented on Plaintext versus
Info.  In the Perl implementation, the Info converter inherits from the
Plaintext converter.  It has a separate output() (converter_output in
converter_format_data in C), but calls the _convert Plaintext function
(and many other functions from the Plaintext module, but it is easy to
do that in C).  Then, all the functions with name like format_*, such as
format_contents or format_image are replaced in the Info converter, such
that the functions in the Plaintext code call the Info functions if the
converter is the Info converter.  There is a need for an explicit
information that Info is converted to in one function only,
process_printindex, otherwise this object-oriented technique is the only
one used to obtain Info rather than Plaintext.

I have no idea if this is the right way to go, but the trick I use to
emulate inheritance and function overriding in C is to have a table of
functions, such as converter_format_data in converter.c and select the
function to call based on an enum corresponding to the format stored in
the C converter, like COF_html, which is also the index in the functions
table.

-- 
Pat

Reply via email to