]> granicus.if.org Git - recode/commitdiff
Include cleaner.h in recodext.h
authorFrançois Pinard <pinard@iro.umontreal.ca>
Mon, 17 Mar 2008 02:17:09 +0000 (22:17 -0400)
committerFrançois Pinard <pinard@iro.umontreal.ca>
Mon, 17 Mar 2008 02:17:09 +0000 (22:17 -0400)
ChangeLog
cleaner.h.in
src/ChangeLog
src/Makefile.am
src/Makefile.in
src/recodext.h
src/recodext.h.in [new file with mode: 0644]
tests/ChangeLog
tests/Recode.c
tests/Recode.pyx

index efe49901d151152783e5927bed9639776a85bb07..22fa9076dee5c1c23f0d8bedb2d76841da128c02 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-03-16  François Pinard  <pinard@iro.umontreal.ca>
+
+       * cleaner.h.in: Protect against multiple inclusion.
+
 2008-03-14  François Pinard  <pinard@iro.umontreal.ca>
 
        * after-patch.py: New name for after-git.py.
index c34d9dfdce8e3bbae61a82207796846676cd6f1f..7b52d727822c51db4063ab60f7d4f892c5534a09 100644 (file)
-#define __xargmatch_internal librecode_xargmatch_internal
-#define aliases_lookup librecode_aliases_lookup
-#define argcasematch librecode_argcasematch
-#define argmatch librecode_argmatch
-#define argmatch_invalid librecode_argmatch_invalid
-#define argmatch_to_argument librecode_argmatch_to_argument
-#define argmatch_valid librecode_argmatch_valid
-#define clone_quoting_options librecode_clone_quoting_options
-#define code_to_ucs2 librecode_code_to_ucs2
-#define combine_byte_byte librecode_combine_byte_byte
-#define combine_byte_ucs2 librecode_combine_byte_ucs2
-#define combine_ucs2_byte librecode_combine_ucs2_byte
-#define combine_ucs2_ucs2 librecode_combine_ucs2_ucs2
-#define complete_pairs librecode_complete_pairs
-#define declare_alias librecode_declare_alias
-#define declare_explode_data librecode_declare_explode_data
-#define declare_iconv librecode_declare_iconv
-#define declare_implied_surface librecode_declare_implied_surface
-#define declare_single librecode_declare_single
-#define declare_strip_data librecode_declare_strip_data
-#define decode_known_pairs librecode_decode_known_pairs
-#define delmodule_african librecode_delmodule_african
-#define delmodule_afrtran librecode_delmodule_afrtran
-#define delmodule_applemac librecode_delmodule_applemac
-#define delmodule_ascii_latin1 librecode_delmodule_ascii_latin1
-#define delmodule_atarist librecode_delmodule_atarist
-#define delmodule_bangbang librecode_delmodule_bangbang
-#define delmodule_base64 librecode_delmodule_base64
-#define delmodule_cdcnos librecode_delmodule_cdcnos
-#define delmodule_dump librecode_delmodule_dump
-#define delmodule_ebcdic librecode_delmodule_ebcdic
-#define delmodule_endline librecode_delmodule_endline
-#define delmodule_flat librecode_delmodule_flat
-#define delmodule_html librecode_delmodule_html
-#define delmodule_ibmpc librecode_delmodule_ibmpc
-#define delmodule_iconqnx librecode_delmodule_iconqnx
-#define delmodule_iconv librecode_delmodule_iconv
-#define delmodule_latex_latin1 librecode_delmodule_latex_latin1
-#define delmodule_latin1_ascii librecode_delmodule_latin1_ascii
-#define delmodule_latin1_latex librecode_delmodule_latin1_latex
-#define delmodule_latin1_texte librecode_delmodule_latin1_texte
-#define delmodule_mule librecode_delmodule_mule
-#define delmodule_permutations librecode_delmodule_permutations
-#define delmodule_quoted_printable librecode_delmodule_quoted_printable
-#define delmodule_rfc1345 librecode_delmodule_rfc1345
-#define delmodule_strips librecode_delmodule_strips
-#define delmodule_testdump librecode_delmodule_testdump
-#define delmodule_texinfo librecode_delmodule_texinfo
-#define delmodule_texte_latin1 librecode_delmodule_texte_latin1
-#define delmodule_ucs librecode_delmodule_ucs
-#define delmodule_utf16 librecode_delmodule_utf16
-#define delmodule_utf7 librecode_delmodule_utf7
-#define delmodule_utf8 librecode_delmodule_utf8
-#define delmodule_varia librecode_delmodule_varia
-#define delmodule_vietnamese librecode_delmodule_vietnamese
-#define edit_sequence librecode_edit_sequence
-#define explode_byte_byte librecode_explode_byte_byte
-#define explode_byte_ucs2 librecode_explode_byte_ucs2
-#define explode_ucs2_byte librecode_explode_ucs2_byte
-#define explode_ucs2_ucs2 librecode_explode_ucs2_ucs2
-#define find_alias librecode_find_alias
-#define find_and_report_subsets librecode_find_and_report_subsets
-#define get_byte_helper librecode_get_byte_helper
-#define get_quoting_style librecode_get_quoting_style
-#define get_ucs2 librecode_get_ucs2
-#define get_ucs4 librecode_get_ucs4
-#define hash_clear librecode_hash_clear
-#define hash_delete librecode_hash_delete
-#define hash_do_for_each librecode_hash_do_for_each
-#define hash_free librecode_hash_free
-#define hash_get_entries librecode_hash_get_entries
-#define hash_get_first librecode_hash_get_first
-#define hash_get_max_bucket_length librecode_hash_get_max_bucket_length
-#define hash_get_n_buckets librecode_hash_get_n_buckets
-#define hash_get_n_buckets_used librecode_hash_get_n_buckets_used
-#define hash_get_n_entries librecode_hash_get_n_entries
-#define hash_get_next librecode_hash_get_next
-#define hash_initialize librecode_hash_initialize
-#define hash_insert librecode_hash_insert
-#define hash_lookup librecode_hash_lookup
-#define hash_print_statistics librecode_hash_print_statistics
-#define hash_rehash librecode_hash_rehash
-#define hash_reset_tuning librecode_hash_reset_tuning
-#define hash_string librecode_hash_string
-#define hash_table_ok librecode_hash_table_ok
-#define init_combine librecode_init_combine
-#define init_explode librecode_init_explode
-#define init_ucs2_to_byte librecode_init_ucs2_to_byte
-#define invert_table librecode_invert_table
-#define list_all_symbols librecode_list_all_symbols
-#define list_concise_charset librecode_list_concise_charset
-#define list_full_charset librecode_list_full_charset
-#define locale_charset librecode_locale_charset
-#define make_argmatch_arrays librecode_make_argmatch_arrays
-#define module_african librecode_module_african
-#define module_afrtran librecode_module_afrtran
-#define module_applemac librecode_module_applemac
-#define module_ascii_latin1 librecode_module_ascii_latin1
-#define module_atarist librecode_module_atarist
-#define module_bangbang librecode_module_bangbang
-#define module_base64 librecode_module_base64
-#define module_cdcnos librecode_module_cdcnos
-#define module_dump librecode_module_dump
-#define module_ebcdic librecode_module_ebcdic
-#define module_endline librecode_module_endline
-#define module_flat librecode_module_flat
-#define module_html librecode_module_html
-#define module_ibmpc librecode_module_ibmpc
-#define module_iconqnx librecode_module_iconqnx
-#define module_iconv librecode_module_iconv
-#define module_latex_latin1 librecode_module_latex_latin1
-#define module_latin1_ascii librecode_module_latin1_ascii
-#define module_latin1_latex librecode_module_latin1_latex
-#define module_latin1_texte librecode_module_latin1_texte
-#define module_mule librecode_module_mule
-#define module_permutations librecode_module_permutations
-#define module_quoted_printable librecode_module_quoted_printable
-#define module_rfc1345 librecode_module_rfc1345
-#define module_strips librecode_module_strips
-#define module_testdump librecode_module_testdump
-#define module_texinfo librecode_module_texinfo
-#define module_texte_latin1 librecode_module_texte_latin1
-#define module_ucs librecode_module_ucs
-#define module_utf16 librecode_module_utf16
-#define module_utf7 librecode_module_utf7
-#define module_utf8 librecode_module_utf8
-#define module_varia librecode_module_varia
-#define module_vietnamese librecode_module_vietnamese
-#define prepare_for_aliases librecode_prepare_for_aliases
-#define put_byte_helper librecode_put_byte_helper
-#define put_ucs2 librecode_put_ucs2
-#define put_ucs4 librecode_put_ucs4
-#define quotearg librecode_quotearg
-#define quotearg_buffer librecode_quotearg_buffer
-#define quotearg_char librecode_quotearg_char
-#define quotearg_colon librecode_quotearg_colon
-#define quotearg_n librecode_quotearg_n
-#define quotearg_n_style librecode_quotearg_n_style
-#define quotearg_style librecode_quotearg_style
-#define reversibility librecode_reversibility
-#define set_char_quoting librecode_set_char_quoting
-#define set_quoting_style librecode_set_quoting_style
-#define should_prefer_french librecode_should_prefer_french
-#define texte_latin1_diaeresis librecode_texte_latin1_diaeresis
-#define transform_byte_to_byte librecode_transform_byte_to_byte
-#define transform_byte_to_ucs2 librecode_transform_byte_to_ucs2
-#define transform_byte_to_variable librecode_transform_byte_to_variable
-#define transform_ucs2_to_byte librecode_transform_ucs2_to_byte
-#define transform_with_iconv librecode_transform_with_iconv
-#define ucs2_to_charname librecode_ucs2_to_charname
-#define ucs2_to_french_charname librecode_ucs2_to_french_charname
-#define ucs2_to_rfc1345 librecode_ucs2_to_rfc1345
-#define x2nrealloc librecode_x2nrealloc
-#define x2realloc librecode_x2realloc
-#define xalloc_die librecode_xalloc_die
-#define xcalloc librecode_xcalloc
-#define xmalloc librecode_xmalloc
-#define xmemdup librecode_xmemdup
-#define xnmalloc librecode_xnmalloc
-#define xnrealloc librecode_xnrealloc
-#define xrealloc librecode_xrealloc
-#define xstrdup librecode_xstrdup
-#define xzalloc librecode_xzalloc
+/* Conversion of files between different charsets and surfaces.
+   Copyright © 2008 Free Software Foundation, Inc.
+   Contributed by François Pinard <pinard@iro.umontreal.ca>, 2008.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License
+   as published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This library is distributed in the hope that it will be
+   useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+   of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Recode Library; see the file `COPYING.LIB'.
+   If not, write to the Free Software Foundation, Inc., 59 Temple Place -
+   Suite 330, Boston, MA 02111-1307, USA.  */
+
+/* Definitions to clean up the linker namespace.  */
+
+#ifndef CLEANER_H_
+# define CLEANER_H_
+
+# define __xargmatch_internal librecode_xargmatch_internal
+# define aliases_lookup librecode_aliases_lookup
+# define argcasematch librecode_argcasematch
+# define argmatch librecode_argmatch
+# define argmatch_invalid librecode_argmatch_invalid
+# define argmatch_to_argument librecode_argmatch_to_argument
+# define argmatch_valid librecode_argmatch_valid
+# define clone_quoting_options librecode_clone_quoting_options
+# define code_to_ucs2 librecode_code_to_ucs2
+# define combine_byte_byte librecode_combine_byte_byte
+# define combine_byte_ucs2 librecode_combine_byte_ucs2
+# define combine_ucs2_byte librecode_combine_ucs2_byte
+# define combine_ucs2_ucs2 librecode_combine_ucs2_ucs2
+# define complete_pairs librecode_complete_pairs
+# define declare_alias librecode_declare_alias
+# define declare_explode_data librecode_declare_explode_data
+# define declare_iconv librecode_declare_iconv
+# define declare_implied_surface librecode_declare_implied_surface
+# define declare_single librecode_declare_single
+# define declare_strip_data librecode_declare_strip_data
+# define decode_known_pairs librecode_decode_known_pairs
+# define delmodule_african librecode_delmodule_african
+# define delmodule_afrtran librecode_delmodule_afrtran
+# define delmodule_applemac librecode_delmodule_applemac
+# define delmodule_ascii_latin1 librecode_delmodule_ascii_latin1
+# define delmodule_atarist librecode_delmodule_atarist
+# define delmodule_bangbang librecode_delmodule_bangbang
+# define delmodule_base64 librecode_delmodule_base64
+# define delmodule_cdcnos librecode_delmodule_cdcnos
+# define delmodule_dump librecode_delmodule_dump
+# define delmodule_ebcdic librecode_delmodule_ebcdic
+# define delmodule_endline librecode_delmodule_endline
+# define delmodule_flat librecode_delmodule_flat
+# define delmodule_html librecode_delmodule_html
+# define delmodule_ibmpc librecode_delmodule_ibmpc
+# define delmodule_iconqnx librecode_delmodule_iconqnx
+# define delmodule_iconv librecode_delmodule_iconv
+# define delmodule_latex_latin1 librecode_delmodule_latex_latin1
+# define delmodule_latin1_ascii librecode_delmodule_latin1_ascii
+# define delmodule_latin1_latex librecode_delmodule_latin1_latex
+# define delmodule_latin1_texte librecode_delmodule_latin1_texte
+# define delmodule_mule librecode_delmodule_mule
+# define delmodule_permutations librecode_delmodule_permutations
+# define delmodule_quoted_printable librecode_delmodule_quoted_printable
+# define delmodule_rfc1345 librecode_delmodule_rfc1345
+# define delmodule_strips librecode_delmodule_strips
+# define delmodule_testdump librecode_delmodule_testdump
+# define delmodule_texinfo librecode_delmodule_texinfo
+# define delmodule_texte_latin1 librecode_delmodule_texte_latin1
+# define delmodule_ucs librecode_delmodule_ucs
+# define delmodule_utf16 librecode_delmodule_utf16
+# define delmodule_utf7 librecode_delmodule_utf7
+# define delmodule_utf8 librecode_delmodule_utf8
+# define delmodule_varia librecode_delmodule_varia
+# define delmodule_vietnamese librecode_delmodule_vietnamese
+# define edit_sequence librecode_edit_sequence
+# define explode_byte_byte librecode_explode_byte_byte
+# define explode_byte_ucs2 librecode_explode_byte_ucs2
+# define explode_ucs2_byte librecode_explode_ucs2_byte
+# define explode_ucs2_ucs2 librecode_explode_ucs2_ucs2
+# define find_alias librecode_find_alias
+# define find_and_report_subsets librecode_find_and_report_subsets
+# define get_byte_helper librecode_get_byte_helper
+# define get_quoting_style librecode_get_quoting_style
+# define get_ucs2 librecode_get_ucs2
+# define get_ucs4 librecode_get_ucs4
+# define hash_clear librecode_hash_clear
+# define hash_delete librecode_hash_delete
+# define hash_do_for_each librecode_hash_do_for_each
+# define hash_free librecode_hash_free
+# define hash_get_entries librecode_hash_get_entries
+# define hash_get_first librecode_hash_get_first
+# define hash_get_max_bucket_length librecode_hash_get_max_bucket_length
+# define hash_get_n_buckets librecode_hash_get_n_buckets
+# define hash_get_n_buckets_used librecode_hash_get_n_buckets_used
+# define hash_get_n_entries librecode_hash_get_n_entries
+# define hash_get_next librecode_hash_get_next
+# define hash_initialize librecode_hash_initialize
+# define hash_insert librecode_hash_insert
+# define hash_lookup librecode_hash_lookup
+# define hash_print_statistics librecode_hash_print_statistics
+# define hash_rehash librecode_hash_rehash
+# define hash_reset_tuning librecode_hash_reset_tuning
+# define hash_string librecode_hash_string
+# define hash_table_ok librecode_hash_table_ok
+# define init_combine librecode_init_combine
+# define init_explode librecode_init_explode
+# define init_ucs2_to_byte librecode_init_ucs2_to_byte
+# define invert_table librecode_invert_table
+# define list_all_symbols librecode_list_all_symbols
+# define list_concise_charset librecode_list_concise_charset
+# define list_full_charset librecode_list_full_charset
+# define locale_charset librecode_locale_charset
+# define make_argmatch_arrays librecode_make_argmatch_arrays
+# define module_african librecode_module_african
+# define module_afrtran librecode_module_afrtran
+# define module_applemac librecode_module_applemac
+# define module_ascii_latin1 librecode_module_ascii_latin1
+# define module_atarist librecode_module_atarist
+# define module_bangbang librecode_module_bangbang
+# define module_base64 librecode_module_base64
+# define module_cdcnos librecode_module_cdcnos
+# define module_dump librecode_module_dump
+# define module_ebcdic librecode_module_ebcdic
+# define module_endline librecode_module_endline
+# define module_flat librecode_module_flat
+# define module_html librecode_module_html
+# define module_ibmpc librecode_module_ibmpc
+# define module_iconqnx librecode_module_iconqnx
+# define module_iconv librecode_module_iconv
+# define module_latex_latin1 librecode_module_latex_latin1
+# define module_latin1_ascii librecode_module_latin1_ascii
+# define module_latin1_latex librecode_module_latin1_latex
+# define module_latin1_texte librecode_module_latin1_texte
+# define module_mule librecode_module_mule
+# define module_permutations librecode_module_permutations
+# define module_quoted_printable librecode_module_quoted_printable
+# define module_rfc1345 librecode_module_rfc1345
+# define module_strips librecode_module_strips
+# define module_testdump librecode_module_testdump
+# define module_texinfo librecode_module_texinfo
+# define module_texte_latin1 librecode_module_texte_latin1
+# define module_ucs librecode_module_ucs
+# define module_utf16 librecode_module_utf16
+# define module_utf7 librecode_module_utf7
+# define module_utf8 librecode_module_utf8
+# define module_varia librecode_module_varia
+# define module_vietnamese librecode_module_vietnamese
+# define prepare_for_aliases librecode_prepare_for_aliases
+# define put_byte_helper librecode_put_byte_helper
+# define put_ucs2 librecode_put_ucs2
+# define put_ucs4 librecode_put_ucs4
+# define quotearg librecode_quotearg
+# define quotearg_buffer librecode_quotearg_buffer
+# define quotearg_char librecode_quotearg_char
+# define quotearg_colon librecode_quotearg_colon
+# define quotearg_n librecode_quotearg_n
+# define quotearg_n_style librecode_quotearg_n_style
+# define quotearg_style librecode_quotearg_style
+# define reversibility librecode_reversibility
+# define set_char_quoting librecode_set_char_quoting
+# define set_quoting_style librecode_set_quoting_style
+# define should_prefer_french librecode_should_prefer_french
+# define texte_latin1_diaeresis librecode_texte_latin1_diaeresis
+# define transform_byte_to_byte librecode_transform_byte_to_byte
+# define transform_byte_to_ucs2 librecode_transform_byte_to_ucs2
+# define transform_byte_to_variable librecode_transform_byte_to_variable
+# define transform_ucs2_to_byte librecode_transform_ucs2_to_byte
+# define transform_with_iconv librecode_transform_with_iconv
+# define ucs2_to_charname librecode_ucs2_to_charname
+# define ucs2_to_french_charname librecode_ucs2_to_french_charname
+# define ucs2_to_rfc1345 librecode_ucs2_to_rfc1345
+# define x2nrealloc librecode_x2nrealloc
+# define x2realloc librecode_x2realloc
+# define xalloc_die librecode_xalloc_die
+# define xcalloc librecode_xcalloc
+# define xmalloc librecode_xmalloc
+# define xmemdup librecode_xmemdup
+# define xnmalloc librecode_xnmalloc
+# define xnrealloc librecode_xnrealloc
+# define xrealloc librecode_xrealloc
+# define xstrdup librecode_xstrdup
+# define xzalloc librecode_xzalloc
+
+#endif /* ! CLEANER_H_ */
index 59b9d3daebc1749823087803c6adfa26ca48ca4a..2e651dbaf697e00594738ef2bfa707fc93a11036 100644 (file)
@@ -1,3 +1,8 @@
+2008-03-16  François Pinard  <pinard@iro.umontreal.ca>
+
+       * recodext.h.in: New name for recodext.h.
+       * Makefile.am (recodext.h): New goal.
+
 2008-03-14  François Pinard  <pinard@iro.umontreal.ca>
 
        * main.c: Inhibit iconv whenever -h is used.
index 1f6f1abb97f4c20659f26bed9ed64e673d446628..e2995773c08378d9cf9128697c77520778e8f339 100644 (file)
@@ -27,7 +27,9 @@ noinst_HEADERS = argmatch.h charname.h common.h decsteps.h exit.h exitfail.h \
 fr-charname.h hash.h inisteps.h iconvdecl.h quotearg.h rfc1345.h tersteps.h \
 xalloc.h $(H_FALLBACKS) $(H_SURFACES)
 
-EXTRA_DIST = stamp-steps stamp-strip $(L_STEPS) mergelex.py $(MANS)
+EXTRA_DIST = recodext.h.in stamp-steps stamp-strip \
+$(L_STEPS) mergelex.py $(MANS)
+
 CLEANFILES = iconvdecl.h
 
 C_STEPS = african.c afrtran.c applemac.c atarist.c bangbang.c cdcnos.c \
@@ -98,6 +100,9 @@ $(srcdir)/recode.1: recode
          echo "         but you may safely and merely ignore this error."; \
        fi
 
+$(srcdir)/recodext.h: $(top_srcdir)/cleaner.h.in $(srcdir)/recodext.h.in
+       cat $(top_srcdir)/cleaner.h.in $(srcdir)/recodext.h.in > $@
+
 main.o: main.c ../config.status
 
 charname$U.lo: rfc1345.h
@@ -144,4 +149,3 @@ strip-pool.c strip-data.c: stamp-strip
 stamp-strip: ../tables.py $(MNEMONICS_DS) $(CHARSETS_DEF)
        $(TABLES_PY) -C $(srcdir) -p $(MNEMONICS_DS) $(CHARSETS_DEF)
        echo timestamp > $(srcdir)/$@
-
index 690019bcafba4599f53d2503d77797c00e1b634d..a8695ad1059a75467c2847ef98c43122ad9281bd 100644 (file)
@@ -270,7 +270,9 @@ noinst_HEADERS = argmatch.h charname.h common.h decsteps.h exit.h exitfail.h \
 fr-charname.h hash.h inisteps.h iconvdecl.h quotearg.h rfc1345.h tersteps.h \
 xalloc.h $(H_FALLBACKS) $(H_SURFACES)
 
-EXTRA_DIST = stamp-steps stamp-strip $(L_STEPS) mergelex.py $(MANS)
+EXTRA_DIST = recodext.h.in stamp-steps stamp-strip \
+$(L_STEPS) mergelex.py $(MANS)
+
 CLEANFILES = iconvdecl.h
 C_STEPS = african.c afrtran.c applemac.c atarist.c bangbang.c cdcnos.c \
 ebcdic.c ibmpc.c iconqnx.c lat1asci.c java.c mule.c strip-data.c \
@@ -914,6 +916,9 @@ $(srcdir)/recode.1: recode
          echo "         but you may safely and merely ignore this error."; \
        fi
 
+$(srcdir)/recodext.h: $(top_srcdir)/cleaner.h.in $(srcdir)/recodext.h.in
+       cat $(top_srcdir)/cleaner.h.in $(srcdir)/recodext.h.in > $@
+
 main.o: main.c ../config.status
 
 charname$U.lo: rfc1345.h
index 84308fc26415af82f683006f7bab9a4d9ba8e8ba..8533799a36eaf7c52768bdb8869d858fb9ea5578 100644 (file)
@@ -1,3 +1,192 @@
+/* Conversion of files between different charsets and surfaces.
+   Copyright © 2008 Free Software Foundation, Inc.
+   Contributed by François Pinard <pinard@iro.umontreal.ca>, 2008.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License
+   as published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This library is distributed in the hope that it will be
+   useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+   of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Recode Library; see the file `COPYING.LIB'.
+   If not, write to the Free Software Foundation, Inc., 59 Temple Place -
+   Suite 330, Boston, MA 02111-1307, USA.  */
+
+/* Definitions to clean up the linker namespace.  */
+
+#ifndef CLEANER_H_
+# define CLEANER_H_
+
+# define __xargmatch_internal librecode_xargmatch_internal
+# define aliases_lookup librecode_aliases_lookup
+# define argcasematch librecode_argcasematch
+# define argmatch librecode_argmatch
+# define argmatch_invalid librecode_argmatch_invalid
+# define argmatch_to_argument librecode_argmatch_to_argument
+# define argmatch_valid librecode_argmatch_valid
+# define clone_quoting_options librecode_clone_quoting_options
+# define code_to_ucs2 librecode_code_to_ucs2
+# define combine_byte_byte librecode_combine_byte_byte
+# define combine_byte_ucs2 librecode_combine_byte_ucs2
+# define combine_ucs2_byte librecode_combine_ucs2_byte
+# define combine_ucs2_ucs2 librecode_combine_ucs2_ucs2
+# define complete_pairs librecode_complete_pairs
+# define declare_alias librecode_declare_alias
+# define declare_explode_data librecode_declare_explode_data
+# define declare_iconv librecode_declare_iconv
+# define declare_implied_surface librecode_declare_implied_surface
+# define declare_single librecode_declare_single
+# define declare_strip_data librecode_declare_strip_data
+# define decode_known_pairs librecode_decode_known_pairs
+# define delmodule_african librecode_delmodule_african
+# define delmodule_afrtran librecode_delmodule_afrtran
+# define delmodule_applemac librecode_delmodule_applemac
+# define delmodule_ascii_latin1 librecode_delmodule_ascii_latin1
+# define delmodule_atarist librecode_delmodule_atarist
+# define delmodule_bangbang librecode_delmodule_bangbang
+# define delmodule_base64 librecode_delmodule_base64
+# define delmodule_cdcnos librecode_delmodule_cdcnos
+# define delmodule_dump librecode_delmodule_dump
+# define delmodule_ebcdic librecode_delmodule_ebcdic
+# define delmodule_endline librecode_delmodule_endline
+# define delmodule_flat librecode_delmodule_flat
+# define delmodule_html librecode_delmodule_html
+# define delmodule_ibmpc librecode_delmodule_ibmpc
+# define delmodule_iconqnx librecode_delmodule_iconqnx
+# define delmodule_iconv librecode_delmodule_iconv
+# define delmodule_latex_latin1 librecode_delmodule_latex_latin1
+# define delmodule_latin1_ascii librecode_delmodule_latin1_ascii
+# define delmodule_latin1_latex librecode_delmodule_latin1_latex
+# define delmodule_latin1_texte librecode_delmodule_latin1_texte
+# define delmodule_mule librecode_delmodule_mule
+# define delmodule_permutations librecode_delmodule_permutations
+# define delmodule_quoted_printable librecode_delmodule_quoted_printable
+# define delmodule_rfc1345 librecode_delmodule_rfc1345
+# define delmodule_strips librecode_delmodule_strips
+# define delmodule_testdump librecode_delmodule_testdump
+# define delmodule_texinfo librecode_delmodule_texinfo
+# define delmodule_texte_latin1 librecode_delmodule_texte_latin1
+# define delmodule_ucs librecode_delmodule_ucs
+# define delmodule_utf16 librecode_delmodule_utf16
+# define delmodule_utf7 librecode_delmodule_utf7
+# define delmodule_utf8 librecode_delmodule_utf8
+# define delmodule_varia librecode_delmodule_varia
+# define delmodule_vietnamese librecode_delmodule_vietnamese
+# define edit_sequence librecode_edit_sequence
+# define explode_byte_byte librecode_explode_byte_byte
+# define explode_byte_ucs2 librecode_explode_byte_ucs2
+# define explode_ucs2_byte librecode_explode_ucs2_byte
+# define explode_ucs2_ucs2 librecode_explode_ucs2_ucs2
+# define find_alias librecode_find_alias
+# define find_and_report_subsets librecode_find_and_report_subsets
+# define get_byte_helper librecode_get_byte_helper
+# define get_quoting_style librecode_get_quoting_style
+# define get_ucs2 librecode_get_ucs2
+# define get_ucs4 librecode_get_ucs4
+# define hash_clear librecode_hash_clear
+# define hash_delete librecode_hash_delete
+# define hash_do_for_each librecode_hash_do_for_each
+# define hash_free librecode_hash_free
+# define hash_get_entries librecode_hash_get_entries
+# define hash_get_first librecode_hash_get_first
+# define hash_get_max_bucket_length librecode_hash_get_max_bucket_length
+# define hash_get_n_buckets librecode_hash_get_n_buckets
+# define hash_get_n_buckets_used librecode_hash_get_n_buckets_used
+# define hash_get_n_entries librecode_hash_get_n_entries
+# define hash_get_next librecode_hash_get_next
+# define hash_initialize librecode_hash_initialize
+# define hash_insert librecode_hash_insert
+# define hash_lookup librecode_hash_lookup
+# define hash_print_statistics librecode_hash_print_statistics
+# define hash_rehash librecode_hash_rehash
+# define hash_reset_tuning librecode_hash_reset_tuning
+# define hash_string librecode_hash_string
+# define hash_table_ok librecode_hash_table_ok
+# define init_combine librecode_init_combine
+# define init_explode librecode_init_explode
+# define init_ucs2_to_byte librecode_init_ucs2_to_byte
+# define invert_table librecode_invert_table
+# define list_all_symbols librecode_list_all_symbols
+# define list_concise_charset librecode_list_concise_charset
+# define list_full_charset librecode_list_full_charset
+# define locale_charset librecode_locale_charset
+# define make_argmatch_arrays librecode_make_argmatch_arrays
+# define module_african librecode_module_african
+# define module_afrtran librecode_module_afrtran
+# define module_applemac librecode_module_applemac
+# define module_ascii_latin1 librecode_module_ascii_latin1
+# define module_atarist librecode_module_atarist
+# define module_bangbang librecode_module_bangbang
+# define module_base64 librecode_module_base64
+# define module_cdcnos librecode_module_cdcnos
+# define module_dump librecode_module_dump
+# define module_ebcdic librecode_module_ebcdic
+# define module_endline librecode_module_endline
+# define module_flat librecode_module_flat
+# define module_html librecode_module_html
+# define module_ibmpc librecode_module_ibmpc
+# define module_iconqnx librecode_module_iconqnx
+# define module_iconv librecode_module_iconv
+# define module_latex_latin1 librecode_module_latex_latin1
+# define module_latin1_ascii librecode_module_latin1_ascii
+# define module_latin1_latex librecode_module_latin1_latex
+# define module_latin1_texte librecode_module_latin1_texte
+# define module_mule librecode_module_mule
+# define module_permutations librecode_module_permutations
+# define module_quoted_printable librecode_module_quoted_printable
+# define module_rfc1345 librecode_module_rfc1345
+# define module_strips librecode_module_strips
+# define module_testdump librecode_module_testdump
+# define module_texinfo librecode_module_texinfo
+# define module_texte_latin1 librecode_module_texte_latin1
+# define module_ucs librecode_module_ucs
+# define module_utf16 librecode_module_utf16
+# define module_utf7 librecode_module_utf7
+# define module_utf8 librecode_module_utf8
+# define module_varia librecode_module_varia
+# define module_vietnamese librecode_module_vietnamese
+# define prepare_for_aliases librecode_prepare_for_aliases
+# define put_byte_helper librecode_put_byte_helper
+# define put_ucs2 librecode_put_ucs2
+# define put_ucs4 librecode_put_ucs4
+# define quotearg librecode_quotearg
+# define quotearg_buffer librecode_quotearg_buffer
+# define quotearg_char librecode_quotearg_char
+# define quotearg_colon librecode_quotearg_colon
+# define quotearg_n librecode_quotearg_n
+# define quotearg_n_style librecode_quotearg_n_style
+# define quotearg_style librecode_quotearg_style
+# define reversibility librecode_reversibility
+# define set_char_quoting librecode_set_char_quoting
+# define set_quoting_style librecode_set_quoting_style
+# define should_prefer_french librecode_should_prefer_french
+# define texte_latin1_diaeresis librecode_texte_latin1_diaeresis
+# define transform_byte_to_byte librecode_transform_byte_to_byte
+# define transform_byte_to_ucs2 librecode_transform_byte_to_ucs2
+# define transform_byte_to_variable librecode_transform_byte_to_variable
+# define transform_ucs2_to_byte librecode_transform_ucs2_to_byte
+# define transform_with_iconv librecode_transform_with_iconv
+# define ucs2_to_charname librecode_ucs2_to_charname
+# define ucs2_to_french_charname librecode_ucs2_to_french_charname
+# define ucs2_to_rfc1345 librecode_ucs2_to_rfc1345
+# define x2nrealloc librecode_x2nrealloc
+# define x2realloc librecode_x2realloc
+# define xalloc_die librecode_xalloc_die
+# define xcalloc librecode_xcalloc
+# define xmalloc librecode_xmalloc
+# define xmemdup librecode_xmemdup
+# define xnmalloc librecode_xnmalloc
+# define xnrealloc librecode_xnrealloc
+# define xrealloc librecode_xrealloc
+# define xstrdup librecode_xstrdup
+# define xzalloc librecode_xzalloc
+
+#endif /* ! CLEANER_H_ */
 /* Conversion of files between different charsets and surfaces.
    Copyright © 1990, 93, 94, 96-99, 2000, 2001 Free Software Foundation, Inc.
    Contributed by François Pinard <pinard@iro.umontreal.ca>, 1988.
diff --git a/src/recodext.h.in b/src/recodext.h.in
new file mode 100644 (file)
index 0000000..84308fc
--- /dev/null
@@ -0,0 +1,774 @@
+/* Conversion of files between different charsets and surfaces.
+   Copyright © 1990, 93, 94, 96-99, 2000, 2001 Free Software Foundation, Inc.
+   Contributed by François Pinard <pinard@iro.umontreal.ca>, 1988.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License
+   as published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This library is distributed in the hope that it will be
+   useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+   of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Recode Library; see the file `COPYING.LIB'.
+   If not, write to the Free Software Foundation, Inc., 59 Temple Place -
+   Suite 330, Boston, MA 02111-1307, USA.  */
+
+/* Extended definitions, for externally written steps.  */
+
+#include "recode.h"
+
+/* Internal typedefs, to supplement those in "recode.h".  */
+
+typedef struct recode_symbol *                 RECODE_SYMBOL;
+typedef struct recode_option_list *            RECODE_OPTION_LIST;
+typedef struct recode_single *                 RECODE_SINGLE;
+typedef struct recode_step *                   RECODE_STEP;
+typedef struct recode_alias *                  RECODE_ALIAS;
+typedef struct recode_subtask *                        RECODE_SUBTASK;
+
+typedef const struct recode_option_list *      RECODE_CONST_OPTION_LIST;
+typedef const struct recode_outer *            RECODE_CONST_OUTER;
+typedef const struct recode_step *             RECODE_CONST_STEP;
+typedef const struct recode_alias *            RECODE_CONST_ALIAS;
+typedef const struct recode_task *             RECODE_CONST_TASK;
+
+/*---------------------------------------------------------.
+| Maintain maximum of ERROR and current error in SUBTASK.  |
+`---------------------------------------------------------*/
+
+#define SET_SUBTASK_ERROR(Error, Subtask) \
+  recode_if_nogo (Error, Subtask)
+
+/*--------------------------------------------------------------------------.
+| Return from SUBTASK with `false', if the failure level has been reached.  |
+`--------------------------------------------------------------------------*/
+
+#define SUBTASK_RETURN(Subtask) \
+  return (Subtask)->task->error_so_far < (Subtask)->task->fail_level
+
+/*-------------------------------------------------------------------------.
+| Maintain maximum of ERROR and current error in SUBTASK.  If the abort    |
+| level has been reached, then return immediately as with SUBTASK_RETURN.  |
+`-------------------------------------------------------------------------*/
+
+#define RETURN_IF_NOGO(Error, Subtask) \
+  do {                                                         \
+    if (recode_if_nogo (Error, Subtask))                       \
+       SUBTASK_RETURN (Subtask);                               \
+  } while (false)
+\f
+/* Various structure declarations.  */
+
+/*-----------------------------------------.
+| Outer variables for the recode library.  |
+`-----------------------------------------*/
+
+/* Error codes, in increasing severity.  */
+
+enum recode_error
+  {
+    RECODE_NO_ERROR,           /* no error so far */
+    RECODE_NOT_CANONICAL,      /* input is not exact, but equivalent */
+    RECODE_AMBIGUOUS_OUTPUT,   /* output will be misleading */
+    RECODE_UNTRANSLATABLE,     /* input is getting lost, while valid */
+    RECODE_INVALID_INPUT,      /* input is getting lost, but was invalid */
+    RECODE_SYSTEM_ERROR,       /* system returned input/output failure */
+    RECODE_USER_ERROR,         /* library is being misused */
+    RECODE_INTERNAL_ERROR,     /* programming botch in the library */
+    RECODE_MAXIMUM_ERROR       /* impossible value (should be kept last) */
+  };
+
+/* Structure for relating alias names to charsets and surfaces.  */
+
+struct recode_alias
+  {
+    const char *name;          /* charset, surface or alias name */
+    RECODE_SYMBOL symbol;      /* associated symbol */
+    /* If a charset, list of surfaces usually applied by default.  */
+    struct recode_surface_list *implied_surfaces;
+  };
+
+/* The sole purpose of qualities is for later attributing step costs.  */
+
+enum recode_size
+  {
+    RECODE_1,                  /* roughly one byte per character */
+    RECODE_2,                  /* roughly two bytes per character */
+    RECODE_4,                  /* roughly four bytes per character */
+    RECODE_N                   /* variable number of bytes per character */
+  };
+
+struct recode_quality
+  {
+    enum recode_size in_size : 3; /* rough byte size of input characters */
+    enum recode_size out_size : 3; /* rough byte size of output characters */
+    bool reversible : 1;       /* transformation is known to be reversible */
+    bool slower : 1;           /* transformation is slower than average */
+    bool faster : 1;           /* transformation is faster than average */
+  };
+
+/* Main variables of the initialised library.  */
+
+struct recode_outer
+  {
+    /* This flag asks the library to diagnose and abort itself if errors.  */
+    bool auto_abort;
+
+    /* If the external `iconv' library should be initialized and used.  */
+    bool use_iconv;
+
+    /* charset.c */
+    /* --------- */
+
+    /* Known pairs (for restricting listing).  */
+    struct recode_known_pair *pair_restriction;
+    unsigned pair_restrictions;
+
+    /* Opaque Hash_table pointer giving access to the single table holding all
+       names and aliases for charsets, surfaces and fallback methods.  */
+    void *alias_table;
+
+    /* Unique symbols are linked into a list and counted.  */
+    RECODE_SYMBOL symbol_list;
+    unsigned number_of_symbols;
+
+    /* Arrays of strings ready for argmatch.  */
+    char **argmatch_charset_array;
+    char **argmatch_surface_array;
+    const char **realname_charset_array;
+    const char **realname_surface_array;
+
+    /* recode.c */
+    /* -------- */
+
+    /* Known single steps.  */
+    struct recode_single *single_list;
+    unsigned number_of_singles;
+
+    /* Identity recoding table.  */
+    const unsigned char *one_to_same;
+
+    /* Preset charsets and surfaces.  */
+    RECODE_SYMBOL data_symbol;/* special charset defining surfaces */
+    RECODE_SYMBOL tree_symbol; /* special charset defining structures */
+    RECODE_SYMBOL ucs2_charset; /* UCS-2 */
+    RECODE_SYMBOL iconv_pivot; /* `iconv' internal UCS */
+    RECODE_SYMBOL crlf_surface; /* for IBM PC machines */
+    RECODE_SYMBOL cr_surface;  /* for Macintosh machines */
+
+    /* Preset qualities, to make step initialisation simpler.  */
+    struct recode_quality quality_byte_reversible;
+    struct recode_quality quality_byte_to_byte;
+    struct recode_quality quality_byte_to_ucs2;
+    struct recode_quality quality_byte_to_variable;
+    struct recode_quality quality_ucs2_to_byte;
+    struct recode_quality quality_ucs2_to_variable;
+    struct recode_quality quality_variable_to_byte;
+    struct recode_quality quality_variable_to_ucs2;
+    struct recode_quality quality_variable_to_variable;
+  };
+
+/*--------------------------.
+| Description of a symbol.  |
+`--------------------------*/
+
+enum recode_symbol_type
+  {
+    RECODE_NO_SYMBOL_TYPE,     /* missing value */
+    RECODE_CHARSET,            /* visible in the space of charsets */
+    RECODE_DATA_SURFACE,       /* this is a mere data surface */
+    RECODE_TREE_SURFACE                /* this is a structural surface */
+  };
+
+enum recode_data_type
+  {
+    RECODE_NO_CHARSET_DATA,    /* the charset_table field is unused */
+    RECODE_STRIP_DATA,         /* pool pointer and array of strips */
+    RECODE_EXPLODE_DATA                /* explode variable length data */
+  };
+
+struct recode_symbol
+  {
+    /* Chaining of all known symbols (charsets and surfaces).  */
+    RECODE_SYMBOL next;
+
+    /* Unique ordinal for this symbol, counted from zero.  */
+    unsigned ordinal;
+
+    /* Main name.  */
+    const char *name;
+
+    /* Name to use for the iconv library, or NULL.  */
+    const char *iconv_name;
+
+    /* Type of table.  */
+    enum recode_data_type data_type;
+
+    /* Recoding table.  */
+    void *data;
+
+    /* Step for data..CHARSET transformation, if any, or NULL.  */
+    struct recode_single *resurfacer;
+
+    /* Step for CHARSET..data transformation, if any, or NULL.  */
+    struct recode_single *unsurfacer;
+
+    /* Non zero if this is an acceptable charset (not only a surface).  */
+    enum recode_symbol_type type : 3;
+
+    /* Non zero if this one should be ignored.  */
+    bool ignore : 1;
+  };
+
+struct recode_surface_list
+  {
+    RECODE_CONST_SYMBOL surface;
+    struct recode_surface_list *next;
+  };
+
+/*-------------------------------------------.
+| Description of a single step of recoding.  |
+`-------------------------------------------*/
+
+typedef bool (*Recode_init) PARAMS ((RECODE_STEP, RECODE_CONST_REQUEST,
+                                    RECODE_CONST_OPTION_LIST,
+                                    RECODE_CONST_OPTION_LIST));
+typedef bool (*Recode_term) PARAMS ((RECODE_STEP, RECODE_CONST_REQUEST));
+typedef bool (*Recode_transform) PARAMS ((RECODE_SUBTASK));
+typedef bool (*Recode_fallback) PARAMS ((RECODE_SUBTASK, unsigned));
+
+/* The `single' structure holds data needed to decide of sequences, and is
+   invariant over actual requests.  The `step' structure holds data needed for
+   task execution, it may take care of fallback and option variance.  */
+
+struct recode_single
+  {
+    /* Chaining of all known single steps.  */
+    struct recode_single *next;
+
+    /* Charset before conversion.  */
+    RECODE_SYMBOL before;
+
+    /* Charset after conversion.  */
+    RECODE_SYMBOL after;
+
+    /* Cost for this single step only.  */
+    short conversion_cost;
+
+    /* Initial value for step_table.  */
+    void *initial_step_table;
+
+    /* Recoding quality.  */
+    struct recode_quality quality;
+
+    /* Initialisation handler, to be called before step optimisation.  */
+    Recode_init init_routine;
+
+    /* Transformation handler, for doing the actual recoding work.  */
+    Recode_transform transform_routine;
+
+    /* Default fallback for the step.  Merely to implement `-s' option.  */
+    Recode_fallback fallback_routine;
+  };
+
+enum recode_step_type
+  {
+    RECODE_NO_STEP_TABLE,      /* the step_table field is unused */
+    RECODE_BYTE_TO_BYTE,       /* array of 256 bytes */
+    RECODE_BYTE_TO_STRING,     /* array of 256 strings */
+    RECODE_UCS2_TO_BYTE,       /* hash from ucs2 to byte */
+    RECODE_UCS2_TO_STRING,     /* hash from ucs2 to string */
+    RECODE_STRING_TO_UCS2,     /* hash from ucs2 to string, reversed */
+    RECODE_COMBINE_EXPLODE,    /* raw data for combining or exploding */
+    RECODE_COMBINE_STEP,       /* special hash for combining */
+    RECODE_EXPLODE_STEP                /* special hash for exploding */
+  };
+
+struct recode_step
+  {
+    /* Charset before conversion.  */
+    RECODE_SYMBOL before;
+
+    /* Charset after conversion.  */
+    RECODE_SYMBOL after;
+
+    /* Recoding quality.  */
+    struct recode_quality quality;
+
+    /* Type of table.  */
+    enum recode_step_type step_type;
+
+    /* Recoding table.  */
+    void *step_table;
+
+    /* Step specific variables.  */
+    void *local;
+
+    /* Transformation handler, for doing the actual recoding work.  */
+    Recode_transform transform_routine;
+
+    /* Fallback for the step.  */
+    Recode_fallback fallback_routine;
+
+    /* Cleanup handler, to be called after the recoding is done.  */
+    Recode_term term_routine;
+  };
+
+struct recode_option_list
+  {
+    const char *option;
+    RECODE_OPTION_LIST next;
+  };
+
+/*------------------------------------------------------------------------.
+| A recoding request holds, among other things, a selected path among the |
+| available recoding steps, it so represents a kind of recoding plan.     |
+`------------------------------------------------------------------------*/
+
+struct recode_request
+  {
+    /* A request is always associated with a recoding system.  */
+    RECODE_OUTER outer;
+
+    /* By setting the following flag, the program will echo to stderr the
+       sequence of elementary recoding steps needed to achieve the requested
+       recoding.  */
+    bool verbose_flag : 1;
+
+    /* In `texte' charset, some countries use double quotes to mark diaeresis,
+       while some other prefer colons.  This field contains the diaeresis
+       character for `texte' charset.  Nominally set to a double quote, it can
+       be forced to a colon.  Those are the only two acceptable values.  */
+    char diaeresis_char;
+
+    /* If producing a recoding table in source form, there will be no actual
+       recoding done, and consequently, the optimisation of step sequence can
+       be attempted more aggressively.  If the step sequence cannot be reduced
+       to a single step, table production will fail.  */
+    bool make_header_flag : 1;
+
+    /* For `latex' charset, it is often convenient to recode the diacritics
+       only, while letting other LaTeX code using backslashes unrecoded.  In
+       the other charset, one can edit text as well as LaTeX directives.  */
+    bool diacritics_only : 1;
+
+    /* For `ibmpc' charset, characters 176 to 223 are use to draw boxes.  If
+       this field is set, while getting out of `ibmpc', ASCII characters are
+       selected so to approximate these boxes.  */
+    bool ascii_graphics : 1;
+
+    /* Array stating the sequence of conversions.  */
+    RECODE_STEP sequence_array;
+    size_t sequence_allocated;
+    short sequence_length;
+
+    /* Internal variables used while scanning request text.  */
+    char *work_string;         /* buffer space for generated work strings */
+    size_t work_string_length; /* length of work_string */
+    size_t work_string_allocated; /* allocated length of work_string */
+    const char *scan_cursor;   /* next character to be seen */
+    char *scanned_string;      /* buffer space to scan strings */
+  };
+
+/*--------------------------------------------------------------------.
+| A recoding text is either an external file or an in memory buffer.  |
+`--------------------------------------------------------------------*/
+
+/* While the recoding is going on, FILE being non-NULL has precedence over
+   BUFFER.  Moreover, if NAME is not NULL at start of recoding, this is
+   interpreted as a request for the library to open the named file, either
+   in read or write mode, and also to close it afterwards.  Standard input
+   or output is denoted by NAME being non-NULL, but otherwise empty.
+
+   If FILE is NULL in input mode, the in-memory read-only text extends from
+   BUFFER to LIMIT.  There is no clue about if the buffer has been allocated
+   bigger.  When CURSOR reaches LIMIT, there is no more data to get.  If
+   FILE is NULL in output mode, the in-memory text extends from BUFFER to
+   CURSOR, but the buffer has been allocated until LIMIT.  When CURSOR
+   reaches LIMIT, the buffer should be reallocated bigger, as needed.  */
+
+struct recode_read_only_text
+  {
+    const char *name;
+    FILE *file;
+    const char *buffer;
+    const char *cursor;
+    const char *limit;
+  };
+
+struct recode_read_write_text
+  {
+    const char *name;
+    FILE *file;
+    char *buffer;
+    char *cursor;
+    char *limit;
+  };
+
+/* Tells how various passes are interconnected.  */
+
+enum recode_sequence_strategy
+  {
+    RECODE_STRATEGY_UNDECIDED, /* sequencing strategy is undecided yet */
+    RECODE_SEQUENCE_IN_MEMORY, /* keep intermediate recodings in memory */
+    RECODE_SEQUENCE_WITH_FILES,        /* do not fork, use intermediate files */
+    RECODE_SEQUENCE_WITH_PIPE  /* fork processes connected with `pipe(2)' */
+  };
+
+/* Tells how to swap the incoming pair of bytes, while reading UCS-2.  */
+
+enum recode_swap_input
+  {
+    RECODE_SWAP_UNDECIDED,     /* the text has not been read yet */
+    RECODE_SWAP_NO,            /* no need to swap pair of bytes */
+    RECODE_SWAP_YES            /* should swap incoming pair of bytes */
+  };
+
+/*--------------------------------------------------------------------------.
+| A recoding subtask associates a particular recoding step to a given input |
+| text, for producing a corresponding output text.  It also holds error     |
+| related statistics for the execution of that step.                        |
+`--------------------------------------------------------------------------*/
+
+struct recode_subtask
+  {
+    /* Task for which this subtask is an element.  */
+    RECODE_TASK task;
+
+    /* Step being executed by this subtask.  */
+    RECODE_CONST_STEP step;
+
+    /* Current input and output.  */
+    struct recode_read_only_text input;
+    struct recode_read_write_text output;
+
+    /* Line count and character count in last line, both zero-based.  */
+    unsigned newline_count;
+    unsigned character_count;
+  };
+
+#define GOT_CHARACTER(Subtask) \
+  ((Subtask)->character_count++)
+
+#define GOT_NEWLINE(Subtask) \
+  ((Subtask)->newline_count++, (Subtask)->character_count = 0)
+
+/*--------------------------------------------------------------------------.
+| A recoding task associates a sequence of steps to a given input text, for |
+| producing a corresponding output text.  It holds an array of subtasks.    |
+`--------------------------------------------------------------------------*/
+
+struct recode_task
+  {
+    /* Associated request.  */
+    RECODE_CONST_REQUEST request;
+
+    /* Initial input and final output.  */
+    struct recode_read_only_text input;
+    struct recode_read_write_text output;
+
+    /* Tells how various recoding steps (passes) will be interconnected.  */
+    enum recode_sequence_strategy strategy : 3;
+
+    /* Produce a byte order mark on UCS-2 output, insist for it on input.  */
+    bool byte_order_mark : 1;
+
+    /* The input UCS-2 stream might have bytes swapped (status variable).  */
+    enum recode_swap_input swap_input : 3;
+
+    /* Error processing.  */
+    /* -----------------  */
+
+    /* At this level, there will be failure.  */
+    enum recode_error fail_level : 5;
+
+    /* At this level, task should be interrupted.  */
+    enum recode_error abort_level : 5;
+
+    /* Maximum error level met so far (status variable).  */
+    enum recode_error error_so_far : 5;
+
+    /* Step being executed when error_so_far was last set.  */
+    RECODE_CONST_STEP error_at_step;
+  };
+\f
+/* Specialities for some function arguments.  */
+
+/* For restricting charset lists.  */
+
+struct recode_known_pair
+  {
+    unsigned char left;                /* first character in pair */
+    unsigned char right;       /* second character in pair */
+  };
+
+/*----------------------.
+| Various definitions.  |
+`----------------------*/
+
+typedef unsigned short recode_ucs2;
+
+/* Double tables are generated as arrays of indices into a pool of strips,
+   each strip holds STRIP_SIZE UCS-2 characters.  Some memory is saved by
+   not allowing duplicate strips in the pool.  A smaller strip size yields
+   more duplicates and so, a smaller pool, but then, tables get longer
+   because more strip indices are needed for each table.  It is difficult to
+   predict the optimal strip size.  Tests made on 1997-09-22 showed that a
+   strip size of 4 needs 27808 bytes total, 8 needs 22656, 16 needs 23584
+   and 32 needs 25568, so we decided to stick to a strip size of 8.  Change
+   $STRIP_SIZE in `doc/tables.pl' if you change the value here.  */
+
+/* "Are we speaking slips, strips or bars?" (of gold press'latinum :-) */
+#define STRIP_SIZE 8
+
+/* An struct strip_data is a pointer to a pool of strips, and an array
+   of 256/STRIP_SIZE offsets for the start of strips into the pool, each strip
+   describes STRIP_SIZE UCS-2 characters.  A missing character in a strip is
+   indicated by all 16 bits set.  */
+struct strip_data
+  {
+    const recode_ucs2 *pool;
+    const short offset[256 / STRIP_SIZE];
+  };
+
+struct ucs2_to_byte
+  {
+    recode_ucs2 code;          /* UCS-2 value */
+    unsigned char byte;                /* corresponding byte */
+  };
+
+struct ucs2_to_string
+  {
+    recode_ucs2 code;          /* UCS-2 value */
+    unsigned short flags;      /* various flags */
+    const char *string;                /* corresponding string */
+  };
+\f
+/* Per module declarations.  */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* recode.c.  */
+
+#define ALLOC_SIZE(Variable, Size, Type) \
+  (Variable = (Type *) recode_malloc (outer, (Size)), Variable)
+
+#define ALLOC(Variable, Count, Type) \
+  ALLOC_SIZE (Variable, (Count) * sizeof (Type), Type)
+
+#define REALLOC(Variable, Count, Type) \
+  (Variable = (Type *) recode_realloc (outer, Variable,                \
+                                      (Count) * sizeof(Type)), \
+   Variable)
+
+void recode_error PARAMS ((RECODE_OUTER, const char *, ...));
+void recode_perror PARAMS ((RECODE_OUTER, const char *, ...));
+void *recode_malloc PARAMS ((RECODE_OUTER, size_t));
+void *recode_realloc PARAMS ((RECODE_OUTER, void *, size_t));
+
+unsigned char *invert_table PARAMS ((RECODE_OUTER, const unsigned char *));
+bool complete_pairs PARAMS ((RECODE_OUTER, RECODE_STEP,
+                            const struct recode_known_pair *, unsigned,
+                            bool, bool));
+bool transform_byte_to_ucs2 PARAMS ((RECODE_SUBTASK));
+bool init_ucs2_to_byte PARAMS ((RECODE_STEP, RECODE_CONST_REQUEST,
+                               RECODE_CONST_OPTION_LIST,
+                               RECODE_CONST_OPTION_LIST));
+bool transform_ucs2_to_byte PARAMS ((RECODE_SUBTASK));
+
+/* charname.c and fr-charname.c.  */
+
+const char *ucs2_to_charname PARAMS ((int));
+const char *ucs2_to_french_charname PARAMS ((int));
+
+/* charset.c.  */
+
+enum alias_find_type
+{
+  SYMBOL_CREATE_CHARSET,       /* charset as given, create as needed */
+  SYMBOL_CREATE_DATA_SURFACE,  /* data surface as given, create as needed */
+  SYMBOL_CREATE_TREE_SURFACE,  /* tree surface as given, create as needed */
+  ALIAS_FIND_AS_CHARSET,       /* disambiguate only as a charset */
+  ALIAS_FIND_AS_SURFACE,       /* disambiguate only as a surface */
+  ALIAS_FIND_AS_EITHER         /* disambiguate as a charset or a surface */
+};
+
+int code_to_ucs2 (RECODE_CONST_SYMBOL, unsigned);
+bool prepare_for_aliases PARAMS ((RECODE_OUTER));
+RECODE_ALIAS declare_alias PARAMS ((RECODE_OUTER,
+                                    const char *, const char *));
+bool declare_implied_surface PARAMS ((RECODE_OUTER, RECODE_ALIAS,
+                                   RECODE_CONST_SYMBOL));
+bool make_argmatch_arrays PARAMS ((RECODE_OUTER));
+RECODE_ALIAS find_alias PARAMS ((RECODE_OUTER, const char *,
+                                  enum alias_find_type));
+bool find_and_report_subsets PARAMS ((RECODE_OUTER));
+bool decode_known_pairs PARAMS ((RECODE_OUTER, const char *));
+
+/* combine.c.  */
+
+#define DONE NOT_A_CHARACTER
+#define ELSE BYTE_ORDER_MARK_SWAPPED
+
+bool init_explode PARAMS ((RECODE_STEP, RECODE_CONST_REQUEST,
+                          RECODE_CONST_OPTION_LIST,
+                          RECODE_CONST_OPTION_LIST));
+bool explode_byte_byte PARAMS ((RECODE_SUBTASK));
+bool explode_ucs2_byte PARAMS ((RECODE_SUBTASK));
+bool explode_byte_ucs2 PARAMS ((RECODE_SUBTASK));
+bool explode_ucs2_ucs2 PARAMS ((RECODE_SUBTASK));
+
+bool init_combine PARAMS ((RECODE_STEP, RECODE_CONST_REQUEST,
+                          RECODE_CONST_OPTION_LIST,
+                          RECODE_CONST_OPTION_LIST));
+bool combine_byte_byte PARAMS ((RECODE_SUBTASK));
+bool combine_ucs2_byte PARAMS ((RECODE_SUBTASK));
+bool combine_byte_ucs2 PARAMS ((RECODE_SUBTASK));
+bool combine_ucs2_ucs2 PARAMS ((RECODE_SUBTASK));
+
+/* freeze.c.  */
+
+void recode_freeze_tables PARAMS ((RECODE_OUTER));
+
+/* iconv.c.  */
+
+bool transform_with_iconv PARAMS ((RECODE_SUBTASK));
+
+/* localcharset.c.  */
+
+const char *locale_charset PARAMS ((void));
+
+/* names.c.  */
+
+bool should_prefer_french PARAMS ((void));
+
+/* mixed.c.  */
+
+bool transform_c_source PARAMS ((RECODE_TASK));
+bool transform_po_source PARAMS ((RECODE_TASK));
+
+/* outer.c.  */
+
+bool reversibility PARAMS ((RECODE_SUBTASK, unsigned));
+RECODE_SINGLE declare_single
+  PARAMS ((RECODE_OUTER, const char *, const char *,
+          struct recode_quality,
+          bool (*) (RECODE_STEP, RECODE_CONST_REQUEST,
+                    RECODE_CONST_OPTION_LIST, RECODE_CONST_OPTION_LIST),
+          bool (*) (RECODE_SUBTASK)));
+bool declare_iconv PARAMS ((RECODE_OUTER, const char *, const char *));
+bool declare_explode_data PARAMS ((RECODE_OUTER, const unsigned short *,
+                                  const char *, const char *));
+bool declare_strip_data PARAMS ((RECODE_OUTER, struct strip_data *,
+                                const char *));
+
+/* pool.c.  */
+
+extern const recode_ucs2 ucs2_data_pool[];
+
+/* request.c.  */
+
+char *edit_sequence PARAMS ((RECODE_REQUEST, bool));
+
+/* rfc1345.c.  */
+
+const char *ucs2_to_rfc1345 PARAMS ((recode_ucs2));
+
+/* task.c.  */
+
+#if USE_HELPERS || !INLINE_HARDER
+int get_byte_helper PARAMS ((RECODE_SUBTASK));
+#endif
+void put_byte_helper PARAMS ((int, RECODE_SUBTASK));
+bool recode_if_nogo PARAMS ((enum recode_error, RECODE_SUBTASK));
+bool transform_byte_to_byte PARAMS ((RECODE_SUBTASK));
+bool transform_byte_to_variable PARAMS ((RECODE_SUBTASK));
+
+/* ucs.c.  */
+
+/* Replacement character for when correctly formed character has no
+   equivalent.  It is not used for ill-formed characters, however.  */
+#define REPLACEMENT_CHARACTER 0xFFFD
+
+/* Device for detecting if bytes are swapped.  This value should appear first
+   in UCS-2 files.  */
+#define BYTE_ORDER_MARK 0xFEFF
+#define BYTE_ORDER_MARK_SWAPPED 0xFFFE
+
+/* Never an UCS-2 character.  */
+#define NOT_A_CHARACTER 0xFFFF
+
+bool get_ucs2 PARAMS ((unsigned *, RECODE_SUBTASK));
+bool get_ucs4 PARAMS ((unsigned *, RECODE_SUBTASK));
+bool put_ucs2 PARAMS ((unsigned, RECODE_SUBTASK));
+bool put_ucs4 PARAMS ((unsigned, RECODE_SUBTASK));
+
+#ifdef __cplusplus
+}
+#endif
+\f
+/* Global macros specifically for Recode.  */
+
+/* Giving a name to the ASCII character assigned to position 0.  */
+#define NUL '\0'
+
+#ifdef FLEX_SCANNER
+# if !INLINE_HARDER
+#  undef USE_HELPERS
+#  define USE_HELPERS 1
+# endif
+#endif
+
+#if USE_HELPERS
+
+# define get_byte(Subtask) \
+    get_byte_helper ((Subtask))
+
+# define put_byte(Byte, Subtask) \
+    put_byte_helper ((Byte), (Subtask))
+
+#else /* not USE_HELPERS */
+
+# define get_byte(Subtask) \
+    ((Subtask)->input.file                                     \
+     ? getc ((Subtask)->input.file)                            \
+     : (Subtask)->input.cursor == (Subtask)->input.limit       \
+     ? EOF                                                     \
+     : (unsigned char) *(Subtask)->input.cursor++)
+
+# define put_byte(Byte, Subtask) \
+    ((Subtask)->output.file                                    \
+     ? (putc ((char) (Byte), (Subtask)->output.file), 0)       \
+     : (Subtask)->output.cursor == (Subtask)->output.limit     \
+     ? (put_byte_helper ((int) (Byte), (Subtask)), 0)          \
+     : (*(Subtask)->output.cursor++ = (Byte), 0))
+
+#endif /* not USE_HELPERS */
+
+#ifdef FLEX_SCANNER
+
+# define PUT_NON_DIACRITIC_BYTE(Byte, Subtask) \
+    if (request->diacritics_only)                              \
+      ECHO;                                                    \
+    else                                                       \
+      put_byte ((Byte), (Subtask))
+
+/* ECHO may not have a (Subtask) argument, because some ECHO without argument
+   is generated by Flex -- yet Vern tells me it won't happen if I inhibit
+   the rule about default copying.  Happily enough, within Flex, Subtask is
+   `subtask' quite systematically, so it may be used as a constant, here.  */
+# define ECHO \
+    do {                                                       \
+      const char *cursor = librecode_yytext;                   \
+      int counter = librecode_yyleng;                          \
+      for (; counter > 0; cursor++, counter--)                 \
+       put_byte (*cursor, subtask);                            \
+    } while (false)
+
+#endif /* FLEX_SCANNER */
index 71bfdc6b14548ca11d88fbebad526bd1ea6bac1f..c22d1148799d5fed86f0facc07eacaffafaf8d75 100644 (file)
@@ -1,3 +1,7 @@
+2008-03-16  François Pinard  <pinard@iro.umontreal.ca>
+
+       * Recode.pyx: Simplify, now that cleaner.h gets included.
+
 2008-03-13  François Pinard  <pinard@iro.umontreal.ca>
 
        * t40_java.py: New.
index 70a77370ccd6651d6b24fc79c30adbc591b99f48..a3ecd339cc84688377ba5d2eb9370c4b4c9993ad 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Pyrex 0.9.6.4 on Fri Mar 14 20:07:34 2008 */
+/* Generated by Pyrex 0.9.6.4 on Sun Mar 16 22:09:18 2008 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
@@ -167,19 +167,19 @@ static int __pyx_f_6Recode_5Outer___init__(PyObject *__pyx_v_self, PyObject *__p
   Py_INCREF(__pyx_v_iconv);
   Py_INCREF(__pyx_v_strict);
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":581 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":539 */
   __pyx_v_flags = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":582 */
-  __pyx_1 = PyObject_IsTrue(__pyx_v_auto_abort); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":540 */
+  __pyx_1 = PyObject_IsTrue(__pyx_v_auto_abort); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; goto __pyx_L1;}
   if (__pyx_1) {
     __pyx_v_flags = (__pyx_v_flags | RECODE_AUTO_ABORT_FLAG);
     goto __pyx_L2;
   }
   __pyx_L2:;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":584 */
-  __pyx_1 = PyObject_IsTrue(__pyx_v_iconv); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 584; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":542 */
+  __pyx_1 = PyObject_IsTrue(__pyx_v_iconv); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; goto __pyx_L1;}
   __pyx_2 = (!__pyx_1);
   if (__pyx_2) {
     __pyx_v_flags = (__pyx_v_flags | RECODE_NO_ICONV_FLAG);
@@ -187,25 +187,25 @@ static int __pyx_f_6Recode_5Outer___init__(PyObject *__pyx_v_self, PyObject *__p
   }
   __pyx_L3:;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":586 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":544 */
   ((struct __pyx_obj_6Recode_Outer *)__pyx_v_self)->outer = recode_new_outer(__pyx_v_flags);
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":587 */
-  __pyx_1 = PyObject_IsTrue(__pyx_v_strict); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":545 */
+  __pyx_1 = PyObject_IsTrue(__pyx_v_strict); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; goto __pyx_L1;}
   if (__pyx_1) {
 
-    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":588 */
+    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":546 */
     __pyx_v_single = ((struct __pyx_obj_6Recode_Outer *)__pyx_v_self)->outer->single_list;
 
-    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":589 */
+    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":547 */
     while (1) {
       __pyx_2 = (__pyx_v_single != NULL);
       if (!__pyx_2) break;
 
-      /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":590 */
+      /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":548 */
       __pyx_v_single->fallback_routine = NULL;
 
-      /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":591 */
+      /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":549 */
       __pyx_v_single = __pyx_v_single->next;
     }
     goto __pyx_L4;
@@ -240,7 +240,7 @@ static PyObject *__pyx_f_6Recode_5Outer_default_charset(PyObject *__pyx_v_self,
   static char *__pyx_argnames[] = {0};
   if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0;
   Py_INCREF(__pyx_v_self);
-  __pyx_1 = PyString_FromString(librecode_locale_charset()); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; goto __pyx_L1;}
+  __pyx_1 = PyString_FromString(locale_charset()); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; goto __pyx_L1;}
   __pyx_r = __pyx_1;
   __pyx_1 = 0;
   goto __pyx_L0;
@@ -272,21 +272,21 @@ static PyObject *__pyx_f_6Recode_5Outer_all_charsets(PyObject *__pyx_v_self, PyO
   Py_INCREF(__pyx_v_self);
   __pyx_v_list = Py_None; Py_INCREF(Py_None);
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":600 */
-  __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":558 */
+  __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; goto __pyx_L1;}
   Py_DECREF(__pyx_v_list);
   __pyx_v_list = __pyx_1;
   __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":602 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":560 */
   __pyx_v_symbol = ((struct __pyx_obj_6Recode_Outer *)__pyx_v_self)->outer->symbol_list;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":603 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":561 */
   while (1) {
     __pyx_2 = (__pyx_v_symbol != NULL);
     if (!__pyx_2) break;
 
-    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":604 */
+    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":562 */
     __pyx_2 = (__pyx_v_symbol->type == RECODE_CHARSET);
     if (__pyx_2) {
       __pyx_2 = (__pyx_v_symbol != ((struct __pyx_obj_6Recode_Outer *)__pyx_v_self)->outer->iconv_pivot);
@@ -298,12 +298,12 @@ static PyObject *__pyx_f_6Recode_5Outer_all_charsets(PyObject *__pyx_v_self, PyO
       }
     }
     if (__pyx_2) {
-      __pyx_1 = PyObject_GetAttr(__pyx_v_list, __pyx_n_append); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; goto __pyx_L1;}
-      __pyx_3 = PyString_FromString(__pyx_v_symbol->name); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; goto __pyx_L1;}
-      __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; goto __pyx_L1;}
+      __pyx_1 = PyObject_GetAttr(__pyx_v_list, __pyx_n_append); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; goto __pyx_L1;}
+      __pyx_3 = PyString_FromString(__pyx_v_symbol->name); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; goto __pyx_L1;}
+      __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; goto __pyx_L1;}
       PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3);
       __pyx_3 = 0;
-      __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; goto __pyx_L1;}
+      __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; goto __pyx_L1;}
       Py_DECREF(__pyx_1); __pyx_1 = 0;
       Py_DECREF(__pyx_4); __pyx_4 = 0;
       Py_DECREF(__pyx_3); __pyx_3 = 0;
@@ -311,11 +311,11 @@ static PyObject *__pyx_f_6Recode_5Outer_all_charsets(PyObject *__pyx_v_self, PyO
     }
     __pyx_L4:;
 
-    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":609 */
+    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":567 */
     __pyx_v_symbol = __pyx_v_symbol->next;
   }
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":610 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":568 */
   Py_INCREF(__pyx_v_list);
   __pyx_r = __pyx_v_list;
   goto __pyx_L0;
@@ -348,29 +348,29 @@ static PyObject *__pyx_f_6Recode_5Outer_all_surfaces(PyObject *__pyx_v_self, PyO
   Py_INCREF(__pyx_v_self);
   __pyx_v_list = Py_None; Py_INCREF(Py_None);
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":613 */
-  __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":571 */
+  __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; goto __pyx_L1;}
   Py_DECREF(__pyx_v_list);
   __pyx_v_list = __pyx_1;
   __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":615 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":573 */
   __pyx_v_symbol = ((struct __pyx_obj_6Recode_Outer *)__pyx_v_self)->outer->symbol_list;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":616 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":574 */
   while (1) {
     __pyx_2 = (__pyx_v_symbol != NULL);
     if (!__pyx_2) break;
 
-    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":617 */
+    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":575 */
     __pyx_2 = (__pyx_v_symbol->type != RECODE_CHARSET);
     if (__pyx_2) {
-      __pyx_1 = PyObject_GetAttr(__pyx_v_list, __pyx_n_append); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; goto __pyx_L1;}
-      __pyx_3 = PyString_FromString(__pyx_v_symbol->name); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; goto __pyx_L1;}
-      __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; goto __pyx_L1;}
+      __pyx_1 = PyObject_GetAttr(__pyx_v_list, __pyx_n_append); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; goto __pyx_L1;}
+      __pyx_3 = PyString_FromString(__pyx_v_symbol->name); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; goto __pyx_L1;}
+      __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; goto __pyx_L1;}
       PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3);
       __pyx_3 = 0;
-      __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; goto __pyx_L1;}
+      __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; goto __pyx_L1;}
       Py_DECREF(__pyx_1); __pyx_1 = 0;
       Py_DECREF(__pyx_4); __pyx_4 = 0;
       Py_DECREF(__pyx_3); __pyx_3 = 0;
@@ -378,11 +378,11 @@ static PyObject *__pyx_f_6Recode_5Outer_all_surfaces(PyObject *__pyx_v_self, PyO
     }
     __pyx_L4:;
 
-    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":619 */
+    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":577 */
     __pyx_v_symbol = __pyx_v_symbol->next;
   }
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":620 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":578 */
   Py_INCREF(__pyx_v_list);
   __pyx_r = __pyx_v_list;
   goto __pyx_L0;
@@ -417,21 +417,21 @@ static PyObject *__pyx_f_6Recode_5Outer_concise_charset(PyObject *__pyx_v_self,
   Py_INCREF(__pyx_v_format);
   __pyx_v_ok = Py_None; Py_INCREF(Py_None);
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":623 */
-  __pyx_1 = ((enum recode_list_format)PyInt_AsLong(__pyx_v_format)); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; goto __pyx_L1;}
-  __pyx_2 = PyInt_FromLong(librecode_list_concise_charset(((struct __pyx_obj_6Recode_Outer *)__pyx_v_self)->outer,NULL,__pyx_1)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":581 */
+  __pyx_1 = ((enum recode_list_format)PyInt_AsLong(__pyx_v_format)); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; goto __pyx_L1;}
+  __pyx_2 = PyInt_FromLong(list_concise_charset(((struct __pyx_obj_6Recode_Outer *)__pyx_v_self)->outer,NULL,__pyx_1)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; goto __pyx_L1;}
   Py_DECREF(__pyx_v_ok);
   __pyx_v_ok = __pyx_2;
   __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":624 */
-  __pyx_3 = PyObject_IsTrue(__pyx_v_ok); if (__pyx_3 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":582 */
+  __pyx_3 = PyObject_IsTrue(__pyx_v_ok); if (__pyx_3 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; goto __pyx_L1;}
   __pyx_4 = (!__pyx_3);
   if (__pyx_4) {
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_error); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; goto __pyx_L1;}
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_error); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; goto __pyx_L1;}
     __Pyx_Raise(__pyx_2, 0, 0);
     Py_DECREF(__pyx_2); __pyx_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; goto __pyx_L1;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; goto __pyx_L1;}
     goto __pyx_L2;
   }
   __pyx_L2:;
@@ -461,20 +461,20 @@ static PyObject *__pyx_f_6Recode_5Outer_full_charset(PyObject *__pyx_v_self, PyO
   Py_INCREF(__pyx_v_self);
   __pyx_v_ok = Py_None; Py_INCREF(Py_None);
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":628 */
-  __pyx_1 = PyInt_FromLong(librecode_list_full_charset(((struct __pyx_obj_6Recode_Outer *)__pyx_v_self)->outer,NULL)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":586 */
+  __pyx_1 = PyInt_FromLong(list_full_charset(((struct __pyx_obj_6Recode_Outer *)__pyx_v_self)->outer,NULL)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; goto __pyx_L1;}
   Py_DECREF(__pyx_v_ok);
   __pyx_v_ok = __pyx_1;
   __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":629 */
-  __pyx_2 = PyObject_IsTrue(__pyx_v_ok); if (__pyx_2 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":587 */
+  __pyx_2 = PyObject_IsTrue(__pyx_v_ok); if (__pyx_2 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; goto __pyx_L1;}
   __pyx_3 = (!__pyx_2);
   if (__pyx_3) {
-    __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_error); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; goto __pyx_L1;}
+    __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_error); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; goto __pyx_L1;}
     __Pyx_Raise(__pyx_1, 0, 0);
     Py_DECREF(__pyx_1); __pyx_1 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; goto __pyx_L1;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; goto __pyx_L1;}
     goto __pyx_L2;
   }
   __pyx_L2:;
@@ -508,34 +508,34 @@ static PyObject *__pyx_f_6Recode_5Outer_recode(PyObject *__pyx_v_self, PyObject
   Py_INCREF(__pyx_v_self);
   __pyx_v_request = Py_None; Py_INCREF(Py_None);
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":634 */
-  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":592 */
+  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; goto __pyx_L1;}
   Py_INCREF(__pyx_v_self);
   PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_self);
-  __pyx_2 = PyObject_CallObject(((PyObject*)__pyx_ptype_6Recode_Request), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; goto __pyx_L1;}
+  __pyx_2 = PyObject_CallObject(((PyObject*)__pyx_ptype_6Recode_Request), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
   Py_DECREF(__pyx_v_request);
   __pyx_v_request = __pyx_2;
   __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":635 */
-  __pyx_1 = PyObject_GetAttr(__pyx_v_request, __pyx_n_scan); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; goto __pyx_L1;}
-  __pyx_2 = PyString_FromString(__pyx_v_command); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; goto __pyx_L1;}
-  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":593 */
+  __pyx_1 = PyObject_GetAttr(__pyx_v_request, __pyx_n_scan); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; goto __pyx_L1;}
+  __pyx_2 = PyString_FromString(__pyx_v_command); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; goto __pyx_L1;}
+  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; goto __pyx_L1;}
   PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
   __pyx_2 = 0;
-  __pyx_2 = PyObject_CallObject(__pyx_1, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; goto __pyx_L1;}
+  __pyx_2 = PyObject_CallObject(__pyx_1, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
   Py_DECREF(__pyx_3); __pyx_3 = 0;
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":636 */
-  __pyx_1 = PyObject_GetAttr(__pyx_v_request, __pyx_n_string); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; goto __pyx_L1;}
-  __pyx_3 = PyString_FromString(__pyx_v_input); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; goto __pyx_L1;}
-  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":594 */
+  __pyx_1 = PyObject_GetAttr(__pyx_v_request, __pyx_n_string); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; goto __pyx_L1;}
+  __pyx_3 = PyString_FromString(__pyx_v_input); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; goto __pyx_L1;}
+  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; goto __pyx_L1;}
   PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3);
   __pyx_3 = 0;
-  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; goto __pyx_L1;}
+  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   __pyx_r = __pyx_3;
@@ -564,7 +564,7 @@ static int __pyx_f_6Recode_7Request___init__(PyObject *__pyx_v_self, PyObject *_
   if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_outer)) return -1;
   Py_INCREF(__pyx_v_self);
   Py_INCREF(__pyx_v_outer);
-  if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_outer), __pyx_ptype_6Recode_Outer, 1, "outer")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; goto __pyx_L1;}
+  if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_outer), __pyx_ptype_6Recode_Outer, 1, "outer")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; goto __pyx_L1;}
   ((struct __pyx_obj_6Recode_Request *)__pyx_v_self)->request = recode_new_request(__pyx_v_outer->outer);
 
   __pyx_r = 0;
@@ -603,25 +603,25 @@ static PyObject *__pyx_f_6Recode_7Request_set_verbose(PyObject *__pyx_v_self, Py
   Py_INCREF(__pyx_v_flag);
   __pyx_v_previous = Py_None; Py_INCREF(Py_None);
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":650 */
-  __pyx_1 = PyInt_FromLong((((struct __pyx_obj_6Recode_Request *)__pyx_v_self)->request->verbose_flag != 0)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":608 */
+  __pyx_1 = PyInt_FromLong((((struct __pyx_obj_6Recode_Request *)__pyx_v_self)->request->verbose_flag != 0)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; goto __pyx_L1;}
   Py_DECREF(__pyx_v_previous);
   __pyx_v_previous = __pyx_1;
   __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":651 */
-  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; goto __pyx_L1;}
-  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":609 */
+  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; goto __pyx_L1;}
+  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; goto __pyx_L1;}
   Py_INCREF(__pyx_v_flag);
   PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_flag);
-  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; goto __pyx_L1;}
+  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
   Py_DECREF(__pyx_2); __pyx_2 = 0;
-  __pyx_4 = ((enum __pyx_t_6Recode_bool)PyInt_AsLong(__pyx_3)); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; goto __pyx_L1;}
+  __pyx_4 = ((enum __pyx_t_6Recode_bool)PyInt_AsLong(__pyx_3)); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
   ((struct __pyx_obj_6Recode_Request *)__pyx_v_self)->request->verbose_flag = __pyx_4;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":652 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":610 */
   Py_INCREF(__pyx_v_previous);
   __pyx_r = __pyx_v_previous;
   goto __pyx_L0;
@@ -654,20 +654,20 @@ static PyObject *__pyx_f_6Recode_7Request_scan(PyObject *__pyx_v_self, PyObject
   Py_INCREF(__pyx_v_self);
   __pyx_v_ok = Py_None; Py_INCREF(Py_None);
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":655 */
-  __pyx_1 = PyInt_FromLong(recode_scan_request(((struct __pyx_obj_6Recode_Request *)__pyx_v_self)->request,__pyx_v_text)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":613 */
+  __pyx_1 = PyInt_FromLong(recode_scan_request(((struct __pyx_obj_6Recode_Request *)__pyx_v_self)->request,__pyx_v_text)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; goto __pyx_L1;}
   Py_DECREF(__pyx_v_ok);
   __pyx_v_ok = __pyx_1;
   __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":656 */
-  __pyx_2 = PyObject_IsTrue(__pyx_v_ok); if (__pyx_2 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":614 */
+  __pyx_2 = PyObject_IsTrue(__pyx_v_ok); if (__pyx_2 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; goto __pyx_L1;}
   __pyx_3 = (!__pyx_2);
   if (__pyx_3) {
-    __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_error); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; goto __pyx_L1;}
+    __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_error); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; goto __pyx_L1;}
     __Pyx_Raise(__pyx_1, 0, 0);
     Py_DECREF(__pyx_1); __pyx_1 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; goto __pyx_L1;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; goto __pyx_L1;}
     goto __pyx_L2;
   }
   __pyx_L2:;
@@ -700,38 +700,38 @@ static PyObject *__pyx_f_6Recode_7Request_pair_sequence(PyObject *__pyx_v_self,
   Py_INCREF(__pyx_v_self);
   __pyx_v_list = Py_None; Py_INCREF(Py_None);
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":660 */
-  __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":618 */
+  __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; goto __pyx_L1;}
   Py_DECREF(__pyx_v_list);
   __pyx_v_list = __pyx_1;
   __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":663 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":621 */
   __pyx_2 = ((struct __pyx_obj_6Recode_Request *)__pyx_v_self)->request->sequence_length;
   for (__pyx_v_counter = 0; __pyx_v_counter < __pyx_2; ++__pyx_v_counter) {
 
-    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":664 */
+    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":622 */
     __pyx_v_step = (((struct __pyx_obj_6Recode_Request *)__pyx_v_self)->request->sequence_array[__pyx_v_counter]);
 
-    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":665 */
-    __pyx_1 = PyObject_GetAttr(__pyx_v_list, __pyx_n_append); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; goto __pyx_L1;}
-    __pyx_3 = PyString_FromString(__pyx_v_step.before->name); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; goto __pyx_L1;}
-    __pyx_4 = PyString_FromString(__pyx_v_step.after->name); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; goto __pyx_L1;}
-    __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; goto __pyx_L1;}
+    /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":623 */
+    __pyx_1 = PyObject_GetAttr(__pyx_v_list, __pyx_n_append); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; goto __pyx_L1;}
+    __pyx_3 = PyString_FromString(__pyx_v_step.before->name); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; goto __pyx_L1;}
+    __pyx_4 = PyString_FromString(__pyx_v_step.after->name); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; goto __pyx_L1;}
+    __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; goto __pyx_L1;}
     PyTuple_SET_ITEM(__pyx_5, 0, __pyx_3);
     PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4);
     __pyx_3 = 0;
     __pyx_4 = 0;
-    __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; goto __pyx_L1;}
+    __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; goto __pyx_L1;}
     PyTuple_SET_ITEM(__pyx_3, 0, __pyx_5);
     __pyx_5 = 0;
-    __pyx_4 = PyObject_CallObject(__pyx_1, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; goto __pyx_L1;}
+    __pyx_4 = PyObject_CallObject(__pyx_1, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; goto __pyx_L1;}
     Py_DECREF(__pyx_1); __pyx_1 = 0;
     Py_DECREF(__pyx_3); __pyx_3 = 0;
     Py_DECREF(__pyx_4); __pyx_4 = 0;
   }
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":666 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":624 */
   Py_INCREF(__pyx_v_list);
   __pyx_r = __pyx_v_list;
   goto __pyx_L0;
@@ -767,32 +767,32 @@ static PyObject *__pyx_f_6Recode_7Request_format_table(PyObject *__pyx_v_self, P
   Py_INCREF(__pyx_v_self);
   __pyx_v_ok = Py_None; Py_INCREF(Py_None);
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":671 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":629 */
   __pyx_v_outer = ((struct __pyx_obj_6Recode_Request *)__pyx_v_self)->request->outer;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":672 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":630 */
   __pyx_v_saved = __pyx_v_outer->iconv_pivot->ignore;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":673 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":631 */
   __pyx_v_outer->iconv_pivot->ignore = __pyx_e_6Recode_true;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":674 */
-  __pyx_1 = PyInt_FromLong(recode_format_table(((struct __pyx_obj_6Recode_Request *)__pyx_v_self)->request,((enum recode_programming_language)__pyx_v_language),__pyx_v_charset)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":632 */
+  __pyx_1 = PyInt_FromLong(recode_format_table(((struct __pyx_obj_6Recode_Request *)__pyx_v_self)->request,((enum recode_programming_language)__pyx_v_language),__pyx_v_charset)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; goto __pyx_L1;}
   Py_DECREF(__pyx_v_ok);
   __pyx_v_ok = __pyx_1;
   __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":676 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":634 */
   __pyx_v_outer->iconv_pivot->ignore = __pyx_v_saved;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":677 */
-  __pyx_2 = PyObject_IsTrue(__pyx_v_ok); if (__pyx_2 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 677; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":635 */
+  __pyx_2 = PyObject_IsTrue(__pyx_v_ok); if (__pyx_2 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; goto __pyx_L1;}
   __pyx_3 = (!__pyx_2);
   if (__pyx_3) {
-    __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_error); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; goto __pyx_L1;}
+    __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_error); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; goto __pyx_L1;}
     __Pyx_Raise(__pyx_1, 0, 0);
     Py_DECREF(__pyx_1); __pyx_1 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; goto __pyx_L1;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; goto __pyx_L1;}
     goto __pyx_L2;
   }
   __pyx_L2:;
@@ -820,22 +820,22 @@ static PyObject *__pyx_f_6Recode_7Request_string(PyObject *__pyx_v_self, PyObjec
   if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "s", __pyx_argnames, &__pyx_v_text)) return 0;
   Py_INCREF(__pyx_v_self);
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":682 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":640 */
   __pyx_v_result = recode_string(((struct __pyx_obj_6Recode_Request *)__pyx_v_self)->request,__pyx_v_text);
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":683 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":641 */
   __pyx_1 = (__pyx_v_result == NULL);
   if (__pyx_1) {
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_error); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 684; goto __pyx_L1;}
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_error); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 642; goto __pyx_L1;}
     __Pyx_Raise(__pyx_2, 0, 0);
     Py_DECREF(__pyx_2); __pyx_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 684; goto __pyx_L1;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 642; goto __pyx_L1;}
     goto __pyx_L2;
   }
   __pyx_L2:;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":685 */
-  __pyx_2 = PyString_FromString(__pyx_v_result); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 685; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":643 */
+  __pyx_2 = PyString_FromString(__pyx_v_result); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; goto __pyx_L1;}
   __pyx_r = __pyx_2;
   __pyx_2 = 0;
   goto __pyx_L0;
@@ -1253,342 +1253,342 @@ PyMODINIT_FUNC initRecode(void) {
   if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
   if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
   if (__Pyx_InternStrings(__pyx_intern_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
-  if (PyType_Ready(&__pyx_type_6Recode_Outer) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; goto __pyx_L1;}
-  if (PyObject_SetAttrString(__pyx_m, "Outer", (PyObject *)&__pyx_type_6Recode_Outer) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; goto __pyx_L1;}
+  if (PyType_Ready(&__pyx_type_6Recode_Outer) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; goto __pyx_L1;}
+  if (PyObject_SetAttrString(__pyx_m, "Outer", (PyObject *)&__pyx_type_6Recode_Outer) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; goto __pyx_L1;}
   __pyx_ptype_6Recode_Outer = &__pyx_type_6Recode_Outer;
-  if (PyType_Ready(&__pyx_type_6Recode_Request) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; goto __pyx_L1;}
-  if (PyObject_SetAttrString(__pyx_m, "Request", (PyObject *)&__pyx_type_6Recode_Request) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; goto __pyx_L1;}
+  if (PyType_Ready(&__pyx_type_6Recode_Request) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; goto __pyx_L1;}
+  if (PyObject_SetAttrString(__pyx_m, "Request", (PyObject *)&__pyx_type_6Recode_Request) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; goto __pyx_L1;}
   __pyx_ptype_6Recode_Request = &__pyx_type_6Recode_Request;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":494 */
-  __pyx_1 = PyDict_New(); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; goto __pyx_L1;}
-  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_Exception); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; goto __pyx_L1;}
-  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":452 */
+  __pyx_1 = PyDict_New(); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; goto __pyx_L1;}
+  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_Exception); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; goto __pyx_L1;}
+  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; goto __pyx_L1;}
   PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
   __pyx_2 = 0;
-  __pyx_2 = __Pyx_CreateClass(__pyx_3, __pyx_1, __pyx_n_error, "Recode"); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; goto __pyx_L1;}
+  __pyx_2 = __Pyx_CreateClass(__pyx_3, __pyx_1, __pyx_n_error, "Recode"); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_error, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_error, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":499 */
-  __pyx_3 = PyInt_FromLong(RECODE_NO_SYMBOL_TYPE); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_NO_SYMBOL_TYPE, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":457 */
+  __pyx_3 = PyInt_FromLong(RECODE_NO_SYMBOL_TYPE); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_NO_SYMBOL_TYPE, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":500 */
-  __pyx_2 = PyInt_FromLong(RECODE_CHARSET); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_CHARSET, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":458 */
+  __pyx_2 = PyInt_FromLong(RECODE_CHARSET); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_CHARSET, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":501 */
-  __pyx_1 = PyInt_FromLong(RECODE_DATA_SURFACE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_DATA_SURFACE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":459 */
+  __pyx_1 = PyInt_FromLong(RECODE_DATA_SURFACE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_DATA_SURFACE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":502 */
-  __pyx_3 = PyInt_FromLong(RECODE_TREE_SURFACE); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_TREE_SURFACE, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":460 */
+  __pyx_3 = PyInt_FromLong(RECODE_TREE_SURFACE); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_TREE_SURFACE, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":504 */
-  __pyx_2 = PyInt_FromLong(RECODE_NO_CHARSET_DATA); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_NO_CHARSET_DATA, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":462 */
+  __pyx_2 = PyInt_FromLong(RECODE_NO_CHARSET_DATA); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_NO_CHARSET_DATA, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":505 */
-  __pyx_1 = PyInt_FromLong(RECODE_STRIP_DATA); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_STRIP_DATA, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":463 */
+  __pyx_1 = PyInt_FromLong(RECODE_STRIP_DATA); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_STRIP_DATA, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":506 */
-  __pyx_3 = PyInt_FromLong(RECODE_EXPLODE_DATA); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_EXPLODE_DATA, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":464 */
+  __pyx_3 = PyInt_FromLong(RECODE_EXPLODE_DATA); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 464; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_EXPLODE_DATA, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 464; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":508 */
-  __pyx_2 = PyInt_FromLong(RECODE_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_SIZE_1, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":466 */
+  __pyx_2 = PyInt_FromLong(RECODE_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_SIZE_1, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":509 */
-  __pyx_1 = PyInt_FromLong(RECODE_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_SIZE_2, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":467 */
+  __pyx_1 = PyInt_FromLong(RECODE_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_SIZE_2, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":510 */
-  __pyx_3 = PyInt_FromLong(RECODE_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_SIZE_4, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":468 */
+  __pyx_3 = PyInt_FromLong(RECODE_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_SIZE_4, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":511 */
-  __pyx_2 = PyInt_FromLong(RECODE_N); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_SIZE_N, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":469 */
+  __pyx_2 = PyInt_FromLong(RECODE_N); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_SIZE_N, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":513 */
-  __pyx_1 = PyInt_FromLong(RECODE_NO_STEP_TABLE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_NO_STEP_TABLE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":471 */
+  __pyx_1 = PyInt_FromLong(RECODE_NO_STEP_TABLE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_NO_STEP_TABLE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":514 */
-  __pyx_3 = PyInt_FromLong(RECODE_BYTE_TO_BYTE); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_BYTE_TO_BYTE, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":472 */
+  __pyx_3 = PyInt_FromLong(RECODE_BYTE_TO_BYTE); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_BYTE_TO_BYTE, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":515 */
-  __pyx_2 = PyInt_FromLong(RECODE_BYTE_TO_STRING); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_BYTE_TO_STRING, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":473 */
+  __pyx_2 = PyInt_FromLong(RECODE_BYTE_TO_STRING); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_BYTE_TO_STRING, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":516 */
-  __pyx_1 = PyInt_FromLong(RECODE_UCS2_TO_BYTE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_UCS2_TO_BYTE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":474 */
+  __pyx_1 = PyInt_FromLong(RECODE_UCS2_TO_BYTE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_UCS2_TO_BYTE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":517 */
-  __pyx_3 = PyInt_FromLong(RECODE_UCS2_TO_STRING); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_UCS2_TO_STRING, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":475 */
+  __pyx_3 = PyInt_FromLong(RECODE_UCS2_TO_STRING); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_UCS2_TO_STRING, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":518 */
-  __pyx_2 = PyInt_FromLong(RECODE_STRING_TO_UCS2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_STRING_TO_UCS2, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":476 */
+  __pyx_2 = PyInt_FromLong(RECODE_STRING_TO_UCS2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_STRING_TO_UCS2, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":519 */
-  __pyx_1 = PyInt_FromLong(RECODE_COMBINE_EXPLODE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_COMBINE_EXPLODE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":477 */
+  __pyx_1 = PyInt_FromLong(RECODE_COMBINE_EXPLODE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_COMBINE_EXPLODE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":520 */
-  __pyx_3 = PyInt_FromLong(RECODE_COMBINE_STEP); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_COMBINE_STEP, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":478 */
+  __pyx_3 = PyInt_FromLong(RECODE_COMBINE_STEP); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_COMBINE_STEP, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":521 */
-  __pyx_2 = PyInt_FromLong(RECODE_EXPLODE_STEP); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_EXPLODE_STEP, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":479 */
+  __pyx_2 = PyInt_FromLong(RECODE_EXPLODE_STEP); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_EXPLODE_STEP, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":523 */
-  __pyx_1 = PyInt_FromLong(RECODE_STRATEGY_UNDECIDED); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_STRATEGY_UNDECIDED, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":481 */
+  __pyx_1 = PyInt_FromLong(RECODE_STRATEGY_UNDECIDED); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_STRATEGY_UNDECIDED, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":524 */
-  __pyx_3 = PyInt_FromLong(RECODE_SEQUENCE_IN_MEMORY); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_SEQUENCE_IN_MEMORY, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":482 */
+  __pyx_3 = PyInt_FromLong(RECODE_SEQUENCE_IN_MEMORY); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_SEQUENCE_IN_MEMORY, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":525 */
-  __pyx_2 = PyInt_FromLong(RECODE_SEQUENCE_WITH_FILES); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_SEQUENCE_WITH_FILES, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":483 */
+  __pyx_2 = PyInt_FromLong(RECODE_SEQUENCE_WITH_FILES); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_SEQUENCE_WITH_FILES, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":526 */
-  __pyx_1 = PyInt_FromLong(RECODE_SEQUENCE_WITH_PIPE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_SEQUENCE_WITH_PIPE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":484 */
+  __pyx_1 = PyInt_FromLong(RECODE_SEQUENCE_WITH_PIPE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_SEQUENCE_WITH_PIPE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":528 */
-  __pyx_3 = PyInt_FromLong(RECODE_SWAP_UNDECIDED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_SWAP_UNDECIDED, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":486 */
+  __pyx_3 = PyInt_FromLong(RECODE_SWAP_UNDECIDED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_SWAP_UNDECIDED, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":529 */
-  __pyx_2 = PyInt_FromLong(RECODE_SWAP_NO); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_SWAP_NO, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":487 */
+  __pyx_2 = PyInt_FromLong(RECODE_SWAP_NO); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_SWAP_NO, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":530 */
-  __pyx_1 = PyInt_FromLong(RECODE_SWAP_YES); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_SWAP_YES, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":488 */
+  __pyx_1 = PyInt_FromLong(RECODE_SWAP_YES); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_SWAP_YES, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":532 */
-  __pyx_3 = PyInt_FromLong(RECODE_NO_ERROR); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_NO_ERROR, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":490 */
+  __pyx_3 = PyInt_FromLong(RECODE_NO_ERROR); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_NO_ERROR, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":533 */
-  __pyx_2 = PyInt_FromLong(RECODE_NOT_CANONICAL); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_NOT_CANONICAL, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":491 */
+  __pyx_2 = PyInt_FromLong(RECODE_NOT_CANONICAL); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_NOT_CANONICAL, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":534 */
-  __pyx_1 = PyInt_FromLong(RECODE_AMBIGUOUS_OUTPUT); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_AMBIGUOUS_OUTPUT, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":492 */
+  __pyx_1 = PyInt_FromLong(RECODE_AMBIGUOUS_OUTPUT); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_AMBIGUOUS_OUTPUT, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":535 */
-  __pyx_3 = PyInt_FromLong(RECODE_UNTRANSLATABLE); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_UNTRANSLATABLE, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":493 */
+  __pyx_3 = PyInt_FromLong(RECODE_UNTRANSLATABLE); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_UNTRANSLATABLE, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":536 */
-  __pyx_2 = PyInt_FromLong(RECODE_INVALID_INPUT); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_INVALID_INPUT, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":494 */
+  __pyx_2 = PyInt_FromLong(RECODE_INVALID_INPUT); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_INVALID_INPUT, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":537 */
-  __pyx_1 = PyInt_FromLong(RECODE_SYSTEM_ERROR); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_SYSTEM_ERROR, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":495 */
+  __pyx_1 = PyInt_FromLong(RECODE_SYSTEM_ERROR); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_SYSTEM_ERROR, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":538 */
-  __pyx_3 = PyInt_FromLong(RECODE_USER_ERROR); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_USER_ERROR, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":496 */
+  __pyx_3 = PyInt_FromLong(RECODE_USER_ERROR); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_USER_ERROR, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":539 */
-  __pyx_2 = PyInt_FromLong(RECODE_INTERNAL_ERROR); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_INTERNAL_ERROR, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":497 */
+  __pyx_2 = PyInt_FromLong(RECODE_INTERNAL_ERROR); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_INTERNAL_ERROR, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":540 */
-  __pyx_1 = PyInt_FromLong(RECODE_MAXIMUM_ERROR); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_MAXIMUM_ERROR, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":498 */
+  __pyx_1 = PyInt_FromLong(RECODE_MAXIMUM_ERROR); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_MAXIMUM_ERROR, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":542 */
-  __pyx_3 = PyInt_FromLong(RECODE_NO_FORMAT); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_NO_FORMAT, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":500 */
+  __pyx_3 = PyInt_FromLong(RECODE_NO_FORMAT); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_NO_FORMAT, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":543 */
-  __pyx_2 = PyInt_FromLong(RECODE_DECIMAL_FORMAT); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_DECIMAL_FORMAT, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":501 */
+  __pyx_2 = PyInt_FromLong(RECODE_DECIMAL_FORMAT); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_DECIMAL_FORMAT, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":544 */
-  __pyx_1 = PyInt_FromLong(RECODE_OCTAL_FORMAT); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_OCTAL_FORMAT, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":502 */
+  __pyx_1 = PyInt_FromLong(RECODE_OCTAL_FORMAT); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_OCTAL_FORMAT, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":545 */
-  __pyx_3 = PyInt_FromLong(RECODE_HEXADECIMAL_FORMAT); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_HEXADECIMAL_FORMAT, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":503 */
+  __pyx_3 = PyInt_FromLong(RECODE_HEXADECIMAL_FORMAT); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_HEXADECIMAL_FORMAT, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":546 */
-  __pyx_2 = PyInt_FromLong(RECODE_FULL_FORMAT); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_FULL_FORMAT, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":504 */
+  __pyx_2 = PyInt_FromLong(RECODE_FULL_FORMAT); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_FULL_FORMAT, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":548 */
-  __pyx_1 = PyInt_FromLong(RECODE_NO_LANGUAGE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_NO_LANGUAGE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":506 */
+  __pyx_1 = PyInt_FromLong(RECODE_NO_LANGUAGE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_NO_LANGUAGE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":549 */
-  __pyx_3 = PyInt_FromLong(RECODE_LANGUAGE_C); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_LANGUAGE_C, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":507 */
+  __pyx_3 = PyInt_FromLong(RECODE_LANGUAGE_C); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_LANGUAGE_C, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":550 */
-  __pyx_2 = PyInt_FromLong(RECODE_LANGUAGE_PERL); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_LANGUAGE_PERL, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":508 */
+  __pyx_2 = PyInt_FromLong(RECODE_LANGUAGE_PERL); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_LANGUAGE_PERL, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":552 */
-  __pyx_1 = PyInt_FromLong(NUL); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_NUL, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":510 */
+  __pyx_1 = PyInt_FromLong(NUL); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_NUL, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":553 */
-  __pyx_3 = PyInt_FromLong(STRIP_SIZE); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_STRIP_SIZE, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":511 */
+  __pyx_3 = PyInt_FromLong(STRIP_SIZE); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_STRIP_SIZE, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":555 */
-  __pyx_2 = PyInt_FromLong(SYMBOL_CREATE_CHARSET); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_SYMBOL_CREATE_CHARSET, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":513 */
+  __pyx_2 = PyInt_FromLong(SYMBOL_CREATE_CHARSET); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_SYMBOL_CREATE_CHARSET, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":556 */
-  __pyx_1 = PyInt_FromLong(SYMBOL_CREATE_DATA_SURFACE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_SYMBOL_CREATE_DATA_SURFACE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":514 */
+  __pyx_1 = PyInt_FromLong(SYMBOL_CREATE_DATA_SURFACE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_SYMBOL_CREATE_DATA_SURFACE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":557 */
-  __pyx_3 = PyInt_FromLong(SYMBOL_CREATE_TREE_SURFACE); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_SYMBOL_CREATE_TREE_SURFACE, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":515 */
+  __pyx_3 = PyInt_FromLong(SYMBOL_CREATE_TREE_SURFACE); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_SYMBOL_CREATE_TREE_SURFACE, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":558 */
-  __pyx_2 = PyInt_FromLong(ALIAS_FIND_AS_CHARSET); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_ALIAS_FIND_AS_CHARSET, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":516 */
+  __pyx_2 = PyInt_FromLong(ALIAS_FIND_AS_CHARSET); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_ALIAS_FIND_AS_CHARSET, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":559 */
-  __pyx_1 = PyInt_FromLong(ALIAS_FIND_AS_SURFACE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_ALIAS_FIND_AS_SURFACE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":517 */
+  __pyx_1 = PyInt_FromLong(ALIAS_FIND_AS_SURFACE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_ALIAS_FIND_AS_SURFACE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":560 */
-  __pyx_3 = PyInt_FromLong(ALIAS_FIND_AS_EITHER); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_ALIAS_FIND_AS_EITHER, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":518 */
+  __pyx_3 = PyInt_FromLong(ALIAS_FIND_AS_EITHER); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_ALIAS_FIND_AS_EITHER, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":562 */
-  __pyx_2 = PyInt_FromLong(DONE); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_xDONE, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":520 */
+  __pyx_2 = PyInt_FromLong(DONE); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_xDONE, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":563 */
-  __pyx_1 = PyInt_FromLong(ELSE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_xELSE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":521 */
+  __pyx_1 = PyInt_FromLong(ELSE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_xELSE, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":565 */
-  __pyx_3 = PyInt_FromLong(REPLACEMENT_CHARACTER); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_REPLACEMENT_CHARACTER, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":523 */
+  __pyx_3 = PyInt_FromLong(REPLACEMENT_CHARACTER); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_REPLACEMENT_CHARACTER, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":566 */
-  __pyx_2 = PyInt_FromLong(NOT_A_CHARACTER); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_NOT_A_CHARACTER, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":524 */
+  __pyx_2 = PyInt_FromLong(NOT_A_CHARACTER); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_NOT_A_CHARACTER, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":567 */
-  __pyx_1 = PyInt_FromLong(BYTE_ORDER_MARK); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_BYTE_ORDER_MARK, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":525 */
+  __pyx_1 = PyInt_FromLong(BYTE_ORDER_MARK); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_BYTE_ORDER_MARK, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":568 */
-  __pyx_3 = PyInt_FromLong(BYTE_ORDER_MARK_SWAPPED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_BYTE_ORDER_MARK_SWAPPED, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":526 */
+  __pyx_3 = PyInt_FromLong(BYTE_ORDER_MARK_SWAPPED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_BYTE_ORDER_MARK_SWAPPED, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; goto __pyx_L1;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":570 */
-  __pyx_2 = PyInt_FromLong(RECODE_AUTO_ABORT_FLAG); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_AUTO_ABORT_FLAG, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":528 */
+  __pyx_2 = PyInt_FromLong(RECODE_AUTO_ABORT_FLAG); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_AUTO_ABORT_FLAG, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; goto __pyx_L1;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":571 */
-  __pyx_1 = PyInt_FromLong(RECODE_NO_ICONV_FLAG); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; goto __pyx_L1;}
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_NO_ICONV_FLAG, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":529 */
+  __pyx_1 = PyInt_FromLong(RECODE_NO_ICONV_FLAG); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; goto __pyx_L1;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_NO_ICONV_FLAG, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; goto __pyx_L1;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":578 */
-  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_False); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":536 */
+  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_False); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; goto __pyx_L1;}
   __pyx_k2 = __pyx_3;
   __pyx_3 = 0;
-  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_False); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; goto __pyx_L1;}
+  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_False); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; goto __pyx_L1;}
   __pyx_k3 = __pyx_2;
   __pyx_2 = 0;
-  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_False); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; goto __pyx_L1;}
+  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_False); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; goto __pyx_L1;}
   __pyx_k4 = __pyx_1;
   __pyx_1 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":622 */
-  __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n_NO_FORMAT); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; goto __pyx_L1;}
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":580 */
+  __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n_NO_FORMAT); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;}
   __pyx_k5 = __pyx_4;
   __pyx_4 = 0;
 
-  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":680 */
+  /* "/bpi/phenix/home/pinard/entretien/recode/tests/Recode.pyx":638 */
   return;
   __pyx_L1:;
   Py_XDECREF(__pyx_1);
index e46348384745aa76423778d9cb1d37c69ed0d0e8..53138d60e4637afbf58e71b758ea09575a9b0a85 100644 (file)
@@ -199,8 +199,8 @@ cdef extern from "common.h":
         unsigned character_count
     ctypedef recode_subtask *RECODE_SUBTASK
 
-    int get_byte 'librecode_get_byte' (RECODE_SUBTASK)
-    void put_byte 'librecode_put_byte' (int, RECODE_SUBTASK)
+    int get_byte (RECODE_SUBTASK)
+    void put_byte (int, RECODE_SUBTASK)
     void SET_SUBTASK_ERROR(recode_error_, RECODE_SUBTASK)
     bool SUBTASK_RETURN(RECODE_SUBTASK)
     void RETURN_IF_NOGO(recode_error_, RECODE_SUBTASK)
@@ -288,23 +288,18 @@ cdef extern from "common.h":
     void *recode_malloc(RECODE_OUTER, size_t)
     void *recode_realloc(RECODE_OUTER, void *, size_t)
 
-    unsigned char *invert_table 'librecode_invert_table' (
-            RECODE_OUTER, unsigned char *)
-    bool complete_pairs 'librecode_complete_pairs' (
-            RECODE_OUTER, RECODE_STEP,
-            recode_known_pair *, unsigned, bool, bool)
-    bool transform_byte_to_ucs2 'librecode_transform_byte_to_ucs2' (
-            RECODE_SUBTASK)
-    bool init_ucs2_to_byte 'librecode_init_ucs2_to_byte' (
-            RECODE_STEP, RECODE_CONST_REQUEST,
-            RECODE_CONST_OPTION_LIST, RECODE_CONST_OPTION_LIST)
-    bool transform_ucs2_to_byte 'librecode_transform_ucs2_to_byte' (
-            RECODE_SUBTASK)
+    unsigned char *invert_table (RECODE_OUTER, unsigned char *)
+    bool complete_pairs (RECODE_OUTER, RECODE_STEP,
+                         recode_known_pair *, unsigned, bool, bool)
+    bool transform_byte_to_ucs2 (RECODE_SUBTASK)
+    bool init_ucs2_to_byte (RECODE_STEP, RECODE_CONST_REQUEST,
+                            RECODE_CONST_OPTION_LIST, RECODE_CONST_OPTION_LIST)
+    bool transform_ucs2_to_byte (RECODE_SUBTASK)
 
     # charname.c and fr-charname.c
 
-    char *ucs2_to_charname 'librecode_ucs2_to_charname' (int)
-    char *ucs2_to_french_charname 'librecode_ucs2_to_french_charname' (int)
+    char *ucs2_to_charname (int)
+    char *ucs2_to_french_charname (int)
 
     # charset.c
 
@@ -316,22 +311,15 @@ cdef extern from "common.h":
         ALIAS_FIND_AS_SURFACE_ 'ALIAS_FIND_AS_SURFACE'
         ALIAS_FIND_AS_EITHER_ 'ALIAS_FIND_AS_EITHER'
 
-    int code_to_ucs2 'librecode_code_to_ucs2' (
-            RECODE_CONST_SYMBOL, unsigned)
-    bool prepare_for_aliases 'librecode_prepare_for_aliases' (
-            RECODE_OUTER)
-    RECODE_ALIAS declare_alias 'librecode_declare_alias' (
-            RECODE_OUTER, char *, char *)
-    bool declare_implied_surface 'declare_implied_surface' (
-            RECODE_OUTER, RECODE_ALIAS, RECODE_CONST_SYMBOL)
-    bool make_argmatch_arrays 'librecode_make_argmatch_arrays' (
-            RECODE_OUTER)
-    RECODE_ALIAS find_alias 'librecode_find_alias' (
-            RECODE_OUTER, char *, alias_find_type)
-    bool find_and_report_subsets 'librecode_find_and_report_subsets' (
-            RECODE_OUTER)
-    bool decode_known_pairs 'librecode_decode_known_pairs' (
-            RECODE_OUTER, char *)
+    int code_to_ucs2 (RECODE_CONST_SYMBOL, unsigned)
+    bool prepare_for_aliases (RECODE_OUTER)
+    RECODE_ALIAS declare_alias (RECODE_OUTER, char *, char *)
+    bool declare_implied_surface (RECODE_OUTER, RECODE_ALIAS,
+                                  RECODE_CONST_SYMBOL)
+    bool make_argmatch_arrays (RECODE_OUTER)
+    RECODE_ALIAS find_alias (RECODE_OUTER, char *, alias_find_type)
+    bool find_and_report_subsets (RECODE_OUTER)
+    bool decode_known_pairs (RECODE_OUTER, char *)
 
     # combine.c
 
@@ -339,54 +327,40 @@ cdef extern from "common.h":
         DONE
         ELSE_ 'ELSE'
 
-    bool init_explode 'librecode_init_explode' (
-            RECODE_STEP, RECODE_CONST_REQUEST,
-            RECODE_CONST_OPTION_LIST, RECODE_CONST_OPTION_LIST)
-    bool explode_byte_byte 'librecode_explode_byte_byte' (
-            RECODE_SUBTASK)
-    bool explode_ucs2_byte 'librecode_explode_ucs2_byte' (
-            RECODE_SUBTASK)
-    bool explode_byte_ucs2 'librecode_explode_byte_ucs2' (
-            RECODE_SUBTASK)
-    bool explode_ucs2_ucs2 'librecode_explode_ucs2_ucs2' (
-            RECODE_SUBTASK)
-
-    bool init_combine 'librecode_init_combine' (
-            RECODE_STEP, RECODE_CONST_REQUEST,
-            RECODE_CONST_OPTION_LIST, RECODE_CONST_OPTION_LIST)
-    bool combine_byte_byte 'librecode_combine_byte_byte' (
-            RECODE_SUBTASK)
-    bool combine_ucs2_byte 'librecode_combine_ucs2_byte' (
-            RECODE_SUBTASK)
-    bool combine_byte_ucs2 'librecode_combine_byte_ucs2' (
-            RECODE_SUBTASK)
-    bool combine_ucs2_ucs2 'librecode_combine_ucs2_ucs2' (
-            RECODE_SUBTASK)
+    bool init_explode (RECODE_STEP, RECODE_CONST_REQUEST,
+                       RECODE_CONST_OPTION_LIST, RECODE_CONST_OPTION_LIST)
+    bool explode_byte_byte (RECODE_SUBTASK)
+    bool explode_ucs2_byte (RECODE_SUBTASK)
+    bool explode_byte_ucs2 (RECODE_SUBTASK)
+    bool explode_ucs2_ucs2 (RECODE_SUBTASK)
+
+    bool init_combine (RECODE_STEP, RECODE_CONST_REQUEST,
+                       RECODE_CONST_OPTION_LIST, RECODE_CONST_OPTION_LIST)
+    bool combine_byte_byte (RECODE_SUBTASK)
+    bool combine_ucs2_byte (RECODE_SUBTASK)
+    bool combine_byte_ucs2 (RECODE_SUBTASK)
+    bool combine_ucs2_ucs2 (RECODE_SUBTASK)
 
     # freeze.c
 
-    void recode_freeze_tables 'librecode_recode_freeze_tables' (
-            RECODE_OUTER)
+    void recode_freeze_tables (RECODE_OUTER)
 
     # iconv.c
 
-    bool transform_with_iconv 'librecode_transform_with_iconv' (
-            RECODE_SUBTASK)
+    bool transform_with_iconv (RECODE_SUBTASK)
 
     # localcharset.c
 
-    char *locale_charset 'librecode_locale_charset' ()
+    char *locale_charset ()
 
     # names.c
 
-    bool should_prefer_french 'librecode_should_prefer_french' ()
+    bool should_prefer_french ()
 
     # mixed.c
 
-    bool transform_c_source 'librecode_transform_c_source' (
-            RECODE_TASK)
-    bool transform_po_source 'librecode_transform_po_source' (
-            RECODE_TASK)
+    bool transform_c_source (RECODE_TASK)
+    bool transform_po_source (RECODE_TASK)
 
     # outer.c
 
@@ -395,17 +369,13 @@ cdef extern from "common.h":
             RECODE_CONST_OPTION_LIST, RECODE_CONST_OPTION_LIST)
     ctypedef bool (*declare_single_Arg6)(RECODE_SUBTASK)
 
-    bool reversibility 'librecode_reversibility' (
-            RECODE_SUBTASK, unsigned)
-    RECODE_SINGLE declare_single 'librecode_declare_single' (
+    bool reversibility (RECODE_SUBTASK, unsigned)
+    RECODE_SINGLE declare_single (
             RECODE_OUTER, char *, char *, recode_quality,
             declare_single_Arg5, declare_single_Arg6)
-    bool declare_iconv 'librecode_declare_iconv' (
-            RECODE_OUTER, char *, char *)
-    bool declare_explode_data 'librecode_declare_explode_data' (
-            RECODE_OUTER, unsigned short *, char *, char *)
-    bool declare_strip_data 'librecode_declare_strip_data' (
-            RECODE_OUTER, strip_data *, char *)
+    bool declare_iconv (RECODE_OUTER, char *, char *)
+    bool declare_explode_data (RECODE_OUTER, unsigned short *, char *, char *)
+    bool declare_strip_data (RECODE_OUTER, strip_data *, char *)
 
     # pool.c
 
@@ -413,25 +383,19 @@ cdef extern from "common.h":
 
     # request.c
 
-    char *edit_sequence 'librecode_edit_sequence' (
-            RECODE_REQUEST, bool)
+    char *edit_sequence (RECODE_REQUEST, bool)
 
     # rfc1345.c
 
-    char *ucs2_to_rfc1345 'librecode_ucs2_to_rfc1345' (
-            recode_ucs2)
+    char *ucs2_to_rfc1345 (recode_ucs2)
 
     # task.c
 
-    int get_byte_helper 'librecode_get_byte_helper' (
-            RECODE_SUBTASK)
-    void put_byte_helper 'librecode_put_byte_helper' (
-            int, RECODE_SUBTASK)
+    int get_byte_helper (RECODE_SUBTASK)
+    void put_byte_helper (int, RECODE_SUBTASK)
     bool recode_if_nogo(recode_error_, RECODE_SUBTASK)
-    bool transform_byte_to_byte 'librecode_transform_byte_to_byte' (
-            RECODE_SUBTASK)
-    bool transform_byte_to_variable 'librecode_transform_byte_to_variable' (
-            RECODE_SUBTASK)
+    bool transform_byte_to_byte (RECODE_SUBTASK)
+    bool transform_byte_to_variable (RECODE_SUBTASK)
 
     # ucs.c
 
@@ -441,14 +405,10 @@ cdef extern from "common.h":
         BYTE_ORDER_MARK_ 'BYTE_ORDER_MARK'
         BYTE_ORDER_MARK_SWAPPED_ 'BYTE_ORDER_MARK_SWAPPED'
 
-    bool get_ucs2 'librecode_get_ucs2' (
-            unsigned *, RECODE_SUBTASK)
-    bool get_ucs4 'librecode_get_ucs4' (
-            unsigned *, RECODE_SUBTASK)
-    bool put_ucs2 'librecode_put_ucs2' (
-            unsigned, RECODE_SUBTASK)
-    bool put_ucs4 'librecode_put_ucs4' (
-            unsigned, RECODE_SUBTASK)
+    bool get_ucs2 (unsigned *, RECODE_SUBTASK)
+    bool get_ucs4 (unsigned *, RECODE_SUBTASK)
+    bool put_ucs2 (unsigned, RECODE_SUBTASK)
+    bool put_ucs4 (unsigned, RECODE_SUBTASK)
 
     ## Recode library at OUTER level.
 
@@ -458,12 +418,10 @@ cdef extern from "common.h":
 
     RECODE_OUTER recode_new_outer(unsigned)
     bool recode_delete_outer(RECODE_OUTER)
-    bool list_all_symbols 'librecode_list_all_symbols' (
-            RECODE_OUTER, RECODE_CONST_SYMBOL)
-    bool list_concise_charset 'librecode_list_concise_charset' (
-            RECODE_OUTER, RECODE_CONST_SYMBOL, recode_list_format)
-    bool list_full_charset 'librecode_list_full_charset' (
-            RECODE_OUTER, RECODE_CONST_SYMBOL)
+    bool list_all_symbols (RECODE_OUTER, RECODE_CONST_SYMBOL)
+    bool list_concise_charset (RECODE_OUTER, RECODE_CONST_SYMBOL,
+                               recode_list_format)
+    bool list_full_charset (RECODE_OUTER, RECODE_CONST_SYMBOL)
 
     # Recode library at REQUEST level.