blob: bc805eaabc9b27486c756e58b7d50872d1ff0ec3 [file]
/* converter.h - definitions for converter.c */
#ifndef CONVERTER_H
#define CONVERTER_H
#include <stddef.h>
#include "text.h"
#include "command_ids.h"
#include "option_types.h"
#include "tree_types.h"
#include "converter_types.h"
/* piece of code that can be inlined in text parsing codes */
#define OTXI_PROTECT_XML_CASES(var) \
case '<': \
text_append_n (result, "&lt;", 4); var++; \
break; \
case '>': \
text_append_n (result, "&gt;", 4); var++; \
break; \
case '&': \
text_append_n (result, "&amp;", 5); var++; \
break; \
case '"': \
text_append_n (result, "&quot;", 6); var++; \
break;
#define OTXI_NUMERIC_ENTITY_TEXT_CASES(var) \
case '-': \
if (*(var+1) && !memcmp (var, "---", 3)) \
{ \
text_append_n (result, "&#" "8212" ";", 7); \
var += 3; \
} \
else if (!memcmp (var, "--", 2)) \
{ \
text_append_n (result, "&#" "8211" ";", 7); \
var += 2; \
} \
else \
{ \
text_append_n (result, "-", 1); \
var++; \
} \
break; \
case '`': \
if (!memcmp (var, "``", 2)) \
{ \
text_append_n (result, "&#" "8220" ";", 7); \
var += 2; \
} \
else \
{ \
text_append_n (result, "&#" "8216" ";", 7); \
var++; \
} \
break; \
case '\'': \
if (!memcmp (var, "''", 2)) \
{ \
text_append_n (result, "&#" "8221" ";", 7); \
var += 2; \
} \
else \
{ \
text_append_n (result, "&#" "8217" ";", 7); \
var++; \
} \
break;
#define TXI_CONVERSION_FORMAT_NR (COF_plaintexinfo +1)
typedef struct FLOAT_CAPTION_PREPENDED_ELEMENT {
const ELEMENT *caption;
ELEMENT *prepended;
} FLOAT_CAPTION_PREPENDED_ELEMENT;
typedef struct CONVERTER_FORMAT_DATA {
const char *default_format;
const char *perl_converter_class;
/* initialization of the converter library data independent of
customization */
void (* format_setup) (enum converter_format format);
/* replaces the default converter initialization sequence
(in Perl corresponds to a converter redefining the converter method) */
void (* converter_converter) (CONVERTER *self,
const CONVERTER_INITIALIZATION_INFO *conf);
/* next two are used if converter_converter is NULL */
CONVERTER_INITIALIZATION_INFO *
(* converter_defaults) (enum converter_format format,
const CONVERTER_INITIALIZATION_INFO *conf);
void (* converter_initialize) (CONVERTER *self);
char * (* converter_output) (CONVERTER *converter, DOCUMENT *document);
char * (* converter_convert) (CONVERTER *converter, DOCUMENT *document);
/* currently unused, could be modified when it become used, but it would
probably be better to stick to that API to be consistent with Perl */
char * (* converter_convert_tree) (CONVERTER *converter,
const ELEMENT *tree);
void (* converter_release_output_units) (CONVERTER *self);
void (* converter_free) (CONVERTER *self);
/* overriding of element_cdt_tree in HTML */
ELEMENT * (*element_cdt_tree) (const char *string, const ELEMENT *element,
CONVERTER *self,
NAMED_STRING_ELEMENT_LIST *replaced_substrings,
const char *translation_context);
} CONVERTER_FORMAT_DATA;
extern enum command_id no_brace_command_accent_upper_case[][2];
extern enum command_id default_upper_case_commands[];
/* in generated cmd_converter.c */
extern const char *xml_text_entity_no_arg_commands[];
/* in converter.c */
extern const char *xml_text_entity_no_arg_commands_formatting[];
extern COMMAND_ACCENT_ENTITY_INFO xml_accent_text_entities[];
extern CONVERTER_FORMAT_DATA converter_format_data[];
void setup_converter_generic (void);
enum converter_format find_format_name_converter_format (const char *format);
enum converter_format find_perl_converter_class_converter_format (
const char *class_name);
CONVERTER *retrieve_converter (size_t converter_descriptor);
void setup_converter_format (enum converter_format converter_format);
size_t new_converter (enum converter_format format);
void set_converter_init_information (CONVERTER *converter,
const CONVERTER_INITIALIZATION_INFO *format_defaults,
const CONVERTER_INITIALIZATION_INFO *user_conf);
void set_commands_options_value (COMMAND_OPTION_VALUE *commands_init_conf,
OPTION **sorted_options, int if_set_in_list);
CONVERTER_INITIALIZATION_INFO *converter_defaults (
enum converter_format converter_format,
const CONVERTER_INITIALIZATION_INFO *user_conf);
CONVERTER *converter_converter (enum converter_format format,
const CONVERTER_INITIALIZATION_INFO *input_user_conf);
void converter_initialize (CONVERTER *converter);
void clear_converter_initialization_info (
CONVERTER_INITIALIZATION_INFO *init_info);
void destroy_converter_initialization_info (
CONVERTER_INITIALIZATION_INFO *defaults);
void apply_converter_info (CONVERTER *converter,
const CONVERTER_INITIALIZATION_INFO *init_info, int set_configured);
void converter_set_document (CONVERTER *converter, DOCUMENT *document);
char *
converter_output_tree (CONVERTER *converter, DOCUMENT *document,
void * (* conversion_initialization)
(CONVERTER *converter, DOCUMENT *document),
char * (* conversion_output_begin)
(CONVERTER *converter,
const char *output_file, const char *output_filename),
char * (* conversion_output_end) (CONVERTER *converter),
void * (* conversion_finalization) (CONVERTER *converter));
char *converter_output (CONVERTER *self, DOCUMENT *document);
char *converter_convert (CONVERTER *self, DOCUMENT *document);
void converter_remove_output_units (CONVERTER *converter);
void destroy_converter (CONVERTER *converter);
ELEMENT *element_cdt_tree (const char *string, const ELEMENT *element,
CONVERTER *self,
NAMED_STRING_ELEMENT_LIST *replaced_substrings,
const char *translation_context);
void determine_files_and_directory (CONVERTER *self, const char *output_format,
char **result);
int create_destination_directory (CONVERTER *self,
const char *destination_directory_path,
const char *destination_directory_name);
const char *current_bcp47_locale (CONVERTER *self);
void set_converter_preamble_language_commands (CONVERTER *self);
ELEMENT *converter_expand_today (CONVERTER *converter,
ELEMENT * (*cdt_tree_fn) (const char *string, CONVERTER *self,
NAMED_STRING_ELEMENT_LIST *replaced_substrings,
const char *translation_context)
);
ELEMENT *converter_translated_command_tree (CONVERTER *self,
enum command_id cmd,
ELEMENT * (*cdt_tree_fn) (const char *string, CONVERTER *self,
NAMED_STRING_ELEMENT_LIST *replaced_substrings,
const char *translation_context)
);
void set_global_document_commands (CONVERTER *converter,
const enum command_location location,
const enum command_id *cmd_list);
char *node_information_filename (CONVERTER *self, const char *normalized,
const ELEMENT *label_element);
void write_or_return (const ENCODING_CONVERSION *conversion,
const char *encoded_out_filepath,
FILE *file_fh, TEXT *result, char *text);
void id_to_filename (CONVERTER *self, char **id_ref);
TARGET_FILENAME *normalized_sectioning_command_filename (CONVERTER *self,
const ELEMENT *command);
char *convert_accents (CONVERTER *self, const ELEMENT *accent,
char *(*convert_tree)(CONVERTER *self, const ELEMENT *tree),
char *(*format_accent)(CONVERTER *self, const char *text, const ELEMENT *element,
int index_in_stack, const ELEMENT_STACK *stack,
int set_case),
int output_encoded_characters,
int set_case);
INDEX_SORTED_BY_INDEX *get_converter_indices_sorted_by_index (CONVERTER *self,
char **language);
INDEX_SORTED_BY_LETTER *get_converter_indices_sorted_by_letter
(CONVERTER *self, char **language);
char *top_node_filename (const CONVERTER *self, const char *document_name);
ELEMENT *float_type_number (CONVERTER *self, const ELEMENT *float_e);
FLOAT_CAPTION_PREPENDED_ELEMENT *float_name_caption (CONVERTER *self,
const ELEMENT *float_e);
size_t register_normalize_case_filename (CONVERTER *self, const char *filename);
size_t set_output_unit_file (CONVERTER *self, OUTPUT_UNIT *output_unit,
const char *filename, int set_counter);
void set_file_path (CONVERTER *self, const char *filename, const char *filepath,
const char *destination_directory);
void clear_output_unit_files (FILE_NAME_PATH_COUNTER_LIST *output_unit_files);
void free_output_unit_files (FILE_NAME_PATH_COUNTER_LIST *output_unit_files);
void xml_format_text_with_numeric_entities (const char *text, TEXT *result);
char *xml_numeric_entity_accent (enum command_id cmd, const char *text);
char *xml_comment (CONVERTER *converter, const char *text);
#endif